Hallo Freunde, Ich habe es endlich geschafft aus meiner RTC erste Lebenszeichen zu holen... Nun sehe ich auf dem Display folgendes ..... 1 2 3 4 5 6 7 8 9 16 17 18... ?! Wieso macht er bei 16 weiter ? ich habe folgenden code... Code: i2c_start_wait(RX8564+I2C_WRITE);// Startet die I2C Kommunkation und wartet auf Antwort... i2c_write(0x02); i2c_rep_start(RX8564+I2C_READ); ret = i2c_readNak(); ret &= 0x7F; (ret >> 4) + 0x30; (ret & 0x0f) + 0x30; char Buffer[20]; sprintf( Buffer, "%d", ret ); ks0108GotoXY(10, 40); ks0108Puts(Buffer);
Die RTC liefert die Zahlen in BCD. Hier hatten wir gerade das Thema: Beitrag "BCD zu ASCII wandeln?!"
:
Bearbeitet durch Moderator
Yalu X. schrieb: > Die RTC liefert die Zahlen in BCD. hierit wandel ich es doch um --> (ret >> 4) + 0x30; (ret & 0x0f) + 0x30;
>Wieso macht er bei 16 weiter ?
Weil die meisten RTC BCD codiert arbeiten.
Einfach mal BCD bei wiki nachlesen.
>hierit wandel ich es doch um --> > >(ret >> 4) + 0x30; >(ret & 0x0f) + 0x30; Das geht so aber nicht durch einen Compiler. Zeig den Originalcode.
holger schrieb: >>hierit wandel ich es doch um --> >> >>(ret >> 4) + 0x30; >>(ret & 0x0f) + 0x30; > > Das geht so aber nicht durch einen Compiler. > Zeig den Originalcode. Sekunden ++= (ret >> 4) + 0x30; Sekunden ++= (ret & 0x0f) + 0x30; funktionert auch nicht :(
Dieter B. schrieb: > hierit wandel ich es doch um --> > > (ret >> 4) + 0x30; > (ret & 0x0f) + 0x30; Nein, diese Audrücke tun gar nichts. Mit -Wall sollte der Compiler auch eine entsprechende Warnung ausgeben. Besser:
1 | Buffer[0] = (ret >> 4) + 0x30; // Zehner |
2 | Buffer[1] = (ret & 0x0f) + 0x30; // Einer |
3 | Buffer[2] = '\0'; // String-Ende |
4 | |
5 | ks0108GotoXY(10, 40); |
6 | ks0108Puts(Buffer); |
> Das geht so aber nicht durch einen Compiler. > Zeig den Originalcode. Geht es doch;) Aber: main.c:101: warning: statement with no effect main.c:102: warning: statement with no effect
okay danke ;) funktioniert :-P was mir noch aufgefallen ist... Ich benutze ja die Lib von Peter F. für ein GLCD... Wenn es eine "0" darstellt und dann eine "1" bleibt ein kleiner rest von der "0" auf der rechten seite und wird erst wieder mit der 2 anderst... bei anderen Zahlen genau das gleiche Problem... Weiß jemand abhilfe ?! Ohne das Display zu löschen?!
Dieter B. schrieb: > funktioniert :-P Ich hoffe, du hast dir auch Gedanken darüber gemacht, warum es jetzt funktioniert und vorher nicht.
Dieter B. schrieb: > Wenn es eine "0" darstellt und dann eine "1" bleibt ein kleiner rest von > der "0" auf der rechten seite und wird erst wieder mit der 2 anderst... > bei anderen Zahlen genau das gleiche Problem... > Weiß jemand abhilfe ?! Ohne das Display zu löschen?! das passiert immer wenn man einen Proportionalen Font verwendet - da belegen die Zeichen immer nur so viel Platz wie nötig. Abhilfe: 1) Für Zahlenwerte einen Fixed-Font verwenden - dann kann man auch mehrere Werte untereinander anzeigen und die Zahlen stehen immer schön untereinander 2) den entsprechenden Bereich vor der Ziffernausgabe löschen, oder den neuen Wert ausgeben, berechnen wie breit die Ausgabe war und den Restbereich löschen. Sascha
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.