SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

Zapraszam do kolejnej części artykułu na temat modułu IMU GY-86. Tym razem Będziemy omawiać 3-osiowy akcelerometr i 3-osiowy żyroskop MPU6050. Między innymi. poznamy zasadę działania filtru Kalmana jak i obsługę sprzętowych przerwań przy detekcji ruchu i upadku swobodnego.

Przeczytaj artykuł: 3-osiowy żyroskop i akcelerometr MPU6050

Reklama

Iteaduino Lite to jeden z wielu dostępnych klonów Arduino, jednak  bez wątpienia zasługuje on na kilka dodatkowych słów.  Płytka została wyposażona w autorski, 8-bitowy układ LGT8F88A, który śmiało może konkurować z mikrokontrolerem ATmega88. Najważniejszą cechą tego układu jest obsługa 131 instrukcji, których 80% jest wykonywana w jednym cyklu zegara. Wielkim atutem jest również zdolność pracowania z częstotliwością 32MHz, a więc dwukrotnie większą niż tą, którą znamy chociażby z Arduino UNO z ATmega328.

Zobacz cały artykuł: https://www.jarzebski.pl/arduino/arduino-i-klony/iteaduino-lite-lgt8f88a.html

Czasami zdarza się sytuacja, w której potrzebujemy uruchomić oprogramowanie napisane wyłącznie pod architekturę x86 na komputerze wyposażonym w procesor ARM. Do niedawna jedynym rozwiązaniem było skorzystanie z QEMU i obrazu systemu operacyjnego. Firma Elbrus Technologies opracowała oprogramowanie Exagear Desktop, które pozwala na uruchomienie aplikacji x86 bezpośrednio w naszym systemie, bez konieczności uruchomienia maszyny wirtualnej, z której korzystanie może być nieco niewygodne. Dodatkową zaletą, która wymienia producent jest prędkość działania, większa czterokrotnie od rozwiązania QEMU. Testy jakie przeprowadzono na ODROID-XU z procesorem Exynos5 Octa Cortex™-A15 1.6Ghz wyglądają naprawdę zachęcająco:

Wyniki SysBench / GeoBench
 

Dzięki Exagear Desktop możemy również zainstalować Wine i mieć dostęp dla programów, przeznaczonych na system operacyjny Windows.

Instalacja odbywa się poprzez umieszczenie klucza licencyjnego w katalogu z plikiem instalacyjnym i jego uruchomieniem. Niestety aktywacja klucza odbywa się przez Internet, który zostaje przypisany do konkretnego urządzenia. Oznacza to, że nie będzie możliwe wykorzystanie go na innym. Na chwilę obecną klucz licencyjny został przeceniony z kwoty 30$ na 15$ - warto więc zainteresować się jego kupnem.

Plik instalacyjny zawiera specjalnie przygotowany system Ubuntu 12.04 LTS, który instalowany jest do katalogu /opt. Wydając polecenie exagear, zostajemy przeniesieni do chrootowanego 32-bitowego systemu w architekturze x86, w którym możemy operować jak w standardowej dystrybucji Ubuntu. Należy zwrócić uwagę, czy nasze jądro posiada moduł binfmt_misc oraz podział pamięci wirtualnej w konfiguracji 3G/1G. Nasz procesor musi być co najmniej w architekturze ARMv7 oraz wspierać instrukcje  NEON oraz VFP32.

Po wejściu w środowisko x86 otrzymujemy do dyspozycji wirtualny procesor i686 taktowany zegarem 1GHz i obsługą instrukcji takich jak: MMX, SSE, SSE2, SSE4_1.

Na pierwszy ogień postanowiłem zainstalować program Eagle firmy CadSoft. Po doinstalowaniu wymaganych pakietów, mogłem już przystąpić do pracy.

CadSoft Eagle uruchomione na platformie Jetson TK1

Skoro mamy dostęp do x86 to dlaczego nie spróbować Wine i pokusić się o uruchomienie programu dla systemu Windows? Nic prostszego, apt-get install wine i już możemy instalować programy. Dla przykładu popularny Total Commander.

Niestety nie ma róży bez kolców. W obecnej wersji nie jest możliwe korzystanie z oprogramowania, które wymaga bezpośredniego dostępu do modułów jądra oraz skorzystanie z akeceleracji OpenGL. Co ciekawe udało mi się zainstalować Steam, jednak dalsza zabawa nie jest możliwa, ponieważ wykrywa on własnościowy sterownik NVIDIA w nieobsługiwanej wersji 1.4 (2.1.2). Pech chciał, że numeracja sterownika dla Tegra TK1 jest diametralnie inna, niż tych standarowych układów. Gdyby tylko udało się podmienić numer wersji na minium 304.22, to kto wie? :) Maszyna parowa jak się patrzy.

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.

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.