Hallo,
ich habe versucht, aus einer DS1307 die Zeit auszulesen. Soweit sogut,
es klappt ganz gut. Allerdings spinnen die Sekunden etwas d.h. es geht
weiter als bis 60 Sekunden (ich glaube bis ca. 100). Eine Minute ist
aber eine Minute. Was ist da los? Ich brauche die Sekundenanzahl, da es
ein Temperaturlogger werden soll.
Danke im Voraus,
Display78
Hi,
da Du uns keine weiteren Infos lieferst, wird es auf "Zeile 42"
herauslaufen.
Dein Beitrag liest sich wie folgt "mein Programm geht nicht, ich bin
unfähig, wer kennt mein Programm und kann mir helfen ?"
Schade ich kann nicht hellsehen.
Display78 schrieb:> d.h. es geht> weiter als bis 60 Sekunden (ich glaube bis ca. 100)
Ja, vermutlich bis 89.
Grund ist: das Sekundenregister ist nicht binär, sondern BCD.
In den Bits 0-4 steht der "Einer", in den Bits 4-5 der "Zehner".
Siehe Table 2 (S. 8).
Genauso auch die Stunden.
Display78 schrieb:> Allerdings spinnen die Sekunden etwas d.h. es geht> weiter als bis 60 Sekunden (ich glaube bis ca. 100).
Dann liest du vielleicht das Jahr aus - das geht bis 99.
千里眼 schrieb:> Display78 schrieb:>> Allerdings spinnen die Sekunden etwas d.h. es geht>> weiter als bis 60 Sekunden (ich glaube bis ca. 100).>> Dann liest du vielleicht das Jahr aus - das geht bis 99.
Dann säße er schon 'ne ganze Weile an seinem Problem :))
>Dann säße er schon 'ne ganze Weile an seinem Problem
Nicht unbedingt, da das Jahr ja auch von ihm stammt.
Wahrscheinlich ein Fehler beim Rein und Raus (Zeit setzen und lesen).
Hallo,
Quelltext ist im Anhang (ist ein Picaxe-Basic Programm).
BCD-Codierung habe ich schon versucht, aber wenn ich die verwende,
kommen falsche Werte raus. Mit allen anderen Werten geht es! Sekunden
gehen bis 89.
Display 78
Display78 schrieb:> BCD-Codierung habe ich schon versucht, aber wenn ich die verwende,> kommen falsche Werte raus
Wie hast du das versucht? Dieser Code fehlt.
Hallo,
hier mal der umfangreichere Code (es wird auch auf ein I2C eeprom
24C32WP zugegriffen). Wenn ich alle Werte wie im Beispiel auf picaxe.com
setze, sind diese total falsch. Mit diesem Code funtioniert eigendlich
alles, bis auf die Sekunden. Zur Not kann ich auch auf die
Sekundenangabe verzichten,es wird aber genauer mit.
Display78
Display78 schrieb:> Wenn ich alle Werte wie im Beispiel auf picaxe.com> setze, sind diese total falsch.
Nein, dann sind sie richtig.
In deinem Fall sind sie falsch.
let hour = 19
let mins = 55
let seconds = 00
setzt die Uhrzeit in Wirklichkeit auf
13:37:00
denn 19 ist hexadezimal $13 (steht für BCD 13 Uhr),
und dezimal 55 ist hexadezimal $37
Für dich sieht es dann hinterher so aus, als ob die Uhrzeit stimmt, da
du die gespeicherte Zeit nicht von BCD in Dezimal wandelst.
Du wirst aber feststellen, dass nicht nur die Sekunden alle 10 Sekunden
um 6 Sekunden nach vorne springen, sondern auch die Minuten nach
spätestens 10 Minuten nicht mehr stimmen.
Hallo,
So, jetzt geht es. Ich bekomme die Zeit jetzt auf Zehn Sekunden genau
von der RTC, was ausreichend ist. Ich musste die Werte, wie Joe F. schon
gesagt hat, wieder von BCD zu Decimal konvertieren. Im Anhang ist der
jetzt funktionierende Sourcecode.
Display78
Tja: in Antwort Nr. 3 steht schon das Stichwort BCD-Codierung. Damit
sollte es auch sekunden(!)genau gehen. Manchmal wundert man sich, warum
Fragen gestellt werden, wenn die Antworten gar nicht beachtet werden...
Achso, jetzt verstehe ich was du mit "auf 10 Sekunden genau" meinst.
Die Zeit springt also jetzt immer um 10 Sekunden, ja?
Und die Minuten, Stunden etc. dann auch.
x/16*10
funktioniert eben nicht.
Mach die Konvertierung lieber richtig.
Ich beschäftige mich auch schon mit AVRs, aber als ich das Projekt
angefangen habe schien mir Picaxe dafür besser geeigne als ein AVR(
damit kenne ich mich noch nicht so gut aus). Aber danke für die Hilfe.
Display78