Помогите с кодом на си для AVR (Atmega8)

Обсуждаем контроллеры компании Atmel.
Ответить
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Сообщение aleksey chilov »

Добрый вечер всем кто тут!
Мужики помогите пожалуйста с кодом.
Хочу научить дисплей LCD1602A выводить наши буквы.
Уже 3 дня не получается с написанием функции для записи в CGRAM.
А потом вывода из неё результата.
Если с латиницей всё хорошо идёт то с нашим ну блин беда.
Прям упёрся в стену и всё!
Помогите кто знает как это делается.
Просто у кого есть время кто решал такие задачки и если не тяжело.
Спасибо!
Вложения
4.png
(66.98 КБ) 89 скачиваний
3.png
(32.6 КБ) 79 скачиваний
2.png
(37.35 КБ) 84 скачивания
1.png
(78.06 КБ) 80 скачиваний
Реклама
Опытный кот
Аватара пользователя
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Сообщение MLX90640 »

Модель дисплея в Протеусе может без проблем выводить "наши" буквы так же как и "ненаши". Откройте документацию на дисплей и посмотрите таблицу символов, вот они:
Изображение
а таблица перекодировки из 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
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1635
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

[uquote="aleksey chilov",url="/forum/viewtopic.php?p=4328590#p4328590"]Хочу научить дисплей LCD1602A выводить наши буквы.[/uquote]
Покупаешь дисплей МЕЛТ или WINSTAR и не надо выносить себе мозг… к тому же 8 пользовательских символов (это максимум что можно записать) не позволят полноценно "писать" на кириллице… :dont_know:
Последний раз редактировалось VNS Вт ноя 29, 2022 22:30:07, всего редактировалось 1 раз.
Поставщик валерьянки для Кота
Сообщения: 1947
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Почему 8? Перед печатью загрузите недостающий символ и отобразите его. Потом другой и так далее. Максимум - да, их 8 . Но замените уже изображенные. Можно все, можно много. Даже можете рисовать псевдо-графики, а также псевдо-фигуры. Правда - медленнее, но куда мы торопимся... Печать на LCD концептуально медленная операция - статичных текстов больше.
Последний раз редактировалось veso74 Вт ноя 29, 2022 22:35:47, всего редактировалось 1 раз.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1635
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

[uquote="veso74",url="/forum/viewtopic.php?p=4328706#p4328706"]Почему 8?[/uquote]
1.png
(19.73 КБ) 79 скачиваний
Реклама
Поставщик валерьянки для Кота
Сообщения: 1947
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Максимальное количество вместе - да, 8, но ... вставляете новый символ, печатаете, вставляете на его место другой, печатаете ... до бесконечности, много символов.
Контактная информация:
Реклама
VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1635
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

[uquote="veso74",url="/forum/viewtopic.php?p=4328713#p4328713"]но ... вставляете новый символ, печатаете, вставляете на его место другой, печатаете ... до бесконечности, много символов.[/uquote]
Предлагаете каждый раз перед выводом текста записывать новые символы? Это же мазохизм… :)) и так порой вывод надписей порой занимает много места в программе при больших меню, а если ещё и это делать, так вообще… :facepalm: хотя кто на что горазд… можно и так если скучно… :)
Поставщик валерьянки для Кота
Сообщения: 1947
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Только новые символы в знако-генераторе, конечно же. И псевдо-графики. Согласно приложению. Памяти совсем немного занимает, и в PIC собираются, и в ATmega, и в "бедных" ATtiny.
Последний раз редактировалось veso74 Вт ноя 29, 2022 23:06:33, всего редактировалось 1 раз.
Контактная информация:
VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1635
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

Если использовать заглавные и прописные буквы, то придётся прописывать в итоге 47 символов… из своего непрофессионального опыта, это достаточно много… возможно у профессионалов это занимает мало места… спорить не стану… лично у меня при выводе много текста, программы становятся большими, а если использовать что-то подобное, то вообще выйдет за гранью… :))
Последний раз редактировалось VNS Вт ноя 29, 2022 23:09:40, всего редактировалось 1 раз.
Поставщик валерьянки для Кота
Сообщения: 1947
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

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

Однако вернемся к приложению LCD: вероятно только несколько слов, как параметры какого-то устройства, одно за другим, медленно, статично ...
Контактная информация:
VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1635
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

