Gast
#1652645
Hallo Community, Kann mir Jemand Bitte einen Tipp dazu geben wie ich folgendes Problem gelöst bekomme: - Ich möchte in meiner main 1 sek. lang (nur Beispiel) überprüfen wie oft mein Button gedrückt wurde. Danach startet entsprechend meinem Timer nach jeder Sekunde ein Interrupt der überprüft ob mein Zähler größer 2. Wenn ja (also Button mind. 2 mal gedrückt) zeigt er dieses durch eine LED an. Den Code unten habe ich soweit geschrieben. Nur haut es irgendwie nicht hin. Meine Button-auslöser werden irgendwie nicht registriert?! ////////////////////////////////////////////////////////////////////// #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> uint8_t x=0; int main (void) { DDRC |= (1 << 5); // Set LED as output PORTC |= (1 << 5); // Toggle the LED off DDRD |= (1 << 2); PORTD |= (0 << 2); TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode TIMSK |= (1 << OCIE1A); // Enable CTC interrupt sei(); // Enable global interrupts OCR1A = 15624; // Set CTC compare value to 1Hz at 1MHz AVR clock, with a prescaler of 64 TCCR1B |= ((1 << CS10) | (1 << CS11)); // Start timer at Fcpu/64 for (;;) { if (!(PIND & 1<<PD2)) // if button pressed x++; } } ISR(TIMER1_COMPA_vect) { if (x >= 2) { PORTC &=~ (1 << 5); // Turn LED on _delay_ms (1000); PORTC |= (1 << 5); // Turn LED off x=0; } } ////////////////////////////////////////////////////////////////////// gruß R.