Microcontrollers Theorie 8051 based microcontroller ADuC832 from Analog Devices 07/2016 Roggemans M. (MGM)
LES 1 Doelstellingen: situering vak, afspraken labo en evaluatie toelichten concept embedded oplossing probleem blokdiagramma computersysteem wat is een microcontroller? hoe ziet een basis 8051 er uit ADuC mogelijkheden en blokdiagramma memorymap 8051/ADuC832 MOV instructies (inwendige adressering)
Situering van het vak Embedded systemen Hardware georiënteerd Basis automatisering Basis voor PLC Specifieke uitwerking onderdeel computersystemen Manier van denken
Afspraken Labo/Les Microcontrollers Aanwezigheid niet verplicht Passieve aanwezigheid verboden Actieve participatie verplicht Misbruik infrastructuur verboden: niet eten of drinken in labo/les respect voor apparatuur Stiptheid verplicht!!
Cursusmateriaal Beschikbaar via: ftp://telescript.thomasmore.be/pub/cdmicrocontrollers/8051/aduc800v3/ Alle materiaal met betrekking op labo en theorie (software, documentatie, oef) ADuC_condensed (onmisbaar in labo en lessen) Nederlandstalige cursus (optioneel): Thuis lezen als herhaling les Stick (minimaal 100MB) : bevat info van telescript (onmisbaar in labo) bevat eigen programma s (onmisbaar in labo) ADuC microcontroller kit kabel (thuis) (onmisbaar in labo) met
Evaluatie GEEN permanente evaluatie: lessen zijn er om te oefenen en vragen te stellen Open boek examen (praktische opgave): vak kan je enkel leren door te doen!!! vak vraagt zekere incubatietijd!!! blok en examenperiode onvoldoende tijd!!! Je mag op het examen alles gebruiken behalve communicatiemiddel (laptop, GSM, tablet, lichtsignalen, geluidsgolven, )
Examenverloop en quotering Opgave beschikbaar op papier (moet je afgeven) Je moet op de PC s van het labo werken Examen duurt 1u en 30 minuten Puntenverdeling: Flowchart (5/20) (DIGITALE BEOORDELING) Werkt het programma 100% (5/20) Programma (10/20) (ANALOGE BEOORDELING) (DIGITALE BEOORDELING)
Waarom programmeerbare bouwstenen gebruiken? Input: schakelaars spanningen seriëel sensoren... Microcontroller - PLC - Regelaar Procescomputer Controller - +, -, x, / logische bewerkingen voorwaardelijke beslissingen Output: spanningen LED's contactoren motoren seriëel... Universele hardware Relatie tussen input en output : eenvoudig aanpasbaar (software=programma) kan afhankelijk zijn van input en output (adaptief(remmen voertuig)) kan gebaseerd zijn op ervaringsgegevens (FUZZY) is aanpasbaar nadat product verkocht is (firmware upgrade) aanpasbaar aan voorkeuren gebruiker
Blokdiagramma computersysteem X-tal Osc. POR ADRES DECODER ADRESBUS CPU ROM (FLASH) (EPROM) (EEPROM) DATABUS SRAM PAR. POORT TIMER SER. COUNTER POORT
X-tal Osc. POR ADRES DECODER ADRESBUS Basis 8051 CPU ROM (FLASH) (EPROM) (EEPROM) DATABUS SRAM PAR. POORT TIMER SER. COUNTER POORT
Memory map 8051 0000 0001 0002 0003 0004 0000 0001 0002 0003 0004 8 bit 8 bit 00 01 02 Data bus 80 81 Adres bus ROM CODE memory XRAM DATA memory GPR CPU FE FF 80 81 PROGRAMMA SFR PIO SIO AD Timers FE FF FFFD FFFE FFFF FFFD FFFE FFFF Registers Controle bus PSEN# RD# WR# Read only Read/Write MOVC @DPTR 16 bit adres Read/Write MOVX @DPTR 8 bit adres I/O & control
0000 0001 0002 0003 0004 0000 0001 0002 0003 0004 8 bit 8 bit 00 01 02 Data bus 80 81 Adres bus ROM CODE memory XRAM DATA memory GPR CPU FE FF 80 81 PROGRAMMA SFR PIO SIO AD Timers FE FF FFFD FFFE FFFF FFFD FFFE FFFF Registers Controle bus PSEN# RD# WR# Read only Read/Write MOVC @DPTR 16 bit adres Read/Write MOVX @DPTR 8 bit adres I/O & control
Memory map 8051 (ADuC832) General Purpose Registers
Memory map 8051 (ADuC) Onderste 128 GPR s
Memory map 8051 (XC888) SFR s oude 8051
Memorymap 8051 (ADuC832)
Memory map 8051 (ADuC832)
Memory map ADuC832 MOVC A,@A+DPTR Optioneel RAM (niet gebruikt) 256 bytes registers
De MOV instructies Mnemonic OP-CODE Uitvoeringssnelheid Symbolische werking
Alle MOV instructies (tussen registers met 8 bit getallen)
LES 2 Doelstellingen: Overlopen schema s ADuC bord ADuC poorten looplicht via tabel: DB MOVX, MOVC en DPTR DJNZ CJNE
ADuC832 V3 schema s
ADuC832 V3 schema s
ADuC832 poorten
Tabel aanmaken/uitlezen Waar? Hoe? VB: Jef: In FLASH geheugen (ROM) Na DB (Define Byte) in programma ljmp lus ;programma sluiten met lus db db 11111110b ;eerste waarde in tabel 11111101b ;tweede waarde in tabel db 01111111b ;laatste waarde in tabel #include c:\aducgd1.inc
Tabel aanmaken/uitlezen Hoe aangeven in programma waar tabel in geheugen zit? Jef: = adres eerste byte in tabel in geheugen = label in programma Hoe Flash lezen? movc a,@a+dptr ;lees uit code geheugen naar de accu dptr=dptr= pointer die 16 bit adres moet bevatten jef: =16 bit adres in geheugen = label in programma a? Voor de instructie ongekende waarde eerst op 0 zetten mov dptr,#jef ;16 bit adres tabel in dptr laden mov a,#00h ;eerst accu=0 mov a,@a+dptr ;mov a,@0+dptr = steek in accu wat er op adres in dptr staat Na de instructie bevat a de waarde uit de tabel (in vb = 11111110b)
MOVC & MOVX
DPTR instructies
DJNZ of lussen tellen
CJNE of getallen testen
Les 3 Doelstellingen: gebruik van de drivers voor: LCD Arithmetic talstelsels basis wiskundige berekeningen bit, CY vlag) (+,-,x,/, 8 en 16
aducgd1.inc LCD interace tftinit tftoutchar tftoutbyte tftoutnib tftoutmsga tftsetbgcolor tftsetfrcolor tftxpos tftypos klaar zetten LCD voor gebruik schrijven van ascii code (accu=input) schrijven hex waarde accu naar LCD afdrukken 4 laagste bits accu op LCD afdrukken ascii string @dptr, tot 000h code set background color (red= 0-31, green= 0-61, blue= 0-31) set front color (red= 0-31, green= 0-61, blue= 0-31) register voor x adres bij schrijven register voor y adres bij schrijven tftxpos 0-->19 tftypos - 0-6 0 6 19
aducgd1.inc ; Arithmetic: ; mul16 ; mul32 ; div16 ; div32 ; add16 ; add32 ; sub16 ; sub32 ; hexbcd8 ; hexbcd16 ; bcdhex8 ; bcdhex16 vermenigvuldigen 2 16 bit getallen vermenigvuldigen 2 32 bit getallen delen 2 16 bit getallen delen 2 32 bit getallen optellen 2 16 bit getallen optellen 2 32 bit getallen verschil 2 16 bit getallen verschil 2 32 bit getallen omvormen 8 bit hex naar bcd omvormen 16 bit hex naar bcd omvormen 8 bit bcd naar hex omvormen 16 bit bcd naar hex
aducgd1.inc ; Diverse ; delaya0k05s accu)*0,05s ; getadc ; ; ; ; ; ; getadc tijdsvertraging (waarde in lees spanning op analoge input meet de spanning op de analoge input waarvan het nummer in de accu (a) staat. input: accu= te meten kanaalnummer (00h-0Fh) output: accu= 8 bit meetresultaat gebruikt: accu
Talstelsels Getal=voorstelling!! Decimaal getal: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 waarde afhankelijk plaats getal 123 1 2 3 Binair getal: 0, 1 waarde afhankelijk plaats getal 1001 1 0 0 1
Talstelsels Hexadecimaal getal: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F waarde afhankelijk plaats getal FF BCD getal: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 binair gecodeerd: 0000, 0001, 0010, 0011,...
Talstelsels
Optelling
Verschil berekenen
INC en DEC
Vermenigvuldigen en delen
Les 4 Doelstellingen: Overlopen instructieset (adhv. CONDENSED) : speciale verplaats instructies logische instructies (ANL, ORL, XRL) bit-instructies voorwaardelijke sprongen stack bij subroutines (LCALL, RET, PUSH en POP)
Indirect adresseerbare registers Direct adresseerbare registers GPR SFR (I/O) ffh ffh 90h Stack ruimte Basis stack werking 86h 85h Eerste byte gebruikt als stack Wordt niet gebruikt als stack 85h 80h 7fh 00h 81h=SP 80h
LCALL Return address 1 subroutine aanroepen Subroutine LCALL Return address 2 RET
Les 5 Doelstellingen: principe AD omvorming mogelijkheden ADC ADuC832 Mogelijkheden DAC ADuC832 Timers 0, 1 RTC (TIC)
ADC
ADC SAR
ADC sample and hold
ADC 1LSB 1LSB= Vref/(aantal schaaldelen) 5v/256=0,01953125..v
Gebruik getadc getadc is een functie: lcall getadc ;roep functie op getadc verwacht input parameter mov a,#xx ;xx=06h voor LM335 (10mV/K) lcall getadc ;xx=07h voor potmeter (0-5v) ;roep functie op getadc geeft resultaat terug na lcall getadc bevat accu 8 bit meetresultaat: 00h=0v - ffh=4,980v ((5/256)x255)
ADuC832 ADC
ADuC832 DAC
ADuC832 DAC
Timers 0 & 1 OSC /12 C/T=0 C/T=1
Timers 0 & 1 OSC /12 C/T=0 C/T=1
RTC (TIC) TIC SFR s
TIMECON
Les 6 Doelstellingen: Uitleg interrupt op 8051 en generiek Belang van: PUSH-POP uitvoeringstijd flowchart Uitleggen hoe interrupt interval instelbaar Uitleg over stappenmotoren Uitleg over DC motoren
Interrupt 1 cyclus programma Tijd Test HW Geen test HW Test HW Geen test HW Test HW Geen test HW
Door hardware opgestart Hoofd programma Hoofd programma Initialisaties (geen interrupts) Initialisaties (ook interrupts) Taak 1 Taak 1 Interrupt routine Neen Test HW Ja Speciaal 1 Speciaal 1 Speciaal 2 Speciaal 2 RETI Taak 2 Taak 2 Taak 3 Taak 3 Zonder interrupt Met interrupt
Interrupts Noodzakelijk wanneer hardware niet kan wachten op polling door CPU Wordt gegenereerd door hardware: timers, I/O pinnen, ADC, SIO, system,... Initialisatie nodig: hardware die interrupt zal genereren CPU Er moet een interruptroutine klaar staan
Mogelijke interrupt bronnen en -adressen -Interrupts zijn HARDWARE GEBEURTENISSEN. -Een interrupt activeert een interruptroutine (indien ingeschakeld). -Een interruptroutine moet met een RETI afgesloten worden. -PUSH en POP kunnen noodzakelijk zijn. -Interruptroutines zijn beperkt in de tijd. -Bij meer dan een interruptbron zijn PRIORITEITEN belangrijk. -Overlappingen in het geheugen moeten vermeden worden.
Interrupt structuur
Standaard 8051 interrupt hardware
Minimum programma met interrupt: LED s veranderen elke seconde van toestand Main: org ljmp 0000h main ;startadres programma ;spring naar main org push mov cpl mov pop reti 0053h acc a,p2 a p2,a acc ;adres TIC interrupt (hardware bepaald) ;gaan we gebruiken (even bewaren) ;LED s naar accu ;complementeren ;terug naar LED s schrijven ;accu herstellen ;einde interruptroutine mov sp,#80h ;stackpointer klaar zetten mov p2,#10101010b ;startwaarde LED s naar LED s mov timecon,#01010011b ;zie datasheet voor waarden ;24 uur systeem, seconden als basis, continu laten werken, time interval ;aan, time clock aan, geen keuze mogelijk (anders werkt systeem niet ;naar behoren) mov intval,#1 ;elke seconde interrupt opwekken setb ea ;alle interrupts toelaten mov ieip2,#00000100b ;interrupten RTC inschakelen Lus: ljmp lus ;programma moet blijven hangen
Digitale output: stappen motoren Interface Technieken 71
Digitale output: stappen motoren Interface Technieken 72
Digitale output Interface Technieken 73
Digitale output Interface Technieken 74
Digitale output Interface Technieken 75
Digitale output Interface Technieken 76
Digitale output: current chopping Interface Technieken 77
Digitale output Interface Technieken (recirculatie) 78
Digitale output Interface Technieken (braking) 79
Digitale output: full step aansturing Interface Technieken 80
Digitale output: half step aansturing Interface Technieken 81
Digitale output Interface Technieken (microstepping0 82
Digitale output: inductieve belasting Interface Technieken 83
Einde. Vragen?