Pytanie do tych ktorzy programowali juz wyswietlacze.

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) { }

}
Reply to
Doker
Loading thread data ...

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.

Reply to
Tomasz Piasecki

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

Reply to
Doker

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ł

Reply to
Paweł Więcek

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

Reply to
Doker

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(); }

Reply to
Doker

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?

Reply to
Doker

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

Reply to
Doker

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.