Microcontrollers 8051 based microcontroller XC888 from Infineon 08/2011 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 XC888 mogelijkheden en blokdiagramma memorymap 8051/XC888 MOV instructies (inwendige adressering)
Situering van het vak • • • • • •
Embedded systemen Hardware georienteerd Hoort bij interfacetechnieken Basis voor embedded systemen derde jaar Basis voor “C” programmeren Specifieke uitwerking onderdeel computersystemen
Afspraken Labo Microcontrollers • Aanwezigheid niet verplicht • Passieve aanwezigheid verboden • Actieve participatie verplicht • Misbruik infrastructuur verboden: – niet eten of drinken in labo – respect voor apparatuur
• Stiptheid verplicht!!
Cursusmateriaal • Nederlandstalige cursus: – thuis lezen als herhaling/voorbereiding les (min 5X)
• XC888 condensed • Stick:
(onmisbaar in labo)
– bevat info van telescript (onmisbaar in labo) – bevat eigen programma’s (onmisbaar in labo)
• XC888 microcontroller kit met USB kabel (onmisbaar in labo)
• Slides (PPT) (beknopte versie cursus) (onmisbaar in labo)
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 of laptop
Examenverloop en quotering • Opgave beschikbaar op papier (moet je afgeven) • Je moet op de PC’s van het labo werken • Examen duurt 1,5u Puntenverdeling: • Flowchart (5/20) • Werkt het programma 100% (5/20) • Programma (10/20) (DIGITALE BEOORDELING)
(ANALOGE BEOORDELING)
(DIGITALE BEOORDELING)
Netspanning
Batterij
Voedingsspanningsbewaking
Systeemvoeding
Systeemclock
Concept embedded oplossing probleem Power saving modes
I supply
Debugsysteem (PC)
MICROCONTROLLER Analoge signalen
Analoge ingang
Analoge uitgang
CPU 8/16/32 bit
T sensor
Signaal bewerking
JTAG interface
Analoge I/O poort
I2C SPI USB UART
ADC DAC
Signaal bewerking
Seriële interface
Databus Bus interface
Externe businterface Adresbus
Timer/Counter circuits Vref (DC)
Digitale I/O poort
Digitale I/O poort
Schakelaar
Digitale signalen Galvanisch gescheiden digitale ingang
Optocoupler
Externe interrupt ingangen
Concept embedded oplossing probleem Input: schakelaars spanningen seriëel sensoren ...
• Universele
+, -, x, / logische bewerkingen voorwaardelijke beslissingen
Output: spanningen LED's contactoren motoren seriëel ...
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
Wat is een microcontroller?
Voordelen microcontroller (t.o.v. discrete computer) • Slechts enkele componenten: – eenvoudige PCB – weinig kans op hardware fouten – betrouwbaar – low cost – kleine afmetingen
Nadeel microcontroller (t.o.v. discrete computer): – minder flexibel (je koopt een totaal pakket, maar er is wel veel keuze) – minder rekenkracht/geheugen
X -tal O sc.
PO R
AD R ESB U S
Basis 8051 C PU
X-tal Osc.
POR
AD R ES D EC O D E R
ADRES DECODER
ROM (FLA SH ) (EP R OM ) (E E PR O M )
S R AM
PA R . P O O RT
SE R . P OO R T
TIM E R C OU N TE R
D ATA BU S
ADRESBUS
CPU
ROM (FLASH) (EPROM) (EEPROM)
DATABUS
SRAM
PAR. POORT
TIMER SER. COUNTER POORT
XC888
XC888
Memory map 8051 (XC888) 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
XC888
Memory map 8051 (XC888)
General Purpose Registers
Memory map 8051 (XC888) Onderste 128 GPR’s
Memory map 8051 (XC888) SFR’s “oude” 8051
Memory map 8051 (XC888) SFR’s XC888
Memory map 8051 (XC888)
Effectieve geheugenkaart XC888
De MOV instructies Mnemonic
OP-CODE
Uitvoeringssnelheid
Symbolische werking
Alle MOV instructies (tussen registers met 8 bit getallen)
LES 2 • Doelstellingen: – Testen en verdelen van de hardware – Verkennen van de IDE (Integrated design environment) en Infineon FLOAT software – Overlopen schema’s XC888 bord – maken programma’s (via sjabloon): • • • • • •
schakelaars naar LED’s knipperlicht zonder tijdsvertraging (basis uitvoeringstijd instructies) knipperlicht vaste snelheid (met delaya0k05s) knipperlicht variabele snelheid (met delaya0k05s) looplicht variabele snelheid (rotate instucties) Knight rider (hehaald gebruik rotate instructies)
Hardware XC888 bord
Hardware XC888 bord
Hardware XC888 bord
Hardware XC888 bord
Hardware XC888 bord
Hardware XC888 bord
Hardware XC888 bord
Hardware XC888 bord
Hardware schakelaars & LED’s
Les 3 • Doelstellingen: – MOVX en MOVC – looplicht via tabel (DJNZ, CJNE, DB, DPTR) – gebruik van de drivers voor: • • • • • •
STDIO (herhaling les 2) Diverse (aanvulling/ herhaling les 2) LCD ADC Arithmetic IIC
– teller op LCD scherm (8 bit hex en 8 bit decimaal, inc en dec)
MOVC & MOVX
DPTR instructies
DJNZ of lussen tellen
CJNE of getallen testen
XCEZ ; standaard I/O: ; initdipswitch dipswitch
klaar zetten poort 4 voor gebruik met de
;
klaar zetten 4 functieschakelaars onderaan
;
initftoetsen scherm initleds
klaar zetten LED's als outputs
XCEZ ; I2C interface (minimale interface op 100kbit/s) enkel master mode!! ; ; ; ; ; ;
initiic klaar zetten iic interface iicstart genereren van een startconditie op iic poort iicstop genereren stop conditie op iic poort iicinbyteack lezen van 1 byte met ack (accu=output) iicinbytenack lezen van 1 byte met nack (accu=output) iicoutbyte ack bit slave)
schrijven van 1 byte (accu=input, c=waarde
XCEZ ; LCD interace ; initlcd ; lcdoutchar ; lcdoutbyte ; lcdoutnib ; lcdoutmsga ; lcdlighton ; lcdlightoff ; lcdbuzon ; lcdbuzof
klaar zetten LCD voor gebruik (incl i2c init) 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 backlight aan backlight uit buzzer aan buzzer uit
XCEZ ; Seriële interface (via USB stekker!!) ; initsio klaar zetten seriële poort 9600 baud ; siooutchar afdrukken ascii code (accu=input) ; siooutbyte afdrkken getal in accu ; siooutnib afdrukken 4 laagste bits accu ; siooutmsga afdrukken ascii string @dptr tot 000h code ; sioinchar inlezen van 1 ascii code in de accu ;
sioinbufa 20h karakters!
inlezen van ascii buffer vanaf adres strtbuf, max
XCEZ ; ADC ; initadc ; adclm335 ; adcpotmeter
klaar zetten ADC voor minimaal gebruik uitlezen lm35 (a-b) bevat resultaat uitlezen van de potmeter (a-b) bevat resultaat
XCEZ ; 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
XCEZ ; Diverse ; delaya0k05s ; delay1ms ; delay10us ; XCsw2xtal ; mapregs ; nomapregs
tijdsvertraging (waarde in accu)*0,05s tijdsverraging 1 milliseconde tijdsvertraging 10 microseconde overschakelen rc naar kristal (Pauwels Danny) selecteer de SFR's in de mapped area selecteer de SFR's in de non-mapped area
Les 4 • Doelstellingen – talstelsels – basis wiskundige berekeningen (+,-,x,/, 8 en 16 bit, CY vlag) – teller op LCD (een decimaal en een hex, stand dip-switches bij op tellen, een decimaal en een hex stand dip-switches er van aftrekken (4 tellers!!))
– uurwerk in uu:mm:ss, met software delay
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 5 • 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)
– Programma looplicht 1 uit 4 via functieschakelaars: • contactdender • overnamecontact
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
LC A LL
R e tu rn a dd re ss 1
subroutine aanroepen
S ubroutine
LC A LL
R e tu rn a dd re ss 2
RET
Externe controllergeheugen met instructies
Adres van de instructies 16-bits
instructie n instructie n+1 instructie n+2 instructie n+3 call subroutine instructie n+5 instructie n+6
XXYY
STACK bij CALL en RET
9
Stack-pointer register (wijst naar intern geheugen in de controller)
Interne controllergeheugen
SP 8-bit SP na reset
1
SP+1
3
SP+1
2
opslaan LSB
4
opslaan MSB
YY XX
5
PC = subroutine
Program counter 16-bit
Jump to XXYY
PChigh
PClow
subroutine
6
Jump to subroutine
7
PChigh =XX SP-1
8
PClow =YY SP-1
return
07h 08h 09h 0Ah 0Bh
Les 6 • Doelstellingen: – principe AD omvorming – lezen potmeter (via driver) – lezen temperatuur en omrekening (via driver) – mogelijkheden ADC XC888
ADC
ADC SAR
ADC sample and hold
ADC 1LSB 1LSB= Vref/(aantal schaaldelen) 5v/1024=0,0048828125v 4,096v/1024=0,004v 5v/256=0,01953125v 4,096v/256=0,016v
XC888 ADC
XC888 ADC
Les 7 • Doelstellingen: – Timers 0, 1 – Timer 2 beknopt – CCU6 met PWM – Oefening: • meten tijdsinterval indrukken 2 schakelaars (t0 in 16 en 24 bit mode, hex op LCD) • PWM aansturen LED’s P3
Timers 0 & 1
Timers 0 & 1
Timers 0 & 1
Timers 0 & 1
Timers 0 & 1
Timer 2 (21)
Up-down count with reload
Timer 2 (21)
capture
Timer 2 (21)
CCU 6
CCU 6
CCU 6
CCU 6 •Gebruik p3.7 om een PWM signaal te genereren met CCU6 en T13 •Initialiseer p3.7 (zie figuur onderaan slide) •Initialiseer T13 •Lees potmeter en gebruik signaal om PWM in te stellen (10 bit)
CCU 6
CCU 6
CCU 6
CCU 6
CCU 6
CCU 6
CCU 6
Les 8 • Doelstellingen: – Uitleg interrupt op 8051 en generiek – Belang van: • PUSH-POP • uitvoeringstijd • flowchart
– Oefening: • knipperlicht op interrupt, teller LCD in hoofdprogramma • teller lcd in interrupt, looplicht in hoofdprogramma
– Uitleggen hoe interrupt interval instelbaar
Interrupt 1 cyclus programma
Tijd Test HW Geen test HW
Test HW Geen test HW
Test HW Geen test HW
D o or h ardw a re o pgestart H oofd pro gram m a
H oofd pro gram m a
In itialisaties (ge en interrupts)
Initialisaties (ook interrupts)
T aak 1
T aak 1
Interrup t ro utine
N een
Te st H W Ja
S pecia al 1
S p eciaal 1
S pecia al 2
S p eciaal 2
RETI T aak 2
T aak 2
T aak 3
T aak 3
Z o n d e r in te rru p t
M e t in te rru p t
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
Interrupt structuur
Interrupt structuur
Interrupts en prioriteit toelaten
CPU scant interrupt inputs
Periferie die interrupt opwekt
Interrupt vectoren
Algemene opmerkingen interrupt: • Per interruptroutine is er een bijkomende flowchart. • De interruptroutine onderbreekt het hoofdprogramma. • PUSH-POP!! • Uitvoeringstijd interruptroutine. • Prioriteiten kunnen nodig zijn.
Les 9 • Doelstelling: – Bufferles: • Afwerken oefeningen • Stellen van vragen • Bijkomende uitleg
Les 10 • Doelstellingen: – Gebruik van de seriële poort via driver routines – Belang van level shifters en baud rate – Programma: • rekenmachine via hyperterminal (USB poort) • op interrupt echo ingegeven karakters, looplicht als hoofdprogramma
XCEZ ; Seriële interface (via USB stekker!!) ; initsio klaar zetten seriële poort 9600 baud ; siooutchar afdrukken ascii code (accu=input) ; siooutbyte afdrkken getal in accu ; siooutnib afdrukken 4 laagste bits accu ; siooutmsga afdrukken ascii string @dptr tot 000h ; sioinchar inlezen van 1 ascii code in de accu ;
sioinbufa
inlezen van ascii buffer vanaf adres strtbuf, max 20h karakters!
Seriële poort hardware • Controller beschikt over: – 2 UART poorten (met LIN mogelijkheid) – 2 CAN nodes – 1 SPI poort (Synchronous serial channel) – 1 IIC poort (maar enkele via bitbanging)
• LET OP!!! – Bij ontwerp XC888 bord werden keuzes gemaakt naar mogelijke level shifters!! – Je kan selecteren op welke pinnen SIO naar buiten komt!
Les 11 • Doelstellingen: – Uitleg over parallelle poorten – Uitleg over stappenmotoren – Uitleg over DC motoren – oefening met stappenmotor – pwm dc motor, meten op tegenEMK
PIO
PIO
PIO als input ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; initdipswitch is een subroutine die de pinnen van poort 4 insteld als input met ; pull-up weerstanden ingeschakeld. Hierdoor kunnen schakelaars gebruikt worden naar ; massa zonder extra weerstanden. ; ; Gebruikt geen registers ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; initdipswitch: push mov push mov mov mov mov mov pop pop ret
syscon0 syscon0,#004h port_page port_page,#001h p4_pudsel,#0ffh p4_puden,#0ffh port_page,#000h p4_dir,#000h port_page syscon0
;juiste map selecteren ;tijdelijk bewaren (later herstellen) ;selecteer poort page 1 ;selecteer pull_up device ;selectie inschakelen ;pagina 0 selecteren ;poort 4 als input schakelen ;herstellen in oorspronkelijke staat ;pagina terug herstellen
PIO als output ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; initleds is een routine die de poort 3 als output schakeld. De LED's ; worden gedoofd (actief laag om ze te laden branden). ; ; Gebruikt geen registers ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
initleds:
push mov push mov mov pop pop ret
syscon0 syscon0,#004h port_page port_page,#000h p3_dir,#0ffh port_page syscon0
;juiste map selecteren ;tijdelijk bewaren (later herstellen) ;selecteer poort page 0 ;poort 3 als output schakelen ;herstellen in oorspronkelijke staat ;pagina terug herstellen
Les 12 • Doelstellingen: – Speciale mogelijkheden: • Fail safe werking – – – –
Spanningsbewaking Software bewaking Beveiligde bits Bewaking systeemklok
• Snelheid processor wijzigen • Snelheid software deterministisch maken • Low power mogelijkheden (hier generiek bespreken)
– Afwerken oefeningen vorige les – Software delay maken met gekende uitvoeringstijd
Fail safe werking: • Systeem kan de fout ingaan door: – storingen in voedingsspanning • spanningsbewaking • overspanningsbeveiliging
– storingen in programmaverloop (externe of interne factoren) • externe beinvloeding (EMC, EMI) • eventuele bugs in code • uitblijven van verwachte signalen (inputs)
– defect gaan van de hardware (heel duur om op te vangen) • space, nucleaire toepassingen, ...
– Bewaking van de systeemklok (oscillator watchdog, zie verder)
Fail-safe werking: spanningsbewaking (Embedded Voltage Regulator)
Fail safe werking: software bewaking
Fail safe werking: beveiligde bits
Snelheid processor aanpassen: • OSC: – RC, XTAL, TTL-klok – kunnen gekozen worden uit gamma aan mogelijkheden (toepassingsafhankelijk, wat is beschikbaar in systeem)
• PLL: – aanpassen ingangsklok aan basisfrequentie hardware – bewaking ingangsklok
Snelheid processor aanpassen:
fsys moet 96MHz zijn
Snelheid processor aanpassen:
Snelheid processor aanpassen:
Snelheid programma deterministisch maken:
UITVOEREN ALS: lcall dffch of lcall dfffh
Les 13 • Doelstellingen: – stellen van vragen – afwerken van oefeningen – oplossen specifieke problemen