www.mikrocontroller.net

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


Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: advors (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:-)

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: advors (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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,

Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: advors (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Paul Baumann (Gast)
Datum:

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

MfG Paul

Autor: micha b (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@advors: Danke ! ;-) Das ist die Lösung!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.