Bin einfach zu blöd zum Suchen, ist bestimmt schon 100x irgendwie erklärt worden, doch wenn man nicht weiß wonach suchen... Problemstellung: Um mir den externen Quarz zu ersparen gewinne ich meinen Sekundentakt aus dem Prozessortakt über Zähler1 mit Preset usw. Der Interrupt zählt dann in der ISR sekündlich ein LONG als Sekundenzähler hoch. Nun möchte ich aus dem LONG eine Stunden Minute Sekunde Anzeige ausrechnen. Könnte natürlich in der ISR auch gleich die Stunden Minuten Sekunden ausrechnen lassen, dim Sekunden as Byte , Minuten as Byte , Stunden as Byte , Sekundenzaehler as LONG ISR: ' angesprungen im Sekundentakt von Zähler 1 incr sekunde if sekunde = 60 then sekunde = 0 incr minute end if if minute = 60 then usw... Da ich aber die Uhr dann auch ganz einfach stellen möchte (über einen Taster: Incr bzw Decr Sekundenzähler) sind mir das nach Einbindung zuviel IF in der ISR. Einfacher währe eben die Errechnung aus dem Sekundenzähler direkt. Aber wie? Und gibt es einen Weg die errechneten Bytes Stunden Minuten Sekunden dann in einem String zusammen zu fassen? Z.B. 19:20:07 Meine erste Idee: Stunde = Sekundenzähler / 3600 ' ist z.B. 19,1784563864 Wie bekome ich die Stunde "Sauber" d.h. , wie mache ich aus dem 19,1.. eine 19 ? Ich weiß, das sind absolute Basics, aber ich bin ja nicht blöd, sondern mir fehlen nur die Grundlagen. Alles andere (mehrere ADC, Pinabfragen, Pinansteuerungen, Ausgabe auf Farb-LCD in versch. Schriftgrößen usw) funktionieren schon. Danke für eure Hilfe ! ;-)
Hi, ist nicht so schwer. Entweder zum Berechnen den Bascom Befehl Frac() nutzen um Nachkommastellen abzuschneiden oder direkt mit Integerwerten arbeiten, dann werden die Nachkommastellen automatisch gelöscht. Einfach nur z.B. durch 3600 dividieren (dann verschwinden die Nachkommastellen) und wieder mit 3600 multiplizieren und von den Sekunden abziehen; dann bleiben nur noch die Sekunden für Minuten und Sekunden übrig, dann das gleiche mit 60 und die Restsekunden bleiben übrig. Hier ein Beispiel für 14 Uhr 23 Minuten und 46 Sekunden. Der sekundenzähler steht also auf 51826: '----------------------------------------------------------------- 'Beispiel 'PeterK 'www.display3000.com ' Dim Sekundenzaehler As Long , Stunden As Byte , Minuten As Byte , Sekunden As Byte , Temp1 As Long , Temp2 As Long Sekundenzaehler = 51826 Temp1 = Sekundenzaehler / 3600 Stunden = Temp1 Temp1 = Stunden * 3600 Temp2 = Sekundenzaehler - Temp1 Temp1 = Temp2 / 60 Minuten = Temp1 Temp1 = Minuten * 60 Sekunden = Temp2 - Temp1 Print Stunden ; ":" ; Minuten ; ":" ; Sekunden End '----------------------------------------------------------------- Allerdings noch viel einfacher aber auch langweiliger ist die Bascom Funktion Time() ! PeterK
drsch
Da hätt ich auch selbst drauf kommen können... lol Danke Peter!
Kannst du mir auch sagen, wie ich das...
>> Print Stunden ; ":" ; Minuten ; ":" ; Sekunden
...in einen einzelnen String bekomme, möglichst noch mit führender Null
z.B. bei 07:03:06 Uhr morgens ?
... ach ja, der TIME() - Befehl funktioniert doch nur nach Config Clock = soft Geht der trotzdem, obwohl ich ja die intere Clock gar nicht nutze ....
Time() und Clock: weiß nicht müsste ich auch erst nachlesen - das kannst du dann auch selber :-) Nur selber lernen macht schlau. Formatierung: Schau dir den Befehl Format() an, der bietet, was du brauchst. Ansonsten selber zusammenbasteln nach dem Motto stringA = stringA + stringB PeterK
Das sollte doch einfacher gehen: std = zaehl / 3600 min = (zaehl % 3600) / 60 oder (zaehl-std*3600)/60 sek = zaehl % 60 oder zaehl-std*3600-min*60 % modulo-Funktion (weiß nicht, wie das in BasCom heißt) Natürlich darf das zaehl dazwischen nicht hochgezählt werden. Es gibt auch noch die Möglichkeit, die einzelnen Ziffern zu berechnen: std10 = zaehl / 36000 std01 = (zaehl / 3600) % 10 min10 = (zaehl % 3600) / 600 min01 = ((zaehl % 3600) / 60) % 10 sek10 = (zaehl % 60) / 10 sek01 = zaehl % 60 ließe sich noch weiter beschleunigen, wenn man zur Berechnung von min und sek nur noch einen 16-bit-Wert statt eines 32-bit-Wertes verwendet (tmp = zaehl % 3600). daraus läßt sich leicht ein String berechnen: zeit = chr(48+std10) + chr(48+std01) + ':' + chr(48+min10) + chr(48+min01) + ':' + chr(48+sek10) + chr(48+sek01) oder wie immer das in BasCom heißen mag. Das ruft schon nach einer For-Schleife und einem Array chr soll den Buchstaben mit dem Ascii-Wert von 48+x, also die Ziffern 0 .. 9 berechnen. Alles ohne Gewähr, habe das aus dem Stegreif ohne Kontrolle geschrieben.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.