Gli utilizzatori di Arduino sanno bene che non è presente in esso un modulo RTC (real time clock) per cui Arduino stesso nelle svariate applicazioni a cui è sottoposto non è in grado di sapere l’ora attuale; l’unica operazione che è in grado di fare è quello di contare i millisecondi che sono passati dalla sua accensione.
Esistono tre metodi per sincronizzare il dispositivo con l'ora attuale:
- Utilizzare delle librerie interne di Arduino, che permettono di sfruttare la funzione di calcolo dei millisecondi presenti nel microcontrollore;
- Utilizzare un modulo separato RTC in modo di inviare le relative informazioni ad Arduino;
- Sfruttare la connessione al web, con i relativi server NTC, per ricevere l’ora attuale.
In questo post analizzeremo solo il secondo metodo lasciando gli altri due ai post che seguiranno. Come modulo RTC è possibile utilizzare il modulo DS1302 reperibile a pochi euro su vari siti di commercio elettronico.
E' possibile reperire il modulo al seguente link:
https://www.banggood.com/it/DS1302-Real-Time-Clock-Module-With-Battery-For-Arduino-AVR-ARM-PIC-p-912465.html?p=4L2409906453201411W2
*/
// Definizione dei PIN da connettere
#define SCK_PIN 4
#define IO_PIN 3
#define RST_PIN 2
#include
// Inizializzazione della libreria
DS1302 rtc(RST_PIN, IO_PIN, SCK_PIN);
void setup()
{
rtc.halt(false);
// Viene disattiva la protezione alla scrittura
rtc.writeProtect(false);
Serial.begin(9600);
}
/* Main program */
void loop()
{
/* Qui è necesario impostare l'ora e la data.
Durante la fase di impostazione occorre togleire via i commenti laterali e compilare una prima volta. Successivamente occorre commentare le tre righe di codice e compilare.
In questo modo qualora Arduino dovesse riavviarsi, non verrano impostati i dati precedenti (sbagliati)
*/
// rtc.setDOW(TUESDAY);
// rtc.setTime(12,03,0);
// rtc.setDate(21, 01, 2014);
/* Read the time and date once every second */
while(1)
{
Serial.print("It is ");
Serial.print(rtc.getDOWStr());
Serial.print(" ");
Serial.print(rtc.getDateStr());
Serial.print(" ");
Serial.print("and the time is: ");
Serial.println(rtc.getTimeStr());
delay (1000);
}
}

2 commenti:
se io volessi usare il modulo rtc con un microcontrollore Attiny 85 posso usare la stessa libreria o me ne occorre un altra?
Utilizzando arduino IDE e lo shield Digispark è possibile utilizzare le stesse librerie di Arduino senza problemi.
Posta un commento