of 18 /18
Elektronica en lab 3 e graad IW 1 P. Dams - W. Andries DE MICROCONTROLLERS 1 Inleiding Van 1969 tot 1971 bouwde Intel in opdracht van ontwerpers van de Amerikaanse firma Datapoint de eerste microprocessor (4004). Omdat de microprocessor ongeveer 10 keer trager werkte dan verwacht ging de koop niet door. Fig. 1: De eerste microprocessor. Intel heeft toen in 1972 besloten om het product op eigen risico op de markt te brengen. Dit gebeurde onder de codenaam 8008. Deze microprocessor werd enkele jaren later opgevolgd door de 8080. Deze microprocessor werd gebruikt om in 1975 de eerste microcomputer te bouwen. Dit was de Altair 8800 van de firma MITS. Naast de 8080 bezat deze microcomputer 256 bytes geheugen en dan toggleschakelaars en LED’s op een frontplaat. Een werkend model kostte toen rond de $2000. Fig. 2: De eerste microcomputer Voor deze computer werd een BASIC programmeertaal gemaakt door twee jonge kerels (Bill Gates en Paul Allen) die een bedrijfje stichten met de naam MICROSOFT.

DE MICROCONTROLLER

Embed Size (px)

Citation preview

Page 1: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 1

P. Dams - W. Andries

DE MICROCONTROLLERS

1 Inleiding

Van 1969 tot 1971 bouwde Intel in opdracht van ontwerpers van de Amerikaanse firma

Datapoint de eerste microprocessor (4004). Omdat de microprocessor ongeveer 10

keer trager werkte dan verwacht ging de koop niet door.

Fig. 1: De eerste microprocessor.

Intel heeft toen in 1972 besloten om het product op eigen risico op de markt te

brengen. Dit gebeurde onder de codenaam 8008.

Deze microprocessor werd enkele jaren later opgevolgd door de 8080. Deze

microprocessor werd gebruikt om in 1975 de eerste microcomputer te bouwen.

Dit was de Altair 8800 van de firma MITS. Naast de 8080 bezat deze microcomputer 256

bytes geheugen en dan toggleschakelaars en LED’s op een frontplaat. Een werkend

model kostte toen rond de $2000.

Fig. 2: De eerste microcomputer Voor deze computer werd een BASIC programmeertaal gemaakt door twee jonge kerels

(Bill Gates en Paul Allen) die een bedrijfje stichten met de naam MICROSOFT.

Page 2: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 2

P. Dams - W. Andries

In ditzelfde jaar (1975) bracht MOS-Technologies de 6502 microprocessor op de markt

aan sterkt gereduceerde prijzen. $25 in plaats van $150 voor de Intel 8080. Het is de

6502 die later zal dienen als hart voor de APPLE II. APPLE werd gesticht door Steve Jobs

en Steve Wozniak. Dit was de eerste echte personal computer.

Wanneer in 1981 I.B.M. besluit om ook een microcomputer op de markt te brengen is het

startschot gegeven voor een waanzinnige evolutie die tot op dit moment nog steeds

doorgaat.

Een microcomputer is dus een kleine computer waarin een microprocessor zorgt voor

het verwerken van gegevens. Tegenwoordig vinden we kleine computertjes overal terug.

In de weegschaal van de slager, in de kassa van de supermarkt, in de sturing van de

verkeerlichten, in auto’s, enz…

Deze microcomputers zitten als het ware ingebakken in toestellen die we dagdagelijks

gebruiken, we spreken van “embedded computers”.

Tegenwoordig zijn deze microcomputertjes zo klein dat ze in één IC zitten. We spreken

dan van “embedded controllers” of microcontrollers. Het is over deze microcontrollers

dat deze cursus handelt.

Fig. 3: De Intel 8048, de eerste microcontroller.

Wat microcontrollers betreft zijn er heel veel fabrikanten die elk hun eigen (uitgebreid)

reeks van microcontrollers verkopen. We denken dan onder andere aan Intel, Motorola,

Atmel, Microchip, Hitachi, Zilog, Dallas, Philips, Siemens, National Semiconductor, enz…

Wij gaan ons in deze cursus, na een algemene inleiding over de microcomputer,

