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