Pic microcontroller tutorial Inleiding



Dovnload 128.06 Kb.
Pagina1/4
Datum17.08.2016
Grootte128.06 Kb.
  1   2   3   4

PIC microcontroller tutorial

Inleiding


Bij deze microcontroller tutorial willen we je leren hoe je een microcontroller kunt programmeren en gebruiken. We hebben hiervoor een stuk theorie geschreven om je de basisbeginselen van de microcontrollers te leren. Daarnaast hebben we een praktijk gedeelte wat is opgebouwd rond een project, zodat je zelf thuis kunt experimenteren met een echte microcontroller.

Er is gekozen voor een microcontroller van het merk Microchip van het type PIC16F84A. De reden voor deze keus is omdat het een redelijk simpele maar toch veelzijdige controller is. Makkelijk te leren en je kunt er een hoop mee.

We hopen dat je er veel van zult leren en dat je veel plezier zult gaan beleven met het gebruik van microcontrollers. Er gaat een wereld voor je open zodra je er mee kennis hebt gemaakt.

Wat is een microcontroller

Een microcontroller is een digitaal IC dat volledig programmeerbaar is en taken kan verrichten. Het bevat een klein geheugen waarin je je eigen data kunt programmeren. De chip zal, als die wordt ingeschakeld, het door jouw geschreven programma uitvoeren. In het vervolg zal het woord microcontroller worden afgekort als µC.



Wie maken ze

Er zijn verschillende fabrikanten die deze µC's maken, om er een paar te noemen: Motorola, Atmel en Microchip. Maar er zijn er nog veel meer. Wij gebruiken er eentje van Microchip. Zodra je redelijk bekent bent met deze µC dan zul je weinig moeite ondervinden bij het leren van een andere, aangezien de techniek en werking van de meeste types op elkaar lijkt.



Welke types zijn er

Er bestaan veel verschillende types. Elk met hun eigen karakteristieken en functionaliteiten. Zo zijn er die alleen normale I/O poorten hebben, maar zijn er ook die speciale, zoals A/D converters of RS232 poorten, bevatten. Veel types kun je onderbrengen in een groep omdat ze dezelfde functies bevatten, deze groep noemen ze dan een familie. Elke chip in zo'n familie heeft dan bepaalde eigenschappen gemeen met de rest. Het verschil zit hem dan in de extra functies/opties die sommige dan weer bevatten. Zo kan binnen een groep alleen het aantal RAM geheugen dat beschikbaar is bijvoorbeeld verschillen.



Voordelen

Er zijn veel voordelen om een µC te gaan gebruiken. Zo kun je volledig zelf bepalen wat een stukje elektronica moet doen, en in welke volgorde. Wil je later de uitvoering wijzigen dan hoef je alleen de chip eruit te halen, opnieuw te programmeren, en er weer in te plaatsten. Ook het testen is zeer gemakkelijk. Een ander voordeel is dat je veel functionaliteit krijgt en er weinig ruimte voor hoeft in te leveren op je printplaat. Het IC wat wij gebruiken zit in een DIP behuizing van 18 pinnen. Er is zelfs nog een SMD versie te koop die al helemaal weinig ruimte inneemt.



Nadelen

Er zijn veel voordelen bij µC's maar ook nadelen. Zo moet je redelijk wat kennis hebben van digitale techniek. Zowel op hard- als software gebied. Ook moet je moet beschikken over een stuk hardware waarmee je de µC kunt programmeren, oftewel waarmee je het geschreven stuk software in het IC laad. Op zich niet zo'n probleem maar de benodigde officiële hardware van de fabrikant kost zeer veel geld. Voor de hobbyist zou dit een belemmering kunnen vormen. Toch is dit maar een relatief klein nadeel omdat er op internet schema's van programmeerhardware zijn te vinden waarmee je ook je controller kunt programmeren. Ook de compilers en simulators die je nodig hebt kunnen voor redelijk wat kosten leiden. Toch zijn deze ook wel gratis op het internet te vinden.


Hardware


De microcontroller die we gaan gebruiken is een geavanceerd stukje hardware, en behoort met externe componenten te worden ingesteld. Hieronder zullen we de diverse belangrijke hardware bespreken die de PIC nodig heeft. Ook zullen we de interne hardware bespreken die aanwezig is in de PIC. Om zelf ook makkelijk straks je weg te vinden bij andere merken of types van µC's is het aan te raden de datasheet erbij te pakken en tegelijk dingen op te zoeken als ik die vermeld.

Voeding

Om te beginnen de voeding. De µC heeft een gelijkspanning nodig tussen de 2v en de 5,5v. Het is het meest handigst om te kiezen voor een voedingsspanning van 5v. Aangezien de eventuele digitale ic's die je eraan wilt koppelen ook op die spanning werken en omdat het niveau van de logische 1 een 5 volt signaal is. Het enigste wat er moet gebeuren is op de pin 5 de ground aan te sluiten en pin 14 de voedingsspanning.

Heb je geen gestabiliseerde 5v dan kun je dit schema gebruiken om een spanning tussen de 18v en 7v om te zetten naar een mooie 5v voor de voeding.

Stabiele voeding



Klok

Een µC loopt net zoals je pc op een bepaalde frequentie. Dit heet de klokfrequentie. Alle bewerkingen van de µC lopen op dat signaal. Om het juiste clocksignaal aan te bieden kun je een oscillator aansluiten zoals te zien is in de onderstaande afbeelding. Intern wordt de frequentie van de clk door 4 gedeelt en de uitkomst daarvan is de snelheid waarmee instructies worden uitgevoerd. De reden hiervoor is dat de interne processor een instructie eerst moet ophalen en decoderen voordat deze het daadwerkelijk kan gaan uitvoeren. Zou je dus een externe clock van 4MHz aansluiten dan worden de instructies uitgevoerd met 1MHz, en dat is dus 1 instructie per 1µs. Hieronder zie je hoe een externe clock (kristal) wordt aangesloten.



Aansluiting clock

Ook heb je de mogelijkheid de clock in de vorm van een RC-schakeling aan te bieden. In de datasheet kun je meer informatie vinden over de waarde van de condensatoren, en hoe het zit met de waarde van het kristal.

Reset

Een µC heeft de mogelijkheid om te worden gereset via de MCLR pin. Dit is vooral handig als de controller niet meer goed reageert of volledig is gestopt met zijn werkzaamheden. Door te resetten komt de µC in zijn beginstand en begint weer het geprogrammeerde programma vanaf het begin uit te voeren. Ook worden alle instellingen van de controller weer in de default waarde gezet. De pin MCLR werkt net iets anders dan je misschien bent gewend. Het is namelijk een 'Active low' pin. Dat betekent dat je de chip reset als je een 0 op de pin zet (bij de meeste normale digitale logica gebeurt er iets zodra je er een 1 op zet). Wil je dat de controller normaal zijn werk doet dan moet je dus zorgen dat die pin altijd een 1 krijgt. In de datasheet is een 'Active low' pin aangegeven met een lijn boven de naam van de pin. Hieronder zie je een schema met daarin hoe je de MCLR moet aansluiten om de chip gewoon zijn werk te kunnen laten uitvoeren.



Reset


Er wordt een 1 op die pin gezet door de voeding er gewoonweg op te zetten. Wel is er een weerstand van 10k tussen gezet om de stroom die de chip binnen gaat te beperken. Je kunt ook nog kiezen om een schakelaar toe te voegen zodat je de µC makkelijk kunt resetten. Door middel van deze schakelaar wordt de reset pin laaggetrokken naar GND, en zal de controller dus in de reset komen. Zie onderstaande tekening.

Reset met knop



Instructies

Zonder software doet de µC natuurlijk niets. Er moet een stukje software worden geschreven dat vervolgens naar de chip kan worden overgebracht. De chip bevat daarvoor een stuk Flash geheugen dat volgens de fabrikant zo'n 10.000x kan worden gelezen/geschreven. In dit geheugen komt je programma te staan. Zodra de voeding eraf is wordt dit geheugen niet gewist en blijft je programma bewaart. Er is ruimte aanwezig voor 1024 regels code.


Het schrijven van het programma gebeurt op de computer door middel van een taal genaamd 'assembler'. Deze taal werkt door middel van commando's die we 'instructies' noemen in het microprocessor jargon. Deze µC bevat een RISC processor wat inhoudt dat deze weinig instructies kent. Zeer gemakkelijk dus voor de beginner, omdat deze maar weinig instructies hoeft te kennen. Er zijn er in totaal 35 verschillende, met elk hun eigen functionaliteit. In het hoofdstuk "Software" gaan we verder in op het schrijven van een applicatie door middel van instructies.

Registers/Geheugen

