Hallo Im Dateianhang ist ersichtlich, dass ich die int-Variable "..._count" die die Sekunden, Minuten resp. Stunden zählt mit utoa() in einen String umwandle, und dann im LCD anzeige. Wie kann ich nun erreichen, dass führende O (Nullen) angezeigt werden (z.B. bei Uhrzeit 09:08:01) und damit die Anzeige nicht so aussieht >> 9 :8 :1 ? Wenns keine "Formatierung" der schlauen Art gibt, werde ich wohl Sekunden-Einer, Sekunden_Zehner , usw. brauchen müssen. Ich bin gespannt. Gruss Toni
Wenn Du genügend ROM für den Koloß hast, kannst Du natürlich die printf()-Familie benutzen. Ansonsten ist es im Falle von jeweils nur zwei Stellen eigentlich noch einfach: konvertiere ,,zu Fuß'', indem Du sowohl durch 10 dividierst als auch den Rest der Division benutzt. Effektiv geht das mit der Standardfunktion div(), die sich die Tatsache ausnutzt, daß bei einer ganzzahligen Division der Rest ohnehin immer ermittelt werden muß. (Die Operatoren / bzw. % greifen intern auf dieselbe Routine zu, werfen aber entweder den Rest oder den Quotienten weg.)
Jörg, vielen Dank Habs hingekriegt, wie Du im Anhang siehst (im Moment nur für die Sekunden codiert). Ich weiss nicht, vielleicht gibt es auch eine Möglichkeit die nur eine String-Variable braucht, habs aber nicht fertig gebracht ! Ich bin mir auch nicht sicher wie gross die Strings initialisiert werden müssen, ist die Grösse "lcd_sec_z[3]", ... ok ? Eigentlich sollten doch ..[2] genügen, Ausgabe ist dann aber plötzlich um eine Stelle verschoben ! Gruss Toni
Hallo Habe selber eine elegantere Methode mit strcat() und nur einer zusätzlichen Variablen gefunden. Toni
Es ist die Frage, ob sich der Aufwand auszahlt, weil printf ist einfacher und braucht im Flash: vfprintf 1268 bytes sprintf 70 bytes Dann einfach mit sprintf(buf,"%02d:02d:02d",h,m,s); und du hast die Zeit in buf. Schliesslich hast du ja den ganzen Flash bezahlt, und kannst den nicht benötigten Teil ja nicht zurückgeben :-)
Vielen Dank Fritz bin für jeden Tipp dankbar ! Werde es heute mal so versuchen, und schauen wie viel mehr oder weniger Speicher es braucht. Gruss Toni
OK, hier der Unterschied des benötigten Speichers. 1.) mit Funktion sprinf() ========================= Linking... Generating Code... Program memory usage: 2886 bytes, 35.23% full. Global variables usage: 63 bytes Uhr_V2 - 0 error(s), 0 warning(s) 2.) hier so wie oben beschrieben (zu Fuss), mit div() und strcat() ================================================================== Linking... Generating Code... Program memory usage: 1380 bytes, 16.85% full. Global variables usage: 53 bytes Einfache_Uhr - 0 error(s), 0 warning(s) Tatsächlich ein Koloss dieses sprintf() ! Gruss Toni
Klar, aber Du mußt dennoch einen ganzen ROM einsetzen, egal ob Du ihn nur zu 17 oder zu 35 % fülltst, das war doch Fritz' ganze Argumentation. Dafür ist der Quellcode einfach und überschaubar. Wenn der von Dir für den Test benutzte AVR auch der für das Produktivsystem ist, würde ich an Deiner Stelle keine Sekunde zögern, printf() zu nutzen. Wenn Du das dagegen auf einem möglichst kleinen AVR in einer 1000er Serie produzieren willst, lohnt sich der Tag zusätzlicher Aufwand für andere Lösungen natürlich locker.
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.