Обсуждаем контроллеры компании Atmel.
Ответить

Странный баг прошивки контроллера антенного переключателя

Вт мар 30, 2021 21:52:18

Доброго времени суток! Разрабатываю контроллер управления антенным коммутатором на Attiny2313. Пишу на Си, вооружившись Proteus с прикрученным WinAVR. Программа для управления с ПК кое-как написана на C# (да и дело не в ней). Сам не программист, только учусь. Прошивка в основном работает. Описание работы, исходники прошивки положил к себе на сайт https://unlis.ru/?p=1944. Посмотреть как работает:


Но в прошивке есть один баг. Дело в том, что реализован функционал программного отключения антенных портов. То есть заходим в настройки программы, снимаем галки на ненужных нам антеннах, нажимаем Сохранить, и программа отсылает команду в МК - восемь бит, каждый бит соответствует антенне. Галка снята - соответствующий бит сброшен, установлена - установлен. А прошивка при обработке нажатия кнопки проверяет - если бит, соответствующий номеру кнопки, в байте установлен - значит можно включить антенну. А по факту получается....


То есть при включении портов 5-8 они не работают до тех пор, пока я не нажму какую-нибудь кнопку из разрешенных РАНЕЕ портов, а после этого все работает как надо. То есть были включены 1,2,3,4, включаем 5,6,7,8. Сразу после этого при нажатии 5,6,7,8 ничего не происходит пока я не нажму что-нибудь из 1,2,3,4, а потом все начинает работать как и должно быть - все 8 портов. Причем прошивка эти настройки в EEPROM сохраняет, переменной, отвечающей за биты разрешенных/запрещенных антенн, присваивается значение, которое с компа пришло. А вот пока процедура обработки кнопок не выполнится хотя бы раз - только что разрешенные кнопки не работают...

Re: Странный баг прошивки контроллера антенного переключател

Вт мар 30, 2021 22:01:27

нихрена не понял нахуя отключать антены от фидера удалено для этого есть суматоры/филтры сложения это есди RX\TX ну и стандартных дисекоф если толка нам прием хватает выше крыши пилот сигнал 3Ч...

Re: Странный баг прошивки контроллера антенного переключател

Вт мар 30, 2021 23:28:21

Я конечно извиняюсь, но вопрос стоял не в том зачем их отключать....

Баг, кстати, выловлен. Если кому интересно: компилятор Си решил при сборке, что переменная enabled в условии
Код:
if ((enabled & (1<<count)) != 0 )
будет храниться в регистре. При вызове прерываний регистры никто естественно не сохраняет, этот же компилятор собрал программу так, что прерывание использует этот же самый регистр. В процессе обработки прерывания регистр напрочь затирается (потом каким-то образом восстанавливается при выполнении другого куска кода программы) - и условие не выполняется, кнопки не работают. Как только я сказал компилятору волшебное слово volatile - храни переменную в оперативке - все стало работать как надо. Молодой еще, неопытный)

Тему можно закрывать.

Re: Странный баг прошивки контроллера антенного переключател

Чт апр 01, 2021 12:16:53

blackheart, volatile - это не о "храни переменную в оперативке". Это о том, что значение переменной может измениться "из вне" поэтому при оптимизации нужно это учитывать. Нюанс в том, что с точки зрения компилятора, он не знает когда возникает прерывание. Из кода прямых переходов нет, поэтому с его точки зрения в прерывании обычная переменная не может поменяться, потому что туда нет перехода, поэтому её можно "оптимизировать" соответственно. Вплоть до превращения в константу. Поэтому любая переменная, которая изменяется из прерывания, должна быть помечена как volatile. Также, как и регистры, к примеру, определены.

Еще советы по коду.
Во-первых вы немного изобрели велосипед функциями EEPROM_*(). Все это есть в avr/eeprom.h, сходите по ссылке.
Во-вторых, вы пишете по фиксированному адресу в EEPROM. Если переключения достаточно частые, то в итоге вы "выжжете" ячейку EEPROM. Конечно там много циклов перезаписи, даже больше заявленных 100К по факту. Но всё-таки если запись идет часто и этот ресурс можно за обозримый срок исчерпать. Если конечно переключение ручками, раз-два в день, то это не страшно. Если с компа автоматом часто очень переключается - прикиньте ресурс. И если что, надо делать т.н. wear leveling.
Ну и еще в обмен по UART добавить бы некий контроль целостности пересылки. Если придет битый пакет? Хотя бы банально CRC туда-сюда добавить в конце. Тоже если что, всё уже готовое есть: https://www.nongnu.org/avr-libc/user-ma ... __crc.html

