- Voorbereidingen voor programmeren:
- Een nieuw project maken met MPLAB-X:
- Kennismaken met de configuratieregisters:
- De configuratiebits instellen in MPLAB-X:
- PIC programmeren om een LED te laten knipperen:
- Schakelschema en Proteus-simulatie:
Dit is de tweede tutorial van onze PIC Tutorial Series. In onze vorige tutorial Aan de slag met PIC Microcontroller: Inleiding tot PIC en MPLABX, hebben we de basishandelingen over onze PIC-microcontroller geleerd, we hebben ook de vereiste software geïnstalleerd en een nieuwe PicKit 3-programmeur gekocht die we binnenkort zullen gebruiken. Nu zijn we klaar om aan de slag te gaan met ons eerste LED-knipperprogramma met behulp van de PIC16F877A. In deze tutorial leren we ook over configuratieregisters.
Deze tutorial verwacht dat je de vereiste software op je computer hebt geïnstalleerd en dat je een behoorlijke basis kent over de PIC MCU. Als dit niet het geval is, ga dan terug naar de vorige tutorial en begin vanaf daar.
Voorbereidingen voor programmeren:
Omdat we hebben besloten om de PIC16F877A te gebruiken, laten we met de XC8-compiler aan de slag met hun datasheet. Ik raad iedereen aan om de PIC16F877A Datasheet en de XC8 Compiler handleiding te downloaden, aangezien we hier regelmatig naar zullen verwijzen naarmate we verder komen in onze tutorial. Het is altijd een goede gewoonte om het volledige gegevensblad van een MCU te lezen voordat we ermee gaan programmeren.
Nu, voordat we onze MPLAB-X openen en beginnen met programmeren, zijn er enkele basiszaken waar men op moet letten. Hoe dan ook, aangezien dit ons eerste programma is, wil ik jullie mensen niet lastig vallen met veel theorie, maar we zullen hier en daar stoppen terwijl we programmeren en ik zal jullie de dingen als zodanig uitleggen. Als je niet genoeg tijd hebt om al deze dingen door te lezen, neem dan een kijkje en spring in de video onderaan de pagina.
Een nieuw project maken met MPLAB-X:
Stap 1: Start de MPLAB-X IDE die we in de vorige klasse hebben geïnstalleerd, eenmaal geladen zou deze er ongeveer zo uit moeten zien.
Stap 2: Klik op Files -> New Project, of gebruik de sneltoets Ctrl + Shift + N. U krijgt de volgende POP-UP, waaruit u Standalone Project moet selecteren en op Volgende moet klikken.
Stap 3: Nu moeten we ons apparaat voor het project selecteren. Dus typ als PIC16F877A in de vervolgkeuzelijst Apparaat selecteren. Als u klaar bent, zou het zo moeten zijn en vervolgens op Volgende klikken.
Stap 4: Op de volgende pagina kunnen we de tool voor ons project selecteren. Dit zou PicKit 3 zijn voor ons project. Selecteer PicKit 3 en klik op volgende
Stap 5: Op de volgende pagina wordt gevraagd om de compiler te selecteren, selecteer de XC8-compiler en klik op Volgende.
Stap 6: Op deze pagina moeten we ons project een naam geven en de locatie selecteren waar het project moet worden opgeslagen. Ik heb dit project de naam Blink gegeven en het op mijn bureaublad opgeslagen. U kunt het op de door u gewenste manier een naam geven en opslaan. Ons project wordt opgeslagen als een map met de extensie .X, die direct kan worden gestart door MAPLB-X. Klik op Voltooien als u klaar bent.
Stap 7: Dat is het !!! Ons project is gemaakt. Het meest linkse venster toont de projectnaam (Here Blink), klik erop zodat we alle mappen erin kunnen zien.
Om te beginnen met programmeren, moeten we een C Main-bestand toevoegen in onze bronbestandsmap. Om dit te doen, klikt u gewoon met de rechtermuisknop op het bronbestand en selecteert u Nieuw -> C Hoofdbestand, zoals weergegeven in de onderstaande afbeelding.
Stap 8: Het volgende dialoogvenster verschijnt waarin de naam van het C-bestand moet worden vermeld. Ik heb weer een naam gegeven in Blink, maar de keuze wordt aan jou overgelaten. Geef het een naam in de kolom Bestandsnaam en klik op voltooien.
Stap 9: Zodra het C-hoofdbestand is gemaakt, zal de IDE het voor ons openen met enkele standaardcodes erin, zoals hieronder weergegeven.
Stap 10: Dat is het, nu kunnen we beginnen met het programmeren van onze code in het C-hoofdbestand. De standaardcode wordt niet gebruikt in onze tutorials. Dus laten we ze volledig verwijderen.
Kennismaken met de configuratieregisters:
Voordat we een Microcontroller gaan programmeren, moeten we de configuratieregisters kennen.
Dus wat zijn deze configuratieregisters, hoe en waarom moeten we ze instellen?
De PIC-apparaten hebben verschillende locaties die de configuratiebits of zekeringen bevatten. Deze bits specificeren de fundamentele werking van het apparaat, zoals de oscillatormodus, watchdog-timer, programmeermodus en codebescherming. Deze bits moeten correct worden ingesteld om de code uit te voeren, anders hebben we een niet-draaiend apparaat . Het is dus erg belangrijk om over deze configuratieregisters te weten voordat we beginnen met ons Blink-programma.
Om deze configuratieregisters te gebruiken, moeten we het gegevensblad doorlezen en begrijpen welke verschillende soorten configuratiebits beschikbaar zijn en wat hun functies zijn. Deze bits kunnen worden ingesteld of gereset op basis van onze programmeervereisten met behulp van een configuratiepagma.
De pragma kent de volgende vormen.
#pragma config setting = state-value #pragma config register = value
waarbij setting een beschrijving van de configuratie-instelling is, bijv. WDT, en staat een tekstuele beschrijving is van de gewenste staat, bijv. UIT. Beschouw de volgende voorbeelden eens.
#pragma config WDT = ON // waakhondtimer inschakelen #pragma config WDTPS = 0x1A // specificeer de waarde voor de postschaal van de timer
KOM TOT RUST!!….. RELAX !!…. RELAX !!…...
Ik weet dat het teveel in ons hoofd is gegaan en het instellen van deze configuratie-bits lijkt misschien een beetje moeilijk voor een beginner !! Maar het is zeker niet met onze MPLAB-X.
De configuratiebits instellen in MPLAB-X:
Microchip heeft dit vermoeiende proces een stuk eenvoudiger gemaakt door gebruik te maken van grafische weergaven van de verschillende soorten configuratiebits. Dus om ze nu in te stellen, moeten we gewoon de onderstaande stappen volgen.
Stap 1: Klik op Window -> PIC Memory View -> Configuration Bits. Zoals hieronder getoond.
Stap 2: Dit zou het venster Configuratiebits onder in onze IDE moeten openen, zoals hieronder weergegeven. Dit is de plaats waar we elk van de configuratiebits kunnen instellen volgens onze behoeften. Ik zal elk van de stukjes en het doel ervan uitleggen terwijl we door de stappen gaan.
Stap 3: De eerste bit is de selectiebit van de oscillator.
De PIC16F87XA kan worden bediend in vier verschillende oscillatormodi. Deze vier modi kunnen worden geselecteerd door twee configuratiebits (FOSC1 en FOSC0) te programmeren:
- LP Low-Power Crystal
- XT Crystal / Resonator
- HS High-Speed Crystal / Resonator
- RC-weerstand / condensator
Voor onze projecten gebruiken we een 20Mhz Osc, dus moeten we de HS selecteren in de vervolgkeuzelijst.
Stap 4: Het volgende bit is onze watchdog-timer Bit inschakelen.
De Watchdog Timer is een vrijlopende on-chip RC-oscillator die geen externe componenten nodig heeft. Deze RC-oscillator staat los van de RC-oscillator van de OSC1 / CLKI-pin. Dat betekent dat de WDT zelfs zal werken als de klok op de OSC1 / CLKI- en OSC2 / CLKO-pinnen van het apparaat is gestopt. Tijdens normaal bedrijf genereert een WDT-time-out een apparaatreset (Watchdog Timer Reset). De TO-bit in het statusregister wordt gewist na een time-out van de Watchdog Timer. Als de timer niet wordt gewist in onze softwarecodering, wordt de hele MCU gereset bij elke WDT-timeroverloop. De WDT kan permanent worden uitgeschakeld door de configuratiebit te wissen.
We gebruiken WDT niet in ons programma, dus laten we het wissen door OFF te selecteren in de vervolgkeuzelijst.
Stap 5: De volgende bit is Power-up timer Bit.
De opstarttimer biedt een vaste nominale time-out van 72 ms bij het opstarten alleen vanaf de POR. De Powerup Timer werkt op een interne RC-oscillator. De chip wordt in Reset gehouden zolang de PWRT actief is. Door de tijdvertraging van de PWRT kan VDD naar een acceptabel niveau stijgen. Er wordt een configuratiebit geleverd om de PWRT in of uit te schakelen.
We zullen dergelijke vertragingen niet nodig hebben in ons programma, dus laten we dat ook UIT zetten.
Stap 6: Het volgende bit is de laagspanningsprogrammering.
De LVP-bit van het configuratiewoord maakt ICSP-programmering op laagspanning mogelijk. In deze modus kan de microcontroller worden geprogrammeerd via ICSP met behulp van een VDD-bron in het bedrijfsspanningsbereik. Dit betekent alleen dat VPP niet naar VIHH hoeft te worden gebracht maar op de normale bedrijfsspanning kan worden gelaten. In deze modus is de RB3 / PGM-pin bedoeld voor de programmeerfunctie en is deze niet langer een algemene I / O-pin. Tijdens het programmeren wordt VDD toegepast op de MCLR-pin. Om naar de programmeermodus te gaan, moet VDD worden toegepast op de RB3 / PGM, op voorwaarde dat de LVP-bit is ingesteld.
Laten we LVP uitschakelen zodat we RB3 als een I / O-pin kunnen gebruiken. Om dit te doen, zet u dit gewoon UIT met behulp van de vervolgkeuzelijst.
Stap 7: De volgende bits zijn EEPROM- en programmageheugenbeschermingsbits. Als dit bit is ingeschakeld, zal niemand ons programma van de hardware ophalen zodra de MCU is geprogrammeerd. Maar laten we voorlopig alle drie uitgeschakeld laten.
Zodra de instellingen zijn gedaan volgens de instructies, zou het dialoogvenster er ongeveer zo uit moeten zien.
Stap 8: Klik nu op Genereer broncode voor uitvoer, onze code wordt nu gegenereerd, kopieer het gewoon samen met het headerbestand en plak het in ons Blink.c C-bestand, zoals hieronder weergegeven.
Dat is het, ons configuratiewerk is voltooid. We kunnen deze configuratie hebben voor al onze projecten. Maar als je geïnteresseerd bent, kun je er later mee rommelen.
PIC programmeren om een LED te laten knipperen:
In dit programma gaan we onze PIC-microcontroller gebruiken om een LED te laten knipperen die is aangesloten op een I / O-pin. Laten we eens kijken naar de verschillende I / O-pinnen die beschikbaar zijn op onze PIC16F877A.
Zoals hierboven getoond heeft de PIC16F877 5 basis input / output poorten. Ze worden meestal aangeduid met POORT A (RA), POORT B (RB), POORT C (RC), POORT D (RD) en POORT E (RE). Deze poorten worden gebruikt voor input / output-interfaces. In deze controller is 'PORT A' slechts 6 bits breed (RA-0 tot RA-5), 'PORT B', 'PORT C', 'PORT D' slechts 8 bits breed (RB-0 tot RB-7, RC-0 tot RC-7, RD-0 tot RD-7), "PORT E" heeft slechts 3 bit breed (RE-0 tot RE-2).
Al deze poorten zijn bidirectioneel. De richting van de poort wordt geregeld met behulp van TRIS (X) -registers (TRIS A wordt gebruikt om de richting van PORT-A in te stellen, TRIS B wordt gebruikt om de richting van PORT-B in te stellen, enz.). Als u een TRIS (X) bit '1' instelt, wordt de corresponderende PORT (X) bit als invoer ingesteld. Als u een TRIS (X) -bit '0' wist, wordt de overeenkomstige PORT (X) -bit als uitvoer ingesteld.
Voor ons project moeten we de pin RB3 van PORT B als output maken zodat onze LED erop aangesloten kan worden. Hier is de code voor het knipperen van de LED met de PIC-microcontroller:
# omvatten
Eerst hebben we de externe Crystal-frequentie gespecificeerd met #define _XTAL_FREQ 20000000. Vervolgens hebben we in de void main () functie onze MCU geïnstrueerd dat we de RB3 gaan gebruiken als een output (TRISB = 0X00;) pin. Dan wordt tenslotte een oneindige while- lus gebruikt zodat de LED voor altijd blijft knipperen. Om een LED te laten knipperen, moeten we deze eenvoudig aan- en uitzetten met een merkbare vertraging.
Zodra het coderen is voltooid, bouwt u het project met de opdracht Uitvoeren -> Bouw hoofdproject. Dit zou je programma moeten compileren. Als alles in orde is (zoals het zou moeten zijn), zal een uitvoerconsole onderaan het scherm een bericht BOUWEN SUCCESVOL tonen, zoals weergegeven in de onderstaande afbeelding.
Schakelschema en Proteus-simulatie:
Zodra we een project hebben gebouwd en als Build succesvol is, zou een HEX-bestand zijn gegenereerd op de achtergrond van onze IDE. Dit HEX-bestand is te vinden in de onderstaande map
Het kan voor u verschillen als u op een andere locatie heeft opgeslagen.
Laten we nu snel Proteus openen dat we eerder hebben geïnstalleerd en schema's voor dit project maken. We gaan niet uitleggen hoe je dit moet doen, aangezien het buiten de scope van dit project valt. Maar geen zorgen, het wordt uitgelegd in de onderstaande video. Als je eenmaal de instructie hebt gevolgd en de schema's hebt gemaakt, zou het er ongeveer zo uit moeten zien
Om de uitvoer te simuleren, klikt u op de afspeelknop in de linker benedenhoek van het scherm na het laden van het Hex-bestand. Het moet de LED knipperen die is aangesloten op de RB3 van de MCU. Als je een probleem hebt, bekijk dan de video, als het nog steeds niet is opgelost, gebruik dan het commentaargedeelte voor hulp.
Nu hebben we ons eerste project met PIC-microcontroller gemaakt en de output geverifieerd met simulatiesoftware. Ga rond met het programma en bekijk de resultaten. Tot we elkaar ontmoeten op ons volgende project.
Ohh wacht !!
In ons volgende project zullen we leren hoe we dit op echte hardware kunnen laten werken. Daarvoor hebben we de volgende tools nodig om ze gereed te houden. Tot dan GELUKKIG LEREN !!
- PicKit 3
- PIC16F877A IC
- 40-pins IC-houder
- Perf bord
- 20Mhz Crystal OSC
- Vrouwelijke en mannelijke Bergstick-pinnen
- 33pf condensator - 2 nrs
- 680 ohm weerstand
- LED in elke kleur
- Soldeerkit.