USART (Universal Synchronous and Asynchronous serial Receiver and Transmitter) jest rozbudowanym układem peryferyjnym, opiszę jedynie praktyczne aspekty jego wykorzystania w najbardziej podstawowej formie. Dokładne informację można jak zawsze znaleźć w nocie katalogowej układu w rozdziale USART. ====== UART ====== Układ może pracować w trybie synchronicznym (z wykorzystaniem linii przenoszącej sygnał taktujący-zegarowy) lub asynchronicznym. Uniwersalny asynchroniczny odbiornik - nadajnik służy do komunikacji pomiędzy 2 urządzeniami za pomocą prostego interfejsu szeregowego (może to być np. komputer, inny mikroprocesor). Do komunikacji używa się 2 linii danych: nadawczej Tx (transmit) oraz odbiorczej Rx(recieve). Są to linie jednokierunkowe, jeżeli łączymy 2 urządzenia musimy połączyć ich masy. Połączenie jest krosowane linia nadająca (Tx) jednego urządzenia łączy się z linią odbiorczą (Rx) drugiego i vice versa. {SCHEMAT} ===== RS-232 ===== W tym momencie warto wspomnieć o standardzie [[wp>RS-232|RS232]] (Recommended Standard 232: EIA((Electronic Industries Association)) standard RS-232-C: Interface between Data Terminal Equipment and Data Communication Equipment Employing Serial Binary Data Interchange. 1969) Jest to standard opisujący: * Parametry elektryczne sygnału (napięcia, czasy narastania, maksymalna pojemność obciążenia itp.) * Parametry mechaniczne złącz * Układ sygnałów w złączu W tym momencie ważnymi parametrami standardu są: * Napięcie sygnałów to 3÷15 [V] dla logicznego "1" oraz -3 ÷ -15 [V] :!: dla logicznego "0" oznacza to że standard nie jest zgodny z poziomami napięć TLL * Wyprowadzenia złącza opisane np na [[wp>RS-232|Wikipedii]] Charakterystyczne złącze DB-9 jest bardzo popularne, jego obecność nie oznacza że jest to złącze szeregowe w standardzie RS-232. Złącza RS-232 można spotkać w: - Starszych desktopach ([[wp>Serial_port|Złącze COM]]), obecnie rzadko spotykane a w laptopach praktycznie nie występuje. - Niektórych starszych odbiornikach GPS - Starszych modemach - Urządzeniach typu kasy fiskalne, czytniki kodów kreskowych - Urządzeniach przemysłowych - Często montuje się je w telewizorach do zdalnego sterowania (Na pewno w LG są =) ) ==== Konwersja RS-232 <-> TTL ==== Do konwersji pomiędzy różnymi systemami napięć konieczne jest zastosowanie specjalnych układów scalonych, niestety konieczne jest też wygenerowanie odpowiednich napięć stąd układy te wymagają użycia stosunkowo dużych kondensatorów co przekłada się na zwiększoną ilość elementów i powierzchni płytki urządzenia. Przykładowymi układami są: * Rodzina układów firmy Maxim [[http://www.maxim-ic.com/datasheet/index.mvp/id/1798|MAX2xx]], najczęściej spotykanym układem jest [[http://datasheets.maxim-ic.com/en/ds/MAX220-MAX249.pdf|MAX232]] * ST ST232 * TI [[http://focus.ti.com/docs/prod/folders/print/max232.html|MAX232]] oraz [[http://focus.ti.com/docs/prod/folders/print/trs232e.html|TRS232E]] {{:integra:warsztaty:max232_serial_microcontroller.gif?300|}} Typowa aplikacja układu MAX232 ===== TTL UART ===== Pomiędzy dwoma układami pracującymi przy takich samych napięciach logicznych nie ma problemu z łączeniem, a jeżeli mamy doczynienia z RS232 możemy zastosować konwerter. Jednak w przypadku kiedy chcemy połączyć komputer z urządzeniem musimy zastosować specjalny układ interfejsu USB-UART. Do wyboru mamy: * Starsze telefony komórkowe łączyły się z komputerem poprzez przewody z wbudowanym układem interfejsu (warto poszukać w internecie) * Serię układów fimy FTDI (np FT232) * Układy firmy Prolific (PL-2303HX) * Moduły Bluetooth-UART (np popularne w polsce BTM-112 BTM-222) * Moduły Ethernet-UART ===== Po stronie komputera ===== Jeżeli mamy już jakiś sprzętowy środek komunikacji konieczne jest zaopatrzenie się w odpowiednie oprogramowanie. Transmisję szeregową można obsłużyć za pomocą własnoręcznie napisanego programu lub za pomocą uniwersalnego terminalu. Przykładami takich programów są:\\ Windows * Termite * HyperTerminal * Putty * RealTerm Linux: * Minicom * Konsola W celu przetestowania połączenia można połączyć sygnały Tx i Rx, przez co wysyłane znaki zostaną zawrócone zpowrotem do komputera. ===== BAUD ===== Baud (w Polsce często używa się określenia Bod) jest jednostką prędkości transmisji sygnału (nie danych). 100 bodów oznacza że sygnał w ciągu sekundy zmienił się 100 razy, jeżeli z sygnałem jest związanych 8 bitów oznacza to że transmisja danych odbywa się z prędkością 800 bitów/s. W przypadku transmisji szeregowej ilość bodów przekłada się bezpośrednio na prędkość transmisji danych. Odbiornik i nadajnik muszą pracować z taką samą częstotliwością aby mogła zajść transmisja danych. Stabilność sygnału taktującego rdzeń układu ma bezpośredni wpływ na stabilność taktowania układu USART, dlatego nawiązanie transmisji szeregowej z wykorzystaniem wewnętrznego generatora RC jest bardzo trudne. Nawet przy idealnie stabilnym sygnale taktującym układ podczas transmisji mogą wystąpić błędy. Przy pewnych prędkościach transmisji nie jest możliwe równe podzielenie sygnału taktującego (np. jeżeli taktujemy układ kwarcem 8MHz i chcemy uzyskać prędkość 19200 powstanie pewien błąd ponieważ: ${{8 \cdot 10^6} \over {19200}} = 416.(6)$). Czasami błędy są nieduże i nie przeszkadzają w poprawnej pracy. Można również zastosować specjalne kwarce o częstotliwościach które łatwo podzielić w celu uzyskania standardowych prędkości transmisji (np. kwarc 11.0592MHz: ${{11.0592 \cdot 10^6} \over {19200}} = 576.0$ ). Dane dotyczące błędów przy różnych częstotliwościach taktowania są umieszczone w nocie katalogowej układu. Błędy te można również policzyć za pomocą narzędzia online: [[http://www.wormfood.net/avrbaudcalc.php]]. Warto również wspomnieć o metodzie automatycznego dostrajania częstotliwości: [[http://documentation.renesas.com/doc/products/region/rtas/mpumcu/apn/autobaud.pdf|autobaud]] ===== Przykład ===== ===== Przykład - transmisja sterowana przerwaniami ===== ===== Materiały dodatkowe ===== * [[http://www.atmel.com/dyn/resources/prod_documents/doc2557.pdf|AVR303: SPI-UART Gateway]] * [[http://www.atmel.com/dyn/resources/prod_documents/doc0941.pdf|AVR304: Half Duplex Interrupt Driven Software UART]] * [[http://www.atmel.com/dyn/resources/prod_documents/doc0952.pdf|AVR305: Half Duplex Compact Software UART]] * [[http://www.atmel.com/dyn/resources/prod_documents/doc1451.pdf|AVR306: Using the AVR® UART in C]] * [[http://www.atmel.com/dyn/resources/prod_documents/doc4300.pdf|AVR307: Half duplex UART Using the USI Module]]