Ausgänge von Timer1 ansteuern mit der Blinkfrequenz von Timer3?

Gast #2314960
Lesenswert?

hi,

zur ansteuerung einer RGBLED hab ich für die PWM den Timer 1 genommen,
für die Blinkfrequenz hab ich den Timer 3 genommen der beim 
Vergleichswert von OCR3A toggelt (atmel can 128).

Mein Problem ist jetzt, wie kann ich das codieren das die ausgänge von 
Timer 1 (OC1A, OC1B, OC1C) mit der Frequenz von Timer 3 an und ausgehen.

ich hab das mal mit if else anweisungen versucht zu probieren wenn z.b.
0C3B an ist sollen auch die ausgänge von Timer 1 an sein, aber das funzt 
alles nicht so, muss ich das mit dem interrupt steuern? hab den noch nie 
benutzt.
Gast #2315128
Lesenswert?

TCCR3A = (0<<WGM31) | (0<<WGM30) | (1<<COM3B0)  | (0<<COM3B1) |

(1<<COM3C0)  | (0<<COM3C1);

TCCR3B = (1<<CS32) | (0<<CS31) | (1<<CS30) |(0<<WGM33) | (1<<WGM32) ;


TIMSK3 = (1<<OCIE3A) | (0<<ICIE3) ;


hab den TIMSK3 so belegt.

int blinken(float f)
{

OCR3A = (F_CPU /(2  1024  f) ) -1 ;

 }


ISR(TIMER3_COMPA_vect)
{
  Farbe(255,0,0);
}


nur fürs verständnis, wenn der Vergleichswert erreicht wird sollte doch 
das interrupt jetzt starten, und eigentlich müsste er mir die farbe 
(rot) ausspucken!? (macht er nicht ;) )
Gast #2315395
Lesenswert?

hab das mal als C datei angehangen

#define ROT  OCR1A
#define GRUEN  OCR1B
#define BLAU  OCR1C

// Funktion zur Einstellung der Farben

int Farbe( int r, int g, int b)
{


  ROT = r;
  GRUEN = g;
  BLAU = b;
}

 //Funktion zur Einstellung der Blinkfrequenz

 int blinken(float f)
{

OCR3A = (F_CPU /(2  1024  f) ) -1 ;

 }


ISR(TIMER3_COMPA_vect)
{

  if (DDB5 == 1 )
  {
    DDRB  |= (0<<DDB5);   //ausgang der roten LED
  }
  else
  {
    DDRB  |= (1<<DDB5);
  }

}

int main(void)
{

  DDRA &= ~(1<<DDA2) | ~(1<<DDA0) | ~(1<<DDA4);
  DDRA |= (1<<DDA6);
  DDRB  |= (1<<DDB7) | (1<<DDB5) | (1<<DDB6) | (1<<DDB4);
  DDRC &= ~(1<<DDC0) | ~(1<<DDC2) | (1<<DDC4) | (1<<DDC6);
  DDRE  = (1<<DDE4) | (1<<DDE5);

  TCCR3A = (0<<WGM31) | (0<<WGM30) | (1<<COM3B0)  | (0<<COM3B1);
  TCCR3B = (1<<CS32) | (0<<CS31) | (1<<CS30) |(0<<WGM33) | (1<<WGM32) ;



TIMSK3 = (1<<OCIE3A) | (0<<ICIE3) ;


TCCR1A = (1<<WGM10) | (1<<COM1A1) | (1<<COM1B1) | (1<<COM1C1) ;
TCCR1B = (1<<CS11) | (1<<CS10) ;


PORTA |= (1<<PA2) | (1<<PA0) | (1<<PA4) ;   // Eingänge/Ausgänge

PORTA &= ~(1<<PA6);


PORTC |= (1<<PC0) | (1<<PC2);  //endlagen
//PORTE &= ~(1<<PE4);         //gelbe LED



 while (1)
{
  Farbe(255,255,255);

  blinken(2);
}


das ist so das wichtige

also der interrupt funktioniert auch, ich würde jetzt einfach "nur" ;) 
wissen wollen wie ich an T1 rangehe sodass der mit der Blinkfrequenz von 
T3 blinkt.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren