Hallo
Bei der Verwendung des Timers 0 habe ich im Netz, auf AVR GCC und im
Datenblatt TCNT0 gefunden.
Da steht zum Beispiel:
Timer/Counter Daten Register Timer 0
Dieses ist als 8-Bit Aufwärtszähler mit Schreib- und Lesezugriff
realisiert. Wenn der Zähler den Wert 255 erreicht hat, beginnt er beim
nächsten Zyklus wieder bei 0.
Als Beispiel dazu:
1
voidtimer0_init()// Timer 8 Bit, 8MHz, 1ms
2
{// Timer 0 konfigurieren
3
TCCR0A=(1<<WGM01);// CTC Modus
4
TCCR0B=(1<<CS01)|(1<<CS00);// Prescaler 64
5
TCNT0=1;
6
OCR0A=124;// Wert für 1ms
7
TIMSK0|=(1<<OCIE0A);// Interrupt erlauben
8
}
Bei einem anderen Teil steht dann TCNT0=0 drin. Wenn ich mir die
Funktion im DB ansehe bin ich ganz durcheinander.
Einige sagen es muss sein andere brauches nicht.
Was stimmt den nun oder bin ich wieder zu blöd um es zu verstehen?
Bei dieser Initialisierung läuft der Timer eben einmal von 1 bis 255 und
löst dann den Interrupt aus. Dann startet er aber wieder bei 0. Nur der
erste Lauf ist also etwas kürzer. Ist meistens Quak, das so zu
schreiben, es sei denn, in der ISR wird TCNT0 wieder mit 1 vorbelegt.
Wird der Timer nur einmal nach dem Reset initialisiert, kann man sich
TCNT0 = 0 ebenfalls sparen, da 0 nach Reset sowieso im TCNT0 Register
steht.
Wobei zu ergänzen wäre, dass im gezeigten Beispiel der CTC-Modus
verwendet wird, TCNT0 also nur bis zum Wert des OCR0A läuft, bevor er
dann wieder bei 0 beginnt.
Klaus schrieb:> Wenn ich das richtig verstanden habe kann man sich TCNT0 bei CTC sparen.
TCNT0 (TCNTx) kann man sich fast generell sparen. Nur in einigen wenigen
Anwendungen ergibt es einen Sinn, jemals auf das Zählerregister
schreibend zuzugreifen.
Und bei genauerer Betrachtung sind das obendrein auch noch fast immer
Anwendungen, bei denen das nicht nötig wäre, wenn man ein wirklich für
die konkrete Anwendung geeignetes Timerfeature verwendet hätte...
Letztlich bleiben also noch sehr viel weniger Anwendungen über, bei
denen es wirklich sinnvoll ist, schreibend auf das Zählerregister
zuzugreifen.
Harry L. schrieb:>> oder bin ich wieder zu blöd um es zu verstehen?> Wenn du so fragst....JA!> Steht alles haarklein im Datenblatt!
... und danke für die Blumen. Leider hält sich meine Intellegenz in
Grenzen die mich sehr stören. Leider bin ich zu dumm um das zu ändern.
Das hat aber einen Vorteil: Ich darf die blöden Fragen stellen und
darüber freue ich mich sehr.
Danke für eure Hilfe
LG Klaus
Klaus schrieb:> Harry L. schrieb:>>> oder bin ich wieder zu blöd um es zu verstehen?>> Wenn du so fragst....JA!>> Steht alles haarklein im Datenblatt!>> ... und danke für die Blumen. Leider hält sich meine Intellegenz in> Grenzen die mich sehr stören. Leider bin ich zu dumm um das zu ändern.> Das hat aber einen Vorteil: Ich darf die blöden Fragen stellen und> darüber freue ich mich sehr.> Danke für eure Hilfe> LG Klaus
Na, dass das noch kein Moderator gelöscht hat 🤔
Klaus schrieb:> Harry L. schrieb:>>> oder bin ich wieder zu blöd um es zu verstehen?>> Wenn du so fragst....JA!>> Steht alles haarklein im Datenblatt!>> ... und danke für die Blumen. Leider hält sich meine Intellegenz in> Grenzen die mich sehr stören. Leider bin ich zu dumm um das zu ändern.> Das hat aber einen Vorteil: Ich darf die blöden Fragen stellen
Nein, darftst du nicht. Zumindest nicht, ohne dafür Feuer zu kriegen.
Deine Fragen zeigen, daß du dich NULL mit den Timern auseinander
gesetzt hast. Deswegen geht auch alles drunter und drüber. Es gibt einen
Timer0, der ist 8 Bit breit und dessen Zählerstand kann aus TCNT0
gelesen (oder ein neuer Wert dahin geschrieben) werden. Aber der Zähler
hat verschiedene Betriebsmodi, in denen er sich unterschiedlich verhält.
Und das steht alles haarklein im Datenblatt. Nicht "im Netz" oder "auf
AVR GCC". Und wenn du es schon im Datenblatt nicht liest, warum sollen
wir es dann für dich nochmal aufschreiben?
Damit du es wieder nicht liest?
Servus,
ich würde es so zusammenfassen:
Mit dem TCNT0 Register kann man verrückte Sachen anstellen (positiv wie
negativ).
Zu 99,9999% möchte man das nicht machen.
Wenn man so wenig Erfahrung mit AVR's und Timern hat, daß man danach
fragen muß: Dann glaube ich nicht, daß man so verrückte Sachen machen
möchte, daß man Zugriff auf dieses Register benötigt.
Wenn man wirklich verstanden hat, was man mit diesem Register an
Timer-Funktion darstellen möchte, dann hat man den AVR so weit
verstanden, daß man nicht mehr fragen muß.
Gruß
Robert
Leider stimmt deine Vermutung nicht ganz. Bei dieser Frage ging es nicht
um den Attiny841 sondern um den Atmega 8 bzw 32, oder eben eine
allgemeine Frage.
Trotzdem hast du die Frage zu Anfang nicht korrekt gelesen. Es gibt viel
mehr um die Beispiel auf den Seiten, bei manchen steht es drin bei
anderen nicht.
Wenn es drin steht haben auch andere den Sinn nicht verstanden.
Es ging dabei nicht um bestimmte Betriebsarten sondern ganz allgemein.
Warum darf man nicht fragen wenn man den einen oder anderen Teil der
Technik nicht versteht oder unklar ist. Der Sinn dieses Forums besteht
auch darin anderen zu Helfen und nicht an den Pranger zu stellen.
Klaus schrieb:> Leider stimmt deine Vermutung nicht ganz. Bei dieser Frage ging es> nicht> um den Attiny841 sondern um den Atmega 8 bzw 32, oder eben eine> allgemeine Frage.> Trotzdem hast du die Frage zu Anfang nicht korrekt gelesen. Es gibt viel> mehr um die Beispiel auf den Seiten, bei manchen steht es drin bei> anderen nicht.> Wenn es drin steht haben auch andere den Sinn nicht verstanden.> Es ging dabei nicht um bestimmte Betriebsarten sondern ganz allgemein.
Hallo Klaus
Du verstehst weder die Datenblätter noch bist Du fähig, Dich
auszudrücken 🤷♂️ (Siehe das zitierte Gefasel - was willst Du damit
sagen?)
Woher soll der geneigte Leser wissen, welchen Prozessor Du meinst, wenn
Du ihn nicht explizit benennst?
Du kopierst irgendwelche Codeschnipsel aus dem Netz hirnlos zusammen und
erwartest, dass sich jemand dann erbarmt und Dir die Funktion erklärt.