LCD, кнопки и заморочка с LED

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср ноя 21, 2018 02:29:02

Сообщение Sergbern »

Всем доброго! Только начинаю писать проги в CVAVR, прошу сильно не пинать и по возможности помочь. Делаю индикацию в усилитель на LCD и mega8. Ещё нужны четыре ячейки с LED и кнопками. Кнопку нажали -- лед загорелся и после отпускания горит ещё секунду. Вместо логики задействую мегу, т.к. лсд её нагрузил совсем немного. Без секундной задержки всё путём. А с ней протеус глючит конкретно. ( В железе не пробовал). Понятно, что для сведующего задача на пол-минуты. Будьте добры, поправьте, что не так. В архиве файлы для протеуса, исходник, хекс.
Вложения
4knlcd.rar
(58.68 КБ) 346 скачиваний
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

А в чём проблема то, собственно ? В том, что глючит Протез ?
Вы же понимаете, что ответ на это будет единственный. Попробуйте догадаться какой :)
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср ноя 21, 2018 02:29:02

Сообщение Sergbern »

Да, что-то сумбурно получилось. Попробую исправить.
Неправильно написанная прога глючит в протеусе . В архиве есть исходник, в него нужно кое-что добавить, что бы при нажатии S5 светик загорелся и при отпускании горел 1-1,5 секунды, и, разумеется, это не мешало отображению символов на лсд от S1-S4. Без этой строчки "delay..." всё в норме. Корректно вписать задержку "образование не позволяет" , вот и прошу помочь.
Или проблема в симуляторе, а в железе будет путём?
С уважением
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Sergbern писал(а): Попробую исправить.
Не получилось. Весь смысл поста, опять же, пришёл к одному - "Глючит Протез" :)
Вы бы хоть написали, что-ли, что значит "Глючит".

PS: Кстати, если вся суть темы конкретно по Протезу, то по нему есть отдельная тема. Можно туда все жалобы запостить.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср ноя 21, 2018 02:29:02

Сообщение Sergbern »

Спасибо за внимание! Проблема не в проте, а в программе. Проще испробовать. В архиве же есть всё!
1). Берём ИСХОДНИК, делаем из него хекс, запускаем в проте. Проверяем, всё в норме.То есть:
S1-S4 выдают на лсд символы, S5 зажигает лед, при отпускании -- тут же тухнет. (А мне нужно, чтобы горел ещё секунду.)
2). Берём ИСХОДНИК, делаем из него хекс со строчкой "delay_ms(1000)" (как в тексте ISXOD), и в прот. Если будет путём, значит, прога верна , и прабла у меня.
"что значит "Глючит"." -- ни одна кнопка не работает с хексом с delay_ms(1000).
Как правильно сделать задержку или ещё что, что бы после отпускания S5 лед горел ещё секунду?
Реклама
Родился
Сообщения: 5
Зарегистрирован: Вс июн 23, 2019 16:40:53

Сообщение Черный »

Что такое прот? Как S1-S4 выдают символы на элесде? (Наверно LCD но мало ли...)
Реклама
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср ноя 21, 2018 02:29:02

Сообщение Sergbern »

[uquote="Черный",url="/forum/viewtopic.php?p=3699642#p3699642"]Что такое прот? Как S1-S4 выдают символы на элесде? (Наверно LCD но мало ли...)[/uquote]Прот -- протеус. Да, LCD, символы формируются мегой.
Мудрый кот
Сообщения: 1808
Зарегистрирован: Пт мар 26, 2010 17:16:52
Откуда: Kazan

Сообщение pcb432 »

А в чём проблема то, собственно ? В том, что глючит Протез ?
Вы же понимаете, что ответ на это будет единственный. Попробуйте догадаться какой :)
Намек явный :)
Собирайте макет и отлаживайте программу в реале.
Лучше этого не будет, макет всегда пригодится и проще разобраться.
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Sergbern, когда на PINB.7 низкий уровень Вы делаете задержку на 1 секунду не только свечения светодиода, а всего цикла опроса кнопок. То есть, для срабатывания любой кнопки ее надо удерживать больше секунды.
Заведите переменную счетчик, а в последних двух if используйте ее. Например, так:

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

#define COUNTER_DELAY_MS 1000
uint16_t counter = 0;

...

  if( PINB.7 ) {
     PORTC.0=1;
     counter=1;
  } 
  if ( !PINB.7 && counter ) {
     if ( ++counter<COUNTER_DELAY_MS ) {
       delay_ms(1);
     } else {
       PORTC.0=0;
       counter=0;
     }
  }
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср ноя 21, 2018 02:29:02

Сообщение Sergbern »

Ответ по существу. Смотрю учебники, куда влепить "uint16_t counter = 0;"
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Sergbern, классически - сразу после

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

void main(void)
{
В Вашем случае - куда угодно до первого оператора внутри блока while(1)
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср ноя 21, 2018 02:29:02

Сообщение Sergbern »

Ругается!! " Error: C:\cvavr\BIN\megalcd1.c(10): undefined symbol 'uint16_t' "
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Sergbern, в начало, где остальные include, вставьте
#include <stdint.h>
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Ср ноя 21, 2018 02:29:02

Сообщение Sergbern »

Ну просто нет слов! Как доктор прописал.
Премного благодарен и крепко жму руку.
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

В вашем случае мало научиться писать на си, нужно научиться программированию. Язык не важен, важны принципы программирования. Также, нужно понимать, что это ПРОЕКТ. И исходить именно с этой позиции. Для новичка вы рано замахнулись на такой проект.
Поэтому, попунктно:
Проектирование сверху вниз. Устройство - декомпозиция на блоки, модули до атомарности.
Программирование:
Логическое разделение программы на программные блоки, модули. Кнопки отдельно, дисплей отдельно, светодиоды отдельно. Взаимодействие программных модулей. Псевдопараллельная работа программных модулей.
Автоматное программирование. Конечные автоматы.
Контактная информация:
Ответить

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