attiny13 таймер то работает, то нет

Обсуждаем контроллеры компании Atmel.
oleg_4rk
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Re: attiny13 таймер то работает, то нет

Сообщение oleg_4rk »

При чём, сейчас нерабочий вариант по другому уже не работает :-). Чуть позже выложу фотку.

Добавлено after 47 seconds:
[uquote="Adrift",url="/forum/viewtopic.php?p=4643068#p4643068"]Покажи, может я что-то найду.[/uquote]

Сейчас выложу. Но там много всего :-).

Добавлено after 3 minutes 34 seconds:
Прикрепил.

Добавлено after 10 minutes 19 seconds:
Исходник сейчас выглядит вот так (прикрепил).

Добавлено after 11 minutes 52 seconds:
Сейчас сбоит второй вариант так:

Изображение

После определённого кол-ва срабатываний как будто просто таймер вырубается.
После этого я решил посмотреть в порядке бреда, а работает ли цикл вообще. И добавил такие строки в цикл:

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

                if ((i & 1) == 0)
                        asm("sbi %[io], %[bit]" :: [io] "I" (_SFR_IO_ADDR(PORTB)), [bit] "I" (3));
                else
                        asm("cbi %[io], %[bit]" :: [io] "I" (_SFR_IO_ADDR(PORTB)), [bit] "I" (3));
                i++;
Но как только эти строки тут, то всё работает :-). Какой-то эффект наблюдателя, блин :-). Но при этом почему-то (вторая строка это 1я лапа для проверки SREG, третья для 3ей лапы, которая sbi/cbi по кругу в цикле) вторая строка тоже начинает вместе с третьей фигачить то вкл, то выкл. И я не понимаю по какой причине в момент проверки SREG там может оказаться выключенные прерывания. Вот так:

Изображение

Добавлено after 6 minutes 22 seconds:
Да, кстати, кол-во переключений вверх и вниз всегда 166 в том графике со сбоем, до последнего 167го переключения вверх, после которого уже ничего не меняется.
Вложения
screenshot.png
(4.91 КБ) 393 скачивания
screenshot.png
(4.76 КБ) 395 скачиваний
test.c
(3.65 КБ) 47 скачиваний
bad.elf.disasm.txt
(169.71 КБ) 56 скачиваний
good.elf.disasm.txt
(122.87 КБ) 69 скачиваний
Ардуинщик. Не шарю в электронике.
Реклама
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: attiny13 таймер то работает, то нет

Сообщение Adrift »

Я не вижу никаких отличий, отличаются только адреса для RCALL/RJMP и отладочная информация )
Реклама
oleg_4rk
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Re: attiny13 таймер то работает, то нет

Сообщение oleg_4rk »

Вот :-)! Это как с сусликом, видимо. Ты не видишь, я не вижу, а МК видит :-). Хз чё он там видит.
Ардуинщик. Не шарю в электронике.
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: attiny13 таймер то работает, то нет

Сообщение Adrift »

Видимо это тот редкий случай когда не мешало бы проверить с другим tiny13 )
Реклама
Эиком - электронные компоненты и радиодетали
oleg_4rk
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Re: attiny13 таймер то работает, то нет

Сообщение oleg_4rk »

Есть ещё парочка. Но, возможно, они из одной партии :-). Проверю сейчас...

Добавлено after 46 minutes 34 seconds:
Ну тут всё стабильно плохо :-D. На двух других тоже самое.
Ардуинщик. Не шарю в электронике.
Реклама
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: attiny13 таймер то работает, то нет

Сообщение Adrift »

А что там с RESET, как подключен? Может он наводки ловит и сбрасывается?
Реклама
oleg_4rk
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Re: attiny13 таймер то работает, то нет

Сообщение oleg_4rk »

RESET от питания прямым проводом (для обоих версий прог :-)). Питание от usb от компа. Если бы ловил, то были бы провалы на второй и третьей строке по идее во всех случаях, но их нет.
Ардуинщик. Не шарю в электронике.
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: attiny13 таймер то работает, то нет

Сообщение Adrift »

У меня идеи закончились, зато есть идеи по улучшению проги в целом. Такое, например. На С++ можно чуть улучшить, но там вообще можно сильно по-разному написать )
oleg_4rk
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Re: attiny13 таймер то работает, то нет

