Forum: Mikrocontroller und Digitale Elektronik DS3231 Zählfehler


von Robin (Gast)


Lesenswert?

Hallo
Ich habe ein Problem mit dem RTC Ds3231, nämlich zählt die Uhr bei den 
Sekunden bis 89 springt dabei aber auch um einige Sekunden vorwärts wie 
z.B. von 9 auf 16 oder von 57 auf 64 bei Minuten und Stunden passiert 
ähnliches(Datum habe ich noch nicht getestet). Das Problem besteht 
sowohl bei der Ausgabe über Uart als auch über 7-Segment Display auch 
ist das Err Bit 0 welches eigentlich ja für eine erfolgreiche I2C 
übertragung steht. Ich habe 2 Uhren gekauft und bei beiden entsteht 
dieser Fehler.

Hier noch der Bascom Code zu Abfragen obwohl ich denke das das Problem 
nicht dort liegt:
1
$regfile = "m8def.dat"                     'atmega8 Mikrocontroller
2
$crystal = 8000000
3
$hwstack = 32
4
$swstack = 32
5
$baud = 9600
6
7
8
$lib "i2c_twi.lbx"                          ' hardware I2C
9
Config Sda = Portc.4
10
Config Scl = Portc.5
11
Config Twi = 400000
12
13
14
15
I2cinit
16
Const Ds3231w = &B11010000           'write und read adressen für den Ds3231
17
Const Ds3231r = &B11010001
18
19
20
Dim _sec as byte
21
Dim _min as Byte
22
Dim _hr as byte
23
24
25
Do
26
27
    I2cstart
28
    I2cwbyte Ds3231w
29
    I2cwbyte 0             'stackpointer auf 0(für Sekunden) setzen
30
31
    I2cstart
32
    I2cwbyte Ds3231r
33
    I2crbyte _sec , ack
34
    I2crbyte _min , ack
35
    I2crbyte _hr , Nack
36
    I2cstop
37
38
    Print "Err: " ; Err                                     ' Err = 0 ->übertragungs kein Fehler
39
    Print "Zeit: " ; _hr ; ":" ; _min ; ":" ; _sec          'Zeit über Uart ausgeben
40
41
    waitms 500
42
Loop
43
End

Ich hoffe ihr könnt mir weiter helfen

Vielen Dank im vorraus
Robin

von Frank K. (fchk)


Lesenswert?

Du hast das Datenblatt des Chips vom Chiphersteller entweder nicht 
gelesen oder nicht verstanden.

Die meisten RTCs verwenden BCD-Darstellung.
Heißt: Zehnerstelle in Bits 7..4, Einerstelle in Bits 3..0
Dezimalwert=Zehnerstelle*10+Einerstelle

fchk

von Max D. (max_d)


Lesenswert?

Ds3231 zählt in bcd

Nachtrag: lass es mal als hex ausgeben, dann erkennst du was das heißt

: Bearbeitet durch User
von Robin (Gast)


Lesenswert?

Ok mit dem Befehl var1 = Makedec(var2) kann man BCD Darstellung in 
Decimal umwandeln. Jetzt funktioniert es.

Danke für die Hilfe
Robin

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
Noch kein Account? Hier anmelden.