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
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 multitaskingOlvasá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 tesztOlvasá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-raOlvasá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 tesztOlvasá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ásOlvasá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ésOlvasá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ő…
linuxStyler hozzászólásai