Pytanie do tych ktorzy programowali juz wyswietlacze.

Jul 09, 2006 11 Replies

Podpialem swoj wyswietlacz (

formatting link
) Linie danych - 8 bitow - pod PORTD, a reszte pod PORTC - RST, R/W, A0, E1, E2. Napisalem taki oto program, ktorego celem jest wyswietlenie kilku pixeli. Czegokolwiek.. Oczywiscie nic sie nie dzieje. Zupelnie nic. Oto program w c++. Czy ktos wie dlaczego to nie dziala bo np. mial doswiadczenie z podobnym wyswietlaczem?



#include <avr/io.h>



#include <avr/iom8.h>


void pause(unsigned char time) { for(unsigned char i = 0 ; i < time; ++i) for(unsigned char j = 0 ; j < 255; ++j) ; }


#define DANE PORTD #define INSTR PORTC



#define A0 1 << 4 #define E1 1 << 3 #define E2 1 << 2 #define READ 1 << 1 #define RST 1 << 5



#define P0 1 #define P1 2 #define P2 4 #define P3 8 #define P4 16 #define P5 32 #define P6 64 #define P7 128


void SetI(const char & x) { INSTR = RST | x; }



void SetD(const char& x) { DANE = x; }


int main() { //DDRB = ~0;



DDRD = ~0; //out dir DDRC = ~0; //out dir



// Turn on display OPTIONAL??? SetI (0 | E1 | E2); pause(1);



SetD(0xe2); SetI(READ | E1 | E2); pause(1);



SetD(0xAF); SetI( E1 | E2); pause(1);



SetD (P0|P2|P4|P5|P7); SetI (E1|A0 | E2); pause(1);



while(1) { }



}

Z takim wyświetlaczem nie miałem do czynienia, nie znam sterownika. Mam jednak parę uwag do kodu (przyjmuję, że to avrgcc).

Co to? Nie prościej: #include <avr/delay.h>

i użyć funkcji _delay_us() i _delay_ms() stosownie do potrzeby? Uwaga! potrzebna prawidlowa definicja F_CPU w makefile czy gdzieś.

Hm... To jest niebezpieczne. Lepiej #define A0 (1 << 4) bo nie masz pewności jakie wiązanie i priorytet będą miały operatory pomiędzy ktorymi będziesz stosował te definicje.

TP.

Pewnie prosciej. Pewnie uzyje.

Dobra uwaga.

Skoro juz troche wiesz o wyswietlaczach to powiedz mi prosze czy to normalne, ze nie ma tam miejsca na takt - SCK. Bo jesli ustawiam rejestr po rejestrze bo informacji jest wiecej niz 8 bitow, to nie wiem jak kontrolowac kiedy chce zeby wlasnie wtedy odczytal informacje ode mnie. Nie rozumiem jak to dziala

U¿ytkownik "Doker" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:e8qafr$li2$ snipped-for-privacy@node5.news.atman.pl...

formatting link
)

[pac]

ponawiam w zasadzie swoje pytanie - jaki kontroler ma ten LCD ? bo na stronie artronica jes podane oznaczenie drivera a nie kontrolera. przedtem to wrozenie z krysztalowej kuli ... inaczej programuje sie kontrolery z serii SED/S1D, inaczej T6963 itd

@

Thus wrote Doker snipped-for-privacy@wp.pl:

Normalnie. Ustawiasz linie danych, r/w, d/c, a w następnie ustawiasz enable (stosowne w zależności od tego z którym kontrolerem chcesz gadać) i wtedy sobie odczytuje dane. Potem gasisz enable, zmieniasz ustawianie pozostałych linii, itd.

Paweł

Miller Artur napisał(a):

Jestes pewien ze " kontroler: S6B0086" oznacza driver nie kontroler? Na module nie jest nic napisane....

update :) na stronie producenta znalazlem takie dane:

Item No. Old No. Outline V.A Size ABG122032G HY-12232G 80.0*36.0 60.5*18.5

Dot Size Dot Pitch Controller duty-bias 0.40*0.45 0.44*0.49 NJU6450 1/32 - 1/5 B/L LCD Type LED STN

Dorzucam jeszcze karte katalogowa:

formatting link

U¿ytkownik "Doker" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:e8rj60$8ho$ snipped-for-privacy@node4.news.atman.pl...

tyle, ze tam nie ma slowa o tym jaki kontroler ma ten LCD.

