AVR + LED matrix
Papp Zoltán
zombi at c2.hu
Wed Nov 15 23:02:14 CET 2006
2006.11.15. 18:53:43 dátumon Pal Lukacs <ekegep at yahoo.com> írta:
> Pal Lukacs <ekegep at yahoo.com> wrote: Sziasztok.
> AVR-el szeretnek meghajtani (egyelore) 5 db 5X7 ledmatrixot.
> Elmeleti segitsegre lenne szuksegem .
> Gondoltam hogy a sorokat latchel hajtanam meg,az oszlopok kozott
> multiplexelek.KIjelzem adott szoveg egy karakterenek egy reszletet a
> kivant matrixon,aztan a kov. karakter egy reszletet a kov. matrixon
> ..stb..
> Nem tudom ez mennyire jo megoldas?
Hali!
Én csináltam így 2x16 karakteres 5x7 pixeles (összesen 80x14 pixeles)
kijelzőt. A 80 oszlop volt multiplexelve 1:80 időarányban egy 80-as
demultiplexerrel és a 14 sor lett hajtva direktben. Teljesen jól működött.
Úgyhogy ez is fog. A lényeg, hogy valahogy be tud lőni egy ellenállással,
hogy mekkora árammal lövöd a pixeleket.
> Amiben meg segitseg kellene az a karakterek leirasa C -ben,ezek
> megjelenitesere valami elv,nem haj az az emlitettel parhuzamos:)
> Na meg nem tudom hogy sor -es oszlopra is kell vegfok + aramkorlatozo
> ellenallas ha 5V -rol akarom uzemeltetni a dolgot..
> Segitsegeteket elore is koszonom.
Én annó oszlopokra csak meghajtó tranyókat tettem(ULNxxxx, vagy UDNxxxx?
-> 8 tranyó DIP1x? tokban). Ezt én egy 1/80-as demultiplexerrel oldottam
meg: 5db 1/16, amit 1db 1/8 5db lába hajtott, de most már inkább
8-oszlponként egy 74HC595-öt tennék be, ezt lehet később akár bővíteni is.
A sorokra kerül 14db ellenállás. Elméletileg AVR el tud hajtani 25mA-t
lábanként, kérdés, hogy az össz. 14x25=350mA-t bírja-e. Bár ez akkor lép
fel, ha minden pixelt "égetni" akarsz. Ha biztosra akarsz menni, tegyél
ide is egy-egy tranyót.
Hát ezt itt most lent nem nézem meg, a lényeg, hogy minden oszlop-váltás
előtt kapcsold ki a sor-meghajtókat, és oszlopváltás után kapcsold újra be
őket, különben szellem-képed lesz.
A többi már csak szoftver kérdése, igényeknek megfelelően, mennyire akarod
grafikusan is használni, nem csak karakter-generátorral.
> Udv.
> Szoftnak valami hasonlot kepzeltem el: (ez csak pseudo feleseg)
> #define MAX_CHARS
> //5X7 matrixnal egy karakter 5 allapota:
> struct chars_state{
> unsigned char states[5];
> };
> struct chars_states chars[MAX_CHARS] PROGMEM= {
> {0x01,0x05,0x0a,0xA1,0xB2},
> //{},
> //.........
> };
> #define pgm_rbn(addr) pgm_read_byte_near(addr)
> #define DATABUS
> #define ADDRBUS
> #define LATCHEN
> struct chars_states* decode_char(unsigned char ch){
> struct chars_states *retV;
> switch(ch){
> case 'a': retV = &chars_states[2]; break;// <--- pl.
> //........
> }
> return retV;
> }
> //main loop: in thread:
> //......
> struct chars_state ch_s;
> unsigned char i;
> unsigned char dot_address = 1 ;
> unsigned char latchs_addr = 1;
> unsigned char n = 0;
> //idoosztas
> //......
> if(cnt1 == CNT1_THREESHOLD)
> {
> ch_s = pgm_rbn(decode_char(str[n])); // n = max: ahany matrix van!
> BATABUS = ch_s.states[i];//egy karakter allapotai: i-dik allapota.
> LATCHEN = latchs_addr; latchs_addr *= 2; //kapcsoljuk a kovetkezo
> matrixot
> n++;//lepkedunk a karakterek kozott,kov. karakter reszlete a kov.
> matrixra
> if(n == 4){ //ha az 5 char hosszu karaktersorozat elso reszlete
> kikerult a matrixokra:
> flag = 1;//jelzunk
> }
> }
> if(flag){
> latchs_addr = 1; //vissza az elso latchhez:-)
> n = 0; //vissza a karaktertomb elejere
> ADDRBUS = dot_address; dot_address *= 2;//cimezzuk a
> matrixot:kov.oszlop;
> i++; //adott karakter kovetkezo reszletenek indexe
> flag = 0;
> }
> //}
> Pl. a szoveggorditest nem tudom egyelore elkepzelni.Hogy az egyik
> matrixbol kilepo adat atkeruljon a masikra.Kellen egy atfogo elmeleti
> kep az egeszrol:)
> HELP PLEASE!
>
> ---------------------------------
> Sponsored Link
>
> Mortgage rates near 39yr lows. $420,000 Mortgage for $1,399/mo -
> Calculate new house payment
> -----------------------------------------
> elektro[-flame|-etc]
Üdv
--
Papp Zoltán
OneWay Electronics
More information about the Elektro
mailing list