DS3231 bloccato

Ho un DS3231 nuovo, appena tolto dal suo involucro antistatico.
Ci carico lo sketch che uso su un'altro RTC simile ma mi visualizza sempre sul monitor seriale dei dati incomprensibili tipo:

165/165/20165  45:85:85

Lo sketch è questo:

/********************************
* DS3231_R_W.ini 
* 20 marzo 2019
* Arduino NANO
* Legge e scrive data e ora  
* Derivato da DS3231_R_Mod.ini
*********************************/
#include <Wire.h>
#define DS3231_I2C_ID 0x68

struct{
  byte Second = 00;
  byte Minute = 4;
  byte Hour = 18;
  byte W_day = 2;
  byte M_day = 22;
  byte Month = 3;
  byte Year = 2021;
} now;

void setup() {
  Serial.begin(57600);
  Wire.begin();
  // Imposta l'orario
  Wire.beginTransmission(DS3231_I2C_ID);
  Wire.write(0x0);  // punta al registro 0
  Wire.write(0x0);  // azzera i secondi
  Wire.write(bin2BCD(now.Minute));
  Wire.write(bin2BCD(now.Hour));
  Wire.endTransmission();

  // Imposta la data
  Wire.beginTransmission(DS3231_I2C_ID);
  Wire.write(0x3);  // punta al registro 3
  Wire.write(now.W_day);
  Wire.write(bin2BCD(now.M_day));
  Wire.write(bin2BCD(now.Month));
  Wire.write(bin2BCD(now.Year));
  Wire.endTransmission();
  }

void loop() {
  readDate();
  delay(5000);
  }

void readDate() {
  Wire.beginTransmission(DS3231_I2C_ID);
  Wire.write(0x0);  
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ID, 7);  // get 7 bytes

  byte Second = bcd2dec(Wire.read() & 0b1111111);
  byte Minute = bcd2dec(Wire.read() & 0b1111111);
  byte Hour = bcd2dec(Wire.read() & 0b00111111);
  byte WeekDay = bcd2dec(Wire.read());  // 1=Domenica
  byte Day = bcd2dec(Wire.read());
  byte Month = bcd2dec(Wire.read());
  byte Year = bcd2dec(Wire.read());

  Serial.print(Day);
  Serial.print("/");
  Serial.print(Month);
  Serial.print("/20");
  Serial.print(Year);
  Serial.print("  ");
  Serial.print(Hour);
  Serial.print(":");
  Serial.print(Minute);
  Serial.print(":");
  if (Second < 10) Serial.print("0");
  Serial.println(Second);
  }

// Convert binary coded decimal (BCD) to normal decimal numbers
byte bcd2dec(byte val) {
  return ((val/16*10) + (val%16));
  }

 byte bin2BCD(byte n){
  return ((n / 10) << 4) | (n % 10);
  }

L'altro modulino dove è installato questo sketch funziona regolarmente da un paio di anni.
Mi sono dimenticato qualche reset, qualche altro passaggio di configurazione.
Anche usando un arduino Uno e adattando i pin SCL e SDA non cambia niente.
Saluti

LelloGi

Mmmm ... ma se colleghi questo nuovo modulino al vecchio sistema funziona?

Perché potrebbe essere ...

  1. questo nuovo NON include le resistenze di pull-up e le devi aggiungere esternamente

  2. questo nuovo sia semplicemente guasto e non funzionante

Quello che leggi è quello che si legge quando non ci sono dati validi sul bus I2C ... ::slight_smile:

Guglielmo

gpb01:
Mmmm ... ma se colleghi questo nuovo modulino al vecchio sistema funziona?

Perché potrebbe essere ...

  1. questo nuovo NON include le resistenze di pull-up e le devi aggiungere esternamente

  2. questo nuovo sia semplicemente guasto e non funzionante

Ho notato che non tiene in memoria la nuova data che imposto.
Devo sostituire la batteria.
Il vecchio modulino funziona senza resistori sul bus i2C.
Ho dato una occhiata allo schema del modulino dove si vedono 2 resistori di4,7k sul bus i2C.
Se con la batteria nuova non va allora è guasto.
Grazie dei consigli.
Saluti
Lello

LelloGi:
Ho notato che non tiene in memoria la nuova data che imposto.

Se la batteria è scarica o la batteria è assente, ci sono comunque dei problemi ...
... il datasheet indica chiaramente, in caso di assenza batteria, di connettere il pin VBAT a GND.

Guglielmo

Sostituita la batteria con una nuova CR2032, il risultato non cambia.
Installato lo sketch "SetSerial" con la sua libreria, inserisco la data di oggi e l'ora corrente ma:

  1. nel Monitor Seriale mi dice subito RTC sinc Fail.
    2)* inoltre *non memorizza la data e l'ora che ho impostato.
    Quindi devo convincermi che il modulino è guasto, come aveva previsto rpb01.
    Saluti

Lello

LelloGi:
... Quindi devo convincermi che il modulino è guasto, come aveva previsto gpb01.

... purtroppo, con quei modulini a basso costo (se parliamo dei classici modulini con batteria e AT24C32), ogni tanto capita. Io mi sono fatto un programmino di test che verifica sia le funzionalità di base del DS3231 che il funzionamento della EEPROM e, quando li ricevo ... passo un po' di tempo a provarli tutti ... :confused:

Guglielmo

gpb01:
Io mi sono fatto un programmino di test che verifica sia le funzionalità di base del DS3231 che il funzionamento della EEPROM

Guglielmo

Devo decidermi a farlo anche io. :wink:
LelloGi

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.