Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Podobne dokumenty
Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Mikrokontrolery AVR Wprowadzenie

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

Instytut Teleinformatyki

Programowanie mikrokontrolerów AVR

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

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

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Wstęp. Opis ATMEGA128 MINI MODUŁ VE-APS-1406

Mikrokontrolery AVR techniczne aspekty programowania

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

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

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

Zestaw Edukacyjny Atmega-8 (AJAWe-0711) Porty wejścia-wyjścia.

Mikroprocesory i Mikrosterowniki

Mikrokontroler AVR ATmega32 - wykład 9

SYSTEM PRZERWAŃ ATmega 32

Programowanie mikrokontrolerów AVR z rodziny ATmega.

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

PROGRAMOWALNE SYSTEMY MECHATRONIKI

Mikroprocesory i Mikrosterowniki

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

AVR DRAGON. INSTRUKCJA OBSŁUGI (wersja 1.0)

Komunikacja w mikrokontrolerach Laboratorium

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

Aoi Ryuu. v2.0 moduł z mikroprocesorem Atmega169 dla makiety dydaktycznej Akai Kaba

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

Instytut Teleinformatyki

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

Mikroprocesory i mikrosterowniki

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

Programator mikrokontrolerów AVR

2.1 Porównanie procesorów

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

Moduł prototypowy X3-DIL64 z procesorem ATxmega128A3U-AU

Zestaw uruchomieniowy z mikrokontrolerem LPC1114 i wbudowanym programatorem ISP

MCAR Robot mobilny z procesorem AVR Atmega32

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

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

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

dokument DOK wersja 1.0

Porty wejścia/wyjścia w układach mikroprocesorowych i w mikrokontrolerach

2. PORTY WEJŚCIA/WYJŚCIA (I/O)

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

Laboratorium Systemów wbudowanych Wyższa Szkoła Zarządzania i Bankowości, Informatyka studia inżynierskie

Listing_ $crystal = deklaracja

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

Edukacyjny sterownik silnika krokowego z mikrokontrolerem AT90S1200 na płycie E100. Zestaw do samodzielnego montażu.

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

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Instrukcja do laboratorium Akademii ETI *

micro Programator ISP mikrokontrolerów AVR zgodny z STK500v2 Opis Obs³ugiwane mikrokontrolery Wspó³praca z programami Podstawowe w³aœciwoœci - 1 -

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

Programowanie mikrokontrolerów - laboratorium

Arduino dla początkujących. Kolejny krok Autor: Simon Monk. Spis treści

2. Architektura mikrokontrolerów PIC16F8x... 13

E-TRONIX Sterownik Uniwersalny SU 1.2

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

LITEcompLPC1114. Zestaw ewaluacyjny z mikrokontrolerem LPC1114 (Cortex-M0) Sponsorzy:

AVREVB1. Zestaw uruchomieniowy dla mikrokontrolerów AVR. Zestawy uruchomieniowe

KAŻDY Z 8-MIO BITOWYCH PORTÓW MIKROKONTROLERÓW RODZINY 51 MA JEDYNIE REJESTR PORTU: P0, P1, P2, P3, PEŁNIĄ ONE ROLĘ REJESTRÓW DANYCH WE/WY.

Instytut Teleinformatyki

Charakterystyka mikrokontrolerów. Przygotowali: Łukasz Glapiński, Mateusz Kocur, Adam Kokot,

Instytut Teleinformatyki

MikloBit ul. Cyprysowa 7/ Jaworzno. rev MB-AVR-ISP programator

MultiTool instrukcja użytkownika 2010 SFAR

Dokumentacja mikrokontrolera Atmega16 firmy Atmel

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

1.1 Co to jest USBasp? Parametry techniczne Obsługiwane procesory Zawartość zestawu... 4

Konfiguracja i programowanie Gamepad'a PlayStation2 na mikrokontrolerze STM32

Uniwersalny sterownik silnika krokowego z portem szeregowym RS232 z procesorem AT90S2313 na płycie E200. Zestaw do samodzielnego montażu.


Synteza częstotliwości na układzie PLL LM7001

Projektowanie Systemów Wbudowanych

Instrukcja dla: Icomsat v1.0 SIM900 GSM/GPRS shield for Arduino oraz dla GPRS Shield produkcji Seeedstudio.

Schemat blokowy architektury AVR

ISP ADAPTER. Instrukcja obsługi rev.1.1. Copyright 2009 SIBIT

Programowanie mikrokontrolerów 2.0

Sterowanie dwustanowe - algorytmy synchroniczne

Szkolenia specjalistyczne

Programowanie mikrokontrolerów. 5 grudnia 2007

ZL8AVR. Płyta bazowa dla modułów dipavr

ŚRODOWISKO PROTOTYPOWANIA SP AVR

Komunikacja w mikrokontrolerach Laboratorium

Instrukcja obsługi programatora AVR Prog USB v2

