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

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

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

Сообщение ARV »

Just_Fluffy писал(а):может придумайте еще какой то конкурс/вопрос, что б вернуть тему в русло ассемблера?
это на самом деле никому не нужно, т.к. искусство ради искусства никого не интересует: профессионалы ушли в мир 32-битников, любителям не до искусства...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

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

Сообщение Adrift »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4660674#p4660674"]Типа впихнуть FatFS в Tiny13 ? ))[/uquote]
Ладно tiny13, FatFs на ассме вообще в природе существует? )
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15544
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

ARV
Я попытался предложить вариант близкий по теме - но похоже "был послан"...
:sleep:
Интерес к "древним языкам" и любительству давно уже пропал - сегодня ИИ рулит.
Закон природы.
8)
Последний раз редактировалось BOB51 Вс дек 15, 2024 15:31:34, всего редактировалось 1 раз.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Что есть FatFS?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15544
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Видимо имелась ввиду работа с микро CD картами под ассемблером.
8)
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Тогда давайте лучше минимальный контроллер для TCP-IP с внешней физикой)

На самом деле всё это (задачки на АСМе) описаны во всяких аппнотах.

С ПЛИСами интереснее - там реально можно делать одни и те же вещи с разным количеством занятых ресурсов и разным быстродействием.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Огонёк
Опытный кот
Сообщения: 752
Зарегистрирован: Вт авг 27, 2024 19:11:47

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

Сообщение Огонёк »

BOB51 писал(а):сегодня ИИ рулит.
Пока ещё нет. Но людей, желающих самостоятельно определять, решать и чем-то напрягаться, всё меньше. В смартфоне должна быть кнопка "Сделать заебись!" - и она появится. Так что скайнет не за такими уж и высокими горами...
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15544
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

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

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

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

Огонёк писал(а):В смартфоне должна быть кнопка "Сделать заебись!" - и она появится.
Уже давно есть.
http://button.dekel.ru/
AQ29
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Сб июл 30, 2011 21:00:24

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

Сообщение AQ29 »

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

Однако, при правильном алгоритме обработки нажатий нет никакой проблемы в неодновременности... Т.е. решение проблемы, имхо, следует делать уже на верхнем уровне, а на нижнем тупо опрашивать состояние, как рекомендовал КРАМ, и я с ним согласен 100%[/uquote]
Время дребезга обоих кнопок и даже больше ожидаю. Программа притормозит, но при опросе кнопок это, как правило, несущественно.
Но зато, несмотря на дребезг, выдаст правильный отсчёт «на нижнем уровне».
[uquote="КРАМ",url="/forum/viewtopic.php?p=4660072#p4660072"]Вы пишите чушь. Вы никогда не нажмете кнопки одновременно. Поэтому этот режим должен обслуживаться с неким временнЫм окном позволяющим некоторую неодновременность. Все это не имеет к дребезгу никакого отношения. Все на самом деле очень просто. Читая состояние кнопок с интервалом больше дребезга, вы получаете защиту от дребезга. А дальше обрабатываете эти состояния так. как это вам нужно.[/uquote]
Причём тут «вы никогда не нажмёте кнопки одновременно». Скажем, программа ходит по кругу с интервалом 10 мс. Дребезг длится 20 мс. При одном считывании кнопок с большой вероятностью попадёте на дребезг, независимо от того, нажали одновременно или не очень.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4660072#p4660072"][uquote="AQ29",url="/forum/viewtopic.php?p=4660041#p4660041"]2 Сомнительно, что помех не может быть по определению.
Обычно питание от сети 220 вольт. В сети бывают короткие даже киловольтовые импульсы. Даже если у вас на столе не было сбоев, не факт, что у пользователя их не будет.[/uquote]
Это определяется топологией платы и шлейфов, а не тупыми попытками защиты при отвратительной схемотехнике.
С чего бы помехе не быть 50 или 100 Гц?
Или импульсной, но с некоей частотой повторения и прохождением через высшие зоны Найквиста.[/uquote]
Я писал про помехи от сети 220 вольт.
Помехи 50 или 100 Гц несущественны. Это медленное изменение сетевого напряжения, оно должно укладываться по напряжению в 10 %.
Обычно питание от импульсного источника, а он будет выдавать стабильное выходное напряжение несмотря на такие пульсации входного.
А вот киловольтные выбросы в сети – другое дело. Из-за крутых фронтов они могут пройти через силовой трансформатор. Бороться с ними не совсем просто. Видел плату источника от серьёзного аппарата, где на входе стояли фильтры, занимающие на печатной плате почти столько же места, сколько и сам источник питания.
Нужны, конечно, и правильная остальная схемотехника.
Программная защита от помех – дополнительная, не занимает места и не стоит ничего, зачем от неё отказываться.

