Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4659973#p4659973"]
ARV писал(а):Avrasm настолько убогое говнище, что я вообще не понимаю, зачем его использовать, если есть avr-as, часть тулчейна avr-gcc. ... Гнутый асм ничем не хуже, уверяю вас!
Роман, простите мою глупость, но как могут отличаться ассемблеры для одной платформы? Система ж команд одинаковая... Или вы имеете ввиду мощность и плюшки препроцессора?
(про себя скажу, что писала на чистом асме в четвертой авр-студии, когда изучала архитектуру АВРок. Потом уже седьмая студия и ассемблерные вставки в Си. На голом асме давно не пишу.)[/uquote]да, плюшки.

Когда-то я был озабочен созданием макроса для сохранения в стеке списка регистров и восстановления их потом оттуда.
Как-то так:
ENTER R6,R11,R24
...
LEAVE

Не всех подряд, а именно списка нужных. Достаточно полезный макрос, согласны? В 51ом асме это реализуется, пусть не просто, но... А в avrasm это попросту невозможно. Кстати, как ни странно, но подобное невозможно и средствами препроцессора Си! Однако, as (gnu as) справляется так же и тем же способом, что и старичок 51й...

Добавлено after 1 minute 50 seconds:
[uquote="BOB51",url="/forum/viewtopic.php?p=4660005#p4660005"]Если уж быть корректным то не "ассемблеры",
а компиляторы ассемблера...
:roll:[/uquote]
Вообще-то как таковой ассемблер именно как компилятор (точнее, транслятор) и следует воспринимать. Де-факто сам язык есть лишь мнемоники команд, т.е. аналоги машинных слов.
Последний раз редактировалось ARV Пт дек 13, 2024 13:49:10, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение OKF »

Дед, читай трансляторы, компиляторы, ассемблеры... и т.п.
Извиняюсь, опередили.)

Добавлено after 11 minutes 6 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=4660009#p4660009"]Однако, as (gnu as) справляется...[/uquote]
А IRP или IRPC он поддерживает? Отож.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

Так, если склероз не подводит, благодаря этим и им подобным макросам-итераторам и удалось мои хотелки реализовать!

Добавлено after 2 minutes:
Кстати: в контексте сайта и форума предлагаю использовать спецтермин мышинное слово :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Starichok51 »

BOB51 писал(а):Команды CPI Rd, Rr в системе команд AVR не существует - какой смысл ее обсуждать то?
так ты же первый написал эту несуществующую фуету.
если ты забыл, то я напомню:
BOB51 писал(а):CPI Rd, Rr...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
AQ29
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Сб июл 30, 2011 21:00:24

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение AQ29 »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4658500#p4658500"]1. Нарисуйте эпюру с нажатием и отпусканием кнопки с дребезгом и наложите на нее опрос с интервалом больше дребезга.
И вы внезапно обнаружите, что захват нажимаемой кнопки во время дребезга НИЧЕМ НЕ ГРОЗИТ…

2. Помех на кнопке кроме дребезга быть не может по определению. Там смещение чистым питанием через резистор порядка 1...10 кОм.
Метод, которым вы создаете интервал опроса значения не имеет. Но интервал создаваемый таймером выглядит куртуазнее. И не нужно обрабатывать захват в прерывании от таймера. Достаточно просто захватить порт и выставить флаг требования обработки. Хотя и в прерывании по таймеру обработка тоже не сильно тяготит.[/uquote]

1 Сомнительно, что дребезг ничем не грозит.
Рассмотрим случай, когда есть режим нажатия на 2 кнопки. У второй кнопки свой режим.
Вы нажали на 2 кнопки. Первая кнопка из-за дребезга была прочитана, как не нажатая, вторую, как нажатая. Соответственно, перешли на режим второй кнопки. Это ошибка, очень плохо. Жмёшь одно, получаешь другое.
В моём варианте такого нет.
Разработал свой алгоритм давно, решил проверить. Программа простая, написать – несколько минут, макетные платы есть.
Работает чётко, даже когда вторую кнопку нажимаю чуть-чуть раньше первой, читается, как нажатые две кнопки.

