Sari la conținut
ELFORUM - Forumul electronistilor

asocierea porturilor unei matrice


JQ

Postări Recomandate

Salutare, m-am apucat de un proiect LEDCUBE, si nu reusesc sa programez niste secvente gen rotatie sau translatie. Ceea ce as vrea sa implementez este sa asignez fiecare iesire unui element al unei matrice . De exemplu c[0][0]=PC0, c[0][1]=PC1 s.a.m.d. Exista aceasta posibilitate si daca da, cum schimb starea fiecarui element? Multumesc.

Link spre comentariu
  • Răspunsuri 2
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • JQ

    2

  • 10vid

    1

Zile populare

Top autori în acest subiect

Ce dimensiuni are cubul? Ai schema electrica?Atribuind fiecarui led un pin, chiar si pentru un cub mic (8x8x8) rezulta un numar prea mare de pini necesari: 512.De aceea se foloseste multiplexarea, adica aprinzi un rand de leduri cu PORTA, rand care este selectat dintr-un plan de PORTB, plan care este selectat si el dintre cele opt planuri ale cubului de PORTC.Totusi, desi multiplexarea are o adresabilitate mare cu pini putini (24 aici), factorul de umplere va fi foarte mic, cubul lumineaza slab (1/64 = 1.6% din puterea ledului).Astfel ca se folosesc de obicei inca opt cipuri latch de 8 biti fiecare, metoda care poate sa aprinda un plan (64 leduri) odata, ridicand factorul de umplere la 1/8 = 12.5%, acceptabil.Memoria RAM interna folosita este de 512 bytes daca se folosesc leduri RGB sau se doresc mai multe nuante de "gri" pe un led simplu (PWM).In cazul in care ledul are doar doua pozitii: aprins / stins, memoria folosita e de 64 bytes, fiecarui led fiindu-i asociat un bit de memorie.Dar pentru ca memoria in uC nu e asezata sub forma de cuburi, ci e lineara, o simpla adresare a unui led prin coordonatele sale din cub nu este suficienta, ci trebuie o formula de conversie.Astfel ca pentru a aprinde sau a stinge un led la pozitia x,y,z folosim formula:L(x,y,z,c) = (c * 128) >> x + y + (8 * z)'c' e starea ledului si poate avea doar doua valori: 1 sau 0, aprins sau stins.

Link spre comentariu

Cubul e 4x4x4. Folosesc un ATMEGA 8535, si am legat la PORTC si PORTA anozii (8+8), si , prin tranzistoare, catozii(4) la PORTD. Ideea era ca, in programare, pentru simplificare, sa nu stau sa scriu fiecare bit la fiecare secventa, ci sa aloc intr-o matrice fiecarui element pinul respectiv si eu sa lucrez cu matricea utilizand de ex "for"-uri in formule ca cea data de dumneavoastra, pentru translatie sau rotatie, etc. Momentan am realizat cateva secvente, dar asa, babeste :). Iata un exemplu:////////////PATTERN1 testing each led individualyPORTD=0b10000000;_delay_ms(250); for(int j=0;j<4;j++) { PORTC=0b00000001; _delay_ms(250); for (int i=0; i<8;i++) { PORTC=(PORTC <<1); _delay_ms(250); } //endfor PORTC PORTC=0x00; PORTA= 0b10000000; _delay_ms(250); for (int i=0; i<8;i++) { PORTA=(PORTA >>1); _delay_ms(250); } //endfor PORTA PORTA=0x00; PORTD=PORTD >>1; }//endfor PORTD}

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări