SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

Kilka miesięcy temu rozglądałem się za uniwersalnym wyświetlaczem TFT LCD dla całej gromady urządzeń, które przewinęły się przez mojego Bloga. Niektóre z testowanych przeze mnie urządzeń posiadało swoje dedykowane wyświetlacze, jednak podłączenie ich do innych płytek stanowiło nie lada wyzwanie, a często okazywało się wręcz niemożliwe. Przez długi czas, posiłkowałem się wejściem HDMI w monitorze, ale częste przełączanie się pomiędzy obrazem z DVI, a HDMI za pomocą topornego menu OSD doprowadzało mnie do szewskiej pasji. Drugi monitor byłby rozwiązaniem, ale niestety na takowy nie mam za bardzo miejsca.

Hardkernel zaoferował w końcu coś, co przykuło moją uwagę - ODROID-VU będący 9 calowym, pojemnościowym ekranem dotykowym LCD TFT. Dziesięc punktów dotyku obsługiwane jest przez port USB w standardzie HID. Oznacza to, że będzie on działał praktycznie z każdym system operacyjnym, bez konieczności instalowania wymyślnych sterowników. Gniazdo HDMI pozwala na podłączenie go do praktycznie dowolnego urządzenia! Ekran zasilany jest dedykowanym zasilaczem 5V i pobiera maksymalnie prąd 1.2A.

Z tyłu urządzenia znajduje przeźroczyste tworzywo sztuczne chroniące elektronikę, które jest na tyle cienkie, aby pozwalało nam na dostęp do przycisków sterujących, bez konieczności jego odkręcania. Za pomocą przycisków możemy regulować głośność oraz jasność ekranu. Bardziej po prawo znajdziemy przełącznik, który pozwala nam na ustawienie EDID dla rozdzielczości 1280x720 lub 1280x800. Z prawej zaś strony znajdziemy pełnowymiarowe gniazdo HDMI3.5mm wyjście audio, micro USB oraz gniazdo zasilania.

ODROID-VU będę mógł również wykorzystać jako drugi "mini-monitor", nie zaśmiecając sobie ekranu głównego. Do wygody pracy na dwóch ekranach nikogo nie trzeba przekonywać, co prawda pełnowymiarowy monitor to nie jest, ale też jest przyjemnie :)

Jasność ekranu wynosi 250 cd/m2, natomiast kąty widzenia wynoszą odpowiednio 120º (60º + 60º) w poziomie i 100º (60º  + 40º) w pionie. Wartości te mogłyby być odrobinę lepsze, ale do moich zastosowań są zupełnie wystarczające. Pod tymi względami ekran jest bardzo zbliżony parametrami do wyświetlacza HU070CTP-HD, który miałem okazję poznać podczas recenzji New MarsBoard A20 - miał tylko on niższą rozdzielczość wynoszącą 1024x600 oraz złącze LVDS/RGB.

Reklama

Jetson TK1 posiada dwa zegary czasu rzeczywistego - pierwszy z nich znajduje się w kompaktowym układzie PMU AS3722, natomiast drugi obecny jest w układzie SoC Tegra TK1. W podstawowej dystrybucji Linux 4 Tegra, domyślnym zegarem jest ten pierwszy. W przypadku Jetsona jest taki problem, że nie posiada on podtrzymania bateryjnego dla zegarów - w praktyce oznacza to utratę ustawionej daty i czasu po zaniku zasilania. Oczywiście, kiedy zostaniemy połączeni z siecią, czas jest synchronizowany z serwerów NTP, ale kłopot pojawia się, gdy nie jesteśmy połączeni z Internetem.

Na pomoc przyjdzie nam opisywany już wcześniej układ DS3231 oraz magistrala I2C oraz moja kompilacja jądra The Grinch  w wersji minimum 19.3.4. O samym jądrze i dodatkowych możliwościach jakie przynosi przeczytacie na forum NVIDIA Developer Zone.

Do dyspozycji dostajemy cztery magistrale I2C, dwie w logice 1.8V i dwie w logice 3.3V:

  • GEN1_I2C (1.8V) na 50-pinowym złączu J3A1 i 75-pinowym złączu J3A2 (i2c-0)
  • GEN2_I2C (3.3V) na 50-pinowym złączu J3A1 (i2c-1)
  • PWR_I2C (1.8V) na 75-pinowym złączu J3A2 (i2c-4)
  • CAM_I2C (3.3V) na 75-pinowym złączu J3A2 (i2c-2)

Ponieważ DS3231 doskonale radzi sobie również przy napięciu zasilania 3.3V, skorzystamy z GEN2_I2C (i2c-1)

Linie sygnałowe podciągnięte są już do napięć zasilania poprzez rezystory 1kΩ, więc wystarczy praktycznie podłączyć nasz układ:

Jeśli podłączyliśmy wszystko poprawnie, powinniśmy zobaczyć nasz zegar RTC na magistrali i2c-1 pod adresem 0x68.

  1. # sudo i2cdetect -y -r 1
  1.      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
  2. 00:          -- -- -- -- -- -- -- -- -- -- -- -- --
  3. 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  4. 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  5. 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  6. 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  7. 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
  8. 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
  9. 70: -- -- -- -- -- -- -- --

Następnie możemy dołączyć DS3231 do magistrali:

  1. # echo ds3231 0x68 | sudo tee /sys/class/i2c-dev/i2c-1/device/new_device

