LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: Etico em 24 de Dezembro de 2011, 19:08

Título: Sobre sketch funcionando parcialmente.
Enviado por: Etico em 24 de Dezembro de 2011, 19:08
Olá! Primeiramente gostaria de desejar boas festas.

Tenho um pequeno problema. Estou com intensão de fazer com que 10 LEDs pisquem em sequência. Por exemplo, o LED 1 acende, então ele apaga e acende o 2 e assim por diante.

Vejam o esquema que montei na minha protoboard

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg37.imageshack.us%2Fimg37%2F6306%2Fledmove.png&hash=76892e64185091c711228be96e13451b0aec63fb)

Fiz também um vídeo que mostra o problema.

Sketch carrega parcialmente. (http://www.youtube.com/watch?v=pBQR0OKl1Do#)

O efeito nos LEDs funcona parcialmente, digo isso porque os que estão ligados aos pinos 4 e 5 não piscam nunca.

Esse é o código para realizar a tarefa.
Código: [Seleccione]
byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int ledDelay(65);
int direction = 1;
int currentLED = 0;
unsigned long changeTime;

void setup() {
  for (int x=0; x<10; x++) {
    pinMode(ledPin[x], OUTPUT); }
    changeTime = millis();
}

void loop() {
  if ((millis() - changeTime) > ledDelay) {
  changeLED();
    changeTime = millis();
  }
}

void changeLED() {
  for (int x=0; x<10; x++) {
    digitalWrite(ledPin[x], LOW);
  }
  digitalWrite(ledPin[currentLED], HIGH);
currentLED += direction;
  if (currentLED == 9) {direction = -1;}
  if (currentLED == 0) {direction = 1;}
}

Poderiam me dizer o que posso fazer para corrigir isso?

Começo a achar que esses pinos possivelmente estão com defeito, mas por enquanto não encontrei motivo para tal...

Att.,

Etico
Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: GnGz em 24 de Dezembro de 2011, 20:32
Verifica se estão bem polarizados os leds, senão troca um dos outros e mete lá e verifica se acende ao não.
Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: joaopedrocmp em 25 de Dezembro de 2011, 21:46
Boas :)

Assim de repente depois de um grande jantar de Natal, acho que assim funciona.

Código: [Seleccione]

byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int ledDelay(65);
int direction = 1;
int currentLED = 4;
unsigned long changeTime;

void setup() {
     pinMode(ledPin[4], OUTPUT);
     pinMode(ledPin[5], OUTPUT);
     pinMode(ledPin[6], OUTPUT);
     pinMode(ledPin[7], OUTPUT);
     pinMode(ledPin[8], OUTPUT);
     pinMode(ledPin[9], OUTPUT);
     pinMode(ledPin[10], OUTPUT);
     pinMode(ledPin[11], OUTPUT);
     pinMode(ledPin[12], OUTPUT);
     pinMode(ledPin[13], OUTPUT);
       changeTime = millis();
}

void loop() {
 
  digitalWrite(ledPin[currentLED], HIGH);
   delay(65);
   digitalWrite(ledPin[currentLED],LOW);
   
   if (currentLED =13){direction= -1;};
   if (currentLED = 4){direction= 1;};
   currentLED =currentLED + direction;
   
  }

Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: Etico em 26 de Dezembro de 2011, 17:25
Olá.

Consegui resolver o problema, era causado porque não fiz uma ligação necessária. Vou explicar melhor, vejam a imagem abaixo:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg810.imageshack.us%2Fimg810%2F7379%2Fformacorreta.jpg&hash=e2c717dbec8834dc40e52761404e25e4f93c0a4d)

Eu havia esquecido de fazer uma ligação horizontal indicada pelo fio laranja, logo os últimos pinos não iriam acender.
Foi apenas os dois últimos pinos porque na prática eu liguei os primeiros adiante, como mostra o vídeo...

