Erstes einbinden fremder Libs DS3234 RTC

Update:Es funktioniert mit AVR, nicht aber mit dem Arduino DUE
Falls jemand weiß, was man ändern muss, damit es auch auf dem DUE läuft, wäre das super

Ich versuche es gerade mit der RTC lib aus der Arduino Software, bekomme es aber nicht ans laufen.
Das bekomme ich bei "mehr Info"

Wie bindet man externe libs ein?
Ich hab es in der Arduino Software installiert über den Manager
Bekomme aber bereits jetzt die Fehlermeldung
"Compilation error: 'RtcDS3234 Rtc' redeclared as different kind of symbol

Kann mir einer mal ein Beispiel damit erstellen, damit die Grundfunktion funktionieren würde und ich verstehe wie sowas eingebunden wird?

#include <SPI.h> 
#include <RtcDS3234.h>
RtcDS3234<SPIClass> Rtc(SPI);

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
pinMode(A0, OUTPUT);


}

void loop() {
int i = IsDateTimeValid();
  // put your main code here, to run repeatedly:
digitalWrite(A0,HIGH);
Serial.println("A0 = HIGH");
delay(2000);
digitalWrite(A0,LOW);
Serial.println("A0 = LOW");
delay(2000);
}

Verwende doch ein Beispiel aus der Library. Die funktionieren bei richtiger Verwendung immer.

Es ist immer eine gute Idee, sich an den Beispielen einer Bibliothek zu orientieren.

const uint8_t DS3234_CS_PIN = 5;

#include <SPI.h>
#include <RtcDS3234.h>

RtcDS3234<SPIClass> Rtc(SPI, DS3234_CS_PIN);

OK, zwei Leute, ein Gedanke :joy:

Kein Unterschied, hatte jetzt das komplette Beispiel eingefügt, gleiche Fehlermeldung :frowning:

Dann muss das doch stimmen, oder ?

leider nicht, oder mich mache noch was anderes falsch

Vermutlich ja.
Zeige den aktuellen Sketch.

Na, das Selbe, wie im Beispiel
War ja klar, dass ich mir gleich wieder ein Problemfall raussuche:-(
Immer gleich Frust am Anfang


// Reference for connecting SPI see https://www.arduino.cc/en/Reference/SPI
// CONNECTIONS:
// DS3234 MISO --> MISO
// DS3234 MOSI --> MOSI
// DS3234 CLK  --> CLK (SCK)
// DS3234 CS (SS) --> 5 (pin used to select the DS3234 on the SPI)
// DS3234 VCC --> 3.3v or 5v
// DS3234 GND --> GND

const uint8_t DS3234_CS_PIN = 5;

#include <SPI.h>
#include <RtcDS3234.h>

RtcDS3234<SPIClass> Rtc(SPI, DS3234_CS_PIN);

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

    Serial.print("compiled: ");
    Serial.print(__DATE__);
    Serial.println(__TIME__);

    SPI.begin();
    Rtc.Begin();

    RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
    printDateTime(compiled);
    Serial.println();

    if (!Rtc.IsDateTimeValid()) 
    {
        // Common Causes:
        //    1) first time you ran and the device wasn't running yet
        //    2) the battery on the device is low or even missing

        Serial.println("RTC lost confidence in the DateTime!");

        // following line sets the RTC to the date & time this sketch was compiled
        // it will also reset the valid flag internally unless the Rtc device is
        // having an issue

        Rtc.SetDateTime(compiled);
    }

    if (!Rtc.GetIsRunning())
    {
        Serial.println("RTC was not actively running, starting now");
        Rtc.SetIsRunning(true);
    }

    RtcDateTime now = Rtc.GetDateTime();
    if (now < compiled) 
    {
        Serial.println("RTC is older than compile time!  (Updating DateTime)");
        Rtc.SetDateTime(compiled);
    }
    else if (now > compiled) 
    {
        Serial.println("RTC is newer than compile time. (this is expected)");
    }
    else if (now == compiled) 
    {
        Serial.println("RTC is the same as compile time! (not expected but all is fine)");
    }

    // never assume the Rtc was last configured by you, so
    // just clear them to your needed state
    Rtc.Enable32kHzPin(false);
    Rtc.SetSquareWavePin(DS3234SquareWavePin_ModeNone); 
}

void loop () 
{
    if (!Rtc.IsDateTimeValid()) 
    {
        // Common Causes:
        //    1) the battery on the device is low or even missing and the power line was disconnected
        Serial.println("RTC lost confidence in the DateTime!");
    }

    RtcDateTime now = Rtc.GetDateTime();
    printDateTime(now);
    Serial.println();

	RtcTemperature temp = Rtc.GetTemperature();
	temp.Print(Serial);
	// you may also get the temperature as a float and print it
    // Serial.print(temp.AsFloatDegC());
    Serial.println("C");

    delay(10000); // ten seconds
}

#define countof(a) (sizeof(a) / sizeof(a[0]))

void printDateTime(const RtcDateTime& dt)
{
    char datestring[26];

    snprintf_P(datestring, 
            countof(datestring),
            PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
            dt.Month(),
            dt.Day(),
            dt.Year(),
            dt.Hour(),
            dt.Minute(),
            dt.Second() );
    Serial.print(datestring);
}

och war ja klar.,ich hatte geahnt dass es solche Probleme mit ARM gibt!!!
Habe den DUE dran, wenn ich es mit einem Atmel teste geht es problemlos!!
Verdammt, das war eines der Pro Argumente für mich Arduiono zu benutzen

Sowas ist gleich zu Anfang natürlich echt ätzend:-(

Und warum musste es eine SPI RTC sein ?
Hätte da nicht eine I2C RTC auch getan ?

  1. Wollte ich lieber SPI
  2. Wollte ich generell die Flexibilität der Arduino Plattform testen und wurde gleich beim ersten Versuch enttäuscht, obwohl ich extra eine Lib aus dem Manager genommen habe und nicht irgendwo aus dem Netz
    Da ich mich momentan noch nicht entscheiden kann ob DUE oder AVR, meist würde der AVR ausreichen, aber eben ,d a ich solche Probleme geahnt hatte, wollte ich mich auf das festlegen was am problemlosesten läuft nur sind TFT beim DUE eigentlich besser aufgehoben...
  3. war es gerade die RTC die mir zufällig beim Wühlen in der Kiste in die Hand gefallen ist, sollte halt möglichst wenig Bauteile haben, und da ist die ideal

Ok.....macht allerdings aus meiner Sicht keinen "echten" Sinn, da kein Geschwindigkeitsvorteil, was sonst SPI ausmacht.

Was ist da ein Problem?
Der DUE hat eine Rtc schon eingebaut im Chip.
Wie fast alle ARM

Wenn du (oder der Lib Ersteller) deine Rtc genau so nennst wie die DUE Rtc, ist der Fehler kein Wunder.

RtcDS3234<SPIClass> myRtc(SPI);
Und natürlich alle Vorkommen genau so umbenennen.

Tipp:
Siehe in deine \arduino\hardware\sam\1.6.12\system/CMSIS/Device/ATMEL/sam3xa/include/component/component_rtc.h
Da wird Rtc definiert.
In Zeile 56!
Genau, wie es die Meldung auch sagt.

1 Like

Außerdem funktioniert der Controller auf dem Due mit 3,3V. Betreibst Du die DS3234 mit 3,3V?

Grüße Uwe

Darum geht es doch gar nicht, es geht darum das ich die Arduino Plattform teste, da diese so einfach sein soll, wenn man Prototypen aufbauen will.
Und ich will eben ein genaueres RTC haben will als die interne z.B, oder es mit einem ABR tauschen können, bei gleichem Quellcode.,
Genau so gut, hätte es ein Display oder Sensor sein können, es geht darum, das ich davon ausging, das ein Wechsel der Plattform mit nahezu gleiche m Code, wie angepriesen, möglich ist,.
Nun aber muss man dich in den DAteien zurecht kommen, was halt genau das ist, was ich als Anfänger vermeiden wollte.
Mir geht es nicht um den Spaß des Programmierens sondern Projekte zu bauen die ich im Alltag benötige, und das kann dann auch eine externe RTC sein.

Und da ich nicht von C/C++ komme ist das dann halt doppelt nervig, wenn man sich nicht auf die reinen Anfängeraufgaben konzentrieren kann und Erfolgserlebnisse generieren kann, sondern gleich in irgendwelchem Quellcode herumwurschteln darf, herausfinden darf wo die abgelegt werden etc.
Wie gesagt, wollte ich kein Arduino oder C Profi werden, ich wollte , wenn ich mal eine Fenstersteuerung benötige, diese schnell basteln, und da ist C halt immer eine schlechte Grundlage, leider gibt es aber dafür die meisten Treiber

Aber danke, vielleicht werde ich es mir mal ansehen, ob ich das auf die schnelle behoben bekomme, aber wie gesagt, geht es mir ja gar nicht um die RTC generell, sondern das ich di Plattformunabhängigkeit testen wolle, man mal eben z.B. ein RTC Modul testen an, ohne Gefummel und Wühlen von Datenblättern, deshalb wollte ich Arduino ausprobieren :-(.
Da aber nicht jeder Treiber vom Hersteller oder direkt von Arduino kommt, hatte ich sowas schon geahnt

Ich betreibe den RTC noch gar nicht, aber ja, ich würde ihn dann sicherlich mit 3,3C betreiben, warum njcht?
Die meisten , allermeisten Bausteine werden damit kein Problem haben, außer alte LCDs teilweise

Schade, denn sonst hätte ich Dir die ESP32-Familie vorgestellt und Dich auf die Seite von Fips verwiesen. Da findest Du Beispiele, die sofort funktionieren, naja nahezu. Oder die Seite ESP32 Projects mit vielen recht gut dokumentierten Beispielen für die Arduino-IDE. Aber auch da wird C++ benötigt und zumindest ein paar Fallstricke lauern überall. Also leider nichts für Dich, wie schade :wink:

Na ja, mit solcher Einstellung kannst alles in die Ecke werfen oder in die unterste Schublade packen.

nein, den ESP32 meide ich wenn möglich, die liegen hier zwar rum, taugen aber für meine Projekte nicht, aufgrund des Stromverbrauchs zB.

jepp, das macht den Marktvorsprung vom Arduino aus weil es mehr so ist aber eben nicht wirklich.
Andere Firmen die es in der Vergangenheit versucht haben, scheitern eben genau daran, da es nie Einsteigerfreundlich war (Mikroe z.B.)
Da aber programmieren sowieso nur eine Nische ist, wird sich daran nie was ändern