Forum: Mikrocontroller und Digitale Elektronik Timer unter Bascom


von Andreas (Gast)


Lesenswert?

Hallo, kann ich unter Bascom feststellen, ob ein Timer aktiv ist oder 
nicht ?

Danke !!!

von Marko (Gast)


Lesenswert?

klar, z.B.
das gute alte LED-Blink Programm.

in die Timer ISR einfach

toggle portb.6 beispielsweise

von _CH_ (Gast)


Lesenswert?

Hallo,

>das gute alte LED-Blink Programm.
>in die Timer ISR einfach
das heißt ja, dass auch zusätzlich ein Interrupt aktiviert sein muss...

>ob ein Timer aktiv ist oder nicht ?
Ich kenne Bascom nicht, aber eine Möglichkeit wäre das "TCCRx"? 
(Timerclocksource) Register auszulesen und nachzusehen ob ein Clock 
aktiviert ist, der deinen Timer zählen lässt.
Ob es möglich ist mit Bascom an das Register ranzukommen kann ich 
allerdings nicht sagen. Evtl Inline-Assembler?

Gruß,
Christian

von Andreas (Gast)


Lesenswert?

Ich wollte, solange der Timer aktiv ist, ganz bestimmte tasten 
sperren.......

von Timo (Gast)


Lesenswert?

Der Timer ist nach der Aktivierung(Start Timer0) immer aktiv.
D.h. nach dem er einen Überlauf hatte fängt er wieder von vorne an.
Wenn Du einen Interrupt aktiviert hast kannst den Überlauf nutzen.
Sonst kannst Du z.b timer0 als Byte-Variable nutzen
if timer0 >= 20 then portb.0 = 0
Dabei ist aber die Abfragerate zu beachten.

von Hannes L. (hannes)


Lesenswert?

Andreas wrote:
> Ich wollte, solange der Timer aktiv ist, ganz bestimmte tasten
> sperren.......

Nunja, es kommt darauf an, was Du unter "Timer" verstehst.

Da es auch Leute gibt, die in ihren Programmen die real vorhandene 
Hardware nutzen und programmieren, anstatt mit Bauklötzern zu spielen, 
denkt man beim Begriff "Timer" zuerst an einen der Hardware-Timer des 
Mikrocontrollers.

Du meinst aber vermutlich einen programmierten "Timeout", also einen in 
Software nachgebildeten "Timer", also eine Variable, die (z.B. von einem 
Hardware-Timer, der immer läuft und einige Dinge im Programm 
synchronisiert) heruntergezählt wird, solange sie noch nicht 0 ist und 
bei Erreichen von 0 eine Aktion auslösen kann. Den Zustand eines solchen 
"Timeouts" kann man "nebenher" abfragen und daraus entscheiden, ob eine 
bestimmte Handlung (z.B. Tasten abfragen) durchgeführt wird oder nicht.

Bei mir hat eigentlich jedes AVR-Programm einen Timer im Hintergrund 
laufen, in dessen Interrupt einzelne Arbeitsabläufe "synchronisiert" 
werden. Dies erhöht die Effizienz des Programms, da Warteschleifen 
(Busy-Waits, Delays) vermieden werden. Anstatt auf der Stelle zu treten 
und zu warten, kann sich der AVR anderen noch zu erledigenden Dingen 
widmen, ist halt sowas ähnliches wie Multitasking. Das geht natürlich 
nur bei hardwarenaher Programmierung, inwieweit sich vorgefertigte 
Module eines "Baukastens" in diese Phillosophie einbinden lassen, ist 
mir nicht bekannt.

...

von MR (Gast)


Lesenswert?


von Ocke (Gast)


Lesenswert?

Timer werden doch i.d.R. gestoppt und gestartet. Also einfach vor den 
Befehl 'Start Timer0' noch ein Flag setzen bzw. bei 'Stop Timer0' das 
Flag zurücksetzen. Dann das Abfragen der Tasten über dieses Flag 
steuern.
O.

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.