Interfejs GPIO dla komputera PC

Interfejs GPIO dla komputera PC

Od czasu usunięcia interfejsu LPT z komputerów PC, proste sterowanie cyfrowymi wyprowadzeniami I/O z poziomu komputera stało się utrudnione. Zaprezentowany moduł powstał po to, aby umożliwić łatwe monitorowanie lub sterowanie kilku sygnałów cyfrowych przy pomocy komputera PC. Komunikacja odbywa się poprzez interfejs USB, a zastosowanie gotowego mostka UART-GPIO/I2C zwalnia konstruktora z potrzeby tworzenia aplikacji dla mikrokontrolera, przenosząc oprogramowanie na komputer PC.

Zaprezentowany układ zawiera specjalizowany, gotowy mostek UART-GPIO/I2C typu SC18IM700 firmy NXP, którego struktura wewnętrzna została pokazana na rysunku 1. Układ komunikuje się z urządzeniem nadrzędnym poprzez standardowy interfejs szeregowy UART przy użyciu komunikacji znakowej ASCII. Interfejs GPIO dostępny jest poprzez rejestry wewnętrzne układu, każde z wyprowadzeń może pracować w czterech trybach: quasi-dwukierunkowym (jak w PCF8574), wejściowym oraz wyjściowym w konfiguracji OD lub Push-Pull. Dodatkowo układ udostępnia magistralę I2C w trybie odczytu i zapisu z możliwością zapisu pojedynczego lub wielobajtowego z 16-bitowym buforem, zapewniając poprawne generowanie sygnałów sterujących magistralą. Dzięki obsłudze I2C możliwe jest dołączenie układów ekspanderów GPIO, sterowników LED itp. bez konieczności poświęcenia czasu na oprogramowanie pośredniczące pomiędzy PC a I2C mikrokontrolera. Cała praca programistyczna, przy zastosowaniu SC18IM700, ogranicza się do opracowania aplikacji na PC komunikującej się poprzez UART.

Rysunek 1. Schemat wewnętrzny układu SC18IM700 (za notą NXP)

Aby zapewnić komunikację z SC18IM700, jego port szeregowy podłączony jest z PC poprzez interfejs konwertera USB-UART typu FT230, który zapewnia też zasilanie układu i współpracujących modułów.

Budowa i działanie

Schemat całego układu został pokazany na rysunku 2. Aplikacja układu U1 typu FT230 nie odbiega od standardowej. Pełni on funkcję interfejsu USB-UART, dioda LD2 sygnalizuje obecność zasilania, a dioda LD1 aktywną transmisję szeregową. Stabilizator U2 zapewnia zasilanie 3,3 V dla współpracujących układów GPIO.

Rysunek 2. Schemat ideowy urządzenia

Układ U3 pełni funkcję konwertera UART-GPIO/I2C. Sygnały GPIO/I2C z wyprowadzeń układu U3 doprowadzone są do złączy I2C, GP01, GP23, GP45, GP67 zgodnych ze standardem Grove.

Montaż i uruchomienie

Moduł zmontowany jest na dwustronnej płytce drukowanej, której schemat został pokazany na rysunku 3. Montaż jest typowy i nie wymaga szczegółowego opisu. Poprawnie zmontowany układ nie wymaga uruchamiania. Po podłączeniu do portu USB konwerter FT230 powinien zostać wykryty i zainstalowany.

Rysunek 3. Schemat płytki PCB

Przy użyciu oprogramowania narzędziowego FTProg, należy skonfigurować prąd pobierany z magistrali – właściwe ustawienia zostały pokazane na rysunku 4. Następnie należy zmienić konfigurację wyprowadzenia C0 na sygnalizację sumy sygnałów RXD/TXD – zgodnie z rysunkiem 5. Jeżeli konfiguracja została ustalona i zapisana, należy układ zrestartować poprzez odłączenie i ponowne podłączenie do złącza USB.

Rysunek 4. Konfiguracja układu FT230 – ustawienie prądu USB
Rysunek 5. Konfiguracja układu FT230 – zmiana funkcji wyprowadzenia C0

Dla sprawdzenia modułu należy zainstalować program typu terminal portu szeregowego z możliwością wysyłania sekwencji znaków np. Realterm. Należy też przygotować przycisk np. Grove Button i diodę np. Grove LED lub buzzer Grove Buzzer oraz płytkę z układem I2C np. moduł z układem PCF8574. Komunikacja z układem SC18IM700 odbywa się poprzez wysłanie polecenia w postaci komendy ASCII, zestaw rozpoznawanych komend został zestawiony w tabeli 1. Komendy nierozpoznane są ignorowane. Układ ma wbudowany licznik time-out, który kasuje zawartość buforów, jeżeli odbiór kolejnych dwóch znaków zajmuje więcej niż 655 ms.

