Raspberry Pi LCD Menu – Przygotowywanie platformy testowej

Joystick podłączony poprzez konwerter A/C

Joystick który wybrałem to urządzenie analogowe. Manipuluje ono napięciem referencyjnym VCC na dwóch wyjściach, po jednym dla osi X i Y. Niestety Raspberry Pi, nawet najnowsze (wersja 3), nie posiada wbudowanego konwertera A/C, musimy użyć zewnętrznego modułu. W moim przypadku użyłem modelu PCF8591, na gotowej płytce z wyprowadzeniami. Płytka zawiera potencjometr, termistor i fotorezystor, jednak nie nie będę z nich korzystać w tym projekcie. Urządzenie komunikuje się z masterem za pomocą protokołu I2C.

Z tymi dodatkowymi elementami wiąże się pewna historia. Po podłączeniu wszystkiego i odpaleniu napisanego przeze mnie kodu testującego zauważyłem, że przy zasilaniu joysticka napięciem 3,3V miałem odpowiednio 2,6 V i 2,8 V w pozycjach środkowych. Przy wychylaniu gałki w odpowiednią stronę, wartości poprawnie się zwiększały w kierunku 3,3V lub 0. Myślałem, że jest to spowodowane przez fakt, że joystick jest przeznaczony do używania z zasilaniem 5V. Okazało się jednak, że powodem dziwnych napięć w pozycji środkowej były zworki zwierające termistor i rezystor do wejść analogowych. Usunięcie zworek załatwiło problem, a napięcia domyślne oscylują już w okolicach 1,7V, tak jak logika nakazuje.

Aby aktywować i łatwo obsługiwać I2C w Raspberry pi warto zainstalować 2 poniższe paczki:

Pierwsza z nich to biblioteka do komunikacji I2C, druga natomiast jest zbiorem konsolowych narzędzi m. in. do debugowania połączenia I2C. W najnowszych płytkach do włączenia komunikacji w tym protokole wystarczy aktywacja poprzez domyślną aplikację konsolową:

Odpowiednia opcja znajduje się w menu Advanced -> I2C.

TYLKO starsze płytki: Okazuje się jednak, że w starszych modelach RPI (nie wiem jak z Raspberry Pi 2, być może też) twórcy oprogramowania zrobili o jedną zmianę w kodzie za dużo, przez co sama aktywacja poprzez raspi-config nie wystarcza. Po dość długawym googlaniu dowiedziałem się że trzeba dodatkowo ręcznie włączyć 2 moduły:

Dzięki temu, problem u mnie zniknął. Jeśli chcemy mieć I2C włączone od razu po rozruchu systemu, należy te 2 polecenia dodatkowo umieścić w autostartcie.

Jeśli wszystko poprawnie działa, jako efekt komendy:

powinna wyświetlić się tabelka, w której jedno z pól ma 2 znaki zamiast kresek. Te 2 znaki to adres waszego podłączonego peryferium.

W razie problemów, dość dobry i dokładny opis konfiguracji I2C jest dostępny na stronie adafruit.

Kiedy wszystko już podłączymy, zainstalujemy, aktywujemy i rozwiążemy powstałe problemy pozostaje nam tylko włączyć kod testowy:

Efekt podczas machania gałką joysticka powinien wyglądać mniej więcej tak: