Olvasási idő: 3 perc

Ezt az eszköz már elég régóta használom, de most volt vele csak gondom. És így megosztom, azt a pár egyszerű lépést amivel be lehet állítani a dátumot, és időt egy DS1307-es lapkán Arduino segítségével. Már több mint két éve megy az akvárium világítás vezérlésem és a napokban egy reggel látom, hogy az LCD-n a következő hiba üzenet van: “RTC not runinng…”. Hát gondoltam eddig bírta, végül is olcsó kínai cucc.

Délután aztán foglalkoztam is vele és nem volt más probléma mint lemerült az elem egy CR2032-est használ. A lemerülés csak abban az esetben derül ki, ha van egy áramszünet is. Hiszen ameddig van táp addig működik a rendszer. Hát most éjszaka pont volt egy kis áramszünet. Akkor lássuk is mi kell az eljáráshoz, hogy újra működésbe hozzam a vezérlésem egyik elemét.

Szüksége elemek a beállításhoz

  • Arduino
  • DS1307-RTC
  • vezetékek
  • CR2032 3 voltos elem

Elemet kicseréltem, majd összevezetékeztem a RTC-t az Arduino-val. Csak 4 vezetékre van szükség. A következő pontokat kell összekötni az Arduinoval: VCC, GND, SDA, SCL.

  • DS1307 — ARDUINO
  • VCC <–> 5V
  • GND <–> GND
  • SDA <–> A4
  • SCL <–> A5

Én egy régi PC-ből bontott kábelt használtam. Mind a 2 végén a megfelelő saruk voltak házzal, na jó kettőnél a levegőben lógott a sarus vége, ez jól látszik a képen is. Azért nem fektettem ebbe több energiát, mivel feltöltöm a programot beállítom az időt és mehet is vissza a helyére a lapka. A képeken az alkatrészek és a vezetékezést lehet megnézni.

Jöhet a beállítás és tesztelés

Vagyis két egyszerű program az első beállítja a számítógépen található időre a DS1307-et, a másik pedig 1 másodpercenként kiírja az adatokat soros monitorra. Ehhez az ARDUINO IDE-t használtam ingyenes alkalmazás le lehet tölteni innen. A SetTime.ino agyári Arduino programok között megtalálható. A DS1307_dateTime_to_Serial.ino pedig nem csinál mást mint kiírja az adatokat a soros monitorra. Először jöhet a SetTime program USB kábellal csatlakoztatott Arduinora feltölteni és soros monitoron ellenőrizni a kimenetet. Ha minden rendben volt, akkor jöhet a második program ami feltöltés után 1 másodpercenként kiírja az dátumot és időt a soros minitorra. A képen balra a beállítás, jobbra az ellenőrzés, alul pedig a kimenet látható.

És a programok

Az első  program ami a beállítást végzi benne van a fájl menü scetch könyvtárban a többi gyári DS1307-es programok között. Rátöltés után kiírja a soros portra beállított időt, dátumot. és ezzel kész is az első lépés, már most használható az eszköz. A beszerelt elem miatt folyamatosan frissül az idő. Így bármelyik lekérdezésnél az aktuális adatokat adja vissza.

#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>

const char *monthName[12] = {
 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};

tmElements_t tm;

void setup() {
 bool parse=false;
 bool config=false;

// get the date and time the compiler was run
 if (getDate(__DATE__) && getTime(__TIME__)) {
 parse = true;
 // and configure the RTC with this info
 if (RTC.write(tm)) {
 config = true;
 }
 }

Serial.begin(9600);
 while (!Serial) ; // wait for Arduino Serial Monitor
 delay(200);
 if (parse && config) {
 Serial.print("DS1307 configured Time=");
 Serial.print(__TIME__);
 Serial.print(", Date=");
 Serial.println(__DATE__);
 } else if (parse) {
 Serial.println("DS1307 Communication Error :-{");
 Serial.println("Please check your circuitry");
 } else {
 Serial.print("Could not parse info from the compiler, Time=\"");
 Serial.print(__TIME__);
 Serial.print("\", Date=\"");
 Serial.print(__DATE__);
 Serial.println("\"");
 }
}

void loop() {
}

bool getTime(const char *str)
{
 int Hour, Min, Sec;

if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
 tm.Hour = Hour;
 tm.Minute = Min;
 tm.Second = Sec;
 return true;
}

bool getDate(const char *str)
{
 char Month[12];
 int Day, Year;
 uint8_t monthIndex;

if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
 for (monthIndex = 0; monthIndex < 12; monthIndex++) {
 if (strcmp(Month, monthName[monthIndex]) == 0) break;
 }
 if (monthIndex >= 12) return false;
 tm.Day = Day;
 tm.Month = monthIndex + 1;
 tm.Year = CalendarYrToTm(Year);
 return true;
}

Ez az én saját tesztelésre írt kis programom ami nem csinál mást, mint csatlakozik a RTC-hez és kiírja az aktuális dátumot időt. Ez csak ellenőrzés miatt készült, nem tud semmi különös dolgot. Két beépített függvénykönyvtárat használ, wire és RTC, beállítja az átvitel sebességét 9600-ra, majd print segítségével kiírja az adatokat a soros monitorra.

// Date and time functions using a DS1307 Serial connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"


RTC_DS1307 rtc;

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

void loop () {
 DateTime now = rtc.now();
 Serial.print(now.year(), DEC);
 Serial.print("/");
 Serial.print(now.month(), DEC);
 Serial.print("/");
 Serial.print(now.day(), DEC);
 Serial.print(" ");
 Serial.print(now.hour(), DEC);
 Serial.print(":");
 Serial.print(now.minute(), DEC);
 Serial.print(":");
 Serial.println(now.second(), DEC);
 delay(1000);
}

Fájlok letöltése

SetTime.zip

Letöltés

DS1307_dateTime_to_Serial.zip

Letöltés

Végszó

A DS1307 egy nagyon okos kis eszköz, ahol a pontos idő fontos. Így az általam használ akvárium világítás vezérlésnél Arduino mellett ez a kis lapka végzi a pontos idő mérését. A programok feltöltése és tesztelése után Arduino mehet vissza a fiókba, RTC pedig vissza az áramkörbe. És a következő lemerülésig adhatja a pontos időt.

Arduino kategória további bejegyzései:

  • Arduino multitasking
    Olvasási idő: 3 perc Multitasking avagy párhuzamos vezérlés. Jobb kifejezés rá a párhuzamos feladat végrehajtás. Miért is van erre szükség? Nem minden esetben, de…
  • Arduino Nano BMP180 teszt
    Olvasási idő: 4 perc BMP180 egy alap szenzor egy időjárás állomás elkészítéséhez. Megkapjuk tőle a légnyomást, hőmérsékletet, és még a tengerszint feletti magasságot is….
  • Arduino pro IDE telepítése Linux-ra
    Olvasási idő: 4 perc Arduino programozására eddig a sima Arduino IDE-t használtam. Viszont rátaláltam egy egy alfa kiadásra ami már 2019 októberében megjelent. Jelenleg…
  • Arduino Nano fotodióda teszt
    Olvasási idő: 2 perc Fotodióda tesztelése Arduino Nano-val. Az általam használt dióda egy éjszakai fényt adó egységből való, így nem tudom a típusát, sem…
  • Arduino DS1307-RTC dátum, idő beállítás
    Olvasási idő: 3 perc Ezt az eszköz már elég régóta használom, de most volt vele csak gondom. És így megosztom, azt a pár egyszerű…
  • Arduino – Akvárium világítás vezérlés
    Olvasási idő: 8 perc Arduino mikrokontrollerrel akvárium világítás vezérlés. Vezérlés szempontjából csak a világítás a lényeg, de vannak extrái is. Ilyenek LCD kijelzőn megjelentendő…