RTV forum PL | NewsGroups PL

Sterowanie wyświetlaczem LCD-AG-192064G-FBW_K_W-N6 z KS108A: nietypowe zachowanie

Dziwne zachowanie wyświetlacza na KS108A i pytanie o tablice

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Sterowanie wyświetlaczem LCD-AG-192064G-FBW_K_W-N6 z KS108A: nietypowe zachowanie

Goto page 1, 2  Next

Bo(o)t_manager
Guest

Wed Nov 05, 2008 5:46 pm   



Witam!
Bawię się wyświetlaczem LCD-AG-192064G-FBW_K_W-N6 na w/w sterowniku od
paru dni i nie daje mi spać jedna rzecz.
Mianowicie wszystkie dane czy polecenia muszę wysyłać na wyświetlacz
zanegowane inaczej nic nie rusza i tak załączenie wyświetlacza to nie
0x3f tylko ~(0x3f), wpisanie wartości 0 daje zapalone wszystkie osiem
punktów, a 255 zgaszone. Czy te wyświetlacze mają to do siebie, że tak je
trzeba sterować?
Może ktoś miał z nimi do czynienia i może coś mi rozjaśnić w tym temacie.
tutaj kod(taki najprostszy by tylko sprawdzić działanie wyswietlacza:

DDRD = 0xFF;
DDRC = 0xFF;
SET_LED;
CLR_RW; // RW 0
//_delay_ms(100);
rozkaz; // RS 0
LCD_DANE_OUT = ~0b00111111; // włączenie lcd
EN(); //takt
LCD_DANE_OUT = ~(0b10111000 + 0); // ustawienie strony
EN();
dane; //RS 1
LCD_DANE_OUT = ~0x00; // czyści stronę
for(a = 0;a < 64; a++){
EN();
_delay_ms(20);}

A tak przy okazji:
Utworzyłem sobie tablicę:
prog_char probka[] = {0,32,55,11,22,33,14,24,25};

i próbuje ja odczytać:

for(y = 0; y < 64;x++,y++) {
b = pgm_read_byte(probka + x);
put_pixel(b,y );}
I wartość b wynosi ciągle 63

Z góry Wielkie dzięki za pomoc.
Bo(o)t_manager

Jerry1111
Guest

Wed Nov 05, 2008 9:45 pm   



Bo(o)t_manager wrote:
Quote:
Witam!
Bawię się wyświetlaczem LCD-AG-192064G-FBW_K_W-N6 na w/w sterowniku od
paru dni i nie daje mi spać jedna rzecz.
Mianowicie wszystkie dane czy polecenia muszę wysyłać na wyświetlacz
zanegowane inaczej nic nie rusza i tak załączenie wyświetlacza to nie
0x3f tylko ~(0x3f), wpisanie wartości 0 daje zapalone wszystkie osiem
punktów, a 255 zgaszone. Czy te wyświetlacze mają to do siebie, że tak je
trzeba sterować?

KS0108? U mnie normalnie, czytaj PDFa czy nie ma inwerterow. Posprawdzaj
jeszcze masy/zasilania.

Quote:
A tak przy okazji:
Utworzyłem sobie tablicę:
prog_char probka[] = {0,32,55,11,22,33,14,24,25};

i próbuje ja odczytać:

for(y = 0; y < 64;x++,y++) {
b = pgm_read_byte(probka + x);
put_pixel(b,y );}
I wartość b wynosi ciągle 63

A ustawiasz gdzies x=0 ?

--
Jerry1111

Bo(o)t_manager
Guest

Thu Nov 06, 2008 4:45 pm   



Dnia Wed, 05 Nov 2008 20:45:09 +0000, Jerry1111 napisał(a):


Quote:
KS0108? U mnie normalnie, czytaj PDFa czy nie ma inwerterow. Posprawdzaj
jeszcze masy/zasilania.
Jak resetu nie podłączyłem to wariował, teraz reset jest podłączony za

pomocą mikrostyku do plusa Jak potrzebuję reset to se pstrykam Smile
Tak wygląda płytka:
http://www.wrzuta.pl/obraz/jrPapLtZ44/
to ze rezonator jest na niej źle podłączony to się nie przejmuj. Jak
podłączyć reset wyświetlacza na stałe, układem RC?(rezystor od plusa do
resetu, kondensator od resetu do masy)
PDF do tego wyświetlacza jest okrutnie obskurny i nie wskazuje na
inwertery.

Quote:
A ustawiasz gdzies x=0 ?

Tak.

Jerry1111
Guest

Thu Nov 06, 2008 10:23 pm   



Bo(o)t_manager wrote:
[quote:7570a74d85]Dnia Wed, 05 Nov 2008 20:45:09 +0000, Jerry1111 napisał(a):


KS0108? U mnie normalnie, czytaj PDFa czy nie ma inwerterow. Posprawdzaj
jeszcze masy/zasilania.
[/quote:7570a74d85]
Aha - przypomnialem sobie ze byl dosc czuly na timingi. No i KS0108 nie
lubi smieci na zasilaniu i/lub liniach sterujacych, bo potrafi zdurniec.

[quote:7570a74d85]Jak resetu nie podłączyłem to wariował, teraz reset jest podłączony za
pomocą mikrostyku do plusa Jak potrzebuję reset to se pstrykam Smile
Tak wygląda płytka:
http://www.wrzuta.pl/obraz/jrPapLtZ44/
to ze rezonator jest na niej źle podłączony to się nie przejmuj. Jak
podłączyć reset wyświetlacza na stałe, układem RC?(rezystor od plusa do
resetu, kondensator od resetu do masy)
[/quote:7570a74d85]
Nie da sie - w KS0108 na wejscie resetu musisz podac ladny i szybki
przebieg. Podlacz se pod noge procka i resetuj z procka. Zadne 'resety'
RC nie wchodza w gre.

[quote:7570a74d85]PDF do tego wyświetlacza jest okrutnie obskurny i nie wskazuje na
inwertery.

A ustawiasz gdzies x=0 ?
[/quote:7570a74d85]
No to nie wiem.

--
Jerry1111

Adam Dybkowski
Guest

Thu Nov 06, 2008 11:56 pm   



Bo(o)t_manager pisze:

Quote:
Utworzyłem sobie tablicę:
prog_char probka[] = {0,32,55,11,22,33,14,24,25};

i próbuje ja odczytać:

for(y = 0; y < 64;x++,y++) {
b = pgm_read_byte(probka + x);
put_pixel(b,y );}
I wartość b wynosi ciągle 63

Zobacz, co z tego zminimalizowanego kawałka wyszło w asemblerze,
dodatkowo przesymuluj w AVR Studio. Często wtedy przychodzi olśnienie i
trafisz na małą literówkę w kodzie. Albo zamianę plusa na minus.

W pracy często mi się tak zdarza, że im dłużej szukam jakiegoś błędu w
sofcie, tym mniejszą zmianą odbywa się potem doprowadzenie do
prawidłowego działania. Czasem wystarczy nawet zanegować 1 bit w kodzie
źródłowym (np. zmienić 1 na 0 albo - na + itp.).

--
Adam Dybkowski
http://dybkowski.net/

Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.

Jerry1111
Guest

Fri Nov 07, 2008 9:19 pm   



Bo(o)t_manager wrote:
Quote:
Dnia Thu, 06 Nov 2008 21:23:05 +0000, Jerry1111 napisał(a):

Tak wygląda "sygnał taktu" jak zmieniam timingi na 2 lub 1us zaczynają
się "cuda wianki" dziać na wyświetlaczu.

Minimalne timingi bedziesz mial w PDFie.

Quote:
Mam pomysł na podczepienie do
każdej nóżki sterującej rezystora ok 10k połączonego z masą. Czy pomoze
to choć trochę na zakłócenia?

Mysle ze nie.

Quote:
A ustawiasz gdzies x=0 ?
No to nie wiem.
Z tym powalczę później Sad
Ale jest coś innego co mnie trapi:
LCD_DANE_OUT = _BV(pixel) // Tak ustawiam odpowiedni piksel strony
Ale gdy chcę odczytać poprzednią wartość strony i zsumować ja z bierzącą
to nie działa:
LCD_DANE_OUT = temp | _BV(pixel)
Działa natomiast:
LCD_DANE_OUT = _BV(5) | _BV(pixel)
Wygląda na to że nie można logicznie sumować zmiennej i _BV

Ja nie wiem jak _BV jest zdefiniowane - bo to tylko #define jest chyba?

Quote:
Sorry za głupie pytania ale w C jestem kompletna noga.

P.S Kompilator to avr-gcc 4.2.2

to nie do mnie. Ja gcc uzywam i preferuje bez zadnych 'cudow' roznych
producentow.

Moze caly _BV ubierz w nawiasy?


--
Jerry1111

Bo(o)t_manager
Guest

Fri Nov 07, 2008 9:46 pm   



Dnia Thu, 06 Nov 2008 21:23:05 +0000, Jerry1111 napisał(a):

Quote:
Bo(o)t_manager wrote:
Dnia Wed, 05 Nov 2008 20:45:09 +0000, Jerry1111 napisał(a):
KS0108? U mnie normalnie, czytaj PDFa czy nie ma inwerterow.
Posprawdzaj jeszcze masy/zasilania.
Udało mi się dojść do sedna problemu:

#define LCD_DANE_OUT DDRB
Po usunięciu w/w linijki, zero jest zero, a 255 jest 255 :)

