Blog (83)
Komentarze (2k)
Recenzje (1)
@cyrylloZegar RTC w Raspberry Pi

Zegar RTC w Raspberry Pi

02.04.2015 23:55

Zegar czasu rzeczywistego (RTC) znajduje się w niemal każdym urządzeniu, zaczynając od aparatów cyfrowych, smartfonów, tabletów, kończąc na komputerach i serwerach. Dzięki zegarowi RTC nasze urządzenia mają aktualną godzinę nawet gdy nie są podłączone do zasilania. Niestety, popularny Raspberry Pi jest pozbawiony zegara czasu rzeczywistego a czas pobiera z internetu podczas uruchamiania, a co jeśli nasze urządzenie nie ma połączenia z internetem? Tu właśnie przydaje się zegar RTC.

546528

Moduł zegara RTC

Opiszę sposób komunikacji oraz obsługi modułu zegara RTC z układem DS1307 poprzez protokół I2C.

Parametry modułu Tiny RTC

  • Zasilanie : 5V
  • Komunikacja: I2C
  • Pomiar: Rok, Miesiąc, Dzień tygodnia, Dzień miesiąca, Godzina, Minuta, Sekunda
  • Pobór prądu: 500nA
  • Pamięć nieulotna: 32kbit (24C32) + 56 bit (DS1307)
  • Koszt: 11-20zł

Schemat podłączenia

Do modułu należy dolutować goldpiny oznaczone modułem P1 (SDA, SCL, VCC, GND, reszta nie jest nam potrzebna)

123336
123337

Moduł zasilamy napięciem 5V oraz łączymy złącza SCL i SDA.

123338
123339

Konfiguracja

Zaczniemy najpierw od aktualizacji systemu a następnie aktualizacji firmware-u.

sudo apt-get update && sudo apt-get upgrade
sudo rpi-update

na koniec restartujemy malinę.

Instalujemy potrzebne pakiety

sudo apt-get install i2c-tools libi2c-dev

Następnie za pomocą narzędzia raspi-config włączamy obsługę i2c

sudo raspi-config

Wchodząc odpowiednio do Advence Option>I2C wybieramy dwukrotnie "YES"

123340
123341
123342
123343

A następnie restartujemy malinę

sudo reboot

Wykrywamy nasz moduł

sudo i2cdetect -y 1
546562

Nasz moduł RTC posiada adres 68 oraz 50, ale drugi adres jest przeznaczony dla pamięci EEPROM i nie będziemy go używać.

Jeśli posiadamy jeszcze starą malinę rev1 zamiast 1 podajemy 0 czyli i2cdetect -y 0 Jeśli wyskoczą jakieś błędy należy się upewnić czy mamy w pliku /etc/modules dodane wpisy: [list] [item]i2c-bcm2708[/item] [item]i2c-dev[/item] [/list] Jeśli ich brakuje należy je dodać.

Załadowujemy moduł zegara

sudo modprobe rtc-ds1307

A następnie jako root wykonujemy polecenie

sudo bash

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device 
Jeśli posiadamy jeszcze starą malinę (rev1) to zamiast i2c‑1 podajemy i2c‑0

Wychodzimy wpisując

exit

Teraz sprawdzimy datę i godzinę z naszego modułu DS1307

sudo hwclock -r

oraz datę i czas z systemu

date
546577

Jak widać obydwie daty różnią się między sobą. Aby zapisać datę z systemu do naszego modułu wystarczy wykonać polecenie

sudo hwclock -w

, które zapisuje datę i godzinę do modułu. Teraz po ponownym odczycie z modułu i systemu powinniśmy mieć identyczne datę i godzinę.


sudo hwclock -r && date
546582

Jeśli wszystko nam już działa to warto dodać moduł zegara, aby ładował się wraz z uruchomieniem systemu. Wpisujemy polecenie

sudo nano /etc/modules

i dodajemy poniższą linijkę

rtc-ds1307
546587

Następnie otwieramy plik /etc/rc.local

sudo nano /etc/rc.local

i dodajemy poniższe linijki


echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s

Przed linijką

exit 0
546594

Polecenie hwclock -s synchronizuje czas pobierając go z RTC do Maliny.

Od teraz przy każdym restarcie bez podłączonego internetu będziemy mieli aktualny czas.

Wpis powstał z potrzeby dodania zegara RTC do mojego robota Gimli.

Wybrane dla Ciebie
Komentarze (24)