ich glaub ich habs jetzt ... aber es driftet noch immer .. diesmal ist der counter ein klein wenig schneller als die echte zeit, kann aber eventuell am internen schwinger von dem Atmega liegen oder was meint ihr ?

Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/timer.h>
#include <avr/signal.h>

volatile unsigned long tenth_ms_count; 

SIGNAL(SIG_OUTPUT_COMPARE0)
{
  tenth_ms_count++;
}

void init_timer0(void)
{
  TCCR0 = 0;
  TIFR  |= BV(OCIE0);
  TIMSK |= BV(OCIE0);         /* enable output compare interrupt */
  TCCR0  = BV(WGM01)|BV(CS01); /* CTC, prescale = 8 */
  TCNT0  = 0;
  OCR0 = 100;
  sei();
} 

void tenth_ms_sleep(unsigned long tenth_ms)
{
  TCNT0  = 0;
  tenth_ms_count = 0;

  while (tenth_ms_count < tenth_ms)
    ;
}

int main(void)
{
	init_timer0();
        ...
}
EDIT: Ich hab mir anfangs einen beispiel-code ausm Forum gesucht ihn aber net wirklich begriffen .... jetzt hab ich mir ne halbe stunde lang das datenblatt durchgelesen (mehrmals) und so langsam wurde das etwas kryptische englisch doch durchsichtig

kann mir eventuell noch jemand erklären wie cih mit den 2 A/B-Registern von den 16bit Timern umzugehen habe ? wieso haben die 2 Kontrollregister ???? muss ich die einfach beide identisch programmieren und dann die einstellungen für den 8bit timer verwenden ? weil mit o.g. code kann cih maximal 5,6s messen ... obwohl das theoretisch völlig ausreicht

EDIT: andere frage, kann man den µC während der sleep anweisung nicht irgendwie ein wenig stromsparender gestalten ? wenn ja, welche funktionen sollte ich abschalten und wie kann ich ihn aus diesem zustand effektiv wieder herausbringen ??? also ich dachte hier die programmausführung in echt zu blockieren und dann per interrupt wieder loszulassen.

also statt den vergleich in der while-schleife den vergleich im interrupt auszuführen und den prozessor dann wieder aufzuwecken ?! oder geht bei der operation zu viel zeit verloren ?

EDIT: Meine Idee wäre es den µC in den Idle Mode zu versetzen und in jedem COMPARE_OUTPUT0 ISR einen timerwert mit dem zielwert zu vergleichen und den µC dann "manuell" aus dem Sleepmode zu kicken ... leider hab ich noch nicht ganz verstanden WIE ich das machen muss ?! also das aufwecken