Projectwerk microcontrollers:
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
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. Criteria voor het gebruik van microcontrollers Compact (weinig randcomponenten, hoge integratiegraad, kleine package) Zeer zuinig (enkele ma) Goedkoop Flexibel (herprogrammeerbaar) < -- > vaste logica Toepassingen: automotive (parkeersensor, ECU, airbags, ruitenwissers, ) Batterypacks Motorcontrollers Domotica 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 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
Protocol: Rusttoestand: hoog 1 startbit 5 9 databits (meestal 8) Optioneel: pariteitsbit 1 of 2 stopbits (meestal 1) UART (2) 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; TCNT1=0; PORTB.5=1; PB5 0µs 100µs
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 oicr1=icr1 periode=icr1-oicr1 oicr1=icr1
Pulse Width Modulation (PWM) V PWM I PWM I MAX t H V MAX T t We aanzien R Lamp als constant (geen PTC gedrag) P gemiddeld V max I max D D th T
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 TCNT OC MAX Phase correct PWM TOP OCR t
ADC Successive approximation ADC 10 bit resolutie Max 15 ksps bij volle resolutie, verlaagde resolutie bij hogere fs 13 klokcycli per conversie ADC klok: max resolutie bij fadc < 200 khz 200 khz / 13 = 15 ksps Indien fadc > 200 khz: verminderde resolutie fadc: afgeleid van processorklok via prescaler 8 ingangen (gemultiplext) Eénpolige of differentiële meting Differentiële meting: optionele versterker: x10 of x200 Interne of externe spanningsreferentie Interrupt bij voltooiing conversie mogelijk Single shot of freerun mode Configuratie via ADCSRA en ADMUX register Uitlezen ADC via ADC register
Eénpolige meting Gerefereerd t.o.v. GND en Vref ADC Vin. 1024 V ref Voordelen: Eén aansluiting nodig Nadelen: Gevoelig aan storing. Elektrische layout is belangrijk
Differentiële meting Gerefereerd t.o.v. GND en Vref ADC (V pos V neg V ref ) A 512 Voordelen: Minder gevoelig aan storing Offset spanningen / bias spanning op een signaal kan weggewerkt worden voor sampling Nadelen: Twee aansluitingen nodig Positieve resolutie wordt gehalveerd
Andere randfuncties Watchdog Analoge comparator 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 SONAR
Zie schema cursustekst AVRCON128