В общем нужна помощь знающих. Имеется символьный дисплей LM40x21a на HD44780 2строки 40 знакомест. Клавиатура из 9 кнопок и 8 светодиодов. Ну ещё пьезо-пищалка. Всем этим рулит Atmega8. Устройство предполагается использовать как выносную панель управления. Мозгов особых от неё не нужно, только принимать команды, зажигать нужные диоды, выводить информацию на дисплей и передавать коды нажатых кнопок. Задача не архи сложная. И всё это уже нормально работает в протусе, однако в железе не желает. А происходит вот что, при подаче команды на включение светодиода она выполняется, диод загорается, но дальше устройство зависает и не любые команды из терминала не реагирует. То же самое и с командами вывода на экран, только тут могут сработать несколько команд и потом опять контроллер уходит в себя и не возвращается. Однако на нажатия кнопок он при этом реагирует исправно и посылает коды кнопок в терминал.
Смущает то что всё в принципе срабатывает как минимум один раз. А в протусе так вообще всё идёт на ура! Как такое возможно? По железу всё проверено на 100 рядов.
Схема, и исходник на CVAVR прилагаются.
Та схема что нарисовано похоже только для симуляции. Покажите настоящую схему.
По программе. Для обмена между разными умными блоками приходится добавлять:
-проверку корректности принимаемых байтов;
-проверку длины принятого пакета;
-межбайтовый таймаут и таймаут на завершение всего пакета;
В случае сбоя должна происходить ресинхронизация по маркеру начала пакета.
Да эта схема для симуляии. Я конечно понимаю что всяких чудаков хватает, но я написал что схема работает. Вместо 1н стоит 30пФ, AVCC и AREF подключены к 5в. Вот реальная схема если вам так проще. Питание контроллера подключено но не отображается на схеме для простоты и на нём много блокировочных конденсаторов.
uk8amk писал(а):Та схема что нарисовано похоже только для симуляции. Покажите настоящую схему.
По программе. Для обмена между разными умными блоками приходится добавлять:
-проверку корректности принимаемых байтов;
-проверку длины принятого пакета;
-межбайтовый таймаут и таймаут на завершение всего пакета;
В случае сбоя должна происходить ресинхронизация по маркеру начала пакета.
Да, будет обмен между двумя умными блоками. Зачем такие сложности? Длина пакетов будет разная и это ключевой момент. А проще никак нельзя?