Schemat ideowy modułu pokazano na rysunku 1. Wśród jego parametrów można wymienić następujące funkcjonalności:
- 14×GPIO o poziomie logicznym CMOS 3,3 V.
- 8×GPIO z konwerterem poziomów do standardu CMOS 5 V.
- Złącza UART, I²C.
- Zegar czasu rzeczywistego z podtrzymaniem bateryjnym DS1338.
- 4×wejście analogowe z 12-bitową rozdzielczością.
- Złącze dla modułów komunikacyjnych zgodnych pod względem wyprowadzeń z Xbee.
- Zasilacz impulsowy 3,3 V dla modułów Xbee.
Wszystkie złącza zgodne są ze standardem Arduino Bricks, co umożliwia bezpośrednie wykorzystanie szerokiej gamy czujników, przetworników i elementów wykonawczych.
Sygnały w standardzie 3,3 V ze złącza GPIO są doprowadzone do złącza DIO i razem ze złączami V33 i GND stanowią blok zgodny z Arduino Bricks 3,3 V. Złącze DIO ma powielone zasilanie na wyprowadzeniach 15 i 16 ułatwiając wyprowadzenie sygnałów wraz z zasilaniem taśmą SIP16. Taka konwencja jest zastosowana do wszystkich złącz GPIO.
Sygnały z magistral szeregowych w standardzie 3,3 V mają odrębne złącza nazwane UART i I²C. Układ U4 pełni funkcję konwertera poziomów 3,3 V/5 V ułatwiając bezpośrednie wykorzystanie części wyprowadzeń GPIO do przyłączenia sygnałów 5-woltowych. Na płytce zamontowano również układ scalony zegara czasu rzeczywistego DS1338 (kompatybilny z DS1307) z podtrzymaniem bateryjnym, niezbędny w aplikacjach sterujących.
Ze względu na brak wejść analogowych w Raspberry Pi, kolejnym elementem modułu jest 4-wejściowy 12-bitowy przetwornik A/C typu ADS1015. Obwód C2,3, L1 filtruje zasilanie przetwornika. Sygnały wejściowe doprowadzone są do złącza AI, zakres napięcia wejściowego w konfiguracji asymetrycznej to 0...3,3 V.
Ostatnim elementem modułu jest złącze dla modułów komunikacyjnych zgodnych z Xbee. Ze względu na zróżnicowane wymagania odnośnie do standardów komunikacji szeregowej, w porównaniu do modułu komunikacji RaspbPI_Com dla Raspberry Pi A/B, zrezygnowałem z umieszczania wszystkich układów interfejsów na płytce modułu.
Zawsze okazuje się, że część jest niewykorzystana lub co gorsza - jakiegoś standardu brakuje. W kolejnym artykule zostanie kilka typów modułów zgodnych z Xbee, umożliwiających różne sposoby komunikacji szeregowej. Taki podział umożliwia wykorzystanie ich także do współpracy z PC, Launchpadem, Arduino i wszystkimi platformami prototypowymi mającymi złącze lub moduł rozszerzający Xbee.
Oprócz sygnałów UART, do wyprowadzeń Xbee jest doprowadzony przycisk RES (reset) oraz dioda LD1 sygnalizująca poziom sygnału odbieranego RSSI (dla modułów radiowych). Ze względu na spory pobierany przez Xbee prąd, zastosowałem odrębny zasilacz 3,3 V z układem ADP2108.
Rozmieszczenie elementów na płytce drukowanej pokazano na rysunku 2. Jest ona zgodna mechanicznie z Raspberry B+, aby umożliwić wykorzystanie złącz wyświetlacza i kamery. Stabilność mechaniczną zapewniają cztery otwory mocujące. Montaż nie wymaga komentarza.
Aby uniknąć pomyłek, obszar z sygnałami zgodnymi z 5 V jest wyróżniony soldermaską. Należy pamiętać, że podłączenie sygnałów przekraczających 3,3V do pozostałych wyprowadzeń GPIO Raspberry Pi nieodwracalnie je uszkodzi. Ze względu na współdzielenie sygnałów interfejsu szeregowego UART i I²S przez moduł Xbee, złącza UART oraz I²C, należy zwrócić uwagę, aby nie wykorzystywać ich równocześnie.
Moduł nie wymaga uruchamiania. Należy jedynie skonfigurować system do obsługi poszczególnych peryferiów. W celu wykorzystania RTC konieczne jest dodanie obsługi magistrali I²C. W tym celu sprawdzamy czy w pliku sudo nano /etc/modules znajduje się definicja i2c-dev. Jeżeli nie, to musimy ją dodać, zapisać zmiany i zrestartować PI. Po uruchomieniu należy pobrać narzędzia odpowiadające za obsługę I²C:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools
Po zainstalowaniu, w pierwszej kolejności sprawdzamy w konsoli prawidłowe działanie I²C sudo i2cdetect -y 1. Pod adresem 0x68 powinno pojawić się urządzenie - DS1307, (pod adresem 0x48 jest widoczny ADS1015). Następnie ładujemy moduł zegara:
sudo modprobe rtc-ds1307
sudo bash echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
Ustawienia czasu i daty systemowej dokonujemy poleceniem sudo date. Zapis czasu systemowego do RTC wykonujemy poleceniem sudo hwclock -w. Sprawdzenie poprawności zapisu sudo hwclock -r. Aby czas systemowy po uruchomieniu PI był automatycznie aktualizowany przez RTC, musimy w pliku sudo nano /etc/modules dodać linię rtc-ds1307, a w pliku sudo nano /etc/rc.local linie:
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
sudo hwclock -s
przed poleceniem exit 0. Przy kolejnym uruchomieniu PI, czas zostanie pobrany z RTC bez synchronizacji z zegarem sieciowym. Dla sprawdzenia gpio można wykorzystać WebIOPI. W tym celu należy pobrać i zainstalować https://code.google.com/p/webiopi/wiki/DOWNLOADS. Wersja 0.7.0 nie ma obsługi rozszerzonego GPIO, więc należy wykonać pewne modyfikacje plików źródłowych. W pliku ./python/utils/version.py file należy edytować linię 11 i dopisać do niej wartości pogrubione: _MAPPING[2] = ["V33", "V50", 2, "V50", 3, "GND", 4, 14, "GND", 15, 17, 18, 27, "GND", 22, 23, "V33", 24, 10, "GND", 9, 25, 11, 8, "GND", 7, "DNC", "DNC" , 5, "GND", 6, 12, 13, "GND", 19, 16, 26, 20, "GND", 21] oraz edytować plik ./htdocs/webiopi.js. Trzeba w nim odszukać:
linię 76 zawierającą this.PINS = Array(27); i zamienić ją na this.PINS = Array(41);
linię 560 zawierającą for (var pin=1; pin<=26; pin++) i zamienić ją na for (var pin=1; pin<=40; pin++).
Następnie należy skompilować zmiany poleceniem sudo ./setup.sh skip-apt. Po kompilacji skonfigurować Webiopi do obsługi przetwornika ADS1015. W tym celu, w pliku /etc/webiopi/config w sekcji przetworników ADC dodać wpis ads0=ADS1015 zapisać zmiany i uruchomić serwer Webioipi sudo /etc/init.d/webiopi start. Po uruchomieniu przeglądarki internetowej i wpisaniu adresu http://localhost:8000/ (użytkownik: webiopi, hasło: raspberry) w linku GPIO-header powinna być widoczna zaktualizowana lista GPIO (rysunek 3). Po wybraniu linku Device Monitor, powinny być widoczne odczyty z wejść ADS1015, jak na rysunku 4.
Opis modułów komunikacyjnych zostanie umieszczony w kolejnym artykule.
Adam Tatuś, EP