Es klappt.. endlich. Nur etwas will nicht.
Ich hab mir folgenden code zusammengeschrieben:
Dieser funktioniert auch, ausser das das setzten von PORTB0 auf low nicht klappt.Code:#include <avr\io.h> #include <inttypes.h> #include <avr\interrupt.h> #define F_CPU 3686400 #define timer (256-F_CPU/64/1000) #define RotH PORTB0 #define RotV PORTB1 #define BlauV PORTB2 int ms; void initPorts() { DDRB |= (1<<PB0) | (1<<PB1) | (1<<PB2); } ISR(TIMER0_OVF_vect) //Timer Interrupt Vector { TCNT0 = timer; ms++; } int main(void) { initPorts(); // Timer Interrupt initialisieren TIMSK |= (1<<TOIE0); TCCR0=0x05; // 0b00000011, Vorteiler 1024 ca. 4khz sei(); // enable interrupts do { PORTB &= ~( (1<<RotH) | (1<<PORTB1) | (1<<PORTB2)); //PORTB Pins 0,1,2 auf low if(ms >= 5) { PORTB |= (1<<RotH); //Rot High if(ms >=30) { PORTB |= (1<<RotV); //Gelb High if(ms >= 100) { PORTB &= ~(1<<RotH); //ROT Low PORTB |= (1<<BlauV); //GRUEN High if(ms >= 200) { ms = 0; //ms auf NULL } } } } } while (true); } //======================================================================
Ich meinte einmal gelesen zu haben, das es damit zusammenhäng wie man die PORT's definiert und schaltet. Also ob man sie erst als Ausgänge setzt und dann auf High oder umgekehrt.
Kann mir da vieleicht jemand behilflich sein?







Zitieren

Lesezeichen