Quote:

Aha - przypomnialem sobie ze byl dosc czuly na timingi. No i KS0108 nie
lubi smieci na zasilaniu i/lub liniach sterujacych, bo potrafi zdurniec.
Jest jakiś taki powolny:

void EN(void)
{
_delay_us(2);
CLR_E; // E stan niski
_delay_us(3);
SET_E; // E stan wysoki
_delay_us(3);
}
Tak wygląda "sygnał taktu" jak zmieniam timingi na 2 lub 1us zaczynają
się "cuda wianki" dziać na wyświetlaczu. Mam pomysł na podczepienie do
każdej nóżki sterującej rezystora ok 10k połączonego z masą. Czy pomoze
to choć trochę na zakłócenia?


Quote:

Nie da sie - w KS0108 na wejscie resetu musisz podac ladny i szybki
przebieg. Podlacz se pod noge procka i resetuj z procka. Zadne 'resety'
RC nie wchodza w gre.

Zrobione. Działa fajnie.

Quote:
PDF do tego wyświetlacza jest okrutnie obskurny i nie wskazuje na
inwertery.

A ustawiasz gdzies x=0 ?

No to nie wiem.
Z tym powalczę później Sad

Ale jest coś innego co mnie trapi:
LCD_DANE_OUT = _BV(pixel) // Tak ustawiam odpowiedni piksel strony
Ale gdy chcę odczytać poprzednią wartość strony i zsumować ja z bierzącą
to nie działa:
LCD_DANE_OUT = temp | _BV(pixel)
Działa natomiast:
LCD_DANE_OUT = _BV(5) | _BV(pixel)
Wygląda na to że nie można logicznie sumować zmiennej i _BV
Sorry za głupie pytania ale w C jestem kompletna noga.
Pozdrawiam
Bo(o)t_manager
P.S Kompilator to avr-gcc 4.2.2

