PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeit messen



mottobug
16.11.2006, 10:49
Hallo,

ich versuche ein Program zu schreiben das nach 20 Minuten seinen Zustand ändert. Das ganze will ich nicht einfach mit wait machen, sondern in dem ich die vergangene Zeit messe. Etwa in der Form.

Dim Laststate as Long

Laststate = now()

do
if now() - Laststate > 1200 then
'mach was
end if
loop

Ich verwenden einen Tiny 2313 ohne externen Quarz.

Ich habe bereits mehrfach die Funktionsreferenz gelesen und viele Funktionen ausprobiert (syssec(), getsecofday()), die Beispiele die bei Bascom dabei sind ausprobiert, mit config Clock rumexperimentiert...

Jedesmal stelle ich fest das die Uhr überhaupt nicht läuft, sie schlicht nicht weiterzählt.

Im Netz fand ich über dieses Thema fast gar nix. Entweder ist dieses Thema so trivial und ich blicks nicht, oder so etwas wird selten gemacht.

Den Hinweis in der Bascom Funktionsreferenz bezüglich des Externen Quarzes habe ich nicht verstanden. Ich kann doch mit dem internen Takt und z.B. wait ziemlich genau einen Zeitabstand warten!? Sollte da nicht auch eine ungefähre Zeitmessung drin sein?

Ich will keine exacte Quarz Uhr bauen, ich möchte einfach nur 20 Minuten warten ohne die Hauptschleife zu blockieren. Eine Abweichung von bis zu einer Minute währe ohne weiteres akzeptabel.

Im Moment überlege ich so etwas wie:

Dim Ticks as Long

do
' do something
waitms 500
Ticks = Ticks + 1
done

zu benutzen. Gibts etwas eleganteres?

Tom.

Guy
16.11.2006, 13:24
Mal vorausgesetzt der Controller läuft mit 1 Mhz und du braust den Timer1 nicht wo andres würde ich es so machen.

Der Timer macht jede Sekunde eine IRQ und erhöht den Zähler um 1. Bei 1200 Sekunden= 20 Minuten (mache deine Arbeit).



$regfile = "m16def.dat"
$crystal = 1000000

Dim Sekunden As Integer

Config Timer1 = Timer, Prescale = 64

On Timer1 Timer_irq
Const Timervorgabe = 49911
Enable Timer1
Enable Interrupts
Do
If Sekunden => 1200 Then
Print "20 Sekunden "
Sekunden = 0
End If
Loop

Timer_irq:
Timer1 = Timervorgabe
Sekunden = Sekunden + 1
Return



mfg
Guy

mottobug
17.11.2006, 16:22
Danke für den Tip!

Hilft mir weiter.

Gibt es eine Möglichkeit eine echte Uhr innerhalb von Bascom zu haben? Gibt es dazu evtl. Doku im Netz? Ich hab nix gefunden.

Tom.

Vitis
17.11.2006, 21:43
mann nehme einen 32,768 KHz Quarz und hänge ihn an TOSC1 und 2,
schon steht Dir in Bascom die Clock - Funktion zur verfügung,
die auch relativ (aber nur relativ) genau ist. 2-4 Sekunden Abweichung
am Tag sind dann noch möglich.