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++; } }







Zitieren

Lesezeichen