Analog-to-Digital Converter Lecture 4.3. Reference ATD_10B8C Block User Guide V02.10...

34
Analog-to-Digital Converter Lecture 4.3

Transcript of Analog-to-Digital Converter Lecture 4.3. Reference ATD_10B8C Block User Guide V02.10...

Analog-to-Digital Converter

Lecture 4.3

Reference

ATD_10B8CBlock User GuideV02.10

S12ATD10B8CV2.pdf

Method of Successive Approximation

1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 00000V

5V

2.5V

3.75V

3.125V3.4375V Vin = 3.5V

step 1 step 2 step 3 step 4

voltage

1111 1110 1101 1100 1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 00000V

5V

2.5V

3.75V

3.125V3.4375V Vin = 3.5V

step 1 step 2 step 3 step 4

voltage

Control

D/A Converter

V

V

in

DA

Binary OutputC+

-

Implementing Successive Approximation

A/D Converter Registers in the HCS12 Name Register Addr Description

ATD0CTL2 0082 ATD Control Register 2 ATD0CTL3 0083 ATD Control Register 3 ATD0CTL4 0084 ATD Control Register 4 ATD0CTL5 0085 ATD Control Register 5 ATD0STAT 0086 ATD Status Register (H) ATD0STATL 0087 ATD Status Register (L) ADR00H 0090 A/D Result Register 0 ADR01H 0092 A/D Result Register 1 ADR02H 0094 A/D Result Register 2 ADR03H 0096 A/D Result Register 3 ADR04H 0098 A/D Result Register 4 ADR05H 009A A/D Result Register 5 ADR06H 009C A/D Result Register 6 ADR07H 009E A/D Result Register 7

; A/D Converter

atd0ctl2 equ $0082atd0ctl4 equ $0084atd0ctl5 equ $0085atd0stat equ $0086adr00H equ $0090

ad_onldaa #$83 ;8-bit resolution /8 clockstaa atd0ctl4ldaa #$c0 ;set ADPU & AFFCstaa atd0ctl2rts

adconvanda #$07 ;ch. 0 - 7 oraa #$80 ;right just SCAN=0 MULT=0staa atd0ctl5

ad1 ldaa atd0stat ;wait for convanda #$80beq ad1bsr avg4rts

avg4pshx ;save regldx #adr00Hldd 2,x+ ;adr0addd 2,x+ ;+adr1addd 2,x+ ;+adr2addd 2,x+ ;+adr3lsrdlsrd ;divide by 4pulx ;restore regrts

adr00H

adr01H

adr02H

adr03H

; adtest.asm; read channel 2 of adconv; and display as decimal number on screen

org $800outa equ $FF4F ;output ascii char in Aoutcrlf equ $FF5B ;carriage ret, line feed to termbase dw 10dnum rmb 4buff rmb 12pad db 0

org $4000

base

dnum

mainjsr ad_onldd #10std base ;decimalldd #0std dnum ;clear dnumHjsr outcrlf

mn1 ldaa #7 ;channel 7jsr adconv ; convertstd dnum+2 ;save valueldx #padjsr sharps

mn2 ldaa 1,x+jsr outacpx #padblo mn2jsr outcrlfldy #30jsr ms_delaybra mn1

1234/10 = 123 Rem = 4

123/10 = 12 Rem = 3

12/10 = 1 Rem = 2

1/10 = 0 Rem = 1 34

33

32

31

PAD

Figure 12.6 Steps for creating an ASCII number string

base

dnum