- Gør dig klar til programmering:
- Oprettelse af et nyt projekt ved hjælp af MPLAB-X:
- Lær konfigurationsregistrene at kende:
- Indstilling af konfigurationsbits i MPLAB-X:
- Programmering af PIC til at blinke en LED:
- Circuit Diagram og Proteus Simulation:
Dette er den anden tutorial i vores PIC Tutorial Series. I vores tidligere vejledning Kom godt i gang med PIC Microcontroller: Introduktion til PIC og MPLABX, vi lærte de grundlæggende ting om vores PIC-microcontroller, vi installerede også den nødvendige software og købte en ny PicKit 3-programmør, som vi snart vil bruge. Nu er vi klar til at komme i gang med vores første LED-blinkende program ved hjælp af PIC16F877A. Vi lærer også om konfigurationsregistre i denne vejledning.
Denne tutorial forventer, at du har installeret den nødvendige software på din computer, og at du kender nogle anstændige grundlæggende oplysninger om PIC MCU. Hvis ikke, bedes du hoppe tilbage til den forrige tutorial og komme i gang derfra.
Gør dig klar til programmering:
Da vi har besluttet at bruge PIC16F877A, så lad os komme i gang med deres datablad med XC8-kompilatoren. Jeg anbefaler alle at downloade PIC16F877A-databladet og XC8-kompilatormanualen, da vi ofte henviser til disse, når vi går igennem vores tutorial. Det er altid en god praksis at læse det komplette datablad for enhver MCU, før vi rent faktisk begynder at programmere med det.
Nu, inden vi åbner vores MPLAB-X og begynder at programmere, er der få grundlæggende ting, som man skal være opmærksom på. Under alle omstændigheder, da dette er vores første program, vil jeg ikke forfølge jer mennesker med meget teori, men vi stopper her og der, mens vi programmerer, og jeg vil forklare jer ting som sådan. Hvis du ikke har tid nok til at læse igennem alle disse, skal du bare kigge ind og hoppe ind i videoen nederst på siden.
Oprettelse af et nyt projekt ved hjælp af MPLAB-X:
Trin 1: Start den MPLAB-X IDE, som vi installerede i den foregående klasse, når den først er indlæst, skal den se sådan ud.
Trin 2: Klik på Filer -> Nyt projekt, eller brug genvejstasten Ctrl + Skift + N. Du får følgende POP-UP, hvorfra du skal vælge Standalone Project og klikke på Next.
Trin 3: Nu skal vi vælge vores enhed til projektet. Så skriv som PIC16F877A i rullemenuen Vælg enhed . Når det er gjort, skal det være sådan og derefter klikke på Næste.
Trin 4: Den næste side giver os mulighed for at vælge værktøjet til vores projekt. Dette ville være PicKit 3 for vores projekt. Vælg PicKit 3, og klik på næste
Trin 5: Næste side beder om at vælge kompilatoren, vælg XC8 Compiler og klik på næste.
Trin 6: På denne side skal vi navngive vores projekt og vælge det sted, hvor projektet skal gemmes. Jeg har navngivet dette projekt som Blink og gemt det på mit skrivebord. Du kan navngive og gemme det på din foretrukne måde. Vores projekt gemmes som en mappe med Extension .X, som kan startes direkte af MAPLB-X. Klik på Udfør, når du er færdig.
Trin 7: Det er det !!! Vores projekt er oprettet. Vinduet til venstre mest viser projektnavnet (Here Blink), klik på det, så vi kan se alle mapper inde i det.
For at starte programmeringen skal vi tilføje en C Main-fil inde i vores Source-filmappe. For at gøre dette skal du blot højreklikke på kildefilen og vælge Ny -> C Hovedfil, som vist på billedet nedenfor.
Trin 8: Følgende dialogboks vises, hvor navnet på C-filen skal nævnes. Jeg har nævnt Blink igen, men valget overlades til dig. Navngiv det i kolonnen Filnavn, og klik på finish.
Trin 9: Når først C-hovedfilen er oprettet, åbner IDE den for os med nogle standardkoder i den, som vist nedenfor.
Trin 10: Det er nu, vi kan begynde at programmere vores kode i C-main-filen. Standardkoden bruges ikke i vores tutorials. Så lad os slette dem helt.
Lær konfigurationsregistrene at kende:
Inden du begynder at programmere en Microcontroller, skal vi vide om dens konfigurationsregistre.
Så hvad er disse konfigurationsregistre, hvordan og hvorfor skal vi indstille dem?
PIC-enhederne har flere placeringer, der indeholder konfigurationsbits eller sikringer. Disse bits specificerer grundlæggende enhedsfunktion, såsom oscillatortilstand, vagthundtimer, programmeringstilstand og kodebeskyttelse. Disse bits skal indstilles korrekt for at køre koden, ellers har vi en enhed, der ikke kører . Så det er meget vigtigt at vide om disse konfigurationsregistre, før vi begynder med vores Blink-program.
For at bruge disse konfigurationsregistre skal vi læse gennem databladet og forstå, hvad de forskellige typer konfigurationsbits er tilgængelige og deres funktioner. Disse bits kan indstilles eller nulstilles baseret på vores programmeringskrav ved hjælp af en konfigurationspragma.
Pragmaet har følgende former.
#pragma config setting = state-value #pragma config register = value
hvor indstilling er en konfigurationsindstillingsbeskrivelse, f.eks. WDT, og tilstand er en tekstbeskrivelse af den ønskede tilstand, fx OFF. Overvej følgende eksempler.
#pragma config WDT = ON // slå watchdog timer til #pragma config WDTPS = 0x1A // specificer timers postskalaværdi
SLAP AF!!….. SLAP AF !!…. SLAP AF !!…...
Jeg ved, at det er gået for meget ind i vores hoveder, og det kan synes at være lidt svært for en nybegynder at indstille disse konfigurationsbits !! Men det er trodsigt ikke med vores MPLAB-X.
Indstilling af konfigurationsbits i MPLAB-X:
Microchip har gjort denne trættende proces meget lettere ved at bruge grafiske repræsentationer af de forskellige typer konfigurationsbits. Så nu for at indstille dem skal vi blot følge nedenstående trin.
Trin 1: Klik på Window -> PIC Memory View -> Configuration Bits. Som vist nedenfor.
Trin 2: Dette skal åbne vinduet Configuration Bits i bunden af vores IDE som vist nedenfor. Dette er stedet, hvor vi kan indstille hver af konfigurationsbitene i henhold til vores behov. Jeg vil forklare hver bit og dets formål, når vi går gennem trinene.
Trin 3: Den første bit er oscillatorudvælgelsesbiten.
PIC16F87XA kan betjenes i fire forskellige oscillatortilstande. Disse fire tilstande kan vælges ved at programmere to konfigurationsbits (FOSC1 og FOSC0):
- LP laveffektiv krystal
- XT Crystal / Resonator
- HS højhastigheds krystal / resonator
- RC modstand / kondensator
Til vores projekter bruger vi en 20 MHz Osc, derfor skal vi vælge HS fra rullemenuen.
Trin 4: Den næste bit er vores vagthundtimer Aktiver bit.
Watchdog Timer er en frit kørende RC-oscillator, der ikke kører, og som ikke kræver nogen eksterne komponenter. Denne RC-oscillator er adskilt fra RC-oscillatoren på OSC1 / CLKI-stiften. Det betyder, at WDT kører, selvom uret på OSC1 / CLKI og OSC2 / CLKO-benene på enheden er stoppet. Under normal drift genererer en WDT-timeout en enhedsnulstilling (nulstilling af Watchdog Timer). TO-biten i statusregistret ryddes efter en Watchdog Timer-timeout. Hvis timeren ikke ryddes i vores softwarekodning, nulstilles hele MCU'en ved hvert WDT-timeroverløb. WDT kan deaktiveres permanent ved at rydde konfigurationsbit.
Vi bruger ikke WDT i vores program, så lad os rydde det ved at vælge FRA i rullemenuen.
Trin 5: Den næste bit er opstart-timer-bit.
Power-up Timer giver en fast 72 ms nominel time-out ved opstart kun fra POR. Powerup-timeren fungerer på en intern RC-oscillator. Chippen holdes nulstillet, så længe PWRT er aktiv. PWRT's tidsforsinkelse gør det muligt for VDD at stige til et acceptabelt niveau. En konfigurationsbit leveres til at aktivere eller deaktivere PWRT.
Vi har ikke brug for sådanne forsinkelser i vores program, så lad os også slå det fra.
Trin 6: Den næste bit er lavspændingsprogrammering.
LVP-biten i konfigurationsordet muliggør ICSP-programmering med lav spænding. Denne tilstand gør det muligt for mikrocontrolleren at blive programmeret via ICSP ved hjælp af en VDD-kilde i driftsspændingsområdet. Dette betyder kun, at VPP ikke skal bringes til VIHH, men kan i stedet efterlades ved den normale driftsspænding. I denne tilstand er RB3 / PGM-stiften dedikeret til programmeringsfunktionen og ophører med at være en generel I / O-stift. Under programmering anvendes VDD på MCLR-stiften. For at gå ind i programmeringstilstand skal VDD anvendes på RB3 / PGM, forudsat at LVP-bit er indstillet.
Lad os slå LVP fra, så vi kan bruge RB3 som en I / O-pin. For at gøre dette, skal du blot slå denne OFF ved hjælp af dropdown boksen.
Trin 7: De næste bits er EEPROM- og programhukommelsesbeskyttelsesbits. Hvis denne bit er tændt, vil ingen når MCU er programmeret hente vores program fra hardwaren. Men lad os nu lade alle de tre være slået fra.
Når indstillingerne er udført som beskrevet, skal dialogboksen se sådan ud.
Trin 8: Klik nu på Generer kildekode til output, vores kode genereres nu bare kopier den sammen med header-fil og indsæt i vores Blink.c C-fil, som vist nedenfor.
Det er det, vores konfigurationsarbejde er udført. Vi kan have denne konfiguration til alle vores projekter. Men hvis du er interesseret, kan du rode med dem senere.
Programmering af PIC til at blinke en LED:
I dette program skal vi bruge vores PIC-mikrocontroller til at blinke en LED tilsluttet en I / O-pin. Lad os se på de forskellige I / O-ben, der er tilgængelige på vores PIC16F877A.
Som vist ovenfor har PIC16F877 5 basale input / output porte. De er normalt betegnet med PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) og PORT E (RE). Disse porte bruges til input / output interface. I denne controller er "PORT A" kun 6 bit bred (RA-0 til RA-5), "PORT B", "PORT C", "PORT D" er kun 8 bit bred (RB-0 til RB-7, RC-0 til RC-7, RD-0 til RD-7), ”PORT E” har kun 3 bit bredde (RE-0 til RE-2).
Alle disse porte er tovejs. Portens retning styres ved hjælp af TRIS (X) registre (TRIS A bruges til at indstille retningen for PORT-A, TRIS B bruges til at indstille retningen for PORT-B osv.). Indstilling af en TRIS (X) bit '1' indstiller den tilsvarende PORT (X) bit som input. Rydning af en TRIS (X) bit '0' indstiller den tilsvarende PORT (X) bit som output.
Til vores projekt er vi nødt til at lave stiften RB3 til PORT B som output, så vores LED kan tilsluttes den. Her er kode til LED, der blinker med PIC-mikrocontroller:
#omfatte
Først har vi specificeret den eksterne Crystal-frekvens ved hjælp af #define _XTAL_FREQ 20000000. Derefter instruerede vi i ugyldig hovedfunktion () vores MCU, at vi vil bruge RB3 som en output (TRISB = 0X00;) pin. Derefter bruges endelig en uendelig mens løkke, så LED-indikatoren blinker for evigt. For at blinke en LED skal vi blot tænde og slukke for den med en mærkbar forsinkelse.
Når kodningen er afsluttet, skal du opbygge projektet ved hjælp af Kør -> Byg hovedprojektkommando. Dette skal kompilere dit program. Hvis alt er i orden (som det skal være), viser en outputkonsol i bunden af skærmen en BUILD SUCCESSFUL-meddelelse som vist på billedet nedenfor.
Circuit Diagram og Proteus Simulation:
Når vi først har bygget et projekt, og hvis Build er vellykket, ville der være genereret en HEX-fil i baggrunden af vores IDE. Denne HEX-fil kan findes i nedenstående bibliotek
Det kan variere for dig, hvis du har gemt et andet sted.
Lad os nu hurtigt åbne Proteus, som vi har installeret tidligere, og oprette skemaer til dette projekt. Vi vil ikke forklare, hvordan man gør dette, da det ligger uden for dette projekts anvendelsesområde. Men ikke at bekymre dig, det forklares i videoen nedenfor. Når du har fulgt instruktionerne og bygget skemaerne, skal den se sådan ud
For at simulere output skal du klikke på afspilningsknappen i nederste venstre hjørne af skærmen efter indlæsning af Hex-filen. Det skal blinke LED'en, der er tilsluttet RB3 på MCU'en. Hvis du har noget problem i det, skal du se videoen, hvis den stadig ikke er løst, skal du bruge kommentarsektionen for at få hjælp.
Nu har vi lavet vores første projekt med PIC-mikrocontroller og verificeret output ved hjælp af simuleringssoftware. Gå og tweak rundt med programmet og følg resultaterne. Indtil vi mødes på vores næste projekt.
Ohh vent !!
I vores næste projekt lærer vi, hvordan vi får dette til at fungere på en faktisk hardware. Til det har vi brug for følgende værktøjer for at holde dem klar. Indtil da GLAD LÆRING !!
- PicKit 3
- PIC16F877A IC
- 40-pin IC holder
- Perf bord
- 20Mhz Crystal OSC
- Kvinde- og mandstifter
- 33pf kondensator - 2Nr
- 680 ohm modstand
- LED i enhver farve
- Loddesæt.