INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
RTC DS1307 stellen / speichern
29.03.2015, 22:56 (Dieser Beitrag wurde zuletzt bearbeitet: 29.03.2015 22:57 von Foto-Ralf.)
Beitrag #1
RTC DS1307 stellen / speichern
Hallo,

ich habe eine DS1307 RTC am Arduino. Jetzt habe ich mir was programmiert um die Uhrzeit mit Tasten stellen zu können. Das funktioniert soweit auch. Nach der Eingabe der Uhrzeit übergebe ich die Zeit an die Time-Library mit dem Befehl
Code:
setTime(tm_h,tm_min,0,tm_day,tm_mth,tm_yr);
In den jeweiligen int-Variablen stehen die Werte für Stunde, Minute, ...

Das passt alles soweit, die Uhrzeit wird danach auch korrekt angezeigt - bis ich den Reset-Button am Arduino drücke (oder Spannung weg und wieder hin). Die Zeit wurde (logischerweise) nicht auf der RTC gespeichert da ich sie ja "nur" an die Time-Library übergeben habe.

Leider habe ich aber nirgends einen Beispielcode gefunden, wie ich auf die DS1307 die aktuelle Zeit schreiben kann. Den Befehl
Code:
RTC.write(tm);

finde ich zwar in der Library der DS1307, aber wie ich zu dem Wert ( tm ) komme ist mir noch nicht klar. Aus der Time-Library müsste er mit
Code:
makeTime(tm);
zu erzeugen sein, aber dazu müsste ich die Variable ja erst mal definieren. Leider habe ich nirgends was gefunden in welchem Format ich diese definieren muss.

Kann mir jemand Licht in's dunkel bringen?

Danke
Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2015, 13:59
Beitrag #2
RE: RTC DS1307 stellen / speichern
Hi,
ich hab mal kurz nach RTC-Libs geschaut, aber solche Funktionen wie Du oben beschreibst, habe ich nicht gesehen.
Am einfachsten dürfte es sein, Du suchst Dir die Header-Datei (.h) der Lib, die Du verwendest (im libraries-Folder) und schaust dort nach, welchen Datentyp die gewünschten Funktionen fressen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2015, 14:11
Beitrag #3
RE: RTC DS1307 stellen / speichern
Hallo Thorsten,

Danke. Ich hab' mal nachgeschaut, bin jetzt aber verwirrt...
Das steht drin:

Code:
/*
* DS1307RTC.h - library for DS1307 RTC
* This library is intended to be uses with Arduino Time.h library functions
*/

#ifndef DS1307RTC_h
#define DS1307RTC_h

#include <Time.h>

// library interface description
class DS1307RTC
{
  // user-accessible "public" interface
  public:
    DS1307RTC();
    static time_t get();
    static bool set(time_t t);
    static bool read(tmElements_t &tm);
    static bool write(tmElements_t &tm);
    static bool chipPresent() { return exists; }

  private:
    static bool exists;
    static uint8_t dec2bcd(uint8_t num);
    static uint8_t bcd2dec(uint8_t num);
};

#ifdef RTC
#undef RTC // workaround for Arduino Due, which defines "RTC"...
#endif

extern DS1307RTC RTC;

#endif

( tm ) ist da aber nicht definiert - oder blick' ich's einfach nicht?

Gruss Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2015, 16:54
Beitrag #4
RE: RTC DS1307 stellen / speichern
Hi,
Du willst ja write aufrufen. Die zugehörige Deklaration ist das hier:
Code:
static bool write(tmElements_t &tm);
D.h. Du brauchst eine Variable vom Typ tmElements_t.
Das "&" vor dem tm bedeutet nur, dass es "call by reference" ist. D.h., wenn Du z.B. sowas machst:
Code:
tmElements_t meineZeit;
// dann hier code, das meineZeit füllt
RTC.write(meineZeit);
...dann wird an write nicht wirklich meineZeit übergeben, sondern implizit ein Zeiger darauf, so dass write theoretisch meineZeit ändern kann.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2015, 23:40
Beitrag #5
RE: RTC DS1307 stellen / speichern
Danke Thorsten - so wäre es tatsächlich gegangen, wenn ich's irgendwie hinbekommen hätte "meineZeit" mit einem für diese Funktion korekten Wert zu befüllen.

Aber dank deinem Schubs bin ich jetzt auf die Idee gekommen den Wert als Unix-Timestamp wieder mit der Time-Library zu holen und in die Variable meineZeit zu schreiben die ich dann mit RTC.set(meineZeit) auf die RTC beame.


Jetzt funktioniert's so wie ich wollte :-)

Gruss Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehler beim Speichern von Projekten Manni66 16 686 23.08.2016 10:05
Letzter Beitrag: hotsystems
  Gewichteten Durchschnitt berechnen, 20 Werte in fortlaufender Variable speichern TimeMen 10 468 03.07.2016 09:00
Letzter Beitrag: Binatone
  String in EEPROM Speichern BennIY 2 410 27.06.2016 10:23
Letzter Beitrag: BennIY
  Messwerte in Array speichern ArduinoMega2560 2 416 07.06.2016 16:30
Letzter Beitrag: SkobyMobil
  Serial.printeln, Stellen verschwinden Mathias 6 257 27.05.2016 17:44
Letzter Beitrag: Mathias
  Druckanzeige hat zu viele Stellen Rob-LE 2 366 19.03.2016 08:56
Letzter Beitrag: Rob-LE
  Sensordaten in MYSQL speichern rieders 3 693 02.03.2016 19:58
Letzter Beitrag: rieders
  Ergebnis lässt sich nicht speichern? schuballaa 2 624 30.08.2015 17:07
Letzter Beitrag: hotsystems
Brick Arduino Wetterstation Daten zu CSV speichern linuxman 4 1.624 23.08.2015 03:17
Letzter Beitrag: Scherheinz
  große 2-dim float-Arrays schnell auf SD speichern und zurücklesen? HaWe 25 2.188 22.06.2015 14:41
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste