Forum: Mikrocontroller und Digitale Elektronik BASCOM:Welche Variable speichert bei clock = soft das Datum?


von micha b (Gast)


Lesenswert?

Programmiere zur Zeit an einem größeren Projekt mit Bascom
(Wiederspruch?), bei dem nebenher auch noch die Zeit angezeigt werden
soll.

Über..

Enable Interrupts
Config Date = Dmy , Separator = .
Config Clock = Soft
Date$ = "27.05.06"
Time$ = "18:00:00"

werden Zeit und Datum errechnet und auch korrekt ausgegeben.
Jetzt suche ich nach einer eleganten , einfachen Möglichkeit, die Uhr
bzw das Datum zu stellen.

Ansatz:
Denke, der Knackpunkt ist die Variable, in der die Sekunden, bzw. Tage
gespeichert werden. Wenn ich die "stellen" könnte, würde auch die
angezeigte Zeit / das Datum gestellt werden.

Auf manuellem Weg ist es ja kein Problem...

_sec = sec +1
if _sec > 59 then
   _sec = 0
   _min = _min + 1
end if
if _min > 59 then
   _min = 0
   _hour = hour + 1

... usw usw usw , allerdings wäre der andere Weg, direkt an der
Variable anzugreifen doch eleganter.


Kann mir jemand sagen, wie diese Variablen (die ja über clock = soft
erstellt werden) heissen?

mit Tomaten auf den Augen,

Micha B.

von Paul Baumann (Gast)


Lesenswert?

When you use the CONFIG CLOCK directive the compiler will DIM the
following variables automatic : _sec , _min , _hour, _day , _month ,
_year
The variables TIME$ and DATE$ will also be dimensioned. These are
special variables since they are treated different. See TIME$ and
DATE$.
The _sec, _min and other internal variables can be changed by the user
too.
But of course changing their values will change the DATE$/TIME$
variables.

Auf Deutsch: Der Compiler dimensioniert die Variablen _sec, _min
usw. von allein. Wenn Du einen Taster an einen Pin setzt, kannst
Du die Variablen verändern und die Uhr stellen. Sinngemäß:(If Pinb0 = 0
then _sec = _sec + 1)

MfG Paul

von advors (Gast)


Lesenswert?

Mit dem Befehl

Config Clock = Soft

erstellt BASCOM-AVR die Byte-Variablen
_Sec, _min, hour, _day, _month, _year
sowie die String-Variablen
Time$ und Date$ mit je 8 Bytes (+ Terminations-Byte 00H)

Vorausgesetzt ein 32.768Hz Quarz íst an die Pins TOSC1 und TOSC2
angeschlossen, aktualisiert eine ISR Routine ausgelöst durch den
entsprechenden 8-Bit Timer die Variablen _Sec ... _Year.

Die Zeit stellen/verändern kann man entweder über diese 6 Variablen
_Sec .. _Year oder üblicherweise durch Zuweisung der Variablen Time$
und Date$ mit den entsprechenden Zeit- bzw Datumstrings. Der
Datumstring muss im Format definiert wie im Config Date sein.
BASCOM-AVR befüllt/verändert dann intern die Variablen _Sec ... _Year.
Wird die aktuelle Zeit oder das Datum zur Ausgabe in einem String
benötigt, verwendet man ebenfalls die Variable Time$ und Date$
BASCOM-AVR benutzt auch hier die Variablen _Sec ... _year zur
Erstellung dieser String-Variablen.

von micha b (Gast)


Lesenswert?

Danke für die Antworten,

war mir soweit jedoch bereits bekannt.

Ich hatte die Hoffnung, es gäbe EINE Variable, von der aus dann die
_sec... _hour bzw. _day ... _year errechnet werden.

Schade, also doch von Hand....

Danke für die schnellen Antworten:-)

von Rahul (Gast)


Lesenswert?

Was willst du denn machen?
Wenn man die Uhr mit Tasten stellen will, wäre es müssig z.B. bei der
Umstellung von Sommer- auf Winterzeit um eine Stunde zurück (oder war
es doch vor?) 3600 Sekunden zurück zu zählen. Das wäre nämlich der
mindestens der Wert, den man bräuchte, wenn alle Stellen in einer
einzigen Variablen gespeichert werden.
Für andere Anwendungen ist diese Aufteilung meiner Ansicht nach auch
unproblematisch, sofern man mit ein paar IF-THEN-Abfragen (kann BASCOM
auch switch-case-Abfragen?) leben kann.

von advors (Gast)


Lesenswert?

Schau mal in der Hilfe unter SYSSEC() nach. Man kann die Zeit in eine
Long-Variable umrechnen und wieder zurück. SYSSEC ist die Anzahl der
Sekunden vom 1.1.2000 00:00:00.
Ob das allerdings die beste Lösung für dein Problem ist, weiß ich
nicht,

von micha b (Gast)


Lesenswert?

@advors:
Hab's inzwischen per Hand gelöst... lediglich die Schaltjahrgeschichte
ist dabei echt lästig. :-)

Aber interessieren würd's mich trotzdem:

SYSSEC kann doch nur den Weg auslesen, bzw. ausrechnen, wie kann ich
mit SYSSEC die einzelnen Variablen ändern?

von advors (Gast)


Lesenswert?

Dim lSec as Long

lSec = SysSec()     ' Anzahl Sekunden aus Softclock

lSec = lSec + 3600  ' z.B. 1 Stunde vorstellen

' Zurückschreiben in 2 Schritten mit Time and Date

_Sec = Time(lSec)   ' nimmt den Tagesteil aus lSec
_Day = Date(lSec)   ' nimmt die Anzahl Tage aus lSec

von Paul Baumann (Gast)


Lesenswert?

@Rahul
Freilich kann Bascom auch Case-Verzweigungen. Ist doch eine feine
Programmiersprache! :-))

MfG Paul

von micha b (Gast)


Lesenswert?

@advors: Danke ! ;-) Das ist die Lösung!

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.