Prog Shield RTC DS1307

Fra Holstebro HTX Wiki
Skift til: navigering, søgning
DS1307 Real Time Clock Modul

Dette er et Real Time Clock modul, der aflæses via I2C. Modulet er beskrevet til PIC på siden DS1307 RTC med JAL-kode.

Her beskrives kort hvordan man kan læse fra modulet ved hjælp af Arduinoen.

Software

Biblioteket der anvendes ligger på GitHub[1]. Biblioteket downloades og installeres som beskrevet under Arduinos biblioteker.

Til test anvendes ReadTest og SetTime der begge kommer med som eksempler til biblioteket.

Her gennemgås kun ReadTest - hvis den ikke fungerer, så kan det være fordi man skal have kørt SetTime, eller det kan være fordi Lithium batteriet skal skiftes.

Anvendelsen af softwaren

Som alle andre biblioteker skal der sættes de grundlæggende ting op for at kontakte biblioteket. I biblioteket defineres et objekt der hedder RTC.

#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>

Inde i setup() skal der sættes gang i den serielle port til test ved hjælp af begin-metoden som vist her:

void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("DS1307RTC Read Test");
  Serial.println("-------------------");
}

I loop() gentages hvert sekund koden der forsøger at læse RTC'en, og hvis det går godt, så udskrives tidspunktet, ellers kommer der en fejlmelding.

void loop() {
  tmElements_t tm;

  if (RTC.read(tm)) {
    Serial.print("Ok, Time = ");
    print2digits(tm.Hour);
    Serial.write(':');
    print2digits(tm.Minute);
    Serial.write(':');
    print2digits(tm.Second);
    Serial.print(", Date (D/M/Y) = ");
    Serial.print(tm.Day);
    Serial.write('/');
    Serial.print(tm.Month);
    Serial.write('/');
    Serial.print(tmYearToCalendar(tm.Year));
    Serial.println();
  } else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
    delay(9000);
  }
  delay(1000);
}

Yderligere muligheder i softwaren

Der ligger yderligere muligheder i klassen man kan anvende, hvis man ønsker andre måder at anvende Real Time Clocken på:

    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; }

Hardware

Princippet i Real Time Clocken er at den har en 32768 Hz krystal-oscillator kørende uanset om der er strøm til kredsløbet, eller om det kører på det indbyggede Lithium batteri.

Oscillatoren tæller et register med sekunder frem, og dette overloader videre til minutter osv. så der kan læses tidspunkt og dato i modulet.

Kommunikationen med modulet sker gennem I2C

Layout

DS1307RTC modulets placering på programmerings-shieldet kan ses her:
Layout-DS1307RTC.png
Placering af DS1307RTC - skal vende rigtigt

Referencer

  1. DS1307RTC bibliotek placeret ved GitHub