1 Ćwiczenie nr 4 Program ćwiczenia: Interfejs szeregowy SPI obsługa sterownika ośmiopozycyjnego, 7-segmentowego wyświetlacza LED Interfejs szeregowy USART, komunikacja mikrokontrolera z komputerem PC. Zagadnienia do przygotowania: Specyfika magistrali SPI układu ATmega8535 Rejestry specjalne wpisywanie wartości Specyfika układu MAX7219 Wywołania podprogramów Inicjalizacja stosu System przerwań Programy obsługi przerwań 1
2 1. Wprowadzenie podstawowe informacje o module SPI w ATmega8535 Moduł SPI (ang. Serial Peripheral Interface) umożliwia szybką, dwukierunkową, synchroniczną, szeregową transmisję danych między mikrokontrolerem a urządzeniami peryferyjnymi. Blokowy schemat modułu SPI przedstawiony został na rys.1. Magistrala SPI umożliwia łączenie jednego nadrzędnego układu (Master) z wieloma urządzeniami podrzędnymi (Slave). Rys.1. Schemat blokowy modułu SPI, [1] Modułowi SPI przyporządkowane są cztery wyprowadzenia o oznaczeniach: MOSI (ang. Master Output, Slave Input), MISO (ang. Master Input, Slave Output), SCK (ang. Serial Clock) i SS (ang. Slave Select). Na rys.2 zaprezentowano sposób połączenia linii magistrali SPI w układzie Master-Slave. Protokół transmisji wymaga dwóch 8-bitowych rejestrów przesuwnych, połączonych tak, by wyjście jednego było połączone z wejściem drugiego. W układzie nadrzędnym generowany jest sygnał zegarowy, odseparowany od sygnału danych. Sygnał zegara nie jest ciągły, nadawany jest tylko w trakcie trwania transmisji. 2
3 Rys.2 Schemat blokowy wzajemnego połączenia linii modułu SPI w konfiguracji Master-Slave, [1] Kontrola nad transmisją danych przy użyciu modułu SPI możliwa jest za pośrednictwem trzech rejestrów SPDR (ang. SPI Data Register) rejestr przesuwny danych, SPSR (ang. SPI Status Register) przechowuje informacje o aktualnym stanie modułu SPI oraz SPCR (ang. SPI Control Register) sterowanie modułem SPI. Poniżej znajdują się schematy organizacji wewnętrznej tych rejestrów. Szczegółowy opis bitów należy odnaleźć w nocie katalogowej mikroprocesora ATmega8535. Tabela 1. Organizacja rejestru SPDR SPI Data Register SPDR MSB LSB Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O X X X X X X X X Tabela 2. Organizacja rejestru SPSR SPI Status Register SPSR SPIF WCOL - - - - - SPI2X Zapis/Odczyt Z Z Z Z Z Z Z Z/O 0 0 0 0 0 0 0 0 Tabela 3. Organizacja rejestru SPCR SPI Control Register SPCR SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O 0 0 0 0 0 0 0 0 3
4 Jak wspomniano wyżej, możliwa jest praca modułu SPI w dwóch trybach nadrzędnym (Master) oraz podrzędnym (Slave). W zależności od wyboru trybu pracy, kierunek działania lini przyporządkowanych SPI zmienia się zgodnie z Tabelą 4. Tabela 4. Działanie wyprowadzeń podporządkowanych modułowi SPI Kierunek Wyprowadzenie Tryb Master Tryb Slave MOSI Definiowane przez użytkownika Wejście MISO Wejście Definiowane przez użytkownika SCK Definiowane przez użytkownika Wejście SS Definiowane przez użytkownika Wejście W wypadku trybu Master, moduł SPI musi generować sygnał taktujący na linii SCK należy ustawić żądaną prędkość transmisji (rejestr SPCR i SPSR): 4
5 2. Układ scalony MAX7219 MAX7219 to scalony sterownik ośmiu 7-segmentowych wyświetlaczy LED ze wspólną katodą. Układ jest wyposażony: w sterownik segmentów i poszczególnych wyświetlaczy jednocyfrowych, rejestry sterujące pracą wyświetlacza, dekoder BCD kod B, układy multipleksowania wyświetlaczy, dwuportową pamięć SRAM 8 8 przechowującą dane do wyświetlenia. W trakcie zajęć laboratoryjnych układ MAX7219 będzie wykorzystany do sterowania ośmiocyfrowym wyświetlaczem LED we współpracy z mikroprocesorem ATmega8535. Przykład takiego podłączenia został przedstawiony na rys.3. Rysunek 1. Schemat połączenia układu MAX7219 z mikroprocesorem, [2] W Tabeli 5 przedstawiono organizację 16-bitowego rejestru przesuwnego, do którego przesyłane są dane z wyprowadzenia DIN układu. Bity o oznaczeniach D8-D11 określają adres rejestrów, zaś D0-D7 zawierając przesyłaną informację. Ponadto, korzystając z dokumentacji technicznej MAX7219 należy ustawiając odpowiednie bity tego rejestru, określić tryb pracy urządzenia, tryb kodowania (BCD lub 7-segmentowy), intensywność świecenia wyświetlacza, tryb wyświetlania (normalny lub test) oraz określić limit wyświetlanych pól. Sposób zaświecania odpowiednich segmentów wyświetlacza również należy odnaleźć w dokumentacji technicznej układu. 5
6 Tabela 5. Organizacja rejestru przesuwnego układu MAX7219 D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 X X X X ADRES MSB DANE LSB 3. Moduł USART mikrokontrolera ATmega8535 Moduł USART (ang. Universal Synchronous and Asynchronous serial Receiver and Transmitter) jest układem służącym do szeregowej transmisji danych. Charakteryzuje się dwukierunkową, synchroniczną lub asynchroniczną transmisją danych, w zależności od wyboru trybu pracy, między mikrokontrolerem a urządzeniami peryferyjnymi. W trybie asynchronicznym, układ nie wymaga żadnych lini taktujących. Inaczej niż w trybie synchronicznym, gdzie moduł wymaga dodatkowej lini taktującej (XCK). Tryb ten zapewnia większą dokładność transmisji, jednak ze względu sposób sterowania jest żadziej wykorzystywany. Przesyłane i odbierane przez USART dane nazywa się ramką transmisyjną. Jej budowa jest dość dowolna konfiguracja rejestru UCSRC. Ramka składa się z bitu startu bit rozpoczynający transmisję, bitów przesyłanego słowa, bitu parzystości (nie jest konieczny) oraz bitu stopu zakończenie transmisji. Najważniejszym rejestrem modułu USART jest UDR (ang. USART I/O Data Register). Transmisja ramki zaczyna się przez zapisanie tego rejestru, zaś odczyt jego zawartości pozwala uzyskać odebraną przez moduł wiadomość. Przy odczycie rejestru, należy zwrócic uwagę na to, że powoduje ona wyczyszczenie bufora, w którym znajduje sie przesyłane słowo. Do sterowania USART wykorzystuje się rejestry UCSRA, UCSRB oraz UCSRC (ang. USART Control and Status Register A/B/C). W tabeli 6, 7 oraz 8 przedstawiono schematyczną organizację bitów w tych rejestrach. Tabela 6. Organizacja rejestru UCSRA USART Control and Status Register A UCSRA RXC TXC UDRE FE DOR PE U2X MPCM Zapis/Odczyt O Z/O O O O O Z/O Z/O 0 0 1 0 0 0 0 0 6
7 Tabela 7. Organizacja rejestru UCSRB USART Control and Status Register B UCSRA RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O O Z/O 0 0 0 0 0 0 0 0 Tabela 8. Organizacja rejestru UCSRC USART Control and Status Register C UCSRA URCEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O 1 0 0 0 0 1 1 0 Dokładny opis rejestrów modułu USART należy odnaleźć w nocie katalogowej mikroprocesora ATmega8535 na stronach 164 169. Jak wspomniano wcześniej praca modułu USART jest możliwa w dwóch trybach: synchronicznym i asynchronicznym. W przypadku trybu asynchronicznego należy ustalić prędkość transmisji oraz określić postać ramki transmisyjnej. Jeśli wybrano dłuższe niż 8- bitowe słowo transmisyjne należy skorzystać z bitów TXB8 i RXB8 w rejestrze UCSRA. Ponadto, jeśli jest to konieczne włączyć obsługę przerwań (RXCIE, TXCIE, UDRIE). Ostatecznie należy poprzez odpowiednie bity rejestru UCSRB uaktywnić nadajnik lub odbiornik modułu USART. W trakcie konfiguracji modułu powinny być zablokowane globalne zezwolenia na przerwania. W przypadku trybu synchronicznego, w przeciwieństwie do asynchronicznego, oprócz lini TxD i RxD korzysta się z lini taktującej XCK. Wybór tego trybu dokonuje się w rejestrze UMSEL (znacznik UMSEL). 7
8 4. Zadania do wykonania 1) Należy zapoznać się i przeanalizować przykładowy kod w języku Asembler inicjalizacji SPI w trybie Master oraz Slave, zamieszczony w dokumentacji technicznej ATmega 8535. Określić procedurę inicjalizacji w obu przypadkach. 2) Zaprogramować moduł SPI, tak aby komunikował się z układem MAX7219 i sterował w ten sposób wyświetlaczami 7-segmentowymi. Należy wyświetlić 2 cyfry, reszta cyfr ma być wygaszona. Moduł SPI mikrokontrolera ma pracować w trybie nadrzędnym (jako Master), a Maxim w trybie podrzędnym (Slave). Należy podłączyć odpowiednio linie MOSI, SCK i SS mikrokontrolera z wyprowadzeniami układu Maxim. Powinny pracować w trybie wyjściowym! W trybie oczekiwania na transmisję na SS powinien panować stan wysoki. Transmisja zaczyna się od manualnego zerowania linii SS oraz dokonania zapisu w rejestrze przesuwnym SPDR. Po przesłaniu całego bajtu (zawartości rejestru SPDR), ustawiana jest flaga SPIF. Zakończenie transmisji jest sygnalizowane poprzez manualne ustawienie stanu wysokiego na linii SS. Do zaprogramowania rejestry SPCR, SPDR. Sprawdzamy rejestr SPSR. Dane do maxima przesyłane są w postaci 16-bitowej (2 bajty): 4 najstarsze bity dowolne, następne 4 adres, kolejne 8 to same dane. Wyłączyć shutdown mode, ustawić jasność świecenia, liczbę wyświetlanych cyfr oraz dekodowanie BCD code B. 3) Należy zapoznać się i przeanalizować przykładowy kod w języku Asembler inicjalizacji modułu USART oraz transmisji danych, zamieszczony w dokumentacji technicznej ATmega 8535. Określić procedurę inicjalizacji i transmisji modułu. 5. Literatura 1) Dokumetacja techniczna mikrokontrolera AVR Atmega 8535 http://www.atmel.com/images/doc2502.pdf 2) Dokumetacja techniczna MAXIM 7219 http://datasheets.maximintegrated.com/en/ds/max7219-max7221.pdf 3) R. Baranowski, Mikrokontrolery AVR Atmega w praktyce, Wydawnictwo BTC, Warszawa 2005 8