Nu există nici o îndoială faptul că telecomenzile sunt extrem de populare şi a devenit foarte greu să ne imaginăm o lume fără ele. Acestea sunt utilizate pentru a controla tot felul de aparate, cum ar fi televizor, sistem, DVD, receiver de satelit etc.. Ori de câte ori un astfel de aparat ajunge la sfârşitul duratei sale de viaţă incepe sa isi piarda din functionarea corecta.
Nu ar fi frumos să le folosim din nou pentru a controla alte lucruri, ca de exemplu luminile în camera de zi sau perdele?
Toate decodoarele IR PIC sunt foarte usor de construit.Piesele pentru acest hardware sunt uşor de obţinut în întreaga lume.Constructia nu ar trebui să ia mai mult decât într-o seară.
În centrul schemeii este procesorul PIC16F84. Acesta este însoţit de componentele sale standard cum ar fi condnesatorul cu cristal de 4.000 MHz şi circuitul de resetare.
Am folosit doua tipuri de receptoare IR în acest proiect, unul acordat la 36 kHz şi unul la 38 kHz . Acest lucru asigură o sensibilitate adecvată pentru toate protocoalele suportate. Nu este nici o problemă dacă nu poţi pune componentele exact ca acestea pe care le-am folosit eu. Exista o multime de receptoare similare care pot fi utilizate în exact acelaşi mod. Semnalele sunt suprapuse prin 2 diode înainte de a fi aplicate pe PORTA 4 a PIC-ului. Asiguraţi-vă că ati conectat un condensator de 22 μF aproape de pinii de alimentare a fiecărui receptoar.
Buton-ul care este de asemenea conectat la intrarea corespunzătoare din PIC, nu are nici o funcţie în acest moment. L-am inclus doar în cazul în care am decide crearea unui program care poate citi mai multe protocoale IR. Buton pot fi apoi folosite pentru a selecta protocolul.
Display cu LED-uri afisaza descrierea a diagramei. Este pur şi simplu un display multiplexor cu LED-uri . Am folosit unul cu 4 cifre, deoarece este mult mai uşor de folosit decat daca as folosi unul cu cu 4 cifre separate. Pentru fiecare segment curentul este limitat de o rezistenta de 180 Ω. Anozi comuni a celor 4 cifre sunt alimentate de patru tranzistorilore PNP. Dacă nu găsiţi tipul pe care le-am folosit puteţi folosi practic orice alt tranzistor PNP, care pot conduce aproximativ 200 mA .
Circuitul utilizează o sursă externă de alimentare de 5 V la aproximativ 100 mA.
Am construit dispozitivul pe o placa de proba . Montajul fiind foarte usor de realizat intr-un timp foarte scurt placa mea avand 7X4 cm .
Construirea decodorului PIC IR nu necesită abilităţi speciale. Se poate pot vedea că nu există greutati foarte mari în realizarea acestui proiect. Singurul lucru pe care trebuie să menţionez (din nou) este acela de a monta condensatori de decuplare cât mai aproape de pinii de alimentare a IC . Ambele receptoare IR sunt prea IC, să ştii!
Am folosit sârmă puţin mai groasa pentru toate liniile de putere.
Programarea PIC16F84
Mai întâi de toate să facem o listă cu toate sarcinile pe care software-ul trebuie să efectueze:
- Primeste şi decodeaza mesajele IR
- Scaneaza afişaj
- Flash punctul central zecimal ori de câte ori un mesaj IR primit este valabil
- Sterge ecranul 2 secunde după primirea ultimului mesaj IR
Toate aceste sarcini vor fi executate simultan, cel puţin ar trebui să par a fi. Prima sarcină este evident, avem nevoie de a primi şi a decoda mesajele IR pentru că asta facem aici. Primirea semnalelor IR este un proces critic şi nu poate fi deranjat de alte sarcini.
A doua sarcină este, de asemenea, destul de important. Toate cifre trebuie să fie prezentate la rândul lor, într-un ritm rapid şi constant, altfel putem vedea pâlpâirea ecranului. Această sarcină este, de asemenea, un moment destul de critic.
Iar ultimele două sarcini nu sunt foarte critice, dar trebuie să fie efectuate într-un mod care nu influenţează primele două sarcini.
Există doar o singură buclă principală a programului, care este un bun început pentru cele mai multe dintre programarea microprocesorului. Putem sublinia ca asta e buclă principala a programului după iniţializarea maşinii vom rămâne acolo pentru totdeauna, ….. Până la oprirea din functiune a procesorului.
;----------------------------------------------------------------------------- ; ; Main program loop ; ;----------------------------------------------------------------------------- MAIN ;-----------------------------------------CALL THE IR RECEIVER STATE MACHINE-- CALL IR_MACHINE Call the IR receiver state machine ;-----------------------------------------------------SCAN DISPLAY EVERY 5MS-- DECF SCAN_DELAY,F Decrement scan delay counter BTFSC STATUS,ZERO Only scan display if counter = 0 CALL SCAN_DISP ;-------------------------------------------------------SYNC MAIN WITH TIMER-- .SYNC BTFSC TMR0,7 Wait until bit 7 of TMR = 0 GOTO .SYNC Not 0 yet! MOVLW TIMER_UPDATE Reload timer again ADDWF TMR0,F GOTO MAIN
;----------------------------------------------------------------------------- ; ; Scan display routine ; ;----------------------------------------------------------------------------- SCAN_DISP MOVLW MS5_COUNT Reload scan delay MOVWF SCAN_DELAY MOVLW %1111.1111 Switch off all Anode drivers MOVWF PORTA during the switch MOVF SCAN_STATE,W Jump to next display's routine MOVWF PCL
;-------------------------------------------------------------SCAN DISPLAY 1-- SCAN_DISP1 MOVF DIGIT1,W Get pattern of left most digit MOVWF PORTB and send it out MOVLW %1111.1110 Switch left most digit on MOVWF PORTA MOVLW #SCAN_DISP2 Next time do SCAN_DISP2 MOVWF SCAN_STATE RETURN
;-------------------------------------------------------------SCAN DISPLAY 2-- SCAN_DISP2 MOVF DIGIT2,W Get pattern of 2nd left digit MOVWF PORTB and send it out MOVLW %1111.1101 Switch 2nd left digit on MOVWF PORTA MOVLW #SCAN_DISP3 Next time do SCAN_DISP3 MOVWF SCAN_STATE DECF DP_DELAY,F Decrement DP_DELAY every 20ms BTFSS STATUS,ZERO RETURN We're done if counter <> 0 ! BSF DIGIT2,7 Clear Digit 2's decimal point now RETURN
;-------------------------------------------------------------SCAN DISPLAY 4-- SCAN_DISP4 MOVF DIGIT4,W Get pattern of right most digit MOVWF PORTB and send it out MOVLW %1111.0111 Switch right most digit on MOVWF PORTA MOVLW #SCAN_DISP1 Next time do SCAN_DISP1 again MOVWF SCAN_STATE DECF CLR_DELAY,F Decrement CLR_DELAY every 20ms BTFSS STATUS,ZERO RETURN We're done if counter <> 0 ! MOVLW %1011.1111 Only display 4 dashes MOVWF DIGIT1 MOVWF DIGIT2 MOVWF DIGIT3 MOVWF DIGIT4 RETURN