Go Down

Topic: [RESOLU]Fade with Hardware Register (Read 284 times) previous topic - next topic

zoroastre

Feb 20, 2012, 10:22 pm Last Edit: Feb 25, 2012, 08:35 am by zoroastre Reason: 1
Yep!

Bon je galère un peu pour faire un truc simple...Je m'exerce à utiliser le registre arduino pour manipuler mes ports et là je coince pour faire un fade in et fade out sur des rangées de led pilotées par des transistors.
J'ai compris qu'il fallait génerer un signal pwm simple (je précise que j'ai besoin de 3 ports pwm, 3, 6 et 7).

J'ai testé plusieurs solutions sans le resultat escompté. Je voudrais allumer progressivement la première rangée, delay(), puis fade out. Passage à la seconde rangée idem etc...

J'arrive à faire le fade in et fade out (je comprends à moitié), cependant je n'arrive pas à basculer de rangée, le code semble bloquée sur un timer/comparateur...

Si quelqu'un pouvait me fournir un exemple simple ou mieux encore un lien vers une bonne et complète documentation ??? (Je m'exerce sur un 368, avec comme optique de programmer un 2313/2Kb)

Le datasheet est sympa mais faut vraiment que je l'imprime, le pdf c'est pas cool  8)

@+

Zoroastre.

EDIT1 :
Code: [Select]

/*
One led pin 11, another pin 3.
Switch between leds is just an exemple
*/

int variable=0;
static char mode=0;

void setup()
{
 DDRD = DDRD | B00001000;
 DDRB = DDRB | B00001000;
 // Timer2 fast PWM OC2B(pin 3) OC2A(pin11)
 // set pin high on overflow, clear on compare match with OCR2B
 TCCR2A = 0xA3; // WGM20, WGM21, COM2B1, COM2A1
 TCCR2B = 0x01; // CS20, WGM22 = 0 means to 255
}

void loop()
{
  if(mode==0)
    {
      variable++;
      if(variable==230)
        {
          DDRD = (1 << PD3);
          DDRB = (0 << PB3);
          mode=1;
        }
    }
  if(mode==1)
    {
      variable--;
      if(variable==0)
        {
          DDRD = (0 << PD3);
          DDRB = (1 << PB3);
          mode=0;
        }
    }
     OCR2A=variable;
     OCR2B=variable;
    delay(20);
}

Gné! ;)

Go Up