Po restarcie układ jest wstępnie skonfigurowany – standard transmisji ustawiony jest na 9600,8,N,1. Konfiguracja może zostać zmieniona w rejestrach układu zgodnie z tabelą 2 (szczegółowy opis jest dostępny w dokumentacji układu [1] oraz nocie [2]). Po uruchomieniu terminala i resecie układu zwrócone zostaną znaki OK, potwierdzające połączenie z układem.

Do zmiany konfiguracji służą sekwencje poleceń zapisu rejestru wewnętrznego:

W <rejestr 0> <dana 0>...<rejestr N> <dana N> P

lub odczytu

R <rejestr 0> ...<rejestr N> P

po którym SC18IM700 zwróci ciąg wartości:

<dana 0> ... <dana N>

Dla przykładu – odczyt rejestru 00 to sekwencja:

52 00 50

która po resecie zwraca wartość domyślną 0xF0.

Przed użyciem pinów GPIO w rejestrach PortConf1, PortConf2 należy ustawić wymaganą konfigurację wyprowadzenia IO zgodnie z tabelą 3.

Przycisk podłączymy do złącza GPO1, wyprowadzenie GPIO0 skonfigurujemy jako wejście, zapisując do rejestru wewnętrznego PortConf1 sekwencję:

57 02 55

która ustawia piny GPIO3...0 w rejestrze PortConf1 (0x02) jako wejścia. Odczyt stanu portu GPIO w rejestrze IOState (0x04), w tym przycisku podłączonego do GPIO0, odbywa się poleceniem:

52 04

które zwraca odpowiednio 00 lub 01 po przytrzymaniu przycisku. Zmianę stanu wyjścia GPIO6, do którego podłączony jest buzzer, wykonujemy, konfigurując rejestr PortConf2 (0x03), w którym ustawiamy wyprowadzenie GPIO6 sekwencją:

57 03 65

która ustawia wyprowadzenie GPIO6 jako wyjście Push-Pull. Zmiana stanu wyjścia 0/1 odbywa się poprzez rejestr IOState sekwencją:

57 04 40

która ustawia wyprowadzenie GPIO6 w stan wysoki, załączając buzzer, oraz

57 04 00

która ustawia wyprowadzenie GPIO6 w stan niski, wyłączając buzzer. Oczywiście podczas normalnej pracy modułu przed zapisem należy zapewnić zachowanie stanów pinów GPIO poprzez ustawianie tylko zmienianego wejścia w zależności od trybu pracy wyprowadzenia.

Do sprawdzenia magistrali I2C do modułu (złącze I2C) podłączony będzie układ PCF8574, który ma ustawiony adres 0x20, odczyt stanu wyprowadzeń wykonany jest sekwencją:

53 41 01 50

która odczytuje jeden bajt spod adresu 0x41, czyli stan wyprowadzeń PCF8574 z ustawionym siedmiobitowym adresem 0x20. Ze względu na adresowanie 8-bitowe, najmłodszy bajt ustawiony jest na 1 dla operacji odczytu (0100 0001). Ustawienie wyjść wykonywane jest sekwencją:

53 40 01 00 50

która zapisuje jeden bajt o wartości 0x00 pod adres 0x40, czyli stan wyprowadzeń PCF8574 z ustawionym siedmiobitowym adresem 0x20 zostanie zmieniony na 0x00. Ze względu na adresowanie 8-bitowe, najmłodszy bajt ustawiony jest na 0 dla operacji zapisu (0100 0000). Poprawność wykonania operacji sprawdzamy, odczytując rejestr statusu I2CStat 0x0A sekwencją:

52 0a 50

która powinna zwrócić wartość 0xF0 zgodnie z tabelą 4.

Stosując zapis wielobajtowy, można konfigurować układy o większej liczbie rejestrów np. sterownik LED PCA9531.

Adam Tatuś, EP

Dokumentacja układu SC18IM700:
[1] https://bit.ly/3uPGjk2
[2] https://bit.ly/3JZ9aHe

Wykaz elementów:
Rezystory: (SMD0603) 1%
  • R1, R2: 27 Ω
  • R3, R4: 2,2 kΩ
  • R5, R6, R8: 4,7 kΩ
  • R7: 1 kΩ
Kondensatory: (SMD0603)
  • C1, C2: 47 pF, 25 V COG
  • C3, C4, C8: 0,1 μF
  • C5: 10 μF
  • C6, C7: 1 μF
Półprzewodniki:
  • LD1: dioda LED czerwona (SMD0603)
  • LD2: dioda LED zielona (SMD0603)
  • U1: FT230XS (SSOP16)
  • U2: MCP1700T-3302MB (SOT-89)
  • U3: SC18IM700IPW (TSSOP16)
Pozostałe:
  • FB: koralik ferrytowy BLM18EG101TN1D
  • GP01, GP23, GP45, GP67, I2C: złącze Grove proste
  • USB: złącze USB Molex MX105017-0001
Artykuł ukazał się w
Elektronika Praktyczna
maj 2022
DO POBRANIA
Materiały dodatkowe
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik listopad 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje październik 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna listopad 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich listopad 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów