- dwa porty szeregowe UART (sygnały RXD, TXD, RTS, CTS, logika 3,3 V),
- dwa gniazda dla modułów komunikacyjnych zgodnych z Xbee,
- wsparcie ze strony dystrybucji Linuxa dla Raspberry Pi,
- komunikacja z RPi poprzez magistralę I2C i sygnał IRQ na linii GPIO24,
- możliwość wyboru jednego z czterech adresów magistrali I2C.
W module zastosowano sprzętowy, dwukanałowy UART dla magistrali I2C o oznaczeniu SC16IS752 firmy NXP, którego schemat wewnętrzny został pokazany na rysunku 1.
Układ jest wspierany przez dystrybucje Linuxa dla Raspberry Pi i umożliwia realizację transmisji z typowymi prędkościami, także w trybie z potwierdzeniem sprzętowym i elastyczną konfiguracją ramki przy zachowaniu niewielkiego poboru mocy.
Budowa i działanie
Schemat ideowy modułu został pokazany na rysunku 2. Układ przetwornicy obniżającej U3, typu ADP2108-3.3 dostarcza napięcia zasilającego kluczowe elementy płytki. Zastosowanie dodatkowej przetwornicy 3,3 V/400 mA podyktowane jest koniecznością dostarczenia stabilnego zasilania, także dla radiowych modułów XBEE. Układ U2 gwarantuje prawidłowe uruchomienie układu U1 po włączeniu zasilania.
Kontroler SC16IS752, dla wytworzenia sygnału zegarowego transmisji wymaga stabilnego generatora, który został zrealizowany poprzez obwód XT, C3, C4. Zwory AL/AH umożliwiają wybór jednego z czterech adresów magistrali I2C 0x48...0x4B. Przy wyborze adresu SC16IS752 należy zwrócić uwagę, czy nie dojdzie do kolizji w aplikacji z popularnymi termometrami I2C. Ponadto, do prawidłowej pracy układ wymaga obsługi przerwania IRQ, które doprowadzone jest do GPIO24.
Sygnały portów szeregowych doprowadzone są do złącz UARTA i UARTB, gdzie dostępne są tylko podstawowe sygnały RXD/TXD wraz z zasilaniem. Na złączach UA i UB dostępne są także sygnały CTS i RTS dla realizacji transmisji ze sprzętowym potwierdzeniem. Układy bramek U4 i U5 zapewniają sygnalizację aktywności portu szeregowego.
Moduły XBEE XA i XB mają możliwość opcjonalnego doprowadzenia sygnałów RTC i CTS zworami oznaczonymi RTA i CTA i RTB i CTB, ale każdorazowo należy upewnić się czy dany moduł obsługuje transmisję ze sprzętowym potwierdzeniem i czy na jego wielofunkcyjnych wyprowadzeniach sygnały potwierdzenia są odpowiednio przypisane. Dodatkowe diody RSSI1/RSSI2 umożliwiają ocenę siły sygnału radiowego, jeżeli moduł XBEE udostępnia odpowiedni sygnał. Dioda LD1 sygnalizuje obecność zasilania 3,3 V.
Montaż i uruchomienie
Moduł zmontowany jest na dwustronnej płytce drukowanej. Schemat płytki i rozmieszczenie elementów pokazuje rysunek 3. Sposób montażu jest klasyczny i nie wymaga dokładnego opisu.
Ustawienie adresu na magistrali I2C wykonujemy poprzez zwarcie odpowiednich pól AL i AH kroplami cyny. Domyślny adres modułu to 0x48 (zwora AL=V33, AH nie lutowana). Dla szybkiego sprawdzenia działania, moduł należy podłączyć do Raspberry Pi i skorzystać z biblioteki i2ctools. Moduł powinien być widoczny po odczycie magistrali poleceniem: i2cdetect -y 1, co pokazano na rysunku 4 (ustawiony adres bazowy 7-bitowy 0x48).
Gdy układ jest widoczny na magistrali I2C to można zainicjować jego sterownik, w tym celu edytujemy plik config.txt. Wpisujemy polecenie: sudo nano /boot/config.txt
Na końcu pliku dodajemy linię: dtoverlay=sc16is752-i2c,int_pin=24,addr=0x48
Po edycji i zapisaniu zmian należy zrestartować system poleceniem: sudo reboot now
Po uruchomieniu systemu, przy pomocy polecenia: i2cdetect -y 1. Sprawdzamy czy w miejscu adresu 0x48, pojawi się tekst UU, świadczący o kontroli urządzenia przez driver. Obecność dodatkowego portu szeregowego w systemie możemy sprawdzić poleceniem: ls /dev. Pośród urządzeń powinny znaleźć się ttySC0, ttySC1 odpowiadające portom A i B transmisji szeregowej.
Dla sprawdzenia poprawności transmisji można użyć emulatora terminala minicom lub picocom oraz konwertera USB/UART 3,3 V podłączonego do PC z programem Teraterm lub Terminal.
Łącząc odpowiadające sygnały RTX, TXD i GND modułu i konwertera pamiętając o logice 3,3 V, zestawiamy połączenie szeregowe Pi-PC.
Program minicom lub picocom instalujemy poleceniem: sudo apt-get install minicom lub sudo apt-get install picocom
Po instalacji uruchomiamy poleceniem: sudo minicom
Następnie ustalamy parametry transmisji (ttySC0, ANSI, 115200, 8, N, 1) zarówno w programie minicom jak i w terminalu PC. Menu minicoma wywołujemy kombinacją klawiszy CTRL A+Z, następnie opcje konfiguracji portu P, ustawień terminala T, konfiguracji minicom O, zgodnie z informacjami z rysunku 5. Po konfiguracji, wprowadzone z klawiatury znaki powinny być transmitowane w obu kierunkach pomiędzy Pi i PC, w zależności od aktywnego terminala.
Port ttySC1 sprawdzimy, dla odmiany, emulatorem picocom. Wpisujemy: sudo picocom -b 115200 /dev/ttySC1
W tym przypadku, także powinna być możliwa dwukierunkowa transmisja szeregowa.
Jeżeli wszystko działa możemy moduł zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1, R3, R4, R7, R8: 2,2 kΩ
- R2: 1 kΩ
- R5, R6: 2,2 kΩ
- R1, R3, R4, R7, R8: 2,2 kΩ
- R2: 1 kΩ
- R5, R6: 2,2 kΩ
- C1, C7, C10, C11, C12, C13: 0,1 µF/16 V SMD 0603
- C2 10 µF/16 V SMD 0603
- C3, C4 22 pF/16 V SMD 0603
- C5, C6, C8, C9 1 µF/16 V SMD 0603
- CE1, CE2, CE3 47 µF/10 V tantalowy SMD 3528
- LD1…LD5, PWR, RTA, RTX, RSSI1, RSSI2: LED SMD 0805
- U1: SC16IS752IPW128 (TSSOP28_065)
- U2: MCP100T-315I/TT (SOT-23)
- U3: ADP2108AUJZ (SOT-23-5)
- U4, U5: 74V1G00 (SC70-5)
- UA, UB: listwa SIP 6 prosta męska
- AH, AL: zwora PCB
- CTA, CTA1, RTA, RTA1: zwora SMD 0603
- GPIO: złącze żeńskie IDC40
- L1: 1 µH dławik SMD MAPI3020
- UARTA, UARTB: złącze JST4 1 mm
- XA, XB: podstawka XBEE, listwa żeńska 10 pin 2 mm
- XT: rezonator kwarcowy 14,7456 MHz CFPX-180 3,2×2,5 mm