Hallo,
Bin leider noch ziemlicher Anfänger in Sachen C. vielleicht kann mir einer von euch bei folgendem Problem helfen.
Ich habe eine PWM für eine RGB LED auf einen Atmega8 programmiert, so dass sie ständig die Farbe wechselt. nun soll man aber über einen Taster der einen Interrupt auslöst und eine Variable setzt die LED auf weiß schalten können. das ganze funktioniert soweit auch recht gut, nur dass die LED eben erst nach dem durchlauf der PWM sequenz auf weiß wechselt. Gibt es eine Möglichkeit nach dem Interrupt Programm direkt zum Programmteil "Weiß" zu springen? oder wüsstet ihr eine einfachere Lösung so etwas zu Programmieren?
hier mein Programm (ohne das delay Unterprogramm und die PWM unterprogramme)
Wäre froh wenn Mir jemand helfen könnteCode:#include <avr/io.h> #include <avr/interrupt.h> #include <inttypes.h> void delay(unsigned int ms); void LED2DIMIN(void); void LED1DIMIN(void); void LED2DIMOUT(void); void LED1DIMOUT(void); void LED3DIMIN(void); void LED3DIMOUT(void); int i; int a; int b; int c = 50; //geschwindigkeit Dimmer höherer Wert = langsamer int d = 0; ISR(INT0_vect) //Interrupt { if (d==0) { d=1; } else { d=0; } } void main(void) //Hauptprogramm { DDRD = 0b11100000; //Pin 765 = Output 0-4 = Input GICR|=(1<<INT0); //enables ext Interrupt (Pin 4, INT0) MCUCR = 0b00000011; //Steigende Flanke an INT0 Löst aus sei (); //Global Interrupt enable while(1) { if (d==0) { PORTD &= ~(1 << PD5); PORTD &= ~(1 << PD6); PORTD |= (1 << PD7); LED2DIMIN(); //blau LED3DIMOUT(); //rot weg LED1DIMIN(); //grün LED2DIMOUT(); //blau weg LED3DIMIN(); //rot LED1DIMOUT(); //grün weg } else { PORTD |= (1 << PD7); //weiß PORTD |= (1 << PD6); PORTD |= (1 << PD5); } } }
vielen Dank







Zitieren
Lesezeichen