реклама на сайте
подробности

 
 
> Нужна помощь Atmega8+HD44780 40x2 +клавиатура со светодиодами.
Pacifist
сообщение Dec 28 2014, 06:36
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331



В общем нужна помощь знающих. Имеется символьный дисплей LM40x21a на HD44780 2строки 40 знакомест. Клавиатура из 9 кнопок и 8 светодиодов. Ну ещё пьезо-пищалка. Всем этим рулит Atmega8. Устройство предполагается использовать как выносную панель управления. Мозгов особых от неё не нужно, только принимать команды, зажигать нужные диоды, выводить информацию на дисплей и передавать коды нажатых кнопок. Задача не архи сложная. И всё это уже нормально работает в протусе, однако в железе не желает. А происходит вот что, при подаче команды на включение светодиода она выполняется, диод загорается, но дальше устройство зависает и не любые команды из терминала не реагирует. То же самое и с командами вывода на экран, только тут могут сработать несколько команд и потом опять контроллер уходит в себя и не возвращается. Однако на нажатия кнопок он при этом реагирует исправно и посылает коды кнопок в терминал.
Смущает то что всё в принципе срабатывает как минимум один раз. А в протусе так вообще всё идёт на ура! Как такое возможно? По железу всё проверено на 100 рядов.
Схема, и исходник на CVAVR прилагаются.
Прикрепленные файлы
Прикрепленный файл  ______WinRAR.rar ( 29.08 килобайт ) Кол-во скачиваний: 25
 
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 15)
kovigor
сообщение Dec 28 2014, 11:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Pacifist @ Dec 28 2014, 09:36) *
Как такое возможно? По железу всё проверено на 100 рядов.

1. Fuse - биты правильно установлены ? От чего тактируется МК ?
2. Схема нарисована из рук вон плохо. У меня нет ни малейшего желания вникать в хитросплетения кнопок, додов, светодиодов и проволочек. Что-то невообразимое.
3. По нанофараде на кварц - не много ли ? Там по 22 пик вполне достаточно.
4. Пищалка подключена прямо к МК, без всякого ограничения тока. А так можно ? Очень сомневаюсь.
5. AVCC висит в воздухе. Забыли подключить ?
Go to the top of the page
 
+Quote Post
Pacifist
сообщение Dec 28 2014, 12:52
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331



Fuse биту установлены правильно, более того устройство работает как и должно, до определённого момента.
Тактируется от кварца 4,915Мгц
Схема придумана не мной. Нарисована в протусе для симуляции, оригиналу не соответствует лишь в мелочах. Не хотите, не вникайте.
На кварце в устройстве по 30 пик стоит.
Пищалка подключена через 100 ом
AVCC в устройстве подключена в 5в.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 28 2014, 19:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Pacifist @ Dec 28 2014, 15:52) *
устройство работает как и должно, до определённого момента.

Стек переполняется. Или в обработчике прерывания ошибка. Или вы с типами данных что-то напутали. Или с указателями. Причин может быть миллион.
Попробуйте оставить из всей программы только самое необходимое, после чего проверьте, работает ваше устройство или нет. Работает ? Если да, то добавляем следующий кусочек. И так до тех пор, пока оно не перестанет работать. А дальше все просто ...
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Dec 29 2014, 14:50
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Несколько правил при написании программ:
Никаких магических чисел. Вменяемые названия переменных, битов, портов ввода-вывода.
Модульность программ. Разбивайте программы на модули. Клавиатура, дисплей, UART - все это модули. В дальнейшем вы проекты будете собирать как конструктор из кубиков-программных модулей.
Автоматное программирование.
К примеру, опрос клавиатуры можно (и нужно) сделать на КА (конечный автомат).
Цикл статей Татарчевского.
Прикрепил архив, там посмотрите примеры.
Удачи.
Прикрепленные файлы
Прикрепленный файл  jhvk.rar ( 10.18 килобайт ) Кол-во скачиваний: 26
 
Go to the top of the page
 
+Quote Post
Dmitry Dubrovenk...
сообщение Dec 29 2014, 17:42
Сообщение #6


Частый гость
**

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



Цитата(Pacifist @ Dec 28 2014, 09:36) *
в протусе так вообще всё идёт на ура! Как такое возможно?
Выдвину версию, что где-то напортачили с "чтение-модификация-запись".


--------------------
Obligatus servus.
Go to the top of the page
 
+Quote Post
Pacifist
сообщение Dec 29 2014, 20:05
Сообщение #7





Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331



Цитата(demiurg1978 @ Dec 29 2014, 20:50) *
Несколько правил при написании программ:
Никаких магических чисел. Вменяемые названия переменных, битов, портов ввода-вывода.
Модульность программ. Разбивайте программы на модули. Клавиатура, дисплей, UART - все это модули. В дальнейшем вы проекты будете собирать как конструктор из кубиков-программных модулей.
Автоматное программирование.
К примеру, опрос клавиатуры можно (и нужно) сделать на КА (конечный автомат).
Цикл статей Татарчевского.
Прикрепил архив, там посмотрите примеры.
Удачи.


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

Я примерно так и думаю, но где конкретно пока загадка.
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Dec 30 2014, 08:37
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



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

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

Примеры я вам дал. Иногда есть смысл переосмыслить проект и переписать программу. С учетом вышеизложенных советов... Согласен, сделанного жалко, а что поделать, если не работает? Вам уже посоветовали, разбейте программу на кусочки-модули. Отладили кусочек-модуль, следующий кусочек, так у вас программа и соберется. И ЗАБУДЬТЕ ПРО ПРОТЕУС!!! Симулятор AVR-Studio, собранная железка (пусть даже на макетке), если требуется, программные закладки (светодиодом помигать в нужный момент), осциллограф и ПК (для приема-передачи по UART, раз он у вас есть в проекте). Вот ваши инструменты. А то выросло младое поколение, блин, паяльника в руках не держали, в протеусе все гоняют, а потом плачутся, почему не работает...

Сообщение отредактировал demiurg1978 - Dec 30 2014, 13:31
Go to the top of the page
 
+Quote Post
Pacifist
сообщение Dec 30 2014, 13:54
Сообщение #9





Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331



Видимо никто не пытался вникнуть в то что я тут выложил, ну да ладно, повторяться не буду. И чем вам так протеус насолил? Очень удобная и полезная программка. В atmel studio нет возможности полноценно смоделировать работу UART(или я не нашёл как это сделать). Подскажите если знаете. А насчёт младого поколения это вы надеюсь не ко мне.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 30 2014, 16:00
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Pacifist @ Dec 30 2014, 17:54) *
И чем вам так протеус насолил? Очень удобная и полезная программка.

И лишняя, почти всегда. МК надо отлаживать в железе. Это не тот случай, где нужен симулятор.
А вникать в чужой программный код, действительно, мало кто имеет возможность. Попробуйте сначала сами досконально разобраться в вашем проекте (только Протеус уберите подальше) ...
Go to the top of the page
 
+Quote Post
Marian
сообщение Dec 31 2014, 13:27
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Marian
сообщение Jan 1 2015, 19:46
Сообщение #12


Частый гость
**

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



Цитата
Какой смысл выкладывать файл протеуса, если нет других необходимых файлов для его запуска?

Оказалось что он не открывается изза ошибки.
Go to the top of the page
 
+Quote Post
Pacifist
сообщение Jan 7 2015, 06:34
Сообщение #13





Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331



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

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

Да почему же меня никто не слушает? Я же написал что в протеусе всё работает как задумано! Идеально то есть. И как я смогу в протеусе обнаружить эту ошибку если в протеусе всё работает? Но не работает в железе.
С цифрами в массивах играться пробовал, не помогает. Массивы в протусе раскрывал, смотрел, ничего неожиданного не обнаружил, ибо там всё работает.
Может у кого то есть рабочий код для распознавания команд принятых через UART?
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Jan 7 2015, 08:23
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



Еще раз, забудьте о протеусе. И плевать, что в нем идеально работает. Реальный МК - это не протеус. Если в железе не работает, значит где-то вы нокосячили.
Go to the top of the page
 
+Quote Post
Pacifist
сообщение Jan 7 2015, 08:44
Сообщение #15





Группа: Новичок
Сообщений: 6
Регистрация: 28-12-14
Пользователь №: 84 331



А вот и нет, не накосячил. Нашёл в чём беда. А дело было в терминале CV AVR. Он зачем то передавал лишний символ с кодом 0x0d, причём во втором и последующих командах. Как только попробовал поработать в другом терминале всё заработало. Не понятно только зачем это сделано. Столько времени потерял!
А протеус я всё же не брошу. Как и много раз до этого он оказался ни при чём.
Всем кто откликнулся спасибо!
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Jan 7 2015, 08:54
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



"Я его не брошу, потому что он хороший"... Флаг в руки...

Сообщение отредактировал demiurg1978 - Jan 7 2015, 08:55
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01587 секунд с 7
ELECTRONIX ©2004-2016