Skip to content

Ceas cu RTC PCF8583

1. Cuvant inainte

Continuare din pagina “Transformarea in Sanguino“. Exemplul asta foloseste consola pentru afisare si setare data si ora. Pentru setare, se trimite un sir de caractere din consola avand urmatorul format:

YYMMDDhhmmss;

Ceea ce, pus in practica, ar arata asa: 100925144300; Sirul se termina obligatoriu cu caracterul „;” care interpretat de firmware inseamna sfarsit setari. Programul trece la prelucrarea datelor din sir, seteaza ceasul si trece la executarea rutinei principale. Deci,

  • 10 – Anul 2010
  • 09 – luna Septembrie
  • 25 – ziua
  • 14 – ora
  • 43 – minutul
  • 00 -secunda
  • ; – terminator  de sir (incheie setarile)

2. Setare placa

De data aceasta nu avem nevoie sa facem nici o conexiune, asa ca scoatem eventualele fire ramase de la proiecte precedente. De asemenea, nu avem nevoie nici de LCD. Circuitul integrat PCF8583 este deja conectat fizic la portul I2C al microcontrollerului. Conectam cablul USB la PC.

3. Schita

Copiaza in Arduino IDE urmatoarea schita:

#include <Wire.h> // necessary, or the application won't build properly
#include <stdio.h> 
#include <PCF8583.h> 
/*****************************************************************************
 *  read/write serial interface to PCF8583 RTC via I2C interface
 *
 *  Sanguino digital pin 16 - I2C SCL (PCF8583 pin 6)
 *  Sanguino digital pin 17 - I2C SDA (PCF8583 pin 5)
 *
 *  You can set the clock by sending the type in this format YYMMDDhhmmss;
 *  the semicolon on the end tells it you're done...
 *
 ******************************************************************************/

int correct_address = 0;
PCF8583 p (0xA2);	
void setup(void){
  Serial.begin(9600);
  Serial.print("booting...");
  Serial.println(" done");
}

void loop(void){
  if(Serial.available() > 0){
       p.year= (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48)) + 2000;
       p.month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.day = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       // Use of (byte) type casting and ascii math to achieve result.  
       p.second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); 

       if(Serial.read() == ';'){
         Serial.println("setting date");
         p.set_time();
       }
  }

  p.get_time();
  char time[20];
  sprintf(time, "%02d/%02d/%02d %02d:%02d:%02d",
	  p.year, p.month, p.day, p.hour, p.minute, p.second);
  Serial.println(time);
  delay(990);
}

Dupa compilare, incarca programul in placa si porneste terminalul. Introdu secventa de caractere ca in capitolul 1 si trimite-o catre placa. Vezi mai jos cum trebuie sa fie.

4. Rezultate

Aplicatia porneste si afiseaza timpul (placa mea nu are bateria inserata). Clic pentru marire.

Sirul de caractere pentru setare data si ora a fost introdus. Clic pentru marire.

Aplicatia afiseaza timpul actualizat. Clic pentru marire.

Lasă un comentariu

Va rog, nu folositi limbaj de messenger. Multumesc!

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s

%d blogeri au apreciat asta: