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

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 15
Зарегистрирован: Ср окт 31, 2012 12:59:57
Откуда: Волгоград

Сообщение blackheart »

Доброго времени суток! Разрабатываю контроллер управления антенным коммутатором на 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 сохраняет, переменной, отвечающей за биты разрешенных/запрещенных антенн, присваивается значение, которое с компа пришло. А вот пока процедура обработки кнопок не выполнится хотя бы раз - только что разрешенные кнопки не работают...
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Сообщение musor »

нихрена не понял нахуя отключать антены от фидера удалено для этого есть суматоры/филтры сложения это есди RX\TX ну и стандартных дисекоф если толка нам прием хватает выше крыши пилот сигнал 3Ч...
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Реклама
Родился
Сообщения: 15
Зарегистрирован: Ср окт 31, 2012 12:59:57
Откуда: Волгоград

Сообщение blackheart »

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

Баг, кстати, выловлен. Если кому интересно: компилятор Си решил при сборке, что переменная enabled в условии

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

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

Тему можно закрывать.
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

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

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

Сообщение parovoZZ »

[uquote="NStorm",url="/forum/viewtopic.php?p=4008070#p4008070"]Во-вторых, вы пишете по фиксированному адресу в EEPROM. Если переключения достаточно частые, то в итоге вы "выжжете" ячейку EEPROM. Конечно там много циклов перезаписи, даже больше заявленных 100К по факту. Но всё-таки если запись идет часто и этот ресурс можно за обозримый срок исчерпать. Если конечно переключение ручками, раз-два в день, то это не страшно. Если с компа автоматом часто очень переключается - прикиньте ресурс. И если что, надо делать т.н. wear leveling.l[/uquote]
Если так надо часто писать в EEPROM, то FRAM в помощь. Если не хочется иметь два корпуса, то MSP430FRxxx в помощь.
Реклама
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

parovoZZ, менять контроллер слишком радикально. Можно просто несчастных 2 байта писать по кругу, тем самым увеличив ресурс в 64 раза (т.к. 128 байт имеется) максимум (если не использовать ID записи, а просто скажем затирая до FF прошлое значение после записи и поэтому находя последнюю запись). Ес-но в определенных случаях может и этого не хватить... но скорее всего в данном случае менять МК не придется всё-таки )
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Достаточно ds1307 с ее оперативкой из 64 байт...
:wink:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

Просто к примеру, скажем у нас события пишутся раз 500 в день. Это чуть больше чем пол года гарантированной работы МК до выхода из строя при записи в одни и те же ячейки. Если ввести примитивный кольцевой буфер - это уже ~32 года что уже более, чем достаточный срок службы. Ну плюс тут еще есть нюанс - контроль целостности. Можно еще CRC добавить, размер блока вырастет, но будет гарантия достоверности считанных данных.
Друг Кота
Аватара пользователя
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Сообщение musor »

проблема актуалная был какой недотелк где ДЕБИЛЫ сэкономили копечную еромку 24ххх
а писали в память проца... в результате некоторые ячейки выходили из строя через 3-5лет отказывало переключени програм и громкость глючила...
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Родился
Сообщения: 15
Зарегистрирован: Ср окт 31, 2012 12:59:57
Откуда: Волгоград

Сообщение blackheart »

[uquote="NStorm",url="/forum/viewtopic.php?p=4008070#p4008070"]Во-первых вы немного изобрели велосипед функциями EEPROM_*(). Все это есть в avr/eeprom.h, сходите по ссылке.[/uquote]
Про eeprom.h знаю, но я взял примеры из datasheet микроконтроллера. Так захотелось, для наглядности что ли...

[uquote="NStorm",url="/forum/viewtopic.php?p=4008070#p4008070"]Во-вторых, вы пишете по фиксированному адресу в EEPROM. Если переключения достаточно частые, то в итоге вы "выжжете" ячейку EEPROM.[/uquote]
Над этим я думаю, буду модернизировать прошивку. Эта прошивка - вообще первое, что я написал в жизни на Си под AVR, поэтому ни разу не претендует на правильность.

[uquote="NStorm",url="/forum/viewtopic.php?p=4008070#p4008070"]Ну и еще в обмен по UART добавить бы некий контроль целостности пересылки.[/uquote]
Об этом тоже думал. См. выше)

Ну а в общем - большое спасибо за советы, обязательно учту всё сказанное. Ибо я не программист, и у меня существует такая проблема, что написать-то вроде можно, но как написать - красиво, правильно и компактно или с кучей костылей, но чтоб в конечном итоге работало - спросить лишний раз не у кого (нет таких знакомых поблизости), приходится самому изучать; и порой непонятно - забил ли я тут костыль, либо это не костыль, а правильное решение...
Контактная информация:
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт янв 19, 2021 23:28:53

Сообщение toronto76 »

Всем привет ! Ребята, подскажите знающие, проблема при прошивке 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 КБ) 114 скачиваний
Последний раз редактировалось toronto76 Сб апр 03, 2021 22:03:59, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Сообщение musor »

toronto76, могу толка предположить ее дрова для NT/2000/XP драйвер" несовместимы с 7 -10 и вистой
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт янв 19, 2021 23:28:53

Сообщение toronto76 »

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

Добавлено after 24 minutes 38 seconds:
Re: Странный баг прошивки контроллера антенного переключателя
Вроде справился с драйвером, но теперь такая ошибка. https://img.radiokot.ru/files/143475/2hcbsk2dcc.png https://img.radiokot.ru/files/143475/2hbk7s9bf3.png
Друг Кота
Аватара пользователя
Сообщения: 15589
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Попробуйте вот эту оболочку/софтинку:
http://picpgm.picprojects.net
:hunger:
Ежли на компе имеется СОМ порт на материнке можно JDM (в моей модификации) прицепить....
:roll:
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Сообщение NStorm »

[uquote="blackheart",url="/forum/viewtopic.php?p=4009297#p4009297"]eeprom.h знаю, но я взял примеры из datasheet микроконтроллера. Так захотелось, для наглядности что ли...[/uquote]
Даташит - он о железе. А функции готовой библиотеки - это о компиляторе. Так что еще в мануал на компилятор стоит поглядывать, ссылку я давал. Там много стандартных вещей для периферии уже реализовано просто.
Мудрый кот
Сообщения: 1759
Зарегистрирован: Пт июн 01, 2018 07:28:45

Сообщение parovoZZ »

[uquote="NStorm",url="/forum/viewtopic.php?p=4008070#p4008070"]Во-первых вы немного изобрели велосипед функциями EEPROM_*(). Все это есть в avr/eeprom.h, сходите по ссылке.[/uquote]
Я тоже пишу свои функции. Атмеловские немного тяжёлые. Мои и быстрее, и меньше места занимают.
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт янв 19, 2021 23:28:53

Сообщение toronto76 »

Ребята, подскажите пож! Сюда, на этот программатор еще дополнительное подача напряжение нужно? Это по прошивки 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
Родился
Сообщения: 15
Зарегистрирован: Ср окт 31, 2012 12:59:57
Откуда: Волгоград

Сообщение blackheart »

Так а схема программатора какая?? Наверное имеется в виду JDM-программатор? Там питание с COM-порта приходит
Вот какая должна быть схема. Лично собирал, всё работает
Изображение
К себе даже стырил https://unlis.ru/?p=231
Контактная информация:
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт янв 19, 2021 23:28:53

Сообщение toronto76 »

[uquote="BOB51",url="/forum/viewtopic.php?p=4009872#p4009872"]Попробуйте вот эту оболочку/софтинку:
http://picpgm.picprojects.net
:hunger:
Ежли на компе имеется СОМ порт на материнке можно JDM (в моей модификации) прицепить....
:roll:[/uquote]
К сожалению не получилось и с этой программой

Добавлено after 4 minutes 1 second:
[uquote="blackheart",url="/forum/viewtopic.php?p=4010311#p4010311"]Так а схема программатора какая?? Наверное имеется в виду JDM-программатор? Там питание с COM-порта приходит
Спасибо! Попробую его собрать. А так, у меня ЖДМ программатор. Даже пробовал питание отдельно подать 5-12в, все без толку

Добавлено after 6 minutes 40 seconds:
К себе даже стырил https://unlis.ru/?p=231[/uquote]
Почему то ссылка не открываеться на печатную плату.
Родился
Сообщения: 15
Зарегистрирован: Ср окт 31, 2012 12:59:57
Откуда: Волгоград

Сообщение blackheart »

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

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

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