[uquote="Adrift",url="/forum/viewtopic.php?p=4660647#p4660647"]Намудрили вы со своим алгоритмом ) Допустим нужно детектить новое состояние кнопок не по трем, а по 10-ти одинаковым значениям считанным с порта, тогда можно написать что-то типа такого, вы же будете читать эти значения в 10 переменных и потом сравнивать между собой...[/uquote]
Где же намудрил, это простенькая подпрограмма (называется, например, Read_Key), вызываемая в основном цикле.
На ассемблере для порта С будет:
Public Sub Read_Key
Cikl:
IN r0, PINC
Delay 30 ms
IN r1, PINC
If r0 <> r1 Then Goto Cikl
Delay 30 ms
IN r2, PINC
If r0 <> r2 Then Goto Cikl
End_Sub
Условие If можно заменить на команды CP и BRNE.
На практике есть ещё команды удаления неиспользуемых битов.
Помнить переменные не нужно, они внутри Read_Key. На выходе только регистр r0, в котором результат.
Зачем 10 отсчётов, когда достаточно 3, чтобы избавиться от дребезга.
Длительность цикла может меняться, но с этим вроде как нет проблем. Какая разница, длится цикл 1 мс или 10 мс. Кнопки чаще или реже будут опрашиваться. Длительность цикла можно измерить.
Если совсем долгий цикл, например, 1 сек (бывает ли такое?), можно Read_Key вставить в нескольких местах цикла.
Здесь прерывание не использую, предпочитаю применять его только при особой необходимости.
Пробовал одновременное нажатие двух кнопок, проблем не было. В принципе, при проблеме можно вместо 30 мс проверить, например, 40 мс, минутное дело.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

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

Сообщение Adrift »

[uquote="AQ29",url="/forum/viewtopic.php?p=4661242#p4661242"]Где же намудрил, это простенькая подпрограмма (называется, например, Read_Key), вызываемая в основном цикле.
На ассемблере для порта С будет:
СпойлерPublic Sub Read_Key
Cikl:
IN r0, PINC
Delay 30 ms
IN r1, PINC
If r0 <> r1 Then Goto Cikl
Delay 30 ms
IN r2, PINC
If r0 <> r2 Then Goto Cikl
End_Sub
[/uquote]
Эта простенькая программка по факту намного хуже, чем я предполагал, т.к. внутри просто задержка минимум 60 ms, вместо ожидаемой ~1us ) И почему в ней goto в начало прыгает? Это прям максимально плохой алгоритм, на грани абсурда )
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

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

[uquote="AQ29",url="/forum/viewtopic.php?p=4661242#p4661242"]Скажем, программа ходит по кругу с интервалом 10 мс. Дребезг длится 20 мс.[/uquote]
А если программа ходит по кругу с интервалом 100 мкс? :facepalm:
А если 100 мс?
Вы делаете все, чтобы создать проблему и героически ее решить. Нучо, бывает... :)))
Опрос кнопок делают с таймерным интервалом. Всегда найдется таймер, способный создать необходимый период заодно с иной решаемой им задачей.
Куртуазно вообще выделять специальный системный таймерный интервал для опроса, миганий и прочих относительно медленных событий.
[uquote="AQ29",url="/forum/viewtopic.php?p=4661242#p4661242"]Я писал про помехи от сети 220 вольт.
Помехи 50 или 100 Гц несущественны. Это медленное изменение сетевого напряжения, оно должно укладываться по напряжению в 10 %.[/uquote]
Вы даже не понимаете о чем я говорю... :facepalm:
Дело не в частоте ОСНОВНОЙ ГАРМОНИКИ помех. Дело в ее спектре.
И при работе преобразователей киловольтовые помехи ИМЕЮТ НЕКОТОРУЮ ЧАСТОТУ ПОВТОРЕНИЙ. Это не коммутационная помеха от реле раз в сутки. Это регулярная помеха, способная попасть в зону Найквиста и никакие ваши доморощенные "алгоритмы" ее не отфильтруют. Строго по законам математики.
Поэтому ваши рассказы не стоят времени, которое вы потратили на их написание.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15544
Зарегистрирован: Вт мар 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=4661340#p4661340"]решений может быть огромное множество и в каждом случае для именно того случая верных.[/uquote]
Если человек не мазохист, то в идеале огромное множество решений нужно стараться сводить к одному универсальному и написанному заранее на все случаи жизни )

[uquote="BOB51",url="/forum/viewtopic.php?p=4660943#p4660943"]Для программ под ассемблером остается раздел устройств периферийных контроллеров в смешанных конструкциях и простейших прикладных устройствах.[/uquote]
Есть еще всякие Pico, где основную программу можно хоть на python написать, при этом на ассме для PIO пишутся фрагменты где нужны точные тайминги. Вчера только дисплей с 8-ми битной шиной к RP2350 подключал, накидал(пока не идеальную) программку которая за 3 такта байт отправляет дергая WR и DC:
Спойлер

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

            .side_set 2 opt
            .out 8 right auto 32
            .y = 0xAAAA'BBBB
            .define DataSetupWr 0

            mov pindirs,~null   

.wrap_target
loop:       out x,32        side 0b11   ; WR/DC
            jmp x != y, if_data
            out pins,32     side 0b00   [DataSetupWr]
            jmp loop        side 0b10

if_data:    mov pins,x      side 0b01   [DataSetupWr]
.wrap
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15544
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

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

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

Сообщение Just_Fluffy »

Тащемто для опроса кнопок и алгоритмов оного тоже есть отдельная тема....
А тут ассемблер )))) Будем разжевывать друг другу, чем SEI отличается от BSET 7
Белая и Пушистая
AQ29
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Сб июл 30, 2011 21:00:24

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

Сообщение AQ29 »

[uquote="Adrift",url="/forum/viewtopic.php?p=4661252#p4661252"]Эта простенькая программка по факту намного хуже, чем я предполагал, т.к. внутри просто задержка минимум 60 ms, вместо ожидаемой ~1us ) И почему в ней goto в начало прыгает? Это прям максимально плохой алгоритм, на грани абсурда )[/uquote]
Алгоритм не самый оптимальный для поиска трёх верных отсчётов, это верно, но он простой. Написал, когда был начинающим, и далее не оптимизировал. Но для работы это не существенно.
Задержка 60 мс при работе с человеком тоже несущественна. В этой ситуации МК не решает скоростные задачи.
Если всё же надо быстро выскочить из программы, есть ведь задержки с флагом. При установке флага можно выскочить из программы, наверно, тоже где-то за 1 мкс.
Плюс программы – не нужен таймер и работа с кнопками в контролируемом месте.
Можно и по таймеру сделать, это сложнее, зачем.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4661299#p4661299"]А если программа ходит по кругу с интервалом 100 мкс? :facepalm:
А если 100 мс?
Вы делаете все, чтобы создать проблему и героически ее решить. Нучо, бывает... :)))
Опрос кнопок делают с таймерным интервалом. Всегда найдется таймер, способный создать необходимый период заодно с иной решаемой им задачей.
Куртуазно вообще выделять специальный системный таймерный интервал для опроса, миганий и прочих относительно медленных событий.[/uquote]
Что делать, если программа долго ходит по кругу – уже писал.
Если быстро – тоже нет проблем. Иногда на макетной плате после старта программа только опрашивала кнопки, больше ничего. Это основной круг с интервалом 0 мкс, никаких проблем.
У меня простенькая программа на десяток минут, а вы называете её решение героическим. Планка героического решения явно занижена.
Далеко не всегда найдётся таймер. Я, наверно, никогда не использовал системный таймер, ни к чему.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4661299#p4661299"]Вы даже не понимаете о чем я говорю... :facepalm:
Дело не в частоте ОСНОВНОЙ ГАРМОНИКИ помех. Дело в ее спектре.
И при работе преобразователей киловольтовые помехи ИМЕЮТ НЕКОТОРУЮ ЧАСТОТУ ПОВТОРЕНИЙ. Это не коммутационная помеха от реле раз в сутки. Это регулярная помеха, способная попасть в зону Найквиста и никакие ваши доморощенные "алгоритмы" ее не отфильтруют. Строго по законам математики.
Поэтому ваши рассказы не стоят времени, которое вы потратили на их написание.[/uquote]
У вас какой-то надуманный пример. Что это за преобразователь, создающий киловольтные помехи?
Во-первых, импульсные источники питания в изделии коммутируют 300 вольт (питание 220 вольт).
Во-вторых, такие источники помещают в экран, на входе и выходе ставят требуемый фильтры. На выходе получают чистое отфильтрованное постоянное напряжение, откуда киловольты.
Я писал про помехи от сети 220 вольт, это широко распространено. Подавлять помехи надо, в первую очередь, средствами схемотехники. Программная защита – дополнительная, она не должна закрывать огрехи схемотехники. В этом плане зоны Найквиста для программы ни к чему. Кстати, сталкивался, программная защита бывает эффективной, но это другая тема.
Я согласен с ВОВ51 про обсуждение конкретного проекта. Я высказался в общем плане, что программная защита – простая и бесплатная.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

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

