Powrót

Dodatkowe porty UART w Arduino

Jedną z poważniejszych wad Arduino na AVR jest mała ilość portów UART. Uwzględniając fakt, że jeden UART jest wykorzystywany przez bootloader w przypadku Arduino UNO/NANO w ogóle nie mamy pełnowartościowego UART, bo jedyny jest współdzielony z bootloaderem.

Jak arduinowcy rozwiązują problem braku UART? W najgorszy możliwy sposób czyli używając programowego UART-a. Dlaczego to złe rozwiązanie? Powodów jest kilka:

– niska maksymalna prędkość transmisji,

– niezmienny format ramki 8N1,

– co bardzo ważne, aby programowy UART działał muszą być włączone przerwania.

Dlaczego włączone przerwania są problemem? Arduinowe biblioteki nader często i na długo blokują wszystkie przerwania. Takie niechlubne przykłady to biblioteka do obsługi 1-Wire oraz do LED WS2812. Równoczesne działanie tych bibliotek i programowego UART jest w praktyce niemożliwe. UART będzie gubił znaki. Jak rozwiązać ten problem? W przypadku Arduino UNO można zamienić płytkę na Arduino MEGA. Co w przypadku Arduino MEGA? Gdy brakuje UART? Sytuacja patowa? Na szczęście nie! Rozwiązaniem jest zewnętrzny UART. Odrzucić należy stare UART, komunikujące się magistralą równoległą, jak na przykład 16C550, ze względu na to, że niewiele AVR ma kontroler magistrali równoległej a jego programowa emulacja to nie najlepszy pomysł, ale ważniejsza jest wysoka cena tych nieprodukowanych już UART. Dostępne są jednak, w przystępnej cenie, UART komunikujące się po magistrali I2C lub SPI. Znalazłem dwa takie układy w ofercie krajowych sklepów:

– SC16IS760

– SC16IS762

Pierwszy z nich zawiera jeden UART: 64 bajty FIFO Tx i Rx, maksymalna prędkość transmisji 5Mb/s, 5–8 bitów danych, parzystość/nieparzystość/brak, 1/ ½/ 2 bity stopu, sprzętowe sterowanie przepływem RS232C lub Xon/Xoff i kierunkiem transmisji dla RS485, IrDA, od czterech do ośmiu GPIO. Komunikacja przez I2C (max. 400kb/s) lub SPI (max. 5Mb/s).

Drugi zawiera dwa UART-y po: 64 bajty FIFO Tx i Rx, max. prędkość transmisji 5Mb/s, 5–8 bitów danych, parzystość/nieparzystość/brak, 1/ ½/ 2 bity stopu , sprzętowe sterowanie przepływem RS232C lub Xon/Xoff i kierunkiem transmisji dla RS485, IrDA, łącznie do ośmiu GPIO. Komunikacja przez I2C (max. 400kb/s) lub SPI (max. 5Mb/s).

Ciekawą wspólną cechą obu układów jest kompatybilność, na poziomie rejestrów, z popularnym 16C450/550. Zmieniony jest interfejs z równoległego na I2C/SPI oraz dodane kilka funkcji.

Co będzie potrzebne?

Płytka z układem SC16IS760 lub SC16IS762, które znalazłem na Aliexpress. Co ciekawe, płytka z podwójnym UART była ponad dwa razy tańsza od płytki z jednym UART. Ze względu na to, że nie posiadałem takich płytek próby przeprowadziłem na module, którego schemat widać na rysunku 1.

Rysunek 1

Płytka została opracowana do urządzenia, które nie doczekało się realizacji. Płytka ma dwa układy: SC16IS760 i SC16IS762. Pierwszy z nich jest połączony z mostkiem USB-UART FT230XS, drugi z MAX3232D i złączem GOLDPIN. Ponadto wszystkie linie GPIO/sterowania przepływem UART-ów wyprowadzono na GOLDPIN-y.

Jak podłączyć?

Zwierając pin układu SC16IS7xx oznaczony I2C/SPI z masą wymuszamy komunikację w trybie SPI. Z Arduino łączymy linie według tabeli 1:

Tabela 1

Nie jest wymagany konwerter poziomów, ponieważ układy SC16SI akceptują napięcia do 5,5V, mimo że są zasilane z 3,3V.

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze listopadowym czasopisma Zrozumieć Elektronikę (ZE 11/2023). Pełna wersja czasopisma umieszczona jest pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 11/2023 znajduje się tutaj.

 

SaS, ZE

sas.ze@vp.pl

 

Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (Cappuccino = 10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Postaw mi kawę na buycoffee.to
Następnie wybrać:
– jeśli jeden numer ZE – CAPPUCINO (10 zł),
– jeśli kilka numerów ZE – WSPIERAM ZA. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dołączyć wiadomość dla Twórcy” i tu wpisać, który numer lub numery mamy wysłać na podany adres e-mailowy.