может придумайте еще какой то конкурс/вопрос, что б вернуть тему в русло ассемблера?
это на самом деле никому не нужно, т.к. искусство ради искусства никого не интересует: профессионалы ушли в мир 32-битников, любителям не до искусства...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
ARV Я попытался предложить вариант близкий по теме - но похоже "был послан"... Интерес к "древним языкам" и любительству давно уже пропал - сегодня ИИ рулит. Закон природы.
Последний раз редактировалось BOB51 Вс дек 15, 2024 15:31:34, всего редактировалось 1 раз.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс дек 15, 2024 15:31:07
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19712 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Что есть FatFS?
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс дек 15, 2024 15:38:46
Друг Кота
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19712 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Тогда давайте лучше минимальный контроллер для TCP-IP с внешней физикой)
На самом деле всё это (задачки на АСМе) описаны во всяких аппнотах.
С ПЛИСами интереснее - там реально можно делать одни и те же вещи с разным количеством занятых ресурсов и разным быстродействием.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Пока ещё нет. Но людей, желающих самостоятельно определять, решать и чем-то напрягаться, всё меньше. В смартфоне должна быть кнопка "Сделать заебись!" - и она появится. Так что скайнет не за такими уж и высокими горами...
Для программ под ассемблером остается раздел устройств периферийных контроллеров в смешанных конструкциях и простейших прикладных устройствах. Пока еще этим направлением мало кто из любителей занимается а зря! Раздел для творчества весьма широк и интересен.
Не бывает в реальном мире ничего одновременного. Если нажатия двух кнопок у вас воспринимаются, как одно одновременное, есть какой-то подвох: либо всё не так, как вы говорите, либо реакция на нажатия у вас тормозная, т.е. как минимум время дребезга ОБОИХ кнопок вы ждете.
Однако, при правильном алгоритме обработки нажатий нет никакой проблемы в неодновременности... Т.е. решение проблемы, имхо, следует делать уже на верхнем уровне, а на нижнем тупо опрашивать состояние, как рекомендовал КРАМ, и я с ним согласен 100%
Время дребезга обоих кнопок и даже больше ожидаю. Программа притормозит, но при опросе кнопок это, как правило, несущественно. Но зато, несмотря на дребезг, выдаст правильный отсчёт «на нижнем уровне».
Вы пишите чушь. Вы никогда не нажмете кнопки одновременно. Поэтому этот режим должен обслуживаться с неким временнЫм окном позволяющим некоторую неодновременность. Все это не имеет к дребезгу никакого отношения. Все на самом деле очень просто. Читая состояние кнопок с интервалом больше дребезга, вы получаете защиту от дребезга. А дальше обрабатываете эти состояния так. как это вам нужно.
Причём тут «вы никогда не нажмёте кнопки одновременно». Скажем, программа ходит по кругу с интервалом 10 мс. Дребезг длится 20 мс. При одном считывании кнопок с большой вероятностью попадёте на дребезг, независимо от того, нажали одновременно или не очень.
2 Сомнительно, что помех не может быть по определению. Обычно питание от сети 220 вольт. В сети бывают короткие даже киловольтовые импульсы. Даже если у вас на столе не было сбоев, не факт, что у пользователя их не будет.
Это определяется топологией платы и шлейфов, а не тупыми попытками защиты при отвратительной схемотехнике. С чего бы помехе не быть 50 или 100 Гц? Или импульсной, но с некоей частотой повторения и прохождением через высшие зоны Найквиста.
Я писал про помехи от сети 220 вольт. Помехи 50 или 100 Гц несущественны. Это медленное изменение сетевого напряжения, оно должно укладываться по напряжению в 10 %. Обычно питание от импульсного источника, а он будет выдавать стабильное выходное напряжение несмотря на такие пульсации входного. А вот киловольтные выбросы в сети – другое дело. Из-за крутых фронтов они могут пройти через силовой трансформатор. Бороться с ними не совсем просто. Видел плату источника от серьёзного аппарата, где на входе стояли фильтры, занимающие на печатной плате почти столько же места, сколько и сам источник питания. Нужны, конечно, и правильная остальная схемотехника. Программная защита от помех – дополнительная, не занимает места и не стоит ничего, зачем от неё отказываться.
Намудрили вы со своим алгоритмом ) Допустим нужно детектить новое состояние кнопок не по трем, а по 10-ти одинаковым значениям считанным с порта, тогда можно написать что-то типа такого, вы же будете читать эти значения в 10 переменных и потом сравнивать между собой...
Где же намудрил, это простенькая подпрограмма (называется, например, 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 мс, минутное дело.
Где же намудрил, это простенькая подпрограмма (называется, например, 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
Эта простенькая программка по факту намного хуже, чем я предполагал, т.к. внутри просто задержка минимум 60 ms, вместо ожидаемой ~1us ) И почему в ней goto в начало прыгает? Это прям максимально плохой алгоритм, на грани абсурда )
Скажем, программа ходит по кругу с интервалом 10 мс. Дребезг длится 20 мс.
А если программа ходит по кругу с интервалом 100 мкс? А если 100 мс? Вы делаете все, чтобы создать проблему и героически ее решить. Нучо, бывает... Опрос кнопок делают с таймерным интервалом. Всегда найдется таймер, способный создать необходимый период заодно с иной решаемой им задачей. Куртуазно вообще выделять специальный системный таймерный интервал для опроса, миганий и прочих относительно медленных событий.
Я писал про помехи от сети 220 вольт. Помехи 50 или 100 Гц несущественны. Это медленное изменение сетевого напряжения, оно должно укладываться по напряжению в 10 %.
Вы даже не понимаете о чем я говорю... Дело не в частоте ОСНОВНОЙ ГАРМОНИКИ помех. Дело в ее спектре. И при работе преобразователей киловольтовые помехи ИМЕЮТ НЕКОТОРУЮ ЧАСТОТУ ПОВТОРЕНИЙ. Это не коммутационная помеха от реле раз в сутки. Это регулярная помеха, способная попасть в зону Найквиста и никакие ваши доморощенные "алгоритмы" ее не отфильтруют. Строго по законам математики. Поэтому ваши рассказы не стоят времени, которое вы потратили на их написание.
Обсуждение подобных тем может быть продуктивно только в отношении конкретного проекта с конкретной схемотехникой и задачами. В противном случае это только "толочь воду в ступе" - решений может быть огромное множество и в каждом случае для именно того случая верных.
решений может быть огромное множество и в каждом случае для именно того случая верных.
Если человек не мазохист, то в идеале огромное множество решений нужно стараться сводить к одному универсальному и написанному заранее на все случаи жизни )
Для программ под ассемблером остается раздел устройств периферийных контроллеров в смешанных конструкциях и простейших прикладных устройствах.
Есть еще всякие 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
Но данная тема касается ассемблера для АВРок. Остальное обсуждаем в соответствующих разделах - хош Си, хош АРМы, хош ардуины. Зачем смесь в несоответствующей теме плодить то?
Тащемто для опроса кнопок и алгоритмов оного тоже есть отдельная тема.... А тут ассемблер )))) Будем разжевывать друг другу, чем SEI отличается от BSET 7
Эта простенькая программка по факту намного хуже, чем я предполагал, т.к. внутри просто задержка минимум 60 ms, вместо ожидаемой ~1us ) И почему в ней goto в начало прыгает? Это прям максимально плохой алгоритм, на грани абсурда )
Алгоритм не самый оптимальный для поиска трёх верных отсчётов, это верно, но он простой. Написал, когда был начинающим, и далее не оптимизировал. Но для работы это не существенно. Задержка 60 мс при работе с человеком тоже несущественна. В этой ситуации МК не решает скоростные задачи. Если всё же надо быстро выскочить из программы, есть ведь задержки с флагом. При установке флага можно выскочить из программы, наверно, тоже где-то за 1 мкс. Плюс программы – не нужен таймер и работа с кнопками в контролируемом месте. Можно и по таймеру сделать, это сложнее, зачем.
А если программа ходит по кругу с интервалом 100 мкс? А если 100 мс? Вы делаете все, чтобы создать проблему и героически ее решить. Нучо, бывает... Опрос кнопок делают с таймерным интервалом. Всегда найдется таймер, способный создать необходимый период заодно с иной решаемой им задачей. Куртуазно вообще выделять специальный системный таймерный интервал для опроса, миганий и прочих относительно медленных событий.
Что делать, если программа долго ходит по кругу – уже писал. Если быстро – тоже нет проблем. Иногда на макетной плате после старта программа только опрашивала кнопки, больше ничего. Это основной круг с интервалом 0 мкс, никаких проблем. У меня простенькая программа на десяток минут, а вы называете её решение героическим. Планка героического решения явно занижена. Далеко не всегда найдётся таймер. Я, наверно, никогда не использовал системный таймер, ни к чему.
Вы даже не понимаете о чем я говорю... Дело не в частоте ОСНОВНОЙ ГАРМОНИКИ помех. Дело в ее спектре. И при работе преобразователей киловольтовые помехи ИМЕЮТ НЕКОТОРУЮ ЧАСТОТУ ПОВТОРЕНИЙ. Это не коммутационная помеха от реле раз в сутки. Это регулярная помеха, способная попасть в зону Найквиста и никакие ваши доморощенные "алгоритмы" ее не отфильтруют. Строго по законам математики. Поэтому ваши рассказы не стоят времени, которое вы потратили на их написание.
У вас какой-то надуманный пример. Что это за преобразователь, создающий киловольтные помехи? Во-первых, импульсные источники питания в изделии коммутируют 300 вольт (питание 220 вольт). Во-вторых, такие источники помещают в экран, на входе и выходе ставят требуемый фильтры. На выходе получают чистое отфильтрованное постоянное напряжение, откуда киловольты. Я писал про помехи от сети 220 вольт, это широко распространено. Подавлять помехи надо, в первую очередь, средствами схемотехники. Программная защита – дополнительная, она не должна закрывать огрехи схемотехники. В этом плане зоны Найквиста для программы ни к чему. Кстати, сталкивался, программная защита бывает эффективной, но это другая тема. Я согласен с ВОВ51 про обсуждение конкретного проекта. Я высказался в общем плане, что программная защита – простая и бесплатная.
Далеко не всегда найдётся таймер. Я, наверно, никогда не использовал системный таймер, ни к чему.
Таймер найдется всегда. Если он вообще есть в МК. На крайняк это может быть 100 Гц сети заведенные на внешнее прерывание. Делать плавающий опрос - это очень плохая идея. Как правило, клавиатуры/кнопки сопровождают светодиоды, которые тоже традиционно мультиплексированы. Опрос традиционно общий. Вы пытаетесь доморощенное частное решение пропагандировать как верное. Еще раз повторю - это смешно. Вопрос с помехами даже не буду комментировать. Ваши фантазии - они только ваши фантазии.
Алгоритм не самый оптимальный для поиска трёх верных отсчётов, это верно, но он простой. Написал, когда был начинающим, и далее не оптимизировал. Но для работы это не существенно. Задержка 60 мс при работе с человеком тоже несущественна. В этой ситуации МК не решает скоростные задачи.
У вас основной цикл тормозится на 60ms, а если третье сравнение проваливается, то прыгаем в начало и ждем еще минимум 60ms. Если такое происходит раз в секунду, то 12% производительности потеряно, причем это верно как для 16 MHz AVR, так и для 1GHz ARM. Смысл писать такое на ассме, если интерпретатор бейсика работает быстрее ? ) И что будет вызываться в основном цикле помимо опроса кнопок заранее не известно, далеко не факт, что с паузой 160ms оно будет работать, потому один раз пишется нормальная функция опроса кнопок, которая работает практически всегда.
Если всё же надо быстро выскочить из программы, есть ведь задержки с флагом. При установке флага можно выскочить из программы, наверно, тоже где-то за 1 мкс.
Все можно, только теперь ваша программа уже не будет такой простой )
Даже если он есть, не всегда он нужен. Если главный цикл шустрый, достаточно использовать типа delay_ms(10) вместо системного тика. Ну и если не нужны точные подсчёты времени. Кажется, уже говорил где то.)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения