Navigatie |
PIC microcontroller tutorialGepost door Bastiaan Steenbergen op donderdag 4 december 2003 00:33HardwareDe 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. Hier kun je die downloaden. 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. 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. ![]() 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. Om het nog even extra toe te lichten een klein voorbeeld. |
|
|
© 1999-2008 Circuits Online Team. 47.84 ms Valid XHTML 1.0 |