Forum: Mikrocontroller und Digitale Elektronik RTC DS3231 - Temperatur Daten?


von AVRli .. (avrli)


Lesenswert?

Hallo,

ich möchte neben der Uhrzeit und das Datum nun auch gerne die Temperatur 
auswerten können.

Hier mal der Inhalt aller Register des DC3231, welcher hier am ATmega 
angeschlossen ist.

45 20 12
00
21 04 18
00 00 00 00
00 00 00
04
00
00
2f c0

Das Datum und die Uhrzeit stimmen auffallend. ;-)
Nur mit den Temperatur Daten am Ende habe ich so meine Schwierigkeiten.

2f c0

Dazu heisst es im Datenblatt:

Temperature Registers (11h–12h)
-------------------------------
Temperature is represented as a 10-bit code with a resolution of 0.25°C 
and is accessible at location 11h and 12h. The temperature is encoded in 
two’s complement format. The upper 8 bits, the integer portion, are at 
location 11h and the lower 2 bits, the fractional portion, are in the 
upper nibble at location 12h. For example, 00011001 01b = +25.25°C.

Da ich auf Floats verzichten möchte rechne ich mir den Wert erstmal in 
m°C um...
1
int16_t calctemp;
2
uint8_t temp_msb, temp_lsb;
3
4
temp_msb = 0x2f;
5
temp_lsb = 0xc0;
6
7
calctemp = (int16_t)( (int8_t)(temp_msb << 2) | (temp_lsb >> 6) ) * 25;

Nun, rechne ich das Beispiel, komme ich auf ein Ergbenis von: 2525 was 
richtig wäre.
Rechne ich mit den tatsächlich ausgelesenen Werten, dann komme ich auf 
--1625

Bei -16,25°C würde ich hier sicher nicht sitzen, es sollten um die 24°C 
hier im Zimmer sein... ;-)

Hat jemand einen Tip was ich da übersehen habe?

Grüße AVRli...

: Bearbeitet durch Moderator
von A. F. (elagil)


Lesenswert?

AVRli .. schrieb:
> (int8_t)(temp_msb << 2)

Das passt nicht immer in 8 bit, ist hier aber nicht das Problem. 16 bit 
Variablen wären sicherer.


Datenblatt:
"Bit 5: Convert Temperature (CONV). Setting this bit to
1 forces the temperature sensor to convert the temperature
into digital code"

Wurde eine Messung durchgeführt?

von AVRli .. (avrli)


Lesenswert?

A. F. schrieb:
> Wurde eine Messung durchgeführt?

Ja würde ich behaupten, denn das Datenblatt sagt weiter unter dem Punkt 
"Temperature":

"The temperature registers are updated after each user-initiated 
conversion and on every 64-second conversion."

Würde nun denken, dass das ein "Selbstläufer" ist... halt alle 64 
Sekunden ein Update.

Jetzt habe ich natürlich mal ein setzen des CONV Bit im Control Register 
vorangestellt, das Erbenis ist leider das gleiche. :-(

von Maxim B. (max182)


Lesenswert?

AVRli .. schrieb:
> Hat jemand einen Tip was ich da übersehen habe?

Ich habe das so gemacht:
1
void lcd_puff_data(unsigned char data, unsigned char platz); // Schreibt data in lcd-puffer
2
3
void ds3231_RTC_read_temper(void){
4
  i2c_twimaster_start_cond();              
5
  i2c_twimaster_send_byte(ds3231_RTC_adr_write);   
6
  i2c_twimaster_send_byte(0x11);          
7
  i2c_twimaster_stop_cond();               
8
  i2c_twimaster_start_cond();               
9
  i2c_twimaster_send_byte(ds3231_RTC_adr_read);    
10
  ds3231_t1 = i2c_twimaster_get_byte(0);  
11
  ds3231_t2 = i2c_twimaster_get_byte(1);   
12
  i2c_twimaster_stop_cond();                
13
14
//  ds3231_t2=(ds3231_t2>>7);   // Genauigkeit 0,5 Grad
15
  ds3231_t2=(ds3231_t2>>6);  // genauigkeit 0,25 Grad
16
}
17
18
void ds3231_put_temperatur (unsigned char platz) {
19
  unsigned char a,b;
20
  
21
  ds3231_RTC_read_temper();
22
  lcd_puff_data('+',platz);
23
  
24
  a = ds3231_t1;
25
  b = 0;
26
  while(a >= 10){
27
    b++;
28
        a -= 10; 
29
  }
30
  if (b) b += 48;
31
    else b = ' ';
32
  lcd_puff_data(b,(platz+1));
33
  lcd_puff_data((a+48),(platz+2));
34
35
  lcd_puff_data(',',(platz+3));
36
37
  switch(ds3231_t2){
38
    case 0 : lcd_puff_data('2',(platz+4)); lcd_puff_data('5',(platz+5)); break;
39
    case 1 : lcd_puff_data('5',(platz+4)); lcd_puff_data(' ',(platz+5)); break;
40
    case 2 :  lcd_puff_data('7',(platz+4)); lcd_puff_data('5',(platz+5)); break;
41
    default :  lcd_puff_data('0',(platz+4)); lcd_puff_data(' ',(platz+5));
42
  }  
43
}

von georg (Gast)


Lesenswert?

AVRli .. schrieb:
> Hier mal der Inhalt aller Register des DC3231

Heisst das Ding nicht DS3231? Schlecht für die Suchfunktion, allerdings 
taugt die eh nichts.

Georg

von Maxim B. (max182)


Lesenswert?

AVRli .. schrieb:
> Würde nun denken, dass das ein "Selbstläufer" ist... halt alle 64
> Sekunden ein Update.
>
> Jetzt habe ich natürlich mal ein setzen des CONV Bit im Control Register
> vorangestellt, das Erbenis ist leider das gleiche. :-(

Hier habe ich so gemacht:
jede 2,5 S. macht das diese Funktion:
1
void ds3231_temp_start(void){
2
  i2c_twimaster_start_cond();               
3
  i2c_twimaster_send_byte(ds3231_RTC_adr_write);   
4
  i2c_twimaster_send_byte(0x0E);         
5
  i2c_twimaster_send_byte(0b00100000);      
6
  i2c_twimaster_stop_cond();             
7
}

: Bearbeitet durch User
von AVRli .. (avrli)


Lesenswert?

georg schrieb:
> Heisst das Ding nicht DS3231?

Ja... :-(
Kann den Titel nicht mehr ändern, vlt. kann das ein Moderator?
Ich melde den Beitrag mal...

Maxim B. schrieb:
> Hier habe ich so gemacht:

Danke, hast Du eventuell mal ein paar Rohwerte zum Vergleich?

Habe jetzt mal das Control Register zyklisch mit ausgegeben, das CONV 
Flag (BIT 5) bleibt immer gesetzt, das wird nie gelöscht.

Das lese ich etwas anders, das soll auf 0 gehen, wenn die CONVERTION 
abgeschlossen ist. Ich vermute ja bald, daran wird es liegen...

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

AVRli .. schrieb:
> hast Du eventuell mal ein paar Rohwerte zum Vergleich?

Die Uhr läuft bei mir gerade in Testmodus. Es wird 17:47:54 und +25,75°C 
gezeigt.

AVRli .. schrieb:
> Das lese ich etwas anders, das soll auf 0 gehen, wenn die CONVERTION
> abgeschlossen ist. Ich vermute ja bald, daran wird es liegen...

Ich lese einfach alle Register zweimal pro Sekunde. Und unabhängig davon 
lasse jede 2,5 Sek. Temperaturmessung starten.

Ich habe bei Timer jede 1 ms ISR. So wird alles Zeitliche damit 
bestimmt. Jede 1 ms wird Drehgeber abgelesen. Jede 10 ms werden die 
Tasten gelesen. jede 500 ms wird Uhr und Temperatur gelesen. Jede 2,5 S 
Konversion.

1
ISR(TIMER0_COMPA_vect){ // Timer 0 interrupt.
2
            // Dauer 326 Zyklen = 20,375 us (16 MHz)
3
  FLAGG |= (1<<F_PULS);  // Flag fuer Puls einsetzen
4
  drehgeber_abfrage();  // jede 1 ms gemacht
5
  led_aus_time();
6
  lcd_puff_lcd(); // LCD erneuern
7
}
In main:
1
while(1){ 
2
3
  // Bedienung von Puls 1 ms
4
  if( FLAGG & (1<<F_PULS) ){
5
    FLAGG &= ~(1<<F_PULS); // Flag fuer Puls = 0    
6
    timer3_10ms_puls();
7
    timer3_500ms_puls();
8
  }
9
}
1
void timer3_10ms_puls(void){      // Bedienung von Puls (10 ms)
2
  static char aa = 10;
3
  aa--;          // Divider auf 10
4
  if(!aa){
5
    aa = 10;
6
    knopf_abfrage();  // jede 10 ms gemacht
7
8
    logik_tasten();
9
    logik_drehgeber();
10
  }
11
}
12
13
void timer3_500ms_puls(void){    // Bedienung von Puls (500 ms)
14
  static int aa = 500;
15
  static unsigned char bb = 5;  // Bedienung von Puls (2,5 s)
16
  aa--;
17
  if(!aa){
18
    aa = 500;
19
    ds3231_put_time(61);
20
    ds3231_put_wday(41);
21
    ds3231_put_temperatur(71);
22
23
    bb--;
24
    if(!bb){
25
      bb = 5;
26
      ds3231_temp_start();
27
    }
28
  }
29
30
}
In put-Funktionen wird Platz in LCD angegeben, wohin die Daten 
geschrieben werden.

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

auf einem Arduino mache ich das wie folgt.
Die I2C Funktionen könnt ihr ja ändern.
1
bool read_RTC_DS3231_Temp (int i2c_adresse)  {  // RTC Temperatur auslesen  
2
  int data = 0;
3
  byte LSB = 0;
4
  float temp = 0.0;
5
    
6
  bool error = false;                   // Fehlerstatus setzen
7
  Wire.beginTransmission(i2c_adresse);     // Connect
8
  Wire.write(0x11);                        // Anfrage ab/der Register Nummer 11h
9
  if (Wire.endTransmission() > 0 )  {      // war Connect fehlerfrei?
10
    error = true;                          // I2C Busfehler
11
    return error;                          // Abbruch
12
  } 
13
  Wire.requestFrom(i2c_adresse, 2);        // 2 Bytes in Folge anfordern/lesen
14
  if (Wire.available() > 0 )  {            // sind Daten vorhanden?
15
    data = Wire.read();          // 0x11h ... MSB of Temp
16
    data = data << 8;            // MSB Bits ins höherwertige Byte im int verschieben
17
    LSB = Wire.read();           // 0x12h ... LSB of Temp
18
    data = data | LSB;           // LSB Bits in niederwertige Byte einfügen
19
  }  
20
  
21
  data = data >> 6;              // Ganzzahl gibt ein Vielfaches von 1/4 Grad an
22
  temp = (float) data * 0.25;  
23
  
24
  dtostrf(temp, 7, 2, _RtcTempBuf);  
25
  
26
  return error;  
27
}

von S. Landolt (Gast)


Lesenswert?

> rechne ich mir den Wert erstmal in m°C um
Sind es nicht c°C?

> Bei -16,25°C würde ich hier sicher nicht sitzen
Durch die zweifache Linksverschiebung von 0x2F wird das Vorzeichen 
gesetzt.

Wenn ich allerdings dieses 0x2F 0xC0 nach dem Datenblattzitat rechne, 
komme ich auf 47.75 °C, auch keine gemütliche Umgebungstemperatur - was 
mache ich falsch?

von Veit D. (devil-elec)


Lesenswert?

Hallo,

man muss nur wie gezeigt Register 0x11 und 0x12 auslesen, MSB und LSB 
verodern, um 6 Stellen nach rechts schieben und mit 0,25 multiplizieren. 
Dann hat man den Fließkommawert in °C.

von S. Landolt (Gast)


Lesenswert?

Okay, komme ich auch wieder auf 47.75 °C. Dann stimmt beim Auslesen 
etwas nicht.

von S. Landolt (Gast)


Lesenswert?

... mal davon ausgehend, dass kein Leistungsbauteil direkt neben dem 
DS3231 sitzt.

von AVRli .. (avrli)


Lesenswert?

S. Landolt schrieb:
> Wenn ich allerdings dieses 0x2F 0xC0 nach dem Datenblattzitat rechne,
> komme ich auf 47.75 °C, auch keine gemütliche Umgebungstemperatur - was
> mache ich falsch?

Danke das Du Dir das im Detail mal mit ansiehst!

Ja das habe ich nun mit der Korrektur der "Vorzeichen Geschichte" beim 
schieben auch raus. :-(
Drei Sachen geben mir zu denken...

1. Ich lese genau wie ALLE Beispiele hier 2 Byste ab Adresse 0x11 ein.
2. Das CONV Flag wird im Control Register aber nie gelöscht
3. Scheint auch als das die Uhr nicht genau läuft. Sie ist nun 10h im 
Betrieb und geht schon 37 Sekunden nach. Scheint als hätte ich hier eine 
nicht ganz so "Extremely Accurate I2C-IntegratedRTC" ;-)

S. Landolt schrieb:
> ... mal davon ausgehend, dass kein Leistungsbauteil direkt neben dem
> DS3231 sitzt.

Nein, liegt hier auf dem Schreibtisch und das IR Thermometer zeigt 28,3 
°C an also in der Richtung sollte auch was raus kommen. Das ist alles 
etwas kurios. :-(

Was kann man denn noch falsch machen, wenn die anderen Bytes in Ordnung 
sind?

Grüße AVRli...

: Bearbeitet durch Moderator
Beitrag #5398037 wurde vom Autor gelöscht.
von Gerhard O. (gerhard_)


Angehängte Dateien:

Lesenswert?

AVRli .. schrieb:
> Was kann man denn noch falsch machen, wenn die anderen Bytes in Ordnung
> sind?

Vielleicht liegt es gar nicht an Deinem Code und es ist möglicherweise 
ein DS3231 aus zweifelhafter Herkunft.

Hier ist ein REG Dump von meinem DS3231:

RTC RAM dump:
01 43 16 00 21 04 18 00 00 00 00 00 00 00 00 00
00 14 C0

DS3231 REG dump:
CTL: 00
STA: 00
AGO: 00
TMSB:14
TLSB:C0

Umgerechnet ist die Temperatur: 20.75 DEGC. Ein in der Nähe liegender 
TMP101 zeigte gerade 21.2 Grad an.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

AVRli .. schrieb:
> 3. Scheint auch als das die Uhr nicht genau läuft. Sie ist nun 10h im
> Betrieb und geht schon 37 Sekunden nach.

Dann wird es wohl Zeit, sich mal um das Aging Offset Register zu 
kümmern.

von Gerhard O. (gerhard_)


Lesenswert?

Wolfgang schrieb:
> AVRli .. schrieb:
>> 3. Scheint auch als das die Uhr nicht genau läuft. Sie ist nun 10h im
>> Betrieb und geht schon 37 Sekunden nach.
>
> Dann wird es wohl Zeit, sich mal um das Aging Offset Register zu
> kümmern.

Sollte normalerweise nicht notwendig zu sein. Der abgebildete DS3231 
läuft bei mir schon seit zwei Jahren mit einer mittleren Abweichung von 
10s/Jahr ohne daß ich am AGO herum gefummelt hatte.

Ein in meiner Wetterstation eingebauter DS3234 läuft seit 18 Monaten mit 
weniger als 1 Minute/Jahr Abweichung bei Außentemperaturen von -35 Grad 
bis +32.

Wirkliche Qualitätsvergleiche sind meiner Meinung nach nur fair mit 
Original Fabriks ICs. Bei China Importen weiß man nie genau was man da 
bekommt.

: Bearbeitet durch User
von Joachim B. (jar)


Angehängte Dateien:

Lesenswert?

AVRli .. schrieb:
> For example, 00011001 01b = +25.25°C.
>
> Da ich auf Floats verzichten möchte rechne ich mir den Wert erstmal in
> m°C um...
> int16_t calctemp;
> uint8_t temp_msb, temp_lsb;
>
> temp_msb = 0x2f;
> temp_lsb = 0xc0;

ich komme nicht auf deine Werte

aber ich weiss das Fleurys & me Code schon seit Jahren das Richtige 
liefert.

: Bearbeitet durch User
von AVRli .. (avrli)


Lesenswert?

Gerhard O. schrieb:
> Vielleicht liegt es gar nicht an Deinem Code und es ist möglicherweise
> ein DS3231 aus zweifelhafter Herkunft.

Dann falle ich um wenn es daran liegt.
Das Problem ist nun, woran erkenne ich das ich ein Original habe? :-D

Ich dachte mir, kaufste bei einem Händler der damit wirbt für gute 
Arduino Baugruppen zu stehen. Kein China-Direkt-Import. Aber bei den 
Preisen würde mich da auch nichts mehr wundern...

Kann einer eine zuverlässige Quelle nennen?


Gerhard O. schrieb:
> Hier ist ein REG Dump von meinem DS3231:


Ohh cool, Danke!
Kannst Du mal schauen, was passiert wenn Du BIT5 im CONTROL Register 
setzt? Ob das nach der Temperaturwandlung vom Chip wieder gelöscht wird?

(Danke an den Unbekannten der meinen schusseligen Beitragstitel 
korrigiert hat!)

Fahre jetzt zum Kumpel, der hat das gleiche Modul, allerdings beim 
gleichen Händler gekauft, das hole ich mir mal für einen Vergleich.

Die Uhr geht nun schon 3 Minuten nach...

Schöne Grüße, AVRli...

von Wolfgang (Gast)


Lesenswert?

Gerhard O. schrieb:
> Sollte normalerweise nicht notwendig zu sein.

So die Theorie.
Wenn aber die Praxis sagt, dass da was nicht stimmt, wird man erstmal 
gucken, ob die Versorgungsspannung ok ist und dann als nächstes nach 
Justagemöglichkeiten suchen - das Aging Register zählt dazu.

von S. Landolt (Gast)


Lesenswert?

> ... Versorgungsspannung ...
Hätte ich auch vorgeschlagen, wenn es der nackte Chip wäre, aber beim 
Modul? Ich kenne die Teile nicht, aber ist da nicht eine Stützbatterie 
integriert?

> ... Aging Register ...
Bei 3 Minuten pro Tag, also einem Delta von 2.08*10^-3? 2080 ppm mit 
diesem 8-bit-Register korrigieren, wie geht das?

von Wolfgang (Gast)


Lesenswert?

S. Landolt schrieb:
>> ... Aging Register ...
> Bei 3 Minuten pro Tag, also einem Delta von 2.08*10^-3? 2080 ppm mit
> diesem 8-bit-Register korrigieren, wie geht das?

Wenn der Justagebereich nicht ausreicht und es keine weiteren 
Möglichkeiten für einen Eingriff in den Gang der Uhr gibt, bleibt nur 
Wegschmeißen.
Wer weiss, warum das Modul zu diesem Preis vom Händler auf den Markt 
gebracht werden konnte - Restrisiko beim Billigkauf.
Ob ein Kistenschieber von chinesischen Modulen immer sooh genau weiss, 
was er da schiebt, bin ich mir nicht sooh sicher.

von S. Landolt (Gast)


Lesenswert?

Da ist ja auch noch das Eingangsproblem, die falsche Temperatur, und 
diese lässt sich, wenn ich das Datenblatt hinreichend überflogen habe, 
nicht korrigieren, und sie wird auch immer die Ganggenauigkeit 
verderben.
  Aber warten wir mal ab, was der Vergleich mit dem Modul des Kumpels 
ergibt.

von S. Landolt (Gast)


Lesenswert?

An Gerhard O., es fällt mir jetzt erst auf:

> ... Außentemperaturen von -35 Grad ...

Welche (Welt-) Gegend ist das?

von AVRli .. (avrli)


Lesenswert?

Ich danke Euch das ihr mit mir am Ball bleibt!
Habe das zweite Modul hier und habe es dran und?
Das gleiche Ergebnis... :-(

Das Temperaturregister MSB enthält den Wert 2f, lustig finde ich das 
nicht mehr.

Wolfgang schrieb:
> gucken, ob die Versorgungsspannung ok ist

Da sagst Du was, habe ih mal gemacht.
5,0 V vom Board und 3,3 V von der Backup Batterie.

Da das Modul für 3,3 V - 5,0 V Betrieb spezifiziert ist, habe ich da 
keine weitere Bedenken gehabt.

von S. Landolt (Gast)


Lesenswert?

Ändert sich dieser Wert wenigstens, wenn man die Temperatur ändert, mit 
Kältespray und/oder Haartrockner?

von AVRli .. (avrli)


Angehängte Dateien:

Lesenswert?

S. Landolt schrieb:
> Ändert sich dieser Wert wenigstens?

Ja das schon, also lege ich die Finger auf den Chip steigt der Wert an, 
nach gut 2 Minuten habe ich:

MSB 0x32
LSB 0x40

Habe auch mal ein Bild vom Modul gemacht...

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

AVRli .. schrieb:
> Schöne Grüße, AVRli...

vielleicht habe ich deinen Code nicht verstanden, es mir nicht 
geluungen, aber mit deinen Werten und deinem Code das Richtige zu 
entlocken.

Auch wenn ich deine Werte in meinen Code einfüge kommt da nichts 
passendes raus.

AVRli .. schrieb:
> temp_msb = 0x2f;
> temp_lsb = 0xc0;

mit deinen Werten rechnet auch meine Routine 46,7°C

komisch, ich weiss auch nicht weiter
1
      // read Temp
2
      Wire.beginTransmission(DS1307_ID);       // DS anwaehlen
3
      printIIC(MSB_TEMP);                      // MSB Byte anwaehlen
4
      Wire.endTransmission();        
5
      Wire.requestFrom( ( DS1307_ID ), 2);     // request temp Hi und Temp low 2 Byte
6
//      __temp = (readIIC() & 0x00ff);           // mit 0x00ff unddieren weil Arduino 16 Bit liest aber nur 8 Bit kommen.
7
      __temp = (0x2f & 0x00ff);           // mit 0x00ff unddieren weil Arduino 16 Bit liest aber nur 8 Bit kommen.
8
      __temp <<= 8;      
9
//      __temp |= (readIIC() & 0x00ff);          // mit 0x00ff unddieren weil Arduino 16 Bit liest aber nur 8 Bit kommen.    
10
      __temp |= (0xc0 & 0x00ff);          // mit 0x00ff unddieren weil Arduino 16 Bit liest aber nur 8 Bit kommen.    
11
      Wire.endTransmission();

von Veit D. (devil-elec)


Lesenswert?

Hallo,

habs auch nochmal nachgestellt, bin auch der meinung das die 
ausgelesenen Werte aus den beiden Registern nicht stimmen.
1
data: 00000000.00101111  MSB
2
data: 00101111.00000000  << 8
3
data: 00000000.11000000  LSB
4
data: 00101111.11000000  OR LSB
5
data: 00000000.10111111  >> 6
6
47.75

Wegen dem CONV Bit. Dass muss man nur beachten wenn man selbst eine 
Temperaturmessung anschuppst. Von der Sache her benötigt man das nicht, 
weil der IC aller 64s selbst eine Messung durchführt. Das heißt du 
kannst ständig die Temp. auslesen, bekommst aber nur aller 64s einen 
neuen Wert vom IC.
Wenn du zügig das CONV Bit ausliest und es steht immer auf 1, dann macht 
er nie eine neue Messung. Wenn CONV und BSY auf 0 stehen ist eine 
Messung fertig. Das dauert jedoch keine Sekunde.

Edit:
versuche es einmal ohne die Batterie. Dann Vbat connect to ground.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Veit D. schrieb:
> habs auch nochmal nachgestellt, bin auch der meinung das die
> ausgelesenen Werte aus den beiden Registern nicht stimmen.

der TO sollte mal das BSY Flag prüfen bevor er die Temperatur liest

//check busy
    Wire.beginTransmission(DS1307_ID);
    printIIC(STATUS_REGISTER);
    Wire.endTransmission();
    Wire.requestFrom( ( DS1307_ID ), 1);       // request Status 
Register 1 Byte
    if ((readIIC() & 0x00ff) & (1<<BSY))       // auf busy pruefen mit 
0x00ff unddieren weil Arduino 16 Bit liest aber nur 8 Bit kommen.
      i2c_test_flags|=(1<<I2C_RTC_TEMP_BSY);           // Flag busy 
setzen
    else
      i2c_test_flags&=~(1<<I2C_RTC_TEMP_BSY);          // Flag busy 
loeschen
    Wire.endTransmission();
    if( !(i2c_test_flags&(1<<I2C_RTC_TEMP_BSY)) )
    {
      // read Temp

von my2ct (Gast)


Lesenswert?

Joachim B. schrieb:
> AVRli .. schrieb:
>> temp_msb = 0x2f;
>> temp_lsb = 0xc0;
>
> mit deinen Werten rechnet auch meine Routine 46,7°C

Um den Wert aus den Temperaturregister grob zu prüfen, kann man auf 
großartige Routinen zur Umrechnung erstmal völlig verzichten. Das 
schafft nur zusätzlich Fehlerquellen sowohl bei der Bitschieberei als 
auch bei der anschließenden Rechnerei.
Laut Datenblatt liegt unter der Adresse 11h der ganzzahlige Anteil des 
Celsius-Temperaturwertes und solange der bei Raumtemperatur nicht 
irgendwo zwischen 20..27dez (14h..1Bh) liegt, oder wie sommerlich auch 
immer die Raumtemperatur ist, kann man sich irgendwelche Fummelei mit 
den Bits, Floating-sonstwas-Routinen oder abgefahrene m°C-Tricksereien 
sparen.

von AVRli .. (avrli)


Lesenswert?

Aber ihr kommt auch alle auf das Ergebnis, was nicht stimmen kann.

Veit D. schrieb:
> Wenn du zügig das CONV Bit ausliest und es steht immer auf 1, dann macht
> er nie eine neue Messung. Wenn CONV und BSY auf 0 stehen ist eine
> Messung fertig. Das dauert jedoch keine Sekunde.

Ja das CONV Bit bleibt auf 1, ich kann es zwar löschen aber von allein 
geht das nicht auf 0! Auch nach Stunden nicht...

Das BUSY Flag im Status Register ist immer 0, habe ich noch nie als 1 
ausgelesen.



my2ct schrieb:
> Um den Wert aus den Temperaturregister grob zu prüfen, kann man auf
> großartige Routinen zur Umrechnung erstmal völlig verzichten.

Da muss ich Dir Recht geben, also der Ganzzahlanteil muß im MSB schon 
passen. Mit dem LSB kann man dann ja nur noch 0.00/0.25/0.50/0.75 
bestimmen.

Veit D. schrieb:
> versuche es einmal ohne die Batterie. Dann Vbat connect to ground.

Das habe ich auch mal gemacht, dann bekomme ich im Status Register das 
Bit angezeigt, das der Oszillator still stand. Meine Meldung "BAT 
prüfen" kommt auch und setzt das Bit dann zurück. Aber die Temperatur 
Register haben die gleichen Werte also nun irgendwas um 0x30 im MSB, 
hatte es ja in der Hand.

Ich glaube auch so langsam der Chip oder die Chips haben ein Defekt.

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

Du kannst 2-3 andere Module ausprobieren. Solche Sachen kauft man 
sowieso immer mehrere gleich, die sind ja sehr billig... Wenn auch mit 
anderen immer so, dann hast du Problem woanders.

Wen du das nicht festgelötet hast, dauert so eine Prüfung nur ein paar 
Sekunden.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Maxim B. schrieb:
> Solche Sachen kauft man
> sowieso immer mehrere gleich,

ich immer mindestens 2 Stück, denn eines kann ja gleich kaputt sein oder 
ich kille es. Bei 2 kaputt muss man halt nachforschen.

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

Ich kaufe bei Chinesen immer so für 20 €, um steuerfrei zu bleiben. 
Keine Ahnung, wie und wo mann sonst Zoll bezahlen sollte.

von S. Landolt (Gast)


Lesenswert?

Also mal zusammengefasst:
1
- die Kommunikation scheint korrekt abzulaufen
2
- die ausgelesene Temperatur ist ca. 20 Grad zu hoch
3
- Temperaturänderung:
4
    Finger aufdrücken bringt +3 Grad: kann hinkommen
5
- die Zeit stimmt nicht:
6
    -37 s / 10h: -1028 ppm
7
    -3 min / 22 h: -2273 ppm
8
    merkwürdig, läuft das wirklich davon?
9
- ein zweites Modul aus derselben Charge zeigt dasselbe Verhalten
10
    (zumindest bezüglich der Temperatur)

Tja, hilft jetzt nicht wirklich weiter.

Ich muss aber doch meiner Enttäuschung Ausdruck geben: dieselben Leute, 
die mir noch vor kurzem diese RTC-Module als die beste Lösung anpriesen, 
geben jetzt nur den Rat, die Dinger gleich sackweise einzukaufen.

von Maxim B. (max182)


Lesenswert?

S. Landolt schrieb:
> dieselben Leute,
> die mir noch vor kurzem diese RTC-Module als die beste Lösung anpriesen,
> geben jetzt nur den Rat, die Dinger gleich sackweise einzukaufen.

Das ist aber immer so, wenn man etwas mit Elektronik macht. Du solltest 
zuerst Minimum von Widerständen, Dioden, Kondensatoren, populären 
Transistoren und IC haben, vor dem du überhaupt am ersten mal deinen 
Lötkolben nimmst.
Es ist immer damit zu rechnen, daß du:
1. etwas kaputt machst
2. fehlerhafte Detail bekommst
3. Ersatz mit ein bißchen anderen Daten brauchst
usw.

Wenn du etwas mit ATmega machst und nur 1 St. Mega gekauft hast, so wird 
dein Vorhaben mit Garantie scheitern. Genau so mit RTC und mit allen 
anderen Sachen.

Hast du das nie gewußt?

Elektronik ist ein teures Hobby. Noch teurer ist nur Musik :)

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

S. Landolt schrieb:
> Ich muss aber doch meiner Enttäuschung Ausdruck geben: dieselben Leute,
> die mir noch vor kurzem diese RTC-Module als die beste Lösung anpriesen,
> geben jetzt nur den Rat, die Dinger gleich sackweise einzukaufen.

Soweit ich mich erinnere, gehöre ich nicht dazu....
;-)

Denn ich rate zur ChronoDot.

Aus mehreren Gründen:
1. da ist nicht diese unsägliche Ladeschaltung drauf
2. Keine stromfress LED
3. keine Pullups drauf, aber vorbereitet

Als Nachteil, könnte man das fehlende EEPROM anführen.
Und die etwas exotischere Batterie, die CR1220



Aber dessen Thermosensoren zeigen auch in die Wiese.
Zumindest die, welche ich gerade getestet habe, liegen ca 2 bis 3 Grad 
zu hoch.
(hat mich vorher noch nicht interessiert)

von Wolfgang (Gast)


Lesenswert?

S. Landolt schrieb:
> - die ausgelesene Temperatur ist ca. 20 Grad zu hoch

Woraus schließt du das?
Wäre es nicht auch möglich, dass sie einen Faktor 2 zu hoch ist?

Man sollte zumindest mal bei ein paar Punkten eine Kalibrierung mit 
einem halbwegs vernünftigen Referenzthermometer durchführen (z.B. 
Gefrierschrank, Kühlschrank, Raumtemperatur)

von Joachim B. (jar)


Lesenswert?

S. Landolt schrieb:
> Ich muss aber doch meiner Enttäuschung Ausdruck geben: dieselben Leute,
> die mir noch vor kurzem diese RTC-Module als die beste Lösung anpriesen,
> geben jetzt nur den Rat

also bitte

für 5x Stück mit LiR Akku 12,95 bekommt man hier nicht mal die LiR 
zugeschickt

Bei mir ist an jedem Arduino oder ESP32 eine RTC dran, das soll auch 
laufen wenn mal keine Verbindung zum Router ist oder nur ein 
Steckernetzteil am Arduino hängt.

wie gesagt, wer nur ein Modul bestellt muss immer damit rechnen das 
eines kaputt ist oder das man es beim Basteln killt.

Ich habe noch kein RTC Modul gekillt und auch kein defektes RTC Modul 
bekommen (aber 2x defekte ESP32 Module) und auch letztens mein Arduino 
migthy mini 1284p geschrottet, Fehler passieren (ISP falsch gesteckt)

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

> ... Faktor 2 zu hoch
Bei 47 statt 27 (so ungefähr), also der Nullpunkt bei 7 °C? Da kann ich 
nicht ganz folgen.

von AVRli .. (avrli)


Lesenswert?

S. Landolt schrieb:
> Also mal zusammengefasst:
> - die Kommunikation scheint korrekt abzulaufen
> - die ausgelesene Temperatur ist ca. 20 Grad zu hoch
> - Temperaturänderung:
>     Finger aufdrücken bringt +3 Grad: kann hinkommen
> - die Zeit stimmt nicht:
>     -37 s / 10h: -1028 ppm
>     -3 min / 22 h: -2273 ppm
>     merkwürdig, läuft das wirklich davon?
> - ein zweites Modul aus derselben Charge zeigt dasselbe Verhalten
>     (zumindest bezüglich der Temperatur)
>
> Tja, hilft jetzt nicht wirklich weiter.

Soweit richtig, würde noch ergänzen wollen:

- CONV Flag wird nie gelöscht


Ich glaube ja bald das die Temperatur und das zunehmende Nachlaufen der 
Zeit direkt etwas miteinander zu tun haben. Damit ist das Modul nicht zu 
gebrauchen.

Ich habe jetzt nochmal Module bestellt, welche einen anderen Aufbau 
haben aber wieder den DS3132. Sie haben die Ausgänge 32kHz und INT 
nicht, die brauche ich aber ehh nicht.

Ich werde berichten was dann damit ist. Die anderen kann ich zum Glück 
noch zurück geben, muss das ganze aber noch verifizieren. Will mich da 
auf keinen Fall blamieren! ;-)

Zu der Diskussion sackweise einzukaufen halte ich nicht viel. Klar kann 
immer mal was defekt sein nur deshalb leg ich mir ja nicht von jedem 
Teil Ersatz (vlt. x-mal) in den Schrank. Wenn ich ein Modul kaufe, kaufe 
ich das so oft ich das benötige.

Ich bastle nun seit über 25 Jahre und hatte noch nie einen Chip, der 
nicht das gemacht hat, was im Datenblatt stand. Davon mal abgesehen hat 
ein Modul 9,50€ gekostet, da erwarte ich was anderes! Wenn mir das mit 
einem 1,20€ China Modul passiert wäre... OK.

(Wenn das vlt. sogar nicht alles der gleiche Schrott ist, wer weiß das 
schon!)

Wäre ich nicht auf die Idee gekommen die Temperatur auszuwerten, hätte 
ich gedacht am Chip kann das nicht liegen, wenn die Uhr nachgeht.

Grüße AVRli...

von S. Landolt (Gast)


Lesenswert?

> Ich bastle nun seit über 25 Jahre und hatte noch nie einen Chip,
> der nicht das gemacht hat, was im Datenblatt stand.

Bei mir ist es doppelt so lang, und die Erfahrung ist dieselbe. Das gilt 
übrigens auch für komplette Geräte, ich kann mich an keines erinnern, 
welches gleich zu Beginn defekt war.
  (Erst in jüngster Zeit rauchte beim ersten Einstecken ein 
Steckerschaltnetzteil, trotz "Q.C. passed")

von georg (Gast)


Lesenswert?

AVRli .. schrieb:
> aber wieder den DS3132

DS3231. Irgendwie stehst du mit dem Chip auf Kriegsfuss, kein Wunder 
zickt er rum.

Georg

von Gerhard O. (gerhard_)


Lesenswert?

S. Landolt schrieb:
> An Gerhard O., es fällt mir jetzt erst auf:
>
>> ... Außentemperaturen von -35 Grad ...
>
> Welche (Welt-) Gegend ist das?

Edmonton, Alberta. Kanada.

Die kälteste Wintertemperatur die mir früher mal begegnet ist, lag bei 
-45 Grad. In den letzten 20 Jahren war es nie kälter als -35. Meistens 
dauern solche Kälteeinbrüche nie langer als eine Woche.

Gruß,
Gerhard

von S. Landolt (Gast)


Lesenswert?

> Edmonton, Alberta. Kanada.

Ahh...
Das weckt Erinnerungen an einen wunderbaren Urlaub zu zweit, vier Wochen 
Kanada, zwei USA. Tempi passati, "sauer werden süße Dinge".

von Gerhard O. (gerhard_)


Lesenswert?

Ich habe noch ein paar (4) DS3231 Module rumliegen und werde sie später 
mal testen. Muß erst noch frühstücken:-) Gestern probierte ich noch ein 
selbst gebautes Modul mit dem DS3232 aus und die Temperatur wurde genau 
angezeigt.

Bei Vergleichsmessungen richte ich immer einen kleinen Lüfter auf die 
RTC Bord und die im Bild gezeigte TMP101 Bord um eine möglichst gleiche 
Umgebungstemperatur sicher zu stellen. Wie das Bild zeigt stimmen die 
gemessenen Temperaturen gut miteinander überein.

Die massive Gangungenauigkeit gibt mir auch zu denken. Der 
Einstellbereich des Aging Register hat ja nur einen kleinen 
Einstellbereich und eine Abweichung vom Default Wert hat übrigens eine 
Temperaturkompensations Degradierung zur Folge.

Meine beidene im Einsatz befindlichen China Module arbeiten absolut 
einwandfrei. Meine Module wurden übrigens mit der LR2032 ladbaren Zelle 
geliefert. Inwieweit die Ladeschaltung auf die Dauer sicher ist habe ich 
noch nicht untersucht.

Beim Kauf solcher Module beachten, sofern sie für den Ausseneinsatz in 
Frage kommen, daß der DS3231 keine kommerzielle Temperaturausführung 
ist. Wenn ich mich recht erinnere haben kommerzielle Ausführungen mit 
0-70 Grad einen "N" am Ende.

Machte beim DS3234 eine schlechte Erfahrung bei der Wetterstation. Der 
Gangfehler war dann bei -18 Grad absolut astronomisch.


Gruß,
Gerhard

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

der Fall ist schon seltsam. Eigentlich funktionieren die Teile.
Meine zwei laufen pro Jahr ca. 1-2 Sekunden falsch.
Ich hoffe du hast die neuen bei einem anderen Händler gekauft mit guter 
Bewertung.

von Gerhard O. (gerhard_)


Lesenswert?

Ist es möglich, daß trotz aller bisherigen Bemühungen eine 
Bitverschiebung beim Einlesen vorgekommen ist?

Ich finde es etwas merkwürdig, daß der Wert 0x2F beim Shiften nach 
rechts um ein Bit den Wert "0x17" ergibt. Das wäre zufällig ein 
plausibler Wert mit 23.75 Grad.

Dann stimmt der Teil wieder. Erklärt allerdings nicht die 
Gangungenauigkeit.

Beim Betrachten des Bildes Deiner RTC fiel mir auf, daß es dieselbe Bord 
wie bei mir ist.

von S. Landolt (Gast)


Lesenswert?

Sollte dann aber nicht auch der Bruchwert, das 0xC0, verschoben sein? 
0x60 gibt es jedoch lt. Datenblatt nicht.

von Gerhard O. (gerhard_)


Lesenswert?

AVRli .. schrieb:
> S. Landolt schrieb:
>> Ändert sich dieser Wert wenigstens?
>
> Ja das schon, also lege ich die Finger auf den Chip steigt der Wert an,
> nach gut 2 Minuten habe ich:
>
> MSB 0x32
> LSB 0x40
>
> Habe auch mal ein Bild vom Modul gemacht...

Das wären mit Shift 25.25 Grad (0x19)

von Gerhard O. (gerhard_)


Lesenswert?

S. Landolt schrieb:
> Sollte dann aber nicht auch der Bruchwert, das 0xC0, verschoben
> sein?
> 0x60 gibt es jedoch lt. Datenblatt nicht.

Das stimmt. Es wäre merkwürdig wenn nur der Temperaturwert verschoben 
sein sollte. Was für ein Rätselspiel...

Ich werde mal später meinen Code posten. Allerdings verwende ich eine 
separate in Assembler geschriebene I2C Bibliothek. Man kann die Source 
ohne Installation der Bib. nicht sofort kompilieren. Die Arduino I2C mag 
ich nicht.

von Wolfgang (Gast)


Lesenswert?

AVRli .. schrieb:
> Veit D. schrieb:
>> versuche es einmal ohne die Batterie. Dann Vbat connect to ground.
>
> Das habe ich auch mal gemacht, dann bekomme ich im Status Register das
> Bit angezeigt, das der Oszillator still stand.

Dann wird er wohl keine Versorgungsspannung bekommen haben.
Bei den meisten Module direkt aus Shenzhen ist wohl nicht ohne Grund die 
Diode und der 1k Widerstand von VDD nach V_Bat bestückt.

von Wolfgang (Gast)


Lesenswert?

Wolfgang schrieb:
> ... von VDD nach V_Bat

Sorry, das muss heißen "von VCC nach V_Bat", auch wenn ich nicht glaube, 
dass in dem IC irgendein Bipolartransistor enthalten ist ;-)

von Maxim B. (max182)


Lesenswert?

AVRli .. schrieb:
> Ich bastle nun seit über 25 Jahre und hatte noch nie einen Chip, der
> nicht das gemacht hat, was im Datenblatt stand.

Ich bastle seit über 40 Jahre und ich habe eine Menge defekt bekommen 
oder selbst gekillt. :) Und nicht nur Detail, auch ein Osci und mehrere 
Voltmeter! :) Verbrannte Werkzeug kann ich nicht mehr genau zählen, das 
gehört bei mir zu Verbrauchsmaterial :)

Aber ausgerechnet DS3231 hat bei mir von Anfang an einwandfrei 
funktioniert. Ich habe mit diesem Modul meine i2C-Routinen getestet. Mit 
Hard- und Software. Alles OK.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Maxim B. schrieb:
> Ich bastle seit über 40 Jahre und ich habe eine Menge ... oder selbst
> gekillt.

Eigentlich hattest du dann Zeit genug, dich nach einem Hobby umzusehen, 
das dir vielleicht besser liegt ;-)

von Maxim B. (max182)


Lesenswert?

Wolfgang schrieb:
> Eigentlich hattest du dann Zeit genug, dich nach einem Hobby umzusehen,
> das dir vielleicht besser liegt ;-)

Wozu? Ein Elko sollte doch ab und zu explodieren, das ist doch Elko 
oder? :)

DS geht aber schon seit einer Woche und immer noch sekundengenau...

: Bearbeitet durch User
von AVRli .. (avrli)


Lesenswert?

georg schrieb:
> Irgendwie stehst du mit dem Chip auf Kriegsfuss, kein Wunder
> zickt er rum.

Einmal falsch geschrieben, wird das so schnell nichts mehr... :-(
Ich werde mich bessern und habe inzwischen nochmal auf den Chip 
geschaut!
Es ist ein DS3231... :-D


Gerhard O. schrieb:
> Ich habe noch ein paar (4) DS3231 Module rumliegen und werde sie später
> mal testen.

Da bin ich gespannt!


Veit D. schrieb:
> Ich hoffe du hast die neuen bei einem anderen Händler gekauft mit guter
> Bewertung.

Ja, bei dem habe ich schon einmal gekauft. Auch ein guter Support und 
die Sachen die ich bisher von dort hatte damit gab es keine Probleme.


Gerhard O. schrieb:
> Das wären mit Shift 25.25 Grad (0x19)

Dann fällt meine Hand bald ab... ;-)
der Wert ist der, wenn ich den Chip 2 Minuten in der Hand mit den 
Fingern halte.

