Обсуждаем контроллеры компании Atmel.
Ответить

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

Чт сен 12, 2019 21:22:17

Всем доброго! Только начинаю писать проги в CVAVR, прошу сильно не пинать и по возможности помочь. Делаю индикацию в усилитель на LCD и mega8. Ещё нужны четыре ячейки с LED и кнопками. Кнопку нажали -- лед загорелся и после отпускания горит ещё секунду. Вместо логики задействую мегу, т.к. лсд её нагрузил совсем немного. Без секундной задержки всё путём. А с ней протеус глючит конкретно. ( В железе не пробовал). Понятно, что для сведующего задача на пол-минуты. Будьте добры, поправьте, что не так. В архиве файлы для протеуса, исходник, хекс.
Вложения
4knlcd.rar
(58.68 KiB) Скачиваний: 333

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

Пт сен 13, 2019 00:35:28

А в чём проблема то, собственно ? В том, что глючит Протез ?
Вы же понимаете, что ответ на это будет единственный. Попробуйте догадаться какой :)

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

Пт сен 13, 2019 00:51:48

Да, что-то сумбурно получилось. Попробую исправить.
Неправильно написанная прога глючит в протеусе . В архиве есть исходник, в него нужно кое-что добавить, что бы при нажатии S5 светик загорелся и при отпускании горел 1-1,5 секунды, и, разумеется, это не мешало отображению символов на лсд от S1-S4. Без этой строчки "delay..." всё в норме. Корректно вписать задержку "образование не позволяет" , вот и прошу помочь.
Или проблема в симуляторе, а в железе будет путём?
С уважением

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

Пт сен 13, 2019 01:35:35

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

PS: Кстати, если вся суть темы конкретно по Протезу, то по нему есть отдельная тема. Можно туда все жалобы запостить.

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

Пт сен 13, 2019 03:32:27

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

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

Пт сен 13, 2019 04:41:13

Что такое прот? Как S1-S4 выдают символы на элесде? (Наверно LCD но мало ли...)

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

Пт сен 13, 2019 04:56:21

Что такое прот? Как S1-S4 выдают символы на элесде? (Наверно LCD но мало ли...)
Прот -- протеус. Да, LCD, символы формируются мегой.

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

Пт сен 13, 2019 07:39:03

А в чём проблема то, собственно ? В том, что глючит Протез ?
Вы же понимаете, что ответ на это будет единственный. Попробуйте догадаться какой :)

Намек явный :)
Собирайте макет и отлаживайте программу в реале.
Лучше этого не будет, макет всегда пригодится и проще разобраться.

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

Пт сен 13, 2019 08:15:07

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;
     }
  }

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

Пт сен 13, 2019 21:01:46

Ответ по существу. Смотрю учебники, куда влепить "uint16_t counter = 0;"

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

Пт сен 13, 2019 21:27:17

Sergbern, классически - сразу после
Код:
void main(void)
{

В Вашем случае - куда угодно до первого оператора внутри блока while(1)

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

Пт сен 13, 2019 22:03:22

Ругается!! " Error: C:\cvavr\BIN\megalcd1.c(10): undefined symbol 'uint16_t' "

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

Пт сен 13, 2019 22:05:38

Sergbern, в начало, где остальные include, вставьте
#include <stdint.h>

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

Пт сен 13, 2019 22:13:29

Ну просто нет слов! Как доктор прописал.
Премного благодарен и крепко жму руку.

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

Пт сен 20, 2019 23:44:21

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