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?
Nein weder noch kenne sowas noch nicht deshalb frage ich ja was ich machen kann
Ü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
>sprintf(buffer, "%2i:%02i", stunde, minute);
Ich mach das immer so:
sprintf(buffer, "% 2i:%02i", stunde, minute);
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
> Richtig bascom
Richtig FORTRAN:
INTEGER STUNDE, MINUTE
STUNDE=0
MINUTE=0
WRITE(*,90) STUNDE, MINUTE
90 FORMAT(i2.2,":",i2.2)
END
Du hast die Variablen doch schon im richtigen Format in der DCF-Routine vorliegen. Sie nennen sich _hour und _min.
Ja stimmt aber ich möchte nicht die sekunden einstellen können und die sind dann in time$ drin und ich will die auch nicht sehen können
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.
Ja dann muss ich aber min als string haben damit kenne ich mich noch nicht so gut aus jetzt sagt der mir immer _min=00 passt nicht in die variabel
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ß.
"passt nicht in die variabel" Variable!!! Man. "jetzt sagt der mir immer " Hörst du Stimmen oder wer spricht da mit dir? JJ
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
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.
"den falschen weg" Dativ!!! Es wird Zeit dass du dir etwas mehr Mühe gibst! JJ
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.
Nachtrag: Vielleicht sollte man den Atmel Leuten mal folgende Seite empfehlen: http://www.mikroe.com/eng/products/view/227/mikropascal-pro-for-avr/ damit sie wenigstens von sowas wie Bascom und Konsorten wegkommen. 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.
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.