Download as pdf or txt
Download as pdf or txt
You are on page 1of 18

Elektronica en lab 3e graad IW

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 LEDs 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.
P. Dams - W. Andries

Elektronica en lab 3e graad IW

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 autos, 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 zr 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.

P. Dams - W. Andries

Elektronica en lab 3e graad IW

2
2.1

Microcomputers
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. En 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

P. Dams - W. Andries

Elektronica en lab 3e graad IW

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

216 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.

P. Dams - W. Andries

Elektronica en lab 3e graad IW

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 5 e 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.

P. Dams - W. Andries

Elektronica en lab 3e graad IW

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
P. Dams - W. Andries

Elektronica en lab 3e graad IW

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 CPUs 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 (gencrementeerd) 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.

P. Dams - W. Andries

Elektronica en lab 3e graad IW

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. Enmaal 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.
P. Dams - W. Andries

Elektronica en lab 3e graad IW

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.


P. Dams - W. Andries

Elektronica en lab 3e graad IW

10

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. Enmaal 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 creerde in de veertiger jaren een computer die volgens dit principe werkte.
P. Dams - W. Andries

Elektronica en lab 3e graad IW

11

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


P. Dams - W. Andries

Elektronica en lab 3e graad IW

12

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
P. Dams - W. Andries

Elektronica en lab 3e graad IW

13

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.

P. Dams - W. Andries

Elektronica en lab 3e graad IW

14

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)


P. Dams - W. Andries

Elektronica en lab 3e graad IW

15

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

P. Dams - W. Andries

Elektronica en lab 3e graad IW

16

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 serile interface die in staat is om op hoge snelheid data te transfereren. Wij maken van deze interface gebruik om het programmageheugen te programmeren.

P. Dams - W. Andries

Elektronica en lab 3e graad IW

17

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 serile 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.
P. Dams - W. Andries

Elektronica en lab 3e graad IW

18

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.

P. Dams - W. Andries

You might also like