Timerfrage schrieb:
> Wenn ich den deaktiviere und F_CPU=8000000UL setze, läuft der Controller
> mit 8 MHz.
In etwa. Und es ist unwichtig, was du in F_CPU angibst, der Controller
interessiert sich für diesen Scheiss exakt garnicht, er erfährt davon
nämlich auch rein garnix.
Allerdings ist es für deinen Compiler relativ sinnvoll, dass du den
korrekten Takt in F-CPU angibst, denn viele der von dir raubkopierten
C-Fragmente verlassen sich darauf, dass diese Angabe der Realität
entspricht.
Blöd nur, wenn du zur Laufzeit den Takt wechselt, was beim Tiny841 (und
nicht nur bei dem) ja ziemlich problemlos möglich und garnicht so selten
auch sinnvoll ist. Dann fällt diese ganze C-Gülle einfach mal nur voll
auf die Nase, denn dann gibt es keinen programmweit gültigen Wert für
F_CPU mehr...
> Ich speise an den INT0 ein Rechtecksignal mit 10 HZ und reagiere auf die
> fallende Flanke. ich messe am INT0 von fallender Flanke zur fallenden
> Flanke. Die Zeit muss 100ms betragen. mit einem Prescaler von 1024,
> beträgt meine Timerfrequenz noch 7812,5 kHz, demnach müsste der Timer
> doch alle 128us eins höher zählen.
Jepp. Genauso ist das.
> Bei 100ms also 781 Inkremente.
Fast. Genau 781,25. Er wird also mal 781 und mal 782 Incremente zählen.
Im Mittel werden diese Fälle im Verhältnis 4:1 auftreten.
> Der
> Timerwert solle dann doch bei 16 sein und der Overflow bei 3.
Wie kommst du denn darauf? Wenn man mal einen 8Bit-Timer annimmt (und
die impliziert, dass der bei 0 startet) würde er 3 mal überlaufen (das
stimmt) und der Zählerstand sollte 13 oder 14 sein (nicht 16).
> Ich
> bekomme allerdings einen Timerwert von 213 und einen Overflow von 1.
Dann stimmt sicher irgendwas in deiner Software nicht. Der beobachtete
Wert weisst allerdings nicht direkt auf einen typischen Fehler hin.
Deswegen kann man in Ermangelung von Code nichtmal raten, was du falsch
gemacht hast. Da musst du schon deinen Code posten.