A consequência disso eu não sei, gostaria que vocês me falassem qual é o risco ou problema de esquecer de fazer a conexão com o terra?
Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: Etico em 30 de Dezembro de 2011, 19:32
Pessoal me ajudem, por favor.  :-[
Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: im2geek4you em 30 de Dezembro de 2011, 20:20
Boas,
Mesmo sem ver em detalhe a forma como o Arduino faz o drive dos portos posso-te dizer que a falta dessa ligação não faz diferença nenhuma. Apenas não serias capaz de alimentar os led's daquele lado, pois os led's não eram alimentados com uma tensão suficiente.

PS: atenção que em certos microcontroladores (dependendo da forma como é feito o drive dos portos) é possível alimentar um led mesmo sem usar a massa. Ligando por exemplo o led  e a resistência a dois pinos dos portos e colocando um ao valor lógico 1 (5V) e outro a 0 (0V).  Espero não te ter baralhado mais ;D
Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: Etico em 30 de Dezembro de 2011, 21:29
Boas,
Mesmo sem ver em detalhe a forma como o Arduino faz o drive dos portos posso-te dizer que a falta dessa ligação não faz diferença nenhuma. Apenas não serias capaz de alimentar os led's daquele lado, pois os led's não eram alimentados com uma tensão suficiente.

PS: atenção que em certos microcontroladores (dependendo da forma como é feito o drive dos portos) é possível alimentar um led mesmo sem usar a massa. Ligando por exemplo o led  e a resistência a dois pinos dos portos e colocando um ao valor lógico 1 (5V) e outro a 0 (0V).  Espero não te ter baralhado mais ;D

Obrigado, mas fiquei um pouco confuso hehehe. Ainda não consegui entender se não ter ligado os últimos leds ao terra GND pode ou não causar algum tipo de problema. Desculpe-me se você explicou isso, ainda não consegui captar este conceito, na verdade nem sei porque deve ter uma ligação ao terra.
Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: LoneWolf em 30 de Dezembro de 2011, 22:33
Boas,

Etico, pelo que eu entendi também é que podes ligar um led ex: ao pin 11 e ao 12, no 11 das HIGH e o 12 LOW acho que é isso.

Agora o facto de não teres o GND ligado causou isso ( não funcionou) dai se dizer que se deve partilhar todos os GND, mas no teu caso não havia continuidade ( circulação da electricidade) dai não funcionar.

Abraços e espero ter ajudado e não complicado mais lol
Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: Etico em 30 de Dezembro de 2011, 22:46
Boas,

Etico, pelo que eu entendi também é que podes ligar um led ex: ao pin 11 e ao 12, no 11 das HIGH e o 12 LOW acho que é isso.

Agora o facto de não teres o GND ligado causou isso ( não funcionou) dai se dizer que se deve partilhar todos os GND, mas no teu caso não havia continuidade ( circulação da electricidade) dai não funcionar.

Abraços e espero ter ajudado e não complicado mais lol

Certo, o problema em si eu entendi e consegui resolver. Considerando de uma forma geral sem focalizar no problema que apresentei, qual é a utilidade de se fazer a ligação com o terra e qual a consequência de não fazer? O Arduíno pode queimar, não trabalhar de forma correta??

Obrigado.
Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: LoneWolf em 30 de Dezembro de 2011, 22:54
Bem eu não serei a melhor pessoa para te explicar mas vou tentar, no teu caso não ligas-te o GND (-) e com isso não havia continuidade do positivo para o negativo e assim não funciona. Não queima o arduino podes estar descansado  ;D só não funcionou como presenciaste isso, noutros casos podia acontecer o mesmo ou funcionar mal.

Abraços se não for isso desculpa-me por te estar a induzir em erro e que alguém me corrija sff.   
Título: Re: Sobre sketch funcionando parcialmente.
Enviado por: im2geek4you em 31 de Dezembro de 2011, 18:17
Boas,

Etico, pelo que eu entendi também é que podes ligar um led ex: ao pin 11 e ao 12, no 11 das HIGH e o 12 LOW acho que é isso.

Agora o facto de não teres o GND ligado causou isso ( não funcionou) dai se dizer que se deve partilhar todos os GND, mas no teu caso não havia continuidade ( circulação da electricidade) dai não funcionar.

Abraços e espero ter ajudado e não complicado mais lol

@LoneWolf:Correcto!

Já agora aproveito para deitar uma uma acha para a fogueira  ;D.
Tive a dar uma vista de olhos nas 448 paginas do datasheet to ATMEGA328 que é um dos microcontroladores mais comuns nos Arduinos e a corrente máxima que podes obter de cada pino dos portos é 40mA, MAS, há sempre um mas, a corrente máxima no microcontrolador é 200mA. Quer isto dizer que se quiseres ligar 10 led's ao mesmo tempo a corrente total em cada um não deve ultrapassar os 20mA. Isto depende bastante do tipo de led's e da resistência limitadora de corrente que usas. Por exemplo se estiveres a usar led's de alto brilho estes normalmente precisam de 50mA ou mais.. com 10 led's destes facilmente chegas a 0.5A... por isso evita ligar este tipo de led's directamente, usa um outro circuito integrado para fazer o drive dos led's, ou transístores, há inúmeras soluções.
O teu "boneco" parece ter resistências de 220Ohm(vermelho, vermelho,castanho) o que dá cerca de 13.6mA para um led com uma queda de tensão de 2V. Não há problema nenhum em alimentar todos os led's pois ainda estás dentro do limite(136mA<200mA). Portanto fica descansado!  :P