Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нужна помощь Atmega8+HD44780 40x2 +клавиатура со светодиодами.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Pacifist
В общем нужна помощь знающих. Имеется символьный дисплей LM40x21a на HD44780 2строки 40 знакомест. Клавиатура из 9 кнопок и 8 светодиодов. Ну ещё пьезо-пищалка. Всем этим рулит Atmega8. Устройство предполагается использовать как выносную панель управления. Мозгов особых от неё не нужно, только принимать команды, зажигать нужные диоды, выводить информацию на дисплей и передавать коды нажатых кнопок. Задача не архи сложная. И всё это уже нормально работает в протусе, однако в железе не желает. А происходит вот что, при подаче команды на включение светодиода она выполняется, диод загорается, но дальше устройство зависает и не любые команды из терминала не реагирует. То же самое и с командами вывода на экран, только тут могут сработать несколько команд и потом опять контроллер уходит в себя и не возвращается. Однако на нажатия кнопок он при этом реагирует исправно и посылает коды кнопок в терминал.
Смущает то что всё в принципе срабатывает как минимум один раз. А в протусе так вообще всё идёт на ура! Как такое возможно? По железу всё проверено на 100 рядов.
Схема, и исходник на CVAVR прилагаются.
kovigor
Цитата(Pacifist @ Dec 28 2014, 09:36) *
Как такое возможно? По железу всё проверено на 100 рядов.

1. Fuse - биты правильно установлены ? От чего тактируется МК ?
2. Схема нарисована из рук вон плохо. У меня нет ни малейшего желания вникать в хитросплетения кнопок, додов, светодиодов и проволочек. Что-то невообразимое.
3. По нанофараде на кварц - не много ли ? Там по 22 пик вполне достаточно.
4. Пищалка подключена прямо к МК, без всякого ограничения тока. А так можно ? Очень сомневаюсь.
5. AVCC висит в воздухе. Забыли подключить ?
Pacifist
Fuse биту установлены правильно, более того устройство работает как и должно, до определённого момента.
Тактируется от кварца 4,915Мгц
Схема придумана не мной. Нарисована в протусе для симуляции, оригиналу не соответствует лишь в мелочах. Не хотите, не вникайте.
На кварце в устройстве по 30 пик стоит.
Пищалка подключена через 100 ом
AVCC в устройстве подключена в 5в.
kovigor
Цитата(Pacifist @ Dec 28 2014, 15:52) *
устройство работает как и должно, до определённого момента.

Стек переполняется. Или в обработчике прерывания ошибка. Или вы с типами данных что-то напутали. Или с указателями. Причин может быть миллион.
Попробуйте оставить из всей программы только самое необходимое, после чего проверьте, работает ваше устройство или нет. Работает ? Если да, то добавляем следующий кусочек. И так до тех пор, пока оно не перестанет работать. А дальше все просто ...
demiurg1978
Несколько правил при написании программ:
Никаких магических чисел. Вменяемые названия переменных, битов, портов ввода-вывода.
Модульность программ. Разбивайте программы на модули. Клавиатура, дисплей, UART - все это модули. В дальнейшем вы проекты будете собирать как конструктор из кубиков-программных модулей.
Автоматное программирование.
К примеру, опрос клавиатуры можно (и нужно) сделать на КА (конечный автомат).
Цикл статей Татарчевского.
Прикрепил архив, там посмотрите примеры.
Удачи.
Dmitry Dubrovenko
Цитата(Pacifist @ Dec 28 2014, 09:36) *
в протусе так вообще всё идёт на ура! Как такое возможно?
Выдвину версию, что где-то напортачили с "чтение-модификация-запись".
Pacifist
Цитата(demiurg1978 @ Dec 29 2014, 20:50) *
Несколько правил при написании программ:
Никаких магических чисел. Вменяемые названия переменных, битов, портов ввода-вывода.
Модульность программ. Разбивайте программы на модули. Клавиатура, дисплей, UART - все это модули. В дальнейшем вы проекты будете собирать как конструктор из кубиков-программных модулей.
Автоматное программирование.
К примеру, опрос клавиатуры можно (и нужно) сделать на КА (конечный автомат).
Цикл статей Татарчевского.
Прикрепил архив, там посмотрите примеры.
Удачи.


Спасибо! Учту рекомендации. Я и так стараюсь примерно так всё и делать, но это не просто. Опыта у меня пока маловато. Примеры пока изучаю.
Цитата(Dmitry Dubrovenko @ Dec 29 2014, 23:42) *
Выдвину версию, что где-то напортачили с "чтение-модификация-запись".

