====== Conversor Analógico para Digital ====== Esta biblioteca fornece funções para usar o conversor analógico para digital do AVR. Todas as funções desta biblioteca bloqueiam o processador até chegarem ao resultado. O tempo de conversão depende do relógio ADC. ===== Tipos de dados ===== * **//adc_reference//** \\ Enumeração dos tipos para voltagem de referência do ADC. Opções: * //ADC_REF_AREF// - Voltagem de referência do pin AREF. * //ADC_REF_AVCC// - Voltagem de referência do pin AVCC. * //ADC_REF_2V56// - Voltagem de referência interna - 2,56 V. * **//adc_prescale//** \\ Enumeração dos tipos de prescaler de relógio ADC. Determina o factor de divisão do sistema de relógio. Opções: * //ADC_PRESCALE_2// - Factor de divisão 2. * //ADC_PRESCALE_4// - Factor de divisão 4. * //ADC_PRESCALE_8// - Factor de divisão 8. * //ADC_PRESCALE_16// - Factor de divisão 16. * //ADC_PRESCALE_32// - Factor de divisão 32. * //ADC_PRESCALE_64// - Factor de divisão 64. * //ADC_PRESCALE_128// - Factor de divisão 128. ===== Funções ===== * **//void adc_init(adc_reference reference, adc_prescale prescale)//** \\ Inicializa o ADC. Parâmetros: * //reference// - Selecção da voltagem de referência. * //prescale// - Selecção do prescaler de relógio. * **//unsigned short adc_get_value(unsigned char channel)//** \\ Converte o valor analógico do canal ADC especificado num valor digital. Bloqueia o processador. Parâmetro: * //channel// - número do canal ADC (0 a 7). * Devolve um valor digital de 10 bits. * **//unsigned short adc_get_average_value(unsigned char channel, unsigned char num_samples)//** \\ Converte o valor analógico do canal ADC especificado para digital um número de vez especificadas e calcula a sua média. Bloqueia o processador. Parâmetros: * //channel// - Número do canal ADC (0 a 7). * //num_samples// - Número de amostras para cálculo (1 a 64). * Devolve um valor digital com 10 bits. ===== Exemplo ===== O ADC é inicializado e os valores de dois canais analógicos são convertidos para digital. O valor do canal 0 é alocado à variável //x// e o valor médio do canal 1 à variável //y//. #include int main(void) { unsigned short x, y; // Initializing ADC. Reference voltage from AVCC. // Clock is 8 times slower than system clock. adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); // Converting channel 0 value. x = adc_get_value(0); // Converting and averaging channel 1 value. y = adc_get_average_value(1, 10); }