hmmm ... wenn du über einen zweiten String gehst könnts gehen, aber das ist nur ne Spekulation ... also
dim tempstring as string*8
tempstring=time$
if tempstring="00:00:00" then
' irgendwas
endif
hmmm ... wenn du über einen zweiten String gehst könnts gehen, aber das ist nur ne Spekulation ... also
dim tempstring as string*8
tempstring=time$
if tempstring="00:00:00" then
' irgendwas
endif
Vor den Erfolg haben die Götter den Schweiß gesetzt
Wozu jedesmal Cursor off?
Am besten ohne waitms arbeiten.
Du kannst S in einer anderen Variablen zwischenspeichern und wenn S geändert wurde das Display aktualisieren. Außerdem zählst Du jede Sekunde S hoch, da brauchst Du nicht Time$ vergleichen
Code:Cursor Off dim s_alt as long const sTag =60*60*24 Do if s <> salt then salt=s Cls Locate 1 , 1 Lcd S Locate 2 , 1 Lcd "Zeit " ; Time$ end if Loop Sectic: incr s 'Sekunden-Tageszähler if s=stag then S = 0 Time$ = "00:00:03" 'Kompensation Uhrenquarz End If Return
Geändert von peterfido (14.06.2011 um 16:24 Uhr)
Wenn das Herz involviert ist, steht die Logik außen vor! \/
ja, das sind die Probleme die mitunter mit Bascom Highlevelbefehlen entstehen ... man sucht sich den Wolf wenns klemmt, daher verwende ich die nur sehr selten und kann auch nur dazu raten so einfache Funktionen wie Uhrzeit oder Stringoperationen zu Fuß zu machen. Der Code wird zwar idR nen Tick größer, das Programm ggf ne Spur langsamer aber man weiß was der Controller macht.
Wobei die wirksamste Waffe dabei die Overlayvariablen sind mMn.
Ich vermute, dass Time$ n Konstrukt ist aus ner internen Sekundenzählung im Timer Interrupt, sprich, intern werden nur Sekunden gezählt und bei der Abfrage von Time$ wird aus der Sekundenzahl der String gebildet. Dass das nur bei einer Stringzuweisung und nicht bei einer If-Abfrage passiert ist nervig, scheint aber so.![]()
Vor den Erfolg haben die Götter den Schweiß gesetzt
Time$ wird sekündlich aktuell gehalten. Jedoch benötigt ein String vergleich mehr Ressourcen als "zu Fuß" die Systemvariablen _sec, _min und _hour abzufragen. Die Zeitkorrektur von 3 Sekunden lässt sich auch mit _sec=3 erledigen. Besser wäre es, wenn die Zeit erst gar nicht so weit abschweift. Ich nutze in meinen Projekten auf verschiedene Arten Datum und Uhrzeit. In einem Projekt habe ich die Uhr-routine komplett selbst geschrieben. config clock nutze ich selten. Und bei Config DCF lässt sich jeder Quarz nehmen (man braucht keinen Uhrenquarz, jedoch wird eine Timer belegt), selbst wenn gar kein DCF Empfänger angeschlossen ist, läuft die Uhrzeit weiter...
Auch ein CLS würde ich nicht in jedem Durchlauf nehmen. Ich schicke immer Strings fester Länge zum Display. So flackert es nicht, wenn der selbe Text wieder erscheinen soll.
Das const sTag = lässt sich auch vorher berechnen und als Zahl (86400) eingeben. Sollte so aber auch funktionieren, da rechnet dann halt der Compiler.
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Ja, genau so geht es , ich danke dir.
Da kann man mal sehen, wie man fehlgeleitet werden kann. Weil ich für die Displayanzeige Seite 2 statt 50ms 500ms hatte, glaubte ich dass dies der Grund sein müsste.
Aber dass ein anderer Displayinhalt (genauer: ob time$ angezeigt wird oder nicht) doch tatsächlich die Ursache war, dass es einmal ging und einmal nicht, das hätte ich doch wirklich nicht vermutet.
Lesezeichen