*/ ?>

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

Što je RTC?

RTC je skraćenica za Real Time Clock iliti, u slobodnom prijevodu, sat stvarnog vremena. Jednostavno, RTC je računalni sat koji prati vrijeme. Izraz se koristi kako bi ga razlikovali od hardwerskih satova (timera) koje koristimo za signale i upravljanje digitalnom logikom. I takve timere možemo upotrijebiti za praćenje vremena, iako brojni su benefiti RTC-a: mala potrošnja struje, oslobađanje memorije, veća preciznost, skraćivanje startup vremena povezivanja na GPS uspoređivanjem trenutnog vremena i dr. Vjerovatno ste primjetili kako većina RTC satova spominje frekvenciju 32.768 kHz.Poseban je što upravo čini 2^15 ciklusa po sekundi, a uglavnom se postiže oscilatorom.

PCF85063A

Evo zašto smo odabrali PCF85063A za naš breakout. Od očekivanih stvari, IC je prilagođen maloj potrošnji (22uA pri 3.3V), čuva za nas sat i datum uključujući dan u tjednu i godinu, brojne automatizirane kalibracije, two-wire komunikaciju, širok spektar napajanja (0.9V - 5.5V), POR i drugo. Ajmo sada zašto je najbolji: Alarm prograbilan po sekundama, minutama, satima, danima i/ili danima u tjednu s mogućnosti interrupta, timer kojeg je moguće postaviti od 244uS do 4 sata i 15 minuta ponovno s interruptom, programabilni clock-out i drugima (pogledaj datasheet) pa i cijeni. Baterija služi kako bi vrijeme, datum, alarmi i ostale postavke ostali spremljeni na RTCu. Ne zaboravistaviti jednu!

Kako povezati?

Breakout povezujemo kao i svaki I2C uređaj do sada, pogledaj skicu. Ponavljamo, plus stranu spajamo do maksimalno 5.5V, a INT pin breakout je opcija za drugi primjer arduino koda u nastavku. pcf85063 shema

Arduino kod

Za korištenje modula trebamo preuzeti Arduino biblioteku s linka. Kada preuzmemo zip datoteku potrebno ju je raspakirati i dodati u Arduino library mapu. Ako ne znate gdje se nalazi Arduino library mapa pogledajte tutorijal kako instalirati novu biblioteku. Prikazat ćemo osnovni primjer korištenja biblioteka postavljanje vremena i datuma s prikazom. Nakon toga i postavljanje alarma, kontrolera u sleep mode te buđenje pomoći interrupta. Ostala primjere korištenja pronađi, nakon instaliranja biblioteke, u Arduino IDE File-Examples-PCF85063A.
#include "PCF85063A.h"

PCF85063A rtc;
 
void setup() {  
  Serial.begin(115200);  

  // postavi vrijeme -> (sat, minuta, sekunda)
  rtc.setTime(6, 54, 00);           // 24H mode, ex. 6:54:00
  //  postavi datum -> (dan u tjednu, dan, mjesec, godina)
  rtc.setDate(6, 16, 5, 2020);      // 0 za NEdjelju, ex. Subota, 16.5.2020.
}   
  
void loop() {  
  printCurrentTime();
  delay(1000);
}  

void printCurrentTime() {
  switch( rtc.getWeekday() )
  {
    case 0:
      Serial.print("Nedjelja, ");
      break;
    case 1:
      Serial.print("Ponedjeljak, ");
      break;
    case 2:
      Serial.print("Utorak, ");
      break;
    case 3:
      Serial.print("Srijeda, ");
      break;
    case 4:
      Serial.print("Cetvrtak, ");
      break;
    case 5:
      Serial.print("Petak , ");
      break;
    case 6:
      Serial.print("Subota , ");
      break;
  }

  Serial.print(rtc.getDay()); Serial.print(".");
  Serial.print(rtc.getMonth()); Serial.print(".");
  Serial.print(rtc.getYear()); Serial.print(". ");
  Serial.print(rtc.getHour()); Serial.print(":");
  Serial.print(rtc.getMinute()); Serial.print(":");
  Serial.println(rtc.getSecond());
}
Primjer koda s postavljanjem alarma i aktivacije vanjskog interrupta koji budi Croduino iz Sleep moda.
#include "PCF85063A.h"
#include "PCF85063A.h"
#include <avr/sleep.h>  

