- Vereiste materialen:
- Flash-geheugen:
- ICSP (In Circuit Serial Programming):
- Circuit en hardware:
- De code branden met MPLAB IPE:
In onze vorige twee tutorials hebben we besproken hoe u aan de slag kunt met PIC met behulp van MPLABX en XC8-compiler, we hebben ook ons eerste LED-knipperende programma met PIC gemaakt en geverifieerd door middel van simulatie. Nu is het tijd om de hardware in handen te krijgen. In deze tutorial bouwen we een klein circuit op een Perf Board om de LED te laten knipperen met PIC. We zullen het programma naar onze PIC-microcontroller dumpen en controleren of de LED knippert. Om de PIC MCU te programmeren, zullen we MPLAB IPE gebruiken.
Vereiste materialen:
Zoals besproken in onze vorige tutorial hebben we de volgende materialen nodig:
- PicKit 3
- PIC16F877A IC
- 40 - Pin IC houder
- Perf bord
- 20 MHz Crystal OSC
- Vrouwelijke en mannelijke Bergstick-pinnen
- 33pf condensator - 2Nos, 100uf en 10uf cap.
- 680 ohm, 10K en 560ohm weerstand
- LED in elke kleur
- 1 Soldeerkit
- IC 7805
- 12V adapter
Wat gebeurt er als we een microcontroller "branden" !!
Het is een gebruikelijke praktijk om de code naar een MCU te uploaden en deze binnen de MCU te laten werken.
Laten we eens kijken naar ons programma om dit te begrijpen
Zoals we kunnen zien, is deze code geschreven in C-taal en heeft het geen zin voor onze MCU. Dit is waar het deel van onze compiler binnenkomt; een compiler is er een die deze code omzet in een door een machine leesbare vorm. Dit machinaal leesbare formulier wordt de HEX-code genoemd, elk project dat we maken, heeft een HEX-code die in de volgende map staat
** Uw locatie ** \ Blink \ Blink.X \ dist \ default \ production \ Blink.X.production.hex
Als u zo geïnteresseerd bent om te weten hoe deze HEX-code eruitziet, opent u deze met het kladblok. Voor ons Blink-programma ziet de HEX-code er als volgt uit:
: 060000000A128A11FC2F18: 100FAA008316031386018312031386018312031324: 100FBA0086150D30F200AF30F100C130F000F00BB1: 100FCA00E42FF10BE42FF20BE42F0000831203133A: 100FDA0086110D30F200AF30F100C130F000F00B95: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107: 060FFA000A128A11D52F36: 02400E007A3FF7: 00000001FF
Er zijn manieren om dit te lezen en te begrijpen en weer terug te draaien naar de assembleertaal, maar het valt volledig buiten het bestek van deze tutorial. Dus, om het simpelweg in een notendop te vatten; de HEX is het uiteindelijke softwareresultaat van onze codering en dit is wat door MPLAB IPE naar buiten wordt gestuurd om de MCU te branden.
Flash-geheugen:
De HEX-code wordt in de MCU opgeslagen op een plaats die Flash-geheugen wordt genoemd. Het flash-geheugen is de plaats waar ons programma in de MCU wordt opgeslagen en van daaruit wordt uitgevoerd. Zodra we het programma in onze MPLABX hebben gecompileerd, zouden we de volgende informatie hebben gekregen over het type geheugen op de Output-console
Omdat we zojuist een klein knipperend LED-programma hebben samengesteld, laat het geheugenoverzicht zien dat we net 0,5% van de beschikbare programmaruimte en 1,4% van de dataruimte hebben verbruikt.
Het geheugen van de PIC16F877-microcontroller is in principe onderverdeeld in 3 typen:
Programmageheugen: Dit geheugen bevat het programma (dat we hadden geschreven), nadat we het hebben gebrand. Ter herinnering, Program Counter voert de opdrachten die in het programmageheugen zijn opgeslagen, de een na de ander uit. Omdat we een heel klein programma hebben geschreven, hebben we slechts 0,5% van de totale ruimte verbruikt. Dit is een niet-vluchtig geheugen, wat betekent dat de opgeslagen gegevens niet verloren gaan na het uitschakelen.
Datageheugen: dit is een RAM-geheugentype, dat speciale registers bevat zoals SFR (Special Function Register) met Watchdog-timer, Brown out Reset etc. en GPR (General Purpose Register) met TRIS en PORT etc. De variabelen die worden opgeslagen in het datageheugen tijdens het programma worden verwijderd nadat we de MCU hebben uitgeschakeld. Elke variabele die in het programma wordt gedeclareerd, bevindt zich in het datageheugen. Dit is ook een vluchtig geheugen.
Data EEPROM (Electrically Erasable Programmable Read-Only Memory): een geheugen waarin de variabelen kunnen worden opgeslagen als resultaat van het branden van het geschreven programma. Als we bijvoorbeeld een variabele "a" toewijzen om een waarde van 5 erin op te slaan en deze op te slaan in de EEPROM, zullen deze gegevens niet verloren gaan, zelfs niet als de stroom wordt uitgeschakeld. Dit is een niet-vluchtig geheugen.
Programmageheugen en EEPROM zijn niet-vluchtige geheugens en worden Flash-geheugen of EEPROM genoemd.
ICSP (In Circuit Serial Programming):
We zullen onze PIC16F877A programmeren met behulp van de ICSP-optie die beschikbaar is in onze MCU.
Nu, wat is ICSP?
ICSP is een eenvoudige manier die ons helpt om een MCU te programmeren, zelfs nadat deze in ons projectbord is geplaatst. Het is niet nodig om een apart programmeerbord te hebben om de MCU te programmeren, alles wat we nodig hebben zijn 6 verbindingen van de PicKit3-programmeur naar ons bord, als volgt:
1 |
VPP (of MCLRn) |
Om naar de programmeermodus te gaan. |
2 |
Vcc |
Power Pin 11 of 32 |
3 |
GND |
Grond- PIN 12 of 31 |
4 |
PGD - Gegevens |
RB7. PIN40 |
5 |
PGC - Klok |
RB6. SPELD 39 |
6 |
PGM - LVP inschakelen |
RB3 / RB4. Niet verplicht |
ICSP is geschikt voor alle PIC-pakketten; alles wat we nodig hebben is om deze vijf pinnen (6e pin PGM is optioneel) uit de MCU naar Pickit3 te trekken, zoals weergegeven in de onderstaande afbeelding.
Circuit en hardware:
Nu hebben we onze HEX-code klaar en weten we ook hoe we onze PicKit 3 met onze PIC MCU moeten verbinden met ICSP. Dus laten we doorgaan en het circuit solderen met behulp van het onderstaande schema:
In het bovenstaande circuit heb ik een 7805 gebruikt om de output 5V naar mijn PIC MCU te regelen. Deze regelaar wordt gevoed door een 12V wall mart adapter. De RODE led wordt gebruikt om aan te geven of de PIC is ingeschakeld. De connector J1 wordt gebruikt voor ICSP-programmering. De pinnen zijn verbonden zoals besproken in de bovenstaande tabel.
De eerste pin MCLR moet standaard hoog worden gehouden met behulp van een 10k. Dit voorkomt dat de MCU opnieuw wordt ingesteld. Om de MCU te resetten, moet de pin MCLR op aarde worden gehouden, wat kan worden gedaan met behulp van schakelaar SW1.
De LED is verbonden met pin RB3 via een weerstand met een waarde van 560 ohm (zie LED-weerstandscalculator). Als alles correct is nadat ons programma is geüpload, moet deze LED knipperen op basis van het programma. Het hele circuit is gebouwd op Perfboard door alle componenten erop te solderen, zoals je kunt zien in de afbeelding bovenaan.
De code branden met MPLAB IPE:
Volg onderstaande stappen om de code te branden:
- Start de MPLAB IPE.
- Verbind het ene uiteinde van uw PicKit 3 met uw pc en het andere uiteinde met uw ICSP-pinnen op de printplaat.
- Maak verbinding met uw PIC-apparaat door op de verbindingsknop te klikken.
- Blader naar het Blink HEX-bestand en klik op Program.
Als alles verloopt zoals gepland, zou u het succesbericht op het scherm moeten krijgen. Bekijk de onderstaande code en video voor een volledige demonstratie en gebruik het commentaargedeelte als je twijfelt.
Dank je!!!
Laten we elkaar ontmoeten in de volgende tutorial, waar we zullen spelen met meer LED's en een schakelaar.