Bo(o)t_manager
Guest

Fri Nov 07, 2008 10:46 pm   



Dnia Thu, 06 Nov 2008 23:56:16 +0100, Adam Dybkowski napisał(a):

Quote:
Bo(o)t_manager pisze:

Utworzyłem sobie tablicę:
prog_char probka[] = {0,32,55,11,22,33,14,24,25};

i próbuje ja odczytać:

for(y = 0; y < 64;x++,y++) {
b = pgm_read_byte(probka + x);
put_pixel(b,y );}
I wartość b wynosi ciągle 63

Zobacz, co z tego zminimalizowanego kawałka wyszło w asemblerze,
dodatkowo przesymuluj w AVR Studio. Często wtedy przychodzi olśnienie i
trafisz na małą literówkę w kodzie. Albo zamianę plusa na minus.

Mam linuxa więc avr studio odpada, może wiesz jaka opcje trzeba dopisać
by dostać wynik w asm od avr-gcc?

Quote:
W pracy często mi się tak zdarza, że im dłużej szukam jakiegoś błędu w
sofcie, tym mniejszą zmianą odbywa się potem doprowadzenie do
prawidłowego działania. Czasem wystarczy nawet zanegować 1 bit w kodzie
źródłowym (np. zmienić 1 na 0 albo - na + itp.).
Ja jestem mocno poczatkujący Sad


Pozdrawiam!
Bo(o)t_manager

Bo(o)t_manager
Guest

Fri Nov 07, 2008 10:46 pm   



Dnia Fri, 07 Nov 2008 20:19:32 +0000, Jerry1111 napisał(a):

Quote:
Bo(o)t_manager wrote:
Dnia Thu, 06 Nov 2008 21:23:05 +0000, Jerry1111 napisał(a):

