AVR microcontroller tutorial

Gepost door Bastiaan Steenbergen op maandag 28 juli 2003

Inleiding

Bij deze microcontroller tutorial willen we je leren wat een microcontroller is en hoe je deze 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 thuis zelf kunt experimenteren met een echte microcontroller. Het is wel vereist dat je al wat kennis hebt van digitale techniek. Ook ga ik er vanuit dat je het decimale, binaire en hexadecimale getallenstelsel kent. Als dit niet het geval is dan raad ik je aan om eerst hier wat over op te zoeken en te leren. Vooral in het begin zijn binaire getallen heel belangrijk.

Ik weet zeker dat er een wereld voor je open gaat en dat je na deze tutorial meer en meer erover wilt weten. Laat deze tutorial het begin zijn van een mooie basis voor toekomstige projecten.

Wat is een microcontroller

Een microcontroller is een digitaal IC dat volledig programmeerbaar is en taken kan verrichten. Intern bevat het vele geavanceerde hardware, zoals een ALU. Dit is een rekeneenheid die logische berekeningen kan uitvoeren. Ook bevat het een klein RAM geheugen om waardes in op te slaan. Daarnaast zit er ook vaak nog een EEPROM in. Dit is een geheugen wat zijn waardes behoud, ook zodra de spanning wordt weggehaald. Verder bevat het een ROM geheugen waarin je je eigen geschreven programma kunt laden. De chip zal, als die wordt ingeschakeld, het door jouw geschreven programma gaan uitvoeren. Om met de buitenwereld te kunnen communiceren zijn ze ook uitgerust met in- en uitgangspinnen, meestal word dit I/O genoemd (Input/Output). 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. Bij deze tutorial wordt er gebruik gemaakt van een Atmel controller. Zodra je redelijk bekent bent met deze µC zul je weinig moeite ondervinden bij het leren van een andere, aangezien de techniek en werking van de meeste controllers op elkaar lijkt.

Welke types zijn er

Er bestaan veel verschillende types. Elk met hun eigen karakteristieken en functionaliteiten. Zo zijn erbij die alleen normale I/O poorten hebben, maar zijn er ook die speciale functies bezitten zoals, zoals A/D converters, RS232 ingebouwd protocol, PWM regeling, enz. 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. De µC's zijn in vele verschillende behuizingen te verkrijgen. Enige voorbeelden, PDIP, TQFP, MLF, en SO.

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. Door gebruik te maken van de In-Circuit Programming mogelijkheid van vele AVR’s is het niet eens nodig de chip te verwijderen en kun je het programma updaten terwijl die in de schakeling blijft zitten. Ook het testen en simuleren van een programma is zeer gemakkelijk. Een ander voordeel is dat je veel functionaliteit krijgt en er weinig ruimte voor hoeft in te leveren op je printplaat. Dit geldt vooral bij het gebruik van de SMD versies.
Kijk je naar wat controllers kosten en vergelijkt met wat je allemaal ermee kan doen dan kosten ze zowat niks.

Nadelen

Ook zitten er natuurlijk nadelen aan µC's. Zo moet je redelijk wat kennis hebben van hun werking wil je iets bruikbaars in elkaar zetten. Zowel op hard- als software gebied. Ook moet je moet beschikken over een stuk hardware waarmee je de µC kunt programmeren. Afhankelijk van de programmeertal die je gaat gebruiken kan je ook nog eens veel geld kwijt zijn aan de benodigde ontwikkelsoftware.
Al met al zijn de nadelen te verwaarlozen als je ziet wat de voordelen zijn. Hierdoor maakt de professionele industrie al langer en steeds meer gebruik van µC's. Microcontrollers zijn te vinden in bijna elk denkbaar apparaat dat tegenwoordig op de markt wordt gebracht. Enkele voorbeelden: GSM, koelkast, auto, alarmsysteem, wasmachine, pc, stereotoren, videorecorder, fotocamera’s, mp3speler, tv-afstandsbediening, joystick, horloge, enz.

Waarom Assembler

Bij deze tutorial wordt gebruik gemaakt van de programmeertaal assembler. Net zoals C, C++, Java, Basic, enz. ook programmeertalen zijn. Toch onderscheid assembler zich iets van de andere “hogere programmertalen” zoals C. Assembler noemt men een lagere programmeertaal omdat deze dichter bij de hardware staat. Je bedient vrijwel direct de hardware met assembler codes. Bij C is dit niet het geval. Een hogere programmeertaal moet worden gecompileerd. Dit proces maakt van bepaalde stukken C-code assembler instructies. En deze assembler instructies worden dan weer geassembleerd tot machinecode.
Het proces van hogere programmeertaal -> assembler heet, compileren.
Het proces van assembler -> machinecode heet, assembleren.

Het gaat de processor/controller uiteindelijk om de machinecode omdat dat het enigste is wat die begrijpt. Mensen begrijpen een taal zoals Nederlands, Engels, enz. Een processor praat alleen maar in machinecode welke bestaat uit een hexadecimale getallenrij. Iets wat voor ons totaal niet te lezen zou zijn.

Omdat wij geen machinecode kunnen lezen en dus ook niet kunnen schrijven is er assemblercode ontwikkelt. Zo kan de men via een soort mnemonics toch een programma schrijven in een taal die redelijk begrijpelijk is voor de mens. Door de steeds groter wordende programma’s en complexiteit kwam er de behoefte voor een taal die nog makkelijker was en dichter bij de menselijk taal stond. Hierdoor werd er een hogere programmeertaal ontwikkelt, zoals C, C++, enz. Deze taal staat, qua code gezien dichter, bij de menselijk taal en daardoor meer verwijdert van de processortaal. Dit is de reden van de toevoeging 'hogere' bij programmertaal.

Weergave van talenniveau'sWeergave van talenniveau's

Microcontrollers kunnen dus op verschillende manieren worden geprogrammeerd, waarbij C het makkelijkst is, of welk andere hogere taal dan ook. Toch is ervoor gekozen om bij deze tutorial gebruik te maken van assembler code. De reden hiervan is dat de code dichter bij de hardware staat en je dus ook meer betrokken bent bij de handelingen die de controller uitvoert op hardwareniveau. Iets wat belangrijk is aangezien de controller met andere hardware moet gaan communiceren/werken. Assembler is daarom een goede basis en mocht er behoefte aan zijn dan is de overstap naar een hogere taal niet groot.