- Gjør deg klar for programmering:
- Opprette et nytt prosjekt ved hjelp av MPLAB-X:
- Bli kjent med konfigurasjonsregistrene:
- Stille inn konfigurasjonsbitene i MPLAB-X:
- Programmering av PIC for å blinke en LED:
- Kretsdiagram og Proteus-simulering:
Dette er den andre opplæringen i vår PIC Tutorial Series. I vår forrige veiledning Komme i gang med PIC Microcontroller: Introduksjon til PIC og MPLABX, vi lærte de grunnleggende tingene om PIC-mikrokontrolleren vår, vi installerte også den nødvendige programvaren og kjøpte en ny PicKit 3-programmerer som vi snart vil bruke. Nå er vi klare til å komme i gang med vårt første LED-blinkende program ved bruk av PIC16F877A. Vi vil også lære om konfigurasjonsregistre i denne opplæringen.
Denne opplæringen forventer at du har installert den nødvendige programvaren på datamaskinen din, og at du vet noen anstendige grunnleggende om PIC MCU. Hvis ikke, kan du hoppe tilbake til forrige opplæring og komme i gang derfra.
Gjør deg klar for programmering:
Siden vi har bestemt oss for å bruke PIC16F877A, la oss komme i gang med databladet med XC8-kompilatoren. Jeg anbefaler alle å laste ned PIC16F877A-databladet og XC8-kompilatorhåndboken, da vi ofte vil referere til disse når vi går gjennom veiledningen. Det er alltid en god praksis å lese hele databladet til hvilken som helst MCU før vi faktisk begynner å programmere med det.
Nå, før vi åpner MPLAB-X og begynner å programmere, er det få grunnleggende ting man må være klar over. Uansett, siden dette er vårt første program, vil jeg ikke forfølge dere folk med mye teori, men vi vil stoppe her og der mens vi programmerer, og jeg vil forklare deg ting som sådan. Hvis du ikke har nok tid til å lese gjennom alle disse, er det bare å ta et glimt og hoppe inn i videoen nederst på siden.
Opprette et nytt prosjekt ved hjelp av MPLAB-X:
Trinn 1: Start MPLAB-X IDE som vi installerte i forrige klasse, når den er lastet skal den se ut slik.
Trinn 2: Klikk på Filer -> Nytt prosjekt, eller bruk hurtigtasten Ctrl + Shift + N. Du får følgende POP-UP, hvorfra du må velge Frittstående prosjekt og klikke Neste.
Trinn 3: Nå må vi velge enheten vår for prosjektet. Så skriv som PIC16F877A over rullegardinmenyen Velg enhet . Når det er gjort, skal det være slik, og klikk deretter på Neste.
Trinn 4: Den neste siden lar oss velge verktøyet for prosjektet vårt. Dette ville være PicKit 3 for prosjektet vårt. Velg PicKit 3 og klikk på neste
Trinn 5: Neste side vil be om å velge kompilatoren, velg XC8 Compiler og klikk neste.
Trinn 6: På denne siden må vi navngi prosjektet vårt og velge stedet der prosjektet skal lagres. Jeg har kalt dette prosjektet som Blink og lagret det på skrivebordet mitt. Du kan navngi og lagre det på din foretrukne måte. Prosjektet vårt lagres som en mappe med Extension .X, som kan startes direkte av MAPLB-X. Klikk Fullfør når du er ferdig.
Trinn 7: Det er det !!! Prosjektet vårt er opprettet. Vinduet til venstre mest viser prosjektnavnet (Here Blink), klikk på det slik at vi kan se alle katalogene i det.
For å starte programmeringen må vi legge til en C-hovedfil i kildefilkatalogen. For å gjøre dette, høyreklikk bare på kildefilen og velg Ny -> C Hovedfil, som vist på bildet nedenfor.
Trinn 8: Følgende dialogboks vises der navnet på C-filen må nevnes. Jeg har navngitt Blink igjen, men valget overlates til deg. Navngi det i kolonnen Filnavn og klikk på ferdig.
Trinn 9: Når C-hovedfilen er opprettet, åpner IDE den for oss med noen standardkoder i den, som vist nedenfor.
Trinn 10: Det er det nå vi kan begynne å programmere koden vår i C-hovedfilen. Standardkoden vil ikke bli brukt i våre opplæringsprogrammer. Så la oss slette dem helt.
Bli kjent med konfigurasjonsregistrene:
Før vi begynner å programmere en Microcontroller, må vi vite om konfigurasjonsregistrene.
Så hva er disse konfigurasjonsregistrene, hvordan og hvorfor skal vi sette dem?
PIC-enhetene har flere steder som inneholder konfigurasjonsbitene eller sikringene. Disse bitene spesifiserer grunnleggende enhetsoperasjon, for eksempel oscillatormodus, vakthundtimer, programmeringsmodus og kodebeskyttelse. Disse bitene må settes riktig for å kunne kjøre koden, ellers har vi ikke enheten som kjører . Så det er veldig viktig å vite om disse konfigurasjonsregistrene før vi begynner med vårt Blink-program.
For å kunne bruke disse konfigurasjonsregistrene, må vi lese gjennom databladet og forstå hva de forskjellige typene konfigurasjonsbiter er tilgjengelige og deres funksjoner. Disse bitene kan stilles inn eller tilbakestilles basert på våre programmeringskrav ved hjelp av en konfigurasjonspragma.
Pragma har følgende former.
#pragma config setting = state-value #pragma config register = value
der innstilling er en konfigurasjonsinnstillingsbeskrivelse, f.eks. WDT, og tilstand er en tekstbeskrivelse av ønsket tilstand, f.eks. AV. Tenk på følgende eksempler.
#pragma config WDT = ON // slå på vakthundtimeren # pragma config WDTPS = 0x1A // spesifiser timers postskaleringsverdi
SLAPPE AV!!….. SLAP AV !!…. SLAP AV !!…...
Jeg vet at det har gått for mye inn i hodene på oss, og å sette disse konfigurasjonsbitene kan synes å være litt vanskelig for en nybegynner! Men det er defiantly ikke med MPLAB-X.
Stille inn konfigurasjonsbitene i MPLAB-X:
Microchip har gjort denne anstrengende prosessen mye enklere ved å bruke grafiske fremstillinger av de forskjellige typene konfigurasjonsbiter. Så nå for å sette dem må vi bare følge trinnene nedenfor.
Trinn 1: Klikk på Window -> PIC Memory View -> Configuration Bits. Som vist under.
Trinn 2: Dette skal åpne Configuration Bits-vinduet i bunnen av IDE som vist nedenfor. Dette er stedet hvor vi kan sette hver av konfigurasjonsbitene i henhold til våre behov. Jeg vil forklare hver bit og dens formål når vi går gjennom trinnene.
Trinn 3: Den første biten er oscillatorvalget.
PIC16F87XA kan brukes i fire forskjellige oscillatormodi. Disse fire modusene kan velges ved å programmere to konfigurasjonsbiter (FOSC1 og FOSC0):
- LP Laveffektkrystall
- XT Crystal / Resonator
- HS høyhastighets krystall / resonator
- RC motstand / kondensator
For våre prosjekter bruker vi en 20Mhz Osc, derfor må vi velge HS fra rullegardinboksen.
Trinn 4: Den neste biten vil være vår vakthundstidsur Aktiver bit.
Watchdog Timer er en friløpende RC-oscillator på chip som ikke krever noen eksterne komponenter. Denne RC-oscillatoren er atskilt fra RC-oscillatoren til OSC1 / CLKI-pinnen. Det betyr at WDT vil kjøre selv om klokken på OSC1 / CLKI og OSC2 / CLKO-pinnene på enheten er stoppet. Under normal drift genererer en WDT-tidsavbrudd en enhet Reset (Watchdog Timer Reset). TO-biten i statusregisteret vil bli slettet ved en tidsavbrudd for Watchdog Timer. Hvis tidtakeren ikke blir ryddet i programvarekodingen vår, vil hele MCU-en tilbakestilles ved hvert WDT-tidsuroverløp. WDT kan deaktiveres permanent ved å fjerne konfigurasjonsbit.
Vi bruker ikke WDT i programmet vårt, så la oss fjerne det ved å velge AV i rullegardinlisten.
Trinn 5: Den neste biten er oppstarttidsbit.
Power-up Timer gir en fast 72 ms nominell tidsavbrudd ved oppstart bare fra POR. Powerup Timer fungerer på en intern RC-oscillator. Brikken holdes i Reset så lenge PWRT er aktiv. PWRTs tidsforsinkelse gjør at VDD kan stige til et akseptabelt nivå. En konfigurasjonsbit er gitt for å aktivere eller deaktivere PWRT.
Vi trenger ikke slike forsinkelser i programmet vårt, så la oss også slå det av.
Trinn 6: Den neste biten vil være lavspenningsprogrammering.
LVP-biten i konfigurasjonsordet muliggjør lavspent ICSP-programmering. Denne modusen lar mikrokontrolleren programmeres via ICSP ved hjelp av en VDD-kilde i driftsspenningsområdet. Dette betyr bare at VPP ikke trenger å bringes til VIHH, men kan i stedet bli stående på normal driftsspenning. I denne modusen er RB3 / PGM-pinnen dedikert til programmeringsfunksjonen og slutter å være en generell I / O-pinne. Under programmering påføres VDD på MCLR-pinnen. For å gå inn i programmeringsmodus, må VDD brukes på RB3 / PGM forutsatt at LVP-biten er satt.
La oss slå av LVP slik at vi kan bruke RB3 som en I / O-pin. For å gjøre dette, bare slå denne AV hjelp av rullegardinmenyen.
Trinn 7: De neste bitene vil være EEPROM- og programminnebeskyttelsesbiter. Hvis denne biten er slått på, vil ingen når MCU er programmert hente programmet vårt fra maskinvaren. Men foreløpig la oss la alle de tre være AV.
Når innstillingene er gjort som angitt, bør dialogboksen se slik ut.
Trinn 8: Klikk nå på Generer kildekode til utdata, koden vår blir generert nå, bare kopier den sammen med topptekstfilen og lim inn på Blink.c C-filen, som vist nedenfor.
Det er det konfigurasjonsarbeidet vårt er gjort. Vi kan ha denne konfigurasjonen for alle våre prosjekter. Men hvis du er interessert, kan du rote med dem senere.
Programmering av PIC for å blinke en LED:
I dette programmet skal vi bruke PIC-mikrokontrolleren vår til å blinke en LED som er koblet til en I / O-pinne. La oss ta en titt på de forskjellige I / O-pinnene som er tilgjengelige på PIC16F877A.
Som vist ovenfor har PIC16F877 5 grunnleggende inngangs- / utgangsporter. De er vanligvis betegnet med PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) og PORT E (RE). Disse portene brukes for inngangs- / utgangsgrensesnitt. I denne kontrolleren er "PORT A" bare 6 bits bred (RA-0 til RA-5), "PORT B", "PORT C", "PORT D" er bare 8 bits bred (RB-0 til RB-7, RC-0 til RC-7, RD-0 til RD-7), ”PORT E” har bare 3 bit bredde (RE-0 til RE-2).
Alle disse portene er toveis. Retningen til havnen styres ved hjelp av TRIS (X) -registre (TRIS A brukes til å stille retning av PORT-A, TRIS B brukes til å stille retning for PORT-B, etc.). Hvis du setter en TRIS (X) bit '1', vil den tilsvarende PORT (X) biten angis som inngang. Hvis du sletter en TRIS (X) bit '0', vil den tilsvarende PORT (X) biten bli satt som utdata.
For prosjektet vårt må vi lage pinnen RB3 til PORT B som utgang slik at LED-en vår kan kobles til den. Her er koden for LED-blinking med PIC-mikrokontroller:
#inkludere
Først har vi spesifisert den eksterne Crystal-frekvensen ved å bruke #define _XTAL_FREQ 20000000. Så i ugyldig hoved () -funksjon instruerte vi vår MCU om at vi skal bruke RB3 som en utgang (TRISB = 0X00;) pin. Så endelig brukes en uendelig mens sløyfe slik at LED-lampen blinker for alltid. For å blinke en LED må vi bare slå den på og av med en merkbar forsinkelse.
Når kodingen er fullført, bygger du prosjektet ved hjelp av Kjør -> Bygg hovedprosjektkommandoen. Dette bør kompilere programmet ditt. Hvis alt er i orden (som det skal være) vil en utgangskonsoll nederst på skjermen vise en BUILD SUCCESSFUL-melding, som vist på bildet nedenfor.
Kretsdiagram og Proteus-simulering:
Når vi har bygget et prosjekt, og hvis Build er vellykket, ville en HEX-fil blitt generert i bakgrunnen av IDE. Denne HEX-filen finner du i katalogen nedenfor
Det kan variere for deg hvis du har lagret et annet sted.
La oss nå raskt åpne Proteus som vi har installert tidligere, og lage skjemaer for dette prosjektet. Vi kommer ikke til å forklare hvordan vi gjør dette som det utenfor omfanget av dette prosjektet. Men ikke å bekymre deg, blir det forklart i videoen nedenfor. Når du har fulgt instruksjonene og laget skjemaene, bør den se ut slik
For å simulere utdataene, klikk på avspillingsknappen nederst til venstre på skjermen etter at du har lastet inn Hex-filen. Den skal blinke LED-en som er koblet til RB3 på MCU. Hvis du har problemer med det, kan du se på videoen, hvis du fremdeles ikke løser den, bruk kommentarseksjonen for å få hjelp.
Nå har vi laget vårt første prosjekt med PIC-mikrokontroller og verifisert utgangen ved hjelp av simuleringsprogramvare. Gå og finjuster rundt programmet og følg resultatene. Inntil vi møtes på vårt neste prosjekt.
Ohh vent !!
I vårt neste prosjekt skal vi lære å få dette til å fungere på en faktisk maskinvare. For det trenger vi følgende verktøy for å holde dem klare. Inntil da GLAD LÆRING !!
- PicKit 3
- PIC16F877A IC
- 40-pin IC holder
- Perf brett
- 20Mhz Crystal OSC
- Kvinne og mann Bergstick pins
- 33pf kondensator - 2Nr
- Motstand på 680 ohm
- LED i alle farger
- Loddesett.