Mikroprocesorowa ośla łączka, część 23
Każdy system mikroprocesorowy wymaga komunikacji z użytkownikiem. Poza podstawowymi możliwościami, jakie daje wykorzystanie klawiatury oraz wyświetlaczy, duże znaczenie ma transmisja szeregowa.
Transmisja szeregowa jest jednym z podstawowych „mediów” pozwalających na przesyłanie nawet sporych objętościowo, szeroko rozumianych danych w obu kierunkach: do mikrokontrolera oraz z mikrokontrolera. Obecnie produkowane układy standardowo są wyposażone w tego typu kontrolery a często zdarza się, że jest ich więcej niż jeden (zależy to od modelu mikrokontrolera). Na pokładzie Arduino Nano typowo wykorzystywany był ATMEGA328 (takie były pierwsze, obecnie montowane są ATMEGA328PB), który ma do dyspozycji jeden kontroler transmisji szeregowej, jak pokazuje rysunek 1.
Tego typu podzespoły często są identyfikowane skrótem UART (ang. Universal Asynchronous Receiver and Transmitter), czyli kontroler szeregowej transmisji asynchronicznej (nadający oraz odbierający dane) lub USART (ang. Universal Synchronous and Asynchronous Receiver and Transmitter) – kontroler szeregowej transmisji synchronicznej i asynchronicznej (również umożliwiający nadawanie oraz odbiór danych). Występuje tu pewna różnica między tymi dwoma rodzajami kontrolerów obsługi transmisji szeregowej (jako synchroniczna/asynchroniczna). W pierwszym przypadku przesyłanie danych jest synchronizowane dodatkowym sygnałem zegarowym i jest stosowane głównie w systemach telekomunikacji do przesyłania większych bloków danych oraz budowania sieci (przykładowo protokoły wyższych warstw, jak SDLC czy HDLC bazujące na transmisji synchronicznej). W zastosowaniach amatorskich praktycznie nie jest używane (nie będziemy się tym zajmować). Wariant asynchroniczny to powszechnie stosowane rozwiązanie do przesyłania danych między systemami mikroprocesorowymi.
Z transmisją szeregową wiążą się dodatkowo dwa określenia: tryb transmisji oraz prędkość transmisji. Zadaniem układu USART, zawartego w mikrokontrolerze, jest zamiana danych równoległych (mikrokontroler wpisuje do odpowiednich rejestrów USART dane równoległe jako 8-bitów) na dane szeregowe, które są wysyłane jeden po drugim z kolejnych pozycji bitowych na odpowiednim pinie mikrokontrolera. Z tym wiąże się tempo wysyłania tych danych, określane jako prędkość transmisji szeregowej (w literaturze jest określane jako baud rate). Z kolei tryb transmisji definiuje takie informacje jak liczba transmitowanych bitów (nie zawsze musi to być po osiem bitów) oraz dodatkowe szczegóły związane z weryfikacją poprawności transmisji. Taką elementarną kontrolą jest dodawanie do każdego wysłanego bajtu danych bitu parzystości. Oczywiście można przesyłać dane bez bitów kontroli. Więcej informacji na ten temat jest w artykule Mikroprocesory i mikrokontrolery – interfejs szeregowy RS232, ZE 04/2024.
Naturalnym jest, by obie strony (nadająca oraz odbierająca dane) robiły to z tą samą prędkością oraz stosowały ten sam tryb transmisji. W prostych mikrokontrolerach najczęściej wykorzystywany jest tryb 8N1 (8 bitów danych, bez kontroli parzystości i z jednym bitem stopu) oraz prędkość 9600 bps (ang. bits per second – liczba bitów na sekundę). Prędkości transmisji są znormalizowane, a 9600 bps jest jedną z nich.
USART w ATMEGA328
Mikrokontroler ATMEGA328 zawiera w swojej strukturze jeden układ obsługi transmisji szeregowej, który może działać jako synchroniczny lub asynchroniczny. Zainicjowanie go do pracy wymaga skonfigurowania kilku rejestrów wpływających na tryb transmisji oraz definiujących jej prędkość. Najczęściej stosowanym trybem transmisji jest 8N1. Zapewne wynika to z tego, że pierwsze mikrokontrolery nie obsługiwały dodawania (przy nadawaniu) i weryfikacji (przy odbieraniu) bitów kontroli parzystości i te działania musiał realizować programista, umieszczając wyliczony bit parzystości (lub nieparzystości) w odpowiednich polach rejestrów przy nadawaniu. Te wszystkie szczegóły określa się ustawiając odpowiednie bity w rejestrach konfiguracyjnych mikrokontrolera AVR. Jego odpowiednie bity są ustawiane na początku programu. Tu można wykorzystać tę cechę mikrokontrolerów AVR, że po operacji zerowania (naciśnięciu przycisku reset lub akcji automatycznego resetu po włączeniu zasilania) bity są zerowane, więc wystarczy „zająć się” bitami, które mają być ustawione. Rejestry USART pozwalają na uzyskanie różnych możliwości pracy tego podzespołu mikrokontrolera – w celu poznania wszystkich, należy zapoznać się z firmową dokumentacją.
(…)
——– ciach! ——–
To jest tylko fragment artykułu, którego pełna wersja ukazała się w kwietniowym numerze czasopisma Zrozumieć Elektronikę (ZE 4/2026). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 4/2026 znajduje się tutaj.
Andrzej Pawluczuk
apawluczuk@vp.pl
Uwaga! Wskazówki, jak nabyć pełne wersje dowolnych numerów ZE znajdują się na stronie:
https://piotr-gorecki.pl/n11.
