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