Go Down

Topic: DS3231print ora non corretta (Read 218 times) previous topic - next topic

LelloGi

Sto usando lo sketch seguente che usa un Arduino Nano e un RTC DS3231.
Mi serve stampare e gestire la data e l'ora con minuti e secondi.
Da monitor seriale la stampa è corretta eccetto l'ora che mi stampa un numero superiore alle 24.
Per esempio alle 22:58:00, mi stampa 30: 58:00.
A me servirebbe  invece la stampa dell'ora da 00 a 24.

Code: [Select]
/* --------  ! --------
* 27 gennaio 2019
* Arduino NANO
* SDA - A4, SCL - A5
* LelloGi
*-----------------------------/

#include <Wire.h>
#include <DS3231.h>
#define DS3231_I2C_ID 0x68

void setup() {
  Serial.begin(9600);
  Wire.begin();
  }

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() & 0x3F);
  byte WeekDay = bcd2dec(Wire.read());  // 1=Sunday
  byte Day = bcd2dec(Wire.read());
  byte Month = bcd2dec(Wire.read());
  byte Year = bcd2dec(Wire.read());

  Serial.print(Month);
  Serial.print("/");
  Serial.print(Day);
  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
byte bcd2dec(byte val) {
  return ((val/16*10) + (val%16));
  }



Saluti



gpb01

#1
Jan 27, 2019, 11:20 pm Last Edit: Jan 27, 2019, 11:20 pm by gpb01
Sicuro che quel DS3231 non sia programmato per la modalità AM/PM 12H e tu lo stia leggendo come se fosse programmato per la modalità 24H?

Guglielmo
Search is Your friend ... or I am Your enemy !

LelloGi

A questo non ci avevo pensato!
Adesso mi vengono spontanee due altre domande:
1) come faccio a capire se è programmato per 12h(Am/PM)?
2) Se è cosi si può riprogrammarlo per le 24h e come fare?
Proverò a leggere il dataSheet, che essendo in inglese mi creerà qualche altro problema.

Saluti

gpb01

Pagina 11 del datasheet, nei registri all'indirizzo 0x02, il bit 6 indica in che modalità lo stai facendo lavorare ... per lavorare in modalità 24H lo devi mettere a zero in fase di inizializzazione.

Guglielmo
Search is Your friend ... or I am Your enemy !

LelloGi

Risolto grazie ai vostri consigli e al vostro aiuto.
Non ho fatto altro che resettare il RTC e poi scrivere nel registro 2 uno 0.
saluti

Go Up