quarta-feira, 19 de outubro de 2011

Referência Arduino - Portas Digitais

As portas digitais podem ser configuradas tanto como entrada e saída. Este artigo explica a funcionalidade das portas nesses modos. Enquanto o título deste artigo se refere a portas digitais, é importante lembrar que uma vasta maioria das portas analógicas do Arduino (ATMega) podem ser configuradas, e usadas, da mesma maneira que as portas digitais.

Propriedades das Portas Configuradas como Entrada (INPUT)
Portas do Arduino (ATMega) são por padrão consideradas como entradas, então estas não precisam explicitamente ser declaradas como entrada através da função pinMode(). Portas configuradas como entrada se encontram em um estado conhecido por alta impedância. Uma forma de explicar isso é que portas de entrada demandam muito pouco, ou quase nada, do circuito que estão amostrando, equivalente a um resistor de 100 mega ohms em série com a porta. Isto significa que não é necessária muita corrente para alternar as portas de entrada de um estado para outro, e que estas podem se tornar muito úteis para tarefas como: implementar um sensor capacitivo, sensível ao toque; efetuar a leitura de um LED como se fosse um foto-diodo; ou ainda fazer a leitura de um sensor analógico com um esquema RCTime.

Isto significa também, entretanto, que as portas de entrada apresentarão sensibilidade aleatória entre estados pelo simples fato de não ter nada conectado a elas, ou mesmo por estarem conectadas a um fio solto, detectando ruído elétrico a partir do ambiente, ou acoplamento capacitivo do estado das portas adjacentes.

Resistor de Elevação (Pullup)
Dessa forma se faz necessário, muitas vezes, nortear uma porta de entrada para um estado conhecido, quando nenhum sinal se faz presente. Isto pode ser feito adicionando na entrada, um resistor de elevação (ligando no 5V), ou um resistor de referência (pulldown - ligado no terra). 10k ohms é um valor comumente utilizado.

Existem também resistores de elevação convenientemente construídos internamente no chip do ATMega, que podem ser acessados via programação. Estes resistores de elevação embutidos podem ser acessados da seguinte maneira:

pinMode(pin, INPUT); // configura a porta como entrada
digitalWrite(pin, HIGH); // liga o resistor de elevação (pullup)

Note que estes resistores de elevação provêm corrente suficiente para acender de forma bem suave um LED conectado a porta configurada como entrada. Se os LED's de um projeto estiverem acendendo dessa forma bem suave, provavelmente é exatamente isso que está acontecendo e o programador esqueceu de usar a função pinMode() para configurar as portas como saída (OUTPUT).

Repare também que os resistores de elevação são controlados pelos mesmos registradores (endereços internos da memória do chip) que controlam se uma porta está em um estado alto (HIGH) ou baixo (LOW). Consequentemente um pino que é configurado para ter um resistor de elevação ligado quando a porta é uma entrada, manterá o estado alto mesmo quando a porta for alterada para saída, através da função pinMode(). Isso funciona de forma inversa também, e uma porta de saída deixada em estado alto, terá os resistores de elevação automaticamente ligados se for alterada para o modo de entrada pelo pinMode().

NOTA: A porta digital 13 é mais difícil de se utilizar como uma porta de entrada dentre as outras portas digitais, pois existe um LED ligado a ela, com um resistor em série, soldado na placa, na maioria das placas. Se você habilitar seu resistor de elevação, ela travará em uma tensão aproximada de 1,7V, ao invés dos esperados 5V, por causa do LED embutido na placa, e o resistor em série sempre puxará o nível de tensão para baixo, resultando sempre em um estado baixo (LOW). Se você quiser usar a porta 13 como entrada digital, ligue um resistor de referência (pulldown) externo.

Propriedades das Portas Configuradas como Saída (OUTPUT)
Portas configuradas como saída através do pinMode() encontram-se em um estado de baixa impedância. Isso significa que elas podem fornecer uma quantidade considerável de corrente para outros circuitos. As portas do ATMega podem alimentar (fornecer corrente positiva) ou ancorar (fornecer corrente negativa) até 40mA (miliampéres) de corrente para outros dispositivos/circuitos. Isso é corrente suficiente para acender bem forte um LED (não se esqueça do resistor em série), ou acomodar vários sensores, por exemplo; mas não fornece corrente suficiente para ativar diretamente a maioria dos relês, solenóides, ou motores.

Curto-circuitos nas portas do Arduino, ou tentativas de ativar dispositivos que consomem altas correntes, podem danificar ou até destruir o transistor de saída da porta; ou ainda danificar completamente o chip ATMega. Muitas vezes isso resulta em um pino "morto" no microcontrolador, mas o resto do chip ainda funciona adequadamente. Por essa razão, é uma boa ideia conectar portas de saída aos dispositivos, através de um resistor de 470 ou 1k ohms, a não ser que a máxima corrente consumida das portas seja necessária para alguma aplicação em particular.

Tradução literal do Inglês para Português do original, extraído do site arduino.cc, conforme link que segue:
http://arduino.cc/en/Tutorial/DigitalPins

by
Renato Aloi

2 comentários:

  1. Eu já tinha assistido uma webinar do Renato Aloi e esta publicação comprova que ele é bom mesmo! Gostei do texto e acrescento que ganhei conceitos de eletrônica nesta leitura. Parabéns e sucesso, Aloi!

    ResponderExcluir
  2. Parabéns Renato Aloi! Seu trabalho já é referência entre os amantes de Arduino! Sucesso!

    ResponderExcluir