Hallo nocheinmal,
ich habe noch ein wenig expirimentiert und habe es geschafft ersteinmal meine Impulsdauer in ms anzuzeigen. Da hatte ich die Variable falsch deklariert (statt int32_t als int).
Das Prinzip funktioniert also schon einmal.
Nun habe ich aber immer noch das Problem das meine blinkenden LED's durcheinander kommen.
Es steht also nicht mehr das ganze Programm, sondern das blinken ist unregelmäßig (nicht so wie programmiert).
Das möchte ich jetzt gern noch als nächstes lösen.
Wo könnte da noch mein Fehler liegen, denn wie schon geschrieben, nur wegen dem einen Signal was ich auwerten möchte (lieber noch 1-2 andere zusätzlich) kann ja der µC noch nicht an der Leistungsgrenze sein.
und sas lächerliche LED blinken ist mit Sicherheit auch nicht so rechenintensiv 
Hier noch einmal der Programmcode wie er jetzt ist:
Code:
int main(void)
//Hauptprogremm
{
//Variablen der Steuerwelle 0 bis Reset
int LED1 = 0;
int LED2 = 250;
//int LED3 = 50;
//int LED4 = 100;
//int LED5 = 0;
//int LED6 = 0;
//int LED7 = 0;
//int LED8 = 0;
//int LED9 = 0;
//int LED10 = 0;
//int LED11 = 0;
//int test = 300;
int Reset = 500;
// Ende LED Steuerwellenvorgabe
init_digital(); // Ports initialisieren (eigene Funktion)
init_timer(); // Timer initialisieren (eigene Funktion)
init_interrupt();
lcd_ini();
flanke = 1; //Flankenmerker
impuls = 0;
sei(); //Interupts aktivieren
while(1)
{
lcd_gotopos(1,1);
lcd_writezahl(impuls,1,0);
if (PIND & (1<<PIND5))
{
PORTC |= (1<<PC5); //Bit1 auf High setzen
}
// Blaulicht (Blitzer) Transistor T1
if (Zaehler == LED1)
{
PORTB |= (1<<PB1); //Bit1 auf High setzen
}
if (Zaehler == LED1 + 50)
{
PORTB &= ~(1<<PB1); //Bit1 auf Low setzen
}
if (Zaehler == LED1 + 120)
{
PORTB |= (1<<PB1); //Bit1 auf High setzen
}
if (Zaehler == LED1 + 170)
{
PORTB &= ~(1<<PB1); //Bit1 auf Low setzen
}
//ENDE Blaulicht (Blitzer) Transistor T1
//****************************************************************************
// Blaulicht (Blitzer) Transistor T2
if (Zaehler == LED2)
{
PORTB |= (1<<PB2); //Bit2 auf High setzen
}
if (Zaehler == LED2 + 50)
{
PORTB &= ~(1<<PB2); //Bit2 auf Low setzen
}
if (Zaehler == LED2 + 120)
{
PORTB |= (1<<PB2); //Bit2 auf High setzen
}
if (Zaehler == LED2 + 170)
{
PORTB &= ~(1<<PB2); //Bit2 auf Low setzen
}
//ENDE Blaulicht (Blitzer) Transistor T2
//Zähler Reset
if (Zaehler >= Reset)
{
Zaehler = 0;
}
//****************************************************************************
if (!(PIND & (1<<PIND5)))
{
PORTC &= ~(1<<PC5);
}
} //while
} //ENDE main
ISR(TIMER0_OVF_vect)
//Interrupt bei Timer0 Overflow
{
Zaehler++;
}
ISR(INT0_vect)
{
if (flanke == 1)
{
start = TCNT1;
MCUCR |= (1<<ISC01); //INT0 auf fallende Flanke stellen
MCUCR &= ~(1<<ISC00);
flanke = 0;
}
else
{
stop = TCNT1;
impuls = stop - start;
MCUCR |= (1<<ISC00) | (1<<ISC01); //INT0 auf Steigende Flanke stellen (Löst Interrupt bei steigendet Flanke an INT0 aus
flanke = 1;
}
}
Ich danke zwischendurch mal allen die mir hier schon mit Tips geholfen haben
Lesezeichen