Hehe, die letzte Zeile sagt nicht aus, dass man das auch klein schreiben darf
ocr2 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:
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;
Und so sieht die main() aus, hier kann die Pulsbreite je nach Taste geändert werden:
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;
}
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 ...
Die Quelle kommt allerdings auch aus dem Release Candidate der Lib ...
Lesezeichen