beperken tot de ATMEGA162 uit de AVR-reeks van Atmel. Het is niet de bedoeling van

deze cursus om een diepgaande studie van een microcontroller te geven.

Wel is het de bedoeling om een goed inzicht te krijgen in de werking van een

microcontroller. Welke microcontroller men neemt speelt eigenlijk weinig rol. De meeste

microcontrollers werken op een vergelijkbare manier en dus is de overstap van één soort

microcontroller naar een andere meestal vrij makkelijk te maken.

De verschillen zitten meestal in (soms zéér belangrijke) details. Neem dus minstens één

keer de moeite om je in deze materie te verdiepen. De beste literatuur om dit te doen is

meestal niet een cursus of een boek maar wel de datasheet van het component.

Page 3: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 3

P. Dams - W. Andries

2 Microcomputers

2.1 Blokschema van een microcomputer

Onderstaande figuur toont het blokschema van een microcomputer.

Fig. 4: Blokschema van een microcomputer

De CPU, Central processing unit, is het hart van de microcomputer. De CPU is meestal

een microprocessor en heeft als doel om de microcomputer te besturen en om de

gegevens te verwerken.

De handelingen die de CPU uitvoert zijn cyclisch. Dit wil zeggen dat er een vast patroon

zit in de handelingen die de processor verricht. De CPU haalt namelijk steeds een

instructie op uit het geheugen, voert de in de instructie aangegeven bewerking uit, haalt

de volgende instructie op, enz…

Zoals je kan merken zijn er twee soorten geheugen terug te vinden. Eén geheugen wordt

gebruikt om het programma, dat moet worden uitgevoerd, te bewaren. Dit deel van het

geheugen noemen we het programmageheugen (program memory). Het

programmageheugen is niet vluchtig geheugen. Dat betekent dat dit geheugen zijn

inhoud bewaard als de voedingsspanning af is. Als de microcomputer dan opgestart

wordt dan zal dit programma uitgevoerd worden.

Een tweede deel geheugen is het geheugen waar zich de gegevens bevinden. Dit kunnen

zowel de te verwerken gegevens zijn als de resultaten die de CPU uitkomt na het

uitvoeren van het programma. We noemen dit het datageheugen (Data memory).

Een laatste deel vormt de I/O (Input – Output) of de randcomponenten. Via deze

module komen gegevens de computer binnen en worden de gegevens van de computer

terug naar buiten gestuurd.

Als input kennen we onder andere het toetsenbord, de muis, een temperatuurmeter, een

ingang voor een schakelaar, enz…

Als output kennen we onder andere het scherm, een printer, een motorsturing, een

lampje, enz…

Page 4: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 4

P. Dams - W. Andries

Het is natuurlijk noodzakelijk dat de verschillende blokken met elkaar worden verbonden.

Zo moet de CPU de verschillende instructies uit het programmageheugen kunnen

ophalen, resultaten naar de outputmodule sturen enz…

Afhankelijk van de grootte van de gegevens (aantal bits) heb je meerdere draadjes

nodig. Zo een bundel van draadjes noemen we een bus en een draadje in deze bus

noemen we een lijn.

De bus verantwoordelijk voor het doorsturen van de gegevens (data) en de

instructiecodes van het programma noemen we de databus.

In het geval van microcontrollersystemen bedraagt de breedte van de databus meestal

acht of zestien datalijnen.

De bus die aanduidt waar in het geheugen gegevens moeten worden opgehaald of

weggezet noemen we de adresbus.

In de meeste 8-bit microcontrollersystemen is de adresbus 16 adreslijnen breed. Dat

betekent dat men 162 verschillende adressen kan vormen op deze adresbus.

Naast de adresbus en de databus is er nog een derde bus. Deze bus wordt de

controlebus genoemd. Hierin vinden we controlelijnen terug zoals de read/write-lijn, de

interruptlijnen, de reset, enz… Deze lijnen controleren de richting waarin de gegevens

over de databus gaan, bepalen de werking van de computer, enz…

Op een print zijn de busstructuren meestal makkelijk terug te vinden. Ze bestaan uit een

aantal parallel lopende printbanen.

Page 5: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 5

P. Dams - W. Andries

2.2 De busstructuren.

Wanneer we het over een bus hebben dan wordt ook de richting van de

gegevenstransport op deze bus aangeduid. De richting wordt steeds bekeken vanuit de

C.P.U.

Zo zal de C.P.U. altijd bepalen waar er gegevens worden opgehaald of gelezen of waar

gegevens worden weg geplaatst of geschreven.

Dit wil zeggen dat de C.P.U. de enige blok is die informatie op de adresbus plaatst. We

zeggen dat de adresbus unidirectioneel is.

Via de databus komen gegevens zowel de C.P.U. binnen als buiten. We zeggen dat de

databus bidirectioneel is.

Fig. 5: De richting van de verschillende bussen.

Op een bus mag op een bepaald moment slechts door één deel van de microcomputer

informatie worden gezet.

Ook moeten we blokken die op een bepaald moment geen gegevens willen uitwisselen

via een bus tijdelijk van deze bus kunnen afschakelen. Hiervoor maken we gebruik van

de tri-state technologie. (Zie digitale technieken 5e jaar) Hierbij kan de toestand van een

lijn na hoog en laag ook een hoog-ohmige toestand aannemen (Z).

Fig. 6: Voorbeeld van een tri state schakeling.

Page 6: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 6

P. Dams - W. Andries

2.3 De CPU

In dit deel van de cursus bestuderen we het hart van de microcomputer. We bekijken het

blokschema en overlopen de verschillende delen hierin. De hoofdtaak van de CPU bestaat

erin om een correcte uitvoering van het programma te garanderen.

Hiervoor moet de CPU taken kunnen zoals het lezen en beschrijven van geheugen,

berekeningen uitvoeren, ingangen en uitgangen controleren.

Fig. 7: Blokschema van een CPU

2.3.1 DE Arithmetic Logic Unit (ALU)

De ALU is één van de belangrijkste onderdelen van de CPU en moet eenvoudige

rekenkundige en logische bewerkingen uitvoeren.

Fig. 8: De ALU

Page 7: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 7

P. Dams - W. Andries

De meeste bewerkingen vergen twee gegevens (bvb.: A + B). Deze gegevens noem je

de operanden. De bewerking die moet gebeuren noemen je de opcode. Een instructie

in een programma bevat altijd een opcode en een operand.

De operanden worden vanuit twee verschillende registers aan de ALU geboden en

verwerkt. Het resultaat van de bewerking wordt in een speciaal register geplaatst die je

de accumulator noemt. De uitgang heeft ook extra informatie zoals een carrybit, een

zerobit en een overflowbit weer via 1-bit uitgangen die we vlaggen noemen. Deze

vlaggen kan je als programmeur bekijken via het statusregister.

2.3.2 De accumulator

De Accumulator is een register die gebruikt wordt om het resultaat van de ALU in te

plaatsen. De terugkoppeling die je ziet wordt bij vele CPU’s toegepast om sneller

kettingebewerkingen te kunnen uitvoeren. (bvb.: A + B +C)

Fig. 9:

2.3.3 De Programma teller (programcounter)

De microprocessor haalt de uit te voeren instructies op uit het programmageheugen. De

instructies, die samen het programma vormen, zijn opeenvolgend (sequentieel) in het

programmageheugen opgeslagen. De CPU haalt deze instructies achtereenvolgens uit het

programmageheugen om te bepalen welke acties hij moet ondernemen.

Dit houdt echter wel in, dat de CPU moet weten op welke plaats de op te halen instructie

staat. De plaats in het geheugen (adres) waar de eerst volgende uit te voeren instructie

staat wordt bijgehouden in de programmateller.

De programmateller wordt automatisch met één verhoogt (geïncrementeerd) nadat een

instructie is opgehaald zodat de programmateller dan het adres van de volgende uit te

voeren instructie bevat. De programmeur dient de instructies dan wel zo in het geheugen

op te slaan, dat ze op opeenvolgende plaatsen in het geheugen staan.

2.3.4 Het instructie register.

Nadat de CPU een instructie heeft opgehaald uit het geheugen moet het in de CPU

bijgehouden worden. Dit gebeurt in het instructieregister.

Denk erom dat de opgeslagen instructie bestaat uit twee delen

De opcode vertelt welke bewerking de CPU moet uitvoeren.

De operand duid de data aan die nodig is om de bewerking uit te voeren.

Page 8: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 8

P. Dams - W. Andries

2.3.5 De instructie decoder.

De instructiedecoder zal de instructie die zich in het instructieregister bevindt

decoderen en zien of alle informatie aanwezig is om de instructie uit te voeren. Indien dit

nog niet het geval is, worden de nodige gegevens (operanden) uit het geheugen gehaald.

Wanneer alle gegevens aanwezig zijn decodeert de instructiedecoder de volledige

instructie. Het is dus nodig dat de instructiedecoder alle instructies kent die een

microprocessor kan uitvoeren.

De verzameling van alle instructies van een bepaalde microprocessor noemen we de

instructieset. De instructieset van een bepaalde processorfamilie kan je verkrijgen bij

de fabrikant ervan. Het vervelende is echter dat de instructieset van processorfamilie tot

processorfamilie sterk verschilt. Het is hierom dat je de hogere orde taal Bascom-AVR zal

leren. Deze zal d.m.v. de compiler het geschreven programma vertalen in de instructies

die de processor begrijpt.

2.3.6 De control Unit

De control unit zal alle nodige handelingen doen om de instructie uit te voeren

(execution), nadat de gehele instructie gedecodeerd is. Eénmaal de instructie volledig is

uitgevoerd kan de processor beginnen met het ophalen van de eerstvolgende uit te

voeren instructie.

2.3.7 De stack en stackpointer

In een processor is meestal een klein stukje geheugen aanwezig dat je kan gebruiken om

kleine dingen tijdelijk te bewaren. Je kan het vergelijken met een klein notaboekje.

Dit geheugen werkt volgens een speciaal principe dat we LIFO noemen. Dit staat voor

Last In First Out. Dit wil zeggen dat het gegeven dat je er laatst instopte er ook eerst

terug uit moet worden genomen. Dit geheugen noemen we de stack.

De stackpointer bevat het adres van de eerstvolgende vrije geheugenplaats in de stack.

2.3.8 De general purpose registers

Dit zijn registers die vrij bruikbaar zijn voor verschillende toepassingen. Meestal hebben

general purpose registers een speciale functie voor sommige instructies. Als

programmeur kan je zelf ook wat data in deze registers stoppen. Het voordeel hiervan is

dat je weet dat deze data vlug ter beschikking is omdat ze zich in de CPU zelf bevindt.

2.3.9 De Timing en klok

De microprocessor is een synchrone digitale schakeling die werkt volgens een vast ritme.

In een microprocessor zit meestal een oscillator die een timingschakeling aanstuurt.

Deze timingschakeling zorgt ervoor dat al de acties van de processor volgens een vast

tijdschema verlopen.

De frequentie waarop de oscillator oscilleert kan bepaalt worden door het kristal dat

wordt aangesloten. In sommige gevallen kan ook een resonator worden aangesloten.

Het ritme waarop de processor werkt is bij sommige processors een deeltal van de

aangesloten klokfrequentie.

Page 9: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 9

P. Dams - W. Andries

3 Geheugenstructuur.

In het eerste schema hebben we een onderscheid gemaakt tussen het programma

geheugen en het data geheugen. Het zijn twee aparte blokken in onze computer.

Er zijn nu twee manieren om deze twee blokken in het geheugen te zetten.

3.1 Harvard geheugenstructuur.

In de Harvard geheugenstructuur zijn het datageheugen en het programmageheugen

fysisch gescheiden van elkaar. Elk geheugen krijgt ook zijn eigen bussen.

Dit zorgt ervoor dat :

Data en instructies tezelfdertijd kunnen opgehaald worden.

Harvard structuur vlugger werkt dan Von Neumann.

Fig. 10: Harvard Geheugenstructuur.

3.2 Von Neumann geheugenstructuur.

Processores die deze voorzieningen niet hebben en het totale geheugenbereik

geheugenplaatsen moeten verdelen over zowel data als programmageheugen werken

volgens de Von Neumann geheugenstructuur. Het blokschema op figuur 4 is dus

volgens het Von Neumann geheugenstructuur getekend.

Fig. 11: Von Neumann geheugenstructuur.

Page 10: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 10

P. Dams - W. Andries

4 De Von Neumann cyclus

De verwerking van een instructie in een Von Neumann architectuur is tijdens de

bespreking van de CPU eigenlijk al aan bod gekomen. Je weet ook al dat een CPU

cyclisch werkt. Dat wilde zeggen dat de CPU een instructie uit het geheugen haalt, die

uitvoert, een nieuwe instructie uit het geheugen haalt, enz..

We vatten de verschillende fasen van één cyclus nog even kort samen:

Fig. 12: De Von Neumann cyclus.

De eerste fase in het proces is de instruction fetch. Het ophalen van de instructie

(instruction fetch) uit het programmageheugen gebeurt in twee stappen.

In de eerste stap stuurt de CPU het adres, dat door de programmateller wordt

aangegeven, via de adresbus naar het programmageheugen. Het bij dit adres

horende geheugenwoord wordt geselecteerd.

In de tweede stap geeft het programmageheugen de inhoud van het

geadresseerde geheugenwoord af aan de CPU. De CPU bergt deze inhoud op in

het instructieregister.

In een tweede fase van het proces gaat de instructiedecoder de instructie in het

instructie register decoderen. Voor sommige instructies heeft de CPU aan dit ene

instructiewoord voldoende informatie om deze instructie uit te voeren. Men spreekt dan

van een één-byte-instructie.

Er zijn echter ook instructies die een tweede of soms nog een derde byte nodig hebben

om de uitvoering van de instructie te kunnen voltooien

In de derde fase van het proces wordt de programmateller met één verhoogt. Indien

we te maken hebben met een twee-byte-instructie of een drie-byte-instructie zal de CPU

nog één of twee bytes uit het geheugen moeten ophalen alvorens de uit te voeren

instructie volledig is.

Eénmaal alle bytes binnen zijn kan de CPU aan de vierde fase van het proces beginnen

namelijk het uitvoeren van de volledige instructie. Deze fase noemen we de

“instruction execution”.

Deze manier van werken staat bekend als de Von Neumanncyclus.

Johann Von Neumann was een Hongaars wiskundige die leefde van 1903 tot 1957. Hij

creëerde in de veertiger jaren een computer die volgens dit principe werkte.

Page 11: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 11

P. Dams - W. Andries

5 De ATmega162.

In 1993 introduceerde ATMEL zijn AVR-familie. De AVR microcontrollers van ATMEL zijn

RISCmicrocontrollers (Reduced Instruction Set Computer). Dit zijn microcontrollers die in

principe weinig instructies kennen maar ze wel zeer snel kunnen uitvoeren.

De ATmega162 kent 131 instructies en voert de meeste instructies uit in één cyclus. Dit

wil zeggen dat wanneer hij wordt uitgerust met een 10 MHz kristal hij tot 10Mips

(miljoen instructies per seconde) kan verwerken.

5.1 Blokschema

Fig. 13: Blokschema van de ATmega 162

Page 12: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 12

P. Dams - W. Andries

Wanneer we bovenstaand blokschema bekijken dan herkennen we een boel blokken die

we reeds in de vorige bladzijden hebben besproken. We overlopen even de blokken de

we reeds kennen.

Program Counter (programmateller),

16kB Program Flash (programmageheugen),

Instruction Register,

Instruction Decoder,

Control Lines + MCU control register & timing (controle eenheid),

Stack pointer,

1 kByte SRAM (vluchtig geheugen waarin zich onder andere de data en de stack

bevindt),

512Byte EEprom (niet-vluchtig geheugen waar ook data kan worden opgeslagen),

32 General Purpose Registers ,

ALU,

Status Register (bevat oa. de vlaggen van de ALU),

Oscillator en Timing and Control.

De overige blokken gaan we kort bespreken zodat je een idee hebt van de mogelijkheden

van deze microcontroller.

5.2 De Watchdog timer. (Datasheet : p.53)

De ATmega162 is uitgerust met een watchdog. Het doel van deze unit is ervoor te