po krótkich poszukiwaniach okazalo sie jednak, ze tam podobno jest cudo nazwane NJU6450 :-) w datasheecie (google Twoj przyjaciel) masz napisane dok³adnie co trzeba zrobic, aby na nim cos wyswietlic. dla pocieszenia dodam, ze jest to duzo prostsze niz w inncyh kontrolerach, bo ten nie zawiera generatora znaków :)

powodzenia

@

Miller Artur napisał(a):

No jak to nie ma ;>

Nie wiem jak to jest ale jakos mi sie to cos wiesza na czekaniu na Busy. Poza tym nie jestem elektronikiem tylko programista i wielu rzeczy nie rozumiem jak np "Duty" ale oczywiscie nikt mi tu nie odpisal co to znaczy.

Ponizszy program wiesza sie na "//4" - tzn na diodach kontrolnych wiesza mi sie na numerze "4".

#include <avr/io.h>

#include <avr/iom8.h>

void pause(const unsigned int & time) { for(unsigned int i = 0 ; i < time; ++i) for(unsigned char j = 0 ; j < 255; ++j) ; }

void inline sleep(const unsigned int & time) { pause(time); }

#define DANE PORTD #define INSTR PORTC

#define A0 (1 << 4) #define E1 (1 << 3) #define E2 (1 << 2) #define READ (1 << 1) #define WRITE 0 #define RST (1 << 5)

#define P0 1 #define P1 2 #define P2 4 #define P3 8 #define P4 16 #define P5 32 #define P6 64 #define P7 128

void inline SetI(const char & x) { INSTR = x; }

void inline SetD(const char& x) { DANE = x; }

#define IN 0 #define OUT (~0)

void WaitBusy() { DDRD = IN; SetI(READ); while(PIND & P7); }

void WaitReset() { DDRD = IN; SetI(READ); while(PIND & P4); }

void TurnOn() { DDRD = OUT; SetD(0xaf); SetI(WRITE | E1 | E2); }

void Write(const char & dane, const char & part) { DDRD = OUT; SetD(dane); SetI(part | A0 | WRITE); }

void inline DiodaPlus() { PORTB +=1; }

void init() {

DDRC = OUT; DDRB = OUT;

DiodaPlus(); //1 sleep(5000); DiodaPlus(); //2 WaitBusy(); DiodaPlus(); //3 TurnOn(); DiodaPlus(); //4 WaitBusy(); DiodaPlus(); //5 Write(~0, E1 | E2); DiodaPlus(); //6

}

int main() { init(); }

U¿ytkownik "Doker" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:e8rsh2$b4f$ snipped-for-privacy@node4.news.atman.pl...

Duty to calkowita liczba linii (wierszy) wyswietlacza odniesiona do liczby jednoczesnie sterowanych wierszy. w malych lcd jednoczesnie sterowany jest jeden wiersz, wiec duty bedzie 1/Y

pomierz voltmiarka czy odpowiednie linie maja poprawne stany logiczne. ne zapominaj o E1 i E2 !!

pozdr

@

Miller Artur napisał(a):

Sprawdzam. niby wszystko w porzadku a tu nic sie nie wyswietla. Mysle za zamowie nowa plytke PCB taka z pinami na zlacze kolkowe tak zeby wyswietlacz wchodzil w to bezposrednio i wtedy zobaczymy.

Natoamist teraz mam jeszcze ostatnie pytanie. Czy strona - Page oznacza cos takiego jak to bylo kiedys w dosie ze byly backbuforry na ktorych mozna bylo rysowac a pozniej pokazywac na zmiane tworzac animacje czy po prostu sektor - kawalek ekranu?

U¿ytkownik "Doker" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:e8tsbi$m9a$ snipped-for-privacy@node4.news.atman.pl...

wyglada z datasheeta (nigdy nie programowalem tego cuda, wiec wnioskuje z opisu), ze nie starczyoby pamieci na 4 strony. RAMu tegoz jest az 2560 bitow, co wystarcza na 80x32 pixele. lcd jest 122x32, ale ma 2 kontrolery, wiec ma pewnien zapas tylko (pewien obszar RAMu nie jest pokazywany na wyswietlaczu)

@

Serdecznie dziekuje i pozdrawiam. PS. Wlasne mysle nad plytka. jak zrobie to wszystko sie okaze.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required