[uquote="AQ29",url="/forum/viewtopic.php?p=4661724#p4661724"]Далеко не всегда найдётся таймер. Я, наверно, никогда не использовал системный таймер, ни к чему.[/uquote]
Таймер найдется всегда. Если он вообще есть в МК. На крайняк это может быть 100 Гц сети заведенные на внешнее прерывание. Делать плавающий опрос - это очень плохая идея. Как правило, клавиатуры/кнопки сопровождают светодиоды, которые тоже традиционно мультиплексированы. Опрос традиционно общий.
Вы пытаетесь доморощенное частное решение пропагандировать как верное. Еще раз повторю - это смешно.
Вопрос с помехами даже не буду комментировать. Ваши фантазии - они только ваши фантазии.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

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

Сообщение Adrift »

[uquote="AQ29",url="/forum/viewtopic.php?p=4661724#p4661724"]Алгоритм не самый оптимальный для поиска трёх верных отсчётов, это верно, но он простой. Написал, когда был начинающим, и далее не оптимизировал. Но для работы это не существенно.
Задержка 60 мс при работе с человеком тоже несущественна. В этой ситуации МК не решает скоростные задачи.[/uquote]
У вас основной цикл тормозится на 60ms, а если третье сравнение проваливается, то прыгаем в начало и ждем еще минимум 60ms. Если такое происходит раз в секунду, то 12% производительности потеряно, причем это верно как для 16 MHz AVR, так и для 1GHz ARM. Смысл писать такое на ассме, если интерпретатор бейсика работает быстрее ? ) И что будет вызываться в основном цикле помимо опроса кнопок заранее не известно, далеко не факт, что с паузой 160ms оно будет работать, потому один раз пишется нормальная функция опроса кнопок, которая работает практически всегда.

Добавлено after 3 minutes 24 seconds:
[uquote="AQ29",url="/forum/viewtopic.php?p=4661724#p4661724"]Если всё же надо быстро выскочить из программы, есть ведь задержки с флагом. При установке флага можно выскочить из программы, наверно, тоже где-то за 1 мкс.[/uquote]
Все можно, только теперь ваша программа уже не будет такой простой )
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4661735#p4661735"]Таймер найдется всегда. Если он вообще есть в МК.[/uquote]
Даже если он есть, не всегда он нужен. Если главный цикл шустрый, достаточно использовать типа delay_ms(10) вместо системного тика. Ну и если не нужны точные подсчёты времени. Кажется, уже говорил где то.)
Ответить

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