De A/D converter in de 68HC11
De 68HC11 heeft een 8-bits A/D converter die werkt volgens het
'successive approximation' principe. De converter is voorzien van een
multiplexer, waardoor 8 I/O lijnen beschikbaar zijn voor analoge signalen.
De converter kan natuurlijk maar één van deze 8 signalen tegelijk
converteren.
Ingangsbereik
De analoge ingangen op de 68HC11 hebben een bereik van 0 Volt ... 5
Volt. Aangezien dit bereik is onderverdeeld in 256 stapjes (8 bits), is 1
LSB ongeveer 19.5 milliVolt.
Onder ideale omstandigheden levert een ingangs spanning van 0 Volt een
resultaat van 0 op, en een ingangs spanning van ongeveer 5 Volt een
resultaat van 255. Eén conversie van één kanaal duurt 16µs.
Kanaalkeuze
De conversies kunnen, afhankelijk van de instelling van de A/D
converter, per kanaal geschieden of per groep van 4 kanalen. Beide mogelijkheden kunnen daarnaast nog automatisch herhaald worden zodat
altijd de meest recente meting beschikbaar is, of éénmalig uitgevoerd
worden.
Conversieresultaat
Het resultaat van de conversies wordt achtergelaten in het ADRx
register. Er zijn 4 van deze registers beschikbaar: ADR1, ADR2, ADR3, en
ADR4. Bij conversie van één kanaal, worden 4 achtereenvolgende metingen
op dit kanaal opgeslagen in de 4 registers. Bij conversie van een groep
van 4 kanalen, worden de resultaten van de metingen per kanaal in de
registers gezet.
Meetvolgorde
Zoals gezegd kan gekozen worden of de converter één kanaal moet
meten, of een groep van 4 kanalen. Deze keuze wordt gemaakt via het MULT
bit in het ADCTL register. Wanneer het MULT bit een '0' gemaakt wordt, zal
de converter één kanaal 4 keer meten, en de 4 meetwaarden achterlaten in
de ADR1, ADR2, ADR3, en ADR4 register (de eerste meting in ADR1, de tweede
in ADR2, etc.)
Met het MULT bit in het ADCTL register op '1', wordt een groep van 4
kanalen gemeten. Het resultaat van het eerste kanaal komt in ADR1, het
tweede kanaal in ADR2, etc.
In het ADCTL register bevinden zich de CA, CB, CC, en CD bits, waarmee
gekozen wordt welke kanalen geconverteerd moeten worden. Met deze bits
kunnen 16 kanalen gekozen worden, waarvan er echter maar 8 zijn
aangesloten op de pinnen van poort E. De andere 8 kanalen zijn
gereserveerd voor toekomstige uitbreidingen van de micro-controller, en
voor speciale testdoeleinden.
Wanneer gekozen wordt voor conversie van één kanaal (MULT = '0'),
wordt het te meten kanaal gekozen volgens de volgende tabel:
|
CD
|
CC
|
CB
|
CA
|
kanaal
|
poort
|
|
0
|
0
|
0
|
0
|
0
|
PE0
|
|
0
|
0
|
0
|
1
|
1
|
PE1
|
|
0
|
0
|
1
|
0
|
2
|
PE2
|
|
0
|
0
|
1
|
1
|
3
|
PE3
|
|
0
|
1
|
0
|
0
|
4
|
PE4
|
|
0
|
1
|
0
|
1
|
5
|
PE5
|
|
0
|
1
|
1
|
0
|
6
|
PE6
|
|
0
|
1
|
1
|
1
|
7
|
PE7
|
Wanneer gekozen wordt voor conversie van een groep van 4 kanalen (MULT
= '1'), wordt de kanaalkeuze gemaakt volgens de volgende tabel:
|
CD
|
CC
|
CB
|
CA
|
kanalen
|
resultaat registers
|
|
0
|
0
|
0
|
0
|
0,1,2,3
|
ADR1,ADR2,ADR3,ADR4
|
|
0
|
1
|
0
|
0
|
4,5,6,7
|
ADR1,ADR2,ADR3,ADR4
|
Continu converteren
Door het SCAN bit in het ADCTL register een '1' te maken, zal de A/D
converter continue conversies uitvoeren. Wanneer dit bit een '0' is, wordt
één conversieslag uitgevoerd (4 opeenvolgende conversies van één
kanaal als MULT '0' is, of een conversie van elk van de 4 kanalen in de
geselecteerde groep als MULT een '1' is.)
Conversies starten en stoppen
Conversies worden gestart op het moment dat er naar het ADCTL register
wordt geschreven. Wanneer in dit register wordt geschreven terwijl er nog
conversies gedaan worden, dan worden deze onmiddellijk onderbroken, en een
nieuwe conversie zal gestart worden. Wanneer een complete conversie gedaan
is (4 metingen), wordt het CCF bit in het ADCTL register een '1' gemaakt.
Dit bit wordt automatisch op '0' gezet elke keer wanneer er naar het ADCTL
register wordt geschreven. Eén conversie duurt 16µs, dus het CCF bit
wordt een '1', 64µs nadat in het ADCTL register werd geschreven (4
conversies.)
De A/D converter aanzetten
De A/D converter is een apart sub-systeem binnen de micro-controller.
Dit systeem wordt niet altijd gebruikt, maar vraagt wel stroom van de
voeding. In toepassingen waar de converter niet nodig is, kan het gehele
sub-systeem worden uitgezet. Anderzijds is het in toepassingen waar de
converter wèl gebruikt wordt, nodig het sub-systeem aan te zetten.
De A/D converter wordt ingeschakeld via het ADPU bit in het OPTION
register. De A/D converter is alleen te gebruiken wanneer dit bit een '1'
wordt gemaakt.
Een voorbeeld van een subroutine om de A/D converter te besturen is
hieronder gegeven.
* bij opstarten van het programma moet de A/D converter aangezet worden:
ldab #(adpu+irqe+cr1+cr0)
stab option |zet de a/d converter aan
* initialisatie van de a/d converter
* converter wordt ingesteld op continue conversie van de kanalen PE4..PE7.
* het resultaat van de conversies is beschikbaar in de registers adr1..adr4.
* de waarden in de registers adr1..adr4 zijn geldig zodra
* het ccf bit in het adctl register een '1' is.
* het resultaat van PE4 komt terecht in adr1, van PE5 in adr2, etc.
ldab #(scan or mult or cc)
stab adctl |initialiseer voor continue conversie
rts
De registers voor de A/D converter
De I/O registers die de instellingen voor de A/D converter bepalen
zijn:
ADCTL $1030
|
ccf
|
-
|
scan
|
mult
|
cd
|
cc
|
cb
|
ca
|
ADR1 $1031
|
bit7
|
bit6
|
bit5
|
bit4
|
bit3
|
bit2
|
bit1
|
bit0
|
ADR2 $1032
|
bit7
|
bit6
|
bit5
|
bit4
|
bit3
|
bit2
|
bit1
|
bit0
|
ADR3 $1033
|
bit7
|
bit6
|
bit5
|
bit4
|
bit3
|
bit2
|
bit1
|
bit0
|
ADR4 $1034
|
bit7
|
bit6
|
bit5
|
bit4
|
bit3
|
bit2
|
bit1
|
bit0
|
OPTION $1039
|
adpu
|
csel
|
irqe
|
dly
|
cme
|
-
|
cr1
|
cr0
|
|