Dziwne zachowanie wyświetlacza na KS108A i

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

Reply to
Bo(o)t_manager
Loading thread data ...

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

A ustawiasz gdzies x=0 ?

Reply to
Jerry1111

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

Jak resetu nie podłączyłem to wariował, teraz reset jest podłączony za pomocą mikrostyku do plusa Jak potrzebuję reset to se pstrykam :) Tak wygląda płytka:

formatting link
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.

Tak.

Reply to
Bo(o)t_manager

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

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.

No to nie wiem.

Reply to
Jerry1111

Bo(o)t_manager pisze:

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.).

Reply to
Adam Dybkowski

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

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 :)

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?

Zrobione. Działa fajnie.

Z tym powalczę później :( 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

Reply to
Bo(o)t_manager

Minimalne timingi bedziesz mial w PDFie.

Mysle ze nie.

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

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

Moze caly _BV ubierz w nawiasy?

Reply to
Jerry1111

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

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

Ja jestem mocno poczatkujący :(

Pozdrawiam! Bo(o)t_manager

Reply to
Bo(o)t_manager

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

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

Standardowy avr-gcc w repozytoriach ubuntu. A Ty czego używasz?

Też próbowałem. Trza się bedzie zapisać do forum mikrokontrolery.net i im głowy posuszyć.

Pozdrawiam! Bo(o)t_manager

Reply to
Bo(o)t_manager

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

Tomek

Reply to
Tom

In the darkest hour on Fri, 7 Nov 2008 20:48:06 +0000 (UTC), Bo(o)t_manager <bo.o.t snipped-for-privacy@WYTNIJTOpoczta.wp.pl> screamed:

gcc -S program.c

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

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

Reply to
Artur M. Piwko

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

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

Muszę to ma być cyfrowy oscyloskop(dużo powiedziane) i odświeżanie raz na sekundę odpada.

Reply to
Bo(o)t_manager

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

=@s32;r

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

Reply to
Bo(o)t_manager

Dnia Sun, 09 Nov 2008 18:13:06 +0000, Grzegorz napisał(a):

fakt, mój błąd - 1kB = 8192bity.

Pozdrawiam! Bo(o)t_manager.

Reply to
Bo(o)t_manager

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.