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

Re: ШИМ-генератор ATMega8+LCD+кнопки

Чт окт 27, 2022 16:47:02

Ребят, я немного о другом. LCD тормозит при пониженных температурах, также в datasheet упоминается, что напряжение регулировки контраста зависит от температуры. Интересует опыт в этом вопросе.
Даже при +15 C уже тормозит и мигание при изменении шага было почти не видно.

А, про это.. Ну оригинальные Winstar-ы и МЭЛТ-ы, которыми я пользовался в те времена, работали нормально. Сильно в холоде не проверял, но при уличных осенних +10° замечаний не было. Как сейчас обстоят дела с китайскими матрицами - фик знает, не пробовал.
При понижении температуры все ЖКД снижают быстродействие самих кристаллов, они медленнее поворачиваются, это нормально. При -30° время их "поворота" может достигать пары секунд.

Re: ШИМ-генератор ATMega8+LCD+кнопки

Чт окт 27, 2022 22:27:21

Demiurg писал(а):Первый вариант, это прерывание аппаратного таймера настроенного на 1 мс.
но ты же утверждал, что ты прерывание не используешь совсем.
а теперь оказалось, что ты все-таки используешь прерывание аппаратного таймера.
зачем же нас обманывать, что ты отказался от прерываний вообще?

Re: ШИМ-генератор ATMega8+LCD+кнопки

Пт окт 28, 2022 04:55:56

Где то возникло недопонимание. Где я писал, что я вообще не использую прерывания? Писал про программные таймеры. Есть два варианта.
1 - Используется прерывание аппаратного таймера.
2 - Опрос флага прерывания аппаратного таймера.

В других прерываниях у меня минимальные действия. Стараюсь придерживаться этого правила.

Все зависит от задачи.

Re: ШИМ-генератор ATMega8+LCD+кнопки

Пт окт 28, 2022 07:20:20

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

Re: ШИМ-генератор ATMega8+LCD+кнопки

Пт окт 28, 2022 08:26:19

На простых (и быстрых) задачах, когда не нужна точность, использую delay(T_SYS) - никаких таймеров.)

Re: ШИМ-генератор ATMega8+LCD+кнопки

Пт окт 28, 2022 08:56:43

из прерываний убрался вообще

Теперь понял, где недопонимание. Я стараюсь в прерываниях совершать минимальные действия. Это я имел в виду. Если проект, задача позволяет, максимум, что у меня было в прерываниях, это динамическая индикация.

Re: ШИМ-генератор ATMega8+LCD+кнопки

Пт окт 28, 2022 20:10:33

ну да, именно эти слова у меня вывернулись так, что ты отказался от прерываний вообще.

Re: ШИМ-генератор ATMega8+LCD+кнопки

Вс окт 30, 2022 13:23:14

Сделал тестовый проект. Вывод на LCD дисплей непосредственно. Не стал заморачиваться, писал в лоб.

Спойлер
Код:
//==================
#include "main_def_func.h" // Заголовочные файлы, глобальные определения, общие функции.
//==================

