Programowanie mikrokontrolerów AVR z rodziny ATmega.



Podobne dokumenty
SYSTEM PRZERWAŃ ATmega 32

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32)

Programowanie mikrokontrolerów AVR z rodziny ATmega.

PROGRAMOWALNE SYSTEMY MECHATRONIKI

Komunikacja w mikrokontrolerach Laboratorium

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Instytut Teleinformatyki

Enkoder magnetyczny AS5040.

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

Instytut Teleinformatyki

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Mikrokontrolery AVR Wprowadzenie

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

Sterownik silnika krokowego. Aleksander Koreń

Komunikacja w mikrokontrolerach. Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski

Licznik rewersyjny MD100 rev. 2.48

DOKUMENTACJA. dot. Budowy i przebiegu konstrukcji linefollower-a. Data: MCHT2 Jakub Tomczyk Łukasz Pawelec Mateusz Wróbel

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Wbudowane układy peryferyjne cz. 3 Wykład 9

Układy czasowo-licznikowe w systemach mikroprocesorowych

Programowanie mikrokontrolerów. 8 listopada 2007

Szkolenia specjalistyczne

Schemat blokowy architektury AVR

Programowanie mikrokontrolerów AVR

Instytut Teleinformatyki

Wbudowane układy peryferyjne cz. 1 Wykład 7

Układy czasowo-licznikowe w systemach mikroprocesorowych

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Przerwanie. Źródła przerwań

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Sterowniki Programowalne Sem. V, AiR

ĆWICZENIE. TEMAT: OBSŁUGA PRZETWORNIKA A/C W ukontrolerze 80C535 KEILuVISON

Systemy Wbudowane. Raspberry Pi Sterowanie serwomechanizmem (wersja 2019) Serwomechanizm. Serwomechanizm z silnikiem krokowym

Mikroprocesory i Mikrosterowniki

Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2

Systemy wbudowane. Wprowadzenie. Struktura. Mikrokontrolery AVR. Wprowadzenie do programowania w C

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

WIZUALIZACJA DANYCH SENSORYCZNYCH Sprawozdanie z wykonanego projektu. Jakub Stanisz

Instytut Teleinformatyki

PL B1. AKADEMIA GÓRNICZO-HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE, Kraków, PL BUP 06/ WUP 06/17

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Licznik prędkości LP100 rev. 2.48

PROJECT OF FM TUNER WITH GESTURE CONTROL PROJEKT TUNERA FM STEROWANEGO GESTAMI

Mechatronika i inteligentne systemy produkcyjne. Sensory (czujniki)

STEROWANIE ROBOTEM MOBILNYM TYPU LINE-FOLLOWER

Wbudowane układy komunikacyjne cz. 1 Wykład 10

Enkodery czujniki cyfrowe

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja

Sterowanie multipleksowe 4-cyfrowego wyświetlacza siedmiosegmentowego w oparciu o system przerwao mikrokontrolera ATmega16 w języku Asembler

Mikroprocesory i Mikrosterowniki

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

Q3 Autonomiczny czytnik kart i zamek kodowy z kontrolerem dostępu, przyciskiem dzwonka i interfejsem Wiegand

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

LOW ENERGY TIMER, BURTC

SPRAWOZDANIE. Architektura systemów komputerowych projekt robota W Y K O N A N I E :

INSTRUKCJA OBSŁUGI CZYTNIKA POSIDRO-DEGA Czytnik jednoosiowy współpracuje z enkoderami inkrementalnymi

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Sterowniki Urządzeń Mechatronicznych laboratorium. Ćw. 3: Timer v1.0

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

Programowanie mikrokontrolerów. 5 grudnia 2007

Komunikacja w mikrokontrolerach Laboratorium

Instrukcja do ćwiczeń

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

TECHNIKA MIKROPROCESOROWA

Systemy Wbudowane. Arduino, AVR. Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler. Mikrokontroler Platforma Arduino. Arduino IDE: Arduino C:

Przetwornik analogowo-cyfrowy

Zewnętrzne układy peryferyjne cz. 1 Wykład 12

Budowa mikrokontrolera UC3C. - 3 rodzaje obudów

1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro

Programowanie mikrokontrolerów 2.0

High Speed USB 2.0 Development Board

GND(VSS) i VCC - masa i zasilanie. V0 - regulacja kontrastu

Kurs Elektroniki. Część 5 - Mikrokontrolery. 1/26

Instytut Teleinformatyki

