RTC DS3231 - Temperatur Daten?

OP #5397491
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...
OP #5397614
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. :-(
#5397634
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
}
#5397643
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
}
OP #5397672
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...
#5397728
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.
#5397778
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
}
Gast #5397791
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?
OP #5397837
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...
Beitrag #5398037 wurde von einem Moderator gelöscht.
#5398043
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.
Angehängte Dateien:
#5398057
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.
#5398088
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.
Angehängte Dateien:
OP #5398198
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...
Gast #5398246
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?
Gast #5398275
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.
Gast #5398283
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.
OP #5398348
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.
#5398434
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();
#5398437
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.
#5398477
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
Gast #5398498
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.
OP #5398541
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.
Gast #5398641
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.
#5398651
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 :)
Gast #5398666
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)
Gast #5398673
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)
#5398677
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)
OP #5398692
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...
Gast #5398698
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")
#5398732
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
#5398741
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
#5398774
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.
#5398797
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.
Gast #5398828
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.
#5398867
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.
OP #5398936
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. ;-)
#5398996
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)
Angehängte Dateien:
OP #5399065
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.
Angehängte Dateien:
OP #5399250
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...
#5399264
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...
#5399266
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
Gast #5399317
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.
OP #5399425
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...
#5399436
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
#5399515
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".
#5399630
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.
#5399650
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.
OP #5400036
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...
Gast #5400084
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.
Gast #5400101
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.
#5400212
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!
#5400225
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.
Gast #5400230
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.
#5400343
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.
#5400432
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.
Angehängte Dateien:
OP #5401346
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...
#5401369
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
OP #5401380
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... ;-)
#5401428
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...
OP #5401489
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. ;-)
#5401505
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.
#5401586
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.
OP #5401592
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.
OP #5401837
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...
OP #5410708
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...
#5411621
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.
OP #5411817
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.
#5411898
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.
Gast #5411906
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)
#5411916
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.
#5424499
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.
#8027285
Lesenswert?

Das Errata-pdf ist nun hier zu finden: https://www.analog.com/media/en/technical-documentation/data-sheets/ds3231ma1.pdf

Aufpassen bei negativen Temperaturen / Vorzeichen. Die adafruit-lib gibt Werte über 200°C aus: https://github.com/adafruit/RTClib/blob/master/src/RTC_DS3231.cpp float RTC_DS3231::getTemperature() { uint8_t buffer[2] = {DS3231_TEMPERATUREREG, 0}; i2c_dev->write_then_read(buffer, 1, buffer, 2); return (float)buffer[0] + (buffer[1] >> 6) * 0.25f; }

Korrekt muss es heißen: return (int8_t)buffer[0] + (buffer[1] >> 6) * 0.25; oder return (char)buffer[0] + 0.00390625 * buffer[1]); //mul ist schneller oder return (char)buffer[0] + buffer[1]) / 256.0; Prüfe, ob (char) bei 16/32-bit-µC funktioniert, char kann auch andere Längen als 8 Bits haben.

Oder man verwendet kein Array, sondern zwei Variablen, msb muss signed und lsb unsigned sein. return temp_msb + 0.00390625*temp_lsb;

Hier ein paar Beispielwerte: /* 1112 >>6 SignExt Dec

  • 7FC0 01FF 01FF +127.75
  • 7F80 01FE 01FE +127.50
  • 7F40 01FD 01FD +127.25
  • 0100 0004 0004 +1.00
  • 00C0 0003 0003 +0.75
  • 0080 0002 0002 +0.50
  • 0040 0001 0001 +0.25
  • 0000 0000 0000 +0.00
  • FFC0 03FF FFFF -0.25
  • FF80 03FE FFFE -0.50
  • FF40 03FD FFFD -0.75
  • FF00 03FC FFFC -1.00
  • 80C0 0203 FE03 -127.25
  • 8080 0202 FE02 -127.50
  • 8040 0201 FE01 -127.75
  • 8000 0200 FE00 -128.00 */ Für die zwei Nachkomma-Bits reicht auch eine Nachkomma-Stelle (0, 2/3, 5, 7/8).
: Bearbeitet durch User
#8027335
Lesenswert?

Rainer W. schrieb:

Solche ominösen magischen Zahlen haben im Quelltext nichts zu suchen

256.0 ist weshalb keine magische Zahl? Weil es zufällig eine 2-er Potenz ist?

Eine Division, wie von dir vorgeschlagenen, braucht je nach HW-Unterstützung länger als eine Multiplikation. Und grundsätzlich ist float eh schon langsam.

Ein Kommentar "xxx / 256.0" wäre angemessen. Aber die "magische Zahl" bleibt auch damit.

: Bearbeitet durch User
#8027342
Lesenswert?

Ich weiß nicht, wieviel du für die Module bezahlt hast, aber der nackte Chip DS3231M kostet bei seriösen Händlern wie z.B. Mouser oder DigiKey selbst in 1000er Stückzahl noch 7,20€ / Stück.

Wenn das ganze Modul jetzt für unter 10,-€ übern Tresen geht, ist das ja schon praktisch die Garantie, daß kein Originalchip verbaut sein kann, sondern irgendeine Fälschung.

#8027343
Lesenswert?

Thorsten S. schrieb:

Ich weiß nicht, wieviel du für die Module bezahlt hast, aber der nackte Chip DS3231M kostet bei seriösen Händlern wie z.B. Mouser oder DigiKey selbst in 1000er Stückzahl noch 7,20€ / Stück.

Wenn das ganze Modul jetzt für unter 10,-€ übern Tresen geht, ist das ja schon praktisch die Garantie, daß kein Originalchip verbaut sein kann, sondern irgendeine Fälschung.

Wen auch immer du ansprichst: Vor acht Jahren könnte die Preise noch anders gewesen sein.

900ss schrieb:

Ein Kommentar "xxx / 256.0" wäre angemessen. Aber die "magische Zahl" bleibt auch damit.

Man könnte natürlich auch ein Makro mit einem aussagekräfigen Namen definieren. Oder gleich die Berechnung als Makro definieren.

#8027361
Lesenswert?

900ss schrieb:

Rainer W. schrieb:

Solche ominösen magischen Zahlen haben im Quelltext nichts zu suchen

256.0 ist weshalb keine magische Zahl? Weil es zufällig eine 2-er Potenz ist?

Nun ja, du kannst dem Ding gerne auch noch einen Namen geben. Irgendwann muss man bei so hardwarenaher Programmierung allerdings so oder so Farbe bekennen. Du kannst natürlich gerne noch explizit eine allgemeine Funktion dazwischen schieben, die Fixkommazahlen in float umwandelt oder besser, wie schon vorgeschlagen, ein passendes Macro verwenden. Das ändert aber nichts daran, dass die Zahl 256.0 wenigstens nicht "endlose" Nachkommastellen besitzt. Der Zusammenhang zwischen einer ganzzahligen Festkommadarstellung mit Gewichtung 2^-8 durch Verwendung des Faktors "1/256.0" ist jedenfalls erheblich einfacher erfassbar als bei einer Zahl mit sechs gültigen Stellen, die erstmal keinen offensichtlichen Bezug zu einer 2er-Potenz erkennen lässt.

900ss schrieb:

Eine Division, wie von dir vorgeschlagenen, braucht je nach HW-Unterstützung länger als eine Multiplikation. Und grundsätzlich ist float eh schon langsam.

Wie oft willst du denn die Daten bei der gegebenen Meßrate von 1/64s anzeigen? Für alle andere Zwecke ist das Festkommaformat bei Temperaturwerten doch bestens, wenn du schon über Resourcen diskutierst.

: Bearbeitet durch User

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren