Am incercat sa implementez jocul Tetris folosindu-ma de 2 matrici de leduri bicolore de dimensiune 8×8 pe care le-am legat impreuna pentru a obtine un display mai mare. Am ales leduri ca sa pot implementa si efecte speciale la eliminarea liniilor, sau alte posibile bonusuri. Partea software nu este inca terminata, de aceea aceste efecte nu se regasesc in varianta finala.
Deoarece legarea cu microcontrolerul este comuna am ales sa explic doar partea implementata de mine. Microcontrolerul va trimite semnale catre cele 5 decodificatoare in urmatorul mod. Prima data, va selecta linia ledului pe care vreau sa il aprind folosindu-se de primul DMUX, iar apoi, in functie de culoare si coloana va activa si trimite un cod pe unul din celelalte 4 decodificatoare. Am avut nevoie de 2 decodificatoare petru fiecare matrice pentru a selecta coloana verde, respectiv rosie. Deoarece DMUX-urile functioneaza in logica negata, am avut nevoie de inversoare pentru a trimite semnalul logic 1 pe coloana dorita.
Pentru implementarea hardware am folosit demultiplexoare 74HC138 si inversoare 74HC04.
Spre deosebire de schema, cipurile 74HC04 grupeaza de fapt 6 inversoare.
Aici este schema pentru o singura matrice, cealalta fiind identica. In plus, iesirile lui U1 sunt legate si la radurile celeilale matrici, dupa cum am explicat in schema bloc.
Lista componentelor folosite:
Partea software a proiectului meu este inca nefinalizata, dar voi explica ce ar trebui sa fie si ce planuiesc sa implementez: Pentru ca pe Windows 64bit placuta nu este recunoscuta, am lucrat in Lnux, unde am instalat libraria avr-libc. Acesta a fost singurul pas necesar, dupa totu a mers ok cu bootloaderul oferit pe site.
In ceea ce priveste programul, va trebui sa ciclez prin randuri iar apoi prin coloane destul de repede incat sa nu se observe vreun flicker. Planuiesc sa fac acest lucru printr-o functie care sa imi aprida un led pe baza unei linii, coloane si culori date. Dupa ce o piesa a fost asezata, voi verifica daca este cazul sa elimin linii, caz in care acestea se vor colora in rosu si vor disparea. Dupa acest pas, se va genera random o noua piesa care va aparea pe ecran. Pe langa butoanele care controleaza miscarea piesei(stanga/dreapta/rotire) exista si ale 2 de reset/pauza.
Pe viitor mai pot implementa si alte efecte vizuale folosindu-ma de cele 2 culori.
Cea mai importanta concluzie ar fi “Ai grija la fire!”
Lipitul a fost foarte greu din cauza numarului mare de fire, iar partea software a avut de suferit tot din aceasta cauza. Pe cei care vor sa faca un astfel de proiect i-as sfatui sa isi gandeasca foarte bine traseele, lungimile firelor si ordinea lipiturilor inca de la inceput, sau sa abandoneze firele cu totul si sa gaseasca o solutie alternativa. Tot din cauza firelor care fac scurturi in functie de pozitia placutei, acelasi program aprinde leduri diferite in functie de cum tii placuta in mana.
In concluzie, proiectul mi s-a parut interesant, si cu ocazia lui am acumulat experienta in lipituri si legaturi!
Va urma!