Сообщение oleg_4rk »

[uquote="Adrift",url="/forum/viewtopic.php?p=4643303#p4643303"]У меня идеи закончились, зато есть идеи по улучшению проги в целом.[/uquote]

:)))

Такое, например. На С++ можно чуть улучшить, но там вообще можно сильно по-разному написать )
А для всех avr'ок будет такое расположение в памяти регистров PIN*, DDR*, PORT*? Вдруг нет. А так прикольно. Не сильно короче, но хорошо :-). А с C++ варик не подходит, т.к. нужен именно чистый C.

Добавлено after 3 minutes 50 seconds:
Надо, походу, новую тему создавать с конкретным запросом "Ищем человека с отладочными прибамбасами для avr" :-). Набор исходников и готовых бинарников в наличии :-D.
Ардуинщик. Не шарю в электронике.
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: attiny13 таймер то работает, то нет

Сообщение Adrift »

[uquote="oleg_4rk",url="/forum/viewtopic.php?p=4643313#p4643313"]А для всех avr'ок будет такое расположение в памяти регистров PIN*, DDR*, PORT*? Вдруг нет. А так прикольно. Не сильно короче, но хорошо :-).[/uquote]
На всех AVR которые я знал порядок регистров был именно такой, какой смысл разрабам его менять?
Не сильно короче, но массив меньше на 7*4 = 28 байт - это почти половина SRAM. Кстати да... Там же памяти всего 64 байта, а у тебя массив с переменными занимает 53, плюс стек, а туда обработчик прерывания пихает 15! регистров )
oleg_4rk
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Re: attiny13 таймер то работает, то нет

Сообщение oleg_4rk »

[uquote="Adrift",url="/forum/viewtopic.php?p=4643342#p4643342"]Кстати да... Там же памяти всего 64 байта, а у тебя массив с переменными занимает 53, плюс стек, а туда обработчик прерывания пихает 15! регистров )[/uquote]

Блин, точно! Мой массив затирается нахер при работе прерывания. И дальше странные глюки. А потом ещё pin_toggle() внутри может захерачить часть стэка тоже, в свою очередь. ЭТо по-любому хреново, но не объясняет почему один из вариантов работает без заметных проблем. Но так-то похоже на attiny13 не разгуляешься :-D.

Добавлено after 14 minutes 35 seconds:
[uquote="Adrift",url="/forum/viewtopic.php?p=4643342#p4643342"]На всех AVR которые я знал порядок регистров был именно такой, какой смысл разрабам его менять?[/uquote]
Да хрен их знает. Они ж не обещали держать совместимость по порядку расположения регистров :-). Всё может быть.
Не сильно короче, но массив меньше на 7*4 = 28 байт - это почти половина SRAM.
Да это только в тиньке 13й :-). Судя по всему, на ней из C можно только светодиодом мигать. Чё-т серьёзней - асм, т.к. нужно чёткое понимание размера стека и данных. А то хз сколько компилятор там push'ей нафигачит.

Но так-то можно и так переделать. Подумаю. Спасибо за идею. Только тогда надо будет при добавлении в либу новой модели avr МК проверять по спеке, что регистры в правильном порядке расположены. Полистаю на днях спеки тех, что использую - проверю.
Ардуинщик. Не шарю в электронике.
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: attiny13 таймер то работает, то нет

Сообщение Adrift »

[uquote="oleg_4rk",url="/forum/viewtopic.php?p=4643396#p4643396"]Да это только в тиньке 13й :-). Судя по всему, на ней из C можно только светодиодом мигать. Чё-т серьёзней - асм, т.к. нужно чёткое понимание размера стека и данных. А то хз сколько компилятор там push'ей нафигачит.[/uquote]
У меня таких проблем нет, самый мелкий 8-ми ногий STM32 имеет 8KB RAM, а в последних сериях на Cortex-M33 уже аппаратная проверка есть, если вылез за границы стека сразу эксепшен прилетает )

Добавлено after 2 minutes 34 seconds:
[uquote="oleg_4rk",url="/forum/viewtopic.php?p=4643396#p4643396"]Только тогда надо будет при добавлении в либу новой модели avr МК проверять по спеке, что регистры в правильном порядке расположены.[/uquote]
Скорее всего изменения уже в новых AVR будут, там где другой набор регистров портов, с атомарным доступом.
Огонёк
Опытный кот
Сообщения: 777
Зарегистрирован: Вт авг 27, 2024 19:11:47

Re: attiny13 таймер то работает, то нет

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

oleg_4rk писал(а):Чё-т серьёзней - асм,
Что угодно на тиньке - асм. Тинька - идеальный учебный класс. Любых ресурсов - по пальцам пересчитать, на тетрадном листочке начертить. Не нужен там даже чистый Си - только асм. Прямая трансляция, шахматная партия. Только твой интеллект и компактное машинное ядро. Красиво же.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: attiny13 таймер то работает, то нет

Сообщение Martian »

Ничто, кроме отсутствия знаний и умения разговаривать, не мешает использовать и Си.

олег за всё берётся смело
всё превращается в говно
а если за говно берётся
то просто тратит меньше сил
© yapavlik
Даже имя совпало, что символично.
oleg_4rk
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Re: attiny13 таймер то работает, то нет

Сообщение oleg_4rk »

[uquote="Adrift",url="/forum/viewtopic.php?p=4643430#p4643430"]У меня таких проблем нет, самый мелкий 8-ми ногий STM32 имеет 8KB RAM, а в последних сериях на Cortex-M33 уже аппаратная проверка есть, если вылез за границы стека сразу эксепшен прилетает )[/uquote]

8K это круто :-). На STM32 вообще, вон, OS впихивают :-). Красота.
Спасибо, что помог! Выручил.
Огонёк писал(а):Что угодно на тиньке - асм. Тинька - идеальный учебный класс.
Да без вопросов. Романтику написания программ на асме полностью разделяю. Но хлопотно это и требует большей внимательности и времени. Я последний раз на асме писал проги под 586й и тогда решил для себя, что оптимально по времени всё таки комбинация C+asm, где на asm пишутся отдельные функции когда надо. А прога от и до на асме это круто, но некогда :-).
Martian писал(а):Ничто, кроме отсутствия знаний и умения разговаривать, не мешает использовать и Си.
...
Вот ты никак не успокоишься. Что ты всё пишешь, всё внимание к себе привлекаешь? Я не по этой части. Хватит ко мне подкатывать. Отвали.

Добавлено after 1 hour 12 minutes 52 seconds:
[uquote="oleg_4rk",url="/forum/viewtopic.php?p=4643578#p4643578"]оптимально по времени всё таки комбинация C+asm, где на asm пишутся отдельные функции когда надо. А прога от и до на асме это круто, но некогда :-).[/uquote]

Ну понятное дело, что если это массовое производство и затраты на асм для тиньки полностью окупаются экономией за счёт разницы между ней и, скажем, attiny85, то само-собой надо браться за асм. Но я про штучное производство, скажем так :-). Когда проще доплатить за МК побольше и сэкономить время за счёт C.
Ардуинщик. Не шарю в электронике.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: attiny13 таймер то работает, то нет

Сообщение shonty »

Да совсем не хлопотно на асме писать. Со временем же обрастаешь наработками на периферию, интерфейсы, математику и т.п..

Язык программирования скорее всего выбирается не по хлопотно/не_хлопотно, а по восприятию, внутренней организации и прочим предпочтениям.

Жирный минус асма - это отсутствие библиотек..
Жирный плюс асма - это отсутствие библиотек :))
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: attiny13 таймер то работает, то нет

Сообщение Starichok51 »

oleg_4rk писал(а):и сэкономить время за счёт C
и сколько уже дней ты потерял, пытаясь "сэкономить" на С?
а на ассме ты свою такую простенькую программу написал бы за некоторую небольшую часть одного дня.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
oleg_4rk
Встал на лапы
Сообщения: 141
Зарегистрирован: Чт сен 26, 2019 20:42:21

Re: attiny13 таймер то работает, то нет

Сообщение oleg_4rk »

[uquote="shonty",url="/forum/viewtopic.php?p=4643637#p4643637"]Да совсем не хлопотно на асме писать. Со временем же обрастаешь наработками на периферию, интерфейсы, математику и т.п..[/uquote]

