Hallo,
nein das ist nicht der ganze Code. Ich dachte die entscheidenen Teile wären die oben genannten.
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 char impuls1;
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
sei(); //Interupts aktivieren
while(1)
{
if (Zaehler2 == test)
{
impuls = stop - start;
itoa(impuls, impuls1,10);
lcd_gotopos(2,1);
lcd_writetext("Impd: " + impuls1);
}
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);
}
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 = 0;
}
}
Das ist jetzt der ganze. Ist ja auch nur ein Testprogrämmchen.
Flanke wird beim ersten Start des Controllers auf 1 gesetzt und dient nur dazu im Interrupt in die richtige Schleife zu sprinngen.
Lesezeichen