Als je kijkt naar de datasheet op pag. 3 Fig 1-1 dan zie je hoe de chip intern is georganiseerd. In het midden is een blokje ALU te vinden. Dit staat voor Arithmetic Logic Unit en is het eigenlijke rekenwonder in de µC. Deze ALU kan berekeningen uitvoeren. Om dat te doen moet er data naar deze unit worden getransporteerd. Dit gebeurt door gebruik te maken van een stuk geheugen dat is gekoppeld aan de ALU. Deze geheugens heten registers. Deze controller heeft maar één register van 8 bits breed, wat de fabrikant het werkregister noemt. Het heeft de afkorting "W" gekregen. Microcontrollers van een ander type of fabrikant kunnen er meer hebben, en soms ook nog eens een andere breedte hebben. Om een voorbeeld te geven: de Motorola 68000 heeft wel 16 registers van 32 bits breed maar dat is ook een heel wat complexere dan onze PIC. Het W register dienen we te gebruiken bij de verplaatsing van data naar de ALU en weer terug, en voor de verplaatsing tussen data-geheugens onderling.


De ALU voert de berekeningen uit maar dat is niet genoeg. Die data moet wel kunnen worden opgeslagen anders heb je er weinig aan. Zo is er op de chip 68 bytes data RAM aanwezig om onder andere waardes van variabelen en constanten in te kunnen bewaren. Deze µC heeft ook nog 11 RAM locaties die niet voor de gebruiker vrij zijn te gebruiken. Het zijn de SFR (Special Function Registers). Deze worden gebruikt om instellen van bv poorten en interrupts in op de slaan. Zie de datasheet pagina 7 voor deze speciale registers.
Hieronder zie je een "plattegrond" van het RAM geheugen. Hier kun je zien dat de nummering compleet hexadecimaal gaat. Door de h achter het getal geef je duidelijk aan dat het om een hex waarde gaat.

Indeling RAM

Je kunt hier zien dat het gebied is opgesplitst in verschillende delen. Het geheugen bestaat uit 2 banken. Bank 0 en Bank 1. Nu zit het geheugen dat vrij te gebruiken is op adres 0Ch tot 4Fh, dit is 68bytes. De 1e 11 zijn voor de speciale instellingen gereserveerd, en kun je dus niet zelf zomaar als geheugenplek gebruiken, omdat ze een speciaal doen hebben gekregen.

I/O en Poorten

Een µC heeft verschillende in- en uitgangen. Je kunt deze gebruiken als I/O. Zo kun je er van alles op aansluiten om er wat mee te besturen of te meten. Meestal zijn er een reeks pinnen die bij elkaar horen. Deze reeks of verzameling van pinnen heten een "poort". Zo heeft onze µC twee poorten. Poort A en poort B. Poort A bestaat uit 5 pinnen, en poort B bevat er 8. Als we kijken naar de datasheet (pag. 1) dan zien we dat Poort A zit op de pinnen, 1, 2, 3, 17 en 18. De pinnen van poort B zitten op de pinnummers 6, 7, 8, 9, 10, 11, 12, 13.



Pinout


Het is natuurlijk allemaal digitaal, dus kan een pin maar 2 toestanden hebben, een 1 of een 0. Voordat je de poorten kunt gebruiken moet je ze eerst instellen, namelijk of het in- of uitgangen zijn. Bijna elke pin kun je apart in- of uitgang maken. Je geeft dat aan bij de µC door in een stukje geheugen bits neer te zetten. Elke plek in dat geheugen vertegenwoordigt een I/O pin en daar kun je een 1 of 0 inzetten. Hieronder staat een stukje uit de datasheet.

Instellen van in- en uitgangen

Hier zie je dat op adres 85h het "data direction register" zit van poort A. Omdat poort A maar 5 pinnen heeft kun je alleen bit 0 t/m bit 4 instellen. De rest is toch niet van belang.
Een 0 betekent dat de pin een uitgang is. Als je er een 1 in zet dan stel je die pin in als ingang. In de kolom "Value on Power-on RESET" kun je vinden wat de waardes zijn bij de default waarde na een reset. Zo zie je dat alle I/O pinnen ingangen zijn zodra de µC wordt gereset.

Om het nog even extra toe te lichten een klein voorbeeld.


Stel: je wilt dat van poort B de pinnen RB0, RB1, RB4 en RB7 uitgangen zijn en de rest ingangen. Je moet er dus met een commando voor zorgen dat de binaire waarde 01101100 op adres 86h komt te staan. Zo staan op de plekken die die pinnen vertegenwoordigen 0'en zodat ze uitgangen zijn, en 1'en op de plekken van de pinnen die ingangen dienen te zijn.


  1   2   3   4


De database wordt beschermd door het auteursrecht ©opleid.info 2017
stuur bericht

    Hoofdpagina