RTC / Időmérés

DS1307 RTC modul

A DS1307 egy RTC (Real Time Clock) modul, mely az Arduinoval I²C kommunikációt folytat.

Ez a modul tartalmaz egy DS1307 I²C valós idejű RTC IC-t és egy 24C32 32K I²C EEPROM tárolót. Sőt, ráadásként egy DS18B20 hőmérséklet szenzort is integráltak a modulra, igaz, ez 1-Wire kommunikációt igényel. A modul LIR2303 újratölthető lítium akkumulátorral van szerelve, és a töltőáramkört a modul tartalmazza. Ha a hőmérséklet-érzékelő ki van kapcsolva, az RTC modul akár egy évig is működhet egy töltéssel.

Ezt a modult olyan például a adatgyűjtésre, vagy időzítési alkalmazásokhoz lehet felhasználni. Mivel a modul önműködően működik, az időadatok akkor is megmaradnak, ha az Arduino ki van kapcsolva, lehetővé téve olyan kis teljesítményű rendszerek kiépítését, amelyek hosszú távon is működhetnek az elemek cseréje nélkül.

A modul nagyjából és maximum 1 percet téved havonta, pontossága meglehetősen érzékeny a külső hőmérsékletre. A DS3231 pontosság szempontjából jobb választás, ott az 1 perces eltérés egy év alatt tud összejönni, mivel belső oszcillátort használ.

A kommunikáció összekötése után érdemes az Arduino I²C scanner programmal tesztelni a modul jelenlétét.

DS1307 portok

pinleírásmegjegyzés
BATaz akkumulátor (gombelem) feszülségszintjeitt mérhető a feszültségszint, többnyire nincs bekötve
GNDgrundgrund
VCC5V+ tápa modul tápellátása és az akkumulátor töltése
SDAI²C dataI²C adatvonal
SCLI²C clockI²C órajel
DSDS18B20Hőmérsékletmérés kimenet, 1-wire busz csatlakozó
SQnégyszögjel kimenetáltalában nincs bekötve, konfigurálható 1Hz, 4kHz, 8kHz vagy 32kHz kimenet

DS1307 bekötése

DS1307 bekötése

A lila szaggatott vonal a DS18B20 hőmérséklet-szenzor bekötését jelzi. Ez 1-wire kommunikációt igényel, melyet itt az Arduino 2. portján valósítottak meg.

Github

DS1307 példaprogram

A DS1307 könyvtárat innen, a GitHub-ról lehet letölteni. Ennek telepítése után az alábbi példaprogram is futtathatóvá válik.

A modul kiolvasásához és az idő beállításához is található példa ugyanitt, a GitHub-on. A kiolvasóprogramot ide másolom:

#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
 
void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("DS1307RTC Read Test");
  Serial.println("-------------------");
}
 
void loop() {
  tmElements_t tm;
 
  if (RTC.read(tm)) {
    Serial.print("Ok, Time = ");
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(tm.Month);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.println();
  } else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
    delay(9000);
  }
  delay(1000);
}
 
void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}

Források

A DS3231 egy RTC (Real Time Clock) modul, mely az Arduinoval I²C kommunikációt folytat.

Ez a modul tartalmaz egy DS3231 I²C valós idejű RTC IC-t és egy 24C32 32K I²C EEPROM tárolót. A modul LIR2303 újratölthető lítium akkumulátorral van szerelve, és a töltőáramkört a modul tartalmazza. Ha a hőmérséklet-érzékelő ki van kapcsolva, az RTC modul akár egy évig is működhet egy töltéssel.

Ezt a modult olyan például a adatgyűjtésre, vagy időzítési alkalmazásokhoz lehet felhasználni. Mivel a modul önműködően működik, az időadatok akkor is megmaradnak, ha az Arduino ki van kapcsolva, lehetővé téve olyan kis teljesítményű rendszerek kiépítését, amelyek hosszú távon is működhetnek az elemek cseréje nélkül. A modulon egy riasztásfunkció is elérhető.

A korábbi, DS1307 modul nagyjából és maximum 1 percet téved havonta, pontossága meglehetősen érzékeny a külső hőmérsékletre. A DS3231 pontosság szempontjából jobb választás, itt az 1 perces eltérés egy év alatt tud összejönni, mivel belső oszcillátort használ.

A kommunikáció összekötése után érdemes az Arduino I²C scanner programmal tesztelni a modul jelenlétét.

DS3231 portok

pinleírásmegjegyzés
BATaz akkumulátor (gombelem) feszülségszintjeitt mérhető a feszültségszint, többnyire nincs bekötve
GNDgrundgrund
VCC5V+ tápa modul tápellátása és az akkumulátor töltése
SDAI²C dataI²C adatvonal
SCLI²C clockI²C órajel
SQWnégyszögjel kimenetáltalában nincs bekötve, konfigurálható 1Hz, 1.024kHz, 4.096kHz, 8.192kHz kimenet
32Khznégyszögjel kimenetáltalában nincs bekötve, 32kHz kimenet

DS3231 bekötése

DS3231 bekötése

DS3231 példaprogram

A DS3231 könyvtárat innen, a GitHubról lehet letölteni. Ennek telepítése után az alábbi példaprogram is futtathatóvá válik.

A modulon az idő beállítását így lehet elvégezni:

  • A példaprogramok közül az RTC_DS3231 feltöltése
  • IDE monitor nyitása (itt már látni kell a pontos időt)
  • A küldés mezőbe beírni az aktuálisan beállítandó időt ebben a formában: TssmmhhWDDMMYYYY, és elküldeni

A modul kiolvasásához és az idő beállításához is található példa ugyanitt, a GitHub-on. A lenti program a pontos időt olvassa a modulról:

// ob121.com: Pontos idő olvasása a DS3231 RTC modulból és annak kiírása az IDE monitorra
 
#include <Wire.h>
#include "ds3231.h"
 
struct ts ido;
#define BUFF_MAX 128
char recv[BUFF_MAX];
unsigned long pause_mil, prev_mil, current_mil; 
 
void setup() {
  Serial.begin(9600);
  Wire.begin();
  DS3231_init(DS3231_INTCN);
  memset(recv, 0, BUFF_MAX);
  prev_mil = millis();      // start with pause
  pause_mil = 1000;         // sec
 
}
 
void loop() {
    current_mil = millis();  // read time
    if (abs(current_mil - prev_mil) > pause_mil) {   // call in second-raster
       DS3231_get(&ido);
       writetime();
    prev_mil = current_mil;
    }  
 
}
 
void writetime() {
 
    Serial.print(ido.year);
    Serial.print("-");
    Serial.print(ido.mon);
    Serial.print("-");
    Serial.print(ido.mday);
    Serial.print(" : ");
    Serial.print(ido.hour);
    Serial.print(":");
    Serial.print(ido.min);
    Serial.print(":");
    Serial.println(ido.sec);      
}

Az, hogy ez a modul a Pi-hez készült, nem kell, hogy bárkit is elijesszen, ugyanis a modul tápjának jó a 3,3V és az 5V is, azaz simán működik Arduino-val is (kipróbáltam). Egyébként minden paraméterében és beállításában megegyezik a fenti DS3231-gyel.

DS3231 for Pi

Források