terça-feira, outubro 12, 2021

ADC (Conversor Analógico Digital) - Parte 4 - ATmega328

Vamos examinar agora o ADC de um microcontrolador específico: o ATmega328 usado no Arduino Uno (de um modo geral o que vamos ver aplica também a outros membros da família ATmega e mesmo ao ATtiny).

O diagrama de blocos do ADC do ATmega328 (fonte: datasheet)


Especificações 

Os dados abaixo vem do datasheet, atenção para os detalhes no resto do texto:

  • Tipo: aproximação sucessiva
  • Resolução: 10 bits
  • Clock: 50 a 1000 KHz
  • Tempo de conversão: 13 a 260 microsegundos
  • Precisão absoluta: 2 a 4 bits
  • Referências: Vcc, interna ou externa
  • Referência interna 1,1V (+/- 0,1V)
  • Entradas multiplexadas: 6 (2 adicionais para certos encapsulamentos) + sensor interno de temperatura
Disparo e término da conversão

A aplicação pode disparar um conversão de várias formas:
  • Através de um bit no registrador de controle. Isso gera uma conversão única.
  • Através de um sinal externo, da saída do comparador analógico ou por saídas dos timers 0 e 1
  • Através do sinal de fim de conversão. Neste caso uma nova conversão é disparada automaticamente ao final (modo contínuo - Free Running).
O término da conversão pode ser detectado em um bit de registrador ou (opcionalmente) usando uma interrupção.

Tempo de Conversão

Uma conversão "normal" demora 13 ciclos do clock. No caso de conversão disparada automaticamente, tem um 0,5 ciclo adicional. A primeira conversão após ligar o circuito do ADC demora 25 ciclos

Para obter os 10 bits de precisão o clock não pode ser superior a 200KHz. Frequências maiores (até 1MHz) podem ser usadas sacrificando o número de bits. 

O clock é gerado pela divisão do clock do microcontrolador por 2, 4, 8, 16, 32, 64 ou 128.

Por exemplo, no Arduino que trabalha com clock de 16MHz, para obter 10 bits no resultado teremos que usar o divisor 128 (clock 125KHz) e uma conversão normal demorará 104 microsegundos. Se 8 bits forem suficientes, podemos reduzir o divisor para 16 e reduzir o tempo para 13 microsegundos.

Economia de energia e cancelamento de ruído

Para reduzir o consumo de energia, o ADC pode ser desligado quando não for necessário. Como visto acima, a primeira conversão após ligar será mais demorada.

Para minimizar a interferência do restante do microcontrolador é possível disparar uma conversão única com a parada do processador. A interrupção de final de conversão precisa ser habilitada, será ela que irá acordar novamente o processador.

Leitura do resultado

Os 10 bits de resultado são armazenados em dois registradores (ADCL e ADCH) e pode estar alinhado à esquerda ou à direita.

Se são necessários somente 8 bits, basta selecionar alinhamento à esquerda e ler ADCH.

Para obter os 10 bits (ou menos mas alinhado à direita), deve-se ler primeiro ADCL e depois ADCH.



Para maiores detalhes recomento a leitura do datasheet, que é bastante completo.

Nenhum comentário: