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.
mazell schrieb: > muss ich das mit dem interrupt steuern? Wahrscheinlich. > hab den noch nie benutzt. Na dann schau mal hier: http://www.atmel.com/dyn/resources/prod_documents/doc7679.pdf AVR-GCC-Tutorial: Programmieren mit Interrupts Gruß Skriptkiddy
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 ;) )
Aus diesen unkommentierten Fragmenten wird niemand, ohne Aufwand zu betreiben, schlau. Poste bitte mal den ganzen Code (als Anhang). Gruß Skriptkiddy
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.
ne der interrupt funzt doch noch nicht, hab das mal mit der led auf dem controller ausprobiert
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.