Wizualizacja stanu czujników robota mobilnego. Sprawozdanie z wykonania projektu.

Stanowisko laboratoryjne dla mikrokontrolera Atmega16 firmy Atmel

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

STEROWANIE DWUSTANOWE. Przykład 1 MIESZALNIK

Płytka uruchomieniowa AVR oparta o układ ATMega16/ATMega32. Instrukcja Obsługi. SKN Chip Kacper Cyrocki Page 1

Systemy Wbudowane. Arduino, AVR (wersja 2018) Arduino. Arduino. Oprogramowanie. Rys historyczny. Mikrokontroler

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Systemy Wbudowane. Arduino, AVR (wersja ) Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler

MODUŁ UNIWERSALNY UNIV 3

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

LOW ENERGY TIMER, BURTC

Płyta ewaluacyjna z mikrokontrolerem Atmega32. Autor Dariusz Wika

Zestaw Startowy EvB. Więcej informacji na stronie:

Transkrypt:

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści 1. Konfiguracja pinów2 2. ISP..2 3. I/O Ports..3 4. External Interrupts..4 5. Analog Comparator5 6. Analog-to-Digital Converter.6 7. USART.6 8. EEPROM6 9. SPI..6 10. Timer..6 11. PWM..6 1

1. Konfiguracja pinów ATmega8 posiada 28 pinów, z czego 23 są programowalnymi pinami wejścia-wyjścia. VCC GND AVCC AREF PB5..0, PC5..0, PD7..0 PC6 (RESET) PB7..6 (XTAL2..1) Zasilanie 4.5-5.5V lub 2.7-5.5V (wersja ATmega8L) Masa Zasilanie modułu A/D Wejście/wyjście napięcia referencyjnego dla modułu A/D Programowalne porty, które mogą posiadać kilka funkcji. Standardowo działa jako sygnał RESET, może jednak być zaprogramowany przez odpowiedni fuse bit, jako zwykły port, ale zablokuje to późniejsze programowanie przez SPI. Sygnał jest aktywny stanem niskim, więc w czasie normalnej pracy ma być podawany sygnał wysoki. Zapewnia to wewnętrzny pull-up, dlatego reset nie musi zostać podłączony lub może zostać podłączony bezpośrednio do switch'a zwierającego do masy. Standardowo działa jako zwykły port, ale po zaprogramowaniu odpowiednich fuse bitów można tutaj podpiąć zewnętrzny kwarc. 2. ISP ISP (In-System Programming) umożliwia programowanie układu nawet już wewnątrz zbudowanego urządzenia. Programowanie najczęściej odbywa się przez interface SPI. Wymaga on podpięcia układu do programatora przez kilka przewodów: RESET PC6 Reset układu, wymuszenie programowania SCK PB5 Zegar do transmisji MISO PB4 Wyjście danych MOSI PB3 Wejście danych GND VCC Masa Zasilanie układu (jeżeli układ nie posiada innego źródła zasilania) 2

Ten interface umożliwia programowanie pamięci programu (FLASH), pamięci EEPROM, lock bitów oraz fuse bitów. Lock bity programuje się raczej rzadko, głównie w urządzeniach przeznaczonych do sprzedaży, aby zablokować dostęp do pamięci programu. Czasami istnieje potrzeba zaprogramowania fuse bitów, najczęściej aby zmienić źródło lub częstotliwość zegara. Dokładny opis fuse bitów w rozdziale Memory Programming dokumentacji. 3. I/O Ports Najczęściej używanymi peryferiami są porty wejścia-wyjścia. Można dzięki nim bezpośrednio sterować stanami logicznymi na portach lub je odczytywać. Do ich obsługi służy kilka rejestrów (gdzie x = B, C lub D; n = 7..0): DDRx PORTx PINx 7 6 5 4 3 2 1 0 DDx7 DDx6 DDx5 DDx4 DDx3 DDx2 DDx1 DDx0 Określa kierunek portu. 0 na bicie DDxn oznacza, że port Pxn jest wejściem, 1 oznacza wyjście. 7 6 5 4 3 2 1 0 PORTx7 PORTx6 PORTx5 PORTx4 PORTx3 PORTx2 PORTx1 PORTx0 PORTxn ma dwa znaczenia: - gdy DDxn == 1 (wyjście), to bit PORTxn steruje wyjściem portu Pxn. - gdy DDxn == 0 (wejście) i PORTxn == 1, to zostaje włączony wewnętrzny rezystor pull-up. 7 6 5 4 3 2 1 0 PINx7 PINx6 PINx5 PINx4 PINx3 PINx2 PINx1 PINx0 PINxn służy do odczytu stanu na porcie xn. Przykłady A. Chcielibyśmy zapalać i gasić diodę LED na porcie PB0. Na początek ustawiamy bit DDB0 na 1, czyli port PB0 na wyjście (wystarczy wykonać to tylko raz). DDRB = (1<<DDB0); Następnie, gdy chcemy zapalić diodę ustawiamy na PB0 stan 0, aby płyną prąd, wiec PORTB0 na 0. PORTB &= ~(1<<PORTB0); Aby zgasić należy ustawić PORTB0 na 1. PORTB = (1<<PORTB0); B. Odczytujemy wciśnięcie przycisku na porcie PD2. Na początek ustawiamy bit DDD2 na 0, czyli port PD2 na wejście (wystarczy wykonać to tylko raz). DDRD &= ~(1<<DDD2); 3

