Графический ЖК дисплей на LC7981

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Графический ЖК дисплей на LC7981

Сообщение BerZerK-ku »

Есть ЖК индикатор WG160160B с контроллером LC7981. Но в процессе работы появились трудности... Если в занковом режиме выставить не 20 8-и битных символов, а меньше, то начинаются глюки. Либо искажается изображение, либо 2-3 столбца в середине сдвигаются на строчку в низ. В графическом режиме примерно тоже самое, при переходе на вторую половину экрана, в случае <20 символов при 8-битах данных или при 6-7 битах практически всегда, выводится белиберда.

Встречался кто-нибудь с подобной проблемой? как ее можно решить?
Реклама
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Странный индикатор какой-то. Ему плевать на установку кол-ва занков по горизонтали. Если это >10 , то задействован весь экран, если <10 то вся левая половина. Такое ощущение что он может нормально работать только в 2 режимах, 8 бит * 20 знаков или 8 бит*10 знаков.
Реклама
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

вообще я работал с ЖК но не с таким. в доку не вникал но вопрос
1. надо устанавливать курсор начало вывода знака? (просто может для каждой строчки надо устанавливать принудительно)
2. потом когда выводите что-то надо указывать границы знака? (я имею ввиду активную область в которой будете рисовать знак или ещё что-то)
3. одна строчка выводится не смещается?
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Mozart писал(а):вообще я работал с ЖК но не с таким. в доку не вникал но вопрос
1. надо устанавливать курсор начало вывода знака? (просто может для каждой строчки надо устанавливать принудительно)
2. потом когда выводите что-то надо указывать границы знака? (я имею ввиду активную область в которой будете рисовать знак или ещё что-то)
3. одна строчка выводится не смещается?
1. В графическом режиме перед выводом каждого байта на дисплей в программе выстанавливал курсор. В знаковом просто писал данные, в LC7981 идет автоинкремент индекса.
2. Границы задаются при инициализации.
3. Смещается.

У данного ЖК (или точнее у его контроллера LC7981), есть следующие настройки для графического режима: кол-во значащих бит в байте Hp, кол-во знаков по горизонтали Hn. Т.е. по идее общее кол-во используемых точек в строке: Hn*Hp.
В моем случае, если 80<Hn*Hp<160 , то информация выводится на весь экран, т.е. 160 точек. При этом часть информации выводится со сдвигом по горизонтали, а часть еще и сдвигается на строку по вертикали. Если же 0<Hn*Hp<80, то все то же самое, но только на левой половине экрана.
Мои выводы:
данный ЖК просто не поддерживает всех возможностей своего контроллера и работает только при режиме 80 или 160 точек в строке.

Кстати, в знаковом режиме при настройке использования неполной строки наблюдались те-же искажения.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

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

ширина знака какая? и какая ширина экрана?

а ещё вопрос строка смещается вниз я правильно понял?
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Реклама
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Mozart писал(а):попробуйте по одному символу выводить, мможет быть надо принудительно задавать положение курсора.

ширина знака какая? и какая ширина экрана?

а ещё вопрос строка смещается вниз я правильно понял?
По описанию на микросхему ширина знака может быть: 6-8 точек. У меня нормально ЖК запустился только при 8.
В том то и дело что не вся строка смещается вниз, а около 20-30 точек в середине экрана. Этот эффект проявляется с 1-ой строки.
Дисплей 160 на 160 точек.

Пример 1.
Экран в знаковом режиме, 8 точек на знак по горизонтали, 10 по вертикали. Вывожу "8" в любую позицию, все в норме.
Пример 2.
Экран в знаковом режиме, 7 точек на знак по горизонтали, 10 по вертикали. Вывожу "8" в 19 позицию первой строки. На экране появляются ДВЕ восьмерки. Первая на '21' позиции, примерно там где отобразилась бы в случае 8-и битного знака. Вторая на ~14 позиции, и смещена на 1 строку вниз ( см. рисунок). Откуда это взялось то?!
Вложения
LC7981.jpg
(3.09 КБ) 893 скачивания
Реклама
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

Откуда это взялось то?!
исходник в студию!!!...

первое мог накосячить с выводом, второе посмотри errata на проц, может там что-то пишут, третье два символа рядом что ли не выводятся??

попробуй принудительно указать адрес с которого будет выводиться символ.
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Mozart писал(а):
Откуда это взялось то?!
исходник в студию!!!...

первое мог накосячить с выводом, второе посмотри errata на проц, может там что-то пишут, третье два символа рядом что ли не выводятся??

попробуй принудительно указать адрес с которого будет выводиться символ.
Исходник кинул. Упростил до минимума: настройка портов, инициализация ЖК, вывод 1 символа. Проблема не исчезла.

Символы дублируются на экране, со смещением по вертикали.

Ошибся с выводом? Дак дело в том что при 8-и битном режиме все норм, меняю в настройках режима ЖК ширину знака (dNumPoint) и начинаются проблемы.

