Gast
#589596
Hallo allerseits! Ich experimentiere hier gerade mit dem 16-Bit Timer und einem LED-Lauflicht herum. Leider scheint mein Verständnis von diesem Timer vollkommen falsch zu sein. Zu meiner Schaltung: Am ATMega16 hängt ein 11,0592MHZ Quarz (wie in den meisten Tutorials) und ein LED Lauflicht mit 8 LEDs. In meinem Programm habe ich den Timer nun mit einem Prescaler von 256 versehen (d.h. Bit CS12 gesetzt). Das OutputCompare Register steht zur Zeit auf "OCR1A = 0x0002". Das ganze löst dann ein Interrupt aus, welches wiederum einen Zähler erhöht. Wenn der bei 1000 angekommen ist, schalte ich das Lauflicht um 1 weiter. Was ich also gerne hätte ist, dass das OutputCompareMatch genau jede Millisekunde ausgelöst wird, so dass das Licht jede Sekunde um 1 weitergeht. Allerdings läuft das ganze UNENDLICH langsam. Anstatt jede Sekunde dauert es fast 20 Sekunden, bis die LED weiterspringt. Ich habe auch schon mit allen möglichen Werten für das CompareRegister und den Prescaler rumprobiert, aber es will einfach nicht. Meine Rechnung: Wenn der Quarz 11,0592MHZ hat, und der Prescaler bei 256 liegt, läuft das ganze noch mit 43.200HZ. Da mein Compare Register auf 2 steht, müsste eigentlich 22.000 pro Sekunde "interrupted" werden, richtig (das ergäbe zwar keinen MilliSekundentakt, aber trotzdem was ganz schnelles)? Aber warum ist das ganze dann soooooo langsam?