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.
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)
Moduł zasilamy napięciem 5V oraz łączymy złącza SCL i SDA.
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"
A następnie restartujemy malinę
sudo reboot
Wykrywamy nasz moduł
sudo i2cdetect -y 1
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
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
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
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
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.