Например TDA7294

Форум РадиоКот :: Просмотр темы - Помогите с кодом на си для AVR (Atmega8)
Форум РадиоКот
https://radiokot.ru/forum/

Помогите с кодом на си для AVR (Atmega8)
https://radiokot.ru/forum/viewtopic.php?f=57&t=185737
Страница 1 из 4

Автор:  aleksey chilov [ Вт ноя 29, 2022 19:59:20 ]
Заголовок сообщения:  Помогите с кодом на си для AVR (Atmega8)

Добрый вечер всем кто тут!
Мужики помогите пожалуйста с кодом.
Хочу научить дисплей LCD1602A выводить наши буквы.
Уже 3 дня не получается с написанием функции для записи в CGRAM.
А потом вывода из неё результата.
Если с латиницей всё хорошо идёт то с нашим ну блин беда.
Прям упёрся в стену и всё!
Помогите кто знает как это делается.
Просто у кого есть время кто решал такие задачки и если не тяжело.
Спасибо!

Вложения:
4.png [66.98 KiB]
Скачиваний: 70
3.png [32.6 KiB]
Скачиваний: 67
2.png [37.35 KiB]
Скачиваний: 72
1.png [78.06 KiB]
Скачиваний: 69

Автор:  MLX90640 [ Вт ноя 29, 2022 20:18:08 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Модель дисплея в Протеусе может без проблем выводить "наши" буквы так же как и "ненаши". Откройте документацию на дисплей и посмотрите таблицу символов, вот они:
Изображение
а таблица перекодировки из ANSI вот такая:
Код:
const uint8_t ruscode[] = {0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA3, 0xA4,
                          0xA5, 0xA6, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8,
                          0x50, 0x43, 0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB,
                          0xAC, 0xE2, 0xAD, 0xAE, 0x62, 0xAF, 0xB0, 0xB1,

                          0x61, 0xB2, 0xB3, 0xB4, 0xE3, 0x65, 0xB6, 0xB7,
                          0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE,
                          0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78, 0xE5, 0xC0,
                          0xC1, 0xE6, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7};


Соответственно ф-ция вывода на дисплей такова:
Код:
/** ----------
 * @brief   Вывод символов на дисплей в строку.
 * @param line - номер строки (0, 1, 2 , 3)
 * @param pos - номер позиции (0 - 20)
 * @param *buf - буфер данных
 * @param size - число выводимых символов
 * @param transcode - запрос перекодировки
 */
void HD44780_Print(uint8_t line, uint8_t pos,
               char *buf, uint8_t size, uint8_t transcode)
{
   uint8_t addr;
   uint8_t ch;

   switch(line){
      case 0: addr = (DDRAM_ADDR | 0) + pos;    break;
      case 1: addr = (DDRAM_ADDR | 0x40) + pos; break;
      case 2: addr = (DDRAM_ADDR | 0x10) + pos; break;
      case 3: addr = (DDRAM_ADDR | 0x50) + pos; break;
   }

   /* установка начального адреса */
   WAIT();
   HD44780_IO_Write(addr, HD44780_CMDMODE);

   /* вывод символов */
   while(size--)
   {
      /* перекодировка по запросу */
      if(transcode)
      {
         switch(*buf){
         case 'А'...'Я': ch = ruscode[*buf - 'А'];
            break;
         case 'а'...'я': ch = ruscode[*buf - 'а' + 32];
            break;
         case 'Ё': ch = 0xA2;
            break;
         case 'ё': ch = 0xB5;
            break;
         default: ch = *buf;
            break;
         }
      }else
         ch = *buf;

      WAIT();
      HD44780_IO_Write(ch, HD44780_DATAMODE);
      buf++;
   }
}

Автор:  VNS [ Вт ноя 29, 2022 22:26:37 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Хочу научить дисплей LCD1602A выводить наши буквы.

Покупаешь дисплей МЕЛТ или WINSTAR и не надо выносить себе мозг… к тому же 8 пользовательских символов (это максимум что можно записать) не позволят полноценно "писать" на кириллице… :dont_know:

Автор:  veso74 [ Вт ноя 29, 2022 22:29:01 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Почему 8? Перед печатью загрузите недостающий символ и отобразите его. Потом другой и так далее. Максимум - да, их 8 . Но замените уже изображенные. Можно все, можно много. Даже можете рисовать псевдо-графики, а также псевдо-фигуры. Правда - медленнее, но куда мы торопимся... Печать на LCD концептуально медленная операция - статичных текстов больше.

Автор:  VNS [ Вт ноя 29, 2022 22:35:32 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Почему 8?

Вложение:
1.png [19.73 KiB]
Скачиваний: 70

Автор:  veso74 [ Вт ноя 29, 2022 22:40:36 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Максимальное количество вместе - да, 8, но ... вставляете новый символ, печатаете, вставляете на его место другой, печатаете ... до бесконечности, много символов.

Автор:  VNS [ Вт ноя 29, 2022 22:43:40 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

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

Предлагаете каждый раз перед выводом текста записывать новые символы? Это же мазохизм… :)) и так порой вывод надписей порой занимает много места в программе при больших меню, а если ещё и это делать, так вообще… :facepalm: хотя кто на что горазд… можно и так если скучно… :)

Автор:  veso74 [ Вт ноя 29, 2022 22:45:31 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Только новые символы в знако-генераторе, конечно же. И псевдо-графики. Согласно приложению. Памяти совсем немного занимает, и в PIC собираются, и в ATmega, и в "бедных" ATtiny.

Автор:  VNS [ Вт ноя 29, 2022 23:06:13 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Если использовать заглавные и прописные буквы, то придётся прописывать в итоге 47 символов… из своего непрофессионального опыта, это достаточно много… возможно у профессионалов это занимает мало места… спорить не стану… лично у меня при выводе много текста, программы становятся большими, а если использовать что-то подобное, то вообще выйдет за гранью… :))

Автор:  veso74 [ Вт ноя 29, 2022 23:08:53 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Оффтоп: Вы отправляете литературное эссе каждый день в LCD1602? :) Мне не приходилось.

Однако вернемся к приложению LCD: вероятно только несколько слов, как параметры какого-то устройства, одно за другим, медленно, статично ...

Автор:  VNS [ Вт ноя 29, 2022 23:26:07 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Дело не в скорости вывода символов, а в увеличении программы при наличии расширенного меню, в котором будет много текста…
В общим я не утверждаю, что так у всех… но у меня происходит именно так… :) и если планируется обширное меню, то я выбираю дисплей с кириллицей, а не танцы с бубном… :))) в общим каждый выбирает своё… :beer:

Автор:  Eddy_Em [ Вт ноя 29, 2022 23:31:31 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

А что страшного в том, чтобы шрифты во флеш-памяти МК хранить? Один шрифт в знакоместо 16х16 пикселей займет 33кБ (32кБ - данные + 1Б - ширина символа). Все 256 символов никому не нужны обычно, хватит нескольких знаков препинания, латинницы и кириллицы. Ну и зачастую хватит только верхнего регистра, получаем (26+10+33+30)*33=3267Б + 256Б на таблицу перекодировки. Итого: 3523Б. Т.е. в 4кБ можно вполне уложиться. Когда на МК от 16кБ флеша и больше, вообще 0 проблем на шрифт немного потратить.

Автор:  VNS [ Ср ноя 30, 2022 01:49:51 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Оффтоп: Вы отправляете литературное эссе каждый день в LCD1602? :) Мне не приходилось.

Нет, зачем же… а вот ради интереса сможете на практике показать в виде прошивки для тини24 – вывод заглавных и прописных букв кириллицы в определённом порядке? Я бы составил ТЗ на такой случай, которое бы в моём исполнении ушло примерно 90% памяти МК… а вот интересно с Вашим подходом сколько уйдёт? И влезет ли вообще в данный МК… если откажитесь так как некогда заниматься ерундой, то я пойму… так что скажете? :)

ЗЫ у меня есть китаец 1602 с таким модулем (PCF8574)...
СпойлерИзображение

Хорошо бы его задействовать для проверки... :)

Автор:  OKF [ Ср ноя 30, 2022 04:12:18 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

По моему уже было.
https://www.youtube.com/watch?v=pqv48FtHm0E
https://www.youtube.com/watch?v=bN-XRXLx88Y

Автор:  VNS [ Ср ноя 30, 2022 05:24:00 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Дело не в реализации… интересно сколько весит такая реализация? И если значительно много, то возникает вопрос, а зачем?

Автор:  ARV [ Ср ноя 30, 2022 08:01:14 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Максимальное количество вместе - да, 8, но ... вставляете новый символ, печатаете, вставляете на его место другой, печатаете ... до бесконечности, много символов.

а вы сами так делали, или теоретизируете?
насколько я знаю, как только вы обновили символ с кодом, предположим, 0х01, то на дисплее все позиции с этим кодом будут показывать обновленный символ, так что "до бесконечности" не выйдет - максимум 8 разных одновременно

Автор:  aleksey chilov [ Ср ноя 30, 2022 11:37:43 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Мужики. Давайте я скину библиотеку свою ( что я использую ) вы посмотрите её и может быть подскажете как мне в ней добавить функцию записи в CGRAM и вывода оттуда?

Добавлено after 2 minutes 47 seconds:
https://disk.yandex.ru/d/_GpvOVhqz-JXTA
вот ссылка на неё на диске.

Автор:  Ivanoff-iv [ Ср ноя 30, 2022 12:29:34 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Вроде ведь в этих экранах нет 2го кеша... т.е. если какой-то символ на экране взят из перезаписываемой области, то при перезаписи этой области он тоже изменится, даже если его не обновляли и из-за этого на экран не вывести более 8 различных не имеющихся в основной памяти символа... Это сильно усложняет и без того нелегкую с ним работу по выводу графики и нестандартных символов. Вроде так?
Поправьте, если не прав...

Автор:  veso74 [ Ср ноя 30, 2022 12:47:22 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

... не выйдет - максимум 8 разных одновременно

Да, Вы прав. Я неправильно понял (РУ-БГ). Максимум 8 НОВЫЕ символы одновременно в 32 символа на LCD1602. Однако это могут быть все буквы, если не перекрываются одновременно. А вот с тем, что на маленьком дисплее часто надписи в сокращенной форме, использование возможно без конфликтов. Лично избегаю кириллицы.

Автор:  Eddy_Em [ Ср ноя 30, 2022 14:47:46 ]
Заголовок сообщения:  Re: Помогите с кодом на си для AVR (Atmega8)

Так можно взять нормальный SPI'ный (а то и с параллельной шиной) экранчик, да гонять буфер. И шрифты будут свои — какие хочешь. А на МК с DMA вообще камень практически напрягать не нужно будет, чтобы экран обновить.

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/