ARDUINO
MH-Real-Time Clock Modules-2

ultimo aggiornamento 2 gennaio 2019


JLCPCB - 10 PCB per $ 2 (100 * 100 mm, 2-layer)
Il più grande produttore di PCB in Cina, oltre 300.000 clienti e oltre 10.000 ordini online al giorno
Vedi l'interno della fabbrica di PCB: https://www.youtube.com/watch?v=_XCznQFV-Mw


 

Indice


Il modulo può essere acquistato sul sito Homotix

Descrizione

Il modulo MH-Real-Time Clock Module - 2 si basa sull' integrato DS1302 al cui interno è presente un orologio in tempo reale / calendario e 31 byte di RAM statica.

L'integrato DS1302 è simile al modello DS1307 dal quale si differenzia per alcune particolarità:

DS1302 Trickle-Charge Timekeeping Chip

Piedinatura Datasheet Foto dell'integrato

 

DS1307 64 x 8 Serial Real-Time Clock

Piedinatura Datasheet Foto dell'integrato

Il chip comunica con il microprocessore tramite un'interfaccia seriale. Il RTC (Real Time Clock) / calendario fornisce: secondi, minuti, ore, giorno, data, informazioni Mese, e Anno.
Per l'interfaccia, oltre all'alimentazione, sono necessari solo tre fili : CE (RST), I/O (linea dati), e SCLK (serial clock).
I dati possono essere trasferiti da e verso l'orologio/RAM 1 byte alla volta o in un inico invio fino a 31 byte.
Il DS1302 è progettato per funzionare con una potenza molto bassa e per conservare dati e informazioni di clock con meno di 1μW.
Il DS1302 ha pin di alimentazione doppi, una primaria (Pin #1 #4) e un altro per la batteria di backup (Pin #8 #4), corrente 260mAh, batteria non ricaricabili. tempo di conservazione dei dati teorica è più di 10 anni.
In questa applicazione per esempio l'alimentazione primaria  è fornita da Arduino, e quella secondaria da una batteria CR2032.

Qui potete vedere lo schema elettrico per il DS1302 Real Time Clock. VCC è impostato per accettare l'alimentazione primaria, questa è tipicamente 3.3V, ma può utilizzare 5V. Si raccomanda di non applicare più di 7V, in quanto ciò può danneggiare l'unità. VBAT viene utilizzata per l'alimentazione di backup, fornita dalla batteria 3.3V tipo CR2032.
Il cristallo di quarzo è posto tra i pin # 2 e # 3, mentre i Pin # 5-6-7 sono utilizzati per la comunicazione dei dati tra il modulo e il microcontrollore, è inoltre collegato il pin CE indicato come RST.

 

Caratteristiche

Alimentazione:

 3.3V o 5.5V (Max 7V)

Tipo sensore:

 RTC Uscita digitale

Batteria backup  3.3V tipo CR2032
Temperature operativa  0-70 °C

Imballaggio:

 Sacchetto sigillato antistatico

Dimensioni del modulo

 44 x 23 mm

Foto del modulo

Filmato illustrativo

 

Circuito elettrico e PCB del modulo

Schema realizzato con EasyEDA: Un servizio per il disegno di circuiti e la loro simulazione, progettazione e produzione di PCB. Provalo è gratuito!

Schema del circuito di prova

Per testare il modulo si utilizzano i seguenti componenti

Arduino UNO MH-Real-Time Clock Module 2
Cavetti per Breadboard di vari colori Modulo Expander bus I2C per Display LCD

 

Pin Arduino Modulo RTC Modulo display
2 RST  
3 DAT  
4 CLK  
A4 (SDA)   SDA
A5 (SCL)   SCL
     
+5V VCC VCC
GND GND GND

Installazione libreria

Prima di caricare il programma occorre installare l'apposita libreria che può essere scaricata dal sito di Henning Karlsen al seguente link DS1302.
Una volta scaricata la libreria dovrà essere aggiunta a quelle esistente, fare riferimento alle figure sotto riportate.

 

Programma applicativo

Il seguente sketch di Arduino verifica il funzionamento del modulo DS1302, mostrando sul Monitor seriale o su apposito display 16x2 collegato con interfaccia I2C la date e l'ora corrente.
Alla prima esecuzione si dovrà indicare al modulo la data e l'ora corrente, fatto questo si potranno commentare le linee e rieseguire la compilazione, in quanto il valore sarà conservato all'interno della memoria del modulo alimentato dalla batteria di backup.

 
Programma 
Schema circuito di prova

 
/*
  test_RTC1302.ino
  Il programma verifica il funzionamento del modulo MH-Real-Time
  Clock Module 2 mostrando data e ora su Monitor seriale o
  Display LCD 16x2 collegato tramite interfaccia I2C
  Basato su libreria di Henning Karlsen
  web: http://www.RinkyDinkElectronics.com/

  Sono utilizzati i seguenti pin
  Pin +5V           -> Alimentazione modulo display e RTC
  Pin GND           -> GND modulo modulo display e RTC
  Pin Digital 2     -> Pin CE - RST modulo RTC
  Pin Digital 3     -> Pin I/O - DAT modulo RTC
  Pin Digital 4     -> Pin CLCK - CLK modulo RTC
  Pin Analogic A4   -> Pin SDA display
  Pin Analogic A5   -> Pin SCL display

  Creato il 15/12/2016 da Adriano Gandolfo
  Sito web https://www.adrirobot.it
  Blog http://it.emcelettronica.com/author/adrirobot
  Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
  Istagram https://www.instagram.com/adrirobot/
  This example code is in the public domain.
*/

#include <DS1302.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Creazione oggetto RTC
DS1302 rtc(2, 3, 4);

// Creazione dell'oggetto LCD
// Imposta l'indirizzo LCD 0x27 per un display a 16 caratteri e 2 linee
LiquidCrystal_I2C lcd(0x27, 16, 2); 

void setup()
{
  // Imposta RTC in run-mode e disabilita la protezione da scrittura
  rtc.halt(false);
  rtc.writeProtect(false);

  // Imposta la comunicazione seriale
  Serial.begin(9600);

  // inizializza il display
  lcd.init();
  lcd.backlight();//accende la retroilluminazione

  // Le seguenti linee possono essere commentate per
  //utilizzare i valori già memorizzati nel DS1302
  //rtc.setDOW(SUNDAY);        // Imposta il giorno della settimana a SUNDAY
  //rtc.setTime(11, 32, 0);     // Imposta l'ora come 11:32:00 (Formato 24hr)
  //rtc.setDate(12, 2, 2017);   // Imposta la data cone 12 febbraio 2017
}

void loop()
{
  // Invia giorno della settimana
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");

  // Invia data
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Invia ora
  Serial.println(rtc.getTimeStr());

  // Scrive i valori sul display LCD
  lcd.clear();//cancella precedenti valori
  data (); // Scrive su LCD la data
  ora (); // Scrive su LCD l'ora

// Aspetta un secondo prima di ripetere
  delay (1000);
}

void data ()
{
  lcd.setCursor(0, 0);
  lcd.print(rtc.getDOWStr());
  lcd.print(" ");
  lcd.print(rtc.getDateStr());
}

void ora()
{
  lcd.setCursor(0, 1);
  lcd.print(rtc.getTimeStr());
}

Problemi di funzionamento

Gianluca Tursi (vedere sito www.gianlucatursi.it) utilizzando un modulo simile a quello illustrato in questa pagina, ha notato un problema di funzionamento.

Il modulo mostrava una volta la data e ora corretta e una volta una data e ora errata.

Per risolvere il problema ha inserito una resistenza da 220 ohm sulla linea I/O

in questo modo ha risolto il problema

Realizzazione di un data logger

Vediamo ora la realizzazione di un data logge low cost, per il monitoraggio ambientale di temperature , con successiva registrazione dei valori  su una SD-Card.
Il cuore del progetto è Arduino, il programma che si scrive su Arduino sarà naturalmente avviato a loop() finché non si toglie l'alimentazione dal dispositivo. Quando lo colleghiamo ad una fonte di alimentazione (ad esempio la USB del PC o anche una comunissima Batteria da 9V) si accende e avvia il programma caricato dall'IDE a loop infinito. Questo continua fino a quando non togliamo la batteria o stacchiamo il cavo.
Il programma legge i valori di temperatura e umidità tramite il sensore DHT11 e salva i valori in contemporanea con i dati di dell'ora e del giorno forniti da un modulo con un DS1302, in cui è effettuata la misura su una memoria SD.
Un led Bicolore segnala eventuali problemi o l'avvenuta registrazione dei dati.
Per la descrizione e il programma vedere la pagina al seguente link.

Elenco revisioni
02/01/2019Inserito riferimento a programma data logger
29/10/2017Inserito modifica proposta da Gianluca Tursi
12/03/2017Aggiornato pagina
12/02/2017Aggiornato pagina
12/02/2017Emissione preliminare