zorgen dat een microcontroller niet gaat “hangen”. Dit komt voor wanneer een

programma in een eindeloze lus terecht komt. Je zal het in windows zeker en vast al

hebben tegen gekomen. Je start een programma op en plotseling doet het niets meer.

Wanneer je dan in taakbeheer gaat kijken merk je dat er bij het respectievelijke

programma staat “programma reageert niet meer”.

Een watchdog laat toe om dit te detecteren. De watchdog werkt met een interne

oscillator van 1MHz. Dit kloksignaal wordt aan een deler toegevoegd (instelbaar als 16

tot 2048 deler via WDP0,1,2).

Wanneer de teller een overflow krijgt zal de controller automatisch worden gereset.

De bedoeling is dat je in je eigen programma de watchdog-teller zelf gaat resetten

vooraleer hij een reset geeft aan de controller. Wanneer je eigen programma nu “hangt”

zal de watchdog-teller niet worden gereset en na verloop van tijd (16ms tot 2048ms) een

reset van de controller genereren. Deze controllerreset zal er voor zorgen dat je

programma terug wordt opgestart.

Fig. 14: De watchdog timer

Page 13: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 13

P. Dams - W. Andries

5.3 Interrupts

De ATmega162 voorziet in 28 verschillende interrupts. Een interrupt is een gebeurtenis

waarbij de microcontroller een speciaal programma moet uitvoeren. Dit stuk programma

noem je de interrupt service routine.

Deze interrupts en de reset hebben elk hun eigen vectoradres. Dit is het adres waar de

microcontroller onmiddellijk naar toe springt indien de overeenkomstige interrupt

optreedt. Op die plaats moet dan het programma staan dat de controller dan moet

uitvoeren.

Voor een volledig programma is er echter niet voldoende plaats. Daarom zal op de plaats

van het vectoradres enkel een spronginstructie staan naar de eigenlijke programmacode

die op dat moment moet uitgevoerd worden, d.i. de interrupt service routine.

Het gebruik van interrupts moet wordt aangegeven door verschillende vlaggen. Eerst en

vooral is er de general interrupt flag. Dit is een soort hoofdschakelaar die het gebruik

van interrupts toelaat of uitschakelt.

Daarnaast moet elke interrupt op zich ook nog eens worden geactiveerd. Dit gebeurt

door een aparte vlag per interrupt.

Fig. 15: Reset en interrupt vector tabel. De prioriteit van de interrupts is afhankelijk van de plaats in het geheugen. Des te lager

de interrupt in het geheugen is gelegen, des te hoger de prioriteit. Dit wil dus zeggen dat

de reset de hoogste prioriteit heeft en de analoge comparator de laagste prioriteit.

Page 14: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 14

P. Dams - W. Andries

5.4 De I/O poorten.

De ATmega 162 heeft 5 bidirectionele I/O poorten (poorten A, B, C, D en E). De poorten

A, B, C en D hebben 8 pinnen en poort E heeft er slechts 3. In totaal zij er dus 35 I/O

lijnen.

Elke poort heeft drie registers die er mee samenhangen:

De port data register (R/W) : Dit register bevat de data die naar buiten

moet gestuurd worden.

De port data direction register (R/W) :Dit register en bepaalt of een pin als

input of als output fungeert.

De port input pins (R!) : Dit zijn de pinnen van de poort zelf.

Alle pinnen van de poorten hebben individuele pull-up weerstanden. Elke poortpin kan

20mA sinken en dus rechtstreeks een LED aansturen. (p.267 max stromen!) Wanneer de

pinnen als ingang fungeren en extern laag worden getrokken dan zullen de pinnen

stroom (sturen) sourcen indien de interne pull-ups zijn geactiveerd.

Wanneer PORTB wordt gelezen leest men het data register van poort B. Wanneer PINB

wordt gelezen leest men de niveaus aan de pinnen van poort B.

Hoe gebruikt men nu een pin PBx van poort B als algemene digitale I/O pin?

Wel de bit DDBx in het data direction register bepaalt de richting van de pin. Indien

DDBx één gemaakt is dan is PBx geconfigureerd als uitgang en als DDBx op nul staat is,

