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.
Vediamo le sue caratteristiche e come utilizzarlo con Arduino.
Indice
L’integrato DS1302
L’integrato DS1302 è simile al modello DS1307 dal quale si differenzia per alcune particolarità:
- ha un’interfaccia SPI mentre il DS1307 ha un’interfaccia I2C;
- può ricarica la batteria, mentre il DS1307 non lo fà;
- è dotato di un’uscita ad onda quadra programmabile.
Il chip comunica con il microprocessore tramite un’interfaccia seriale. Il modulo 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 unico 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 260 mAh, 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.
Circuito elettrico e PCB del modulo
Qui potete vedere lo schema elettrico del Real-Time Clock Module con DS1302.
Il pin 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
Schema realizzato con EasyEDA: Un servizio per il disegno di circuiti e la loro simulazione, progettazione e produzione di PCB. Provalo è gratuito!
Dove trovare il modulo RTC
Il Modulo RTC per Arduino con DS1302 essere acquistato presso il sito Homotix, la versione testata ha un costo di 1,28 € al momento della pubblicazione di questo articolo.
Se lo acquisterete presso il sito potrete usufruire di uno sconto inserendo il codice di sconto ADRIROBOT
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. Leggere anche l’articolo Arduino – Tutorial, come installare una libreria
Primo test
Vediamo ora di realizzare un primo progetto. Si tratta della realizzazione di un semplice orologio datario. I dati letti da modulo DS1302, saranno mostrati sul monitor seriale o su apposito display 16×2 collegato con interfaccia I2C.
Materiale occorrente
Per testare il modulo si utilizzano i seguenti componenti
Schema del circuito di prova
Tabella dei collegamenti
Arduino UNO | Display LCD | DS 1302 |
---|---|---|
5V | VCC | |
GND | GND | |
A4 | SDA | |
A5 | SCL | |
D3 | VCC | |
D4 | GND | |
D5 | CLK | |
D6 | DAT | |
D7 | RST |
Sketch applicativo
Il seguente sketch di Arduino verifica il funzionamento del modulo DS1302, mostrando sul monitor seriale o su un display 16×2 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.
1 2 3 |
rtc.setDOW(SATURDAY); // Imposta il giorno della settimana a SUNDAY rtc.setTime(16, 22, 0); // Imposta l'ora come 11:32:00 (Formato 24hr) rtc.setDate(7, 11, 2020); // Imposta la data come 7 novembre 2020 |
Dato che nomi dei giorni sarebbero indicati nomi, è possibile sostituire il file DS1302.cpp con quello scaricabile da questo file, che provvede a scrivere i giorni in italiano.
Noterete una particolarità, l’alimentazione del modulo non è presa dai canonici pin +5V e GND ma dai pin digitali D3 (+5V) e D4 (GND).
Per questo motivo dopo averli impostati come OUTPUT, tramite il comando digitalWrite il pin D4 che è collegato a GND del sensore viene portato a livello LOW, mentre il pin D3 collegato a VCC del sensore viene portato a livello HIGH,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
/* Test_DS1302_display.ino Creato il 15/12/2016 da Adriano Gandolfo Aggiornato il 7/11/2020 This example code is in the public domain. */ #include <DS1302.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #define VCC 3 // +5V #define GND 4 // GND // Creazione oggetto RTC DS1302 rtc(7, 6, 5); // Creazione dell'oggetto LCD LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { pinMode(VCC, OUTPUT); // imposta 'VCC' come output pinMode(GND, OUTPUT); // imposta 'GND' come output digitalWrite(VCC, HIGH); //Portiamo VCC a 5V digitalWrite(GND, LOW); //Portiamo GND a 0V delay (500); // 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 // Impostazione valori nella memori del DS1302 //rtc.setDOW(SATURDAY); // Imposta il giorno della settimana a SUNDAY //rtc.setTime(16, 22, 0); // Imposta l'ora come 11:32:00 (Formato 24hr) //rtc.setDate(7, 11, 2020); // Imposta la data come 7 novembre 2020 } 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()); } |