Обсуждаем контроллеры компании Atmel.
Вт ноя 29, 2022 19:59:20
Добрый вечер всем кто тут!
Мужики помогите пожалуйста с кодом.
Хочу научить дисплей LCD1602A выводить наши буквы.
Уже 3 дня не получается с написанием функции для записи в CGRAM.
А потом вывода из неё результата.
Если с латиницей всё хорошо идёт то с нашим ну блин беда.
Прям упёрся в стену и всё!
Помогите кто знает как это делается.
Просто у кого есть время кто решал такие задачки и если не тяжело.
Спасибо!
- Вложения
-
- 4.png
- (66.98 KiB) Скачиваний: 45
-
- 3.png
- (32.6 KiB) Скачиваний: 44
-
- 2.png
- (37.35 KiB) Скачиваний: 45
-
- 1.png
- (78.06 KiB) Скачиваний: 46
Вт ноя 29, 2022 20:18:08
Модель дисплея в Протеусе может без проблем выводить "наши" буквы так же как и "ненаши". Откройте документацию на дисплей и посмотрите таблицу символов, вот они:
а таблица перекодировки из 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++;
}
}
Вт ноя 29, 2022 22:26:37
Хочу научить дисплей LCD1602A выводить наши буквы.
Покупаешь дисплей МЕЛТ или WINSTAR и не надо выносить себе мозг… к тому же 8 пользовательских символов (это максимум что можно записать) не позволят полноценно "писать" на кириллице…
Последний раз редактировалось
VNS Вт ноя 29, 2022 22:30:07, всего редактировалось 1 раз.
Вт ноя 29, 2022 22:29:01
Почему 8? Перед печатью загрузите недостающий символ и отобразите его. Потом другой и так далее. Максимум - да, их 8 . Но замените уже изображенные. Можно все, можно много. Даже можете рисовать псевдо-графики, а также псевдо-фигуры. Правда - медленнее, но куда мы торопимся... Печать на LCD концептуально медленная операция - статичных текстов больше.
Последний раз редактировалось
veso74 Вт ноя 29, 2022 22:35:47, всего редактировалось 1 раз.
Вт ноя 29, 2022 22:35:32
Почему 8?
- 1.png
- (19.73 KiB) Скачиваний: 47
Вт ноя 29, 2022 22:40:36
Максимальное количество вместе - да, 8, но ... вставляете новый символ, печатаете, вставляете на его место другой, печатаете ... до бесконечности, много символов.
Вт ноя 29, 2022 22:43:40
но ... вставляете новый символ, печатаете, вставляете на его место другой, печатаете ... до бесконечности, много символов.
Предлагаете каждый раз перед выводом текста записывать новые символы? Это же мазохизм…
и так порой вывод надписей порой занимает много места в программе при больших меню, а если ещё и это делать, так вообще…
хотя кто на что горазд… можно и так если скучно…
Вт ноя 29, 2022 22:45:31
Только новые символы в знако-генераторе, конечно же. И псевдо-графики. Согласно приложению. Памяти совсем немного занимает, и в PIC собираются, и в ATmega, и в "бедных" ATtiny.
Последний раз редактировалось
veso74 Вт ноя 29, 2022 23:06:33, всего редактировалось 1 раз.
Вт ноя 29, 2022 23:06:13
Если использовать заглавные и прописные буквы, то придётся прописывать в итоге 47 символов… из своего непрофессионального опыта, это достаточно много… возможно у профессионалов это занимает мало места… спорить не стану… лично у меня при выводе много текста, программы становятся большими, а если использовать что-то подобное, то вообще выйдет за гранью…
Последний раз редактировалось
VNS Вт ноя 29, 2022 23:09:40, всего редактировалось 1 раз.
Вт ноя 29, 2022 23:08:53
Оффтоп: Вы отправляете литературное эссе каждый день в LCD1602?
Мне не приходилось.
Однако вернемся к приложению LCD: вероятно только несколько слов, как параметры какого-то устройства, одно за другим, медленно, статично ...
Вт ноя 29, 2022 23:26:07
Дело не в скорости вывода символов, а в увеличении программы при наличии расширенного меню, в котором будет много текста…
В общим я не утверждаю, что так у всех… но у меня происходит именно так…
и если планируется обширное меню, то я выбираю дисплей с кириллицей, а не танцы с бубном…
в общим каждый выбирает своё…
Вт ноя 29, 2022 23:31:31
А что страшного в том, чтобы шрифты во флеш-памяти МК хранить? Один шрифт в знакоместо 16х16 пикселей займет 33кБ (32кБ - данные + 1Б - ширина символа). Все 256 символов никому не нужны обычно, хватит нескольких знаков препинания, латинницы и кириллицы. Ну и зачастую хватит только верхнего регистра, получаем (26+10+33+30)*33=3267Б + 256Б на таблицу перекодировки. Итого: 3523Б. Т.е. в 4кБ можно вполне уложиться. Когда на МК от 16кБ флеша и больше, вообще 0 проблем на шрифт немного потратить.
Ср ноя 30, 2022 01:49:51
Оффтоп: Вы отправляете литературное эссе каждый день в LCD1602?
Мне не приходилось.
Нет, зачем же… а вот ради интереса сможете на практике показать в виде прошивки для тини24 – вывод заглавных и прописных букв кириллицы в определённом порядке? Я бы составил ТЗ на такой случай, которое бы в моём исполнении ушло примерно 90% памяти МК… а вот интересно с Вашим подходом сколько уйдёт? И влезет ли вообще в данный МК… если откажитесь так как некогда заниматься ерундой, то я пойму… так что скажете?
ЗЫ у меня есть китаец 1602 с таким модулем (PCF8574)...
Спойлер
Хорошо бы его задействовать для проверки...
Ср ноя 30, 2022 05:24:00
Дело не в реализации… интересно сколько весит такая реализация? И если значительно много, то возникает вопрос, а зачем?
Ср ноя 30, 2022 08:01:14
Максимальное количество вместе - да, 8, но ... вставляете новый символ, печатаете, вставляете на его место другой, печатаете ... до бесконечности, много символов.
а вы сами так делали, или теоретизируете?
насколько я знаю, как только вы обновили символ с кодом, предположим, 0х01, то на дисплее все позиции с этим кодом будут показывать обновленный символ, так что "до бесконечности" не выйдет - максимум 8 разных одновременно
Ср ноя 30, 2022 11:37:43
Мужики. Давайте я скину библиотеку свою ( что я использую ) вы посмотрите её и может быть подскажете как мне в ней добавить функцию записи в CGRAM и вывода оттуда?
Добавлено after 2 minutes 47 seconds:https://disk.yandex.ru/d/_GpvOVhqz-JXTAвот ссылка на неё на диске.
Ср ноя 30, 2022 12:29:34
Вроде ведь в этих экранах нет 2го кеша... т.е. если какой-то символ на экране взят из перезаписываемой области, то при перезаписи этой области он тоже изменится, даже если его не обновляли и из-за этого на экран не вывести более 8 различных не имеющихся в основной памяти символа... Это сильно усложняет и без того нелегкую с ним работу по выводу графики и нестандартных символов. Вроде так?
Поправьте, если не прав...
Ср ноя 30, 2022 12:47:22
... не выйдет - максимум 8 разных одновременно
Да, Вы прав. Я неправильно понял (РУ-БГ). Максимум 8 НОВЫЕ символы одновременно в 32 символа на LCD1602. Однако это могут быть все буквы, если не перекрываются одновременно. А вот с тем, что на маленьком дисплее часто надписи в сокращенной форме, использование возможно без конфликтов. Лично избегаю кириллицы.
Ср ноя 30, 2022 14:47:46
Так можно взять нормальный SPI'ный (а то и с параллельной шиной) экранчик, да гонять буфер. И шрифты будут свои — какие хочешь. А на МК с DMA вообще камень практически напрягать не нужно будет, чтобы экран обновить.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.