Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
pt:avr:adc [2015/12/01 13:43] articapt:avr:adc [2020/07/20 12:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== Conversor Analógico-para-Digital ======
  
 +Um conversor Analógico-para-Digital (ADC) transforma um valor analógico de voltagem num valor digital. Os limites para a tensão permitida numa entrada ADC do microcontrolador AVR são 0-5,5 V. O número de bits do valor digital é de 10, e a sua precisão é de ± 2 unidades. O erro pode ser ainda maior, se a tensão de alimentação do microcontrolador não estiver protegida de qualquer interferência. O AVR tem um pinos de tensão de alimentação e de tensão de comparação separados para o ADC. A tensão de alimentação separada ajuda a reduzir a interferência e pode não diferir mais de 0,3 V da tensão principal de alimentação. A comparação das tensões define o valor digital máximo. Por exemplo, se a tensão de comparação é de 3 V, então uma entrada com a mesma tensão vai ser lida como 2<sup>10</sup> - 1 (1023).
 +
 +Um AVR ADC funciona segundo o princípio de aproximação sucessiva. Em suma, a tensão medida é comparada com os níveis específicos de voltagem e os resultados são reportados como uma matriz de bits. Este método é relativamente lento, pois cada bit no resultado final é calculado separadamente. O AVR gasta 13 ciclos de relógio para cada medição, com excepção do primeiro (no start-up), no qual consome 25 ciclos. Esses ciclos não são os ciclos de funcionamento do controlador, porém, mas ciclos especiais atribuídos à unidade ADC pelo divisor de frequência. A freqüência do ADC deve ser 50-200 kHz para permitir a máxima precisão. Em freqüências mais altas a precisão decai. Em alguns casos, é muito mais importante obter um grande número de leituras em vez de uma maior precisão, sendo neste caso o uso de uma frequência maior totalmente justificado. De acordo com a documentação do AVR, uma medição leva 13-260 µs.
 +
 +O valor medido pode ser lido como um valor de 8 ou 10-bits. Como o próprio AVR é um dispositivo de 8 bits, tem dois registos de 8 bits para armazenar os valores do ADC. É possível especificar nas configurações se os dois primeiros ou os últimos dois bits vão para um registo separado. Se os dois bits menos significativos, que caracterizam o resultado, são separados, o resultado pode ser lido como um valor de 8 bits - uma combinação como essa é designada de resultado alinhado à esquerda. A outra combinação, em que ambos os registos são lidos e o valor está formatado em 10-bits, é designada de resultado alinhado à direita.
 +
 +Um AVR típico tem 8 canais de entrada de tensão analógica. A série ATtiny tem apenas alguns, e alguns dispositivos ATmega têm 16, mas há sempre um único conversor. Para tornar possível a utilização de diferentes entradas, o dispositivo tem um multiplexador embutido. A entrada do multiplexador é definida através de um registo especial. A unidade ADC tem mais algumas propriedades: usando o modo de suspensão do processador para converter para reduzir a interferência e a opção de usar uma tensão de comparação fixa interna (normalmente 2,65 V, em alguns modelos 1 V).
 +
 +<pagebreak>
 +
 +<box 100% round #EEEEEE|Exemplo>
 +
 +Task: measure the voltage in ADC channel 3 of an ATmega128. The voltage is in range of 0-5 V and the result should be at 8-bit precision.
 +
 +<code c>
 +#include <avr/io.h>
 +
 +int main()
 +{
 + unsigned char result;
 +
 + // Choose AREF pin for the comparison voltage
 + //   (it is assumed AREF is connected to the +5V supply)
 + // Choose channel 3 in the multiplexer
 + // Left align the result
 + ADMUX = (1 << REFS0) | (1 << ADLAR) | (3);
 +
 + // Start the ADC unit,
 + // set the conversion cycle 16 times slower than the duty cycle
 + ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADSC);
 +
 + // Wait for the measuring process to finish
 + while (ADCSRA & (1 << ADSC)) continue;
 +
 + // Read the 8-bit value
 + result = ADCH;
 +}
 +</code>
 +
 +</box>
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0