joi, 7 februarie 2013

Problema L1. Controlul unui led cu un buton.

Pagina principala curs            

Problemă: Să se proiecteze un sistem care ar permite schimbarea stării unui led din aprins în stinns la apăsarea unui buton. Starea inițială se va considera led aprins.

Serecomanda studierea structurii şi lucrului cu modulul periferic GPIO şi sistemul de comenzi AVR.

Сonectarea led-urilor şi butoanelor la pini: 

- Butonul se conectează de la pin la gnd ca în figura de mai jos. Pinul la rîndul său se configurează în următorul mod: DDRxy=0, PORTxy=1. Astfel cînd butonul nu este conectat, prin rezistorul pull-up, la pin va fi aplicată o tensiune înaltă, care corespunde cu "1" logic. Bitul PINxy la citire ne va da valoarea "1". Dacă butonul va fi conectat ieşirea pinului va fi conectată la ground, astfel de pe pinul PINxy se va citi "0" logic.În modul următor PINxy ne va indica dacă butonul este conectat sau nu.Rezistorul Pull-Up este încorporat în microcontroler, de aceea este desenat cu linii întrerupte.

    În cazul cînd pinul este setat spre ieşire (DDRxy=1) şi este setat "1" la PORTxy (în cazul dat rezistorul Pull-Up nu este conectat) prin pin va curge un curent de o valoare de cîteva zeci de mA la conectarea butonului (conform datelor din datasheet pentru MCU din familia AVR curentul maxim admisibil este de 40 mA). Astfel pentru a reduce curentul în serie cu butonul se coenctează un rezistor cu o valoare de cîteva sute de Ohm (de exemplu 330 Ohm). Schema în cazul dat va arăta în modul următor:

    În cazul cînd nu avem rezistoare Pull-Up încorporate în MCU , putem folosi un rezistor discret. Valoarea lui poate fi calculată în modul următor: R = Ualim / I, unde I este curentul care va curge prin pin, care îl vom limita pînă la 1 mA, astfel vom avea R = 5 V / 1 mA = 5 kOhm.
    LED-ul poate fi conectat în două moduri, de la pin la ground şi de la tensiunea de alimentare la pin. În primul caz pentru aprinderea led-ului trebuie să aplicăm la pin "1" logic. În cazul doi va fi necesar de aplicat "0". Însă în cazul al doilea led-ul se va alimenta cu curent de la sursă, iar în primul caz de la microcontroler, astfel dacă dorim să conectăm o cantitae destul de mare de led-uri este mai convinabil de folosit cazul al doilea.
Cazul 1
Cazul 2

Rezistorul este necesar pentru a stabili curentul necesar, de obicei curentul nominal de funcţionare a led-urilor este de 15 mA şi tensiunea de 2.5 V. Dacă la sursa de alimentare avem 5 V, este necesar ca pe rezistor să cadă 5V - 2.5 V = 2.5 V. Curentul de 10 mA va fi îndeajuns pentru funcţionarea normală a ledului ca indicator. Astfel rezistenţa va fi egală cu R = U/I = 5 V / 10 mA = 500 ohm. Cel mai apropiat nominal pentru rezistor este de 510 ohm.


Evitarea zgomotelor de comutatie

    Se recomandă ca pinii care nu sunt utilizati să fie utilizați pentru intrare pentru a evita generarea potențialelor la ieșire și a exlude un oarecare scurt-circuit întîmplător.
    Pentru excluderea comutațiilor nedorite pe pinii de intrare neutilizați se recomandă activarea rezistențelor de pull-up pentru acești pini. La comutațiile mecanice vor apărea zgomote de comutație. Acest zgomot va implica programul să detecteze mai mult decît o singură comutație. Pentru evitarea zgomotului se recomandă de a introduce o reținere în program pentru ignorarea zonei de comutație.



Realizarea problemei

    Pentru a avea o viziune generală asupra rezolvării preblemei vom prezenta soluția în schema bloc: Să presupunem ca am conectat ledul la pinul 0 de la portul A, iar butonul la pinul 4

Pagina principala curs