RTV forum PL | NewsGroups PL

Jak poprawnie skonfigurować i zaprogramować wyświetlacz z 8-bitowym interfejsem na AVR?

Pytanie do tych ktorzy programowali juz wyswietlacze.

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie skonfigurować i zaprogramować wyświetlacz z 8-bitowym interfejsem na AVR?

Doker
Guest

Sun Jul 09, 2006 7:12 am   



Podpialem swoj wyswietlacz ( http://www.artronic.pl/o_produkcie.php?id=617 )
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)
{
}

}

Tomasz Piasecki
Guest

Sun Jul 09, 2006 1:32 pm   



Doker wrote:
Quote:
Oto program w c++. Czy ktos wie dlaczego to nie dziala bo np. mial
doswiadczenie z podobnym wyswietlaczem?
Z takim wyświetlaczem nie miałem do czynienia, nie znam sterownika. Mam

jednak parę uwag do kodu (przyjmuję, że to avrgcc).

Quote:
void pause(unsigned char time)
{
for(unsigned char i = 0 ; i < time; ++i)
for(unsigned char j = 0 ; j < 255; ++j)
;
}
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ś.

Quote:
#define A0 1 << 4
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.

--
| _ _ _ |
| _____ _| |_| | __ (o) | | __ __ @poczta.onet.pl |
| | \ | | |o \| \| |/o |/ _\| \ |
| |_|_|_| \_| |__/|_| |_|\__|\__||_| Tomasz Piasecki |

Doker
Guest

Sun Jul 09, 2006 4:54 pm   



Tomasz Piasecki napisał(a):
Quote:
Doker wrote:
Oto program w c++. Czy ktos wie dlaczego to nie dziala bo np. mial
doswiadczenie z podobnym wyswietlaczem?
Z takim wyświetlaczem nie miałem do czynienia, nie znam sterownika. Mam
jednak parę uwag do kodu (przyjmuję, że to avrgcc).

void pause(unsigned char time)
{
for(unsigned char i = 0 ; i < time; ++i)
for(unsigned char j = 0 ; j < 255; ++j)
;
}
Co to? Nie prościej:
#include <avr/delay.h
Pewnie prosciej. Pewnie uzyje.


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

#define A0 1 << 4
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.
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

Miller Artur
Guest

Sun Jul 09, 2006 5:57 pm   



Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości
news:e8qafr$li2$1@node5.news.atman.pl...
Quote:
Podpialem swoj wyswietlacz (
http://www.artronic.pl/o_produkcie.php?id=617 )


[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

@

Paweł Więcek
Guest

Sun Jul 09, 2006 6:01 pm   



Thus wrote Doker <doker0@wp.pl>:
Quote:
po rejestrze bo informacji jest wiecej niz 8 bitow, to nie wiem jak
kontrolowac kiedy chce zeby wlasnie wtedy odczytal informacje ode mnie.

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ł

--
(___) | Pawel Wiecek ------ Coven / Svart ------ http://www.coven.vmh.net/ |
< o o > | <coven@vmh.net> GPG/PGP info in headers GSM: +48603240006 |
\ ^ / | * * Either throw the windows out of your computer, * * |
(") | * * or throw your computer out the window! -- RMS |

Doker
Guest

Sun Jul 09, 2006 6:44 pm   



Miller Artur napisał(a):
Quote:
Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości
news:e8qafr$li2$1@node5.news.atman.pl...
Podpialem swoj wyswietlacz (
http://www.artronic.pl/o_produkcie.php?id=617 )

[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
Jestes pewien ze " kontroler: S6B0086" oznacza driver nie kontroler?

Na module nie jest nic napisane....


update Smile
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:
http://www.av-display.com.cn/products/G_ABG122032G.pdf

Miller Artur
Guest

Sun Jul 09, 2006 9:10 pm   



Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości
news:e8rj60$8ho$1@node4.news.atman.pl...
Quote:
Miller Artur napisał(a):
Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości
news:e8qafr$li2$1@node5.news.atman.pl...
Podpialem swoj wyswietlacz (
http://www.artronic.pl/o_produkcie.php?id=617 )

[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
Jestes pewien ze " kontroler: S6B0086" oznacza driver nie kontroler?
Na module nie jest nic napisane....


update Smile
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:
http://www.av-display.com.cn/products/G_ABG122032G.pdf


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 Smile 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

@

Doker
Guest

Sun Jul 09, 2006 9:24 pm   



Miller Artur napisał(a):
Quote:
Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości
news:e8rj60$8ho$1@node4.news.atman.pl...
Miller Artur napisał(a):
Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości
news:e8qafr$li2$1@node5.news.atman.pl...
Podpialem swoj wyswietlacz (
http://www.artronic.pl/o_produkcie.php?id=617 )

[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
Jestes pewien ze " kontroler: S6B0086" oznacza driver nie kontroler?
Na module nie jest nic napisane....


update Smile
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:
http://www.av-display.com.cn/products/G_ABG122032G.pdf


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

No jak to nie ma ;
Dot Size Dot Pitch Controller duty-bias
0.40*0.45 0.44*0.49 NJU6450 1/32 - 1/5

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

Miller Artur
Guest

Sun Jul 09, 2006 10:59 pm   



Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości
news:e8rsh2$b4f$1@node4.news.atman.pl...
Quote:

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.

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

Quote:

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


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

pozdr

@

Doker
Guest

Mon Jul 10, 2006 3:33 pm   



Miller Artur napisał(a):
Quote:
Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości
news:e8rsh2$b4f$1@node4.news.atman.pl...
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.

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

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


pomierz voltmiarka czy odpowiednie linie maja poprawne stany logiczne. ne
zapominaj o E1 i E2 !!
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?

Miller Artur
Guest

Mon Jul 10, 2006 4:56 pm   



Użytkownik "Doker" <doker0@wp.pl> napisał w wiadomości
news:e8tsbi$m9a$1@node4.news.atman.pl...
Quote:

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?

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)

@

Doker
Guest

Wed Jul 12, 2006 5:30 pm   



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

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie skonfigurować i zaprogramować wyświetlacz z 8-bitowym interfejsem na AVR?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map