Komunikacja w mikrokontrolerach Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski
Treść kursu Programowanie mikrokontrolerów AVR (ATMEL) Orientacja na komunikację międzyukładową w C
Literatura M. Kardaś Mikrokontrolery AVR, język C podstawy programowania R. Pełka Mikrokontrolery architektura, programowanie, zastosowania J. Doliński Mikrokontrolery AVR w praktyce R. Baranowski Mikrokontrolery AVR ATmega w praktyce www.atmel.com (dokumentacja!) (dokumentacje układów zewnętrznych)
Materiały http://www.w12.pwr.wroc.pl/pmarkowski
Warunki zaliczenia kolokwium (punkty: Kol) kartkówki na wykładzie (punkty: Kart) PUNKTY KOŃCOWE = Kol + (20% z Kart) PRÓG ZALICZENIA: 60% punktów końcowych
Plan wykładu Mikrokontrolery wiadomości podstawowe Urządzenia peryferyjne AVR (np. ATmega8535) wiadomości podstawowe Programowanie AVR w języku C podstawy Praca w trybach oszczędzania energii Interfejsy komunikacyjne (SPI, I2C, UART, 1-wire) Układy zewnętrzne (czujniki temperatury, wilgotności, HyperTerminal)
Mikrokontroler (mikrosterownik) definicja Jest scalonym układem cyfrowym, który oprócz wbudowanej jednostki centralnej CPU posiada zintegrowaną pamięć oraz układy wspomagające. Mikrokontroler stanowi całkowicie autonomiczny system mikroprocesorowy, który do pracy nie wymaga układów zewnętrznych. Ma rozbudowany system komunikacji z otoczeniem.
Mikrokontroler - budowa RESET K W A R C ZASILANIE
Mikrokontroler - budowa CPU Central Processing Unit mikroprocesor jednostka centralna serce MCU mogą być różne CPU: architektury magistrale (8,16-bit...) rodziny MCU Magistrala danych Magistrala instrukcji Magistrala sterująca Pamięć: - programu - danych Porty WE / WY do komunikacji z otoczeniem np. 32 nóżki podzielone na 4 porty (4 x 8) Układ taktujący Układy peryferyjne ADC czujniki komparator obsługa przerwań interfejsy komunikac. pamięć ROM liczniki RTC WDT
Mikrokontroler - budowa Pamięć programu (dysk twardy MCU) program Pamięć danych (RAM) rejestry + RAM np. 8 kb 32 kb H A R V A R D np. 32 rej. uniwersalne 8-bitowe np. 64 rej. specjalne 8-bitowe np. 512 bajtów SRAM RAZEM 608 B
ATmega8535
Specyfikacja ATmega8535 Mikrokontroler 8-bitowy Architektura RISC ~130 instrukcji w większości wykonywane w 1 cykl zegarowy 32 8-o bitowe rejestry uniwersalne - 64 rejestry specjalne ponad 16 MIPS wbudowany układ mnożący RISC (Reduced Instruction Set Computer) - architektura typu Harvard (oddzielone szyny danych i rozkazów) - przetwarzanie potokowe - zredukowana lista instrukcji - instrukcje mogą operować na dowolnym rejestrze uniwersalnym - ograniczenie komunikacji pomiędzy pamięcią, a procesorem
Specyfikacja ATmega8535 c.d. Nieulotna pamięć programu i danych 8 KB pamięci Flash EEPROM Wytrzymałość: 10 000 cykli zapis/odczyt Obszar pamięci bootowalnej 512 bajtów EEPROM Wytrzymałość: 100 000 cykli zapis/odczyt 512 bajtów SRAM Programowalne zabezpieczenie kodu programu (Lock Bits) 32 programowalne wejścia/wyjścia (porty I/O)
Specyfikacja ATmega8535 c.d. Urządzenia peryferyjne Dwa 8-o bitowe liczniki (Timer/Counters) 2^8 Jeden licznik 16-o bitowy 2^16 Programowalny Watchdog (licznik specjalny) PWM (Pulse Width Modulation) 10-o bitowy konwerter analogowo-cyfrowy (ADC) Komparator analogowy Magistrala szeregowa Two-wire (I2C) Magistrala szeregowa USART Magistrala szeregowa SPI (tryby Master/Slave)
Specyfikacja ATmega8535 c.d. Opcje specjalne Brown-out Detector Wewnętrzny oscylator RC Możliwość taktowania ze źródła zewnętrznego Przerwania wewnętrzne i zewnętrzne Sześć trybów uśpienia Napięcia zasilania: 2,7 5,5V dla ATmega8535L 4,5 5,5V dla ATmega8535
Budowa mikrokontrolera ATmega8535
ATmega8535 - CPU CPU: Jednostka Arytmetyczno-Logiczna (ALU) Rejestry uniwersalne Status Register (SREG) Wskaźnik Stosu (SP) Licznik rozkazów (PC)
Programowanie KOD MASZYNOWY 11100100010101 01110010010101 11010110010001 00101011100101 ASEMBLER Ldi R16, 100 Ldi R17, 50 Add R16, R17 Out PORTA, R16 C int a, b; PORTA:= a+b; LISTA INSTRUKCJI µp.... asemblacja kompilacja
Programowanie PROGRAM (PC) Kompilacja Asemblacja µc FLASH EEPROM ELECTRICAL ERASABLE PROGRAMABLE READ ONLY MEMORY PAMIĘĆ PROGRAMU
ATmega8535 wyprowadzenia Wejścia I/O Wejścia ADC We/wy liczników SPI USART I2C Przerw. zewn.
Pamięć
ATmega8535 - pamięć Pamięć programu FLASH EEPROM, 8 kb kod programu Pamięć danych SRAM, 512 B bieżące dane tymczasowe rejestry Pamięć dodatkowa, użytkownika EEPROM, 512 B
Pamięć programu licznik rozkazów Program Counter wskazuje adres, spod którego pobierane są kolejne instrukcje 11 10 9 8 7 6 5 4 3 2 1 0 PC (FLASH EEPROM $000 - $FFF)
Pamięć danych SRAM, rejestry 32 rej. uniwersalne 64 rej. specjalne Mapa pamięci danych 512 bajtów SRAM
Rejestry
Rejestry Podstawowe elementy mikrokontrolera. Każde urządzenie wewnętrzne μc ma przypisane do siebie specjalne rejestry sterujące jego pracą. Przykładowy rejestr specjalny: start/stop prescaler ExaReg 1 1 0 1 0 0 - - on/off przerwanie on/off
Rejestry specjalne SREG = Status Register DDRA = Data Direction Register TCCR0 = Timer/Counter Control Register 0 GICR = General Interrupt Control Register
Porty I/O
PA0 PA7,, PD0 PD7 Porty I/O A: B: C: D: DDRA DDRB DDRC DDRD PORTA PORTB PORTC PORTD PINA PINB PINC PIND DDR Data Direction Register (1=WY, 0=WE) PORT gdy WY (wysyłanie 1 lub 0) PIN gdy WE (tylko do odczytu)
Jak to zrobić, żeby: 1) wysłać z μc na zewnątrz sygnał 10101010 (port C)? DDRC: PORTC: PINC: 2) sczytać sygnał podany z zewnątrz na port C? DDRC: PORTC: PINC: 3) ustawić 6 najstarszych jako WY, reszta jako WE; wysłać 000111 i sczytać PC0, PC1? DDRC: PORTC: PINC: 11111111 10101010-00000000 - zajrzeć do środka 11111100 000111xx zajrzeć do środka
Porty I/O Port wejściowy (DDR 0) minimalna wydajność prądowa pobiera informacje wymaga zabezpieczenia przed zakłóceniami nóżka w trybie Hi-Z (tri-state) lub pull-up Port wyjściowy (DDR 1) wydajność prądowa 20 ma wysyła informacje
PULL-UP Wejścia są podciągnięte do 1 logicznej C: Vcc DDR 0 PORT 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 DDRC PORTC pull-up register MCU PINC I/O logic
Lista instrukcji ATmega8535
Lista instrukcji ATmega8535 (1) Arytmetyczne i logiczne
Przerwania (ISR) Interrupt Service Routines
Przerwania Wykonywanie programu głównego zostaje natychmiast przerwane; rozpoczyna się podprogram obsługi przerwania 21 przerwań ułożonych priorytetowo Reset, 3 zewnętrzne, 17 wewnętrznych Tabela przerwań str. 45 Podprogram obsługi przerwania kończy instrukcja RETI Przerwania muszą być aktywowane. Aby działały: 1) flaga I w SREG (lub instrukcja SEI) przerwania globalnie 2) flaga w rejestrze odpowiednim dla wybranego przerwania
Przerwania
Przerwania
Przerwania biblioteka
Przerwania - biblioteka http://www.atmel.com/webdoc/avrlibcreferencemanual/ #include <avr/interrupt.h> ISR() {} TIMER0_COMP_vect TIMER0_OVF_vect TIMER1_COMPA_vect TIMER1_COMPB_vect TIMER1_OVF_vect TIMER1_CAPT_vect TIMER2_COMP_vect TIMER2_OVF_vect
Przerwania - biblioteka http://www.atmel.com/webdoc/avrlibcreferencemanual/ ADC_vect ANA_COMP_vect EE_RDY_vect SPM_RDY_vect INT0_vect INT1_vect INT2_vect SPI_STC_vect TWI_vect USART_RX_vect USART_TX_vect USART_UDRE_vect
Obsługa przerwania dr inż. Piotr Markowski 2015 Konkretne przerwanie: SREG:... (ustawienie (sprawdzenie Skok Zablokowanie Wykonanie Powrót Wykonanie
Przerwania zewnętrzne
Przerwania zewnętrzne INT0 priorytet 2, pin PD2, wektor $001 INT1 priorytet 3, pin PD3, wektor $002 INT2 priorytet 19, pin PB2, wektor $012 Działają nawet jeśli piny PB/PD ustawione jako WY Reakcja na zbocze lub na stan: INT0, INT1 na dowolne zbocze lub stan niski INT2 na dowolne zbocze Reakcja na stan niski oraz INT2 asynchroniczne Stan niski przerwanie trwa tak długo, jak stan niski
Przerwania zewnętrzne General Interrupt Control Register GICR INT2 włączenie przerwania 2 INT0 włączenie przerwania 0 INT1 - włączenie przerwania 1 Przy reakcji na zbocze impulsy powinny trwać min. 1 cykl zegarowy (INT0, INT1) lub min. 50 ns (INT2) Przy reakcji na poziom niski impuls powinien trwać na tyle długo, by zakończyła się obecnie wykonywana instrukcja
Przerwania zewnętrzne General Interrupt Flag Register GIFR INTF2 ustawiana gdy żądanie przerwania 2 INTF0 ustawiana gdy żądanie przerwania 0 INTF1 - ustawiana gdy żądanie przerwania 1 Flagi czyszczone gdy rozpoczęło się przerwanie lub gdy zostanie wpisane 1
Przerwania zewnętrzne MCU Control Register MCUCR ISC11, ISC10 ustawienia reakcji INT1 ISC01, ISC00 ustawienia reakcji INT0 ISC01 ISC00 Reakcja 0 0 Poziom niski na INT0 generuje przerwanie 0 1 Dowolna zmiana na INT0 generuje przerwanie 1 0 Zbocze opadające na INT0 generuje przerwanie 1 1 Zbocze narastające na INT0 generuje przerwanie
Przerwania zewnętrzne MCU Control Status Register MCUCSR ISC2 ustawienia reakcji INT2: 1 zbocze narastające 0 zbocze opadające
Podstawy programowania