uhr richtig anzeigen lassen 00:00

Gast #2739321
Lesenswert?

Hallo ich habe ein kleines problem und zwar möchte ich eine 
zeitschaltuhr bauen die uhrzeit kriege ich mit dem dcf das klappt auch 
schon. Jetzt habe ich mir für die zeit 2 variabel erstellt minute und 
stunde als byte wenn ich jetzt aber lcd stunde ; ":"  ; minute dann wird 
bei 00:00 nur 0:0 angezeigt das will ich aber nicht was muss ich machen 
das das klappt ? Sorry für die schreibweise habe gerade nur ein handy 
mit internet
#2739325
Lesenswert?

hallo ich habe ein problem ich sitze oft vorm rechner und bin in diesem 
forum dem mikrocontroller net unterwegs da kommt dann immer plötzlich so 
ein posting wo keine satzzeichen verwendet werden und kleinschreibung 
das einzige ist was es gibt...

Tipp: Wenn es printf ist, dann könnte %2d eventuell helfen, da es auch 
einstellige Zahlen auf zwei Ziffern aufpustet.

mfg mf

PS: Ich werde mir kein Smartphone kaufen, bis nicht eine einfandfreie 
Eingabe eines Satzes nach den geltenden deutschen Sprachregeln des 
geschriebenen Wortes möglich ist.
#2739333
Lesenswert?

Überprüfe mal Deine Dezimalzerlegung der Uhrzeit. Grundsätzlich brauchst 
Du ja nur dieses Ausgabeformat ans LCD:
Stunde_Zehner Stunde_Einer : Minute_Zehner Minute_Einer
(natürlich als Ascii-Code).
Wenn Du jedoch ausgibst
Stunde:Minute,
Dann ist Null Stunden eben nur 0 und nicht 00.
Gruss Ottmar
Gast #2739360
Lesenswert?

Richtig bascom und ich wollte gerne nur die 2 variabel weil ich diese 
per rc5 dann einstelle und ich habe insgesamt 10 zeiten die ich 
einstellen muss und danach ins eeprom speicher dann müßte ich ja zich 
variabel erstellen es muss ja gehen weil es geht ja auch bei config 
clock
Gast #2739429
Lesenswert?

DFC77 liefert dir doch die Bits alle der Reihe nach. Wenn du die in drei 
Variablen zusammenfaßt, als Stunden, Zehnerminuten und Einerminuten 
kannst du die ganz direkt ausgeben und hast keine Probleme mit 
irgendwelcher Vornullenunterdrückung.
Wenn die Stunden auch immer 2-stellig erscheinen sollen, faßt du die 
Bits dafür nicht als Stunden sondern ebenfalls in separaten Variablen 
für Zehner- und Einerstunden zusammen.
#2739436
Lesenswert?

Bit-Bastler schrieb:
> DFC77 liefert dir doch die Bits alle der Reihe nach. Wenn du die in drei
> Variablen zusammenfaßt, als Stunden, Zehnerminuten und Einerminuten
> kannst du die ganz direkt ausgeben und hast keine Probleme mit
> irgendwelcher Vornullenunterdrückung.
> Wenn die Stunden auch immer 2-stellig erscheinen sollen, faßt du die
> Bits dafür nicht als Stunden sondern ebenfalls in separaten Variablen
> für Zehner- und Einerstunden zusammen.


Autsch.
Machs nicht kompliziert.
Format ist eine perfekte Lösung und genau dafür gedacht.

Denn schliesslich will er ja auch noch 10 Weckzeiten irgendwo speichern 
und ausgeben.
Gast #2739440
Lesenswert?

_hour und _min sind die aktuellen DCF77 Variablen. _sec wäre die für die 
Sekunden. Diese Variablen werden zwar für Time$ auch verwendet, sind 
aber unabhängig von Time$ zu verwenden.

Lcd _hour ; ":" ; _min dürfte das gewünschte anzeigen.
Gast #2739471
Lesenswert?

Karl Heinz Buchegger schrieb:
> Format ist eine perfekte Lösung und genau dafür gedacht.

Um so ein paar Bits in ASCII-Zeichen umzuwandeln, braucht man höchstens 
einen OR-Befehl und einen Pointer.
Was soll der ganze Ballast vom Format-Interpreter. Der ganze Aufwand ist 
hausgemacht, und zwar in dem Moment wo man die so schön passend 
BCD-kodierten Einer und Zehner in einer Variablen zusammenfaßt, die man 
bzw. Format() hinterher wieder auseinanderpuhlen muß.
#2739493
Lesenswert?

Bit-Bastler schrieb:

> hausgemacht, und zwar in dem Moment wo man die so schön passend
> BCD-kodierten Einer und Zehner in einer Variablen zusammenfaßt, die man
> bzw. Format() hinterher wieder auseinanderpuhlen muß.

Und bei Weckzeitvergleichen muss man sie wieder zusammenpappen und beim 
Einstellen muss man sie zusammenpappen.

Lass doch die Minuten in einem Byte und die Stunden in einem Byte.
Das ist doch kein Hexenwerk wie man Format anwendet.
#2739498
Lesenswert?

basti schrieb:
> Vielleicht bin ich jetzt auf den falschen weg habe jetzt den string
> minute den wert minute="00" jetzt kann ich aber nicht mehr mit incr
> hochzählen

