Matricea de leduri este un element care ofera posibilitatea afișării unor jocuri interesante de lumini. Ideea de la care am pornit a fost aceea a redării unor mesaje (ca cele de la metrou care arată următoarea stație), după care am găsit pe internet numeroase filmulețe interesante ce au la bază un asemenea dispozitiv.
Deoarece reprezinta un lucru inedit, matricea de leduri poate deveni elementul care aduce zâmbetul pe buze la sfârșitul unei zile obositoare
Proiectul este alcătuit din:
Piesele achiziționate sunt urmatoarele:
Schema electrică a întregului proiect este următoarea:
Shifterul are următoarele caracteristici:
Ledurile matricei pot fi controlate conform următoarei scheme:
Semnificația culorilor firelor de legătură de pe spate este următoarea:
Mediul de dezvoltare folosit a fost WinAVR. Am lucrat pe Windows XP x86 într-un mediu virtual (pentru Windows 7 x64 nu am găsit drivere, nu mi-a fost recunoscută plăcuța nici cu bootloaderul modificat).
Am pornit realizarea programului de la Laborator 2 - Intreruperi, Timere, PWM, unde este explicat modul de folosire a întreruperilor pentru aprinderea LEDurilor. Apoi, folosind schema matricei, am început să aprind treptat linii/coloane, ajungând să creez jocuri de lumini.
În primul rând, am setat timerul:
void initTimer() { OCR1A = 500; TCCR1B |= (_BV(CS12) | _BV(CS10)); TCCR1B &= ~_BV(CS11) ; TCCR1A &= ~(_BV(WGM11) | _BV(WGM10)); TCCR1B |= _BV(WGM12); TIMSK |= _BV(OCIE1A); }
Apoi, am încercat diverse variante de aprindere/stringere leduri. Semnificația porturilor și felul în care acestea sunt activate:
Înainte de a începe animația, trebuie setată direcția și stinsă matricea:
DDRD = 0xFF; PORTD = 0;
Spre exemplu, aprinderea a 3 coloane, dintre care primele 5 linii sunt roșii, iar ultimele 3 sunt verzi se realizează astfel:
for(i=0;i<5;i++) { PORTD |= (1<<PD7); // dezactivare linia rosie _delay_ms(900); PORTD |= (1<<PD6); // activare coloana _delay_ms(200); PORTD = 0; _delay_ms(300); }
Pentru compilare, am folosit următorul Makefile:
build: jocLumini.hex jocLumini.elf: jocLumini.c avr-gcc -mmcu=atmega16 -Os -Wall -o jocLumini.elf jocLumini.c jocLumini.hex: jocLumini.elf avr-objcopy -j .text -j .data -O ihex jocLumini.elf jocLumini.hex avr-size jocLumini.elf clean: rm -rf jocLumini.elf jocLumini.hex
Pentru rularea și încărcarea programului:
În final, am reușit să realizez un mic joc de lumini
Sursele proiectului pot fi downloadate de aici.
În mai puțin de 1 lună trebuie să predăm proiectul… și încă nu am cumpărat nicio componentă.
Plimbare lungă pe str. Maica Domnului:
Oră de laborator:
Weekendul cu Rusaliile: ploaie torențială afară, vreme de dormit… sau de lipit proiectul.
Scris partea software + documentațe… poate și puțin somn înainte de colocviu.
Am găsit numeroase modele de animații și chiar de joculețe pentru o matrice cu leduri, dar nici una nu se potrivea designului meu (fie era alt tip de microcontroler, fie alte elemente de control, etc.). Am utilizat ca model Laboratorul 1 și Laborator 2 - Intreruperi, Timere, PWM.