Я примерно так и думаю, но где конкретно пока загадка.
demiurg1978
Цитата(Pacifist @ Dec 30 2014, 02:05) *
Спасибо! Учту рекомендации. Я и так стараюсь примерно так всё и делать, но это не просто. Опыта у меня пока маловато. Примеры пока изучаю.

Я примерно так и думаю, но где конкретно пока загадка.

Примеры я вам дал. Иногда есть смысл переосмыслить проект и переписать программу. С учетом вышеизложенных советов... Согласен, сделанного жалко, а что поделать, если не работает? Вам уже посоветовали, разбейте программу на кусочки-модули. Отладили кусочек-модуль, следующий кусочек, так у вас программа и соберется. И ЗАБУДЬТЕ ПРО ПРОТЕУС!!! Симулятор AVR-Studio, собранная железка (пусть даже на макетке), если требуется, программные закладки (светодиодом помигать в нужный момент), осциллограф и ПК (для приема-передачи по UART, раз он у вас есть в проекте). Вот ваши инструменты. А то выросло младое поколение, блин, паяльника в руках не держали, в протеусе все гоняют, а потом плачутся, почему не работает...
Pacifist
Видимо никто не пытался вникнуть в то что я тут выложил, ну да ладно, повторяться не буду. И чем вам так протеус насолил? Очень удобная и полезная программка. В atmel studio нет возможности полноценно смоделировать работу UART(или я не нашёл как это сделать). Подскажите если знаете. А насчёт младого поколения это вы надеюсь не ко мне.
kovigor
Цитата(Pacifist @ Dec 30 2014, 17:54) *
И чем вам так протеус насолил? Очень удобная и полезная программка.

И лишняя, почти всегда. МК надо отлаживать в железе. Это не тот случай, где нужен симулятор.
А вникать в чужой программный код, действительно, мало кто имеет возможность. Попробуйте сначала сами досконально разобраться в вашем проекте (только Протеус уберите подальше) ...
Marian
Какой смысл выкладывать файл протеуса, если нет других необходимых файлов для его запуска?

В этом может быть проблемма:

Код
c=40;
         while (c!=0)      //очистить буфер команд
         {
          str[c]=0;
         c=15;
         while (c!=0)      //очистить буфер данных
         {
         command[c]=0;


при том, что :
Код
char command[15];
char str[40];


попробуйте:
Код
char command[16];
char str[41];




Цитата(kovigor @ Dec 30 2014, 19:00) *
Попробуйте сначала сами досконально разобраться в вашем проекте (только Протеус уберите подальше) ...

Такую ошибку в протесе обнаружить проще всего, раскрыл массив и видишь номер последнего элемента.
Marian
Цитата
Какой смысл выкладывать файл протеуса, если нет других необходимых файлов для его запуска?

Оказалось что он не открывается изза ошибки.
Pacifist
Цитата(Marian @ Dec 31 2014, 19:27) *
Какой смысл выкладывать файл протеуса, если нет других необходимых файлов для его запуска?

Такую ошибку в протесе обнаружить проще всего, раскрыл массив и видишь номер последнего элемента.

Да почему же меня никто не слушает? Я же написал что в протеусе всё работает как задумано! Идеально то есть. И как я смогу в протеусе обнаружить эту ошибку если в протеусе всё работает? Но не работает в железе.
С цифрами в массивах играться пробовал, не помогает. Массивы в протусе раскрывал, смотрел, ничего неожиданного не обнаружил, ибо там всё работает.
Может у кого то есть рабочий код для распознавания команд принятых через UART?
demiurg1978
Еще раз, забудьте о протеусе. И плевать, что в нем идеально работает. Реальный МК - это не протеус. Если в железе не работает, значит где-то вы нокосячили.
Pacifist
А вот и нет, не накосячил. Нашёл в чём беда. А дело было в терминале CV AVR. Он зачем то передавал лишний символ с кодом 0x0d, причём во втором и последующих командах. Как только попробовал поработать в другом терминале всё заработало. Не понятно только зачем это сделано. Столько времени потерял!
А протеус я всё же не брошу. Как и много раз до этого он оказался ни при чём.
Всем кто откликнулся спасибо!
demiurg1978
"Я его не брошу, потому что он хороший"... Флаг в руки...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.