PIC microcontroller tutorial

Gepost door Bastiaan Steenbergen op donderdag 4 december 2003

Het programma in de PIC laden

Om een microcontroller toe te kunnen passen in hardware moet hij eerst met het benodigde programma worden geladen.
Dit gebeurt met een speciaal stuk hardware waarmee het programma door middel van seriële communicatie met de pc erin gebrand/geprogrammeerd wordt. Je komt ook nog wel eens de parallelle variant tegen voor de overdracht. Deze communicatie gebeurt tussen de pc en de "programmer".

Zodra de geschreven software is getest in bv. MPLAB kan het in de µC worden geladen. Er bestaan veel verschillende "programmers". De fabrikant van de chip heeft vaak officiele programmers. Deze kosten echter wel heel wat geld. Ook zijn er veel schema's te vinden op internet van programmers die je zelf in elkaar kunt zetten. Wat al een hoop minder kost, alleen weer wat meer werk. Voor het type µC dat wij gebruiken kun je het volgende schema gebruiken. Het is het meest simpele schema dat er is van een "program device" voor de PIC16F84.

Schema van de programmerSchema van de programmer

Waarschuwing: Deze programmer werkt vaak niet goed met laptops en recente computers, en wordt daarom afgeraden.
Een alternatief staat hier.

Dit is het hardware schema dat nodig is om de µC te laden met het stukje zelfgeschreven software (zie ook hier). De verbindingen waar een nummer bij staan dienen te worden aangesloten aan de corresponderende DB9 connector pin-nummers. Dit is een connector die je programmer verbindt met de computer. Op de computer moet je een programma draaien dat de hardware aanstuurt en zorgt voor een goede verzending van je programma naar het flash geheugen van de PIC. Het benodigde programma heet IC-Prog. Dit is te downloaden op de IC-Prog site.
Hieronder een screenshot van het programma:

IC-ProgIC-Prog

Voor het programma kan worden gebruikt moeten er eerst wat instellen worden gedaan.
Kies onder "Instellingen" voor de optie "Hardware". Stel alles zo in als hieronder is weergegeven.

IC-Prog instellingenIC-Prog instellingen

Het zou kunnen straks dat blijkt dat er iets niet goed is gegaan met het burnen (om verwarring te voorkomen zal ik het in het vervolg maar zo noemen aangezien de termen 'laden' en 'programmeren' ook wat anders kunnen betekenen). Dat het fout ging komt dan doordat op ieder zijn computer de com poorten anders kunnen zijn toegewezen. Mocht het dus fout gaan tijdens het burnen, kies dan voor een andere com-poort in dit "Hardware instellingen" scherm.
Je kunt nu het scherm weer sluiten door "OK" te drukken.

Ga nu weer naar "Instellingen" en kies deze keer voor "Opties". Kies daar het tabblad waar op staat "Programmeren". Vink alleen de optie "Controle gedurende programmeren" aan. Dit zorgt er voor dat IC-Prog tijdens het programmeren checkt of alles wel goed gaat.

IC-Prog foutcontroleIC-Prog foutcontrole

Nu zijn de hoofdinstellingen klaar en die hoeven in het vervolg niet meer te worden gewijzigd. Nu kunnen we met het echte werk gaan beginnen.
Kies rechtsboven in het pulldown menu voor de PIC 16F84A. Zodat er dan dit komt te staan in de rechterbovenhoek:

De juiste PIC kiezenDe juiste PIC kiezen

Vervolgens gaan we het geassembleerde programma opzoeken.
Kies in het menu voor de optie "Bestand" en dan voor "Openen".
Ga dan naar de map waar je zelfgeschreven programma staat en kies voor het ".hex" bestandje dat de naam heeft van jouw file. Nu zul je zien dat er in het programma opeens allemaal codes in je "Programma Code" veld komen. Dit zijn de codes die jouw geschreven programma vertegenwoordigen, alleen dan in een taal die de µC begrijpt. Hier zie je een voorbeeld:

HEX-codeHEX-code

Die blauwe getallen geven de adresnummers aan van het programma geheugen in hex-waarde. Daarnaast zie je telkens hexadecimale codes in stukken van 4 breed. Dit zijn de waardes die in de controller worden geladen. Voor het geval je er baat bij hebt staan er in de rechterrij de ASCII betekenissen van de hex-waarden die links staan. Zo zie op de bovenste rij in het voorbeeld dat de hexcode 16 een letter 'f' vertegenwoordigt. Deze informatie is echter niet van belang voor ons en daarom gaan we weer gauw verder.

Kies nu in het vakje "Oscillator" voor XT. Zo stellen we de oscillator-mode van de µC in op "kristal klok". In de datasheet kun je meer informatie vinden over wat de andere keuzes betekenen. Zorg er altijd goed voor dat je de juiste kiest. Doe je dit niet of vergeet je het in te stellen dan heb je kans dat je de µC voorgoed beschadigt.

Als laatste instelling dienen we de fuses te kiezen die we wensen te gebruiken. Vink bij de "Fuses" alleen de optie "PWRT" aan. De fuses zijn bepaalde opties die de microcontroller heeft. In deze tutorial ga we alleen in op de PWRT. Dit staat voor Power-up Timer. Deze optie zorgt ervoor dat er gedurende de 72ms nadat de voedingsspanning is aangelegd de µC gereset blijft. Dit is handig aangezien de voedingsspanning gedurende die tijd nog instabiel kan zijn en zodanig dan de µC niet goed zijn werk kan doen. Om die stabiliteit te waarborgen wordt er een tijdje gewacht alvorens te beginnen met het uitvoeren van het programma.

FusesFuses

Nu zijn we helemaal klaar en kan het 'burnen' beginnen. Zorg ervoor dat de RS232 connector in je pc zit en dat de PIC in het ic-voetje is geplaatst. (let goed op dat je het niet verkeerd om erin hebt gedaan). Druk nu bovenin in de menubalk op "Acties" en kies voor "Programmeren Component". Vervolgens zal door middel van een statusbalk de voortgang worden weergegeven van het 'burnen'. Zodra alles goed is verlopen geeft het programma een melding dat het succesvol is afgerond.

Krijg je een foutmelding aan het einde (of tijdens het 'burnen') dan kan dit verschillende oorzaken hebben.

  • Kijk of je de PIC wel goed in het IC-voetje hebt geplaatst. Dus pin 1 of het kuiltje op het IC aan de kant van de inkeping van het IC-voetje.
  • Kies bij de hardware instellingen voor een andere com-poort.
  • Heb je wel de optie: "Controle gedurende programmeren" aan staan en de andere optie "Controle na programmeren" uit staan?
  • Loop ook even opnieuw de instellingen na voor de zekerheid, misschien ben je wel iets vergeten. Zodra je zeker bent dat alles goed is kun je het weer opnieuw proberen te 'burnen'.

Is het voltooid dan staat je complete programma in het flashgeheugen en blijft dat erop bewaart, zelfs als de voeding eraf gaat. Indien je er later een ander programma in laad dan wordt het oude geheel overschreven.