Forum: Mikrocontroller und Digitale Elektronik Verwendung von TCNT0


von Klaus (Gast)


Lesenswert?

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
void timer0_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?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

Wenn ich das richtig verstanden habe kann man sich TCNT0 bei CTC sparen.

von Harry L. (mysth)


Lesenswert?

Klaus schrieb:
> oder bin ich wieder zu blöd um es zu verstehen?
Wenn du so fragst....JA!
Steht alles haarklein im Datenblatt!

von c-hater (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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

von Hannes (Gast)


Lesenswert?

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 🤔

von Axel S. (a-za-z0-9)


Lesenswert?

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?

von Hannes (Gast)


Lesenswert?

Leute

Klaus ist hier unterwegs als:

Klaus, Heiner, Peer usw - man muss nur z.B. nach Attiny841 suchen

von Hannes (Gast)


Lesenswert?

Hallo Klaus

siehe auch: Beitrag "Re: Angabe Frequen in einem Programm"

(ist ja von Dir)

von Jemand der AVR's gut kennt (Gast)


Lesenswert?

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

Beitrag #6764812 wurde von einem Moderator gelöscht.
von Klaus (Gast)


Lesenswert?

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.

von Hannes (Gast)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.