atmega128

advertisement
Projectwerk hardware:
De ATMEGA128
microcontroller
Doel van het labo
• Kenmerken van microcontrollers bestuderen
• Zelfstandig bestuderen van onbekende componenten
aan de hand van technische documentatie
(datasheets, schema’s, …)
• Zelfstandig analyseren en oplossen van een typisch
praktisch microcontroller probleem
• Realtime debugging technieken in tegenstelling tot
breakpoint based debugging
Vereiste voorkennis
• Microprocessoren
• C (gebruik van pointers !!!)
• Basiskennis analoge en digitale elektronica
Evaluatie
• 10pt: Voltooiingsgraad opdracht (testbenches niet
vergeten !!!)
• 5pt: Kwaliteit code
–
–
–
–
Commentaar (belangrijk: becommentariëring functies)
Modulariteit, parametriseerbaarheid
Vermijden van blocking code (wordt verder besproken)
Leesbaarheid code (geen spaghetti code!)
• 5pt: Permanente evaluatie
– Nakomen van afspraken, efficiëntie in foutoplossen, inzet, …
Praktische afspraken
• Cursustekst
– Aanwezig in mappen in het labo
– Te downloaden van de labowebsite
Belangrijkste kenmerken
• MICROCONTROLLER  geheugen en interface logica zijn geïntegreerd in
één IC
• Zeer snel in te zetten: als enige externe component is een klokkristal nodig.
• Toepassingen
– Veiligheidstoepassingen (airbag systemen, alarmen, beveiliging van industriele
robots,…)
– Goedkope consumerartikelen (thermometers, wekkers, wenskaarten,…)
– Submodules (displays, keyboardmodules, powercontrollers, motorcontrollers,
batterypacks,…)
• De ATMEGA128 is lid van de AVR reeks, gaande van
ATTINY controllers met 1kB geheugen, kostprijs ca 1 EUR
tot
ATMEGA controllers met 256kB geheugen, kostprijs ca 15 EUR
• In tegenstelling met 6809 & PC: in de AVR microcontrollers wordt een
Harvard architectuur gehanteerd: gescheiden programma en data bus.
Voordeel: terwijl data gelezen/geschreven wordt kan de volgende instructie
uit het programmageheugen opgehaald worden
zie datasheet
p3
Klokoscillator
• Microcontroller: synchroon systeem  klok nodig
• Bron:
– Extern signaal (via XTAL1 pin)
– Extern klokkristal (via XTAL1 en XTAL2 pinnen)
– Interne RC oscillator (minder stabiel)
• Hoe lager de klokfrekwentie hoe minder vermogen verbruik;
– 1MHz: 12mW
– 20MHz: 200mW
• Ter vergelijking: moderne PC processor: 50-100 W !!
• De AVR microcontrollers zijn RISC processoren  elke
klokcyclus wordt meestal één assembler instructie afgehandeld.
Programma geheugen
• 128 kB programmageheugen; genoeg voor ca 20000 regels C
code, afhankelijk van de structuur, gebruikte libraries.
• Georganiseerd in 64k x 16 bit (instructies zijn 16 bit breed)
• Harvard  gescheiden van datageheugen
• FLASH geheugen: behoudt zijn inhoud bij stroomuitval
• Programmeren van het geheugen
–
–
–
–
Via een parallele programmeerinterface (weinig gebruikt)
Via een JTAG interface
Door de microcontroller zelf ( Bootloader !)
Via een SPI interface
• ‘C’ file  Codevision  ‘.ASM’ file  ‘Assembler’  ‘.HEX’ file
• Nuttig : ‘.LST’ file: gegenereerde ASM code, samen met de
oorspronkelijke C code
SPI
MOSI
0 1 2 3 4 5 6 7
SCK
MISO
• een SPI interface is in weze een schuifregister
– Data wordt via de MOSI lijn ingeshift (input)
– Data wordt via de MISO lijn uitgeshift (output)
• Synchrone serïele bus: het kloksignaal wordt via een externe lijn
doorgegeven
Const data in FLASH onder
Codevision
• Codevision C compiler kent een uitbreiding om data
in FLASH te stockeren: ‘flash’ keyword
• Bv
flash char t[]={“Hello world”};
• Deze data is read only!
t[0]=‘a’;  ongeldig!!
Data A/D bus
• 8 bits brede databus, 16 bit brede adres bus
• 32 registers waarvan een aantal voor indirecte
addressering worden gebruikt  Veel meer
dan klassieke processoren zoals 6809
• 224 I/O registers (aansturen van
randapparatuur)
• 64 laagste I/O registers zijn bitadresseerbaar
• 4 kB interne data SRAM
• Via externe (gemultiplexte) A/D bus
uitbreidbaar (ook voor externe
randapparatuur)
Organisatie van data memory
door de Codevision C -compiler
Functieparameters
Lokale variabelen
Interrupt context-save data
Globale variabelen
Static variabelen
Functie en interrupt return adressen (PC push)
Heap, gebruikt door malloc()
Bitadressering in codevision
• Bijvoorbeeld:
PORTB.3 = 1;

SBI 0x18,4
PORTB = PORTB | 0b00001000;

LDS R30,0x18
ORI R30,8
STS 0x18,R30
• Echter alleen mogelijk op onderste 64 IO reg.
PORTG.4=1;  ongeldig!! (PORTG heeft IO reg adres 69)
AVR C datatypes
• char : 8 bit
• int = short : 16 bit
• long: 32 bit
• float = double : 32 bit
EEPROM
•
•
•
•
•
•
•
•
4 kB EEPROM
FLASH: wordt gewist, herschreven in blokken (banken)
EEPROM: wisbaar en schrijfbaar per byte
Toepassing: calibratiegegevens, gebruikersinstellingen,…
Toegang via speciale I/O registers. Niet rechtstreeks in A/D bus gemapt
Kan ook via programmeerinterface gewist/beschreven worden
Schrijven: zeer traag;10ms per beschreven byte
Opgelet: gespecifieerd op 100 000 x schrijven/wissen
EEPROM data onder Codevision
• Codevision C compiler kent een uitbreiding om data
in EEPROM te stockeren: ‘eeprom’ keyword
• Bv
eeprom int ep_a=45;
• Aanrader: EEPROM data manueel bufferen in RAM
 sneller
IO pinnen
• Toegang via IO registers op de A/D bus
• In totaal zijn er 45 IO pinnen op de microcontroller;
onderverdeeld in PORT A,B,C,D,E,F,G
• Elke PORT heeft max 8 lijnen (gecodeerd in een 8 bit register)
• Elk van deze lijnen kan onafhankelijk als input of output
geschakeld worden (via een Data Direction register). Verder is
het mogelijk softwarematig een pull-up weerstand in te
schakelen indien een lijn als input wordt gebruikt
• Veel van deze lijnen worden ook voor alternatieve functies
gebruikt zoals comparators, UARTs, kloklijnen,ADC’s,… In veel
gevallen zal deze alternatieve functie de controle over de
bijhorende pinnen overnemen.
Interrupts (1)
• Signaal (extern of intern)
• Onderbreekt de normale programmaflow, dwingt de
processor naar een subroutine te springen
• Deze subroutine: ISR (Interrupt Service Routine)
• Na afloop van de subroutine: RETI instructie:
processor hervat de programmaflow
• Doel:
– dringende hardware gebonden activiteiten afhandelen
– Interrupt onder invloed van timer: tijdskritische activiteiten
afhandelen
Interrupts (2)
• 8 externe interrupt lijnen (op PORTD, PORTE)
– Configureerbaar voor interrupt op stijgende / dalende flank /
laag niveau
• Verder nog 26 interne interrupt lijnen
– Deze lijnen worden door interne randapparatuur (UARTs,
ADC, Timer,…) aangesproken
• Aan / uit schakelen van interrupts
– Elke interrupt kan via een MASK bit aan/uit geschakeld
worden
– Een Global Interrupt Enable (GIE) bit schakelt alle interrupts
gezamenlijk aan/uit
• Een interrupt die getriggerd is, wordt via een FLAG
bit gemarkeerd. Indien MASK actief: ISR wordt
uitgevoerd
Interrupts onder Codevision
• Interrupt keyword: speciaal type functie:
Bv
interrupt[EXT_INT0] ExterneInterrupt(void)
{
…
}
• Deze functie wordt automatisch aangeroepen,
onderbreekt de normale programma flow.
• Interrupt definities (zoals EXT_INT0) zijn terug te vinden in
mega128.h
USART
•
•
•
•
•
•
•
•
USART: Universal Synchronous/Asynchronous Receiver and Transmitter
Aangesloten op A/D bus
We gebruiken USART meestal als UART
Deze UART kan mits een spanningsconverter rechtstreeks een RS-232
bus aansturen/uitlezen.
Twee externe lijnen nodig: Transmit, receive
Schrijf en leesoperaties kunnen onder interrupt gebeuren
Instelbaar (baudrate, lengte, startbits, stopbits, interrupts, …) via
configuratie registers (UBRRx, UCSRxA, UCSRxB, UCSRxC)
Data schrijven / uitlezen via UDRx register
UART (1)
• Asynchrone seriële communicatie (geen klok)
• Point to point
UART (2)
Protocol:
• Rusttoestand: hoog
• 1 startbit
• 5 – 9 databits (meestal 8)
• Optioneel: pariteitsbit
• 1 of 2 stopbits (meestal 1)
Transmissiesnelheid:
• Bepaald door de BAUDRATE = 1/T
• Standaardbaudrates (300, 1200, 2400, 4800, 9600, 19200, 38400,
57600,115200)
T
UART (3)
ATMEGA128 UART:
Logische 0: 0V
Logische 1: 5V
RS-232 standaard (COM poort PC)
Logische 0: 10 tot 15 V
Logische 1: -10 tot -15 V
 Convertor nodig tussen ATMEGA128 UART en COM poort
