| Форум РадиоКот https://radiokot.ru/forum/ |
|
| поезд из А движется пока из басейна вытекает... BLINK https://radiokot.ru/forum/viewtopic.php?f=57&t=192363 |
Страница 1 из 3 |
| Автор: | Газзель! [ Сб фев 24, 2024 03:28:53 ] | |||
| Заголовок сообщения: | поезд из А движется пока из басейна вытекает... BLINK | |||
ДД! не могу решить задачку. Купил атмел нано328Р, которая с большой вероятностью lgt8. Это моя первая прога, и я уже вижу где можно было б сократить и оптимизировать, но задача обратная, или скорее задача как изложить последовательные шаги и заставить выполнять то, что хочу. Меня удивило что в учебниках и базовых примерах используется инклюд. Я поставил себе цель сделать БЛИНК без использования флагов, переносов, ветвлений, петелек и переходов. Единственый цикл это вся программа целиком. То есть каждый проход программы от первой до последней точки чуть чуть изменяет регистр, и при следующем проходе программы эти изменения используются и накапливаются. вот что получилось (кстати, как в АВР студио 4 включить нумерацию строк?): Код: sbi 0x04, 5 ; edit dec R16 ; здесь b7 будет 127раз 1 + 128й раз 1 inc R17 ; здесь b7 будет 127раз 0 + 128й раз 1 mov R31, R16 ; здесь и далее в R31 и 0x1E будем asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 ; переворачивать b7 в b0 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; перевернули add R18, R31 ;здесь b7 сложится из 128раз ; перевернутых единиц R16 и перевернутых нулей R17 ;а потом , после использования, вычтется из ;перевернутых нулей R16 и перевернутых единиц R17 mov R31, R18 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; sub R20, R31 ; здесь 2 ступень, аналоги№1 R16 R17 add R21, R31 ; из моргнувшей в R18 единички mov R31, R17 ; sub end0 доделываем 1 ступень asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E sub R18, R31 ; после пользования моргнувшей ;в R18 единички 127 раз держим b7 в ноль mov R31,R20 ; продолжаем 2 ступень asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; add R23, R31 ;аналог№1 R18 mov R31,R23 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; add R25, R31 ; здесь 3 ступень, аналоги№2 R16 R17 sub R26, R31 mov R31,R21 ; sub1 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; sub R23, R31 ; sub1 mov R31, R25 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; add R27, R31;аналог№2 R18 mov R31, R27 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E sub R28, R31 ;здесь 4 ступень, аналоги№3 R16 R17 add R29, R31 mov R31, R26 ;sub2 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E sub R27, R31; sub2 mov R31, R28 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E add R30, R31 ;аналог№3 R18 mov R31, R30 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E add R19, R31 ; конец подсчета ;19 потому что просто для наглядности пропустил mov R31, R29 ;sub3 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E sub R30, R31 ; sub3 mov R31, R19 asr R31 asr R31 ; b7 зажигает pb5 out 0x05, R31 ; по задумке должно 128 гореть и гаснуть jmp 0x0001 ; но нет в результате диод отбивает морзянку. Диод в основном горит и моргание в виде короткого потухания. Я это мог бы как нить предположить, что где то при переполнении регистра задваивается ноль, но это не все. Понаблюдав за диодом я почти уверен, что морзянка одна и та же, но каждый период ускоряется в геометрической прогрессии. То есть 1 период диод моргнул, на второй период быстрее, еще через пару раз он мерцает, и в конце просто тускнеет, и опять по кругу. Это догадки, но медленное моргание точно повторяется. Поскольку никаких особенность в проге нет, то ошибка где то именно в рассуждениях. Я все, сдался самостоятельно разобраться, Вроде просто, но не могу больше, у меня так в школе наступал ступор и дальше уже ничего не помогало. Ткните плиз! спасибо (здесь блюдичко со сметаной)
|
||||
| Автор: | BOB51 [ Сб фев 24, 2024 13:24:00 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
Мегу 328ю под ассемблером... Весьма смело как для начинающего. Однако без *.inc файла (m328Pdef.inc или m328def.inc - зависит от конкретного кристалла) даже авр студио 4.19 под ассемблером работать корректно не сможет. Там по умолчанию обязательное описание ресурсов МК. Плюс надо разобраться с начальной конфигурацией да текущим состоянием набора фуз-бит. Да и с настройкой проекта. (Как и с работой симулятора АВР студио). У менее жирных кристаллов это заметно проще. А тут еще и ардуиновская нанка - там ведь по умолчанию еще свой бутлоадер зашит да соответствующий ардуине набор фузов. Её сначала в "состояние с завода-изготовителя" перед подобным издевательством привести нужно. Так что рекомендую в данном случае под ардуиноIDE на Си прожку делать, без излишнего садомазохизма. Ежли охота под ассемблером поморочиться - то надо с чего то попроще начинать - тиньки 13 или 2313 к примеру... Или даже без самих МК - только в симуляторе прогнать прожку. Да и цель не слишком корректна - без циклов и подпрограмм даже простая замигайка кошмаром станет. Это же не автомат на рассыпухе и ПЗУ, как в древних (новогодних) замигайках делалось. Микроконтроллер все таки!
|
|
| Автор: | Газзель! [ Сб фев 24, 2024 17:34:48 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
спасибо. да, у ардуины фьюзы готовые и не меняются, но тут и нет специфияеского функционала. моя прога по идее может быть реализована на любом контролере, ну может если есть какие то вариации ASR без переноса, все остальное это сложение и вычитание платка сама исправна, диод отзывается как положено. я имел виду инклюды которые саму задержку блинка реализуют, непонятно чему учиться. может я не разобрался, но тинки мне показались сложнее, они вроде как есть аналог полноценой архитектуры, а есть какието уменьшенные. Типа как пик 10 сложнее пик16 |
|
| Автор: | Martian [ Сб фев 24, 2024 17:42:32 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
глупая задача порождает глупые решения... |
|
| Автор: | Газзель! [ Сб фев 24, 2024 17:48:40 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
а можно ткнуть в ошибку? |
|
| Автор: | OKF [ Сб фев 24, 2024 18:14:22 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
Газзель! Вот ты уже 26 постов настрочил, а код вставлять так и не научился? И циклы, как я понимаю, ты ещё не освоил, не? |
|
| Автор: | Газзель! [ Сб фев 24, 2024 18:19:47 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
а спасибо, не знал такой фичи но помоему хуже стало |
|
| Автор: | BOB51 [ Сб фев 24, 2024 18:29:51 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
Для начала хотя бы узнать, чего хотелось той программой получить. Простое описание словами ЧЕГО ХОТИМ ПОЛУЧИТЬ в результате. Еще лучше график нарисовать. А уж потом под словесное описание имеющимися средствами программу делать. А так... Зачем гонять данные в регистрах? куда выводить, откуда читать? И на кой вообще вся эта городушка нужна? Заниматься изучением "а-ля хакер" того кода (без сопроводительного словесного описания задачи), что выложен... Как-то не слишком интересно...
|
|
| Автор: | Газзель! [ Сб фев 24, 2024 18:42:16 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
это БЛИНК или але ворлд. Платка нано замечательна тем, что там уже распян светодиод PB5. В него выводится в последней строке. В регистрах по сути подсчитывается сколько раз программа была исполнена, но поскольку 256 тактов маловато для видимого моргания, то считается несколько ступеней 256*256*256= 16777216 и еще * на колво строк. каждая предидущая ступень это барьер для приращения в следующей. Ну как если бы третий таймер считал второй, а второй сичтал первый, только каждый таймер здесь вся прога целиком |
|
| Автор: | BOB51 [ Сб фев 24, 2024 19:26:28 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
... |
|
| Автор: | Газзель! [ Сб фев 24, 2024 19:53:28 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
добавил sbi 0x04, 5 и к сожалению jmp 0x0001 но я так понял для ардуины он по умолчанию на выход. по крайней мере ничего не меняется, кроме того что появляется цикл с 1 строки... щас вложу еще малость долларов, но согласно учебнику можно и так и так. EDIT доллары $ не принимает, пишет C:\arduino-1.6.13-windows\blibl2\blibl2.asm(13): error: x1E: Unknown instruction or macro C:\arduino-1.6.13-windows\blibl2\blibl2.asm(13): error: syntax error, unexpected ',' адрес ИО регистра я как в даташите указан, так его и записал |
|
| Автор: | BOB51 [ Сб фев 24, 2024 20:14:58 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
Чего-то я не понял... А при чем тут ардуино и ассемблер то???! Ну там конечно свой ассемблер в GCC имеется, но это совсем отдельная тема. Префиксы $ относятся к avrasm2 из АВР студио! В ардуино используется Си/С++ (смотри https://www.arduino.cc/reference/en/)...
|
|
| Автор: | Starichok51 [ Сб фев 24, 2024 20:17:26 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
BOB51 писал(а): должно быть вот это и есть ахинизьм.Код: in R31, $0x1E 0x - уже означает шестнадцатеричную запись. |
|
| Автор: | Газзель! [ Сб фев 24, 2024 20:27:00 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
факт что доллары не берет. Я так понял, что бутлодер ардуины прошивает свои установки, но я сильно не разбирался, просто проверяю методом проб и ошибок, тем более англиский у меня не очень. Да, Sbi 0x04, 5 явно нужно было, моя ошибка, но не помогло. и еще интересное, если Cbi 0x04, 5 то светодиод всеравно очень тускло горит, типа как еслиб был ШИМ10%б и при этом еще и моргает по тому же алгоритму |
|
| Автор: | BOB51 [ Сб фев 24, 2024 20:28:50 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
Starichok51 писал(а): BOB51 писал(а): должно быть вот это и есть ахинизьм.Код: in R31, $0x1E 0x - уже означает шестнадцатеричную запись. Согласен... К сожалению никогда не пользовался прямым указанием адресов регистров у АВРок. Таки $ там нету... |
|
| Автор: | Starichok51 [ Сб фев 24, 2024 20:45:14 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
я тоже прямым указанием адресов регистров не пользуюсь, только их именами. |
|
| Автор: | Газзель! [ Сб фев 24, 2024 21:37:18 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
я понимаю, но у меня нет цели написать быстро какую то длинную и сложную прогу, а сначала суметь заставить в лоб работать контроллер, а уж потом прибавлять к этому удобные фишечки |
|
| Автор: | Martian [ Вс фев 25, 2024 00:01:23 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
А что, плохой контроллер? Почему его надо заставлять? |
|
| Автор: | Demiurg [ Вс фев 25, 2024 05:15:35 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
Я начинал с ассемблера. И мой первый микроконтроллер был ATMEGA8535. Купите, скачайте книгу Вольфганг Трамперт "AVR-RISC Микроконтроллеры". Там подробное описание архитектуры МК AVR. И примеры на ассемблере. Так же нужно научить себя думать не ассемблерными категориями, а более объектно. Также посоветую посмотреть в сторону конечных автоматов. На КА blink делается лехко. State 0. Инициализация ввода вывода. Установка программного таймера. Установка изначального состояния лампочки. Установка State 1. State 1. Ожидание таймера. Если время, не вышло, то выход. Если вышло, переключение выхода, установка программного таймера, выход. Позже выберу время. Выложу свой пример. |
|
| Автор: | Газзель! [ Вс фев 25, 2024 16:51:21 ] |
| Заголовок сообщения: | Re: поезд из А движется пока из басейна вытекает... BLINK |
спасибо! посмотрел в яндексе шоза конечный автомат, похоже, но честно не очень понял. У меня задача была сделать прогу без использования доп функций, не потому что мне очень блинк нужен, а потому что нужно научиться выложить задуманное в инструкциях. нашел ошибку, что в К 25-26 перепутаны sub add, но на удивление стало хуже... КУДА ПРОПАЛА КНОПКА РЕДАКТИРОВАНИЯ В ПЕРВОМ СООБЩЕНИИ?!!! методом перебора регистров на выход, ошибка должна быть сразу на втором этапе, где диод 8 раз мигает и 9 раз горит. Но самое интересное, что он мигает ! То есть 256*256, а он хоть и быстро, но именно мигает, а не мерцает. А вот теперь для меня самое интересное. Процесс прошивания влияет на результат работы. 1. заливаю прошивку ниже, где на вывод взят R23, и получаю стабильный меандр блинка. 2. Reset и блинк пропадает, просто горит немного мерцая. 3. повтор -опять то же самое. Работает только и всегда перепрошив в любой последовательности и комбинации, и то же с ресетом. Блик также исчезает если в начале добавить cli clr R16 clr R17 clr R18 clr R19 clr R20 clr R21 clr R22 clr R23 clr R24 clr R25 clr R26 clr R27 clr R28 clr R29 clr R30 clr R31 nop и в конце соответственно jmp 0x0011 Это получается при перепрошивке не происходит обнуление регистров?! Но даже в этом случае не ясно, что там може сохраниться, что блинк начинает работать. вот сама прошивка: Код: dec R16 ; здесь b7 будет 127раз 1 + 128й раз 1 inc R17 ; здесь b7 будет 127раз 0 + 128й раз 1 mov R31, R16 ; здесь и далее в R31 и 0x1E будем asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 ; переворачивать b7 в b0 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; перевернули add R18, R31 ;здесь b7 сложится из 128раз ; перевернутых единиц R16 и перевернутых нулей R17 ;а потом , после использования, вычтется из ;перевернутых нулей R16 и перевернутых единиц R17 mov R31, R18 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; sub R20, R31 ; здесь 2 ступень, аналоги№1 R16 R17 add R21, R31 ; из моргнувшей в R18 единички mov R31, R17 ; sub end0 доделываем 1 ступень asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E sub R18, R31 ; после пользования моргнувшей ;в R18 единички 127 раз держим b7 в ноль mov R31,R20 ; продолжаем 2 ступень asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; add R23, R31 ;аналог№1 R18 mov R31,R23 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; sub R25, R31 ; здесь 3 ступень, аналоги№2 R16 R17 add R26, R31 mov R31,R21 ; sub1 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 asr R31 out 0x1E, R31 cbi 0x1E, 7 cbi 0x1E, 6 cbi 0x1E, 5 cbi 0x1E, 4 cbi 0x1E, 3 cbi 0x1E, 2 cbi 0x1E, 1 in R31, 0x1E ; sub R23, R31 ; sub1 mov R31, R23 asr R31 asr R31 ; b7 зажигает pb5 sbi 0x04, 5 out 0x05, R23 ; по задумке должно 128 гореть и гаснуть jmp 0x0000 ; но нет какая взаимосвязь? |
|
| Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


