terça-feira, 13 de março de 2012

Portas Analógicas do Arduino

Uma descrição das portas analógicas de um chip Arduino (Atmega8, Atmega168, Atmega328, or Atmega1280).

Conversor A/D

Os microcontroladores Atmega usados para o Arduino contém embarcados 6 canais de conversão analógica-digital (A/D). O conversor do Arduino tem uma resolução de 10 bits, retornando inteiros entre 0 e 1023. Enquanto a função principal das portas analógicas para a maioria dos usuários do Arduino é ler sensores, as portas analógicas também tem a funcionalidade de entrada/saída de propósito geral (GPIO) (da mesma forma que as portas digitais 0~13).
Consequentemente, se o usuário precisar mais entradas/saídas de propósito geral, e todas as portas analógicas não estiverem em uso, estas podem ser usadas para GPIO.

Mapeamento de Portas

As portas analógicas podem ser usadas da mesma forma que portas digitais, utilizando apelidos A0 (para a porta analógica 0), A1 etc. Por exemplo, o código deverá parecer com o abaixo, configurando a porta analógica como saída (OUTPUT) e atribuindo o valor alto (HIGH):
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);

Resistores de Elevação

As portas analógicas também tem resistores de elevação (pull-up), que funcionam exatamente da mesma forma que nas portas digitais. Eles são ativados por comandos como:
digitalWrite(A0, HIGH);  // set pullup on analog pin 0 
enquanto a porta for de entrada (INPUT).
Tome cuidado, entretanto, que ligar um resistor de elevação em uma porta analógica afetará os valores lidos pela função analogRead().

Detalhes e Avisos

O comando analogRead não funcionará direito se a porta não for corretamente configurada para saída (OUTPUT), então se esse é o caso, configure de volta a porta para entrada (INPUT) para usar a função analogRead. De forma similar, se a porta for configurada como HIGH e como saída, o resistor de elevação ficará ativado, mesmo voltando a porta para entrada.
O datasheet do Atmega também avisa sobre modular portas analógicas em uma proximidade temporal ao fazer leituras A/D (analogRead) em outras portas analógicas. Isso pode causar ruído elétrico e introduzir jiter no sistema analógico. Pode ser desejável, depois de manipular as portas analógicas (em modo digital), adicionar um atraso antes de começar a usar a função analogRead() para ler outras portas analógicas.

Traduzido do Original:

Para pt-BR por Renato Aloi


2 comentários:

  1. Boa noite Renato, estou acompanhando seu curso, que é muito bom, parabéns! te agradeço por você existir e compartilhar uma parte do seu conhecimento; e tenho uma dúvida, já dei uma procurada mas não achei, a porta analógica, ela é somente de entrada? ou posso através dela simular uma tensão especifica de 0 até a tensão de alimentação?
    Te agradeço desde já!

    ResponderExcluir
  2. Mais uma pergunta, temos internamente resistores de pull up, isso eu ja sei, e de pull down existe????

    ResponderExcluir