Дело не в скорости вывода символов, а в увеличении программы при наличии расширенного меню, в котором будет много текста…
В общим я не утверждаю, что так у всех… но у меня происходит именно так… :) и если планируется обширное меню, то я выбираю дисплей с кириллицей, а не танцы с бубном… :))) в общим каждый выбирает своё… :beer:
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

А что страшного в том, чтобы шрифты во флеш-памяти МК хранить? Один шрифт в знакоместо 16х16 пикселей займет 33кБ (32кБ - данные + 1Б - ширина символа). Все 256 символов никому не нужны обычно, хватит нескольких знаков препинания, латинницы и кириллицы. Ну и зачастую хватит только верхнего регистра, получаем (26+10+33+30)*33=3267Б + 256Б на таблицу перекодировки. Итого: 3523Б. Т.е. в 4кБ можно вполне уложиться. Когда на МК от 16кБ флеша и больше, вообще 0 проблем на шрифт немного потратить.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1635
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

[uquote="veso74",url="/forum/viewtopic.php?p=4328737#p4328737"]Оффтоп: Вы отправляете литературное эссе каждый день в LCD1602? :) Мне не приходилось.[/uquote]
Нет, зачем же… а вот ради интереса сможете на практике показать в виде прошивки для тини24 – вывод заглавных и прописных букв кириллицы в определённом порядке? Я бы составил ТЗ на такой случай, которое бы в моём исполнении ушло примерно 90% памяти МК… а вот интересно с Вашим подходом сколько уйдёт? И влезет ли вообще в данный МК… если откажитесь так как некогда заниматься ерундой, то я пойму… так что скажете? :)

ЗЫ у меня есть китаец 1602 с таким модулем (PCF8574)...
СпойлерИзображение
Хорошо бы его задействовать для проверки... :)
OKF
Это не хвост, это антенна
Сообщения: 1443
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

VNS
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1635
Зарегистрирован: Пт дек 10, 2021 12:48:46
Откуда: Тюмень

Сообщение VNS »

Дело не в реализации… интересно сколько весит такая реализация? И если значительно много, то возникает вопрос, а зачем?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18784
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

[uquote="veso74",url="/forum/viewtopic.php?p=4328713#p4328713"]Максимальное количество вместе - да, 8, но ... вставляете новый символ, печатаете, вставляете на его место другой, печатаете ... до бесконечности, много символов.[/uquote]
а вы сами так делали, или теоретизируете?
насколько я знаю, как только вы обновили символ с кодом, предположим, 0х01, то на дисплее все позиции с этим кодом будут показывать обновленный символ, так что "до бесконечности" не выйдет - максимум 8 разных одновременно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Вс мар 27, 2022 09:38:17

Сообщение aleksey chilov »

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

Добавлено after 2 minutes 47 seconds:
https://disk.yandex.ru/d/_GpvOVhqz-JXTA
вот ссылка на неё на диске.
Друг Кота
Аватара пользователя
Сообщения: 7079
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Вроде ведь в этих экранах нет 2го кеша... т.е. если какой-то символ на экране взят из перезаписываемой области, то при перезаписи этой области он тоже изменится, даже если его не обновляли и из-за этого на экран не вывести более 8 различных не имеющихся в основной памяти символа... Это сильно усложняет и без того нелегкую с ним работу по выводу графики и нестандартных символов. Вроде так?
Поправьте, если не прав...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Поставщик валерьянки для Кота
Сообщения: 1947
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

[uquote="ARV",url="/forum/viewtopic.php?p=4328841#p4328841"]... не выйдет - максимум 8 разных одновременно[/uquote]
Да, Вы прав. Я неправильно понял (РУ-БГ). Максимум 8 НОВЫЕ символы одновременно в 32 символа на LCD1602. Однако это могут быть все буквы, если не перекрываются одновременно. А вот с тем, что на маленьком дисплее часто надписи в сокращенной форме, использование возможно без конфликтов. Лично избегаю кириллицы.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Так можно взять нормальный SPI'ный (а то и с параллельной шиной) экранчик, да гонять буфер. И шрифты будут свои — какие хочешь. А на МК с DMA вообще камень практически напрягать не нужно будет, чтобы экран обновить.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Ответить

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