Re: Странный баг прошивки контроллера антенного переключател

Чт апр 01, 2021 14:29:07

Во-вторых, вы пишете по фиксированному адресу в EEPROM. Если переключения достаточно частые, то в итоге вы "выжжете" ячейку EEPROM. Конечно там много циклов перезаписи, даже больше заявленных 100К по факту. Но всё-таки если запись идет часто и этот ресурс можно за обозримый срок исчерпать. Если конечно переключение ручками, раз-два в день, то это не страшно. Если с компа автоматом часто очень переключается - прикиньте ресурс. И если что, надо делать т.н. wear leveling.l

Если так надо часто писать в EEPROM, то FRAM в помощь. Если не хочется иметь два корпуса, то MSP430FRxxx в помощь.

Re: Странный баг прошивки контроллера антенного переключател

Чт апр 01, 2021 15:20:47

parovoZZ, менять контроллер слишком радикально. Можно просто несчастных 2 байта писать по кругу, тем самым увеличив ресурс в 64 раза (т.к. 128 байт имеется) максимум (если не использовать ID записи, а просто скажем затирая до FF прошлое значение после записи и поэтому находя последнюю запись). Ес-но в определенных случаях может и этого не хватить... но скорее всего в данном случае менять МК не придется всё-таки )

Re: Странный баг прошивки контроллера антенного переключател

Чт апр 01, 2021 15:23:00

Достаточно ds1307 с ее оперативкой из 64 байт...
:wink:

Re: Странный баг прошивки контроллера антенного переключател

Чт апр 01, 2021 15:25:57

Просто к примеру, скажем у нас события пишутся раз 500 в день. Это чуть больше чем пол года гарантированной работы МК до выхода из строя при записи в одни и те же ячейки. Если ввести примитивный кольцевой буфер - это уже ~32 года что уже более, чем достаточный срок службы. Ну плюс тут еще есть нюанс - контроль целостности. Можно еще CRC добавить, размер блока вырастет, но будет гарантия достоверности считанных данных.

Re: Странный баг прошивки контроллера антенного переключател

Чт апр 01, 2021 18:39:04

проблема актуалная был какой недотелк где ДЕБИЛЫ сэкономили копечную еромку 24ххх
а писали в память проца... в результате некоторые ячейки выходили из строя через 3-5лет отказывало переключени програм и громкость глючила...

Re: Странный баг прошивки контроллера антенного переключател

Сб апр 03, 2021 13:53:04

Во-первых вы немного изобрели велосипед функциями EEPROM_*(). Все это есть в avr/eeprom.h, сходите по ссылке.

Про eeprom.h знаю, но я взял примеры из datasheet микроконтроллера. Так захотелось, для наглядности что ли...

Во-вторых, вы пишете по фиксированному адресу в EEPROM. Если переключения достаточно частые, то в итоге вы "выжжете" ячейку EEPROM.

Над этим я думаю, буду модернизировать прошивку. Эта прошивка - вообще первое, что я написал в жизни на Си под AVR, поэтому ни разу не претендует на правильность.

Ну и еще в обмен по UART добавить бы некий контроль целостности пересылки.

Об этом тоже думал. См. выше)

Ну а в общем - большое спасибо за советы, обязательно учту всё сказанное. Ибо я не программист, и у меня существует такая проблема, что написать-то вроде можно, но как написать - красиво, правильно и компактно или с кучей костылей, но чтоб в конечном итоге работало - спросить лишний раз не у кого (нет таких знакомых поблизости), приходится самому изучать; и порой непонятно - забил ли я тут костыль, либо это не костыль, а правильное решение...

Re: Странный баг прошивки контроллера антенного переключател

Сб апр 03, 2021 21:54:49

