- Material som krävs:
- Flashminne:
- ICSP (In Circuit Serial Programming):
- Krets och hårdvara:
- Bränna koden med MPLAB IPE:
I våra tidigare två handledning diskuterade vi hur man kommer igång med PIC med MPLABX- och XC8-kompilatorn, vi har också gjort vårt första LED-blinkande program med PIC och verifierat det genom simulering. Nu är det dags för oss att ta hand om hårdvaran. I denna handledning kommer vi att bygga en liten krets på ett Perf Board för att blinka LED med PIC. Vi kommer att dumpa programmet till vår PIC-mikrokontroller och verifiera att LED blinkar. För att programmera PIC MCU kommer vi att använda MPLAB IPE.
Material som krävs:
Som diskuterats i vår tidigare handledning behöver vi följande material:
- PicKit 3
- PIC16F877A IC
- 40 - IC-hållare
- Perf styrelse
- 20 MHz Crystal OSC
- Kvinnliga och manliga stift
- 33pf kondensator - 2Nos, 100uf och 10uf cap.
- 680 ohm, 10K och 560ohm motstånd
- LED i vilken färg som helst
- 1Lödningssats
- IC 7805
- 12V adapter
Vad händer när vi "bränner" en mikrokontroller !!
Det är vanligt att ladda upp koden till en MCU och få den att fungera inuti MCU.
För att förstå detta kan vi ta en titt på vårt program
Som vi kan se är den här koden skriven på C-språk och det kommer inte att ge någon mening för vår MCU. Det är här delen av vår kompilator kommer in; en kompilator är en som konverterar den här koden till en maskinläsbar form. Denna maskinläsbara form kallas HEX-koden, varje projekt som vi skapar kommer att ha en HEX-kod som kommer att finnas i följande katalog
** Din plats ** \ Blink \ Blink.X \ dist \ standard \ produktion \ Blink.X.produktion.hex
Om du är så intresserad av att veta hur den här HEX-koden ser ut, öppna den bara med anteckningsblocket. För vårt Blink-program kommer HEX-koden att se ut som följande:
: 060000000A128A11FC2F18: 100FAA008316031386018312031386018312031324: 100FBA0086150D30F200AF30F100C130F000F00BB1: 100FCA00E42FF10BE42FF20BE42F0000831203133A: 100FDA0086110D30F200AF30F100C130F000F00B95: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107: 060FFA000A128A11D52F36: 02400E007A3FF7: 00000001FF
Det finns sätt att läsa detta och hur man kan förstå och vända tillbaka det till monteringsspråk, men det är helt utanför ramen för denna handledning. Så för att helt enkelt sätta det i ett nötskal; HEX är det slutliga programvaruresultatet av vår kodning och det här är vad som kommer att skickas ut av MPLAB IPE för att bränna MCU.
Flashminne:
Den HEX kod lagras i MCU på en plats som kallas Flash-minne. Flashminnet är den plats där vårt program kommer att lagras i MCU och köras därifrån. När vi väl har sammanställt programmet i vår MPLABX, skulle vi ha fått följande information om typen av minne på utgångskonsolen
Eftersom vi just har sammanställt ett litet LED-blinkande program visar minnesöversikten att vi just har förbrukat 0,5% av tillgängligt programutrymme och 1,4% av datautrymmet.
Minnet till PIC16F877-mikrokontrollern är i grunden uppdelad i tre typer:
Programminne: Detta minne innehåller programmet (som vi hade skrivit) efter att vi har bränt det. Som en påminnelse utför Program Counter kommandon som är lagrade i programminnet, en efter en. Eftersom vi har skrivit ett mycket litet program har vi bara förbrukat 0,5% av det totala utrymmet. Detta är ett icke-flyktigt minne, vilket betyder att de lagrade data inte går förlorade efter avstängningen.
Dataminne: Detta är RAM-minnetyp, som innehåller specialregister som SFR (Special Function Register) som inkluderar Watchdog timer, Brown out Reset etc. och GPR (General Purpose Register) som inkluderar TRIS och PORT etc. De variabler som lagras i dataminnet under programmet raderas efter att vi stänger av MCU. Alla variabler som deklareras i programmet kommer att finnas i dataminnet. Detta är också ett flyktigt minne.
Data EEPROM (elektriskt raderbart programmerbart skrivskyddat minne): Ett minne som gör det möjligt att lagra variablerna som ett resultat av att det skrivna programmet bränns. Till exempel om vi tilldelar en variabel "a" för att spara ett värde på 5 i den och lagrar den i EEPROM kommer dessa data inte att gå förlorade även om strömmen är avstängd. Detta är ett icke-flyktigt minne.
Programminne och EEPROM är icke-flyktiga minnen och kallas Flash-minne eller EEPROM.
ICSP (In Circuit Serial Programming):
Vi kommer att programmera vår PIC16F877A med hjälp av ICSP-alternativet som är tillgängligt i vår MCU.
Nu, vad är ICSP?
ICSP är ett enkelt sätt som hjälper oss att programmera en MCU även efter att den har placerats i vårt projektkort. Det finns inget behov av att ha ett separat programmeringskort för att programmera MCU, allt vi behöver är 6 anslutningar från PicKit3-programmeraren till vårt kort på följande sätt:
1 |
VPP (eller MCLRn) |
För att gå in i programmeringsläget. |
2 |
Vcc |
Ström Pin 11 eller 32 |
3 |
GND |
Jord- PIN 12 eller 31 |
4 |
PGD - Data |
RB7. PIN40 |
5 |
PGC - Klocka |
RB6. PIN-kod 39 |
6 |
PGM - LVP-aktiverad |
RB3 / RB4. Inte obligatoriskt |
ICSP är lämpligt för alla PIC-paket; allt vi behöver är att dra ut dessa fem stift (6: e stift PGM är valfritt) från MCU till Pickit3 som visas på bilden nedan.
Krets och hårdvara:
Nu har vi vår HEX-kod redo och vi vet också hur vi ansluter vår PicKit 3 till vår PIC MCU med hjälp av ICSP. Så låt oss fortsätta och löd kretsen med hjälp av nedanstående scheman:
I kretsen ovan har jag använt en 7805 för att reglera utgången 5V till min PIC MCU. Denna regulator kommer att drivas av en 12V-adapter för väggmontering. RÖD LED används för att indikera om PIC är strömförsörjning. Kontaktdonet J1 används för ICSP-programmering. Stiften är anslutna enligt diskussionen i ovanstående tabell.
Den första stift MCLR måste hållas hög med hjälp av en 10k som standard. Detta förhindrar att MCU återställs. För att återställa MCU måste stift MCLR hållas i mark vilket kan göras med hjälp av omkopplare SW1.
Lysdioden är ansluten till stiftet RB3 via ett motstånd med värdet 560 ohm (se LED-motståndsräknare). Om allt är ordentligt när vårt program har laddats upp ska denna lysdiod blinka baserat på programmet. Hela kretsen är byggd på Perfboard genom att lödda alla komponenter på den som du kan se på bilden högst upp.
Bränna koden med MPLAB IPE:
Följ stegen nedan för att bränna koden:
- Starta MPLAB IPE.
- Anslut ena änden av din PicKit 3 till din dator och den andra änden till dina ICSP-stift på perf-kortet.
- Anslut till din PIC-enhet genom att klicka på anslutningsknappen.
- Bläddra efter Blink HEX-filen och klicka på Program.
Om allt går som planerat bör du få framgångsmeddelandet på skärmen. Kontrollera koden och videon nedan för fullständig demonstration och använd kommentarsektionen om du är tveksam.
Tack!!!
Låt oss träffas i nästa handledning där vi kommer att spela med fler lysdioder och en switch.