Errata на LC7981 не встречал.
На сайте производителя ЖК есть только pdf на контроллер, никаких дополнительный сведений.
Вложения
main.c
(2.68 КБ) 598 скачиваний
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

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

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

#define dWriteRegCom(byte) ({
	PORTC = 0x08;		\
	_NOP();			\
	PORTC |= 0x02;	\
	_NOP();			\
	DDRD=0xFF;		\
	PORTD=byte;		\
	_NOP();			\
	_NOP();			\	
	_NOP();			\
	_NOP();			\
	PORTC&=0xFD;	\
	_NOP();			\
	PORTC=0x04;		\
	DDRD=0x00;		\
	PORTD=0x00;		\
})
и ещё перепишите функцию ReadBusy

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

void ReadBusy(void) 
{ 
   unsigned char busy = 0x00; 
   while (busy) 
   { 
      PORTC=0x09; 
      _NOP(); 
      SetBit(PORTC,E); 
      _NOP(); 
      _NOP(); 
      //tt=PIND>>7; 
	  busy = PIND & 0x80;
      // if (PIND & (1 << 7)) 
      // { 
         // busy = 0x00; 
      // } 
      PORTC=0x04; 
   } 
}
и следовательно если вы её будете вызывать без While!!!
Последний раз редактировалось Mozart Вт июл 29, 2008 09:44:21, всего редактировалось 1 раз.
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

ИМХО когда передаёте символы в дисплей прерывания лучше запрещать...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Mozart писал(а):если не секрет какой компилятор пользуете??
[
IAR. Когда еще только начинал с МК знакомиться, мой "учитель" порекомендовал писать в IAR, а отлаживать в AVR Studio. Псоледним пользуюсь не часто, стараюсь отлаживать сразу в железе.

За советы спасибо.

Хм... на счет прерываний верно.
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Mozart писал(а):

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

void ReadBusy(void) 
{ 
   unsigned char busy = 0x00; 
   while (busy)  
   { 
      PORTC=0x09; 
      _NOP(); 
      SetBit(PORTC,E); 
      _NOP(); 
      _NOP(); 
      //tt=PIND>>7; 
	  busy = PIND & 0x80;
      // if (PIND & (1 << 7)) 
      // { 
         // busy = 0x00; 
      // } 
      PORTC=0x04; 
   } 
}
и следовательно если вы её будете вызывать без While!!!
:) данная функция не будет работать, т.к. при такой инициализации в тело while непопасть, busy должно быть изначально ненулевым.
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

дык... никто бизи туда и не посылает...
я так понял из вашего кода, что он устанавливается на 8 ногу порта Д,

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

tt=PIND>>7;
вот в теле вайл и происходит ожидание этого сигнала, если вы внимательно посмотрите.

потом, почему я прицепился к этому?... потому что из-за того что проц не готов принять комманду или данные он её просто игнорирует или искажает...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Э-э-э, я всего лишь указал на маленькую ошибку...

unsigned char busy=0x00;
while(busy){..};

При таком определении busy, программа никогда не попадет внутрь цикла.
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

да очепятался... ну поставьте while(!busy) {}
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

как успехи?...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Mozart писал(а):как успехи?...
Да все так же :) Данные вами советы, это всего лишь причесывание программы :)
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

ну не совсем причёчывание программы... у мну просто нету ваше железки... вы попробовали с бизи???
попробуйте ещё задержку между выводами знаков поставить...

ибо если у вас выводится один размер нормально (меньший я так понял) а другой нет (больший) то просто контроллер не успевает
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Сообщение BerZerK-ku »

Mozart писал(а): вы попробовали с бизи???
попробуйте ещё задержку между выводами знаков поставить...
Задержка между знаками? дак в выложенной программе на экран послывается всего 1 знак и норм. выводится только в 8-и битном режиме.

Функция считывания флага работает и работала раньше. Так что грешить на неуспевание не стоит.
Аватара пользователя
Mozart
Мучитель микросхем
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow
Контактная информация:

Сообщение Mozart »

Пример 1.
Экран в знаковом режиме, 8 точек на знак по горизонтали, 10 по вертикали. Вывожу "8" в любую позицию, все в норме.
Пример 2.
Экран в знаковом режиме, 7 точек на знак по горизонтали, 10 по вертикали. Вывожу "8" в 19 позицию первой строки. На экране появляются ДВЕ восьмерки. Первая на '21' позиции, примерно там где отобразилась бы в случае 8-и битного знака. Вторая на ~14 позиции, и смещена на 1 строку вниз ( см. рисунок). Откуда это взялось то?!
первое не правильно всё таки пишите... во втором примере что-то нарушается, проверьте длительности, посмотрите осциллографом, возьмите другой ЖК, может этот вам глючный попался (что врятли).
может быть вообще по другому писать надо для второго примера...

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

Вернуться в «Периферия»