An falsch einlesen glaube ich an der Stelle nicht, weil alle anderen 
Register immer die gleichen Werte haben und die Zeit/Datumsangabe 
plausibel sind.

Nochmal ein Beispiel...

0x0000 28 04 19 01 22 04 18 00 00 00 00 00 00 00 20 00   (..."......... 
.
0x0010 00 30 00                                          .0.

22/04/18 19:04:28 (Datum/Uhrzeit)
1524423868 (UNIX Zeit)
48 (Temp)

Genutzt wird der Hardware TWI Master, geschrieben in C mit ATMEL Studio 
7.

Die anderen Module kommen wohl nächste Woche, etwas hippelig bin ich ja 
schon. ;-)

von Gerhard O. (gerhard_)


Lesenswert?

Ich habe meine übrigen Module getestet:

Sie sind numeriert:

TMP101 Anzeige = 23.6 Grad

1 - 23.5 Grad (Das von gestern und zum experimentieren verwendete
2 - 22.50
3 - 23.25
4 - 23.50
5 - 23.75

Ein DS3232 Modul:
23.25 (Original Maxim Chip, selbstgebautes Modul)

von Gerhard O. (gerhard_)


Angehängte Dateien:

Lesenswert?

Falls es hilft zum Testen und die Hardware passt:

Im Anhang hier ist das verwendete Test Program was zur Zeit auf einem 
Arduino Pro-Mini mit 16MHz laeuft.

Du kannst es ja das HEX Image mit dem ISP draufladen wenn es ein 328er 
ist.

Portbelegung: PD4 (D4) SDA, PD5 (D5) SCL mit 3.9K PULLUPS
Mit dem Termninal auf 9600,N,8,1 kannst du mit dem Programm arbeiten:
(CRLF on Terminal-TX muessen aktiviert sein)

Sende U1V <ENTER> um die Kommunikation zu testen,
Ausgabe: "ADAM V1.10, Apr 22 2018 "

Um das RTC Modul zu montieren sende zuerst das Kommando: U1P1,16<ENTER>
(EEPROM gespeichert)

Die RTC Kommandos:

U1C <ENTER> - Uhrzeit/Datum abfragen,
z.B. "12:07:33 18-04-22"

U1C7 - RTC DS323x REG Dump
U1@hhmmssyymmdd - Zum Zeitsetzen, z.B. U1@115130180422 <ENTER>
U1C8 - RTC Reg Dump
U1C9 - Clear RTC Data registers fuer DS3232

U1A gibt sechs Analogwerte aus
U1An, wo n 1-6 und nur den gewuenschten Kanal ausgibt
U1An,m fuer einen Bereich von Kanelen: U1A2,5 fuer AIN2 bis 5

U1? fuer Kommandohilfe

U1T gibt Temperatur aus wenn ein TMP101 am Bus angeschlossen ist.
Zum montieren addiere den Wert zum P1 Register. Z.B.
RTC+TMP101 = 16+4=20, also U1P1,20<ENTER>
(TMP101 I2C adresse muss 0x90 sein)

: Bearbeitet durch User
von AVRli .. (avrli)


Angehängte Dateien:

Lesenswert?

Gerhard O. schrieb:
> Ich habe meine übrigen Module getestet:
>
> Sie sind numeriert:

Super, danke! :-)
Die Ergebnisse sind doch gut, da würde ich mit zufrieden sein, will ja 
kein Präzisionsthermometer bauen.

Gerhard O. schrieb:
> Ein DS3232 Modul:
> 23.25 (Original Maxim Chip, selbstgebautes Modul)

Ja schau an, dass hat mich mal veranlasst meinen Chip hier zu 
fotografieren. Bilder sind angehangen...

Gerhard O. schrieb:
> Im Anhang hier ist das verwendete Test Program was zur Zeit auf einem
> Arduino Pro-Mini mit 16MHz laeuft.

Tolle Aktion, vielen Dank für Deine Unterstützung!
Leider habe ich das Arduino Modul nicht und kann deshalb mal nicht eben 
schnell mal testen.

von Stefan (Gast)


Lesenswert?

AVRli .. schrieb:
> Ja schau an, dass hat mich mal veranlasst meinen Chip hier zu
> fotografieren. Bilder sind angehangen...

Das ist ein DS3231M kein DS3231.

von Maxim B. (max182)


Lesenswert?

Stefan schrieb:
> AVRli .. schrieb:
>> Ja schau an, dass hat mich mal veranlasst meinen Chip hier zu
>> fotografieren. Bilder sind angehangen...
>
> Das ist ein DS3231M kein DS3231.

Ja, ein bißchen schlechtere Daten als ohne "M". Trotzdem...

Nur zum Verdacht: ist Init von DS3231 korrekt gemacht? Wird in OSF 0 
geschrieben?

: Bearbeitet durch User
von Gerhard O. (gerhard_)


Lesenswert?

Stefan schrieb:
> AVRli .. schrieb:
>> Ja schau an, dass hat mich mal veranlasst meinen Chip hier zu
>> fotografieren. Bilder sind angehangen...
>
> Das ist ein DS3231M kein DS3231.

Bei allen meinen ZS-042 Modulen sind DS3231SN eingebaut.

von Joachim B. (jar)


Lesenswert?

Gerhard O. schrieb:
> Bei allen meinen ZS-042 Modulen sind DS3231SN eingebaut.

bei meinem China Teil auch ein DS3231SN, lasergraviert, kaum zu lesen.

Ich habe aber nur ein Modul beguckt bis jetzt, die anderen sind ja 
verbaut face down

von AVRli .. (avrli)


Lesenswert?

Stefan schrieb:
> Das ist ein DS3231M kein DS3231.

Also das habe ich in der Tat wirklich noch nie erlebt! Bisher war der 
Zusatz vlt. Ros oder anderer Temperaturbereich aber das gleich ein 
anderer Chip sein soll. Ohh man!

Blöd ist nur, das mir als Kunde das Board als Board mit einem DS3231 
angeboten und verkauft wurde. Das schreibt nun keiner hin, das ist nicht 
so zufriedenstellend... :-(
Etwas getäuscht fühle ich mich schon - die Bestellung geht komplett 
zurück!

Ich habe das Datenblatt eben mal überflogen aber die Kernfunktionen sind 
schon noch die gleichen, auch was das Temp Registerpaar angeht.

Maxim B. schrieb:
> Nur zum Verdacht: ist Init von DS3231 korrekt gemacht? Wird in OSF 0
> geschrieben?

Na ich frage das Bit beim START ab, ist es gesetzt (Oszillator stand 
still) dann gebe ich einen Hinweis aus und lösche es.

Das habe ich bisher nur erlebt, wenn ich es neu anklemme also aus dem 
Plastiktütchen genommen hatte oder die Batterie draußen war.

Würde nun auch annehmen, das sonst die Uhr nicht laufen würde?

Ich bin schon gespannt, was auf den anderen, heute bestellten, drauf 
steht.

S. Landolt schrieb:
> - die Zeit stimmt nicht:
>     -37 s / 10h: -1028 ppm
>     -3 min / 22 h: -2273 ppm

Wie hast Du das ausgerechnet?
Das würde ich gerne mal selber machen um in Zukunft eine Aussage darüber 
machen zu können.

Grüße AVRli...

von Gerhard O. (gerhard_)


Lesenswert?

Ich werde in den nächsten paar Tagen zwei DS3232M (SO-8) Platinen 
zusammenlöten die ich vor ein paar Jahren entwickelte und herstellen 
habe lassen. Die RTCs sind Samples von Maxim. Es sollte interessant sein 
zu sehen wie die sich benehmen werden. Wenn sie laufen werde ich Euch 
die Ergebnisse hier präsentieren. Könnte durchaus nützlich sein wenn man 
China und Original Halbleiter vergleichen will.

Bin gespannt ob die bestellten DS3231(SN) besser funktionieren werden. 
Ich muß da offensichtlich zufälliges Glück gehabt haben. Den RTC Chip 
für das selbstgebaute DS3232 Modul stammte von Digikey.

Mit China DS3234 Modulen hatte ich wenig Glück wegen des falschen 
Temperaturbereichs und meiner Wetterstation Anwendung. Die DS3234N 
liefen wie gesagt bei -18 in 2 Wochen fünf Minuten(!) falsch. Dann 
bestellte ich mir einen DS3234SN von DK für einen Vergleich und der Spuk 
verschwand. In fast zwei Jahren Dauerbetrieb zwischen -35 und +32 läuft 
diese Uhr noch immer um 1 Minute und 3s genau (gerade gecheckt gegen 
WWVB). Ich mußte sie noch nicht nachstellen.

I will be back...

von Gerhard O. (gerhard_)


Lesenswert?

AVRli .. schrieb:
> Blöd ist nur, das mir als Kunde das Board als Board mit einem DS3231
> angeboten und verkauft wurde. Das schreibt nun keiner hin, das ist nicht
> so zufriedenstellend... :-(

Ich versuche immer mir die Bilder genau anzuschauen ob man die IC 
Beschriftung lesen kann. Seit meinen Reinfall mit den DS3234s bin ich 
jetzt immer etwas mißtrauisch.

Eine Frage: hast Du Dir das UNIX Zeit/Datum Berechnung selber geschnitzt 
oder ist das irgendeine Bib? Ich schrieb mir für den STM32F103 eine 
solche selber weil die interne RTC dort nur ein 32-bit Zaehler ist. Aber 
das war ganz interessant. Wann fängt bei Dir die Zeit an? 00:00:00 
01-01.1970? Ich glaube für mich ist die Frage wahrscheinlich 
illusorisch:-)

Gruß,
Gerhard

von Horst S. (Gast)


Lesenswert?

Sind das die Module, über deren Chip hier gesprochen wird?

https://www.reichelt.de/Entwicklerboard-Zubehoer/RPI-RTC-CLOCK/3/index.html?ACTION=3&LA=446&ARTICLE=224214&GROUPID=8244&artnr=RPI+RTC+CLOCK&SEARCH=RPI%2BRTC%2BCLOCK&trstct=pos_0

Sind ab 27.04. bestellbar und m.M. nach für Reichelt recht günstig.

von S. Landolt (Gast)


Lesenswert?

AVRli .. schrieb:
> S. Landolt schrieb:
>> - die Zeit stimmt nicht:
>>     -37 s / 10 h: -1028 ppm
>>     -3 min / 22 h: -2273 ppm
>
> Wie hast Du das ausgerechnet?

Nun ja, dividiert eben (ppm ist 10^-6).


AVRli .. schrieb:
> Sie ist nun 10h im
> Betrieb und geht schon 37 Sekunden nach.
Das war um 20:13, also war der Start etwa um 10 Uhr.

AVRli .. schrieb:
> Die Uhr geht nun schon 3 Minuten nach...
Das war um 08:17 Uhr, folglich lief da die RTC seit rund 22 h.

von Joachim B. (jar)


Lesenswert?

AVRli .. schrieb:
> Maxim B. schrieb:
>> Nur zum Verdacht: ist Init von DS3231 korrekt gemacht? Wird in OSF 0
>> geschrieben?
>
> Na ich frage das Bit beim START ab, ist es gesetzt (Oszillator stand
> still) dann gebe ich einen Hinweis aus und lösche es.

ich hatte ja Beispielcode hier gezeigt, hast du es mal mit dem versucht?

Das wäre die Gegenprobe!

: Bearbeitet durch User
von AVRli .. (avrli)


Lesenswert?

Gerhard O. schrieb:
> Wenn sie laufen werde ich Euch
> die Ergebnisse hier präsentieren.

Ja bitte auch, wenn nicht. ;-)


Gerhard O. schrieb:
> In fast zwei Jahren Dauerbetrieb zwischen -35 und +32 läuft
> diese Uhr noch immer um 1 Minute und 3s genau

Das finde ich schon beachtlich gut, damit wäre ich sehr zufrieden!
Die Genauigkeit, die ich gerade erreiche mit dem "hochpräzisen Modul", 
ist deutlich schlechter als meine Eigenbau RTC mit einem ATmega und 
einen Uhrenquarz an dem Teil.


Gerhard O. schrieb:
> Ich versuche immer mir die Bilder genau anzuschauen ob man die IC
> Beschriftung lesen kann.

Ja auf denen sieht man gar keine Bezeichnung, noch nicht mal 
Ansatzweise! Man könnte auf die Idee kommen... lassen wir es. Das regt 
mich auf! Auf solche Details achtet doch kaum einer. Und dann gehen Tage 
Zeit in den Sand...


Gerhard O. schrieb:
> Eine Frage: hast Du Dir das UNIX Zeit/Datum Berechnung selber geschnitzt
> oder ist das irgendeine Bib?

Na das hatte ich mir selbst gestrickt. Hatte dazu eine gute Erklärung im 
Netz gefunden und einen Online-UNIX-Umrechner. Aber da muß man auch 
aufpassen, eine Version lieferte da falsche Ergebnisse. Meine Routine 
lief schon richtig und bei einem Zweiten stimmte der Vergleich dann 
auch. Der Vorteil vom UNIX Format ist einfach das man in 4 Byte die 
komplette Zeit mit Datum speichern kann. Das war für mich wichtig.

Der ist korrekt!
https://www.unixtimestamp.com/index.php

Der arbeitet nicht richtig! Eine Stunde zu viel?
http://www.unixtime.de


Gerhard O. schrieb:
> Wann fängt bei Dir die Zeit an? 00:00:00
> 01-01.1970?

Alle Routinen rechnet ab dem Jahr 1970 mit uint32_t -> KEIN 2038 
Problem.
Dachte das ich das noch erlebe und dann wäre das blöd... ;-)


Horst S. schrieb:
> Sind das die Module, über deren Chip hier gesprochen wird?

Ja um den geht's. Da kann man wohl SN erkennen?


S. Landolt schrieb:
> Nun ja, dividiert eben (ppm ist 10^-6).

Das schau ich mir jetzt nochmal an.


Joachim B. schrieb:
> Das wäre die Gegenprobe!

Auch das schau ich mir jetzt nochmal an...


Grüße AVRli...

von Joachim B. (jar)


Lesenswert?

AVRli .. schrieb:
> Ja auf denen sieht man gar keine Bezeichnung, noch nicht mal
> Ansatzweise!

auf meinem Modul war es nur mit der Lupe und extra Beleuchtung zu sehen 
aber auch nur in einem besonderen Winkel, sah aus wie mit dem Laser 
gefräst.
Trotzdem laufen alle meine Module perfekt, ich tippe mal die sind ohne 
Aufdruck eben billiger und kommen so ab Werk.

Wenn du nicht genau schaust könntest du denken die sind unbeschriftet!

AVRli .. schrieb:
> Joachim B. schrieb:
>> Das wäre die Gegenprobe!
>
> Auch das schau ich mir jetzt nochmal an...

das würde mich freuen

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

Ich habe Datenblatt für DS3231 und Datenblatt für DS3231M gelesen...

Außer fehlender Möglichkeit, ISR-Frequenz zu wählen und etwas 
schlechterer Genauigkeit, scheint DS3231M keine Unterschiede zu haben. 
Aber!!!

Über DS3231 steht überall, es gibt Kondensator-Array, damit wird 
Frequenz korrigiert. Bei DS3231M steht kein Wort über Kondensator-Array. 
Es sieht so aus, das Wort "Kondensator" ist überall gestrichen. Auch 
Blockschema zeigt Unterschied: DS3231 hat "OSCILLATOR AND CAPACITOR 
ARRAY", DS3231M hat "DIGITAL ADJUSTMENT".

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

