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
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.
Wenn die Stunde und Minute dez oder Hex Null sind wird nur 0 : 0
angezeigt.
Warum übernimmst du nicht die Variablen-Werte der Uhr, die sind doch im
passenden Format?
Ü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
Hallo basti,
Du solltest wohl mitteilen ob Du in C oder Assembler
programmierst,nebenbei wäre auch noch der Typ des µC interessant. Du
bekommst sonst Ratschläge in C Kobol, Assembler C++ Basic usw.. :-)
mfG Ottmar
Er programmiert wahrscheinlich mit bascom-avr.
Und da macht man so Etwas mit dem Befehl format [1].
[1] http://avrhelp.mcselec.com/format.htm
Gruß Oliver
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
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.
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.
_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.
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ß.
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.
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.
Wie das mit Format gehen würde, kannst du dir zb hier
Beitrag "Format-Fehler bei Bascom LCD-Ausgabe??"
ansehen.
Und Bit-Bastler hat recht. Format ist für den konkreten Fall wirklich
Overkill.
(Ich hatte ganz vergessen, dass BASCOM ja seine Schwächen hat, wenn man
kompliziertere Ausdrücke zusammenbauen muss).
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
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.
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.
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.
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.
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.