- Gör dig redo för programmering:
- Skapa ett nytt projekt med MPLAB-X:
- Lär känna konfigurationsregisterna:
- Ställa in konfigurationsbitar i MPLAB-X:
- Programmering av PIC för att blinka en LED:
- Kretsschema och Proteus-simulering:
Detta är den andra självstudien i vår PIC-handledningsserie. I vår tidigare handledning Komma igång med PIC Microcontroller: Introduktion till PIC och MPLABX, vi lärde oss de grundläggande sakerna om vår PIC-mikrokontroller, vi installerade också den nödvändiga programvaran och köpte en ny PicKit 3-programmerare som vi snart kommer att använda. Nu är vi redo att komma igång med vårt första LED-blinkande program med PIC16F877A. Vi kommer också att lära dig mer om konfigurationsregister i denna handledning.
Denna handledning förväntar sig att du har installerat den nödvändiga programvaran på din dator och att du känner till några anständiga grunder om PIC MCU. Om inte, hoppa tillbaka till föregående handledning och kom igång därifrån.
Gör dig redo för programmering:
Eftersom vi har bestämt oss för att använda PIC16F877A, låt oss komma igång med deras datablad med XC8-kompilatorn. Jag rekommenderar alla att ladda ner PIC16F877A-databladet och XC8-kompilatorhandboken, eftersom vi ofta kommer att hänvisa till dessa när vi går igenom vår handledning. Det är alltid en bra praxis att läsa hela databladet för vilken MCU som helst innan vi faktiskt börjar programmera med det.
Nu, innan vi öppnar vår MPLAB-X och börjar programmera, finns det få grundläggande saker som man måste vara medveten om. Hur som helst, eftersom detta är vårt första program, vill jag inte förfölja er människor med mycket teori, men vi kommer att sluta här och där när vi programmerar och jag kommer att förklara saker som sådana. Om du inte har tillräckligt med tid att läsa igenom alla dessa är det bara att skymta och hoppa in i videon längst ner på sidan.
Skapa ett nytt projekt med MPLAB-X:
Steg 1: Starta MPLAB-X IDE som vi installerade i föregående klass, när den väl laddats ska den se ut så här.
Steg 2: Klicka på Filer -> Nytt projekt, eller använd snabbtangenten Ctrl + Skift + N. Du får följande POP-UP, där du måste välja fristående projekt och klicka på Nästa.
Steg 3: Nu måste vi välja vår enhet för projektet. Så skriv som PIC16F877A över rullgardinsmenyn Välj enhet . När det är gjort ska det vara så här och klicka sedan på Nästa.
Steg 4: Nästa sida låter oss välja verktyget för vårt projekt. Detta skulle vara PicKit 3 för vårt projekt. Välj PicKit 3 och klicka på nästa
Steg 5: Nästa sida kommer att fråga kompilatorn, välj XC8-kompilatorn och klicka på nästa.
Steg 6: På den här sidan måste vi namnge vårt projekt och välja plats där projektet ska sparas. Jag har nämnt detta projekt som Blink och sparat det på skrivbordet. Du kan namnge och spara det på ditt föredragna sätt. Vårt projekt kommer att sparas som en mapp med Extension .X, som kan startas direkt av MAPLB-X. Klicka på Slutför när du är klar.
Steg 7: Det är det !!! Vårt projekt har skapats. Fönstret längst till vänster visar projektnamnet (här blinkar), klicka på det så att vi kan se alla kataloger i det.
För att kunna börja programmera måste vi lägga till en C-huvudfil inuti vår källfilskatalog. För att göra detta högerklickar du helt enkelt på källfilen och väljer Ny -> C Huvudfil, som visas i bilden nedan.
Steg 8: Följande dialogruta visas där namnet på C-filen måste nämnas. Jag har nämnt i Blink igen, men valet lämnas åt dig. Namnge det i kolumnen Filnamn och klicka på Slutför.
Steg 9: När C-huvudfilen har skapats öppnar IDE den för oss med några standardkoder i den, som visas nedan.
Steg 10: Det är det nu vi kan börja programmera vår kod i C-huvudfilen. Standardkoden används inte i våra självstudier. Så låt oss ta bort dem helt.
Lär känna konfigurationsregisterna:
Innan du börjar programmera någon Microcontroller måste vi veta om dess konfigurationsregister.
Så vad är dessa konfigurationsregister, hur och varför ska vi ställa in dem?
PIC-enheterna har flera platser som innehåller konfigurationsbitar eller säkringar. Dessa bitar specificerar grundläggande enhetsfunktion, såsom oscillatorläge, vakthundtimer, programmeringsläge och kodskydd. Dessa bitar måste ställas in korrekt för att köra koden, annars har vi en enhet som inte körs . Så det är mycket viktigt att veta om dessa konfigurationsregister innan vi börjar med vårt Blink-program.
För att kunna använda dessa konfigurationsregister måste vi läsa igenom databladet och förstå vad de olika typerna av konfigurationsbitar finns och deras funktioner. Dessa bitar kan ställas in eller återställas baserat på våra programmeringskrav med hjälp av en konfigurationspragma.
Pragma har följande former.
#pragma config setting = state-value #pragma config register = value
där inställningen är en konfigurationsinställningsbeskrivare, t.ex. WDT, och tillstånd är en textbeskrivning av det önskade tillståndet, t.ex. OFF. Tänk på följande exempel.
#pragma config WDT = ON // slå på vakthundens timer
KOPPLA AV!!….. AVSLAPPA !!…. AVSLAPPA !!…...
Jag vet att det har gått för mycket i våra huvuden och att ställa in dessa konfigurationsbitar kan tyckas vara lite svårt för en nybörjare !! Men det är trotsigt inte med vår MPLAB-X.
Ställa in konfigurationsbitar i MPLAB-X:
Microchip har gjort den här tröttsamma processen mycket enklare genom att använda grafiska representationer av de olika typerna av konfigurationsbitar. Så nu för att ställa in dem måste vi helt enkelt följa stegen nedan.
Steg 1: Klicka på Window -> PIC Memory View -> Configuration Bits. Enligt nedanstående.
Steg 2: Detta ska öppna fönstret Configuration Bits längst ner i vår IDE enligt nedan. Det är här vi kan ställa in var och en av konfigurationsbitarna efter våra behov. Jag kommer att förklara var och en av bitarna och dess syfte när vi går igenom stegen.
Steg 3: Den första biten är oscillatorvalsbiten.
PIC16F87XA kan manövreras i fyra olika oscillatorlägen. Dessa fyra lägen kan väljas genom att programmera två konfigurationsbitar (FOSC1 och FOSC0):
- LP Low-Power Crystal
- XT Crystal / Resonator
- HS höghastighets kristall / resonator
- RC-motstånd / kondensator
För våra projekt använder vi en 20Mhz Osc, därför måste vi välja HS i listrutan.
Steg 4: Nästa bit blir vår vakthundstimer Aktiver bit.
Watchdog Timer är en frikörande RC-oscillator på chip som inte kräver några externa komponenter. Denna RC-oscillator är separat från RC-oscillatorn på OSC1 / CLKI-stiftet. Det betyder att WDT körs även om klockan på OSC1 / CLKI och OSC2 / CLKO-stiften på enheten har stoppats. Under normal drift genererar en WDT-time-out en enhetsåterställning (Watchdog Timer Reset). TO-biten i statusregistret rensas vid en Time-out för Watchdog Timer. Om timern inte rensas i vår programvarukodning återställs hela MCU: n vid varje WDT-timeröverflöde. WDT kan inaktiveras permanent genom att rensa konfigurationsbiten.
Vi använder inte WDT i vårt program, så låt oss rensa det genom att välja AV i listrutan.
Steg 5: Nästa bit är starttidsbit.
Power-up Timer ger en fast 72 ms nominell timeout vid uppstart endast från POR. Powerup Timer fungerar på en intern RC-oscillator. Chipet hålls i Återställ så länge PWRT är aktivt. PWRT: s tidsfördröjning gör att VDD kan stiga till en acceptabel nivå. En konfigurationsbit tillhandahålls för att aktivera eller inaktivera PWRT.
Vi kommer inte att behöva sådana förseningar i vårt program, så låt oss stänga av det också.
Steg 6: Nästa bit kommer att vara lågspänningsprogrammering.
LVP-biten i konfigurationsordet möjliggör ICSP-programmering med låg spänning. Detta läge gör att mikrokontrollern kan programmeras via ICSP med hjälp av en VDD-källa inom driftsspänningsområdet. Detta innebär bara att VPP inte behöver föras till VIHH utan kan lämnas vid normal driftspänning. I detta läge är RB3 / PGM-stiftet dedikerat till programmeringsfunktionen och upphör att vara ett allmänt I / O-stift. Under programmeringen appliceras VDD på MCLR-stiftet. För att gå in i programmeringsläget måste VDD appliceras på RB3 / PGM förutsatt att LVP-biten är inställd.
Låt oss stänga av LVP så att vi kan använda RB3 som en I / O-stift. För att göra detta, vrid helt enkelt denna OFF med hjälp av listrutan.
Steg 7: Nästa bitar är EEPROM- och programminnesskyddbitar. Om denna bit är påslagen kommer ingen att hämta vårt program från hårdvaran när MCU har programmerats. Men låt oss för närvarande lämna alla tre avstängda.
När inställningarna är gjorda enligt instruktionerna bör dialogrutan se ut så här.
Steg 8: Klicka nu på Generate Source Code to Output, vår kod genereras nu bara kopiera den tillsammans med rubrikfilen och klistra in i vår Blink.c C-fil, som visas nedan.
Det är det vårt konfigurationsarbete är gjort. Vi kan ha den här konfigurationen för alla våra projekt. Men om du är intresserad kan du röra med dem senare.
Programmering av PIC för att blinka en LED:
I det här programmet ska vi använda vår PIC-mikrokontroller för att blinka en lysdiod ansluten till en I / O-stift. Låt oss ta en titt på de olika I / O-stiften som finns tillgängliga på vår PIC16F877A.
Som visas ovan har PIC16F877 5 grundläggande in / ut-portar. De betecknas vanligtvis med PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) och PORT E (RE). Dessa portar används för in- / utgångsgränssnitt. I denna styrenhet är "PORT A" bara 6 bitar bred (RA-0 till RA-5), "PORT B", "PORT C", "PORT D" är bara 8 bitar breda (RB-0 till RB-7, RC-0 till RC-7, RD-0 till RD-7), ”PORT E” har bara 3 bitars bredd (RE-0 till RE-2).
Alla dessa portar är dubbelriktade. Portens riktning styrs med hjälp av TRIS (X) -register (TRIS A används för att ställa in riktningen för PORT-A, TRIS B används för att ställa in riktningen för PORT-B, etc.). Att ställa in en TRIS (X) bit '1' ställer in motsvarande PORT (X) bit som ingång. Att rensa en TRIS (X) bit '0' ställer in motsvarande PORT (X) bit som utdata.
För vårt projekt måste vi göra stift RB3 på PORT B som utgång så att vår LED kan anslutas till den. Här är kod för LED-blinkning med PIC-mikrokontroller:
#omfatta
Först har vi specificerat den externa Crystal-frekvensen med #define _XTAL_FREQ 20000000. Sedan i void main () -funktionen instruerade vi vår MCU att vi ska använda RB3 som en utgång (TRISB = 0X00;) stift. Sedan slutligen en oändlig medan loop används så att lysdioden blinkar går för evigt. För att blinka en LED måste vi helt enkelt sätta på och stänga av den med en märkbar fördröjning.
När kodningen är klar bygger du projektet med kommandot Kör -> Bygg huvudprojekt. Detta bör sammanställa ditt program. Om allt är bra (som det borde vara) kommer en utgångskonsol längst ner på skärmen att visa ett BUILD SUCCESSFUL-meddelande, som visas på bilden nedan.
Kretsschema och Proteus-simulering:
När vi väl har byggt ett projekt och om Build lyckas skulle en HEX-fil ha skapats i bakgrunden av vår IDE. Denna HEX-fil finns i katalogen nedan
Det kan variera för dig om du har sparat någon annanstans.
Låt oss nu snabbt öppna Proteus som vi har installerat tidigare och skapa scheman för detta projekt. Vi kommer inte att förklara hur man gör detta eftersom det ligger utanför projektets omfattning. Men oroa dig inte, förklaras det i videon nedan. När du har följt instruktionerna och byggt schemat bör det se ut så här
För att simulera utdata, klicka på uppspelningsknappen längst ned till vänster på skärmen efter att Hex-filen har laddats. Den ska blinka lysdioden ansluten till RB3 på MCU. Om du har några problem i det, vänligen titta på videon, om det fortfarande inte löses, använd kommentarsektionen för hjälp.
Nu har vi gjort vårt första projekt med PIC-mikrokontroller och verifierat utdata med simuleringsprogramvara. Gå och tweak runt med programmet och observera resultaten. Till vi träffas i vårt nästa projekt.
Ohh vänta !!
I vårt nästa projekt kommer vi att lära oss att få detta att fungera på en verklig hårdvara. För det behöver vi följande verktyg för att hålla dem redo. Fram till dess LYCKLIGT LÄRANDE !!
- PicKit 3
- PIC16F877A IC
- 40-stifts IC-hållare
- Perf styrelse
- 20Mhz Crystal OSC
- Kvinnliga och manliga stift
- 33pf kondensator - 2Nr
- Motstånd på 680 ohm
- LED i vilken färg som helst
- Lödkit.