Introducere

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 :-)

Descriere generală

Proiectul este alcătuit din:

  • Module Hardware:
    • microcontrolerul AtMega16 (și plăcuța de bază);
    • 3 x shiftere SN74HC164 - ce controlează linia, coloana și culoarea afișate la un moment dat;
    • matricea de leduri (în două culori: roșu și verde).
  • Module Software:
    • programul .hex ce conține instrucțiunile pentru afișarea jocului de lumini.

Schema bloc

Hardware Design

Piesele achiziționate sunt urmatoarele:

  • placă de test;
  • 24 * rezistențe 470ohmi (căte una pentru fiecare picioruș al matricei);
  • 3 x shifter SN74HC164;
  • matrice leduri în două culori;
  • 3 x soclu shifter;
  • barete de diverse mărimi (resturi de la prima parte a proiectului) pentru soclu matrice;
  • baretă pentru conectarea plăcuțelor;
  • 1.5m x cablu UTP.

Schema electrică a întregului proiect este următoarea:

Schema electrică

Shifterul are următoarele caracteristici:

  • pini:

pinisn74hc164.jpg

  • tabelul semnalelor:

74hc164functiontable.jpg

Ledurile matricei pot fi controlate conform următoarei scheme:

Semnificația culorilor firelor de legătură de pe spate este următoarea:

  • maro: GND;
  • portocaliu spate: VCC;
  • alb-verde: clock.

Software Design

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:

  • PD5: linia verde;
  • PD6: coloana;
  • PD7: linia roșie;
  • activare linie: 0;
  • activare coloană: 1.

Î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:

Schema electrică

Rezultate Obţinute

În final, am reușit să realizez un mic joc de lumini :-)

filmulet youtube

Concluzii

  • Folosirea Shifterelor este utilă pentru afișarea unui anumit pattern (selecția unui calup de linii/coloane), deci pentru jocuri de lumini simple.
  • Pentru a realiza joculețe este necesară interacțiunea directă cu microcontrolerul (trebuie controlați cei 24 pini ai matricei) sau utilizarea unor MUX.
  • Designul implementat permite realizarea unor animații, dar nu este scalabil pentru designuri complicate.

Download

Sursele proiectului pot fi downloadate de aici.

Jurnal

1 mai

În mai puțin de 1 lună trebuie să predăm proiectul… și încă nu am cumpărat nicio componentă.

13 mai

Plimbare lungă pe str. Maica Domnului:

  • am găsit shifterele, soclurile și rezistențele;
  • nimeni nu are matrice de leduri în două culori;
  • într-un final, la un magazinaș mai mic cineva găsește în depozit o matrice puțin bușită, într-o singură culoare (roșie) - or so it seemed :P

17 mai

Oră de laborator:

  • având în vedere faptul că matricea este într-o singură culoare, schema electrică de la care vroiam să pornesc nu mai poate fi folosită;
  • netul nu merge, nu am la mine datasheet pentru shifter;
  • Cristi încearcă să schițeze ceva (mulțumesc :) );
  • până la urmă, Dumi mă ajută să verific funcționalitatea matricei și să aflu care este pinul 1: surprize, surprize! matricea este, de fapt, în două culori.

22 mai

Weekendul cu Rusaliile: ploaie torențială afară, vreme de dormit… sau de lipit proiectul.

  • Step 1: ordine în componente

componenteml.jpg

  • Step 2: marcarea zonelor unde vor fi lipite

  • Step 3: soldering

  • Final:

30 mai

Scris partea software + documentațe… poate și puțin somn înainte de colocviu.

Bibliografie/Resurse

Resurse Hardware

  • Modelul pentru schema hardware a fost reprezentat de un proiect de Snake8x8 de anul trecut.
  • Datasheet SN74HC164.

Resurse Software

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.

pm/prj2010/dloghin/afisajmatriceleduri.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0