PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer0 mit zwei unterschiedlichen Zeiten ?



Looser
20.11.2005, 21:03
Ich hab jetzt meinen Timer0 zum laufen bekommen.

Zeit:
Load Timer0 , Reload
Incr Z
If Z = 28 Then
Z = 0
Stop Timer0
End If
Return

Ich rufe diesen Timer auf und er stellt sich wieder zurück (Z=0) und stopt. Jetzt möchte ich den Timer wieder aufrufen aber er soll diesmal viel, viel länger laufen. Die 28 zu erhöhen reicht nicht aus. Ist es irgendwie anders möglich ???

PicNick
21.11.2005, 06:39
Du kannst Reload ändern. ( kleiner--> länger)

hrei
21.11.2005, 11:17
Hallo,


Du kannst Reload ändern. ( kleiner--> länger)

sicher? Wenn ich mich und die Hilfe sich nicht täuscht, wird bei Load die Kalkulation 256-Wert ausgeführt. Ein Load Timer0, 256 würde den Timer also mit 0 Laden und nach dem 255ten Takt zum Overflow führen (max),
Ein Load Timer0, 1 wäre demnach die kürzest mögliche Variante.

Viele Grüße
Henrik

PicNick
21.11.2005, 12:23
@Hrei, alter Schwede :) : Laß dich nicht verwirren. Im Primitiv-Normal-Mode zählt der Timer0 einfach rauf, und wenn nach 255 + 1 der Überlauf kommt, steht im Counter NULL, und der Timer Flag wird gesetzt, gewissermaßen statt dem Carry. (s.Datasheet)
d.h., schreibst du 255 rein, zählt er genau einmal und schon kracht es, schreibst du was kleines (oder NULL) rein, muß er länger zählen.
Die Umrechnerei mit (256 - soll-ticks ) = preload kommt ja nur daher, weil er eben rauf und nicht runter zählt.

Keep codin' !

hrei
21.11.2005, 18:05
Hallo Robert,


@Hrei, alter Schwede :)
d.h., schreibst du 255 rein, zählt er genau einmal und schon kracht es, schreibst du was kleines (oder NULL) rein, muß er länger zählen.
Die Umrechnerei mit (256 - soll-ticks ) = preload kommt ja nur daher, weil er eben rauf und nicht runter zählt.


ja, nee, klar... :-), ich denke wir meinen das gleiche. Das Misverständnis dürfte darin bestehen, daß bei dem von Looser verwenderten Bascom Befehl (siehe auch in der neuen HTML-Hilfe):

Load Timer0 , variable (reload als Variablenname sollte hier vermieden werden, weil reserviertes Wort)

die Rechnung (256-Variable) schon durchgeführt wird. Es wird im Befehl also die Anzahl der Ticks bis zu Overflow direkt angegeben.
Daher größerer Wert --> längere Zeit
Bei der von mir meist angewendeten Methode (alá rnavr) wo einfach Timer0 = Preloadwert gilt natürlich:
Kleinerer Wert --> längere Zeit.

Was mich mehr ins Grüben bringt, ist Loosers Aussage:
"aber er soll diesmal viel, viel länger laufen."
Dem sind mit einen 8-Bit Timer sehr, sehr enge Grenzen gesetzt.

Ich gehe bei all dem davon aus, daß 'Zeit' die ISR darstellen soll.

Ach, Fragesteller machen es einem schon nicht leicht und ich neige dann auch noch dazu, es komplizierter zu machen :-).

Viele Grüße
Henrik

PicNick
21.11.2005, 18:27
Uiii, :oops: ich hab "load" für einen pseudo-befehl gehalten, dabei gibt's den wirklich. uiuiui. Also alles zurück.
Ja, das mit dem "viel, viel länger" läßt Übles schwanen.
Wir sagten, "das hätte schlimmer kommen können"
und siehe: Es wurde schlimmer