sorry,
Timer0 wird eigentlich mit TCCR0=&B00000101 gestartet.(Vorverteilung 1024)
Oder in Bascom mit Config Timer0, welches auf das selbe Register zugreift.
mfg
Tomkeule
Druckbare Version
sorry,
Timer0 wird eigentlich mit TCCR0=&B00000101 gestartet.(Vorverteilung 1024)
Oder in Bascom mit Config Timer0, welches auf das selbe Register zugreift.
mfg
Tomkeule
Hallo tomkeule,
zu 2.: Mit Enable werden sie erlaubt, mit start gestartet -->siehe Hilfe oder auch: RTFM!
zu3.: Klar X und Y sind Word- Werte, mitgedacht hast du da. Leider hast du vergessen, dass deine Timer nur 8 bit haben.
Ich sags dir jetzt nochmals: Dein Timer hat 8 (in Worten: ACHT) bit. Er läuft danach über! Deine Variable, die du reinschreibst, hat 16 bit. (SECHZEHN). Hast du überlegt, was passiert, wenn du einen Wert grösser als 8bit in eine 8bit-Variable schreibst???
Gruss, Michael
Hallo Michael,
bis auf Punkt 3 wäre soweit alles geklärt.
Bei meiner Variablen die als WORD deklariert ist(2 Byte) wird beim speichern in einer Byte -Variablen das 1.Byte abgeschnitten.
Glaube ich
mfg
Tomkeule
Hallo
Nochmal zur Erklärung
Mit
Config Timer0 = Timer , Prescale = 1024 wird der Timer Vorteiler eingestellt und danach läuft der Timer0 auch. Man kann den Timer0 nur über den Vorteiler anhalten indem man ihn auf null setzt.
Mit
Enable Timer0
wird der Timer0 Overflow Interrupt erlaubt und sonst gar nichts.
Mit
Stop Timer0
Wird der Vorteiler von Timer0 auf null gesetzt und er wird somit angehalten.
Mit
Start Timer0
Wird der alte Vorteilerwert wieder zurück geschrieben und der Timer damit wieder gestartet.
Das gleiche gilt für die anderen Timer auch.
MFG
Dieter
Welchen wert setze ich wenn ich Timer0 = X setzte?
kann ich den timer auch langsamer laufen lassen?
Hallo
Mit Timer0 = x schreibst du den Wert der Variablen x in Timer0. Kommt halt immer darauf an, welcher Wert in x steht.
Langsamer geht leider nicht, da der maximale Vorteiler 1024 ist und der ja eingestellt ist.
Welche Zeiten willst du denn erreichen ?
Vielleicht kann ich dir da mal eine Lösung zeigen .
MFG
Dieter
naja ich will das der schrittmotor sich langsamer dreht...
bis jetzt hab ich das nur mit modulo gemacht, gibts da keinen anderen trick?
Ok dann wollen wir mal rechnen.
Der Timer ist ja nur eine Speicherstelle des uC, den man mit dem Takt verbinden kann
und dann um 1 erhöht wird. Beim Wechseln von 255 auf 0 ( 256) kann ein Interrupt
ausgelöst werden.
Daraus ergibt sich.
Takt / Vorteiler = Zeit pro Erhöhung Beispiel: 8 MHZ / 1 = 125 ns
oder 8MHZ / 1024 = 128 us. Damit kann Timer0 minimal in 125 ns oder maximal in 128 us
um 1 erhöht werden.
Wenn man den Timer0 auf 0 einstellt dauert das dann 256 mal so lange, bis ein Interrupt auftritt.
Beispiel :
Timer0 = 100 Vorteiler 1024 Takt 8 MHZ
8MHZ / 1024 = 128 us pro Erhöhung. Der Timer braucht jetzt noch 256 - 100 = 156 Erhöhungen
bis zum Interrupt ---> 156 * 128 us = 19,98 ms bis zum Interrupt.
Wenn du jetzt in der Interrupt Routine eine Variable deiner Wahl um 1 erhöhst, hast
du doch eine Erhöhung alle ca 20 ms. Wenn deine Variable damit den Wert 50 erreicht,
so sind ungefähr 1 Sekunde vergangen. ( 0,9984 Sekunden )
MFGCode:dim zeit as byte
On Timer0 Ontimer0
Config Timer0 = Timer , Prescale = 1024
Enable Timer0
do
nop
loop
Ontimer0:
Timer0 = 100 'Neue einstellen für 20 ms INT.
incr zeit 'Interrupts zählen
if zeit >= 50 then '1 Sekunde vorbei
Toggle Portc.2
zeit = 0 'Zeit löschen
endif
Return
Dieter
Hi Dino Dieter,
feines übersichtliches Beispiel! Albanac, daraus kann man eigentlich alles ableiten. Je nach Geschwindigkeit kannst du in der Timerroutine eigene Zähler nutzen und andere Subroutinen für bestimmte Aufgaben heranziehen. So könnte eine die Schrittmotoren bewegen und eine andere eine Uhr stellen usw. Durch veränderung des maximalen Zählerstandes bei dem auf 0 zurückgestellt wird, kannst du auch die Geschwindigkeit von Schrittmotoren regeln. Wenn man es einigermaßen elegant gestaltet dann ist das am Ende genauso einfach wie mit Getriebemotoren, nur halt genauer da du auch Schritte zählen kannst.
Hallo Frank
Ja das mit den Timern ist so eine Sache.
Habe mich am Anfang auch sehr schwer damit getan, jetzt geht es aber gut.
Timer1 hat ja noch viel viel mehr Möglichkeiten. Ist schon Klasse, was man mit den kleinen Dingern so alles anstellen kann.
MFG
Dieter