Musimy włączyć wewnętrzny pull-up, ponieważ, gdy przycisk jest rozłączony mielibyśmy nieokreślony stan (wystarczy wykonać to tylko raz). PORTD = (1<<PORTD2); Teraz możemy sprawdzać czy przycisk został wciśnięty za pomocą bitu PIND2. if (PIND & PIND2) { // stan 1 na porcie => przycisk puszczony else { // stan 0 na porcie => przycisk wciśnięty C. Odczytujemy wyjście z innego układu cyfrowego podłączonego do PD2. Procedura wygląda tak samo jak dla przycisku, z tym wyjątkiem, że nie jest nam potrzebny pull-up, wiec ustawiamy 0 na PORTD2. D. Zapisujemy bit na wejście innego układu cyfrowego. Procedura wygląda tak samo jak dla zapalania LED'a. 4. External Interrupts Niekiedy na pewne zdarzenia musimy zareagować natychmiast. Do tego służą przerwania. Gdy wystąpi określone zdarzenie procesor przerywa wykonywanie aktualnego kodu i przeskoczy natychmiast do określonej funkcji, gdzie programista może obsłużyć to zdarzenie. Po jej zakończeniu procesor powraca do poprzednio wykonywanego kodu. Przerwania mogą być wewnętrzne (generowane przez peryferia) lub zewnętrzne (generowane przez porty). ATmega8 posiada dwa przerwania zewnętrzne: INT0 (PD2) oraz INT1 (PD3). Do ich obsługi służą trzy rejestry opisane w dokumentacji w rozdziale External Interrupts. Przykład Zliczmy ilość zmian stanu na porcie INT0 (PD2). #include <avr/io.h> #include <avr/interrupt.h> volatile long i; ISR(INT0_vect) { i++; int main() { i = 0; DDRD &= ~(1<<DDD2); PORTD = (1<<DDD2); MCUCR = (MCUCR & (~(3<<ISC00))) (1<<ISC00); GICR = (1<<INT0); sei(); while (1); return 0; 4

volatile long i; Zmienna, która zawiera wartość licznika. Została zadeklarowana z atrybutem volatile, aby pominąć optymalizację. Zabezpiecza to przed np. taką sytuacją: W programie czekamy, aż licznik przekroczy 1000: while (i<=1000);. Kompilator podczas optymalizacji może przenieść zmienną i do rejestru, w tym czasie przerwanie aktualizuje zmienną i w RAM'ie, rejestr się nie zmienia, wiec pętla się będzie wykonywać bez końca. ISR(INT0_vect) { i++; Tak wygląda najprostsza deklaracja przerwania. Wewnątrz zwiększamy zmienną i. Więcej o przerwaniach jest na http://www.nongnu.org/avr-libc/user-manual/group avr interrupts.html. DDRD &= ~(1<<DDD2); PORTD = (1<<DDD2); Ustawiamy port na wejście z pull-up'em. MCUCR = (MCUCR & (~(3<<ISC00))) (1<<ISC00); Ustawiamy, aby przerwanie było wywoływanie na obu zboczach. GICR = (1<<INT0); Włączamy przerwanie INT0. sei(); Pozwalamy na wykonywanie przerwań. Po starcie wykonywanie przerwań jest zabronione. Możemy wywołać makro sei(), aby to zmienić. Makro cli() ponownie zabrania wykonywania. Po wywołaniu cli() nie zostanie wykonane żadne przerwanie, zaległe przerwania wykonają się dopiero po sei(). while (1); Nieskończona pętla. Wszystko robi za nas przerwanie. 5. Analog Comparator Porównuje napięcia na analogowych wejściach AIN0 (PD6) i AIN1 (PD7). Najważniejszy bit to bit ACO w rejestrze ACSR, który jest wyjściem komparatora. Przykład Stabilizacja napięcia kondensatora C1. Kondensator ma mieć napięcie równe napięciu INPUT. DDRB = (1<<PORTB0); while (1) if (ACSR & (1<<ACO)) { PORTB &= ~(1<<PORTB0); else { PORTB = (1<<PORTB0); 5

Program porównuje oba napięcia na wejściach komparatora i w zależności od wyniku ładuje lub rozładowuje kondensator. 6. Analog-to-Digital Converter 7. USART 8. EEPROM 9. SPI 10. Timer 11. PWM 6