ADC - diego.Code

Anuncio
ADC
MC9S08SH8
d.codevilla – 2013 – v.1.3
ADC – Diagrama en bloques
MC9S08SH8
d.codevilla – 2013 – v.1.3
ADC – Canales y patas disponibles (SH8 DIP/SOIC20)
MC9S08SH8
d.codevilla – 2013 – v.1.3
ADC – Registros
MC9S08SH8
ADCCFG
adc low power
configuration
Selecciona modo
de bajo consumo
(más lento)
1: bajo consumo
0: máx. velocidad
adc long sample
Selecciona tiempo de
muestra
1: Largo
0: Corto (más rápido,
Zi bajas, mayor
consumo)
d.codevilla – 2013 – v.1.3
ADC – Registros (cont.)
MC9S08SH8
ADCSC1
conversion complete
adc continuous
Este bit se setea
cuando el ADC termina
de convertir.
Selecciona modo
continuo o simple
1: Continuo
0: Simple
Se “limpia” leyendo el
ADCRL o escribiendo el
ADCSC1
1: Completa
0: Incompleta, en curso
adc interrupt enable
Habilita interrupciones
cuando COCO se
setea.
1: Habilita
0: Deshabilita
d.codevilla – 2013 – v.1.3
ADC – Registros (cont.)
MC9S08SH8
ADCSC2
adc active conv.
adc trigger
Indica si hay una
conversión en
curso
1: En curso
0: No está
convirtiendo
Selecciona modo
de inicio de
conversión
0: Software
1: Hardware
(ADHWT input)
adc compare
function enable
adc compare
function greater than
Habilita función
de comparación
1: Habilita
0: Deshabilita
Selecciona modo de
función de
comparación
1: Mayor o igual
0: Menor
ADCCVH:L
Valor de
comparación,
parte alta y baja
d.codevilla – 2013 – v.1.3
ADC – Registros (cont.)
MC9S08SH8
ADCRH:L
Resultado de
la conversión,
parte alta y
baja
APCTL1
APCTL2
1: pin
utilizado
por el
ADC
APCTL3
d.codevilla – 2013 – v.1.3
ADC – Utilización
MC9S08SH8
d.codevilla – 2013 – v.1.3
ADC – Ejemplo de uso - C
MC9S08SH8
Si el valor de la conversión es mayor a 100, enciende un LED en pata A0 y si es menor o igual
lo apaga el LED
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
void main(void) {
SOPT1 = SOPT1 & 0x3F; // deshabilito COP
ADCCFG=0b01000000;
ADCSC2=0;
ADCSC1=0b00100010;
APCTL1=0b00000100;
// fadc clock: fbus / 4 = 2MHz
// Entrada para ADC: AD2 (pata 18 del SH8)
// Entrada para ADC: AD2 (pata 18 del SH8)
PTADD = 0x01; /* A0 es salida (para el led) */
}
for(;;) {
if(ADCSC1_COCO == 1) {
if (ADCRL > 100)
PTAD = PTAD | 0x01; // A0 = 1
else
PTAD = PTAD & 0xFE; // A0 = 0
}
}
LED
Entrada ADC
d.codevilla – 2013 – v.1.3
ADC – Ejemplo de uso - ASM
MC9S08SH8
Si el valor de la conversión es mayor a 100, enciende un LED en pata A0 y si es menor o igual
lo apaga el LED
_Startup: LDA SOPT1
AND #$3F
STA SOPT1
LDHX
TXS
;Deshabilita COP
#RAMEnd+1
; initialize the stack pointer
MOV #%00000001,PTADD
;A0 salida
;inicializa ADC
MOV #%01000000,ADCCFG
;máx. Velocidad - short sample – modo: 8 bits
;ck source: bus clock – fadc = fbus/4 => fadc = 2 MHz
MOV #%00000000,ADCSC2 ;trigger x soft - sin comparación
;sin interrupciones - conv. Contínua - AD2 (pata 18 de SH8)
MOV #%00100010,ADCSC1 ;contínua, por AD2
MOV #%00000100,APCTL1 ;AD2 usada por el ADC
mainLoop:
BRCLR 7,ADCSC1,*
;espera que COCO = 1
;LDA ADCRH
LDA ADCRL
CMP #100
BHI LED_ON
;no es necesario en modo 8 bits
;lee resultado (parte baja)
BCLR 0,PTAD
BRA mainLoop
LED_ON
BSET 0,PTAD
BRA
mainLoop
d.codevilla – 2013 – v.1.3
ADC – Tiempo de conversión
MC9S08SH8
d.codevilla – 2013 – v.1.3
ADC – Características
MC9S08SH8
d.codevilla – 2013 – v.1.3
Descargar