• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Dziwne zachowanie DS1307, SetTime
#1
Witam

Czy ktoś wie jak rozwiązać, poradzić coś na dziwne zachowanie Arduino Mega.
Już tłumaczę o co chodzi.
Docelowo układ będzie pobierań czas z GPSa, ustawiał DS1307 , później co jakiś czas odczytywał ten czas i wykonywał różne operacje, w tym przesunięcie czasu systemowego do UTC.

Chciałem przetestować układ DS1307 z następującym kodem
Kod:
#include <Wire.h>
#include <DS1307.h>
#include <TimeLib.h> 

DS1307 clock;
RTCDateTime dt;

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

  // Inicjalizacja DS1307
  Serial.println("Inicjalizacja DS1307");;
  clock.begin();

  // Jeśli nie ustawiono daty, ustawiamy
  if (!clock.isReady())
  {
    // Data i czas z momentu kompilacji
    clock.setDateTime(__DATE__, __TIME__);
  }
}

void loop()
{
  dt = clock.getDateTime();
  //String d3;

  setTime(dt.hour, dt.minute, dt.second, dt.day, dt.month, dt.year);
          // add the offset to get local time
          //adjustTime(-7200);


  Serial.print("system data: ");Serial.print(dt.year);   Serial.print("-");
  Serial.print(month());  Serial.print("-");
  Serial.print(day());    Serial.print(" ");
  Serial.print(hour());   Serial.print(":");
  Serial.print(minute()); Serial.print(":");
  Serial.print(second()); Serial.println("");

         
  Serial.print("Raw data: ");
  Serial.print(dt.year);   Serial.print("-");
  Serial.print(dt.month);  Serial.print("-");
  Serial.print(dt.day);    Serial.print(" ");
  Serial.print(dt.hour);   Serial.print(":");
  Serial.print(dt.minute); Serial.print(":");
  Serial.print(dt.second); Serial.println("");

  delay(1000);
}

Przy odczycie na monitorze portu szeregowego otrzymuję dziwne dane:
Kod:
system data: 2020-4-64 21:55:31
Raw data: 2020-8-19 21:55:31
Dane z DSa są poprawne.
Co jeszcze ciekawsze, jeżeli usunę komentarz przy:

Kod:
//String d3;
to odczytane daty na monitorze pokrywają się.

Użyte Arduino to klon Mega2560.

Jest w tym kodzie również inne ciekawe zjawisko.
Po usunięciu komentarzy przy:
Kod:
//String d3;

i pozostawieniu w sekcji setup:
Kod:
void setup()
{
  Serial.begin(9600);

  clock.begin();

  // Jeśli nie ustawiono daty, ustawiamy
  if (!clock.isReady())
  {
    // Data i czas z momentu kompilacji
    clock.setDateTime(__DATE__, __TIME__);
  }
}
na monitorze są również błędne odczyty, ale inne:
Kod:
system data: 2020-13-19 22:5:3
Raw data: 2020-8-19 22:5:3
Czy ktoś wie czym takie zachowanie jest spowodowane i jak się go pozbyć ?
 
Odpowiedź
#2
Wstaw bibliotekę tego rtc co używasz <DS1307.h> i <TimeLib.h>
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
Dzięki za zainteresowanie.
W załączniku spakowane w jednym katalogu


Załączone pliki
.zip   Biblioteki.zip (Rozmiar: 54.73 KB / Pobrań: 1)
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości