Es klappt.. endlich. Nur etwas will nicht.
Ich hab mir folgenden code zusammengeschrieben:
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);
}
//======================================================================
Dieser funktioniert auch, ausser das das setzten von PORTB0 auf low nicht klappt.
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?
Lesezeichen