Вот как раз для avr своих наработок на асме у меня 0 :-).
Язык программирования скорее всего выбирается не по хлопотно/не_хлопотно, а по восприятию, внутренней организации и прочим предпочтениям.
По-разному он выбирается. Можно накидать веб-интерфейс и на C, но явно быстрее (и с меньшим кол-вом ошибок) будет на каком-то скриптовом ЯП (perl, tcl, python, php...) или чем-то более высокоуровневом (вроде, erlang и т.д.). Под задачу он выбирается, под сроки. Нынче МК достаточно жирные по мощностям и при этом недорогие, что бы ограничивать себя только асмом.
Starichok51 писал(а):и сколько уже дней ты потерял, пытаясь "сэкономить" на С?
а на ассме ты свою такую простенькую программу написал бы за некоторую небольшую часть одного дня.
Не написал бы. Учитывая, что я не знаю конкретно avr assembler, своих наработок для avr на асме у меня нет и то, что, когда я писал на ассемблере, я пользовал tasm, то я думаю неделя минимум у меня б ушла. А там дальше ловля багов, отладка, познание всяких тонкостей, которых с уровня C не видно - хз сколько ещё б заняла.
Ардуинщик. Не шарю в электронике.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: attiny13 таймер то работает, то нет

Сообщение Jack_A »

[uquote="oleg_4rk",url="/forum/viewtopic.php?p=4643652#p4643652"]отладка, познание всяких тонкостей, которых с уровня C не видно - хз сколько ещё б заняла.[/uquote]
Вот именно! Не видно. Не работает, а почему - х.з. Вещь в себе. А на асме поставил точку останова - и всё видно до мельчайшего битика, по шагам можно проследить - что и как.
Тут всё зависит от цели. Одно дело накрейтить проектик чтоб работало что-то - и на этом точка. Другое - проект как ступень на пути повышения своих skills. И тут асм как никто другой позволяет это сделать. Каждая выполняемая операция осмыслена тобой, а не "что там Сей сгенерировал у себя унутре".
Вот тут заметили про сохранение 15 регистров при входе в прерывание. Я на Си писал только для компа, не для МК, но сильно удивлюсь, если в такой тупой код оно всамделе компилируется. На асме сохраняешь только те регистры, которые использует обработчик или вообще не сохраняешь (у меня была такая практика), если речь шла об "операционных" регистрах, так сказать, общего пользования, не хранящих инфу в промежутках между прерываниями. Но признал - это нездоровый путь. Экономмя копеечная, а приходится постоянно следить за использованием регистров.
Но как остающийся в меньшинстве ретроград остаюсь верен идее: на асме МК исполняет то, что ты написал, на яз.в.у. - то, как понял твою писанину компилятор. Могут быть разночтения. :(
-------------------
А зная один асм - к другому перейти не так сложно, как кажется.
СпойлерЯ как-то, не хило нособачившись в асме PDP-11 (было сделано несколько крупных проектов), решил попробовать на ПК. Взял несложную прожку, слегка переделал её ввиду различия регистров и памяти и скормил ТАСМу. Он выдал, конечно, кучу ошибок. Открываю мануал - оказывается, операция эта имеет другую мнемонику, хотя выполнение одинаково. Так несколько итераций - и оно заработало. Заняло неполный день.
Как говорят: "если ты знаешь одного эрдель-терьера - ты знаешь всех эрдель-терьеров" :))
Но конечно - тут надо знать меру. Вот в упомянутых проектах на асме, конечно, надо было писать интерпретирующую систему - быстродействие было ключевым фактором. А вот компилятор свободно можно было и на Си, и на Фортране. Но что делать, такие были времена. Год на одну тему - это был не срок. Мож потому оно и рухнуло?
Последний раз редактировалось Jack_A Пт ноя 01, 2024 16:38:11, всего редактировалось 1 раз.
Изображение
Adrift
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: attiny13 таймер то работает, то нет

Сообщение Adrift »

[uquote="Jack_A",url="/forum/viewtopic.php?p=4643706#p4643706"]А на асме поставил точку останова - и всё видно до мельчайшего битика, по шагам можно проследить - что и как.[/uquote]
Что ж тут удивительного? Я пишу на C++, ставлю точку останова, потом или пошагово С++ код выполняю и битики проверяю, или в другом окне шагаю по инструкциям. Просто для AVR аппаратный отладчик - это экзотика, а на ARM, где он $2 стоит, отладчики есть практически у всех и часто не в одном экземпляре. У меня 4 разных сейчас )
Ответить

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