Po tym zabiegu, powinien załadować się nam moduł rtc_ds1307. Możemy to sprawdzić za pomocą polecenia lsmod.

  1. Module                  Size  Used by
  2. rtc_ds1307             10881  0

Dodatkowo powinniśmy mieć już dostęp do naszego zegara poprzez nowo utworzone urządzenie /dev/rtc1 i uzyskać możliwość zapisania do niego aktualnego czasu:

  1. # sudo hwclock -w -f /dev/rtc1

Sprawdźmy, czy czas został zapisany i możemy go odczytać:

  1. # sudo hwclock -r -f /dev/rtc1
  2. Thu 21 Aug 2014 11:01:38 PM UTC  -0.434869 seconds

Na zakończenie, możemy dodać dwie linie do naszego skryptu rc.local w celu automatyzacji procesu przy starcie systemu:

  1. echo ds3231 0x68 | sudo tee /sys/class/i2c-dev/i2c-1/device/new_device
  2. sudo hwclock -s -f /dev/rtc1

Gdybyśmy chcieli, aby nasz DS3231 był domyślnym zegarem rtc0, musimy zablokować moduł rtc_as3722 w pliku /etc/modprobe.d/blacklist.conf dodając linię:

  1. blacklist rtc_as3722

Należy przy tym pamiętać, aby zmienić w pliku rc.local poprzedni wpis, aby odczyt odbywał się z rtc0 zamiast rtc1, ponieważ po tym zabiegu nasz układ będzie urządzeniem rtc0.

Już jakiś czas rozglądałem się za kamerą do mojego nowego projektu z wykorzystaniem platformy Jetson TK1 i potencjału jaki daje USB 3.0. Poszukiwania zakończyły się przekonaniem, że asortyment kamer pod port USB 3.0 jest obecnie bardzo ubogi. W trakcie moich poszukiwań natrafiłem na kamery firmy Point Grey, ale za najsłabszy model z obsługiwaną rozdzielczością 1288x964 liczą sobie prawie 400$, natomiast z rozdzielczością 2080x1552 cena rośnie do kwoty 600$ wzwyż.

Błąkając się po wyszukiwarce, natrafiłem na produkty indyjskiej firmy e-con Systems. Firma ta  ma w swojej ofercie kilka ciekawych i stosunkowo niedrogich kamer z możliwością podpięcia do portu USB 3.0 (ale i nie tylko). Jedną z takich kamer jest model oznaczony See3CAM_80 z sensorem CMOS OV8825 firmy OmniVision. Co prawda, nie jest to klasa sprzętu jaką reprezentuje Point Grey i kompletnie nie ma czego porównywać, ale można dostać namiastkę rozdzielczości Full HD z przyzwoitą ilośćią klatek za przyzwoitą cenę.

Decydując się na ten konkretny model z portem USB zależało mi na uzyskaniu możliwie dużej elastyczności, gdzie mógłbym ją w przyszłości wykorzystać również w innych celach. Wybierając wersję z interfejsem MIPI, ograniczyłbym się do węższego grona sprzętu, a wydatek trzeba jakoś zrekompensować. Jednak głównym kryterium jaki postawiłem poszukiwanej kamerze to zgodność ze standardem UVC, dzięki któremu nie są wymagane jakieś specjalnie sterowniki. Kamera praktycznie powinna zadowolić się standardowym modułem jądra Linuksa.

See3CAM_80 potrafi przechywić materiał zarówno HD (720p) jak i Full HD (1080p) z prędkością 30 klatek na sekundę - był to drugi warunek, jaki kamera musiała spełnić. Kamera obsługuje także automatyczną ekspozycję, ręczny lub automatyczny balans bieli, autofocus (automatyczny, ręczny lub pojedynczy). Do zadań specjalnych jest dostępna również pełna rozdzielczość 3264x2448 pikseli (ale tylko do 11 klatek na seknudę). Minimalna, deklarowana odległość do przedmiotu to 10 cm.

Format kodowania strumienia wideo stanowi jedynie nieskompresowany YUV2 - kamera nie obsługuje zatem formatu MJPEG. Trochę szkoda, ponieważ pozwoliłoby to osiągnąć spokojnie ponad 60 klatek na sekundę, kosztem pogorszenia jakośc i przerzucenia dekodowania strumienia na procesor. Kodowanie MJPEG posiada za to inny model See3CAMCU50, ale niestety w rozdzielczości Full HD i formacie YUV2 przetwarza tylko 15 klatek na seknduę i nie posiada funkcji autofocusu.

Jeśli chodzi o programowe możliwości, to kamera udostępnia funkcje takie jak: wybór ilości klatek na sukndę, odbicie lustrzane, odbicie, przycinanie i skalowanie. Jednak to co jest najważniejsze, to dostępne źródła zmodyfikowanego programu GUVCView do pełnej obsługi tej kamery.

Z przydatnych rzeczy kamera posiada jeszcze 10 pinowe gniazdo GPIO. Do naszej dyspozycji pozostają dwa piny ustawione jako wejście i dwa piny ustawione jako wyjście. Pozostałe 4 piny są kontrolowane przez rozszerzenie sterownika UVC do kontrolowania pracy kamery. czyl ręczny wyzwalacz autofocusa, przechwycenia obrazu czy opcjonalnej lampy błyskowej,

Jesteście ciekawi jak kamera sprawuje się z platformą Jetson TK1? Poniżej krótka demonstracja: