Hmm,
das hatte ich wohl versehendlich gelöscht beim testen. Das Programm wird immer noch nicht weiter abgearbeitet wenn ein Impuls anliegt.
Code sieht jetzt so aus:
Code:
//Einbinden der Funktionen aus den anderen Dateien
extern void init_digital (void);
extern void init_timer(void);
extern void init_interrupt(void);
extern void lcd_writetext(char *text);
extern void lcd_ini(void);
extern void lcd_gotopos (uint8_t zeile, uint8_t spalte);
//Globale Variable
volatile int Zaehler;
volatile int Zaehler2;
volatile int start;
volatile int stop;
volatile int impuls;
volatile int flanke;
volatile int z1;
volatile char impuls1;
volatile char z11;
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
z1 = 0;
sei(); //Interupts aktivieren
while(1)
{
if (Zaehler2 == test)
{
impuls = stop - start;
itoa(impuls, impuls1,10);
itoa(z1, z11,10);
lcd_gotopos(2,1);
lcd_writetext("Impd: " +impuls1);
lcd_gotopos(3,1);
lcd_writetext(z11);
}
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;
}
//Zähler2 Reset
if (Zaehler2 >= Reset)
{
Zaehler2 = 0;
}
//****************************************************************************
if (!(PIND & (1<<PIND5)))
{
PORTC &= ~(1<<PC5);
}
} //while
} //ENDE main
ISR(TIMER0_OVF_vect)
//Interrupt bei Timer0 Overflow
{
Zaehler++;
Zaehler2++;
}
ISR(INT0_vect)
{
if (flanke == 1)
{
start = TCNT1;
MCUCR |= (1<<ISC01); //INT0 auf fallende Flanke stellen
flanke = 0;
}
if (flanke == 0)
{
stop = TCNT1;
MCUCR |= (1<<ISC00) | (1<<ISC01); //INT0 auf Steigende Flanke stellen (Löst Interrupt bei steigendet Flanke an INT0 aus
flanke = 1;
z1++;
}
}
Lesezeichen