Basti.
Lass doch deine Minuten in einem Byte. Das ist doch ok.

Alles was du brauchst ist: Wenn die Minuten kleiner als 10 sind, dann 
musst du noch eine zuätzliche 0 ausgeben, ehe du die Minuten 
hinschreibst. Das ist dann auch schon alles.
Es geht nur um die Ausgabe aufs LCD. Nur dann muss eine führende 0 
erzeugt werden. Zum Rechnen brauchst du die ja gar nicht.
Gast #2739507
Lesenswert?

Ja ich habe jetzt es ganz einfach gemacht wenn minute gleich null dann 
lcd null null else lcd minute ist zwar nicht die lösung die ich wollte 
aber eine die ich verstehe format geht nur mit string steht so in der 
hilfe
#2739513
Lesenswert?

basti schrieb:
> Ja ich habe jetzt es ganz einfach gemacht wenn minute gleich null dann
> lcd null null else lcd minute ist zwar nicht die lösung die ich wollte
> aber eine die ich verstehe format geht nur mit string steht so in der
> hilfe

aber man kann sich mit str() aus einer Zahl einen String machen lassen.

Bleib bei deiner Lösung. Die ist schon in Ordnung. Nur die Sache mit dem 
Vergleich hab ich noch nicht verstanden. 0 an sich ist kein Sonderfall. 
Der Sonderfall besteht darin, dass du eine einstellige Zahl hast. Und 
einstellig ist eine Zahl genau dann, wenn sie kleiner als 10 ist. Dann 
brauchst du eine führende 0 bzw. bei den Stunden ein Leerzeichen davor.
Gast #2739530
Lesenswert?

Karl Heinz Buchegger schrieb:
> Autsch.
> Machs nicht kompliziert.

So sehen wiel uns wiedell...

Tja Karlheinz, DAS Thema hatten wir doch neulich in ner anderen 
Geschmacksrichtung: Ich habe eine Zahl und weiß partout nicht, wie ich 
die so zur Anzeige kriege wie ich will.

Anstatt zu lernen, wie man mit Zahlen, Bits und CPU's umgeht, kennen die 
jungen Leute nur noch sprintf und klagen dann hier herum - im konkreten 
Falle sogar derart, daß man beim Lesen Probleme hat, die passenden 
Verben den Substantiven zuzuordnen:

basti schrieb:
> Nein weder noch kenne sowas noch nicht deshalb frage ich ja was

Mein Rat an Basti: Kreiere einen String mit 5 Zeichen und fülle deine 
Ergbnisse zu Fuß rein:
 S[1] = '0'+(Stunde div 10)
 S[2] = '0'+(Stunde mod 10)
 S[3] = ':'
und den Rest überlasse ich deiner Programmierkunst

Das war wieder mal ein Kochrezept - eigentlich genau das Falscheste was 
man tun kann, denn an sowas lernen die Kinder nix. Lösung selber 
erarbeiten wäre das Richtige, aber von allein kommen sie ja immer wieder 
nur auf sprintf und Konsorten - so eng sitzen die Scheuklappen.

Je öfter ich hier in diesem Forum lese, desto mehr frage ich mich, ob es 
denn irgend einen gangbaren Weg geben könnte, anstelle von 
Lösungsrezepten den Fragenden das eigenständige Denken beibringen zu 
können. Aber bislang ist mir dazu nicht wirklich was Funktionables 
eingefallen.

W.S.
#2739546
Lesenswert?

W.S. schrieb:

> Anstatt zu lernen, wie man mit Zahlen, Bits und CPU's umgeht, kennen die
> jungen Leute nur noch sprintf

wenn sie wenigstens sprintf kennen würden. :-)


> Das war wieder mal ein Kochrezept - eigentlich genau das Falscheste was
> man tun kann, denn an sowas lernen die Kinder nix. Lösung _selber_
> erarbeiten wäre das Richtige,

Nur zu deiner Info.
Genau das hat er. Eine Lösung mit der ER klarkommt und ER hat sie sich 
selbst erarbeitet.
Gast #2739569
Lesenswert?

Karl Heinz Buchegger schrieb:
> Und bei Weckzeitvergleichen muss man sie wieder zusammenpappen und beim
> Einstellen muss man sie zusammenpappen.
Der Wecker soll i.A. nur bei "=" wecken und ob man dazu 2 Byte oder 4 
Zeichen vergleicht, macht nun wirklich nicht den großen Unterschied. 
Warum also zusammenpappen? Und ob man beim Stellen auf einen 
Minutenüberlauf bei 60 oder auf die Einzelziffernüberläufe bei 0x0A bzw. 
0x06 achtet, tut sich auch nicht viel. Das konnte schon ein 74x90.
Gast #2739581
Lesenswert?

W.S. schrieb:
> S[1] = '0'+(Stunde div 10)
> S[2] = '0'+(Stunde mod 10)

Jetzt auch noch zwei Divisionen für eine Operation, die, wenn man die 
originalen BCD-Daten verwenden würde, nicht mehr als ein Dutzend 
Prozessortakte braucht.
Vielleicht sollte man das ganze als Julianisches Datum rechnen, dann 
aber bitte als Double.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren