#define F_CPU 16000000 #include "irmp.h" static void timer1_init (void) { #if defined (__AVR_ATtiny45__) || defined (__AVR_ATtiny85__) // ATtiny45 / ATtiny85: #if F_CPU >= 16000000L OCR1C = (F_CPU / F_INTERRUPTS / 8) - 1; // compare value: 1/15000 of CPU frequency, presc = 8 TCCR1 = (1 << CTC1) | (1 << CS12); // switch CTC Mode on, set prescaler to 8 #else OCR1C = (F_CPU / F_INTERRUPTS / 4) - 1; // compare value: 1/15000 of CPU frequency, presc = 4 TCCR1 = (1 << CTC1) | (1 << CS11) | (1 << CS10); // switch CTC Mode on, set prescaler to 4 #endif #else // ATmegaXX: OCR1A = (F_CPU / F_INTERRUPTS) - 1; // compare value: 1/15000 of CPU frequency TCCR1B = (1 << WGM12) | (1 << CS10); // switch CTC Mode on, set prescaler to 1 #endif #ifdef TIMSK1 TIMSK1 = 1 << OCIE1A; // OCIE1A: Interrupt by timer compare #else TIMSK = 1 << OCIE1A; // OCIE1A: Interrupt by timer compare #endif } #ifdef TIM1_COMPA_vect // ATtiny84 #define COMPA_VECT TIM1_COMPA_vect #else #define COMPA_VECT TIMER1_COMPA_vect // ATmega #endif ISR(COMPA_VECT) // Timer1 output compare A interrupt service routine, called every 1/15000 sec { (void) irmp_ISR(); // call irmp ISR // call other timer interrupt routines... } int main (void) { DDRB = 0b11111111; // Alle auf B sind als Ausgänge definiert DDRC = 0b11001111; // PC4, PC5 Eingänge DDRD = 0b11110011; // PD2, PD3 Eingänge (D2= IR IN; IR auch in IRMPConfig.h eingestellt! uint8_t i=0; uint8_t vol_takt=20; // Taktung für Taste Vol+ definieren IRMP_DATA irmp_data; irmp_init(); // initialize IRMP timer1_init(); // initialize timer1 sei (); // enable interrupts for (;;) { if (irmp_get_data (&irmp_data)) { if (irmp_data.protocol == IRMP_NEC_PROTOCOL && // NEC-Protokoll irmp_data.address == 0xDC23 // Adresse 0xDC23 && irmp_data.command == 0x0014 | // Taste Vol+ irmp_data.protocol == IRMP_NEC_PROTOCOL && irmp_data.address == 0xDC23 && irmp_data.command == 0x0017 ) // Taste Pfeil oben { _delay_ms(110); while (IRMP_FLAG_REPETITION == 0x01) // Funktion ausführen solgange Wiederholsignal gesendet wird??? { PORTD |= (1<