//==================
__C_task main (void)
{
   static u08 cnt = 0;

   init_soft_timers ();
   Init_Events ();

   wdt_enable (WDTO_15_MS); // Инициализаця сторожевого таймера. 16 мс.

   __enable_interrupt (); // Глобальное разрешение прерываний.

   while (!(char_dsp_init ()))
   {
      __watchdog_reset (); // Сброс сторожевого таймера.
   }

   while (1)
   {
      __watchdog_reset (); // Сброс сторожевого таймера.

      switch (cnt)
      {
         case 0:
            lcd_send_com (0x80);
            cnt = 1;
            break;

         case 1:
            lcd_send_data (0x30);
            cnt = 2;
            break;

         case 2:
            lcd_send_data (0x31);
            cnt = 3;
            break;

         case 3:
            lcd_send_data (0x32);
            cnt = 4;
            break;

         case 4:
            lcd_send_data (0x33);
            cnt = 5;
            break;

         case 5:
            lcd_send_data (0x34);
            cnt = 6;
            break;

         case 6:
            lcd_send_data (0x35);
            cnt = 7;
            break;

         case 7:
            lcd_send_data (0x36);
            cnt = 8;
            break;

         case 8:
            lcd_send_data (0x37);
            cnt = 9;
            break;

         case 9:
            lcd_send_data (0x38);
            cnt = 10;
            break;

         case 10:
            lcd_send_data (0x39);
            cnt = 11;
            break;

         case 11:
            lcd_send_data (0x30);
            cnt = 12;
            break;

         case 12:
            lcd_send_data (0x31);
            cnt = 13;
            break;

         case 13:
            lcd_send_data (0x32);
            cnt = 14;
            break;

         case 14:
            lcd_send_data (0x33);
            cnt = 15;
            break;

         case 15:
            lcd_send_data (0x34);
            cnt = 16;
            break;

         case 16:
            lcd_send_data (0x35);
            cnt = 17;
            break;

         case 17:
            lcd_send_data (0x36);
            cnt = 18;
            break;

         case 18:
            lcd_send_data (0x37);
            cnt = 19;
            break;

         case 19:
            lcd_send_data (0x38);
            cnt = 20;
            break;

         case 20:
            lcd_send_data (0x39);
            cnt = 0;
            break;
      }

      delay_us (40);
   }

   while (1)
   {
      __watchdog_reset (); // Сброс сторожевого таймера.

      #ifdef __ST_NO_INTERRUPT__
      proc_sys_tick ();
      #endif

      proc_device (); // Главный алгоритм программы.

      info_service ();

      drv_char_dsp ();

      Process_Events ();
   }
}
//==================


Дисплей 20х4. 4-битная шина. Я сделал так, отправка адреса 1 строки, потом заполнение строки. 20 символов. Между отправками примерно 50 us. Время от отправки адреса до отправки последнего символа заняло 1076 us.

Так как дело было давно, всех деталей я не запомнил. Признаю, время установки адреса, символа примерно соответствует даташиту. Чтобы наверняка, я чуток превысил времянки. Ногодрыг, установка адреса, строки. Почему я ошибочно запомнил, что между отправками адресов, символов время занимало больше, я сейчас уже не скажу. Но, как я писал раньше, так как у меня системный тик 1 мс, чтобы программные таймеры не врали, итерация основного цикла должна всегда выполняться с запасом. Пакетный вывод на дисплей занимает много времени, поэтому я раздробил вывод символов.

Re: ШИМ-генератор ATMega8+LCD+кнопки

Вс окт 30, 2022 15:41:04

каждый делает так, как ему удобно и как ему нравится.

Re: ШИМ-генератор ATMega8+LCD+кнопки

Вс окт 30, 2022 16:36:18

...писал в лоб.

Один while(1); из которого не видно выхода, за ним другой while(1); Так задумано?

Re: ШИМ-генератор ATMega8+LCD+кнопки

Вс окт 30, 2022 17:17:06

Да, проект тестовый, заготовка. Прямо в нем и написал.

Re: ШИМ-генератор ATMega8+LCD+кнопки

Сб сен 09, 2023 08:49:00

Версия 0.88. F_CPU = 8...16 МГц
Исправлен Watchdog c 500 мс на 2 с т.к. на частоте < 4 Гц контроллер сбрасывается до обновления частоты и было невозможно после этого поменять частоту.
Добавлены проекты в VS Code.
Вложения
ATMega8_PWM_2CH_LCD_E_088_AS7.zip
(541.09 KiB) Скачиваний: 13
ATMega8_PWM_2CH_LCD_E_088_VS.zip
(490.24 KiB) Скачиваний: 6
ATMega8_PWM_LCD_E_088_AS7.zip
(457.62 KiB) Скачиваний: 10
ATMega8_PWM_LCD_E_088_VS.zip
(479.87 KiB) Скачиваний: 12

Re: ШИМ-генератор ATMega8+LCD+кнопки

Вс сен 10, 2023 10:35:50

Ну раз уж так обсыкаться от возможности невозможного, тогда расскажите, почему не поставили конденсаторы параллельно кнопкам? По всем правилам они должны присутствовать для подавления случайных наводимых импульсов и для минимизации эффекта дребезга контактов кнопок.

Чиво?! О_о Дребезг кнопок спокойно обрабатывается программно.
Ответить