Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Вс май 15, 2011 01:20:54

яж на предыдущей страничке описывал порядок подачи сигналов для инициализации дисплея, попробуйте его.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Вс май 15, 2011 13:25:33

shurikss123 писал(а):приветик всем!
Вопрос в студию, заказал недавно диспл wg12864A (part no. WG12864A-CFH-T#N) с RGB подсветкой а теперь когда он пришёл, рву волосы в частности не могу найти на него даташит, с схемой на 22 пина везде на 20 пинов, некто не подскажет что за фигня, как его подключать как посветкой управлять?

У меня точно такой же дисплей недавно появился.
С подсветкой там очень здорово сделано - вся обвязка у них уже собрана на плате, потому она управляется чисто логикой.
Управляется так: 19-ю ножку сажаешь на +5 и забываешь. 20, 21 и 22 пины - это R, G и B. Подаёшь на ножку 0 и подсветка зажигается. Например, для жёлтого цвета подаешь на 19 +5; на 20 и 21 - 0; 22 - NC или +5.
Ну или можно наоборот управлять, хозяин - барин)
Пины 1-18 должны быть как в даташите.

Только работать я его пока не заставил((
Кто-нибудь пробовал его согласовывать с 3.3-вольтовой логикой?
Я уже дошёл то такого изврата (см. вложение), но он молчит.
Да, знаю, что есть специальные микросхемы, но у меня вся кухня на белой макетке, а они все smd.
Вроде ещё есть схема с диодом и резитором на каждую ногу, но я так ничего не понял.

Да, кстати, ещё один вопрос: в даташите на сайте Winstar указано, что высокий уровень - это 0, а низкий - это +5, однако в этой статье логические уровни используются стандартные и всё там работает. Кому верить?)
Вложения
power1.png
Попытка согласования 3.3 и 5В
(10.9 KiB) Скачиваний: 832

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Ср июн 22, 2011 22:02:48

Уважаемый lexmulya :dont_know: подскажите как мне вывести графику(выделено цветом), как не пробовал рисует 8 полос, по полосе на страницу! WG12864A .


register unsigned char i;

void WriteCom(byte Com, byte CS)
{
SetBit(LCD_COM,CS);
ClrBit(LCD_COM,LCD_RS);
ClrBit(LCD_COM,LCD_RW);
#asm;
nop
nop
nop
#endasm;
LCD_DB=Com;
SetBit(LCD_COM,LCD_E);
#asm;
nop
nop
nop
#endasm;
ClrBit(LCD_COM,LCD_E);
delay_ms(1);
ClrBit(LCD_COM,(LCD_CS1+LCD_CS2));
SetBit(LCD_COM,LCD_E);
delay_ms(1);
}

void WriteData(byte data, byte CS)
{
SetBit(LCD_COM,CS);
SetBit(LCD_COM,LCD_RS);
ClrBit(LCD_COM,LCD_RW);
#asm;
nop
nop
nop
#endasm;
LCD_DB=data;
SetBit(LCD_COM,LCD_E);
#asm;
nop
nop
nop
#endasm;
ClrBit(LCD_COM,LCD_E);
delay_ms(1);
ClrBit(LCD_COM,(LCD_CS1+LCD_CS2));
SetBit(LCD_COM,LCD_E);
delay_ms(1);
}

/*Координаты LCD*/
void WriteXY(byte x,byte y, byte CS)
{
WriteCom(0xb8+y,CS);
WriteCom(0x40+x,CS);
}
void wpixXY(byte x, byte y, byte CS)
{


WriteCom(0xb8 | y,CS);
WriteCom(0x40 | x,CS);

}
/*Иницилизация LCD*/
void init_lcd(void)
{
WriteXY(0,0,(LCD_CS1+LCD_CS2));
WriteCom(0xb8,(LCD_CS1+LCD_CS2));
WriteCom(0x40,(LCD_CS1+LCD_CS2));
WriteCom(0xc0,(LCD_CS1+LCD_CS2));
WriteCom(0x3f,(LCD_CS1+LCD_CS2));
}
/*Очистить LCD*/
void clear(void)
{
unsigned char x,y;
for(x = 0;x < 64;x++)
{
for(y = 0;y < 8;y++)
{
WriteXY(x,y,(LCD_CS1+LCD_CS2));
WriteData(0,(LCD_CS1+LCD_CS2));
}
}
}
/*заполнить LCD*/
void clearz(void)
{
unsigned char x,y;
for(x = 0;x < 64;x++)
{
for(y = 0;y < 8;y++)
{
WriteXY(x,y,(LCD_CS1+LCD_CS2));
WriteData(0xff,(LCD_CS1+LCD_CS2));
}
}
}
/**/
byte gotoxy(byte x, unsigned y)
{
unsigned char CS, textCS;

if(x < 10)
{
CS=LCD_CS1;
textCS=0;
}
else
{
CS=LCD_CS2;
textCS=64;
}
WriteXY(x*6-textCS+4,y,CS); //

return CS;
}
/**/
void putc (byte data, byte inv)
{
unsigned char textL, CS=gotoxy(textx,texty);

if(data < 0x90)
{
textL=0x20;
}
else
{
textL=0x60;
}


WriteData((sym[data-textL][0])^inv,CS);
WriteData((sym[data-textL][1])^inv,CS);
WriteData((sym[data-textL][2])^inv,CS);
WriteData((sym[data-textL][3])^inv,CS);
WriteData((sym[data-textL][4])^inv,CS);
WriteData(0^inv,CS);
if(textx < 19){ textx++; textx = xk;} else {textx=0; if(texty < 8) texty++; texty = yk;
if(texty == 8){texty = 0;} }


}

/*Функция вывода строки из флеш памяти*/
void LCD_PUTSF(byte x, byte y, flash byte str[]){
byte i=0;
xk = textx;
yk = texty;
//Пока не конец строки выводим символы
while(str[i])
{
x++;
textx = x;
texty = y;
putc(str[i],in);
i++;
}
textx = xk;
texty = yk;
}
/*Функция которая ресует на экране 1 пиксел*/
void LCD_PUT_PIXEL(byte x, byte y){
//Обьявляем переменные
byte bite;
byte page;
byte data, data2;
//Выход если точка лежит вне экрана
if((x>127)|(y>63)) return;
//Выбираем кристалл
if(x>=64){
ClrBit(LCD_COM, LCD_CS1);
SetBit(LCD_COM, LCD_CS2);
x=x-64;
page = 0b00010000;
}
else{
ClrBit(LCD_COM, LCD_CS2);
SetBit(LCD_COM, LCD_CS1);
page = 0b00100000;
}
y/8;
x%8;
wpixXY(x, y, page);

WriteData(0b00000001, page);


}
/*Функция вывода прямой по алгоритму Брезенхома.
Подробно ее описывать не буду т.к. по ней лучше почитать в интернете*/
void LCD_LINE(byte x1, byte y1, byte x2, byte y2){
int dx,
.
.
.
и так рисуем линию:

void prog(void)
{
byte korX = 0;
byte korY = 0;
clear();
while(1)
{
if(PINA.7 == 0){
if(korX == 127){korX = 0; korY++;}else{korX++;}
if(korY == 63){korY = 0; }
//delay_ms(100);
//clearz();
LCD_PUT_PIXEL(korX, korY);

//
//LCD_CIRCLE(63, 63, 63);

//
}
}
}
void
.
.
.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Чт июн 30, 2011 05:42:13

Binary писал(а):Только работать я его пока не заставил((
Кто-нибудь пробовал его согласовывать с 3.3-вольтовой логикой?


У STM32 есть пины толерантные к 5В, поэтому никаких проблем с подключением нет.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Пн июл 11, 2011 22:51:22

В общем погонял я его попробовал, и сказал тфу. если честно его не везде можно использовать, медленный(очень), и те кто задумал делать на нем осциллограф, лучше не надо ничего не увидите на макс, его скорости.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Вт июл 12, 2011 08:26:53

shurikss123 писал(а):В общем погонял я его попробовал, и сказал тфу. если честно его не везде можно использовать, медленный(очень), и те кто задумал делать на нем осциллограф, лучше не надо ничего не увидите на макс, его скорости.


Вы бы тогда еще конкретные цифры привели. Какую максимальную скорость прорисовки экрана удалось получить? а скорость вывода 1 байта? да не плохо бы еще и свои исходники показать для этих случаев.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Вт июл 12, 2011 09:28:41

это есть в даташите и этих скоростей добился, еще если взять врямя на чтение, то дольще так что без чтения статуса прорисовка медленная, пробывалось все это на готовых данных которые не надо получать и читать....... , а если взять, на T6963 с чтением статуса, то его скорость явно превышает в несколько раз, несмотря на то что его временные задержки в 1,5 раза ниже.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Вт июл 12, 2011 10:11:59

А по конкретней? Просто сам периодически работаю с этим дисплеем, перерисовки страничек не замечаю. Флаг занятости проверяю.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Вт июл 12, 2011 14:12:59

BerZerK-ku писал(а):А по конкретней? Просто сам периодически работаю с этим дисплеем, перерисовки страничек не замечаю. Флаг занятости проверяю.

делаю так два рисунка на одном одна половина на другом другая и в цикл рисовать по очереди и смотрите на его тормоза

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Вт июл 12, 2011 20:51:34

я анимировонную картинку на этот индикатор выводил. скорости его для быстрого вывода явно нехватет, а как статический индикатор, он очень даже хорош

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Вт июл 12, 2011 21:22:12

воть воть а люди на нем осцылы делают, а другие удивляются :shock: я тут дrлал недавно под усилитль был сильно удивлен скорости контролера HD44780 весчь :kill:
http://www.youtube.com/watch?v=mEDGD_PjpcA

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Чт июл 14, 2011 11:43:30

Здравствуйте! Купил дисплей wg12864c, с контроллером NT7608, с ks даташиты полностью совпадают. подключил все, провожу инициализацию по инструкции на 8 странице - дисплей не темнеет. Перепробовал уже все возможные варианты, с разными задержками... при опросе дисплея показывает только статус сброса, при этом корректно, т.е. что на ноге сброса - то от и возвращает. при этом бит on/off всегда в нуле равно как и бизи. Расскажите пожалуйста по порядку для чего каждая строка инициализации? То есть для чего его несколько раз сбрасывать при установке cs и rs, rw??? длительные задержки как то влияют на чтение команд? то есть если я между 1 и 0 на Е делаю задержку аж целых 20 миллисекунд он это скушает??? Какие у вас были проблемы при запуске дисплея и как вы их решали??? контраст подключен и работает. Подсветка не подключена.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Чт июл 14, 2011 13:46:33

shurikss123 писал(а):делаю так два рисунка на одном одна половина на другом другая и в цикл рисовать по очереди и смотрите на его тормоза
Присмотрелся к дисплею по внимательнее, действительно недостатков хватает.
SkyFly писал(а):Расскажите пожалуйста по порядку для чего каждая строка инициализации?
Я делаю это так:
Код:
uchar Init_lcd(void)
{   
        // инициализация дисплея
       // возвращает 0 в конце
       // вызов раз в 200 мкс

   static uchar delay = 0;
   static uchar step = 0;
   
   if (step > 1)
   {   
      if (CheckFlag())
         return step;
   }
   
   switch(step)
   {
     case 0:
      {
         step = 1;
         StBit(PORT_RST, LCD_RST); // установим RST
         delay = 25;
      }
      break;
     case 1:
      {
         if (delay > 0)  // небольшая пауза после установки сигнала RST
            delay--;
         else
            step = 2;
      }
      break;
     case 2:
      WriteLCD(COM, 0xb8, LCD_CS); // установка 0-ой страницы
      step++;
      break;   
     case 3:
      WriteLCD(COM, 0x40, LCD_CS); // установка 0-ой строчки
      step++;
      break;
     case 4:
      WriteLCD(COM,0xc0,LCD_CS); //  верхняя 0-ая строка
      step++;
      break;
     case 5:
      WriteLCD(COM,0x3f,LCD_CS); // включение дисплея
      step = 0;
      break;   
   }
   
   return step;
}

static bool CheckFlag(void)
{
    // Проверка флага занятости
    // false - занято, true - норм 
   
    uchar data;
   
    CrBit(PORT_RS, LCD_RS);
    DDRA = 0;
    StBit(PORT_CS, LCD_CS);
    StBit(PORT_RW, LCD_RW);
    _NOP();
    _NOP();
    StBit(PORT_E, LCD_E);
    _NOP();
    _NOP();
    data = PINA;
    CrBit(PORT_E, LCD_E);
   _NOP();
    //_delay_us(2);   
    CrBit(PORT_CS, LCD_CS);
    StBit(PORT_E, LCD_E);
    DDRA=0xff;
   
    return (data & 0x80);
}

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Чт июл 14, 2011 16:39:04

А можно просто последовательность действий? ))

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Чт июл 14, 2011 17:04:42

Хм, заметил что он в ответ всегда возвращает то, что я ему только что отправил...
Может ли быть проблема в подключении?? Могут ли там быть какие то паразитные емкости которые мешают спаду 1 в 0???? Я подключал напрямую выводы контроллера к дисплею. Может надо через резистор или посадить все ноги через резистор на землю что бы разряжались?

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Пт июл 15, 2011 00:35:51

Ссссори, заработало. ) Всему виной некачественное изготовление платы, подкорачивали дорожки к D1 D2. ))

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Вт сен 06, 2011 17:11:11

Спасибки что подсказали :wink: немного потужился немного разобрался.. но все таки графику не рисует

/*Функция которая ресует на экране 1 пиксел*/
void LCD_PUT_PIXEL(byte x, byte y){
//Обьявляем переменные
byte bite, page, data = INV, data2;

if((x>127)|(y>63)) return;// Выход если точка лежит вне экрана

if(x>=64){ x = x - 64; data2 = 0b00010000;} else{data2 = 0b00100000;} //Выбираем кристалл


page = y/8; //page-номер страницы
bite = y%8; //bite-Номер байта который нам предстоит вывести

WriteXY(x, page, data2); // координаты вывода информации на LCD.

//Читаем байт с LCD(2 цикла т.к. в первом мусор)
//data = ReadData(); //????????
//data = ReadData();

data = data |(1<<bite);
WriteXY(x, page, data2);
WriteData(data, data2);


}


как я понял проблема с //data = ReadData();
функция не работает если раз комментировать рисует два квадратика и полоску и нефига больше.
в таком виде теряется часть пикселов (затераються)..

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Пт сен 09, 2011 16:17:45

На сайте MCS Electronics есть интересный для меня проект AN #148 - LCD display with touchscreen and AVR. Подскажите пожалуста кто знает тип дисплея с функцией тачскрин-а на базе контроллера KS0108.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Пн сен 19, 2011 10:53:59

WG12864A-TGH-T#N010 со встроенной температурной компенсацией и сенсорной панелью.

Re: Работа с графическими ЖКИ на контроллере KS0108 и аналог

Сб окт 01, 2011 17:48:24

Помогите. Не могу включить. пин 5 (мон. выключен) в статусе не гаснет.

даю VH на RST,CH1
команду 3F и ничего....


movlf b'01000000',WGDL
bcf WG_RS
bcf WG_RW
nop
nop
bsf WG_E
pause 0x10
bcf WG_E
Ответить