dan is PBx geschakeld als ingang en is de pull-up weerstand geactiveerd. Om de pull-up

weerstand uit te schakelen moet je dan PORTBx nul maken of de pin als uitgang

configureren.

Fig. 16: Algemene schakeling van een I/O pin (zonder alternatieve functie)

Page 15: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 15

P. Dams - W. Andries

5.5 Alternatieve functies van de 35 I/O lijnen.

Naast het gebruik als gewone input of output hebben vele van deze pinnen een

alternatieve functie. Dit betekent dat deze pinnen ook gebruikt kunnen worden om een

speciale functie te dienen.

Fig. 17: Alternatieve functies van poort A

Fig. 18: Alternatieve functies van poort B Ook de poorten C,D en E hebben alternatieve functies. Indien je meer wenst te weten

over het gebruik van een alternatieve functies kan je altijd de uitgebreide uitleg lezen in

de datasheets vanaf pag. 69

Page 16: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 16

P. Dams - W. Andries

5.6 De analoge comparator.

De analoge comparator vergelijkt de ingangsspanningen op de ingangen Ain0 (

alternatieve functie van PB2) en Ain1 (PB3). Indien de spanning op Ain0 hoger is dan

deze op Ain1 dan zal de uitgang van de comparator AC0 geset worden.

De uitgang van de comparator kan gelezen worden door de microcontroller. Het is ook

mogelijk om deze uitgang met een interrupt te verbinden. Het is zelfs mogelijk om met

deze uitgang de Timer/Counter1 input capture ingang te triggeren.

Fig. 19: De analoge comparator

5.7 SPI

De Serial Peripheral Interface is een synchrone seriële interface die in staat is om op

hoge snelheid data te transfereren. Wij maken van deze interface gebruik om het

programmageheugen te programmeren.

Page 17: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 17

P. Dams - W. Andries

5.8 USART

USART is de afkorting van Universal Synchronous Asynchronous Receiver (RX) and

Transmitter (TX). Het is een deel in de controller dat zorgt voor de synchrone of

asynchrone seriële communicatie.

De ingebouwde UART heeft volgende eigenschappen:

Full-duplex,

Asynchrone of synchrone verzending,

Baud rate generator

8 of 9 databits, 1 of 2 stopbits

Overrun detectie

Framing error detectie

Afzonderlijke interrupts bij volledige ontvangst of verzending van een frame en bij

een leeg zendregister.

In principe is communicatie vrij eenvoudig. Je plaatst de te verzenden databyte in het

UART data register (UDR). Deze byte wordt in een frame geplaatst en door het TX

schuifregister automatisch verzonden.

Wanneer het frame verzonden is zal opnieuw een byte uit het data register genomen en

verzonden worden. Het verschil tussen synchrone en asynchrone verzending van de data ligt in het al dan

niet gebruiken van een kloklijn. Via UMSEL bit in het UCSRC register kan gekozen worden

tussen beide types verzending.

Bij synchrone verzending wordt een kloklijn naar de ontvanger gestuurd. Via de flanken

op deze lijn kan de ontvanger weten wanneer een frame begint of stopt en wanneer een

nieuwe databit gelezen kan worden.

Bij asynchrone verzending wordt gebruik gemaakt van een interne klok. Zowel de zender

als de ontvanger moet weten welke de ingestelde snelheid is. Op basis hiervan worden

een aantal stalen genomen van de data lijn. Het aantal stalen is dan veel groter dan het

aantal bits.

Page 18: DE MICROCONTROLLER

Elektronica en lab 3e graad IW 18

P. Dams - W. Andries

5.9 Power management en slaapmodes

Slaapmodes zorgen ervoor dat de gebruiker bepaalde ongebruikte delen van de

microcontroller kan uitzetten om het vermogengebruik te beperken.

De ATmega162 voorziet vijf slaapmodes:

1. Idle : SPI, USART, Comparator, Timer/counter, watchdog en

interrupt logica werken nog. De CPU werkt niet.

Via de interrupts kan de CPU weer ontwaken.

2. Power-down

3. Power-save

4. Standby

5. Extended-standby

De gebruiker kan kiezen voor één van deze modes via de SM (sleep mode) bits in de

controle registers van de CPU.