Algumas vezes você precisa de mais do que o que tem. Eeu estou falando sobre os pinos do microcontrolador.
Veja bem: você tem que conectar 6 LEDs mas possui apenas três pinos do microcontrolador disponíveis. Utilizar outro microcontrolador não é sempre uma opção e outros circuitos decodificadores também não.
Agora veja: se você setar o pino um para “1” e o segundo para “0” (deixando o pino 3 no estado de alta impedância, como entrada) então você somente vai acender um LED. Você pode ligar dois leds ao mesmo tempo setando o terceiro pino para o estado “1” ou “0”, dependendo de qual LED adicional você pretende acender.
Se você precisar ligar todos os LEDs ao mesmo tempo, precisará mudar o estado dos pinos em uma freqüência mais alta para evitar a sensação dos LEDs piscando.
Com esse método você pode ligar até doze LEDs com apenas 4 pinos. Este é um método conveniente para ser utilizado com LEDs bicolores, quando dois LEDs são colocados no mesmo encapsulamento, mas em diferentes direções.
Este é um exemplo de código em C para o ARV-GCC de como controlar os LEDs. No exemplo, os LEDs estão conectados na porta B, entre os pinos 0 e 2.
Fragmento da função de controle:
unsigned char leds; // Os bits são os estados dos leds
void LEDs_refresh(void)
{
static unsigned char state; // Taxa de atualização atual
OFF(); // Coloca todos os pinos em alta impedância (entrada)
switch (state)
{
default:
CLR_0(); // Coloca o pino 0 baixo
if (leds & 1) {SET_1();} // Coloca o pino 1 alto para o led 1
if (leds & 2) {SET_2();} // Coloca o pino 2 alto para o led 2
state=1; // próximo estado
break;
case 1:
CLR_1(); // Coloca o pino 0 baixo
if (leds & 4) {SET_0();} // Coloca o pino 0 alto para o led 3
if (leds & 8 ) {SET_2();} // Coloca o pino 2 alto para o led 4
state=2; //próximo estado
break;
case 2:
CLR_2(); // Coloca o pino 2 em nível baixo
if (leds & 16) {SET_0();} // Coloca o pino 0 alto para o LED 5
if (leds & 32) {SET_1();} // Coloca o pino 1 alto para o LED 6
state=0; // Próximo estado
break;
}//end switch
}
Esta função deve ser chamada com freqüência para evitar deixar visível a piscada dos LEDs. O melhor é utilizar a interrupção do timer.
O código completo do projeto está na caixa abaixo para download.