mir fällt nochwas ein als ich las die MSB und LSB um eine Stelle 
verschoben passen würden. Es gibt doch den Unterschied beim I2C mit der 
7 oder 8 Bit Adressierung. Bei der Arduino Lib muss man sich darum nicht 
kümmern. Wenn man das zu Fuss programmiert gibts da jedoch etwas 
zubeachten. Ich weis nicht ob das damit zu tun haben kann beim Register 
auslesen. Und vom TO habe ich auch noch keine Zeile seines Programms 
gesehen. Vielleicht liegst am IC. Vielleicht aber doch nur am Code.
Was hast du für einen µC?
Schaltplan?
Code?
Sonst drehen wir uns alle nur im Kreis. Ganz ehrlich.

von Maxim B. (max182)


Lesenswert?

Veit D. schrieb:
> Es gibt doch den Unterschied beim I2C mit der
> 7 oder 8 Bit Adressierung.

Es gibt kein Unterschied. Immer bestimmen Bit7-Bit1 Adresse und Bit0 
bestimmt R/W.

Übrigens, mir ist etwas aufgefallen:
Bei der Bestellung sollte man in der Beschreibung achten:
DS3231 hat "Accuracy ±2ppm from 0°C to +40°C" und "Accuracy ±3.5ppm from 
-40°C to +85°C".
DS3231M hat "Timekeeping Accuracy ±5ppm (±0.432 Second/Day) from -45°C 
to +85°C"

Diese Notiz über "±0.432 Second/Day" übernehmen die Chinesen in ihren 
Beschreibungen. D.h. wenn geschrieben über "±0.432 Second/Day", wird 
höchstwahrscheinlich nicht DS3231 sondern DS3231M angeboten.

von AVRli .. (avrli)


Lesenswert?

S. Landolt schrieb:
> Nun ja, dividiert eben (ppm ist 10^-6).

Habe das noch nie so gerechnet, denke aber das genau so nur eine Aussage 
über die Genauigkeit getroffen werden kann. Habe mir eine Tabelle 
gemacht und kann da nun beliebig Uhrzeiten eintragen und bekomme dann 
die ppm Angabe ausgerechnet. Ein paar weitere Werte...

PC (NTP)   DS3231M    ppm
02:18:00   02:18:00   0
11:59:00   11:58:03   -1635
14:34:00   14:32:48   -1630
17:55:00   17:53:28   -1636

Ob die NTP Synchronisation vorher nun geeignet ist weiß ich einfach 
nicht 100%tig, habe aber nichts mit DCF77 im Haus.

Joachim B. schrieb:
> ich hatte ja Beispielcode hier gezeigt, hast du es mal mit dem versucht?

Also ich habe mir das angesehen. Du checkst VOR dem auslesen der 
Temperatur Register ob das BSY Flaf im Status Register gesetzt ist. Nun 
das mache ich indirekt auch, ich frage VOR dem einlesen der Tempregister 
einmal ALLE ab und da habe ich noch nicht einmal eine Meldung erhalten, 
dass das BSY Flag im Status Register gesetzt war.

Mehr kann ich in Richtung "initialisieren" in Deinem Code nicht 
erkennen. Es ist aber eigentlich auch egal, wenn man nicht per Hand 
anschuppst bekommt man eigentlich alle 64 Sek einen neuen Tempwert, 
automatisch zur Abfrage bereit gestellt.

Veit D. schrieb:
> als ich las die MSB und LSB um eine Stelle
> verschoben passen würden. Es gibt doch den Unterschied beim I2C mit der
> 7 oder 8 Bit Adressierung.

Da lehne ich mich mal soweit aus dem Fenster un behaupte das es daran 
nicht liegen kann. Denn das kann für mein Verständnis nur eine 
Einstellmöglichkeit der LIB sein, die das Addressbyte einmal als 8bit 
Wert und einmal als 7bit Wert interpretiert und jeh nach Konfig das Byte 
vor dem makieren von R/W nochmal 1x nach links schiebt.

Wenn es Probleme mit der Bitanzahl beim einlesen und aussenden geben 
sollte, dann würde für mein Verständnis die Uhrzeit und das Datum im BCD 
Format völlig daneben liegen.

Maxim B. schrieb:
> Diese Notiz über "±0.432 Second/Day" übernehmen die Chinesen in ihren
> Beschreibungen.

Das ist alles etwas verwirrend, wer achtet auf so etwas? Ich finde schon 
das sie dann die komplette Chipbezeichnung angeben müssten. Das wäre ja 
wie, wenn man ein Auto kauft und man hat "vergessen" dahinter zu 
schreinen "im Maßstab 1:28" :-D

Aber danke für die Recherche! Hilft mir wirklich weiter.

Veit D. schrieb:
> Und vom TO habe ich auch noch keine Zeile seines Programms
> gesehen. Vielleicht liegst am IC. Vielleicht aber doch nur am Code.
> Was hast du für einen µC?

Das Modul hängt aktuell an einem ATmega2560 mit 4 Leitungen, das ist das 
Arduino Mega Board. Nutze allerdings nur die Hardware! Hänge mit einem 
JTAG am Chip und programmiere mit dem ATMEL Studio 7 in C. Glaube jetzt 
nicht das ich da einen Schaltplan zeichnen muss... ;-)

Beim Code denke ich das man davon ausgehen kann, dass die reine 
Kommunikation schon richtig ist. Denn der Inhalt aller anderen 17 
Register ist ja plausibel und wie my2ct schon schrieb...

my2ct schrieb:
> Um den Wert aus den Temperaturregister grob zu prüfen, kann man auf
> großartige Routinen zur Umrechnung erstmal völlig verzichten.

Und der HEX Dump spricht doch eine klare Sprache.

0x0000 41 39 18 03 24 04 18 00 00 00 00 00 00 00 20 00
0x0010 00 2d 80

Der Inhalt von Register 0x11 und 0x12 ist fragwürdig.


Die anderen Module sollen morgen hier eintreffen...
Grüße an alle, AVRli...

von Gerhard O. (gerhard_)


Lesenswert?

AVRli .. schrieb:
> 0x0000 41 39 18 03 24 04 18 00 00 00 00 00 00 00 20 00
> 0x0010 00 2d 80

Wenn man 0x2d einmal nach rechts schiebt werden es 0x16 oder 24.5 Grad.
Schon komisch, dass wenn man es so macht, immer plausible Temperaturen 
heraus kommen.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Horst S. schrieb:
> Sind das die Module, über deren Chip hier gesprochen wird?

Nein, die hier:
AVRli .. schrieb:
> ds3132_modul.jpg
sehr ähnl. zu https://www.ebay.com/itm/401093092939

von S. Landolt (Gast)


Lesenswert?

> Wenn man 0x2d einmal nach rechts schiebt ...

Das hatten wir gestern bereits diskutiert, ich halte dies für reinen 
Zufall; verschiebt man die Werte vom Anfang, 2f c0, hat man mit 17 e0 im 
zweiten Byte einen ungültigen Wert. Und die um den Faktor 300 zu große 
Gangungenauigkeit ist auch nicht erklärt.
  Wenn ich raten sollte, würde ich sagen, Ausschussware oder zu heiß 
gelötet.

von Wolfgang (Gast)


Lesenswert?

S. Landolt schrieb:
> Wenn ich raten sollte, würde ich sagen, Ausschussware oder zu heiß
> gelötet.

Dafür dann 9,50€ zu verlangen, wäre allerdings schon eine Frechheit.

von S. Landolt (Gast)


Lesenswert?

an Gerhard O. (auch auf die Gefahr hin, für einen Schwätzer gehalten zu 
werden):
Es gibt erstaunliche Zufälle: ich habe in meinem Wecker derzeit 1139 
Liedtitel gespeichert, und ausgerechnet heute morgen wurde ich mit 'Four 
Strong Winds' geweckt (in der Version der Tysons). Sollte ich, wider 
Erwarten, doch noch einmal nach Edmonton kommen, können wir einen Kaffee 
zusammen trinken.

von Gerhard O. (gerhard_)


Lesenswert?

S. Landolt schrieb:
> an Gerhard O. (auch auf die Gefahr hin, für einen Schwätzer
> gehalten zu
> werden):
> Es gibt erstaunliche Zufälle: ich habe in meinem Wecker derzeit 1139
> Liedtitel gespeichert, und ausgerechnet heute morgen wurde ich mit 'Four
> Strong Winds' geweckt (in der Version der Tysons). Sollte ich, wider
> Erwarten, doch noch einmal nach Edmonton kommen, können wir einen Kaffee
> zusammen trinken.

Wusste gar nicht, dass es in D Ian Tyson Fans gibt:-)
Ian & Sylvia hatten schiene Version davon.

Bezüglich Kaffee, klar!

: Bearbeitet durch User
von Gerhard O. (gerhard_)


Lesenswert?

S. Landolt schrieb:
> Das hatten wir gestern bereits diskutiert, ich halte dies für reinen
> Zufall; verschiebt man die Werte vom Anfang, 2f c0, hat man mit 17 e0 im
> zweiten Byte einen ungültigen Wert. Und die um den Faktor 300 zu große
> Gangungenauigkeit ist auch nicht erklärt.
>   Wenn ich raten sollte, würde ich sagen, Ausschussware oder zu heiß
> gelötet.

Wahrscheinlich hast Du recht. Möchte los wissen was da immer in die 
Suppe spuckt. Die leichteste Erklärung ist halt immer noch - schlechter 
Chip. Dass die SW noch Mucken macht ist sehr unwahrscheinlich.

Ohne Vergleich mit einem bekannten guten RTC ist man da auf dem 
Schlauch. Notfalls könnte man noch mit einem DSO die I2C Daten speichern 
um anhand der Bits zu sehen was da tatsächlich über die Leitung kam.

von Wolfgang (Gast)


Lesenswert?

Gerhard O. schrieb:
> Notfalls könnte man noch mit einem DSO die I2C Daten speichern
> um anhand der Bits zu sehen was da tatsächlich über die Leitung kam.

