Portál AbcLinuxu, 30. dubna 2025 10:09
Tak jsem si taky pořídil na hraní malý ARMový kompjůtr. Zatím pro něj nemám nějaké smysluplné využití, prostě je to „na hraní“. Třeba se časem naskytne smyslupný úkol, který by mohl zastávat v Linuxem zamořené domácnosti kde má tučňák pod palcem vše od routeru až po HTPC.
Pro začátek jsem si koupil znakový LCD 20x4, 8 bit expandér pro I2C, hodiny reálného času a k tomu potřebné drobnosti pro zapojení. Pokusím se tady na blogu udělat pár návodů na stavbu obvodů ovládaných přes GPIO Raspberry Pi. Jako první obvod jsem rozběhal hodiny, jednak pro ně není potřeba nic programovat a hlavně jejich funkce je jasná - Malina hodiny na desce nemá a tak po startu žije v roce 1970 ;). Pravda že stačí srovnat čas s ntp serverem, ovšem hardwarové řešení se nezrtatí. Osobně jsem zvolil jako hodiny s kalendářem čip PCF8583, protože se dal snadno sehnat, cena je kolem 60 Kč, druhou nejdražší položkou je akumulátor počítejte 40 Kč, ostatní - rezistory, kondenzátory dioda, krystal jsou korunové položky.
Pro jistotu malé varování: postup stavby vás může podráždit, zbavit zdravého rozumu a vyvolat poruchy nervového systému a střev, nesprávné zapojení může poškodit, nebo dokonce zničit Raspberry Pi a použité součástky. Ani za jedno nenese autor návodu žádnou zodpovědnost, vše děláte na vlastní riziko.
V přílohách je schéma s vypsanými hodnotami jednotlivých součástek a fotka, jak to vypadá zapojené, ovšem jen v nepájivém poli, časem to přenesu na univerzální tišťák. Pro jistotu ještě soupis materiálu:
Hodnota rezistoru zapojeného v sérii s akumulátorem se může lišit, záleží na doporučeném nabíjecím/udržovacím proudu, podle dokumentace k akumulátoru zvolte vhodný rezistor, jinak riskujete snížení životnosti, případně poškození. Akumulátor zapojujte až jako poslední, před připojením si zkontrolujte, zda nějakým omylem není v obvodu zkrat, a to i na straně kde se bude připojovat GPIO, protože 5 V větev je v Malině přímo připojena na napájecí konektor a zkratem by mohlo dojít k poškození. Z portu GPIO budeme potřebovat piny:
Na Raspberry Pi používám distribuci Arch Linux ARM, ale postup rozchození bude na ostatních distribucích podobný. Nejprve je třeba zjisti, jestli jsou zavedené jaderné moduly i2c_dev
a i2c_bcm2708
$ lsmod | grep i2c i2c_dev 5527 0 i2c_gpio 1981 0 i2c_algo_bit 5467 1 i2c_gpio i2c_bcm2708 3557 0
Nyní zjistíme, jestli na I2C sběrnici něco vidíme, to nejlépe uděláme pomocí utility i2cdetect
, Arch Linux ji obsahuje balíček i2c-tools:
# i2cdetect 0 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-0. I will probe address range 0x03-0x77. Continue? [Y/n] 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
ejhle, něco tam je na adrese 0x50
! Takže budeme pokračovat tím, že jádru řekneme o co jde
# echo pcf8583 0x50 > /sys/class/i2c-dev/i2c-0/device/new_device
a zavedeme patřičný jaderný modul:
modprobe rtc-pcf8583
v systémovém logu by se mělo objevit něco takovéhoto:
# tail -n2 /var/log/everything.log Oct 23 16:46:25 raspberry kernel: [ 1848.796271] i2c i2c-0: new_device: Instantiated device pcf8583 at 0x50 Oct 23 16:46:25 raspberry kernel: [ 1848.847780] pcf8583 0-0050: rtc core: registered pcf8583 as rtc0
teď už je skoro vyhráno. Pro komunikaci s hodinami se používá příkaz hwclock
, na poprvé ovšem nemůžeme čekat nějaké zázraky, registry čipu obsahují naprosté nesmysly:
$ hwclock hwclock: The Hardware Clock registers contain values that are either invalid (e.g. 50th day of month) or beyond the range we can handle (e.g. Year 2095).
situace se ná napravit zapsáním aktuálního času a jak je vidět, tak už potom vše funguje:
# hwclock -w && hwclock Tue 23 Oct 2012 04:54:54 PM CEST -0.979555 seconds
ten skoro vteřinový rozdíl je způsoben tím, že hodiny ještě nestihly „tiknout“. S přesností není žádný problém, za 24 hodin se rozcházely v rozmezí jedné vteřiny. Pro nastavení systémového času podle RTC se použije příkaz:
# hwclock -s
A to je vše přátelé, init skript pro nastavení času nechám na pozorném čtenáři ;).
Tiskni
Sdílej:
Čipů RTC je jako máku, koukam, že při použití by odpadly skoro všechny součástky kromě krystalu a baterie. Ovšem s dostupností na GME je to trochu na šťíru, ale díky za tip.
No ono má určité kouzlo, když si to člověk postaví sám...
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.