netcoast.ch - Projekte aus der echten Welt in der virtuellen Welt


Schema Verbindung DS1302 / VMA301 und Arduino UNO

Arduino UNO Digital-PIN Nr. 10 (VCC), 9 (GND), 8 (CE / RST), 7 (IO / DAT), 6 (CLK) gem. Beispielcode.
Erklärung verbindungen auf dem Breadboard:
PIN 6 (hier Grün) wird mit CLK verbunden.
PIN 7 (hier Gelb) wird mit DAT / IO (Input / Output) verbunden.
PIN 8 (hier Violett) wird mit RST / CE verbunden.
PIN 9 (hier Schwarz) wird mit GND verbunden.
PIN 10 (hier Rot) wird mit VCC verbunden.

Hinweis
VCC und GND könnten direkt mit den Arduino Power-PINs verbunden werden, aber dann geht die Fähigkeit Zeit zu speichern verloren!
Siehe Beispielsketch.
Realtime-Clock-Modul von vellemann VMA301
PINs wie oben beschrieben verbinden.
Natürlich kann das Breadboard auch übergangen werden.
DAT steht für IO, dies scheint pro Hersteller anders bezeichnet zu werden...
RST (Reset) steht für CE (Chip Enable).

Beispielcode DS1302 / VMA301 Zeit auslesen und setzen mit Arduino UNO

Hinweis
VCC und GROUND müssen mit einem Digitalen PIN verbunden sein, wenn auf das Zeitmodul geschrieben werden soll!
Wenn nur gelesen wird, könnte VCC und GROUND auch über eine andere Stromquelle verbunden werden.

// DS1302_Serial_Easy (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// Adopted for DS1302RTC library by Timur Maksimov 2014
//
// Angepasst durch slaps313 2018
//TimeLib.h Bibliothek wurde von hier erhalten: https://github.com/PaulStoffregen/Time
//DS1302RTC.h Bibliothek wurde von hier erhalten:
//An den Bibliotheken habe ich nichts verändern müssen


#include
#include //Time.h habe ich durch TimeLib.h ersetzen müssen.

// Set pins: CE / RST (je nach Modul), IO, CLK
DS1302RTC RTC(8, 7, 6);

//Optionale Stromverbindung zum Modul, wird benötigt um Daten schreiben zu können!
//Erledigt man die Stromzufuhr nicht über Digitale PINs kann nur vom Modul gelesen werden!
#define DS1302_GND_PIN 9
#define DS1302_VCC_PIN 10

void setup(void)
{
Serial.begin(115200);

// PINs aktivieren für die Stromversorgung vom Modul.
digitalWrite(DS1302_GND_PIN, LOW);
pinMode(DS1302_GND_PIN, OUTPUT);

digitalWrite(DS1302_VCC_PIN, HIGH);
pinMode(DS1302_VCC_PIN, OUTPUT);

//Check um zu prüfen ob die Uhr läuft.
//Sollte die Uhr nicht laufen, kann man mit RTC.set -> Wert angeben, sie starten.
//Oder mit RTC.haltRTC(false) sie starten, dann ist die Zeit so wie sie auf dem Chip steht...
RTC.haltRTC(false);
if (RTC.haltRTC()) {
Serial.println("DS1302 ist angehalten. Mit RTC.set wird die Uhr automaisch wieder gestartet.");
}

//Ist der Schreibschutz aktiv kann nicht auf den Chip geschrieben werden
//Allerdings wenn über die Bibliothek mit RTC.set gearbeitet wird, erledigt er dies automatisch.
RTC.writeEN(false);
if (!RTC.writeEN()) {
Serial.println("Der DS1302 / VMA301 ist Schreibgeschuetzt, dies ist normal.");
Serial.println();
}

delay(5000);

}


int uhrzeit_setzen(int Stunde, int Minute, int Sekunden, int Tag, int Monat, int Jahr) {
Serial.println("Uhrzeit setzen");
RTC.writeEN(false);
if( ! RTC.writeEN() ) {
Serial.println("DS1302 ist Schreibgeschuetzt, Schreibschutz wird aufgehoben...");
RTC.writeEN(true);
}
Serial.println("da dem "+Jahr);
setTime(Stunde, Minute, Sekunden, Tag, Monat, Jahr);
Serial.println(now());
if(RTC.set(now()) == 0){
Serial.println("Erfolg - Uhrzeit wurde gesetzt.");
return 0;
}
else
{
Serial.println("Fehlschlag - Uhrzeit konnte nicht gesetzt werden.");
Serial.println("Eventuell wurden VCC und Ground nicht korrekt angegeben.");
return 1;
}
}

int uhrzeit_lesen(){
time_t myTime;
myTime = RTC.get();
Serial.println(myTime);
Serial.println(year());
return 0;
}


int a = 0; //gehoert zum Beispielcode

void loop()
{
//
Serial.println(a);
if(a == 3){
//hier wird die Uhrzeit und Datum gesetzt.
//uhrzeit_setzen(Stunden, Minuten, Sekunden, Tag, Monat, Jahr);
uhrzeit_setzen(22, 31, 30, 13, 2, 2010);
}
if(a >= 5){
//Uhrzeit auslesen
uhrzeit_lesen();
}
delay (1000);
a++;
}


Sketch mit TimeLib und DS1302RTC Bibliotheken herunterladen: DS1302_VMA301_Sketch_mit_Bibliotheken.zip

Designed & styled by slaps313