Dann doch lieber mit einem kleinen Logikanalysator bei dem gleich alles 
dekodiert wird (z.B. https://www.ebay.de/itm/181998009301)

von eProfi (Gast)


Lesenswert?

Da bei AVRli auch das Conv-Bit nicht stimmt und er eigenen i2c-Code 
verwendet, vermute ich eher Kommunikations-Probleme.
Stecke die Uhr doch mal in den Kühlschrank und messe die Temperatur.
Dann kann man leichter sehen, ob sie die doppelte Temperatur anzeigt.

Google mal, ob andere User ähnliche Probleme hatten.

von Gerhard O. (gerhard_)


Lesenswert?

Wolfgang schrieb:
> Dann doch lieber mit einem kleinen Logikanalysator bei dem gleich alles
> dekodiert wird (z.B. Ebay-Artikel Nr. 181998009301)

Den habe ich und der dekodiert auch I2C einwandfrei. Für den Preis, eine 
sehr gute Anschaffung.

von Gerhard O. (gerhard_)


Lesenswert?


von Veit D. (devil-elec)


Lesenswert?

Hallo,

wenn du schon einen Arduino hast, warum testest du dann nicht wenigstens 
einmal mit dem Arduino Code? Atmel Studio 7 kann das auch. Weil so 
richtig glaube ich nicht mehr daran das mehrere ICs defekt sind. Kann ja 
immer noch sein das dein geheimer Code fehlerhaft ist.

Das ist jetzt nicht böse gemeint, nur ein ernst gemeinter Rat.

Die Arduino IDE gibts auch als Portable. Nur so als Info.

Den Logic Nachbau gibts mittlerweile auch als 16 Kanal Version mit 
100MHz. Die bauen immer nur das nach was es original nicht mehr zu 
kaufen gibt.

: Bearbeitet durch User
von Gerhard O. (gerhard_)


Angehängte Dateien:

Lesenswert?

Ich bestückte heute nach 9 Jahren die gezeigte Bord mit dem DS3232M 
drauf im SO-8 Gehäuse. Beachtenswert ist, daß der DS3232M für nur 
maximal 4.5V zugelassen ist. Der DS3231M dagegen ist für bis 5.5V 
geeignet. Um dieser Notwendigkeit gerecht zu werden, ist auf der Bord 
eine MCP1700 Spannungsregler und ein MOSFET I2C Pegelwandler nach einem 
NXP Vorschlag um die Bord auch in 5V Systemen betreiben zu können. Der 
Spannungsregler läßt sich mit einem Jumper trennen um auch mit 3.3V uC 
verwendbar zu sein. Der RTC IC ist ein Sample von Maxim.

Hier sind die bisherigen Einschaltmeßwerte:

RTC RAM dump:
13 48 18 00 23 04 18 00 00 00 00 00 00 00 00 00
00 13 C0

DS323x REG dump:
CTL: 00
STA: 00
AGO: 00
TMSB:13
TLSB:C0
DEGC:19.75

Der Stromverbrauch am Batterieanschluß ist 1.5uA.
Bei inaktiven I2C verbraucht die Bord ca. 200uA bei 5V.

Der auch angeschlossene TMP101 zeigt 19.2 Grad an. Diesbezüglich ist 
also alles in Ordnung.

Über die Ganggenauigkeit kann man natürlich noch nichts aussagekräftiges 
berichten.

Nachtrag:

Bei Digikey steht, daß der DS3232MZ für neue Designs nicht verwendet 
werden sollte.

: Bearbeitet durch User
von AVRli .. (avrli)


Lesenswert?

Hier folgen meine Ergebnisse, doch zuvor möchte ich noch auf folgendes 
eingehen...

Gerhard O. schrieb:
> Hier ist ein interessanter Link über die DS3231(M) RTCs:

Hatte ich mir gestern Nacht noch durchgelesen, war wirklich sehr 
interessant!


Gerhard O. schrieb:
> Beachtenswert ist, daß der DS3232M für nur
> maximal 4.5V zugelassen ist.

Cool das Dich das Thema dazu animiert hat, die eingestaubten Bausatz zu 
aktivieren. :-D

Das mit der Stromversorgung ist aber ein ganz wichtiger Punkt! Mich 
würde es nicht wundern, wenn das hier der Killer war der Chips war oder 
ist und das auch erklärt warum ich davon gleich 2 oder mehr hätte. Denn 
ich betreibe das Modul, wie angegeben, dierekt an 5V.

Heute sind nun die, für mich neuen, Module eingetroffen und auf denen 
sind tatsächlich DS3231SN verbaut!

Es folgt direkt mal ein HEX-Dump von dem...

TWI OK

0x00 50 03 00 01 01 01 00 00 00 00 00 00 00 00 1c 88
0x10 00 1e 80

01 122
01/01/00 00:03:50
946685030 (unix)

Das "Control Register" hat den Wert 0x1c
(8.192kHz out / INT Alarm.)
Das "Status Register"  hat den Wert 0x88
(Oszillator was stoppend / 32kHz Out.)

Das passt soweit! :-)

Nun zur Temperatur!
MSB = 0x1e
LSB = 0x80

ergibt 0x7a = 122 = 30,5°C

Das trifft die Sache in soweit deutlich besser, weil ich das Modul ja 
kurz vorher noch in den Händen hatte.

Eine Vergleichsmessung etwas später mit einem Infrarotthermometer, wie 
genau das nun wieder ist (?) ergab folgende Werte:
IR-Thermometer = 27,3°C / DS3231SN = 25,75°C

Dann war da ja noch das weglaufen der Uhrzeit. Das Modul läuft hier nun 
5h und die Genauigkeit liegt im Vergleich zur Internetzeit bei 0ppm!

Also unterm Strich wirklich sehr gute Werte und die anderen, ersten 
Module, gehen definitiv zurück. ;-)

Ich bedanke mich bei ALLEN und habe bei der Aktion nun gelernt, das zwar 
oft der Esel vor der Kiste der Fehler ist, manchmal aber nicht.

Grüße AVRli...

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

> ... aber ein ganz wichtiger Punkt! Mich würde es
> nicht wundern, wenn das hier der Killer war ...
Das ist ein Missverständnis, Gerhard O. sprach vom DS3232M, Sie jedoch 
haben den DS3231M, und dieser verträgt 5.5 V. Also getrost zurückgeben.

von Gerhard O. (gerhard_)


Lesenswert?

AVRli .. schrieb:
> Das trifft die Sache in soweit deutlich besser, weil ich das Modul ja
> kurz vorher noch in den Händen hatte.
Wenn ich die Temperatur realistisch messen möchte stelle ich einen 
kleinen, langsamen 60mm Lüfter in der Nähe auf, so dass sich kein 
neuerlicher Wärmstau ergibt. Speziell beim Vergleich von zwei Sensoren 
ist das nützlich sicher zustellen, dass beide Sensoren gleichmäßig die 
Umgebungstemperatur aufnehmen.

>
> Eine Vergleichsmessung etwas später mit einem Infrarotthermometer, wie
> genau das nun wieder ist (?) ergab folgende Werte:
> IR-Thermometer = 27,3°C / DS3231SN = 25,75°C
Ja, das ist wesentlich besser.
>
> Dann war da ja noch das weglaufen der Uhrzeit. Das Modul läuft hier nun
> 5h und die Genauigkeit liegt im Vergleich zur Internetzeit bei 0ppm!
Dann waren tatsächlich die ersten Bords fragwürdig.

Wenn ich dann heimkomme werde ich den neu gebauten DS3232M RTC mit Nist 
vergleichen. Das wären dann 24 Stunden Laufzeit.

Ich glaube nicht, dass Deine DS3231M mit Überspannung betrieben wurden. 
Die dürfen ja bis 5.5V betrieben werden. Nur der DS3232M verträgt 
weniger.

Bin überrascht wie schnell die Module ankamen. Bei mir dauert das oft 
Wochen...

Gruss,
Gerhard

von AVRli .. (avrli)


Lesenswert?

S. Landolt schrieb:
> Das ist ein Missverständnis, Gerhard O. sprach vom DS3232M, Sie jedoch
> haben den DS3231M, und dieser verträgt 5.5 V. Also getrost zurückgeben.

Zu schnell gelesen, Mist... :-(
Danke für den Hinweis, ich habe übrigens nichts gegen ein "Du". ;-)

Gerhard O. schrieb:
> Bin überrascht wie schnell die Module ankamen. Bei mir dauert das oft
> Wochen...

Na ich habe sie in 38678 (Clausthal-Zellerfeld) am Sonntag Abend 
bestellt. Am Montag wurde es bearbeitet und innerhalb Deutschlands 
geht's zum Glück noch etwas schneller, als aus China... ;-)

von Gerhard O. (gerhard_)


Lesenswert?

AVRli .. schrieb:
> Na ich habe sie in 38678 (Clausthal-Zellerfeld) am Sonntag Abend
> bestellt. Am Montag wurde es bearbeitet und innerhalb Deutschlands
> geht's zum Glück noch etwas schneller, als aus China... ;-)

Ist es das?
https://eckstein-shop.de/RTC-DS3231-AT24C32-Memory-Real-Time-Clock-IIC-Modul

von AVRli .. (avrli)


Lesenswert?

In der Bucht... 272620584711...

Ist wohl der gleiche Händler ;-)
Sehe gerade das bei dem bei Dir gefundenen die Batterie deutlich größer 
ist. :-(
Hoffentlich macht die kleine CR1220 hier auch ein paar Jahre!

: Bearbeitet durch User
von Gerhard O. (gerhard_)


Lesenswert?

AVRli .. schrieb:
> In der Bucht... 272620584711...
>
> Ist wohl der gleiche Händler ;-)
> Sehe gerade das bei dem bei Dir gefundenen die Batterie deutlich größer
> ist. :-(
> Hoffentlich macht die kleine CR1220 hier auch ein paar Jahre!

Der Stromverbrauch ist bei 3.6V zwischen 0.84-3uA. Eine CR1220 hat 
45mAh. Da sollte auch die kleine CR1220 mindestens 2 Jahre halten

Die Link geht nicht:
In der Bucht... 272620584711...

: Bearbeitet durch User
von AVRli .. (avrli)


Lesenswert?

Gerhard O. schrieb:
> Die Link geht nicht:

Bitte bei eBay in die Suche "272620584711" eingeben, direkt verlinken 
mache ich nicht mehr, da gab's mal Stress...

: Bearbeitet durch User
von Gerhard O. (gerhard_)


Lesenswert?

AVRli .. schrieb:
> Gerhard O. schrieb:
>> Die Link geht nicht:
>
> Bitte bei eBay in die Suche "272620584711" eingeben, direkt verlinken
> mache ich nicht mehr, da gab's mal Stress...

Google findet es. Die Bucht findet mit der Nummer nichts.
Dein Modul hat den EEPROM IC nicht und ist deswegen kleiner.

von AVRli .. (avrli)


Lesenswert?

Gerhard O. schrieb:
> Dein Modul hat den EEPROM IC nicht und ist deswegen kleiner.

Welcher Vorteil bringt dieser kleine EEPROM mit sich?
Was speichert man darin, in Bezug auf den RTC Chip?

Im Moment denke ich, dass ich den nie nutzen würde. Die Batterie ist 
das, was ich schon gerne auch "größer" gehabt hätte. Nun, egal... dafür 
ist der Spuk mit dem Modul nun vorbei. ;-)

von Maxim B. (max182)


Lesenswert?

AVRli .. schrieb:
> Bitte bei eBay in die Suche "272620584711" eingeben,

Aber ich kapiere nicht: wozu braucht man RTC ohne Interruptausgang?

von Gerhard O. (gerhard_)


Lesenswert?

AVRli .. schrieb:
> Gerhard O. schrieb:
>> Dein Modul hat den EEPROM IC nicht und ist deswegen kleiner.
>
> Welcher Vorteil bringt dieser kleine EEPROM mit sich?
> Was speichert man darin, in Bezug auf den RTC Chip?
>
> Im Moment denke ich, dass ich den nie nutzen würde. Die Batterie ist
> das, was ich schon gerne auch "größer" gehabt hätte. Nun, egal... dafür
> ist der Spuk mit dem Modul nun vorbei. ;-)

Da ist ein 4kB AT24C32 EEPROM drauf. Wenn man viel abspeichern muss, 
kann das nützlich sein. Ich habe das EEPROM auf RTC Modul schon getestet 
und es funktioniert. Das gepostete Programm für den Pro-Mini kann darauf 
zum Test zugreifen solange A0-A2 unbeschaltetet hoch liegen. Ein 
Kommando beschreibt und liest einen 256 Byte Abschnitt.

Man kann ja eine größere Batterie anbringen wenn es notwendig sein 
sollte. Beim selbstgebauten Modul habe ich dafür eine Umschaltung und 
Stecker dran.
Ich werde allerdings das Modul nur mit externer Batterie betreiben.

Ansonsten ist es auch praktisch mit dem DS3232SN zu arbeiten weil man da 
noch 236 Bytes an NVRAM hat. Kurioserweise hat Maxim beim DS3232M den 
RAM verpfuscht. Der Errata nach soll soll das Beschreiben ganzzahliger 
Adressen angeblich eine Korruption des RTC Zählers zur Folge haben. Der 
Work Around ist auch nicht ideal.

von Maxim B. (max182)


Lesenswert?

Braucht man wirklich NVRAM, dann kann man 23LCV1024 nehmen und von 
gleicher Batterie speisen.

von Gerhard O. (gerhard_)


Lesenswert?

Habe gerade die DS3232M Zeitanzeige verglichen. Ist nach fast 24 Stunden 
immer noch gleich mit dem Vergleichsnormal. Scheint also soweit alles in 
Ordnung zu sein. Bin gespannt wie groß die einmonatige Gangabweichung 
sein wird.

Das interessante an der MEMS Version ist, daß die Alterungsrate im 
Vergleich zu einem Quarz scheinbar kein Thema ist. Nur die Kurzzeit 
Aussprünge sind stark vertreten. Aber das könnte sich langfristig 
ausgleichen.

von Gerhard O. (gerhard_)


Lesenswert?

Maxim B. schrieb:
> Braucht man wirklich NVRAM, dann kann man 23LCV1024 nehmen und von
> gleicher Batterie speisen.

Ist ein interessantes Teil. Danke für den Hinweis.

von AVRli .. (avrli)


Lesenswert?

Maxim B. schrieb:
> Aber ich kapiere nicht: wozu braucht man RTC ohne Interruptausgang?

Einfach nur als Uhr/Datum für den µC wenn der startet oder was ins Log 
schreibt. Will ja nicht jedes mal nach dem Einschalten, erstmal die Uhr 
stellen. ;.)

Gerhard O. schrieb:
> Da ist ein 4kB AT24C32 EEPROM drauf.

Ahh, OK - habe bei dem Projekt eine 2GB SD Karte mit an Board. Also 
komme ich mit der kleinen Version, ohne dem TWI EEPROM, gut aus. ;-)

Super, dann freue ich mich das sich das insoweit aufgeklärt hat, dass es 
an dem Chip lag und ich nun mit dem Projekt weiter machen kann.

von Maxim B. (max182)


Lesenswert?

AVRli .. schrieb:
> Einfach nur als Uhr/Datum für den µC wenn der startet oder was ins Log
> schreibt.

Int von RTC könnte für Systemtakt benutzt werden und somit interne Timer 
für andere Zwecke befreien. 1024 Hz paßt sehr gut dafür. Auch nützlich, 
daß diese Frequenz deutlich genauer ist, als Quarz von AVR.

von AVRli .. (avrli)


Lesenswert?

Gut das ist ein Argument!
Ich habe es nun so gemacht das ich mir beim Start einmal die Zeit aus 
dem RTC Chip hole und dann mit dem auf dem ATmega erzeugten 1s Takt 
(abgeleitet von 16 MHz Quarz und Timer Interrupt) die Zeit für die 
Anzeige weiter laufen lasse. Die Genauigkeit geht dann natürlich 
verloren, umso länger man nicht erneut mit der RTC synchronisiert.

Man könnte nun auch festlegen, synchronisiere dann 1x in 60 Sekunden. 
Das nimmt ja auch nicht viel Zeit in Anspruch aber ich glaube aus reinem 
Interesse schau ich mir den Vorschlag auch noch einmal an.

Habe heute dann nochmal Module bestellt, welche dieses Signal auf PINs 
raus führt. Mal sehen wie sich die sonst noch so verhalten...

von Gerhard O. (gerhard_)


Lesenswert?

Falls noch von Interesse:

Ich habe nun mittlerweile das gezeigte selbstgebaute DS3232M Modul seit 
über einer Woche bei Zimmertemperatur in ständigen Betrieb und es zeigte 
sich bis jetzt noch keine bemerkbare Abweichung mit dem 
Vergleichsnormal. Das ist auf jeden Fall ermutigend.

von AVRli .. (avrli)


Lesenswert?

Gerhard O. schrieb:
> Falls noch von Interesse:

Ja klar! Dann sieht das mit Deinen Modulen ganz gut aus!
In der Zwischenzeit sind hier auch noch Module eingetroffen, welche die 
PIN's nach draußen führen, wo man den INT und das CLK Signal zum µC 
führen kann. Da ich es angekündigt hatte, hier die Ergebnisse der 
zweiten, "neuen" Module... verbaut sind darauf auch: DS3231SN (!)

0x00 12 58 07 05 03 05 18 00 04 01 20 00 00 00 1c 08
0x10 00 1a 40

2625
03/05/18 07:58:12
1525334292 (unix)

Uhrzeit läuft seit mehreren Tagen auf die Sekunde genau und die 
Temperaturwerte (26,25 °C) sind auch plausibel.

Das Geld von den DS3231M Module habe ich zurück, die Module darf  ich 
nun entsorgen.. ;-)

Grüße AVRli...

von Modul (Gast)


Lesenswert?

AVRli .. schrieb:
> In der Zwischenzeit sind hier auch noch Module eingetroffen

Welche hast du genommen?

von AVRli .. (avrli)


Lesenswert?

Na einen Händler hier zu nennen ist nicht fair... schau Dich mal in der 
Bucht um. Es ist ein Modul mit einer CR2032 Backup-Batterie, 6 Pins im 
2,54mm Raster und eben dem DS3231SN. Auf dem Foto war die Bezeichnung 
leider nicht zu erkennen... :-(

von Gerhard O. (gerhard_)


Lesenswert?

AVRli .. schrieb:
> Na einen Händler hier zu nennen ist nicht fair... schau Dich mal
> in der
> Bucht um. Es ist ein Modul mit einer CR2032 Backup-Batterie, 6 Pins im
> 2,54mm Raster und eben dem DS3231SN. Auf dem Foto war die Bezeichnung
> leider nicht zu erkennen... :-(

Auf den in Frage kommenden RTC Modulen steht die Modellnummer SX-42 
drauf.

Ich habe mir übrigens einige LIR2032 aufladbare Zellen aus den USA 
schicken lassen. Es interessiert mich wie haltbar diese Art ist.

Ich vermute, daß die einfache Ladeschaltung mit R+Diode, wie man sie auf 
den genannten RTC Modulen findet, nicht unbedingt ideal ist. Da muß ich 
mich erst klug machen um solche aufladbare Zellen richtig anzuwenden.

Hier ein Datenblatt:

https://www.powerstream.com/p/Lir2032.pdf

Nachtrag: nach etwas Recherche stellte es sich heraus, daß man besser 
die Ladeschaltung entfernen und mit nicht aufladbaren Zellen arbeiten 
sollte. Die LIR2032 sind für andauernde Ladung nicht wirklich geeignet 
und haben abgesehen davon nur ein Bruchteil der Kapazität einer CR2032. 
Das dürfte diese Frage ausreichend beantworten.

: Bearbeitet durch User
von 900ss (900ss)


Lesenswert?

AVRli .. schrieb:
> Na einen Händler hier zu nennen ist nicht fair...

?
Damit ein Händler Geld verdient, der "Müll" verkauft?

: Bearbeitet durch User
von AVRli .. (avrli)


Lesenswert?

900ss D. schrieb:
> Damit ein Händler Geld verdient, der "Müll" verkauft?

Da ich mein Geld komplett zurück bekommen habe, stimmt Deine Aussage 
einfach nicht.

Weiter kann ich auch nicht garantieren, dass der letzte Händler nur 
diese mit dem DS3231SN verkauft. Deshalb halte ich mich mit einer 
konkreten Empfehlung zurück.

Die werden sicher alle in China gefertigt, kauft bei einem Händler in 
Deutschland. Da könnt ihr Euch, bei Problemen, auf das Fernabsatzgesetz 
berufen.

von 900ss (900ss)


Lesenswert?

Gerhard O. schrieb:
> Auf den in Frage kommenden RTC Modulen steht die Modellnummer SX-42
> drauf.

Danke Gerhard.

von 900ss (900ss)


Lesenswert?

AVRli .. schrieb:
> Deshalb halte ich mich mit einer konkreten Empfehlung zurück

Ich hatte überhaupt nicht nach einem Händler gefragt. Und auch nicht 
nach einer Garantie.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Gerhard O. schrieb:
> Nachtrag: nach etwas Recherche stellte es sich heraus, daß man besser
> die Ladeschaltung entfernen und mit nicht aufladbaren Zellen arbeiten
> sollte. Die LIR2032 sind für andauernde Ladung nicht wirklich geeignet
> und haben abgesehen davon nur ein Bruchteil der Kapazität einer CR2032.
> Das dürfte diese Frage ausreichend beantworten.

andere Quellen nennen für die LiR 53mAh für eine CR um 230mAh

Bis jetzt laufen meine LiR über 3 Jahre, natürlich nicht unter 
Dauerspannung dort nur in meinen Uhren 3 Jahre ohne Probleme.

Für Dauerspannung wäre ja eine CR oder LiR auch nicht nötig, aber man 
zieht schon mal den stecker beim Staubwischen oder bei Netzausfall dafür 
reicht die kleinere LiR und wenn sie dabei Kapazität verliert, wen 
juckst?
Man könnte auch für eine Uhr dauernd am Netz über 0,1F Supercap 
nachdenken.

Die CR ohne Ladeschaltung sehe ich eher für mobile Geräte die oft nicht 
am Strom sind.

Ich hatte bei Bestellung meiner RTC Module mit 2032 immer auf incluse 
LiR geachtet, entweder der Händler schreibt es rein oder wenn nicht aber 
abgebildet frage ich nach.

Früher waren die immer im Modul eingesetzt, durch neue Postvorschriften 
kommen die immer extra eingetütet.

Jedenfalls wer Module ohne LiR bekommt muss hier in D für die LiR ein 
vielfaches zahlen was kompette Module kosten, die CR bekommt man ja im 
Dutzend billig überall nachgeworfen.

von S. Landolt (Gast)


Lesenswert?

> über 0,1F Supercap nachdenken

Die Dinger altern leider auch ziemlich, die von mir eingesetzten 0.22 F 
(Panasonic) zeigen nach etwa 5..7 Jahren nur noch die halbe Kapazität. 
(zum Staubwischen wird's aber wohl immer reichen)

von Joachim B. (jar)


Lesenswert?

S. Landolt schrieb:
>> über 0,1F Supercap nachdenken
>
> Die Dinger altern leider auch ziemlich, die von mir eingesetzten 0.22 F
> (Panasonic) zeigen nach etwa 5..7 Jahren nur noch die halbe Kapazität.
> (zum Staubwischen wird's aber wohl immer reichen)

auch das, meine erste Verwendung im FotoTimer ist nie so alt geworden, 
Designfehler von mir, ich vergaß das ein AVR im deep sleep zwar keinen 
nennenswerte Stromaufnahme hat, aber der DC/DC switcher buck/boost immer 
die Akkus leernuckelt, zu einer Neuentwicklung hatte ich dann keine Lust 
mehr, Hobbyaufgabe, Fotografie.

von Gerhard O. (gerhard_)


Lesenswert?

Habe von einem Bekannten zwei ähnliche RTCs mit DS3231M zum Testen 
bekommen. Diese Bords verhalten sich mit denen von AVRli recht ähnlich 
und gehen pro Tag um 3 Minuten nach. Die Temperaturanzeige gibt fast 40 
Grad aus.

DS323x System dump:
CTL: 00
STA: 00
AGO: 00
TMSB:27
TLSB:80
DEGC:39.50 (Ist auch viel zu hoch. Raumtemperatur ist 20.5 Grad)

Ein Referenz Modul, von mir selbst gebaut mit einem DS3232M drauf, geht 
sehr genau und die Temperaturanzeige ist innerhalb 0.5 Grad von einem 
TMP101 "Referenzthermometer":-)

Es scheinen also einige zwieträchtige (Ausschuss) DS3231M in der Welt 
herum zu schwirren.

Die Beobachtungen von AVRli sind auf jeden Fall von Bedeutung und 
realistisch.

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

Wobei mich jetzt doch interessieren würde, was der Bekannte mit zwei 
"Echtzeituhren" anfängt, die pro Tag 3 Minuten nachgehen - also derart 
gemütlich habe ich Kanada nicht in Erinnerung.

von Gerhard O. (gerhard_)


Lesenswert?

S. Landolt schrieb:
> also derart
> ...gemütlich habe ich Kanada nicht in Erinnerung.

Naja, dort wo die Wölfe sich guten Tag sagen, macht es bestimmt nichts 
aus:-)

von Bernhard S. (b_spitzer)


Lesenswert?

Das Errata-Sheet zum DS3231M enthält einen Hinweis zum CONV-Bit! Schon 
gesehen??
https://datasheets.maximintegrated.com/en/errata/DS3231MA1.pdf

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.