LusoRobótica - Robótica em Português
Electrónica => Electrónica Geral => Tópico iniciado por: helderjsd em 14 de Março de 2013, 12:43
-
Boas,
Tenho alguns projectos "simples" e basicos em arduino, mas por questoes de espaço e dinheiro, estou a passa-los par aattiny.
Com isto, libertei uma serie de arduinos que tinha espalhados em casa, por soluções mais economicas (dinheiro e electricidade) em como em termos de espaço.
No entanto, tenho 2 pequenos projectos, em que utilizo 3 portas PWR.
Basicamente, estas portas estao ligadas a leds, para fazer efeitos de "fade".
A minha questao é, tendo o attiny85 apenas duas portas de PWR, como posso controlar 3 leds com fade? É certo que podia ocmprar led's RGB e tinha o problema resolvido, mas nao o tenho, e queria evitar comprar.
Pensei em ligar 2 attiny, em que a saida de 1 liga a entrada do outro. Quando este envia HIGH, o segundo attiny faz os fades correspondentes em mais duas portas.
Mas nao me parece uma solução pratica :(
Alguem tem outra sugestao/solução?
-
PWR ou PWM?
Se for pulse with modulation (PWM) podes fazer isso programaticamente.
http://hackaday.com/2009/09/17/software-pulse-width-modulation/ (http://hackaday.com/2009/09/17/software-pulse-width-modulation/)
Espero que ajude.
-
PWR ou PWM?
Se for pulse with modulation (PWM) podes fazer isso programaticamente.
http://hackaday.com/2009/09/17/software-pulse-width-modulation/ (http://hackaday.com/2009/09/17/software-pulse-width-modulation/)
Espero que ajude.
Que lapso o meu :)
Sim, é PWM.
Ou seja, em vez de digitalwrite HIGH ou LOW, faço um analogwrite entre 0 e 255, onde vou incrementando ou diminuindo para criar o fade.
O problema é que quero fazer fade a 3 ou 4 leds, mas o attiny85 só tem 2 portas que são PWM
Assim, como o contorno???
-
Fazes pwm por software, com um timer e um bocadinho de código, ou com delays como podes ver nestes exemplos:
http://www.instructables.com/id/ATtiny85-Mini-RGB-Mood-Light/?ALLSTEPS (http://www.instructables.com/id/ATtiny85-Mini-RGB-Mood-Light/?ALLSTEPS)
http://arduino.cc/forum/index.php/topic,75334.0.html (http://arduino.cc/forum/index.php/topic,75334.0.html)
http://www.kobakant.at/DIY/?p=3393 (http://www.kobakant.at/DIY/?p=3393)
-
Fazes pwm por software, com um timer e um bocadinho de código, ou com delays como podes ver nestes exemplos:
http://www.instructables.com/id/ATtiny85-Mini-RGB-Mood-Light/?ALLSTEPS (http://www.instructables.com/id/ATtiny85-Mini-RGB-Mood-Light/?ALLSTEPS)
http://arduino.cc/forum/index.php/topic,75334.0.html (http://arduino.cc/forum/index.php/topic,75334.0.html)
http://www.kobakant.at/DIY/?p=3393 (http://www.kobakant.at/DIY/?p=3393)
Basicamente é isto que tenho, mas ele funciona com fade na porta e 1, mas na 2 so acende e apaga.
Fazer fade, esta quieto.. :(
-
É porque tens delays muito grandes..
-
É porque tens delays muito grandes..
os delays são iguais.
Ate estao definidos como uma variavel, ao inicio do sketch, e uso-a para todos...
Logo vou experimentar de novo, mas tenho a certeza que o codigo estava bem :(
-
Mostra ai então.
-
int red = 0;
int blue = 1;
int yellow = 2;
int white=4;
int delay1=100;
int delay2=5000;
void setup() {
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(white, OUTPUT);
}
void loop() {
//acender azul
int fadedown=0;
for(int fadeup=0;fadeup<=255;fadeup+=5){
fadedown=255-fadeup;
analogWrite(blue,fadeup);
delay(delay1);
}
delay(delay2);
//acender amarelo e apagar azul
for(int fadeup=0;fadeup<=255;fadeup+=5){
fadedown=255-fadeup;
analogWrite(yellow,fadeup);
analogWrite(blue,fadedown);
delay(delay1);
}
delay(delay2);
//acender vermelho e apagar amarelo
for(int fadeup=0;fadeup<=255;fadeup+=5){
fadedown=255-fadeup;
analogWrite(red,fadeup);
analogWrite(yellow,fadedown);
delay(delay1);
}
delay(delay2);
//acender branco e apagar vermelho
for(int fadeup=0;fadeup<=255;fadeup+=5){
fadedown=255-fadeup;
analogWrite(white,fadeup);
analogWrite(red,fadedown);
delay(delay1);
}
delay(delay2);
//apagar branco
for(int fadeup=0;fadeup<=255;fadeup+=5){
fadedown=255-fadeup;
analogWrite(white,fadedown);
delay(delay1);
}
//acender todos
for(int fadeup=0;fadeup<=255;fadeup+=5){
fadedown=255-fadeup;
analogWrite(white,fadeup);
analogWrite(red,fadeup);
analogWrite(blue,fadeup);
analogWrite(yellow,fadeup);
delay(delay1);
}
delay(delay2);
//apagar todos
for(int fadeup=0;fadeup<=255;fadeup+=5){
fadedown=255-fadeup;
analogWrite(white,fadedown);
analogWrite(red,fadedown);
analogWrite(blue,fadedown);
analogWrite(yellow,fadedown);
delay(delay1);
}
}
-
Esses delays de 5000ms matão o esquema, e deves usas delays de micro-segundos e não de mili segundos.
-
Esses delays de 5000ms matão o esquema, e deves usas delays de micro-segundos e não de mili segundos.
Ola senso,
Obrigado pela tua resposta :)
Não percebi porque dizes que matam o esquema todo. Porque??
Pretendoque depois do fade, as luzes fiquem acesas antes de fazer o fade down.
E como faço delays em micro segundos em vez de ser milis?
De notar que no arduino funciona em pleno, no attiny, é que as portas PWM é funcionam. As outras nao fazem fade
-
Primeiro, aconselho-te a veres o programa de exemplo Blink Without Delay
http://arduino.cc/en/Tutorial/BlinkWithoutDelay (http://arduino.cc/en/Tutorial/BlinkWithoutDelay)
Porque tem de gera a onda pwm é os delays, se tens um delays de 3 dias no loop dás cabo disso.
O link que te dei do forum Arduino usa timers para gerar o pwm por software, tem lá tudo o que precisas, vai ver o tópico e ler o código, está lá tudo!!
-
Primeiro, aconselho-te a veres o programa de exemplo Blink Without Delay
http://arduino.cc/en/Tutorial/BlinkWithoutDelay (http://arduino.cc/en/Tutorial/BlinkWithoutDelay)
Porque tem de gera a onda pwm é os delays, se tens um delays de 3 dias no loop dás cabo disso.
O link que te dei do forum Arduino usa timers para gerar o pwm por software, tem lá tudo o que precisas, vai ver o tópico e ler o código, está lá tudo!!
3 dias???? So tem 5 segundos.
loooooooool
Mas percebi a logica..
-
A tua onda quadrada é gerada pelos digitalWrite HIGH e LOW dentro do loop, uma onda quadrada em que estás a HIGH ou a LOW durante 5 segundos é algo que se torna perfeitamente visivel ao olho.
-
Caro senso,
estas a ver mal o codigo
dentro do loop, so tenho delays de 30 micro segundos, entre valores do analogwrite implementados de 5 em 5 (de 0 a 255)
è completamente imperceptivel a olho nu
Quanto ao delay de 5 segundos, ele aguenta um dos led ON (analogwrite 255), antes de comrçar o de-fade
-
Mas aconselhas que tire o delay e use millis()?
-
Mas aconselhas que tire o delay e use millis()?
pelo o que percebi, ele estava te a aconselhar em usar o timer e interrupcoes