Timer / Counters (TC’s)
• Op de A/D bus: 4 TC’s
– TC0, TC2 : 8 bit
– TC1,TC3 : 16 bit
• Een TC is opgebouwd rond een binaire teller
• Wordt geklokt op een opgedeelde (prescaled)
processorklok (bv /4 /8 /64 , … )
• De telstand kan softwarematig gezet/gelezen worden
(TCNTx register)
• Verschillende werkingsmodes
• Configuratie via TCCRxA, TCCRxB, TCCRxC, TIMSK
Normal mode
• De teller loopt in opwaartse richting tot de maximale waarde. Daarna
springt deze terug naar 0 (overflow)
• De maximale waarde (MAX) wordt bepaald door de breedte van de
TC.
• Bij overflow kan een interrupt gegenereerd worden
Timer output compare:
• TCNT (tellerregister) telt in opwaartse richting
• Als TCNT = OCR  output compare actie!
• Output compare actie:
– Genereren van een interrupt
– Set,reset of toggle van een OC pin (meerdere OC’s per TC)
• Meerdere OC eenheden per TC
Timer output compare:
Voorbeeld:
Klok: 10MHz, Timer 1 ingesteld op reset van pin PB5 (OC1A) bij output
compare actie
OCR1A=1000;
PB5
TCNT1=0;
0µs
100µs
PORTB.5=1;
…
Clear Timer on Compare
• Grotendeels identiek aan vorige mode
• Echter: TCNT start terug op 0 na TCNT=OCR
• Nut: blokgolf / interrupts genereren aan een instelbare frequentie
• Voorbeeld:
Klok: 10MHz, Timer 1 ingesteld in CTC mode, interrupt op TCNT=OCR
OCR=1000
 Interrupt om de 100 µs
Timer input capture:
• TCNT (tellerregister) telt in opwaartse richting
• Bij detectie van een instelbare gebeurtenis (set, reset of toggle) van
de IC pin wordt de huidige TCNT tellerstand gekopieerd in ICR
Timer input capture:
• Voorbeeld:
– Inkomende blokgolf op PD4 (IC):
– We wensen de periode / frequentie van deze blokgolf te meten
ICR1=TCNT1
IC interrupt
ICR1=TCNT1
IC interrupt
periode=ICR1-oICR1
periode=ICR1-oICR1
oICR1=ICR1
oICR1=ICR1
Phase Correct PWM mode (Pulse Width Modulation)
• Autonoom genereren van een signaal met continu instelbare
pulsbreedte
• TCNT loopt van 0  TOP  0
• TOP is instelbaar
• Frequentie uitgangssignaal wordt bepaald door bron kloksignaal
(processor klok), prescaler en TOP waarde
• Pulsbreedte wordt in OCR opgeslagen
Phase correct PWM
TCNT
OC
MAX
TOP
OCR
t
Andere randfuncties
•
•
•
•
•
Watchdog
Analoge comparator
Analoog  digitaal converter
Two Wire Interface
SPI interface
Opdrachten
• Per groep van 2 studenten
• Te kiezen tegen zitting 2
• Overzicht opdrachten:
–
–
–
–
Bewegingsdetector
Temperatuursensor
2D elektronische waterpas
PWM motor snelheidsregelaar
AVRCON128
• Zie schema cursustekst
Download