- Pregătirea pentru programare:
- Crearea unui proiect nou folosind MPLAB-X:
- Cunoașterea registrelor de configurare:
- Setarea biților de configurare în MPLAB-X:
- Programarea PIC pentru a clipi un LED:
- Diagrama circuitului și simularea Proteusului:
Acesta este al doilea tutorial din seria noastră de tutoriale PIC. În tutorialul nostru anterior Noțiuni de bază cu microcontrolerul PIC: Introducere în PIC și MPLABX, am aflat lucrurile de bază despre microcontrolerul nostru PIC, am instalat și software-ul necesar și am achiziționat un nou programator PicKit 3 pe care îl vom folosi în curând. Acum suntem gata să începem cu primul nostru program intermitent cu LED-uri folosind PIC16F877A. Vom afla, de asemenea, despre Registrele de configurare în acest tutorial.
Acest tutorial se așteaptă ca ați instalat software-ul necesar pe computer și să cunoașteți câteva elemente de bază decente despre PIC MCU. Dacă nu, vă rugăm să reveniți la tutorialul anterior și să începeți de acolo.
Pregătirea pentru programare:
Din moment ce am decis să folosim PIC16F877A, cu compilatorul XC8, permiteți-ne să începem cu foaia lor de date. Recomand tuturor să descarce foaia de date PIC16F877A și manualul XC8 Compiler, deoarece ne vom referi frecvent la acestea pe măsură ce progresăm prin tutorialul nostru. Este întotdeauna o bună practică să citiți foaia de date completă a oricărui MCU înainte de a începe să programăm cu el.
Acum, înainte de a deschide MPLAB-X și a începe programarea, există câteva lucruri de bază de care trebuie să fii conștient. Oricum, deoarece acesta este primul nostru program, nu vreau să vă aranjez cu oameni cu multă teorie, dar ne vom opri aici și colo în timp ce programăm și vă voi explica lucrurile ca atare. Dacă nu aveți suficient timp pentru a citi toate acestea, doar aruncați o privire și săriți în videoclipul din partea de jos a paginii.
Crearea unui proiect nou folosind MPLAB-X:
Pasul 1: Lansați MPLAB-X IDE pe care l-am instalat în clasa anterioară, odată încărcat ar trebui să arate cam așa.
Pasul 2: Faceți clic pe Fișiere -> Proiect nou sau utilizați tasta rapidă Ctrl + Shift + N. Veți primi următorul POP-UP, din care trebuie să selectați Standalone Project și să faceți clic pe Următorul.
Pasul 3: Acum trebuie să ne selectăm dispozitivul pentru proiect. Deci, tastați ca PIC16F877A peste secțiunea derulantă Selectare dispozitiv . După ce ați terminat, ar trebui să fie așa și apoi faceți clic pe Următorul.
Pasul 4: Pagina următoare ne va permite să selectăm instrumentul pentru proiectul nostru. Acesta ar fi PicKit 3 pentru proiectul nostru. Selectați PicKit 3 și faceți clic pe următorul
Pasul 5: Pagina următoare va cere să selectați compilatorul, selectați compilatorul XC8 și faceți clic pe următorul.
Pasul 6: În această pagină trebuie să denumim proiectul nostru și să selectăm locația în care trebuie salvat proiectul. Am numit acest proiect ca Blink și l-am salvat pe desktopul meu. Puteți să-l numiți și să-l salvați în modul dvs. preferat. Proiectul nostru va fi salvat ca un folder cu extensia .X, care poate fi lansat direct de MAPLB-X. Faceți clic pe Finalizare după ce ați terminat.
Pasul 7: Gata !!! Proiectul nostru a fost creat. În fereastra din stânga va apărea numele proiectului (Aici clipi), faceți clic pe el pentru a putea vizualiza toate directoarele din interior.
Pentru a începe programarea trebuie să adăugăm un fișier principal C, în directorul nostru de fișiere sursă. Pentru a face acest lucru, faceți clic dreapta pe fișierul sursă și selectați Nou -> Fișier principal C, așa cum se arată în imaginea de mai jos.
Pasul 8: Va apărea următoarea casetă de dialog în care trebuie menționat numele fișierului C. Am numit din nou în Blink, dar alegerea vă este lăsată. Denumiți-l în coloana Nume fișier și faceți clic pe finisare.
Pasul 9: Odată ce fișierul principal C este creat, IDE îl va deschide cu niște coduri implicite, așa cum se arată mai jos.
Pasul 10: Gata, acum putem începe programarea codului nostru în fișierul C-main. Codul implicit nu va fi utilizat în tutorialele noastre. Deci, să le ștergem complet.
Cunoașterea registrelor de configurare:
Înainte de a începe programarea oricărui microcontroler, trebuie să știm despre registrele sale de configurare.
Deci, care sunt aceste registre de configurare, cum și de ce ar trebui să le setăm?
Dispozitivele PIC au mai multe locații care conțin biții de configurație sau siguranțe. Acești biți specifică funcționarea fundamentală a dispozitivului, cum ar fi modul oscilator, cronometrul câinelui de pază, modul de programare și protecția codului. Acești biți trebuie setați corect pentru a rula codul, altfel avem un dispozitiv care nu funcționează . Deci, este foarte important să știm despre aceste registre de configurație înainte de a începe chiar și cu programul nostru Blink.
Pentru a utiliza aceste registre de configurare, trebuie să citim foaia de date și să înțelegem ce tipuri de biți de configurare sunt disponibili și funcțiile lor. Acești biți pot fi setați sau resetați pe baza cerințelor noastre de programare folosind o pragmă de configurare.
Pragma are următoarele forme.
#pragma config setting = state-value #pragma config register = valoare
unde setarea este un descriptor de setare a configurației, de exemplu, WDT și state este o descriere textuală a stării dorite, de exemplu, OFF. Luați în considerare următoarele exemple.
#pragma config WDT = ON // activați cronometrul de supraveghere #pragma config WDTPS = 0x1A // specificați valoarea postscale a temporizatorului
RELAXA!!….. RELAX !!…. RELAX !!…...
Știu că a intrat prea mult în capul nostru și setarea acestor biți de configurare ar putea părea puțin dificilă pentru un începător !! Dar, în mod sfidător, nu este cu MPLAB-X.
Setarea biților de configurare în MPLAB-X:
Microcipul a făcut acest proces obositor mult mai ușor utilizând reprezentări grafice ale diferitelor tipuri de biți de configurare. Deci, acum, pentru a le seta, trebuie pur și simplu să urmăm pașii de mai jos.
Pasul 1: Faceți clic pe Window -> PIC Memory View -> Configuration Bits. Așa cum se arată mai jos.
Pasul 2: Aceasta ar trebui să deschidă fereastra Bits de configurare în partea de jos a IDE-ului nostru, așa cum se arată mai jos. Acesta este locul în care putem seta fiecare dintre biții de configurare în funcție de nevoile noastre. Voi explica fiecare dintre biți și scopul său pe măsură ce progresăm prin pași.
Pasul 3: primul bit este bitul de selecție al oscilatorului.
PIC16F87XA poate fi operat în patru moduri diferite de oscilator. Aceste patru moduri pot fi selectate prin programarea a doi biți de configurare (FOSC1 și FOSC0):
- LP Crystal Low Power
- XT Crystal / Rezonator
- Cristal / rezonator HS de mare viteză
- Rezistor RC / condensator
Pentru proiectele noastre, utilizăm un Osc de 20 MHz, prin urmare, trebuie să selectăm HS din caseta derulantă.
Pasul 4: Următorul bit va fi cronometrul nostru de pază Enable Bit.
Cronometrul Watchdog este un oscilator RC cu funcționare gratuită, on-chip, care nu necesită componente externe. Acest oscilator RC este separat de oscilatorul RC al pinului OSC1 / CLKI. Aceasta înseamnă că WDT va rula chiar dacă ceasul de pe pinii OSC1 / CLKI și OSC2 / CLKO al dispozitivului a fost oprit. În timpul funcționării normale, un timp de expirare WDT generează o resetare a dispozitivului (Resetarea temporizatorului Watchdog). Bitul TO din registrul de stare va fi șters după expirarea temporizatorului Watchdog. Dacă temporizatorul nu este șters în codarea noastră software, atunci întregul MCU se va reseta la fiecare revărsare a temporizatorului WDT. WDT poate fi dezactivat permanent prin ștergerea bitului de configurare.
Nu folosim WDT în programul nostru, așa că permiteți-ne să îl ștergem, selectând OFF din caseta derulantă.
Pasul 5: Următorul bit va fi Bit-timer de pornire.
Temporizatorul de pornire asigură un time-out nominal fix de 72 ms la pornire numai din POR. Temporizatorul de pornire funcționează pe un oscilator RC intern. Cipul este păstrat în Resetare atâta timp cât PWRT este activ. Întârzierea PWRT permite VDD să crească la un nivel acceptabil. Un bit de configurare este furnizat pentru a activa sau dezactiva PWRT.
Nu vom avea nevoie de astfel de întârzieri în programul nostru, așa că haideți să oprim și asta.
Pasul 6: Următorul bit va fi Programarea de joasă tensiune.
Bitul LVP al cuvântului de configurare permite programarea ICSP de joasă tensiune. Acest mod permite microcontrolerului să fie programat prin ICSP utilizând o sursă VDD în domeniul tensiunii de funcționare. Acest lucru înseamnă doar că VPP nu trebuie adus la VIHH, ci poate fi lăsat în schimb la tensiunea normală de funcționare. În acest mod, pinul RB3 / PGM este dedicat funcției de programare și încetează să mai fie un pin I / O de uz general. În timpul programării, VDD este aplicat pinului MCLR. Pentru a intra în modul de programare, VDD trebuie aplicat la RB3 / PGM cu condiția ca bitul LVP să fie setat.
Să dezactivăm LVP, astfel încât să putem folosi RB3 ca pin I / O. Pentru a face acest lucru, pur și simplu rândul său, acest lucru OFF folosind caseta drop - down.
Pasul 7: Următorii biți vor fi biții EEPROM și de protecție a memoriei de program. Dacă acest bit este pornit, odată ce MCU este programat, nimeni nu va prelua programul nostru de pe hardware. Dar deocamdată să-i lăsăm pe toți trei opriți.
Odată ce setările sunt efectuate conform instrucțiunilor, caseta de dialog ar trebui să arate cam așa.
Pasul 8: Acum faceți clic pe Generați codul sursă la ieșire, codul nostru va fi generat acum, doar copiați-l împreună cu fișierul antet și lipiți-l în fișierul C Blink.c, așa cum se arată mai jos.
Acesta este lucrul nostru de configurare. Putem avea această configurație pentru toate proiectele noastre. Dar dacă sunteți interesat, vă puteți deranja cu ei mai târziu.
Programarea PIC pentru a clipi un LED:
În acest program vom folosi microcontrolerul PIC pentru a clipi un LED conectat la un pin I / O. Să aruncăm o privire asupra diferitelor pini I / O disponibile pe PIC16F877A.
După cum se arată mai sus, PIC16F877 are 5 porturi de intrare / ieșire de bază. Acestea sunt de obicei notate cu PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) și PORT E (RE). Aceste porturi sunt utilizate pentru interfața de intrare / ieșire. În acest controler, „PORT A” are o lățime de numai 6 biți (RA-0 până la RA-5), „PORT B”, „PORT C”, „PORT D” au o lățime de doar 8 biți (RB-0 până la RB-7, RC-0 la RC-7, RD-0 la RD-7), „PORT E” are o lățime de doar 3 biți (RE-0 la RE-2).
Toate aceste porturi sunt bidirecționale. Direcția portului este controlată prin utilizarea registrelor TRIS (X) (TRIS A folosit pentru a seta direcția PORT-A, TRIS B utilizat pentru a seta direcția pentru PORT-B etc.). Setarea unui bit TRIS (X) '1' va seta bitul PORT (X) corespunzător ca intrare. Ștergerea unui bit TRIS (X) '0' va seta bitul PORT (X) corespunzător ca ieșire.
Pentru proiectul nostru trebuie să facem pinul RB3 al PORT B ca ieșire, astfel încât LED-ul nostru să poată fi conectat la acesta. Iată codul pentru LED-ul intermitent cu microcontroler PIC:
#include
Mai întâi am specificat frecvența Crystal externă folosind #define _XTAL_FREQ 20000000. Apoi, în funcția main () nulă , am instruit MCU-ul nostru că vom folosi RB3 ca pin de ieșire (TRISB = 0X00;) . Apoi, în sfârșit, este utilizată o buclă infinită de timp , astfel încât LED-ul să clipească pentru totdeauna. Pentru a clipi un LED, trebuie să îl pornim și să îl oprim cu o întârziere vizibilă.
După finalizarea codificării, construiți proiectul utilizând comanda Run -> Build Main Project. Aceasta ar trebui să vă compileze programul. Dacă totul este în regulă (așa cum ar trebui să fie), o Consolă de ieșire din partea de jos a ecranului va afișa un mesaj BUILD SUCCESSFUL, așa cum se arată în imaginea de mai jos.
Diagrama circuitului și simularea Proteusului:
Odată ce am construit un proiect și dacă Build are succes, un fișier HEX ar fi fost generat în fundalul IDE-ului nostru. Acest fișier HEX poate fi găsit în directorul de mai jos
Poate varia pentru dvs. dacă ați salvat în altă locație.
Acum, să deschidem rapid Proteus pe care l-am instalat mai devreme și să creăm scheme pentru acest proiect. Nu vom explica cum să facem acest lucru, în afara scopului acestui proiect. Dar să nu vă faceți griji, este explicat în videoclipul de mai jos. Odată ce urmați instrucțiunile și construiți schemele, ar trebui să arate cam așa
Pentru a simula ieșirea, faceți clic pe butonul de redare din colțul din stânga jos al ecranului după încărcarea fișierului Hex. Ar trebui să clipească LED-ul conectat la RB3 al MCU. Dacă aveți vreo problemă, vă rugăm să urmăriți videoclipul, dacă tot nu este rezolvat, folosiți secțiunea de comentarii pentru ajutor.
Acum am realizat primul nostru proiect cu microcontroler PIC și am verificat ieșirea folosind software-ul de simulare. Mergeți și modificați programul și observați rezultatele. Până când ne vom întâlni cu următorul nostru proiect.
Ohh stai !!
În următorul nostru proiect vom învăța cum să funcționăm pe un hardware real. Pentru aceasta, vom avea nevoie de următoarele instrumente pentru a le menține gata. Până atunci ÎNVĂȚARE FERICITĂ !!
- PicKit 3
- PIC16F877A IC
- Suport IC cu 40 de pini
- Tablou de perfecționare
- 20Mhz Crystal OSC
- Femei și bărbați Bergstick pini
- 33pf condensator - 2Nos
- Rezistor de 680 ohmi
- LED de orice culoare
- Set de lipit.