PCF85063A rtc;
  
int wakePin = 2;                 // pin used for waking up  

void wakeUpNow() {  
  sleep_disable();         // first thing after waking from sleep: disable sleep...  
  detachInterrupt(0);      // disables interrupt 0 on pin 2 so the wakeUpNow code will not be executed during normal running time.  
}  
  
void setup() {  
  Serial.begin(115200);
  
  pinMode(wakePin, INPUT_PULLUP);  
  pinMode(LED_BUILTIN, OUTPUT);     

  //  setTime(hour, minute, sec);
  rtc.setTime(6, 54, 00);           // 24H mode, ex. 6:54:00
  //  setDate(weekday, day, month, yr);
  rtc.setDate(6, 16, 5, 2020);      // 0 for Sunday, ex. Saturday, 16.5.2020.
  //  setAlarm(alarm_second, alarm_minute, alarm_hour, alarm_day, alarm_weekday);
  rtc.setAlarm(15, 54, 99, 99, 99); // use 99 if no alarm
  checkAlarm();

  Serial.print("Now is:" );
}   
  
void loop() {  
  printCurrentTime();
  Serial.println("Entering sleep mode in 1 second");
  delay(1000);
  
  sleepNow();     // sleep function called here
  
  Serial.print("Interrupt triggered on: ");  
}  

void printCurrentTime() {
  switch( rtc.getWeekday() )
  {
    case 0:
      Serial.print("Sunday , ");
      break;
    case 1:
      Serial.print("Monday , ");
      break;
    case 2:
      Serial.print("Tuesday , ");
      break;
    case 3:
      Serial.print("Wednesday , ");
      break;
    case 4:
      Serial.print("Thursday , ");
      break;
    case 5:
      Serial.print("Friday , ");
      break;
    case 6:
      Serial.print("Saturday , ");
      break;
  }

  Serial.print(rtc.getDay()); Serial.print(".");
  Serial.print(rtc.getMonth()); Serial.print(".");
  Serial.print(rtc.getYear()); Serial.print(". ");
  Serial.print(rtc.getHour()); Serial.print(":");
  Serial.print(rtc.getMinute()); Serial.print(":");
  Serial.println(rtc.getSecond());
}

void checkAlarm() {
  Serial.print("Alarm is set to match: ");
  switch( rtc.getAlarmWeekday() )
  {
    case 0:
      Serial.print("Sunday , ");
      break;
    case 1:
      Serial.print("Monday , ");
      break;
    case 2:
      Serial.print("Tuesday , ");
      break;
    case 3:
      Serial.print("Wednesday , ");
      break;
    case 4:
      Serial.print("Thursday , ");
      break;
    case 5:
      Serial.print("Friday , ");
      break;
    case 6:
      Serial.print("Saturday , ");
      break;
    default:
      break; // for getAlarmWeekday=99 alarm is not set for a weekday, donnot print
  }

  if( rtc.getAlarmDay()!=99 )  { Serial.print("Date: ");   Serial.print( rtc.getAlarmDay() );  }
  if( rtc.getAlarmHour()!=99 ) { Serial.print(" hour: ");  Serial.print( rtc.getAlarmHour() ); }
  if(rtc.getAlarmMinute()!=99) { Serial.print(" minute: ");Serial.print(rtc.getAlarmMinute()); }
  if(rtc.getAlarmSecond()!=99) { Serial.print(" second: ");Serial.print(rtc.getAlarmSecond()); }

  Serial.println("");
}

void sleepNow() {
    sleep_enable();                         // enables the sleep bit in the mcucr register  
    attachInterrupt(0,wakeUpNow, LOW);      // use interrupt 0 (pin 2) and run function 
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);    // sleep mode is set here  
    digitalWrite(LED_BUILTIN, LOW); 
    sleep_cpu();                            // activating sleep 
     
    // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
    digitalWrite(LED_BUILTIN, HIGH);  
} 

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.