ИМХО поиск ошибок в этом и состоит...BerZerK-ku писал(а):Да все так жеДанные вами советы, это всего лишь причесывание программы
Графический ЖК дисплей на LC7981
- Реклама
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Mozart писал(а):ИМХО поиск ошибок в этом и состоит...BerZerK-ku писал(а):Да все так жеДанные вами советы, это всего лишь причесывание программы
Я так и не понял в чем дело... и пошел другим путем.
В 8-и битном режиме, мне не нравилось то, что на 1 знак по горизонтали уходило 8 бит, но зато была свобода по вертикали. При символе 5х7 расстояние между символами получалось не менее 3-х точек, буквы стоят достаточно далеко друг от друга, некрасиво... и в памяти описание 1 символа занимает 7 байт.
Развернув экран на 90 градусов получил слдеующее: в строке между символами можно сделать "любые" расстояния, взял 1 точку, правда есть и недостаток, ограничение свободы по вертикали. На описание символа уходит на 2 байта меньше.
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
а всё таки надо разобраться почему не выводится....
выведите ровно два символа рядом... если они не выведутся выведите с задержкой в 1с к примеру...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
а марка индикатора какая??? или прикрепите даташит...
e.g. в индикаторе sg12232 там всё разбито на страницы... может быть у вас также...
а если в правую половину не залезать, в нижней слева и справа символы выводятся нормально?
e.g. в индикаторе sg12232 там всё разбито на страницы... может быть у вас также...
а если в правую половину не залезать, в нижней слева и справа символы выводятся нормально?
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Реклама
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Ну ведь все это есть уже в предыдущих постахMozart писал(а):а марка индикатора какая??? или прикрепите даташит...
а если в правую половину не залезать, в нижней слева и справа символы выводятся нормально?
Даташит на индикатор - это pdf в 1 страничку с указанием распиновки разъема и габаритными размерами. Единственное что представляет интерес это документация на контроллер LC7981.
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
http://www.gaw.ru/html.cgi/txt/lcd/chip ... 1/prog.htm
вот здесь по русски что-то написано...
я думаю если эта контора http://www.ramtex.dk/glcd/glcd7981.htm? ... XgodcnBDqg продаёт что-то прилагающееся к этому ЖК то врятли то, что у вас это баг скорее точно вы что-то делаете не то... только не понять что...
так какой у вас ЖК??? и сколько он стоит?...
з.ы. попробуйте написать всё с самого начала.. иногда помогает...
вот здесь по русски что-то написано...
я думаю если эта контора http://www.ramtex.dk/glcd/glcd7981.htm? ... XgodcnBDqg продаёт что-то прилагающееся к этому ЖК то врятли то, что у вас это баг скорее точно вы что-то делаете не то... только не понять что...
так какой у вас ЖК??? и сколько он стоит?...
з.ы. попробуйте написать всё с самого начала.. иногда помогает...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
- Mozart
- Мучитель микросхем
- Сообщения: 413
- Зарегистрирован: Пт мар 10, 2006 12:23:05
- Откуда: Moscow
- Контактная информация:
всё зависит от поставленной задачи...Вы pdf на МК почитайте, в нем много чего есть, но используются ли все в каждом реальном устройстве?
но глюк ваш за чуть больше 1тр дороговат будет
з.ы. но я остаюсь при своём: потыкайтесь осциллом, посмотрить временные характеристики,... обязательно посмотрите на бизи, посмотрите под дебаггером может у вас что-то в проге ломается
ИМХО: функцию записи комманды и данных (они у вас одинаковые) оформите как функцию, а не через дефайн... тип bool лучше не использовать лучше unsigned char
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Re: Графический ЖК дисплей на LC7981
Вижу, что тема старая, но топикреатор так и не озвучил, удалось ли решить проблему.
Столкнулся с аналогичной проблемой контроллера LC7981 в индикаторе WG128128B.
Задача использовать индикторв графическом режиме, поэтому знаковому особое внимание не уделялось, но было проверено, что знаки корректно отображаются.
А проблема, собственно, такого характера:
при переводе проинициализированного индикатора (и проверенного) из знакового в графический режим, наблюдается срыв строк в одних и тех же столбцах со смещением на одну строку вниз.
Проверено на нескольких экземплярах.
Количество точек, скважность и прочие параметры выставлены корректно, что подтверждается корректной работой в знаковом режиме.
Какие могут быть идеи?
Столкнулся с аналогичной проблемой контроллера LC7981 в индикаторе WG128128B.
Задача использовать индикторв графическом режиме, поэтому знаковому особое внимание не уделялось, но было проверено, что знаки корректно отображаются.
А проблема, собственно, такого характера:
при переводе проинициализированного индикатора (и проверенного) из знакового в графический режим, наблюдается срыв строк в одних и тех же столбцах со смещением на одну строку вниз.
Проверено на нескольких экземплярах.
Количество точек, скважность и прочие параметры выставлены корректно, что подтверждается корректной работой в знаковом режиме.
Какие могут быть идеи?
Re: Графический ЖК дисплей на LC7981
Перерыв дюжину форумов, нашел множество сходных ответов по работе с WG128128B (LC7981).
Возможно это будет полезно еще кому-то.
Итак:
- при инициализации экрана в графическом режиме нужно задавать 160 х 160 точек при видимой области 128х128.
- в знаковом режиме, соответственно, 20 знаков (при ширине символа 8 точек).
Некоторым для нормальной работы требовалось установить и скважность 1/160.
У меня нормально заработало при скважности 1/128.
Хочу также отметить еще одну проблему, с которой столкнулся при работе с данным дисплеем:
при полностью собранной схеме, когда выводы ЖКИ подключены к МК, подключена цепь регулировки контраста, если подать на него питание и какое-то время не производить инициализацию, начинает жутко греться DCDC преобразователь и транзистор в цепи контраста. После инициализации все нормализуется.
Похоже, несколько недоработанная получилась партия, или модель в целом.
Посмотрим, как покажет себя в работе.
Возможно это будет полезно еще кому-то.
Итак:
- при инициализации экрана в графическом режиме нужно задавать 160 х 160 точек при видимой области 128х128.
- в знаковом режиме, соответственно, 20 знаков (при ширине символа 8 точек).
Некоторым для нормальной работы требовалось установить и скважность 1/160.
У меня нормально заработало при скважности 1/128.
Хочу также отметить еще одну проблему, с которой столкнулся при работе с данным дисплеем:
при полностью собранной схеме, когда выводы ЖКИ подключены к МК, подключена цепь регулировки контраста, если подать на него питание и какое-то время не производить инициализацию, начинает жутко греться DCDC преобразователь и транзистор в цепи контраста. После инициализации все нормализуется.
Похоже, несколько недоработанная получилась партия, или модель в целом.
Посмотрим, как покажет себя в работе.
- alex-wolf
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Сб мар 09, 2013 21:46:01
- Откуда: Уфа
- Контактная информация:
LC7981
имеется WG128128B-YGH-VZ ЖК-матрица 128x128 на контроллере LC7981
http://www.platan.ru/cgi-bin/qwery.pl/id=585680716
и имеется проблема с правельной инициализацией
http://radiokot.ru/forum/viewtopic.php?f=20&t=10005
проделывал также
http://radiokot.ru/forum/viewtopic.php?p=893096#p893096
непомогло
сам код
пока некаког асеблера
---------
#define RS PORTC.7 // данные = 0 , инстукция = 1
#define RW PORTC.6 // чтение = 0 , запись = 1
#define E PORTC.5 // стробирование
#define CS PORTC.4 // CS выбор = 0
#define RES PORTC.3 // reset--- сборс = 0
void lc7981_strob (void)
{
E=1; delay_us(100); E=0;
};
void lcd_busy (void)
//флаг готовности попадает на DB7(1) когда RS =1 и RW =1.
//Следующая команда может быть записана только когда флаг готовности будет установлен в “0”
{
CS=0;
PORTA=0b00000000;
DDRA=0x00;
RS = 1 ; // данные = 0 , инстукция = 1
RW = 1 ; // запись в жки = 0 , чтение из жки =1
while (PINA.7 = 0)
{
lc7981_strob();
};
DDRA=0xff;
};
void lc7981_wr (unsigned char cmd, unsigned char data) {
lcd_busy();
CS=0;
RS = 1 ; // инстукция = 1
RW = 0 ; // запись в жки = 0
PORTA=(cmd); //
E=1; delay_us(1); E=0; //lc7981_strob();
RS = 0 ; // данные = 0
RW = 0 ; // запись в жки = 0
PORTA=data;
E=1; delay_us(1); E=0; //lc7981_strob();
} ;
void lcd_clear (void){
char i; i=0;
lc7981_wr(0x0A,0x00);
lc7981_wr(0x0B,0x00);
for(i = 1; i <= 16 * 20; i++)
lc7981_wr(0x0C,' ');
lc7981_wr(0x0A,0x00);
lc7981_wr(0x0B,0x00);
};
void lc7981_init(void){
DDRC = 0xF8;
CS =1; RES=1; delay_ms(100);RES=0;delay_ms(100);
DDRA = 0xFF; RS =0;RW =0;E =0;CS=0;RES=1;
RS =0;RW =0;E =0;CS =0;RES=1;
RS =0;RW =0;E=0;
//CHAR 7x5
lc7981_wr(0x00,0x30); //Управление режимом 0x00 ////курсор знак подчеркивания
lc7981_wr(0x01,0x75); // 0x75 // Установка высоты знаков 0x01
lc7981_wr(0x02,(128/8)-1); //Установка числа знаков 0x02
lc7981_wr(0x03,(128-1)); //7F //Установка числа скважности дисплея 0x03
lc7981_wr(0x04,0x07); //0x07 //Установка позиции курсора 0x04
lc7981_wr(0x08,0x00); //Установка начального адреса младшего байта
lc7981_wr(0x09,0x00); //Установка начального адреса старшего байта
lc7981_wr(0x0A,0x00); //Установка (младшего) адреса курсора (младший адрес чтения/записи RAM)
lc7981_wr(0x0B,0x00); //Установка ( старшего) адреса курсора (старший адрес чтения/записи RAM)
};
в осносном цикле программы
небольшой цикл для отображения всего знакогенератора
delay_ms(200); ((iii<0)& (iii >201)); iii++; };{lc7981_wr(0x0C,iii);};
и что получилось
видно что в правой части экрана знаки идут не последовательном порядке с маленьким опускание на 1 строку на 2 пред-последных символов
------------------------------------
итоговый вопросс:
как этот контроллер "готовить"?!
ну есть описание
http://www.gaw.ru/html.cgi/txt/lcd/chip ... 1/prog.htm
жаль подробных нет примеров нету(образец)
ну есть:
1/m =1/Nx = мощность дисплея;
n =HpxHn;
m/Vp =число линий дисплея;
Cp<=Vp.
а теперрь разложение
128х128 точек
Hp Ширина знака Размер знака по горизонтали 6 – 8 точек
Hn Число знаков Число знаков (цифр) в строке или слов графики в строке 2–256 знаков
Vp Высота знака Размер знака по вертикали 1–16 точек
Cp Позиция курсора Номер линии отображения курсора 1–16 линий
Nx Число линий Число линий на экране дисплея 1–256 линий
когда читаешь не сложно, а когда уже самим расчеты делать, уже сомневаешся
Hn=(128/Hp)=
-----------------
у кого какие мысли, буду очень рад выслушать
не мение ценны, буду рекомендации, кто смог его "правельно - париготовить"

