luni, 28 iunie 2010

DS1307 RTC - ceas timp real

DS1307 RTC - ceas de timp real

Am nevoie pentru un proiect de un ceas de timp real (real time clock). Cel mai accesibil a fost DS 1307+


Schema de conectare la Arduino, realizata cu Fritzing, arata cam asa:

Deocamdata l-am pus pe breadboard, urmeaza sa-l trec pe o placuta de circuit:



#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>

int rtc[7];

void setup()
{
Serial.begin(9600);
/*
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,05);
RTC.set(DS1307_HR,10);
RTC.set(DS1307_DOW,2);
RTC.set(DS1307_DATE,28);
RTC.set(DS1307_MTH,6);
RTC.set(DS1307_YR,10);
RTC.start();
*/
}

void loop()
{
RTC.get(rtc,true);

Serial.print(rtc[4]);
Serial.print("-");
Serial.print(rtc[5]);
Serial.print("-");
Serial.print(rtc[6]);
Serial.print(" ");
switch(rtc[3]) {
case 1:
Serial.print("Duminica ");
break;
case 2:
Serial.print("Luni ");
break;
case 3:
Serial.print("Marti ");
break;
case 4:
Serial.print("Miercuri ");
break;
case 5:
Serial.print("Joi ");
break;
case 6:
Serial.print("Vineri ");
break;
case 7:
Serial.print("Sambata ");
break;
default:
break;
}
Serial.print(rtc[2]);
Serial.print(":");
Serial.print(rtc[1]);
Serial.print(":");
Serial.print(rtc[0]);
Serial.println();

delay(1000);
}


Pentru setare initiala data si ora se scot comentariile din setup().
Biblioteca DS1307 se gaseste aici si se copiaza, ca de obicei, in folderul libraries al kitului Arduino.

Componentele necesare pot fi gasite, de exemplu, aici:
RTC
Quartz
Suport baterie

Update - 1 iulie 2010 : am facut montajul pe o bucatica de stripboard si nu a mai pierdut nici macar o secunda in 24 de ore ;-) intarzierea era de la faptul ca se misca cristalul...

8 comentarii:

  1. cum merge circuitul ? ati observat intarzieri ale ceasului ?

    RăspundețiȘtergere
  2. Cam 35-40 secunde in urma la 24 de ore...
    In datasheet zice ca:
    "The accuracy of the clock is dependent upon the accuracy of the crystal and the accuracy of the match between the capacitive load of the oscillator circuit and the capacitive load for which the crystal was trimmed. Additional
    error will be added by crystal frequency drift caused by temperature shifts. External circuit noise coupled into the oscillator circuit may result in the clock running fast."
    Mai e de studiat, oricum eu am luat quartzul de la cineva si nu stiu daca e cel mai potrivit.

    RăspundețiȘtergere
  3. Update: am cumparat un cristal despre care mi s-a zis ca se potriveste la DS1307 si l-am pus tot pe breadboard. Sub 3-4 secunde ramane in urma dupa mai bine de 24 ore! Si asta ar putea sa fie din cauza ca nu sta fix atunci cand misc breadboard-ul.

    RăspundețiȘtergere
  4. Buna ziua, am dat de blogul dumneavoastra de pe google cautand informatii despre protocolul i2c, si am observat ca si dumneavoastra folositi Arduino si as avea anumite intrebari despre placa, dar ma gandesc ca este locul ideal in acest post deci daca se poate sa imi dati si mie adresa dumneavoasta de e-mail sau messenger(alex_suceava_2005@yahoo.com). Multumesc cu tot respescul.

    RăspundețiȘtergere
  5. Dupa 3 luni si 20 de zile ceasul a ramas in urma doar cu 2 minute si 10 secunde :D
    Sa vedem cat il tine bateria...

    RăspundețiȘtergere
  6. Bateria ar trebui sa tina mult...si bine (!). In Datasheet scrie ca ICul trage din bateria de backup 5nA (nano!!!)

    RăspundețiȘtergere
  7. A tinut destul de mult... pana am dezlipit suportul de baterie si l-am reutilizat (cu tot cu baterie) in alt proiect. Bateria e buna si acum :)
    Imi pare rau ca n-am verificat diferenta ceasului inainte, dar apucasem sa scot bateria.

    RăspundețiȘtergere
  8. cum scot o biblioteca DS3231? Este "Uncategorized si blocheaza Wire.h?

    RăspundețiȘtergere