O microcontrolador entende apenas a linguagem digital. Entretanto, as entradas disponíveis do ambiente para o microcontrolador são em sua maioria de natureza analógica, ou seja, variam continuamente com o tempo. Para compreender as entradas do processador digital, é utilizado um dispositivo denominado Conversor Analógico para Digital (ADC). Como o nome sugere, este periférico reúne as informações analógicas fornecidas pelo ambiente e as converte para o formato digital compreensível do controlador, o microcontrolador então processa as informações e fornece o resultado desejado na saída.
((wysiwyg_imageupload:451:))
ATmega16 possui um sistema ADC integrado de 10 bits e 8 canais. Alguns dos recursos básicos do Armega16 ADC são:
· 8 canais.
· Resolução de 10 bits.
· Faixa de tensão de entrada de 0 a Vcc.
· 2,56 V selecionável de fonte de tensão de referência interna.
· Pino AREF para tensão de referência externa.
· Interrupção completa da conversão ADC.
Os canais ADC no Atmega16 são multiplexados com PORTA e usam os pinos comuns (pin33 a pin40) com PORTA. O sistema ADC do microcontrolador Atmega16 consiste nos seguintes pinos:
eu. ADC0-ADC7: 8 canais do pino 40 ao pino 33 do periférico Atmega16 ADC.
ii. AREF: Pin32 do microcontrolador Atmega16, a tensão no pino AREF atua como tensão de referência para conversão ADC, a tensão de referência é sempre menor ou igual à tensão de alimentação, ou seja, Vcc.
iii. AVCC: Pin30, este pino é o pino de tensão de alimentação para usar o PORTA e o ADC; O pino AVCC deve ser conectado ao Vcc (tensão de alimentação do microcontrolador) para usar PORTA e ADC.
Observação: Fonte de tensão de referência externa pode ser usada no pino AREF. Porém, o Atmega16 também possui opções de tensão de referência interna de 2,56V e Vref = Vcc.
A figura abaixo mostra a configuração dos pinos do sistema ADC do microcontrolador Atmega16.
Fig. 2: Números de pinos do ADC no microcontrolador ATmega16 AVR
Registros ADC
Para utilizar o periférico ADC do Atmega16, determinados registros precisam ser configurados.
eu. ADMUX (Multiplexador ADC e registro de seleção)
Fig. 3: Valores de bits do multiplexador ADC e registro de seleção para configurar o periférico ADC no AVR
REF(0:1) bits determinam a fonte de tensão de referência, seja ela interna ou externa conectada ao pino AREF. Os bits MUX (4:0) são usados para selecionar entre os canais que fornecerão dados ao ADC para conversão. O bit ADLAR quando definido como 1 fornece o resultado ajustado à esquerda nos registradores de dados ADCH e ADCL.
ii. ADCSRA (Controle ADC e Registro de Status)
Fig. 4: Configuração de bits do controle ADC e registro de status no microcontrolador AVR
ÁDEN: Bit de habilitação do ADC, este bit deve ser definido como 1 para ligar o ADC.
ADSC: Bit de conversão inicial do ADC, este bit é definido como 1 para iniciar a conversão do ADC, assim que a conversão é concluída, este bit é definido novamente como 0 pelo hardware.
UM ENCONTRO: ADC Auto Trigger Enable, este bit é definido como 1 para habilitar o disparo automático da conversão ADC.
ADIF: Sinalizador de interrupção ADC, este bit é definido como 1 quando a conversão ADC é concluída.
ADIE: ADC Interrupt Enable, este bit é definido como 1 se quisermos ativar a interrupção completa da conversão ADC.
ADPS(0:2): Bits ADC Prescaler, esses bits são usados para definir a frequência do clock do ADC, a configuração desses bits determina o fator de divisão pelo qual a frequência do clock do microcontrolador é dividida para obter a frequência do clock do ADC. A figura acima mostra os valores dos bits do prescaler para o respectivo fator de divisão.
Fig. 5: Equação da frequência do relógio ADC
A frequência do clock do ADC deve estar entre 50 KHz e 200 KHz.
iii. ADCH e ADCL (Registros de dados ADC)
Quando a conversão do ADC é concluída, os dados são armazenados nesses dois registradores. A configuração dos dados depende do valor do bit ADLAR do registro ADMUX. Se ADLAR=0, os dados são ajustados à direita e se ADLAR=1, os dados são ajustados à esquerda. Sempre leia primeiro o ADCL e depois o ADCH. Nos casos em que a precisão de 8 bits é suficiente, configure o bit ADLAR para 1 para ajustar os dados à esquerda e ler apenas o registro de dados ADCH.
Quando ADLAR = 0,
Fig. 6: Configuração de bits do registro de dados ADC em ADLAR = 0 no microcontrolador ATmega16 AVR
Quando ADLAR = 1,
Fig. 7: Configuração de bits do registro de dados ADC em ADLAR = 1 no microcontrolador ATmega16 AVR
Descrição do circuito
Conecte o circuito conforme mostrado no diagrama de circuito. Um capacitor cerâmico 104 está conectado entre AVcc (pino 30) e Aref (pino 32). AVcc (pino 30) está conectado à alimentação externa +5V.
Explicação do código
Para fazer a interface do dispositivo analógico com o microcontrolador AVR, siga as etapas a seguir para programá-lo.
Passo 1: Para inicializar o ADC
eu. Defina o valor no registro ADMUX de acordo com o canal ADC e a tensão de referência.
ii. Defina os bits do Prescaler adequadamente no registro ADCSRA.
iii. Defina o bit ADEN para habilitar o ADC.
vazio ADC_init(vazio) // Inicialização do ADC
Passo 2: Para ler o valor analógico
eu. Coloque o valor do canal em ADMUX
ii. Inicie a conversão definindo o bit ADSC.
iii. Monitore o bit ADIF para conclusão da conversão.
4. Limpe o bit de conversão ADIF. Ao escrever 1.
v. O resultado convertido digital agora está disponível nos registros ADCH e ADCL.
unsigned int ADC_read(char ch não assinado)
{
ch= ch&0b00000111; // o canal deve ser preto e branco de 0 a 7
ADMUX = canal; //selecionando canal
ADCSRA =(1<Código fonte do projeto
###
//Programa para o ADC ler do canal 0 e mostrar o/p de 8 bits no PORTB
###
Componentes do Projeto
- ATmega16
- LIDERADO