Всем привет ! Ребята, подскажите знающие, проблема при прошивке PIC16F648A. Операционка винда7, программатор ic prog 105D. Программатор собрал сам, еще не раз не прошивал с ним, собирал по схеме, проверил, все нормально. Почему я не могу поставить галочку "Вкл. NT/2000/XP драйвер" Фото. https://img.radiokot.ru/files/143475/2hcau1qacj.png Извините что не в ту тему написал.
Вложения
Без названия (4).png
https://img.radiokot.ru/files/143475/2hcau1qacj.png
(45.33 KiB) Скачиваний: 96
Последний раз редактировалось toronto76 Сб апр 03, 2021 22:03:59, всего редактировалось 1 раз.

Re: Странный баг прошивки контроллера антенного переключател

Сб апр 03, 2021 21:59:17

toronto76, могу толка предположить ее дрова для NT/2000/XP драйвер" несовместимы с 7 -10 и вистой

Re: Странный баг прошивки контроллера антенного переключател

Сб апр 03, 2021 22:29:52

Но народ на семерке прошивает без проблем. Что то не так делаю, а что, пока не пойму.

Добавлено after 24 minutes 38 seconds:
Re: Странный баг прошивки контроллера антенного переключателя
Вроде справился с драйвером, но теперь такая ошибка. https://img.radiokot.ru/files/143475/2hcbsk2dcc.png https://img.radiokot.ru/files/143475/2hbk7s9bf3.png

Re: Странный баг прошивки контроллера антенного переключател

Вс апр 04, 2021 16:53:32

Попробуйте вот эту оболочку/софтинку:
http://picpgm.picprojects.net
:hunger:
Ежли на компе имеется СОМ порт на материнке можно JDM (в моей модификации) прицепить....
:roll:

Re: Странный баг прошивки контроллера антенного переключател

Вс апр 04, 2021 17:57:17

eeprom.h знаю, но я взял примеры из datasheet микроконтроллера. Так захотелось, для наглядности что ли...

Даташит - он о железе. А функции готовой библиотеки - это о компиляторе. Так что еще в мануал на компилятор стоит поглядывать, ссылку я давал. Там много стандартных вещей для периферии уже реализовано просто.

Re: Странный баг прошивки контроллера антенного переключател

Пн апр 05, 2021 09:58:17

Во-первых вы немного изобрели велосипед функциями EEPROM_*(). Все это есть в avr/eeprom.h, сходите по ссылке.

Я тоже пишу свои функции. Атмеловские немного тяжёлые. Мои и быстрее, и меньше места занимают.

Re: Странный баг прошивки контроллера антенного переключател

Пн апр 05, 2021 13:03:15

Ребята, подскажите пож! Сюда, на этот программатор еще дополнительное подача напряжение нужно? Это по прошивки pic16F648A. Или же достаточно с ком порта?

Добавлено after 2 minutes 4 seconds:
Re: Странный баг прошивки контроллера антенного переключателя
фото https://img.radiokot.ru/files/143475/2he3lmbuc9.png https://img.radiokot.ru/files/143475/2he3lm9464.png https://img.radiokot.ru/files/143475/2he3lmbuc9.png

Re: Странный баг прошивки контроллера антенного переключател

Пн апр 05, 2021 13:06:48

Так а схема программатора какая?? Наверное имеется в виду JDM-программатор? Там питание с COM-порта приходит
Вот какая должна быть схема. Лично собирал, всё работает
Изображение
К себе даже стырил https://unlis.ru/?p=231

Re: Странный баг прошивки контроллера антенного переключател

Пн апр 05, 2021 22:59:00

Попробуйте вот эту оболочку/софтинку:
http://picpgm.picprojects.net
:hunger:
Ежли на компе имеется СОМ порт на материнке можно JDM (в моей модификации) прицепить....
:roll:

К сожалению не получилось и с этой программой

Добавлено after 4 minutes 1 second:
Так а схема программатора какая?? Наверное имеется в виду JDM-программатор? Там питание с COM-порта приходит
Спасибо! Попробую его собрать. А так, у меня ЖДМ программатор. Даже пробовал питание отдельно подать 5-12в, все без толку

Добавлено after 6 minutes 40 seconds:
К себе даже стырил https://unlis.ru/?p=231

Почему то ссылка не открываеться на печатную плату.

Re: Странный баг прошивки контроллера антенного переключател

Вт апр 06, 2021 11:02:17

Ссылка рабочая. Google Chrome выделывается скорее всего, там в ссылке http указано вместо https, а ему такие ссылки не нравятся. В новом окне откройте или "сохранить по ссылке"

Поправил ссылку, должна без танцев с бубном открываться
Ответить