Moin,
ich bastel gerade an einer Binär-Armbanduhr. Verwendet wird ein
Atmega168P und eine RV-4162. Wie fast jede (oder sogar jede) RTC bekomme
ich BCD-codierten Output. Das Auslesen der RTC, Umrechnen von BCD auf
Binary/Int und Darstellen auf meinen Ports funktioniert bereits. Jetzt
ist die Zeit natürlich nicht richtig. Das muss geändert werden!
Jetzt habe ich kurz nach "Binary to BCD" und "Int to BCD" gesucht und
bin auf recht große Konstrukte gestoßen. Zum Umrechnen auf Binary habe
ich ja bereits eine kleine Funktion gebaut, die offensichtig
funktioniert und jetzt ist die Idee es andersrum auch so zu machen. In
meinem Fall (eine Uhr) brauche ich ja "nur" 2-stellige Zahlen.
Hier meine Funktion:
1 | int Sekunden_in_Binary(I2C_Read_Sekunden)
|
2 | {
|
3 | return (((I2C_Read_Sekunden >> 4) * 10) + (I2C_Read_Sekunden & 0x0F);
|
4 | }
|
Meine Idee für die Umrechnung zum Stellen der RTC:
1 | int Sekunden_in_BCD(Neue_Sekunde_in_Binary)
|
2 | {
|
3 | return (((Neue_Sekunde_in_Binary / 10) << 4) | (Neue_Sekunde_in_Binary % 10));
|
4 | }
|
*Variablennamen fiktiv, weil Bastelobjekt und Code nicht vor Ort.
Kann ich das so machen? Gibts was fertiges von Atmel/Microchip (habe nix
gefunden)? Wie gesagt - in meinem Fall nur 2-stellige Zahlen.
Ich habe leider gerade keine Möglichkeit das einfach so auszuprobieren.
Zur Belustigung noch ein paar Bilder vom Projekt (:
gruß, michi (: