sabato 13 dicembre 2014

Il modulo RTC per Arduino

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:
  1. Utilizzare delle librerie interne di Arduino, che permettono di sfruttare la funzione di calcolo dei millisecondi presenti nel microcontrollore;
  2. Utilizzare un modulo separato RTC in modo di inviare le relative informazioni ad Arduino;
  3. 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.


Scketch modulo RTC DS1302 con Arduino




*/

// 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:

Unknown ha detto...

se io volessi usare il modulo rtc con un microcontrollore Attiny 85 posso usare la stessa libreria o me ne occorre un altra?

AnSan ha detto...

Utilizzando arduino IDE e lo shield Digispark è possibile utilizzare le stesse librerie di Arduino senza problemi.

Posta un commento