Tak wygląda "sygnał taktu" jak zmieniam timingi na 2 lub 1us zaczynają
się "cuda wianki" dziać na wyświetlaczu.

Minimalne timingi bedziesz mial w PDFie.

Ja nie wiem jak _BV jest zdefiniowane - bo to tylko #define jest chyba?

Za elektrodą: _BV to makro wyłuszczające bit do jego wartości liczbowej

Quote:
P.S Kompilator to avr-gcc 4.2.2

to nie do mnie. Ja gcc uzywam i preferuje bez zadnych 'cudow' roznych
producentow.


Standardowy avr-gcc w repozytoriach ubuntu.
A Ty czego używasz?
Quote:
Moze caly _BV ubierz w nawiasy?
Też próbowałem.

Trza się bedzie zapisać do forum mikrokontrolery.net i im głowy posuszyć.

Pozdrawiam!
Bo(o)t_manager

Tom
Guest

Fri Nov 07, 2008 11:58 pm   



Jerry1111 wrote:
Quote:
.....
Ja nie wiem jak _BV jest zdefiniowane - bo to tylko #define jest chyba?


#define _BV(bit) (1 << (bit))

Tomek

Artur M. Piwko
Guest

Sat Nov 08, 2008 11:45 am   



In the darkest hour on Fri, 7 Nov 2008 20:48:06 +0000 (UTC),
Bo(o)t_manager <bo.o.t_manager@WYTNIJTOpoczta.wp.pl> screamed:
Quote:
Zobacz, co z tego zminimalizowanego kawałka wyszło w asemblerze,
dodatkowo przesymuluj w AVR Studio. Często wtedy przychodzi olśnienie i
trafisz na małą literówkę w kodzie. Albo zamianę plusa na minus.

Mam linuxa więc avr studio odpada, może wiesz jaka opcje trzeba dopisać
by dostać wynik w asm od avr-gcc?


gcc -S program.c

Automatycznie zapisze wynik do program.s o ile nie podasz -o.

Quote:
W pracy często mi się tak zdarza, że im dłużej szukam jakiegoś błędu w
sofcie, tym mniejszą zmianą odbywa się potem doprowadzenie do
prawidłowego działania. Czasem wystarczy nawet zanegować 1 bit w kodzie
źródłowym (np. zmienić 1 na 0 albo - na + itp.).
Ja jestem mocno poczatkujący Sad

Dobra rada:
Nie oszczędzaj tak na timingach. Lepiej dać o kilka s więcej.
Ty i tak tego nie odczujesz...

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:227B ]
[ 11:08:52 user up 11885 days, 23:03, 1 user, load average: 0.00, 0.61, 0.90 ]

The world is coming to an end... SAVE YOUR BUFFERS!!

Bo(o)t_manager
Guest

Sat Nov 08, 2008 1:45 pm   



Dnia Sat, 08 Nov 2008 10:11:36 +0000, Artur M. Piwko napisał(a):

Quote:
In the darkest hour on Fri, 7 Nov 2008 20:48:06 +0000 (UTC),
Bo(o)t_manager <bo.o.t_manager@WYTNIJTOpoczta.wp.pl> screamed:
gcc -S program.c

Automatycznie zapisze wynik do program.s o ile nie podasz -o.
Dzięki działa ale kod wynikowy to dla mnie czarna magia, coś tam liznąłem

asemblera z 2 lata temu, ale to zupełnie mi nie przypomina tego co tam
widziałem. I jak się skapnąć która linia C należy do której linii asm?
u mnie kod wynikowy jest w .o Coś takiego wygenerował(początek kodu)

..file "ka108A_cmd.c"
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
.global __do_copy_data
.global __do_clear_bss
.stabs "/home/tomeq/gcc/108.6/",100,0,2,.Ltext0
.stabs "ka108A_cmd.c",100,0,2,.Ltext0
.text
..Ltext0:
.stabs "gcc2_compiled.",60,0,0,0
.stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0
.stabs "char:t(0,2)=r(0,2);0;127;",128,0,0,0
.stabs "long int:t(0,3)=@s32;r
(0,3);020000000000;017777777777;",128,0,0,0

Quote:

Dobra rada:
Nie oszczędzaj tak na timingach. Lepiej dać o kilka us więcej. Ty i tak
tego nie odczujesz...
Muszę to ma być cyfrowy oscyloskop(dużo powiedziane) i odświeżanie raz na