http://www.platan.ru/cgi-bin/qwery.pl/id=585680716
и имеется проблема с правельной инициализацией
http://radiokot.ru/forum/viewtopic.php?f=20&t=10005
проделывал также
http://radiokot.ru/forum/viewtopic.php?p=893096#p893096
непомогло
сам код
пока некаког асеблера
---------
#define RS PORTC.7 // данные = 0 , инстукция = 1
#define RW PORTC.6 // чтение = 0 , запись = 1
#define E PORTC.5 // стробирование
#define CS PORTC.4 // CS выбор = 0
#define RES PORTC.3 // reset--- сборс = 0
void lc7981_strob (void)
{
E=1; delay_us(100); E=0;
};
void lcd_busy (void)
//флаг готовности попадает на DB7(1) когда RS =1 и RW =1.
//Следующая команда может быть записана только когда флаг готовности будет установлен в “0”
{
CS=0;
PORTA=0b00000000;
DDRA=0x00;
RS = 1 ; // данные = 0 , инстукция = 1
RW = 1 ; // запись в жки = 0 , чтение из жки =1
while (PINA.7 = 0)
{
lc7981_strob();
};
DDRA=0xff;
};
void lc7981_wr (unsigned char cmd, unsigned char data) {
lcd_busy();
CS=0;
RS = 1 ; // инстукция = 1
RW = 0 ; // запись в жки = 0
PORTA=(cmd); //
E=1; delay_us(1); E=0; //lc7981_strob();
RS = 0 ; // данные = 0
RW = 0 ; // запись в жки = 0
PORTA=data;
E=1; delay_us(1); E=0; //lc7981_strob();
} ;
void lcd_clear (void){
char i; i=0;
lc7981_wr(0x0A,0x00);
lc7981_wr(0x0B,0x00);
for(i = 1; i <= 16 * 20; i++)
lc7981_wr(0x0C,' ');
lc7981_wr(0x0A,0x00);
lc7981_wr(0x0B,0x00);
};
void lc7981_init(void){
DDRC = 0xF8;
CS =1; RES=1; delay_ms(100);RES=0;delay_ms(100);
DDRA = 0xFF; RS =0;RW =0;E =0;CS=0;RES=1;
RS =0;RW =0;E =0;CS =0;RES=1;
RS =0;RW =0;E=0;
//CHAR 7x5
lc7981_wr(0x00,0x30); //Управление режимом 0x00 ////курсор знак подчеркивания
lc7981_wr(0x01,0x75); // 0x75 // Установка высоты знаков 0x01
lc7981_wr(0x02,(128/8)-1); //Установка числа знаков 0x02
lc7981_wr(0x03,(128-1)); //7F //Установка числа скважности дисплея 0x03
lc7981_wr(0x04,0x07); //0x07 //Установка позиции курсора 0x04
lc7981_wr(0x08,0x00); //Установка начального адреса младшего байта
lc7981_wr(0x09,0x00); //Установка начального адреса старшего байта
lc7981_wr(0x0A,0x00); //Установка (младшего) адреса курсора (младший адрес чтения/записи RAM)
lc7981_wr(0x0B,0x00); //Установка ( старшего) адреса курсора (старший адрес чтения/записи RAM)
};
в осносном цикле программы
небольшой цикл для отображения всего знакогенератора
delay_ms(200); ((iii<0)& (iii >201)); iii++; };{lc7981_wr(0x0C,iii);};
и что получилось
видно что в правой части экрана знаки идут не последовательном порядке с маленьким опускание на 1 строку на 2 пред-последных символов------------------------------------
итоговый вопросс:
как этот контроллер "готовить"?!
ну есть описание
http://www.gaw.ru/html.cgi/txt/lcd/chip ... 1/prog.htm
жаль подробных нет примеров нету(образец)
ну есть:
1/m =1/Nx = мощность дисплея;
n =HpxHn;
m/Vp =число линий дисплея;
Cp<=Vp.
а теперрь разложение
128х128 точек
Hp Ширина знака Размер знака по горизонтали 6 – 8 точек
Hn Число знаков Число знаков (цифр) в строке или слов графики в строке 2–256 знаков
Vp Высота знака Размер знака по вертикали 1–16 точек
Cp Позиция курсора Номер линии отображения курсора 1–16 линий
Nx Число линий Число линий на экране дисплея 1–256 линий
когда читаешь не сложно, а когда уже самим расчеты делать, уже сомневаешся
Hn=(128/Hp)=
-----------------
у кого какие мысли, буду очень рад выслушать
не мение ценны, буду рекомендации, кто смог его "правельно - париготовить"
Re: Графический ЖК дисплей на LC7981
Ещё ничего. Я вообще ничего не могу на него вывести. Даже у дебилов SANYO, в оригинальном даташите, тайминговая диаграмма противоречит сама себе (по крайней мере её рисунок), не говоря уже о полнейшем китайском говне, выпускаемом в виде репликаций. (Выводил сигнал из микроконтроллера на VGA, ловя такты на командах - было проще).