2 Сомнительно, что помех не может быть по определению.
Обычно питание от сети 220 вольт. В сети бывают короткие даже киловольтовые импульсы. Даже если у вас на столе не было сбоев, не факт, что у пользователя их не будет.
Проверку на сбои из-за помех надо проводить согласно ГОСТу, а не доверяться «определению».
А с такими испытаниями были проблемы. Полноценное оборудование для такой проверки стоит дорого даже для завода. Можно заказать испытание аппарата, но это тоже стоит дорого. Каждый раз после доработки заказывать испытание – в трубу вылетишь.
Может быть, сейчас ситуация лучше, не знаю.
В этом плане программная защита – хороший простой и бесплатный вариант.
Программа простая, фактически несколько ассемблерных команд плюс задержка. Для последней обычно использую программную задержку, это будет всего одна команда: Delay 30 ms.
В ассемблере, который из прошлого века, такой команды нет, но тогда у разработчика в арсенале должны быть программы задержки.
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4658498#p4658498"]
AQ29 писал(а):На фоне решения Adrift табличный вариант выглядит чудовищной растратой памяти. Но СИ-шникам, похоже, такие растраты привычны
Ну куда уж нам всем.... Главное - нужно применять современный супер-пупер-турбо-ассемблер.
Тогда алгоритмы сами пишутся.
Так вот, решение должно быть в голове. А только потом уже переложено на язык программирования. И не важно, какой это язык будет. И если есть задача выжать из кода максимум быстродействия - то и на асме можно применить табличное решение. Это ценой расхода ОЗУ/флеша сэкономит пару тактов.[/uquote]
Насчёт того, что алгоритмы сами пишутся – это, конечно, перебор.
Но если на другом языке программу писать в разы удобнее, и при этом он почти не увеличивает код и не замедляет программу, он будет лучше.
В этом плане, на мой взгляд, выбор языка важен.

Сомнительно, что для вашей второй задачи табличный вариант сэкономит пару тактов.
Как я представляю, в табличном варианте надо прочитать байт из флеша. Но это долгая операция. Для этого вроде как надо записать в регистры Z начальный адрес таблицы и прибавить байт. Это будет 4 команды. Плюс команда LPM, получается 5 команд, как и в решении Adrift. Но LPM – длительная команда, 3 цикла, так что вроде как табличный вариант проигрывает.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shonty »

AQ29 писал(а):Первая кнопка из-за дребезга была прочитана, как не нажатая, вторую, как нажатая.
Сомневаюсь, что при максимальной частоте опроса какая-то кнопка будет прочитана как ненажатая.

Поймали нажатие -> ушли на выполнение..
Вернулись, закинули удочку, ждём дальше))

Добавлено after 5 minutes 45 seconds:
слово вспоминали? "интерпретатор" (ассемблера) - вроде оно))
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

[uquote="AQ29",url="/forum/viewtopic.php?p=4660041#p4660041"]...[/uquote]
Не бывает в реальном мире ничего одновременного. Если нажатия двух кнопок у вас воспринимаются, как одно одновременное, есть какой-то подвох: либо всё не так, как вы говорите, либо реакция на нажатия у вас тормозная, т.е. как минимум время дребезга ОБОИХ кнопок вы ждете.

Однако, при правильном алгоритме обработки нажатий нет никакой проблемы в неодновременности... Т.е. решение проблемы, имхо, следует делать уже на верхнем уровне, а на нижнем тупо опрашивать состояние, как рекомендовал КРАМ, и я с ним согласен 100%
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение КРАМ »

[uquote="AQ29",url="/forum/viewtopic.php?p=4660041#p4660041"]1 Сомнительно, что дребезг ничем не грозит.
Рассмотрим случай, когда есть режим нажатия на 2 кнопки. У второй кнопки свой режим.
Вы нажали на 2 кнопки. Первая кнопка из-за дребезга была прочитана, как не нажатая, вторую, как нажатая. Соответственно, перешли на режим второй кнопки. Это ошибка, очень плохо. Жмёшь одно, получаешь другое.[/uquote]
Вы пишите чушь. Вы никогда не нажмете кнопки одновременно. Поэтому этот режим должен обслуживаться с неким временнЫм окном позволяющим некоторую неодновременность. Все это не имеет к дребезгу никакого отношения. Все на самом деле очень просто. Читая состояние кнопок с интервалом больше дребезга, вы получаете защиту от дребезга. А дальше обрабатываете эти состояния так. как это вам нужно. Так что:
[uquote="AQ29",url="/forum/viewtopic.php?p=4660041#p4660041"]В моём варианте такого нет.[/uquote]
В моем тоже.
[uquote="AQ29",url="/forum/viewtopic.php?p=4660041#p4660041"]2 Сомнительно, что помех не может быть по определению.
Обычно питание от сети 220 вольт. В сети бывают короткие даже киловольтовые импульсы. Даже если у вас на столе не было сбоев, не факт, что у пользователя их не будет.[/uquote]
Это определяется топологией платы и шлейфов, а не тупыми попытками защиты при отвратительной схемотехнике.
С чего бы помехе не быть 50 или 100 Гц?
Или импульсной, но с некоей частотой повторения и прохождением через высшие зоны Найквиста.
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение OKF »

Да пофигу, что на нажнем, что на верхнем уровне.) Иной раз нужно поменьше (в размере) только и всего.