sekundę odpada.

Bo(o)t_manager
Guest

Sat Nov 08, 2008 2:45 pm   



Dnia Sat, 08 Nov 2008 12:23:10 +0000, Bo(o)t_manager napisał(a):

Quote:
.file "ka108A_cmd.c"
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
.global __do_copy_data
.global __do_clear_bss
.stabs "/home/tomeq/gcc/108.6/",100,0,2,.Ltext0 .stabs
"ka108A_cmd.c",100,0,2,.Ltext0 .text
.Ltext0:
.stabs "gcc2_compiled.",60,0,0,0
.stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0 .stabs
"char:t(0,2)=r(0,2);0;127;",128,0,0,0 .stabs "long int:t(0,3)
=@s32;r
(0,3);020000000000;017777777777;",128,0,0,0
To nie to. Niestety mam kłopot z wieloplikowym programem.

Mam 3 pliki lcd.3 ks108__cmd.c i ks108_cmd.h jak to do kupy połączyć z
avr-gcc -S ?

Pozdrawiam!
Bo(o)t_manager

Artur M. Piwko
Guest

Sat Nov 08, 2008 4:46 pm   



In the darkest hour on Sat, 8 Nov 2008 12:55:21 +0000 (UTC),
Bo(o)t_manager <bo.o.t_manager@WYTNIJTOpoczta.wp.pl> screamed:
Quote:
.file "ka108A_cmd.c"
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
.global __do_copy_data
.global __do_clear_bss
.stabs "/home/tomeq/gcc/108.6/",100,0,2,.Ltext0 .stabs
"ka108A_cmd.c",100,0,2,.Ltext0 .text
.Ltext0:
.stabs "gcc2_compiled.",60,0,0,0
.stabs "int:t(0,1)=r(0,1);-32768;32767;",128,0,0,0 .stabs
"char:t(0,2)=r(0,2);0;127;",128,0,0,0 .stabs "long int:t(0,3)
=@s32;r
(0,3);020000000000;017777777777;",128,0,0,0
To nie to. Niestety mam kłopot z wieloplikowym programem.
Mam 3 pliki lcd.3 ks108__cmd.c i ks108_cmd.h jak to do kupy połączyć z
avr-gcc -S ?

Opcja -S służy raczej do zgrubnego zweryfikowania programu. Nie służy do
nauki asemblera. Z wieloplikowym jest identycznie - po prostu dodajesz
pliki źródłowe, np: gcc -S main.c lcd.c (ale nie .h).
Polecałbym skorzystanie z gotowego pliku Makefile, który ładnie zrobi
wszystko za Ciebie, wraz z generacją listingów asemblerowych dla każdego
pliku osobno.

Tu masz przykładowe programy dołączone do biblioteki avr-libc, możesz
zaadaptować od własnych potrzeb któryś z plików Makefile.

http://rapidshare.com/files/161841100/avr-libc-examples.tar.bz2.html
http://www.2shared.com/file/4243320/452a6fca/avr-libc-examplestar.html

--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:219B ]
[ 16:30:56 user up 11885 days, 4:25, 1 user, load average: 0.00, 0.61, 0.90 ]

This screen intentionally left blank.

Bo(o)t_manager
Guest

Sun Nov 09, 2008 6:46 pm   



Dnia Sat, 08 Nov 2008 15:37:39 +0000, Artur M. Piwko napisał(a):

Quote:
Tu masz przykładowe programy dołączone do biblioteki avr-libc, możesz
zaadaptować od własnych potrzeb któryś z plików Makefile.

http://rapidshare.com/files/161841100/avr-libc-examples.tar.bz2.html
http://www.2shared.com/file/4243320/452a6fca/avr-libc-examplestar.html

Po ciężkich bojach udało mi się ożenić Avr-gcc z VmLab'em i co widzę?
Zapełnienie całego ekranu na czarno zajmuje 16.6ms.
Mój błąd polegał na tym, że przyjąłem zapełniania wyświetlacza punkt po
punkcie i wtedy to długo trwa. Teraz muszę wykombinować jak zrobić pamięć
ekranu. W końcu 192x64 to 12kB ramu.

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Sterowanie wyświetlaczem LCD-AG-192064G-FBW_K_W-N6 z KS108A: nietypowe zachowanie

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map