MIKROKONTROLERY AVR JĘZYK C WYDAWNICTWO ATNEL PODSTAWY PROGRAMOWANIA. Miros aw Kardaś. Szczecin Mojej Żonie Kasi

Zakład Teorii Maszyn i Układów Mechatronicznych. LABORATORIUM Podstaw Mechatroniki. Sensory odległości

Komunikacja w mikrokontrolerach. Podstawy programowania. Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski

Immobilizer samochodowy otwierający dostęp poprzez kod czteroznakowy.

długo. W tym celu w czasie przeczesywania if (key) {

Ćw. 18: Pomiary wielkości nieelektrycznych II

CL600. Precyzyjny cyfrowy miernik tablicowy serii CL 600. Zastosowanie

Moduł licznika położenia LP 2.

Sterownik momentu obrotowego silnika prądu stałego

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Badanie czujników odległości Laboratorium Mechatroniki i Robotyki

2. Budowa układów procesorowych rodziny TMS320C

Moduł prototypowy X3-DIL64 z procesorem ATxmega128A3U-AU

Komunikacja w mikrokontrolerach Laboratorium

Interfejsy komunikacyjne pomiary sygnałów losowych i pseudolosowych. Instrukcja do ćwiczenia laboratoryjnego

2 Przygotował: mgr inż. Maciej Lasota

Mikrokontroler AVR ATmega32 - wykład 9

Generator funkcyjny. Spis treści. Działanie. Interfejs. Adam Miarka Maksymilian Szczepanik

Przerwania w systemie mikroprocesorowym. Obsługa urządzeo wejścia/wyjścia

Timery w mikrokontrolerach STM32F3

Transkrypt:

Programowanie mikrokontrolerów AVR z rodziny ATmega. Materiały pomocnicze Jakub Malewicz jakub.malewicz@pwr.wroc.pl Wszelkie prawa zastrzeżone. Kopiowanie w całości lub w częściach bez zgody i wiedzy autora surowo zabronione. Strona1

Enkodery Enkoder czujnik mierzący położenie liniowe lub kątowe. W celu określenia położenia najczęściej stosuje się metodę optyczną lub magnetyczną. o Podział enkoderów Enkoder inkrementalny (przyrostowy, względny) wskazuje zmianę położenia o określoną wartość (kątową lub liniową w zależności od typu) w postaci impulsu. Układ pomiarowy, zliczając impulsy, jest w stanie określić wielkość przesunięcia / obrotu. Enkoder absolutny (bezwzględny) wskazuje konkretne położenie obiektu, jest ono zawsze znane. Układ pomiarowy jest nieczuły na wyłączenie zasilania, gdyż po jego przywróceniu położenie można odczytać z enkodera. Kolejne pozycje / stany najczęściej są zapisywane w kodzie Gray a ze względu na jego własności. Na rysunku 1 przedstawiono przykładową tarczę, która umożliwia rozróżnienie 16 pozycji. Rys 1. Tarcza enkodera absolutnego (źródło: http://asimo.pl) o Rozdzielczość Jest to najważniejszy parametr enkodera, na podstawie którego możemy określić najmniejszą zmianę położenia liniowego lub kątowego, jaką jest w stanie rozróżnić enkoder. Im większa rozdzielczość tym enkoder precyzyjniejszy. Obecnie najczęściej stosuje się czujniki o rozdzielczości od 6 do 12 bitów. rozdzielczość: 10 bitów typ: obrotowy Powyższe parametry oznaczają, że enkoder mierzy położenie kątowe i jest w stanie rozróżnić 2 10 różnych położeń na każde 360. Wynika z tego, że układ pomiarowy jest w stanie określić położenie z dokładnością do około 0,3. Strona2

o Typy sygnałów wyjściowych w enkoderach słowo bitowe pozycja przedstawiona na n-bitach, gdzie n to rozdzielczość czujnika impulsowe przesunięciu/obrotowi o określoną jednostkę towarzyszy impuls (rysunek 2) Rys 2. Enkoder impulsowy kwadraturowe dwa przebiegi prostokątne, przesunięte w fazie o 90, dla podniesienia precyzji stosuje się trzeci sygnał, tzw. indeksujący, na którym raz na odcinek / obrót pojawia się impuls, co pozwala układowi pomiarowemu uzyskać dodatkowy punkt odniesienia i umożliwia korektę; na rysunku 3 przedstawiono przykładowy przebieg sygnału Rys 3. Przykładowy przebieg czujnika z wyjściem kwadraturowym PWM szerokość impulsu jest proporcjonalna to przesunięcia / obrotu SPI szeregowa magistrala danych inne o AS5040 Jest to enkoder inkrementalny i absolutny zarazem. Posiada wyjścia kwadraturowe wraz z indeksującym, PWM oraz magistralę SPI. Można go również skonfigurować do pracy z silnikami bezszczotkowymi (BLDC). Pomiar przy pomocy czujnika opiera się o badanie zmian pola Strona3

magnetycznego, dzięki czemu pomiar jest bezkontaktowy. Na rysunku 4 przedstawiono ideę działania AS5040. Rys. 4 Idea działania czujnika magnetycznego (źródło: dokumentacja techniczna AS5040) Przerwania o System przerwań Mechanizm obsługi specjalnych zdarzeń, które z punktu widzenia mikrokontrolera występują w sposób asynchroniczny, a w niektórych przypadkach wręcz losowy. Mikrokontroler może obsłużyć wiele zdarzeń specjalnych, które w większości związane są z jego układami peryferyjnymi. W przypadku wystąpienia takiego zdarzenia mikrokontroler przerywa główną pętlę programu i przechodzi do wykonania procedury obsługującej dane zdarzenie, po czym wraca do miejsca, w którym przerwał. Źródłami przerwań mogą być: - sygnał reset - zmiana stanu na wybranych wyprowadzeniach mikrokontrolera - zdarzenia związane ze stanami liczników / timerów - magistrala SPI - magistrala USART - przetwornik analogowo-cyfrowy - pamięć wewnętrzna - komparator - magistrala TWI - wewnętrzny mechanizm zapisu do pamięci Strona4

o Elementy programu niezbędne do korzystania z przerwań Aby móc korzystać z systemu przerwań należy dołączyć bibliotekę interrupt.h: #include <avr/interrupt.h> Powyższa biblioteka pozwala korzystać z funkcji obsługujących przerwania: ISR(wektor) gdzie wektor to informacja dla kompilatora, o tym jakie przerwanie będzie obsługiwane (co będzie źródłem przerwania). ISR(USART_RXC_vect) UDR; UART_SEND_string("To ja, Twoj kontroler :)\n\r"); Wektor może być podany jako liczba lub w postaci tekstowej, co jest bardziej wygodne, gdyż od razu widać, co będzie wywoływało przerwania. Nazwy wektorów są jasno określone i można je odnaleźć w dokumentacji kompilatora oraz w dokumentacji technicznej ATmegi (tabela Reset and Interrupt Vectors). W tym drugim przypadku należy tekst z kolumny Source (źródło) odpowiednio zmodyfikować, zamieniając wszystkie znaki białe oraz interpunkcyjne na pojedyncze znaki podkreślenia _ i dodając na końcu _vect. TIMER0 COMP -> TIMER0_COMP_vect USART, RXC -> USART_RXC_vect Aby włączyć system przerwań należy w funkcji main() przed pętlą główną wywołać jedną z poniższych instrukcji: sei(); SREG = (1<<SREG_I); Ponadto należy odpowiednio skonfigurować układ peryferyjny, który ma być źródłem przerwania poprzez ustawienie odpowiednich bitów w jego rejestrach. Jeżeli natomiast chcemy z jakiegoś względu wyłączyć system przerwań należy wywołać jedną z poniższych linii: cli(); SREG &=(~ (1<<SREG_I)); Strona5

o Przerwania zewnętrzne Przerwanie mogą wywołać również zmiany stanu na niektórych pinach mikrokontrolera oznaczonych jako INTx, gdzie x jest cyfrą. Aby skorzystać z tych źródeł należy odpowiednio ustawić bity w rejestrach: GICR włączenie odpowiedniego źródła MCUCR konfiguracja warunku wystąpienia przerwania (stan niski, zmiana stanu na pinie, zbocze opadające, zbocze narastające) #define F_CPU 1000000ul #define UART_CONST (F_CPU/(16ul*UART_BAUD)-1) #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> void delay_ms(int ms) volatile long unsigned int i; for(i=0;i<ms;i++) _delay_ms(1); ISR(INT0_vect) PORTA=0x00; delay_ms(1000); int main(void) //konfiguracja i inicjalizacja portów DDRD = 0x00; PORTD = 0xff; DDRA = 0xff; PORTA = 0xff; //INT0 MCUCR = (0<<ISC01) (0<<ISC00); GICR = ((1<<INT1) (1<<INT0)); //wlaczenie przerwan SREG=(1<<SREG_I); while(1) PORTA = 0xff; return 0; Strona6