Добавлено after 3 minutes 7 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4660072#p4660072"][uquote="AQ29",url="/forum/viewtopic.php?p=4660041#p4660041"]1 Сомнительно, что дребезг ничем не грозит.
Рассмотрим случай, когда есть режим нажатия на 2 кнопки. У второй кнопки свой режим.
Вы нажали на 2 кнопки. Первая кнопка из-за дребезга была прочитана, как не нажатая, вторую, как нажатая. Соответственно, перешли на режим второй кнопки. Это ошибка, очень плохо. Жмёшь одно, получаешь другое.[/uquote]
Вы прикалыветесь? Или же далеки от людей.)
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Снова в "антидребезг" да кнопы вцепились.
Уж точно оно того не стоит.
:tea:
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение OKF »

BOBa, не тошни.)
Аватара пользователя
главный колбасист
Это не хвост, это антенна
Сообщения: 1322
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение главный колбасист »

А если напряжение на кнопку подавать только во время считывания? Наподобие как это делается в динамической клавиатуре. Нету напряжения,нету дребезга.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Так это и есть "совмещённая" с опросом кнопок динамическая развёртка.
8)
Только "дребезг" там также присутствует - алгоритм устранения как раз на таймере развёртки строки и базируется.
8)
Аватара пользователя
главный колбасист
Это не хвост, это антенна
Сообщения: 1322
Зарегистрирован: Чт авг 21, 2014 11:11:48
Откуда: краснодарский край
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение главный колбасист »

Я думал,порт включен на вход,а на кнопку постоянно питание подаётся через подтягивающий резистор.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Но механику контакта никто не отменял.
Другое дело использование не механических преобразователей - оптика, магнитное поле, емкостные и/или с уже установленными "подавителями" на электронных схемках. Эти генерируют уже чистый сигнал. Просто лишние затраты аппаратной схемотехники.
Да и механика контактов может потребоваться более сложная (перекидной контакт при R-S триггере на половинке 155ла3 к примеру).
Но это не тема обсуждения ассемблера.
:sleep:
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Adrift »

[uquote="AQ29",url="/forum/viewtopic.php?p=4660041#p4660041"]Разработал свой алгоритм давно, решил проверить. Программа простая, написать – несколько минут, макетные платы есть.
Работает чётко, даже когда вторую кнопку нажимаю чуть-чуть раньше первой, читается, как нажатые две кнопки.[/uquote]
Намудрили вы со своим алгоритмом ) Допустим нужно детектить новое состояние кнопок не по трем, а по 10-ти одинаковым значениям считанным с порта, тогда можно написать что-то типа такого, вы же будете читать эти значения в 10 переменных и потом сравнивать между собой...

Код: Выделить всё

cur = IDR;
if(cur != prev)
{
    prev = cur;
    cnt = 0;
    return;
}

if(++cnt >= 9)  ...
А с тремя переменными код будет, примерно, такой:

Код: Выделить всё

c = IDR;
if(a != b || a != c)
{
    a = b;
    b = c;
    return;
}
....
В обоих случаях между состоянияни нужно помнить по две переменные и если ваш вариант и проще, то минимально, но зато он не масштабируется. Далее, у вас между вызовами должно быть 30ms, а вызывается функция не в прерывании, а основном цикле, с заранее не известными и изменяющими интервалами времени. Как этого добиться? И зачем? По сути считав 3 раза одинаковое значение вы просто удостоверились, что как минимум 60 ms состояние кнопок не менялось, соответственно и считать лучше время, просто добавляете к счетчику число ms пройденных с момента предыдущего вызова и тогда без разницы вызывается функция в прерывании через фиксированные промежутки времени(тогда можно просто константу прибавлять), в загруженном цикле или пустом. Ах да, у вас же нет счетчика )

ps. Не уверен, но 60ms может быть маловато чтобы уверенно детектить короткое одновременное нажатие двух кнопок. С длинными нажатиями то проблем не будет...
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение BOB51 »

Млин!!!
Это ж тема про АССЕМБЛЕР!!!
Версии под Си и /или адуринку в других темах.
:tea:
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Adrift »

[uquote="BOB51",url="/forum/viewtopic.php?p=4660658#p4660658"]Млин!!!
Это ж тема про АССЕМБЛЕР!!![/uquote]
Смотрите шире. Это не С, это псевдокод!!! )
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ARV »

[uquote="Adrift",url="/forum/viewtopic.php?p=4660662#p4660662"][uquote="BOB51",url="/forum/viewtopic.php?p=4660658#p4660658"]Млин!!!
Это ж тема про АССЕМБЛЕР!!![/uquote]
Смотрите шире. Это не С, это псевдокод!!! )[/uquote]если перевести это на русский, будет "да мне насрать!"
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Just_Fluffy »

Да пофиг, про что тема - 5 страниц обжевываем АЛГОРИТМЫ.... Хотя по алгоритмам обработки нажатий на кнопки есть отдельная тема. Ссылку давала раньше...
Роман, может придумайте еще какой то конкурс/вопрос, что б вернуть тему в русло ассемблера? Типа впихнуть FatFS в Tiny13 ? ))
Белая и Пушистая
Ответить

Вернуться в «AVR»