Страница 80 из 123

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Чт авг 21, 2014 17:14:10
ARV
levaclaus писал(а):2 - как вывести вертикальный прогресс бар?
вот мои древние поделки (правда, для WinAVR, но все детально прокомментировано и адаптировать должно быть легко):
1. "библиотечка" TUI - функции вывода вертикальных и горизонтальных "графических" шкал и не только http://arv.radioliga.com/component/opti ... _0_03.rar/
2. "Настоящая" графика на ТЕКСТОВОМ ЖКИ - рисование линий, точек, фигур и т.п. http://arv.radioliga.com/content/view/237/49/

вот пример такой графики:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Чт авг 21, 2014 21:40:46
Serhio
Протеус выдает следующую ошибку
pic16 ADC PC=0x0002. ADC conversion started before "wait" time has expired following previous conversion or channel change.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Чт авг 21, 2014 23:34:33
levaclaus
таки добил вертикальный прогрессбар на 7 столбцов

Код: Выделить всё


flash byte char1[64]={                                         //Спектр
 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111,  //1
 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111,  //2
 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111,  //3
 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111,  //4
 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111,  //5
 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111,  //6
 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111,  //7
 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111   //8
};

unsigned char progresbar[9] = {128, 0, 1, 2, 3, 4, 5, 6, 7}; 

void drawdigspektr(byte position, byte point)
{

       pa1=point/8;
       pa2=point%8;

lcd_gotoxy(position,0);
if (pa1>3) { symbol1=8;};
if (pa1==3) { symbol1=pa2;};
if (pa1<3) { symbol1=0;};

lcd_putchar(progresbar[symbol1]);

lcd_gotoxy(position,1);

if (pa1>2) { symbol1=8;};
if (pa1==2) { symbol1=pa2;};
if (pa1<2) { symbol1=0;};  

lcd_putchar(progresbar[symbol1]);

lcd_gotoxy(position,2);

if (pa1==1) { symbol1=pa2;};
if (pa1>1) { symbol1=8;};
if (pa1==0) { symbol1=0;};

lcd_putchar(progresbar[symbol1]);

lcd_gotoxy(position,3);

if (pa1>0) { symbol1=8;};
if (pa1==0) { symbol1=pa2;};

lcd_putchar(progresbar[symbol1]);
}




 void drawspektr(void)
{
drawdigspektr(0,pointa);
drawdigspektr(1,pointa);
drawdigspektr(2,pointb);
drawdigspektr(3,pointb);
drawdigspektr(4,pointc);
drawdigspektr(5,pointc);
drawdigspektr(6,pointd);
drawdigspektr(7,pointd);
drawdigspektr(8,pointe);
drawdigspektr(9,pointe);
drawdigspektr(10,pointf);
drawdigspektr(11,pointf);
drawdigspektr(12,pointg);
drawdigspektr(13,pointg);
}


drawspektr();  

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Ср сен 10, 2014 20:33:06
MisHel64
Господа, а подскажите про HD44780 - 1602.
1) Если русских символов нет в знакогенераторе, то уже никак их туда не записать? Знакогенератор одноразовом ПЗУ прошит?
2) А в современных контролерах по прежнему, только 8 символов можно определить?
3) А можно как-то еще в магазине узнать наличие русских символов? Может маркировку дополнительную производители наносят?
Наверно не много не в ту тему, но куда гугль послал...
PS: Про определяемые 8 символов пользователя знаю. Гениальные советы типа "спроси продавца", как бы не интересны.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Ср сен 10, 2014 20:53:26
WiseLord
MisHel64 писал(а):Знакогенератор одноразовом ПЗУ прошит?
Думаю, даже проще - ещё на этапе производства масочным методом. Т.е. тупо есть транзистор на кристалле - 0, нету - 1. Разные фотолитографические маски для разных "зашивок" знакогенератора.
MisHel64 писал(а):А в современных контролерах по прежнему, только 8 символов можно определить?
Архитектура контроллера такая. В одном байте можно 128 байт ОЗУ адресовать (память дисплея), + 64 байта ОЗУ (память знакогенератора) + остальное - на всякие управляющие команды.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Чт сен 11, 2014 15:37:10
slavokhire5
To MisHel64: Допустим, для модели WH1602A/B на наличие кириллицы указывает код CT в конце наименования (например, WH1602A-NGG-CT)

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Пт сен 12, 2014 01:21:26
MisHel64
slavokhire5 Спасибо, уже хлеб. Будем искать (C)
Чисто из любознательности. Почитав форумы у меня сложилось мнение, что в HD44780 шьют как минимум три таблицы с русскими символами. Одна содержит лишь те которых нет в латинице, другая содержит все символы во второй таблице но в собственном порядке, и есть вариант, где порядок символов совпадает с "виндовой" кодировкой.
Я правильно уловил мысли более других ораторов, и какой именно вариант в блочке имеющий указанный вами маркировки.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Пт сен 12, 2014 06:07:03
Mishany
Как минимум две страницы с символами, причем если буква к примеру А русская, то она берется с английской кодировки и так со всеми буквами совпадающими в графическом написании, по крайней мере так сделано на дисплеях мэлт.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Пт сен 12, 2014 06:14:43
urry
все гораздо проще. Перед выдачей анализируется символ - если он из латинской раскладки - выдается как есть.Если это кириллица - код больше 0xC0 - эта величина отнимается и берется код из своего массива. Я хз сколько лет пользуюсь библиотекой Алекса например http://eldigi.ru/articles/chastotomer_n ... d_displeem
Все индикаторы с кириллицей ведут себя одинаково, нет никаких 3 вариантов.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Сб окт 04, 2014 17:10:06
skeef
Много рыл, но так и не нашел ответа на 3 простых вопроса:
1. как инвертировать символ? Т.е. есть символ А - белый фон, черные линии. Как сделать наоборот - черный фон, белая линия?
2. как заставить символ "моргать" способом "исчез-появился" и способом инвертирования. Есть команда для курсора. Есть ли для символа?
3. как правильно (или можно ли) записывать графику своих символов без инициализации, в динамике. Ну чтобы обойти ограничение в 8 символов.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Сб окт 04, 2014 17:47:49
WiseLord
1. Только сгенерировать инвертированный символ как пользовательский.

2. Аналогичным способом - через пользовательский символ. Отдельной инверсии не предусмотрено.

3. Никак. Пользовательский символ - это всего лишь своего рода ссылка-указатель на область в CGRAM. Поменяется информация там - поменяется она и везде на экране, где выведен этот символ.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Сб окт 04, 2014 18:49:04
skeef
WiseLord писал(а): 3. Никак. Пользовательский символ - это всего лишь своего рода ссылка-указатель на область в CGRAM. Поменяется информация там - поменяется она и везде на экране, где выведен этот символ.
Получается, что единственный вариант обойти ограничение это каждый раз непосредственно перед выводом записывать новый символ в регистры. По идее такой вариант реализован здесь: http://asis-kbr.ru/forum/viewtopic.php?f=13&t=139

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Сб окт 04, 2014 19:05:47
WiseLord
Да. Предложенный вариант хоть как-то может уменьшить значимость проблемы. Но полностью её не решит. Одновременно на экране не может отображаться больше восьми различных пользовательских символов.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Сб окт 04, 2014 19:48:53
skeef
Остается большой вопрос сколько циклов записи выдержит "флешка" индикатора

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Сб окт 04, 2014 19:53:32
Alexeyslav
Это не флешка. а самая что ни на есть static RAM. Выключил питание - символы пропали. записывать можно до бесконечности.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Добавлено: Сб окт 11, 2014 16:41:37
nirq
Если авторы дисплея (почему вы все его называете "индикатор"? индикатором была бы зелёная лампочка, разноцветная лампочка, набор из надписей "on/off" либо символов "low fuel, check engine"... а тут произвольный текст или даже рисунок) предусмотрели в нём возможность видоизменения курсора - то совершенно никак не связано с обязанностью применять такой дисплей в исключительно "терминальном" режиме.
И даже совершенно наоборот: "терминальный" режим как таковой, с пошаговым курсором и одиночно-посимвольным "печатанием" слева направо - целесообразен... я даже затрудняюсь придумать хоть один реальный пример, когда он был бы целесообразен.

В раме организуется буфер, 8 символов * 2 строки = 16 байт.
Из этого буфера периодически обновляется весь дисплей.
Содержимое же буфера в раме меняется уже когда угодно и как угодно. Хоть сразу три курсора по два символа в разных местах и разными стилями, с разной частотой моргания...



А "проблема" с инвертацией надуманна. Пуговицы перламутровые.

Переопределяемые символы в HD44780

Добавлено: Пн окт 20, 2014 11:32:53
ksardas_90
Здравствуйте. Осваиваю работу с мк STM32 и в частности управление дисплеем WH1602A. Изучив некоторые статьи и документацию к нему смог запустить, выводить текст и настроить бегущую строку, но завели в тупик попытки вывести на экран пользовательский символ. Мне кажется я не совсем понял алгоритм их генерации и вывода на экран.

Как я понял: 1) командой установки адреса CGRAM выбрать какой из 8и символов будем изменять
0 1 ASG ASG ASG ASG ASG ASG (не совсем понятно в каком полубайте адрес писать)
2)Теперь нужно передать в режиме данных 8 байт которые и будут нашим новым символом (т.е. RS=1 DB7=1 DB4-DB0 = строка рисунка где 1 это активный пиксель, DB5 и DB6 - не значащие разряды) ?
и так восемь раз
3)После того как все 8 байт записались необходимо вернуться в режим работы с DDRAM (Это из статьи вычитал, хотя в руководстве такого не нашел)

Вот чего то по нулям, подскажите и поправьте пожалуйста алгоритм, если кто рисовал пользовательские символы на таких дисплеях

Re: Переопределяемые символы в HD44780

Добавлено: Пн окт 20, 2014 13:29:46
koyodza
1. В индикаторе CGRAM имеет 64 ячейки, по 8 на каждый пользовательский символ. Символ с кодом 00 занимает ячейки с адресами 0..7, символ с кодом 01 ячейки с адресами 8..15 и т.д.
Символы с кодами 08..0F дублируют соответствующие символы с кодами 00..07. Обычно я стараюсь не использовать символ с кодом 00, вместо него использую 08, но это не относится напрямую к данному вопросу.
Соответственно чтобы задать свой вид символа с кодом 07 нужно переписать ячейки CGRAM с адресами 56..63.
Обычно я переписываю по одной ячейке за раз, поэтому указатель на CGRAM меняю для каждой ячейки, но это связано с моей собственной довольно сложной организацией вывода на LCD (сделано для совместимости с менеджером задач и чтобы избежать блокирующих ожиданий готовности), но Вы можете попробовать сделать это иначе.
Ваш вопрос "не совсем понятно в каком полубайте адрес писать" не понял, сформулируйте ещё раз.
2. Незначащими являются три бита DB5..DB7, поскольку в одной строке 5 пикселей. Всегда записываю 0 в эти биты, что будет если записать 1 не знаю. Если будет нечего делать - может проверю, но нужно учитывать, что индикаторы от разных производителей могут работать немного по-разному.
3. Да, просто снова делаете Set DDRAM addr, точно так же как в случаях, когда хотите начать вывод символов с произвольного места.

Re: Переопределяемые символы в HD44780

Добавлено: Пн окт 20, 2014 22:14:18
CyberVad
Я делаю так:
1) Команда "буду загружать свои символы" (0x40+адрес если не с нулевого)
2) Гружу сколько надо
Всё :)))
Подробнее: вопреки логике один байт описывает не один столбец символа, а одну строку. И хоть символ 5х7, а передать надо 8 байтов: 7 байтов значащих (первый описывает верхнюю строку, седьмой нижнюю), а восьмой произвольный. В каждом байте значат только биты 4-0, старшие 3 любые. Для единообразия я их делаю нулевыми.
Вот, например, пара символов:
lcdcmd(0x40); //Начинаем с символа по адресу 0

lcddata(0x00); //Ноль полосок
lcddata(0x00);
lcddata(0x00);
lcddata(0x1f);
lcddata(0x00);
lcddata(0x00);
lcddata(0x00);
lcddata(0x00);

lcddata(0x10); //Одна полоска
lcddata(0x10);
lcddata(0x10);
lcddata(0x0f);
lcddata(0x10);
lcddata(0x10);
lcddata(0x10);
lcddata(0x00);

и так далее

Это я так рисовал символы-полоски от 1 полоски до пяти - что бы из 14ти знакомест получить линейный индикатор на 70 точек (ну столбцов)

Re: Переопределяемые символы в HD44780

Добавлено: Вт окт 21, 2014 00:04:49
nirq