Hallo miteinander,

Habe mich nochmals mit dem Ganzen befasst, mir ist nun einiges klarer geworden, doch leider noch nicht alles:
1. Warum rechnet der compare2 die 36kHz mal zwei?
2. Die ganzen Timer-Einstellungen (TCCR2,OCR2 und TIMSK) (habe die werde gefunden im ATmega8 Datenblatt, jedoch noch nicht verstanden. Werde es aber nochmals selbst versuchen)
3. Die Sekunde die er warten soll ist länger als eine Sekunde (habe ein eigenes makefile erstellt und dort eine ATmega8 und den Takt mit 8MHz definiert)

Hoffe ihr könnt mir bei der Frage 1 und 2 weiter helfen.
Hier noch mein Funktionierender Code:
Code:
 #include <avr/io.h> 
 #include <avr/signal.h>
 
 
 //Front LED an Port D6
 #define D6			(1<<PD6)


// unsigned char= Wertbereich ohne Vorzeichen von 0-255
// volatile 	= wird benutzt, um eine Variabel der Interrupt-Rutine zu geben 
volatile unsigned char count72kHz;					


// Rutine die mit 36Khz arbeite. Alle [1/(36*2)= 13.89müs] wird count72kHZ um 1 erhöht
SIGNAL (SIG_OUTPUT_COMPARE2) {count72kHz ++;}


// int	= Wertbereich von (-32768)-32767 
int i;											
 
 
 // main Prozess wird gestartet
 int main (void) {
 
 
 // Port D6 wird als Ausgang gesetzt
 DDRD |= D6;
 
 
 // WGM21 = Mode 2 -> CTC
 // COM20 = auf OC2 auf gleichen Wert vergleichen
 // CS20  = kein prescaling
 TCCR2= (1<<WGM21) | (1<<COM20) | (1<<CS20);
 
 
 // 0x6E 110
 OCR2 = 0x6E;
 
 
 //Overflow-Interrupt aktivieren 
 TIMSK |= (1<<OCIE2);
 
 sei ();						//alle Interrupts einschalten
 
 
 while (1) {					//Endlosschleife starten
 
 PORTD |= D6;					//Port D6 auf high
 for (i= 0; i < 1000; i++)		// i ist 0, warten bis i 500 hat, i plus 1
 {
  count72kHz = 0;				//Variabel count72kHz ist 0
  while (count72kHz < 72);		//warten bis count72kHz 72 hat
 }
 
 
 PORTD &= ~D6;					//Port D6 auf low
 for (i= 0; i < 1000; i++)		//sieh oben
 {
  count72kHz = 0;
  while (count72kHz < 72);
 }}
 
 return 1;						//zurück zu main, wird aber nicht erreicht
 }
Danke für eure Hilfe
GR Bongo