ИМХО поиск ошибок в этом и состоит...BerZerK-ku писал(а):Да все так жеДанные вами советы, это всего лишь причесывание программы
Графический ЖК дисплей на LC7981
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Реклама
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Mozart писал(а):ИМХО поиск ошибок в этом и состоит...BerZerK-ku писал(а):Да все так жеДанные вами советы, это всего лишь причесывание программы
Я так и не понял в чем дело... и пошел другим путем.
В 8-и битном режиме, мне не нравилось то, что на 1 знак по горизонтали уходило 8 бит, но зато была свобода по вертикали. При символе 5х7 расстояние между символами получалось не менее 3-х точек, буквы стоят достаточно далеко друг от друга, некрасиво... и в памяти описание 1 символа занимает 7 байт.
Развернув экран на 90 градусов получил слдеующее: в строке между символами можно сделать "любые" расстояния, взял 1 точку, правда есть и недостаток, ограничение свободы по вертикали. На описание символа уходит на 2 байта меньше.
а всё таки надо разобраться почему не выводится....
выведите ровно два символа рядом... если они не выведутся выведите с задержкой в 1с к примеру...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
а марка индикатора какая??? или прикрепите даташит...
e.g. в индикаторе sg12232 там всё разбито на страницы... может быть у вас также...
а если в правую половину не залезать, в нижней слева и справа символы выводятся нормально?
e.g. в индикаторе sg12232 там всё разбито на страницы... может быть у вас также...
а если в правую половину не залезать, в нижней слева и справа символы выводятся нормально?
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Реклама
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Ну ведь все это есть уже в предыдущих постахMozart писал(а):а марка индикатора какая??? или прикрепите даташит...
а если в правую половину не залезать, в нижней слева и справа символы выводятся нормально?
Даташит на индикатор - это pdf в 1 страничку с указанием распиновки разъема и габаритными размерами. Единственное что представляет интерес это документация на контроллер LC7981.
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 продаёт что-то прилагающееся к этому ЖК то врятли то, что у вас это баг скорее точно вы что-то делаете не то... только не понять что...
так какой у вас ЖК??? и сколько он стоит?...
з.ы. попробуйте написать всё с самого начала.. иногда помогает...
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
всё зависит от поставленной задачи...Вы pdf на МК почитайте, в нем много чего есть, но используются ли все в каждом реальном устройстве?
но глюк ваш за чуть больше 1тр дороговат будет
з.ы. но я остаюсь при своём: потыкайтесь осциллом, посмотрить временные характеристики,... обязательно посмотрите на бизи, посмотрите под дебаггером может у вас что-то в проге ломается
ИМХО: функцию записи комманды и данных (они у вас одинаковые) оформите как функцию, а не через дефайн... тип bool лучше не использовать лучше unsigned char
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
- Сообщения: 3
- Зарегистрирован: Чт июн 30, 2011 11:43:22
Вижу, что тема старая, но топикреатор так и не озвучил, удалось ли решить проблему.
Столкнулся с аналогичной проблемой контроллера LC7981 в индикаторе WG128128B.
Задача использовать индикторв графическом режиме, поэтому знаковому особое внимание не уделялось, но было проверено, что знаки корректно отображаются.
А проблема, собственно, такого характера:
при переводе проинициализированного индикатора (и проверенного) из знакового в графический режим, наблюдается срыв строк в одних и тех же столбцах со смещением на одну строку вниз.
Проверено на нескольких экземплярах.
Количество точек, скважность и прочие параметры выставлены корректно, что подтверждается корректной работой в знаковом режиме.
Какие могут быть идеи?
Столкнулся с аналогичной проблемой контроллера LC7981 в индикаторе WG128128B.
Задача использовать индикторв графическом режиме, поэтому знаковому особое внимание не уделялось, но было проверено, что знаки корректно отображаются.
А проблема, собственно, такого характера:
при переводе проинициализированного индикатора (и проверенного) из знакового в графический режим, наблюдается срыв строк в одних и тех же столбцах со смещением на одну строку вниз.
Проверено на нескольких экземплярах.
Количество точек, скважность и прочие параметры выставлены корректно, что подтверждается корректной работой в знаковом режиме.
Какие могут быть идеи?
- Сообщения: 3
- Зарегистрирован: Чт июн 30, 2011 11:43:22
Перерыв дюжину форумов, нашел множество сходных ответов по работе с WG128128B (LC7981).
Возможно это будет полезно еще кому-то.
Итак:
- при инициализации экрана в графическом режиме нужно задавать 160 х 160 точек при видимой области 128х128.
- в знаковом режиме, соответственно, 20 знаков (при ширине символа 8 точек).
Некоторым для нормальной работы требовалось установить и скважность 1/160.
У меня нормально заработало при скважности 1/128.
Хочу также отметить еще одну проблему, с которой столкнулся при работе с данным дисплеем:
при полностью собранной схеме, когда выводы ЖКИ подключены к МК, подключена цепь регулировки контраста, если подать на него питание и какое-то время не производить инициализацию, начинает жутко греться DCDC преобразователь и транзистор в цепи контраста. После инициализации все нормализуется.
Похоже, несколько недоработанная получилась партия, или модель в целом.
Посмотрим, как покажет себя в работе.
Возможно это будет полезно еще кому-то.
Итак:
- при инициализации экрана в графическом режиме нужно задавать 160 х 160 точек при видимой области 128х128.
- в знаковом режиме, соответственно, 20 знаков (при ширине символа 8 точек).
Некоторым для нормальной работы требовалось установить и скважность 1/160.
У меня нормально заработало при скважности 1/128.
Хочу также отметить еще одну проблему, с которой столкнулся при работе с данным дисплеем:
при полностью собранной схеме, когда выводы ЖКИ подключены к МК, подключена цепь регулировки контраста, если подать на него питание и какое-то время не производить инициализацию, начинает жутко греться DCDC преобразователь и транзистор в цепи контраста. После инициализации все нормализуется.
Похоже, несколько недоработанная получилась партия, или модель в целом.
Посмотрим, как покажет себя в работе.
имеется 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)=
-----------------
у кого какие мысли, буду очень рад выслушать
не мение ценны, буду рекомендации, кто смог его "правельно - париготовить"
- Сообщения: 708
- Зарегистрирован: Пт ноя 30, 2007 14:40:44
Ещё ничего. Я вообще ничего не могу на него вывести. Даже у дебилов SANYO, в оригинальном даташите, тайминговая диаграмма противоречит сама себе (по крайней мере её рисунок), не говоря уже о полнейшем китайском говне, выпускаемом в виде репликаций. (Выводил сигнал из микроконтроллера на VGA, ловя такты на командах - было проще).


