|
Нужна помощь Atmega8+HD44780 40x2 +клавиатура со светодиодами. |
|
|
|
Dec 28 2014, 06:36
|
Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331

|
В общем нужна помощь знающих. Имеется символьный дисплей LM40x21a на HD44780 2строки 40 знакомест. Клавиатура из 9 кнопок и 8 светодиодов. Ну ещё пьезо-пищалка. Всем этим рулит Atmega8. Устройство предполагается использовать как выносную панель управления. Мозгов особых от неё не нужно, только принимать команды, зажигать нужные диоды, выводить информацию на дисплей и передавать коды нажатых кнопок. Задача не архи сложная. И всё это уже нормально работает в протусе, однако в железе не желает. А происходит вот что, при подаче команды на включение светодиода она выполняется, диод загорается, но дальше устройство зависает и не любые команды из терминала не реагирует. То же самое и с командами вывода на экран, только тут могут сработать несколько команд и потом опять контроллер уходит в себя и не возвращается. Однако на нажатия кнопок он при этом реагирует исправно и посылает коды кнопок в терминал. Смущает то что всё в принципе срабатывает как минимум один раз. А в протусе так вообще всё идёт на ура! Как такое возможно? По железу всё проверено на 100 рядов. Схема, и исходник на CVAVR прилагаются.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 15)
|
Dec 28 2014, 11:48
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

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

|
Fuse биту установлены правильно, более того устройство работает как и должно, до определённого момента. Тактируется от кварца 4,915Мгц Схема придумана не мной. Нарисована в протусе для симуляции, оригиналу не соответствует лишь в мелочах. Не хотите, не вникайте. На кварце в устройстве по 30 пик стоит. Пищалка подключена через 100 ом AVCC в устройстве подключена в 5в.
|
|
|
|
|
Dec 29 2014, 14:50
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Несколько правил при написании программ: Никаких магических чисел. Вменяемые названия переменных, битов, портов ввода-вывода. Модульность программ. Разбивайте программы на модули. Клавиатура, дисплей, UART - все это модули. В дальнейшем вы проекты будете собирать как конструктор из кубиков-программных модулей. Автоматное программирование. К примеру, опрос клавиатуры можно (и нужно) сделать на КА (конечный автомат). Цикл статей Татарчевского. Прикрепил архив, там посмотрите примеры. Удачи.
Прикрепленные файлы
jhvk.rar ( 10.18 килобайт )
Кол-во скачиваний: 26
|
|
|
|
|
Dec 29 2014, 17:42
|

Частый гость
 
Группа: Участник
Сообщений: 174
Регистрация: 3-11-06
Из: Санкт-Ленинград
Пользователь №: 21 949

|
Цитата(Pacifist @ Dec 28 2014, 09:36)  в протусе так вообще всё идёт на ура! Как такое возможно? Выдвину версию, что где-то напортачили с "чтение-модификация-запись".
--------------------
Obligatus servus.
|
|
|
|
|
Dec 29 2014, 20:05
|
Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331

|
Цитата(demiurg1978 @ Dec 29 2014, 20:50)  Несколько правил при написании программ: Никаких магических чисел. Вменяемые названия переменных, битов, портов ввода-вывода. Модульность программ. Разбивайте программы на модули. Клавиатура, дисплей, UART - все это модули. В дальнейшем вы проекты будете собирать как конструктор из кубиков-программных модулей. Автоматное программирование. К примеру, опрос клавиатуры можно (и нужно) сделать на КА (конечный автомат). Цикл статей Татарчевского. Прикрепил архив, там посмотрите примеры. Удачи. Спасибо! Учту рекомендации. Я и так стараюсь примерно так всё и делать, но это не просто. Опыта у меня пока маловато. Примеры пока изучаю. Цитата(Dmitry Dubrovenko @ Dec 29 2014, 23:42)  Выдвину версию, что где-то напортачили с "чтение-модификация-запись". Я примерно так и думаю, но где конкретно пока загадка.
|
|
|
|
|
Dec 30 2014, 08:37
|
Местный
  
Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709

|
Цитата(Pacifist @ Dec 30 2014, 02:05)  Спасибо! Учту рекомендации. Я и так стараюсь примерно так всё и делать, но это не просто. Опыта у меня пока маловато. Примеры пока изучаю.
Я примерно так и думаю, но где конкретно пока загадка. Примеры я вам дал. Иногда есть смысл переосмыслить проект и переписать программу. С учетом вышеизложенных советов... Согласен, сделанного жалко, а что поделать, если не работает? Вам уже посоветовали, разбейте программу на кусочки-модули. Отладили кусочек-модуль, следующий кусочек, так у вас программа и соберется. И ЗАБУДЬТЕ ПРО ПРОТЕУС!!! Симулятор AVR-Studio, собранная железка (пусть даже на макетке), если требуется, программные закладки (светодиодом помигать в нужный момент), осциллограф и ПК (для приема-передачи по UART, раз он у вас есть в проекте). Вот ваши инструменты. А то выросло младое поколение, блин, паяльника в руках не держали, в протеусе все гоняют, а потом плачутся, почему не работает...
Сообщение отредактировал demiurg1978 - Dec 30 2014, 13:31
|
|
|
|
|
Dec 30 2014, 13:54
|
Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331

|
Видимо никто не пытался вникнуть в то что я тут выложил, ну да ладно, повторяться не буду. И чем вам так протеус насолил? Очень удобная и полезная программка. В atmel studio нет возможности полноценно смоделировать работу UART(или я не нашёл как это сделать). Подскажите если знаете. А насчёт младого поколения это вы надеюсь не ко мне.
|
|
|
|
|
Dec 31 2014, 13:27
|

Частый гость
 
Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618

|
Какой смысл выкладывать файл протеуса, если нет других необходимых файлов для его запуска? В этом может быть проблемма: Код 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 - Dec 31 2014, 17:09
|
|
|
|
|
Jan 1 2015, 19:46
|

Частый гость
 
Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618

|
Цитата Какой смысл выкладывать файл протеуса, если нет других необходимых файлов для его запуска? Оказалось что он не открывается изза ошибки.
|
|
|
|
|
Jan 7 2015, 06:34
|
Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331

|
Цитата(Marian @ Dec 31 2014, 19:27)  Какой смысл выкладывать файл протеуса, если нет других необходимых файлов для его запуска?
Такую ошибку в протесе обнаружить проще всего, раскрыл массив и видишь номер последнего элемента. Да почему же меня никто не слушает? Я же написал что в протеусе всё работает как задумано! Идеально то есть. И как я смогу в протеусе обнаружить эту ошибку если в протеусе всё работает? Но не работает в железе. С цифрами в массивах играться пробовал, не помогает. Массивы в протусе раскрывал, смотрел, ничего неожиданного не обнаружил, ибо там всё работает. Может у кого то есть рабочий код для распознавания команд принятых через UART?
|
|
|
|
|
Jan 7 2015, 08:44
|
Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331

|
А вот и нет, не накосячил. Нашёл в чём беда. А дело было в терминале CV AVR. Он зачем то передавал лишний символ с кодом 0x0d, причём во втором и последующих командах. Как только попробовал поработать в другом терминале всё заработало. Не понятно только зачем это сделано. Столько времени потерял! А протеус я всё же не брошу. Как и много раз до этого он оказался ни при чём. Всем кто откликнулся спасибо!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|