Hehe, die letzte Zeile sagt nicht aus, dass man das auch klein schreiben darfocr2 ist eine Konstante, die direkt darüber definiert wird.
edit: Hier noch mal der Vollständigkeit halber. Folgender Abschnitt ist in der Init() Funktion der Asuro-Lib zu finden - hier wird die grundlegende Einstellung vorgenommen:
Und so sieht die main() aus, hier kann die Pulsbreite je nach Taste geändert werden:Code:/* 00117 Timer2, zum Betrieb mit der seriellen Schnittstelle, fuer die 00118 IR-Kommunikation auf 36 kHz eingestellt. 00119 */ 00120 #if defined(__AVR_ATmega168__) 00121 // fast PWM, set OC2A on compare match, clear OC2A at bottom, clk/1 00122 TCCR2A = _BV(WGM20) | _BV(WGM21) | _BV(COM2A0) | _BV(COM2A1); 00123 TCCR2B = _BV(CS20); 00124 // interrupt on timer overflow 00125 TIMSK2 |= _BV(TOIE2); 00126 #else 00127 // fast PWM, set OC2A on compare match, clear OC2A at bottom, clk/1 00128 TCCR2 = _BV(WGM20) | _BV(WGM21) | _BV(COM20) | _BV(COM21) | _BV(CS20); 00129 // interrupt on timer overflow 00130 TIMSK |= _BV(TOIE2); 00131 #endif 00132 // 36kHz carrier/timer 00133 OCR2 = 0x91;
edit2: Irgendwas stimmt mit der main() aber nicht, wenn ich das richtig sehe, haben die Tasten überhaupt keine Funktion mehr, ausser dass ein nichtssagender Wert ausgegeben wird ...Code:int main(void) { unsigned char sw; Init(); DDRD |= (1 << DDD1); // Port D1 als Ausgang PORTD &= ~(1 << PD1); // PD1 auf LOW // InitIRDetect(); while (1) { UCSRB = 0; OCR2 = 0xFE; if (PIND & (1 << PD0)) StatusLED(GREEN); else StatusLED(RED); sw = PollSwitch(); if (sw & 0x01) ocr2 = 0xFE; //Pulsbreite 1 if (sw & 0x02) ocr2 = 0xFD; //Pulsbreite 2 if (sw & 0x04) ocr2 = 0xFB; //Pulsbreite 4 if (sw & 0x08) ocr2 = 0xF7; //Pulsbreite 8 if (sw & 0x10) ocr2 = 0xEF; //Pulsbreite 16 if (sw & 0x20) ocr2 = 0x90; //Pulsbreite 110 if (sw) { OCR2 = 0x91; PrintInt(sw); SerPrint(" "); PrintInt(ocr2); SerPrint("\r\n"); } // Msleep(100); } return 0; }
Die Quelle kommt allerdings auch aus dem Release Candidate der Lib ...![]()






Zitieren
Hättet ihr ja auch verraten können das die 36kHz über nen Trick erzeugt werden. Naja,durch die Dokumentation in der Lib kommt man schließlich hinter dieses mysteriöse Geheimnis. Wenn man den Timer 2 in Assembler so initialisiert wie von Trapperjohn gezeigt spuckt die IR-Diode eine unmodulierte Frequenz von ca. 31,45kHz aus. 

Lesezeichen