Ricardo Morim

ADC MC9S08QG8, 10bit or 12bit ??

Discussion created by Ricardo Morim on Mar 12, 2007
Latest reply on Mar 12, 2007 by David Payne
I'm using MC9S08QG8 ADC module with the code:

SOPT1 = 0b01010010; //Pino Reset como I/O. COP desativado, DEBUG habiliado.
SOPT2 = 0b00000000; //I2C nos pinos PTA2 e PTA3.
ICSC2 = 0b00101111;
ICSC1 = 0b00111000;

//Configuração do Conversor AD:
ADCSC2 = 0;
ADCCFG = 0b01010100; //Clock ADC, Modo de consumo.
APCTL1 = 0b00000010; //Pinos usados pelo ADC.

//Função que faz a leitura do canal AD.
//Recebe: Canal do AD para efetuar a leitura.
//Retorna: Valor lido (10bit).
unsigned int ler_ad(unsigned char canal)
{
unsigned char conta = 8;
unsigned int temp =0;

while(conta)
{
ADCSC1 = (0b00000000 | canal); //Pega o canal (5 LSBs).

while(!ADCSC1_COCO); //Aguarda conversão...
temp += ADCR;
conta--;
delay_ms(2);
}


ADCSC1 = 0b00011111; //Desliga o ADC.

return temp >>3 ; //Divide por 8 (que foi o número de conversões).

}

The function 'int ler_ad(unsigned char canal)' it is returning a 12bit value, varying of 0 to the 4095 (varying the tension of pin PTA1 from 0V to VDD).
what it is happening ??! Datasheet says that the AD converter is of 10 bit but it seems that in the practical it works as if was an 12bit ADC!!

I'm using an 4MHz external crystal whith a 8MHz BUSCLK.

Outcomes