MIKROKONTROLERY FIRMY ATMEL. dr inż. Wiesław Madej



Podobne dokumenty
Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

2. Architektura mikrokontrolerów PIC16F8x... 13

Wstęp Architektura... 13

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

Mikrokontroler AVR ATmega32 - wykład 9

Systemy wbudowane Mikrokontrolery

Wykład 4. Przegląd mikrokontrolerów 16-bit: - PIC24 - dspic - MSP430

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

Programowanie mikrokontrolerów. 8 listopada 2007

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

Mikroprocesory i Mikrosterowniki

Mikroprocesory i Mikrosterowniki

Hardware mikrokontrolera X51

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

Wykład 2. Przegląd mikrokontrolerów 8-bit: -AVR -PIC

Układy czasowo-licznikowe w systemach mikroprocesorowych

Mikroprocesory i mikrosterowniki

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

WPROWADZENIE Mikrosterownik mikrokontrolery

MIKROKONTROLERY I MIKROPROCESORY

AVR DRAGON. INSTRUKCJA OBSŁUGI (wersja 1.0)

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

Mikrokontrolery AVR Wprowadzenie

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

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

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

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

Przetworniki analogowo-cyfrowe (A/C)

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

Technika Mikroprocesorowa

Szkolenia specjalistyczne

Układy zegarowe w systemie mikroprocesorowym

Programowanie mikrokontrolerów. 5 grudnia 2007

dokument DOK wersja 1.0

System mikroprocesorowy i peryferia. Dariusz Chaberski

STM32 Butterfly. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

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

MCAR Robot mobilny z procesorem AVR Atmega32

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

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

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

SYSTEM PRZERWAŃ ATmega 32

Techniki mikroprocesorowe i systemy wbudowane

Instytut Teleinformatyki

Wykład 2. Mikrokontrolery z rdzeniami ARM

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

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

Opis funkcjonalny i architektura. Modu³ sterownika mikroprocesorowego KM535

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)

Dokumentacja mikrokontrolera Atmega16 firmy Atmel

Mikrokontrolery AVR techniczne aspekty programowania

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Przetwornik ADC procesora sygnałowego F/C240 i DAC C240 EVM

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Temat: Pamięci. Programowalne struktury logiczne.

2.1 Przesył danych między procesorem a tabelą zmiennych

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

Systemy wbudowane. Paweł Pełczyński

TRD-MINI COMBO. Uniwersalny moduł czytnika transponderów UNIQUE - wersja OEM. Podstawowe cechy :

Opis czytnika TRD-FLAT CLASSIC ver Naścienny czytnik transponderów UNIQUE w płaskiej obudowie

Organizacja typowego mikroprocesora

Programowanie w językach asemblera i C

Opis czytnika TRD-80 CLASSIC ver Moduł czytnika transponderów UNIQUE z wbudowaną anteną

Instytut Teleinformatyki

Wykład Mikroprocesory i kontrolery

2.1 Porównanie procesorów

7. Technika mikroprocesorowa test

Mikroprocesor Operacje wejścia / wyjścia

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

IIPW_SML3_680 (Z80) przewodnik do ćwiczeń laboratoryjnych

Układy czasowe / liczniki (timers/counters)

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1.

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

Technika mikroprocesorowa. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08

Projekt MARM. Dokumentacja projektu. Łukasz Wolniak. Stacja pogodowa

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

Konfigurator Modbus. Instrukcja obsługi programu Konfigurator Modbus. wyprodukowano dla

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

LEKCJA TEMAT: Zasada działania komputera.

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

ZL28ARM. Zestaw uruchomieniowy dla mikrokontrolerów AT91SAM7XC

Magistrala I 2 C. Podstawy systemów mikroprocesorowych. Wykład nr 5 Interfejsy szeregowe c.d.

MIKROPROCESORY architektura i programowanie

E-TRONIX Sterownik Uniwersalny SU 1.2

Budowa i zasada działania komputera. dr Artur Bartoszewski

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Podstawy Techniki Mikroprocesorowej

Architektura mikrokontrolera MCS51

Obługa czujników do robota śledzącego linie. Michał Wendland czerwca 2011

Wykład 3. Przegląd mikrokontrolerów 8-bit: STM8

Mikrokontroler ATmega32. Język symboliczny

1.2. Architektura rdzenia ARM Cortex-M3...16

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Transkrypt:

MIKROKONTROLERY FIRMY ATMEL dr inż. Wiesław Madej

Mikrokontroler To elektroniczny układ scalony, zawierający w sobie rdzeń procesora, pamięć oraz programowalne urządzenia wejścia/wyjścia takie jak porty szeregowe i równoległe czy przetworniki. Mikrokontroler pobiera z nieulotnej pamięci wielokrotnego zapisu instrukcje, które następnie wykonuje. Za pomocą tych małych elementów (ich wymiary sięgają zazwyczaj kilku centymetrów) można sterować licznymi zewnętrznymi urządzeniami: od wyświetlaczy, poprzez zamki, silniki, czujniki, światła drogowe itp. Te złożone układy pobierają tak mało prądu, że mogą z powodzeniem być zasilane z przenośnych źródeł energii np. z baterii.

ATMEL Atmel Corporation to przedsiębiorstwo wytwarzające układy scalone. Produkuje między innymi: pamięci EEPROM i flash, 8 bitowe mikrokontrolery oparte na architekturze 8051, 32 bitowe mikrokontrolery oparte na architekturze ARM, 8 bitowe mikrokontrolery oparte na własnej architekturze AVR, 32 bitowe mikrokontrolery oparte na własnej architekturze AVR32, Układy FPGA

Układy z rodziny AVR zostały podzielone na kilka "pod-rodzin": tinyavr - oznaczenie Attiny - od 1 do8kb pamięć programu - obudowy o 8-32 pinach - ograniczony zestaw zintegrowanych peryferiów - obniżony pobór mocy megaavr - oznaczenie ATmega - od 4 do 256kB pamięci programu - obudowy o 28-100 pinach - rozszerzony zestaw poleceń (m. in. o polecenia do obsługi powiększonej pamięci programu) - liczne zintegrowane peryferia (przetworniki AC/CA, timery, liczniki itp) XMEGA oznaczenie ATxmega - od 16 do 384kB pamięci programu - obudowy o 44-100 wyprowadzeniach - rozszerzone możliwości, takie jak obsługa DMA i sprzętowe wsparcie dla kryptografii (używane m. in. przy współpracy z kartami inteligentnymi)

Wyposażenie Poszczególne mikrokontrolery z rodziny AVR różnią się między sobą, przede wszystkim ilością pamięci flash, RAM, liczbą portów wejść/wyjść oraz układami dodatkowymi. Przykładowo: ATtiny13 ma 1kB pamięci programu (flash), 64 bajty EEPROM, 64 B RAM + 32 rejestry, 6 wejść/wyjść, 2 kanały PWM, SPI, 4 kanały A/D, oscylator w układzie scalonym, montowany jest w obudowie 8 nóżkowej. ATmega2560 ma 256 kb pamięci programu, 4 kb EEPROMu, 8 kb RAM, 86 wejść/wyjść, 4 liczniki/czasomierze 16 bitowe, 6 - PWM, SPI, 2 - UART, 16 - kanałów A/D.

Podstawowe elementy AVR (nie wszystkie są w każdym układzie): Pamięć flash Pamięć EEPROM Pamięć SRAM uniwersalne porty wejścia/wyjścia 8 i 16 bitowe liczniki/czasomierze z możliwością generowania PWM wielokanałowy 10 bitowy przetwornik analogowo-cyfrowy TWI (Two-wire Interface), odpowiednik I²C interfejs szeregowy USART interfejs SPI Watchdog wewnętrzny oscylator ISP (In-System-Programming) JTAG, umożliwia debugowanie programu DebugWire, umożliwia debugowanie programu dla kontrolerów z ograniczoną liczbą pinów.

Mikrokontrolery rodziny 8051 Mówi się, że mikrokontroler to funkcjonalny system komputerowy w jednej kości. Taka kość to zazwyczaj to, co zwykło się nazywać (nie do końca precyzyjnie) układem scalonym, bo mikrokontroler wygląda zazwyczaj jak duży czarny scalak o wielu nóżkach. Zwykle jest to standardowa obudowa dwurzędowa DIP-40 (tzn. posiada 40 nóżek, po 20 z każdej strony). Poniżej znajduje się zdjęcie takiego typowego układu.

Mikrokontrolery z serii 8051 zostały wyprodukowane przez firmę Intel w latxx wieku. Wbrew temu, co się uważa, układy te są wciąż popularne. Zwłaszcza w Polsce są one często wykorzystywane w licznych urządzeniach, a także jako układy dydaktyczne - ze względu na ich prostą budowę i łatwość programowania ciekawych aplikacji, zajmują się nimi nawet uczniowie szkół średnich o profilu elektronicznym. Są to jedne z najpopularniejszych uc 8-bitowych na świecie. Popularne i tanie kości z wbudowaną pamięcią FLASH z serii 89c51 i 89c52, są produkowane przez firmę Atmel. Mikrokontrolery te posiadają 128/256 bajtów RAMu, 4, 8 lub więcej kb wewnętrznej pamięci ROM (FLASH), cztery dwukierunkowe 8-bitowe porty we/wy, port szeregowy, dwa/trzy timery i system przerwań. Wydaje się, że 128 bajtów - (!) tak, bajtów - RAMu to bardzo mało jak na dzisiejsze czasy, ale proszę mi wierzyć, że dla naszych najbardziej podstawowych potrzeb będzie to wystarczająca ilość miejsca. Cztery porty wystarczają zdecydowanie do podłączenia wielu urządzeń zewnętrznych, np. sterowania wyświetlaczem LCD czy czytnikiem kart pamięci.

W takiej plastikowej obudowie znajdują się podstawowe urządzenia, jakimi dysponują komputery. Zazwyczaj, jako minimum znajdziemy w niej rdzeń procesora, pamięć (zarówno RAM, jak i pamięć programu) oraz programowalne urządzenia wejścia/wyjścia. W zwykłym komputerze domowym najważniejszy układ zawiera w sobie procesor. Inne układy zajmują się innymi sprawami, oddzielnie mamy RAM, oddzielnie np. kartę graficzną, oddzielnie kontroler karty sieciowej. W mikrokontrolerze podobne rzeczy znajdują się razem, co pozwala na zmniejszenie kosztów i sprawia, że mieszczą się on w bardzo małych przestrzeniach, np. jednostkach sterujących silnikami samochodów, urządzeniach biurowych, wielkich, ale prostych maszynach, czy zabawkach. Mały rozmiar pozwala też na oszczędność w zasilaniu układy tego typu działają świetnie zasilane z baterii.

FUNKCJE NÓŻEK Obudowa 40-nóżkowa pozwala na zasilanie całego układu, przesyłanie danych i sterowanie podstawowymi funkcjami. Zazwyczaj pozwala także na programowanie pamięci wewnętrznej typu EPROM lub FLASH. 40 nóżek to standard, ale są też układy w wersjach uproszczonych, które posiadają mniejszą ilość portów wejścia/wyjścia, co pozwala zmieścić całość w o połowę mniejszej obudowie. ZASILANIE. Każdy mikrokontroler potrzebuje być zasilany z precyzyjnego źródła napięcia. Przeważnie będziemy korzystali z napięcia o wartości 5V, ale zdarzają się też układy i sytuacje, w których używa się mniejszych napięć, np. 3.3V, albo 3V. Najczęściej wykorzystywane są do tego celu dwie nóżki - na jedną podajemy +5V, a drugą zwieramy do masy.

ZEGAR I TAKTOWANIE Oprócz zasilania potrzebne jest stabilne źródło impulsów. Mikrokontrolery posiadają albo wewnętrzne zegary, albo specjalne nóżki, do których podłącza się oscylator kwarcowy. Taki oscylator drga z bardzo stabilną częstotliwością, którą dobieramy w zależności od potrzeb. Przeważnie jest to częstotliwość w granicach 1MHz-24MHz. STEROWANIE UKŁADEM Niektóre układy są wyposażone w dodatkowe nóżki, które spełniają własne określone funkcje. Często spotykana jest nóżka RESET, którą np. możemy podłączyć do przycisku. Inne tego typu nóżki mogą służyć wybieraniu jednego z dwóch trybów pracy albo są wykorzystywane przy dostępie do pamięci zewnętrznej.

PORTY WEJŚCIA/WYJŚCIA. Aby móc przesyłać dane i kontaktować się z urządzeniami zewnętrznymi, potrzebujemy kilku osobnych "przewodów", którymi możemy te urządzenia podłączyć do naszego mikrokontrolera. Dlatego układy tego typu posiadają pewną ilość linii, po których możemy odczytywać i zapisywać dane. BUDOWA WEWNĘTRZNA Wewnątrz mikrokontrolera wszystko działa wykorzystując komunikację poprzez szynę danych. Taka szyna danych łączy wszystkie urządzenia, które są do niej dołączone: procesor, pamięci, porty i inne. Urządzenie chcąc się skomunikować z innym, robi coś, co moglibyśmy porównać do "wybierania numeru", po czym, gdy otrzyma pozwolenie na kontakt przesyła lub odbiera porcję danych.

Główne cechy jednych z najpopularniejszych mikrokontrolerów z rodziny 8051 firmy Atmel Mikrokontrolery AT89C1051, AT89C2051, AT89C4051 Układy te produkowane przez firmę Atmel, należą do najpopularniejszych układów stosowanych w niezbyt wymagających aplikacjach. Ich główne cechy to: - Obudowa 20-pinowa, 15linii we/wy, - Napięcie zasilanie od 2.7V do 6V, - Częstotliwość taktowania od 0 do 24 MHz (możliwość zatrzymania pracy mikrokontrolera), - 2 tryby pracy z redukcją poboru mocy, - 1 kb, 2kB lub 4kB pamięci programu Flash (odpowiednio dla C1051, C2051, C4051), - 64 bajty (C1051) lub 128 bajtów (C2051 i C4051) pamięci danych (RAM), - Wbudowany komparator analogowy, - Wbudowane liczniki/timery: 1 w C1051 lub 2 w C2051 i C4051, - Wbudowany układ transmisji szeregowej (oprócz C1051).

Mikrokontroler AT89C51 Układ ten, produkowany przez firmę Atmel, jest niemal identyczny pod względem parametrów z protoplastą 8051. Jego główne cechy to: - Obudowa 40-pinowa, 32 linie we/wy - Napięcie zasilania od 4V do 6V - Częstotliwość taktowania od 0 do 24 MHz - 4kB pamięci Flash - 128 bajtów pamięci danych(ram) - Możliwośc dołączenia zewnętrznych 64 kb pamięci programu i 64kB pamięci danych. - 2 tryby pracy z redukcją poboru mocy - 2 liczniki/timery - Wbudowany układ transmisji szeregowej

Mikrokontroler AT89C52 Kolejny układ firmy Atmel o parametrach identycznych z AT89C51, za wyjątkiem: - 8kB pamięci programu Flash - 256 bajtów danych (RAM) - Dodatkowy, trzeci licznik/timer o rozbudowanych możliwościach pracy Mikrokontroler AT89C55 Jest to układ AT89C52 rozbudowany o następujące elementy: - 20kB pamięci programu Flash - Częstotliwość taktowania od 0 do 33MHz - Podwójny rejestr DPTR - Wbudowany układ watchdog i wykrywania włączenia napięcia zasilania.

Mikrokontroler ATMega16 Mikrokontroler ATMega16 został stworzony na bazie wysokowydajnej architektury AVR. Jest to procesor o zredukowanym zbiorze rozkazów (RISC), posiada 131 instrukcji, w większości nastawionych na język C. Posiada 16kB pamięci flash programowanej o trwałości do 10k cykli kasuj/zapisz. Dodatkowo jest to mikroprocesor posiadający 1kB pamięci danych (SRAM) oraz 512 bajtów pamięci nie ulotnej (EEPROM). Możemy w nim znaleźć 32 rejestry ogólnego przeznaczenia (robocze) oraz 32 konfigurowalnych linii wejścia/wyjścia. Ponadto ATMega16 posiada trzy timery/liczniki z trybami porównania, dwa szeregowe interfejsy (USART, I2C), analogowy komparator, wewnętrzny programowalny generator RC(1, 2, 4 lub 8MHz), 8kanałowy 10bitowy przetwornik ADC z opcjonalnym trybem wejścia różnicowego wraz z programowalnym wzmocnieniem (tylko w wersji TQFP) oraz 6 trybów oszczędzania energii. W mikrokontrolerze ATMega16 wyróżniamy 21 zewnętrznych/wewnętrznych programowalnych przerwań o ustalonej kolejności obsługi. Układ Power-On Reset zapewnia prawidłowy reset po włączeniu zasilania. Napięcia zasilania oraz dopuszczalna szybkość pracy są następujące : 2,7 5,5 V oraz 0 8 MHz dla ATMega16L, 4,5 5,5 V oraz 0 16 MHz dla ATMega16. Pobór mocy dla 3 W przy częstotliwości równej 1MHz przedstawia się następująco: W stanie aktywnej pracy - 1,1mA, trybie Idle - 0,35mA, trybie Power-down - poniżej 1uA. Dostępny jest w 3 rodzajach obudowy: 40 pin PDIP, 44 pin TQFP, 44 pad MLF.

Mikrokontroler ATMega16 w obudowie PDIP40

Budowa rdzenia AVR Głównym zadaniem centralnej jednostki liczącej (CPU) jest zapewnienie poprawnego i szybkiego wykonywania kodu. Z tego powodu CPU musi mieć dostęp do pamięci, wykonywać operacje, sterować układami peryferyjnymi i obsługiwać przerwania. AVR zbudowany jest w architekturze harvardzkiej, oznacza to rozdzielenie pamięci i szyn do programu i danych oraz zapewnia maksymalna wydajność. Instrukcje w pamięci programu wykonywane są potokowo co oznacza, że gdy jedna instrukcja jest już wykonywana, druga jest pobierana z pamięci programu. Takie rozwiązanie pozwala na wykonanie całej instrukcji w każdym cyklu zegara. 32 rejestry robocze o jedno cyklowym czasie dostępu zawarte w bloku szybkiego dostępu pozawala aby jednostka arytmetyczno logiczna (ALU) mogła również pracować w jednym cyklu. Oznacza to, że w typowej operacji, dwa argumenty ALU będą wystawione z bloku rejestrów, następnie wykonana będzie operacja, a wynik jest powrotem umieszczony w bloku rejestrów, i to wszystko stanie się w jednym cyklu zegara.

Rejestr SREG SREG jest rejestrem statusowym zawierającym informacje o rezultacie ostatnio wykonanej przez ALU operacji arytmetycznej. Dzięki temu, że w zależności od instrukcji może być zmieniana dowolna ilość bitów (nie zawsze cała zawartość) możliwe jest tworzenie bardziej zoptymalizowanego kodu pod względem szybkości i objętości pracując na pojedynczych znacznikach, którymi są flagi. Zawartość rejestru SREG nie jest automatycznie zapamiętywana przy wejściu w kod obsługi przerwania i odzyskiwana po jego wykonaniu. Należy to wykonywać programowo.

Rejestr SREG I - Globalne odblokowanie przerwań. Bit ten jest ustawiany aby odblokować przerwania. Jeżeli flaga I jest ustawiona na 0 to nie może wystąpić żadne z przerwań, gdyż są one blokowane. Bit I po wystąpieniu jakiegokolwiek przerwania jest automatycznie kasowany i za pomocą instrukcji RETI ponownie ustawiany aby umożliwić kolejne instrukcje przerwań. T Flaga umożliwiająca przechowanie kopiowanego bitu. Podczas wykonania instrukcji kopiowania BLT lub BST nit T jest używany jako bit źródłowy lub docelowy operacji bitowej.

Rejestr SREG H Flaga przeniesienia połowkowego. Flaga ta jest ustawiana w momencie, gdy nastąpi przeniesienie na 4 bit. V Flaga wskazująca przepełnienie uzupełnienia do dwoch. N Flaga wyniku ujemnego. Zostaje ustawiona w przypadku ujemnego wyniku operacji arytmetycznej. S Flaga znaku. Jest on wynikiem operacji V xor N. Z Flaga zera. Jej ustawienie oznajmia, że wynik działania arytmetycznego lub logicznego wyniósł zero. C Flaga przeniesienia. Flaga jest ustawiana w momencie gdy następuje całkowite przeniesienie w wyniku operacji arytmetycznej lub logicznej.

Porty wejścia/wyjścia Wszystkie porty w mikrokontrolerów AVR są cyfrowymi portami o zmiennym kierunku przepuszczanych danych (I/O). Dzięki instrukcjom CBI oraz SBI możemy ustawić poszczególny pin na wejściowy lub wyjściowy. Wydajność prądowa pinów w stanie niskim sięga 20mA, dodatkowo istnieje możliwość włączenia rezystora podciągającego do napięcia zasilania. Każdy z portów posiada 3 rejestry konfiguracyjne: rejestr danych PORTx, rejestr kierunkowy DDRx oraz port pinów wejściowych PINx. Rejestr DDRx określa za pomocą bitów DDxn kierunek pracy pinów wpisanie 1 powoduje prace pinu Pxn jako wyjściowy, 0 jako wejściowy. Rejestr danych PORTxn w momencie gdy dany pin ustawiony jest jako wyjście powoduje przepisanie wartości logicznej w odpowiedni stan wyjściowy pinu. Dla jedynki - stan wysoki, dla zera stan niski. W przypadku gdy dany pin jest ustawiony jako wejście, jedynka podana na PORTxn włącza rezystor podciągający(pullup), natomiast zero spowoduje jego wyłączenie. Gdy dany pin jest skonfigurowany jako wyjście rezystor podciągający napięcie jest automatycznie wyłączany. Dodatkowo istnieje możliwość ustawienia pinu PUD w rejestrze SFIOR, co spowoduje włączenie rezystorów podciągających dla wszystkich pinów bez względu na ustawienia bitów rejestru danych i kierunkowego.

Konfiguracja pinów I/O

Źródła resetu Podczas resetu wszystkie rejestry portów wejścia/wyjścia zostają ustawione na ich wartości początkowe. Jeżeli włączone zostały przerwania to pod adresem 0x0000 powinna znaleźć się instrukcja JMP, która obsłuży procedury resetu. W przeciwnym wypadku, program nigdy nie używa przerwań ten adres 0x0000 może być adresem początkowym programu. Dzięki rejestrowi MCUCSR można sprawdzić jakie źródło spowodowało reset. ATMega16 posiada 5 rożnych źródeł resetu: Power-on restet Watchdog reset Reset zewnętrzny Brown-out reset JTAG AVR reset

Power-on reset jest uaktywniany gdy poziom napięcia zasilającego zejdzie poniżej progu zasilania (4,5 lub 2,7 V). Wbudowany Power-on reset generuje wewnętrzny impuls resetu o wymaganej długości co zapewnia poprawne uruchomienie mikrokontrolera przetrzymując stan resetu przez odpowiednią chwile czasu, po podłączeniu zasilania do mikrokontrolera. Reset zewnętrzny jest powodowany przez pojawienie się niskiego poziomu na pinie RESET. Reset mikrokontrolera nastąpi, gdy długość impulsu resetującego będzie nie mniejsza niż 1,5 μs. Reset watchdog zapobiega zawieszaniu się mikrokontrolera powstającego w np. skutek wykonywania niepożądanych nieskończonych pętli programu. Wygenerowanie impulsu resetującego następuje jeżeli włączony licznik watchdog a nie zostanie w pewnym, określonym czasie wyzerowany. Układ watchdog pracuje z częstotliwością 1 MHz. Włączenie i konfiguracje watchdog a zapewnia rejestr WDTCR.

Brown-out reset następuje gdy poziom zasilania Vcc spadnie poniżej ustalonego poziomu detektora brown-out. Funkcję tę konfiguruje się za pomocą bitów bezpiecznikowych. Reset JTAG AVR wywoływany jest poprzez wstawienie logicznej jedynki w rejestrze resetu (Reset Register) i utrzymuje się tak długo, jak długo ustawiona jest w nim logiczna jedynka. REJESTR WDTCR

Opis poszczególnych bitów rejestru WDTCR WDTOE Bit odblokowania wyłączenia watchdog a. Jest to bit zabezpieczający dodatkowo wyłączenie watchdog a. Jeżeli bit WDE jest ustawiony na 0, wpisanie jedynki na bicie WDTOE spowoduje wyłączenie watchdoga a. WDE Bit włączenia watchdog a. Ustawienie tego bitu na jedynkę włącza układ watchdog a, zero spowoduje możliwość jego wyłączenia. WDP 2:0 Bity preskalera licznika watchdog a. Za pomocą tych bitów możemy ustawić czas jaki upłynie od wyzerowania watchdog a do załączenia impulsu resetującego. Czas można dobrać w zakresie od około 16ms (000) do około 2,2s (111).

Liczniki/Timery W układzie mikrokontrolera ATMega16 znajdują się trzy liczniki. Jeden 16 bitowy i dwa 8 bitowe: licznik z PWM oraz licznik z PWM i pracą asynchroniczną. Jako licznik możemy zaliczyć także układ watchdog. Obydwa liczniki 8-bitowe posiadają te same właściwości z jednym wyjątkiem. Zegar z możliwością pracy asynchronicznej posiada możliwość taktowania z zewnętrznego źródła niezależnie od zegara wewnętrznego. Pozostałe cechy oraz możliwości zastosowań posiada zarówno jeden jak i drugi licznik. Wśród nich wyróżniamy: Licznik jedno kanałowy. Automatyczne kasowanie i restart timera w trybie porównania. Generator częstotliwości. Generator przebiegu PWM. Licznik zdarzeń zewnętrznych. 10-bitowy programowalny preskaler. Źródło przerwań (przepełnienie, zrównanie).

Pierwszy z opisanych wyżej liczników 8 bitowych został oznaczony jako licznik 0, licznik z możliwością pracy asynchronicznej posiada numer 2. Obydwa te liczniki mogą być taktowane wewnętrznie poprzez układ preskalera lub zewnętrzne źródło, które może być podłączone odpowiednio do pinu T0 lub pinów TOSC1/2. Piny TOSC1/2 są zaprojektowane do podłączenia zewnętrznego źródła zegara o częstotliwości 32KHz bez dodatkowych kondensatorów. Dla obydwu liczników możemy wybrać źródło taktowania oraz rodzaj zbocza, przy którym licznik będzie inkrementowany bądź dekrementowany. Ustawień tych dokonuje blok logiczny wyboru zegara. Licznik 0 oraz licznik 2 posiadają oddzielne preskalery. Zarówno jeden, jak i drugi preskaler może być zresetowany za pomocą odpowiedniego bitu w rejestrze SFIOR. Reset dokonywany jest w celu synchronizacji licznika.

Licznik 16 bitowy w ATMega16 jest bardziej zaawansowanym typem licznika. Dostęp do jego 16 bitowych rejestrów odbywa się przez 2 operacje odczytu bądź zapisu 8 bitowej szyny danych. Posiada on również większą gamę właściwości i zastosowań: Niezależne dwie jednostki Output Compare. Jednostka Input Capture z układem redukcji szumów. Automatyczne kasowanie i restart timera w trybie porównywania. Generator częstotliwości. Generator przebiegu PWM. Licznik zdarzeń zewnętrznych. 10-bitowy programowalny preskaler. 4 niezależne źródła przerwań.

Działanie licznika jest identyczne do działania liczników 8 bitowych, z wyjątkiem dodatkowych funkcji. Licznik 16 bitowy, tak jak jego 8 bitowi poprzednicy, również może być taktowany wewnętrznie za pomocą preskalera oraz posiada tryb pracy Output Compare jak i Normal. Jedyną różnica w działaniu wymienionych trybów pracy oraz taktowaniu wewnętrznym jest korzystanie z innych pinów lub rejestrów. Dodatkową funkcja jest funkcja Input Compare. Rejestr Input Compare (ICR1) służy miedzy innymi do przechwycenia wartości licznika na skutek zdarzenia zewnętrznego na pinie ICP1 albo wyjściu komparatora analogowego. W celu lepszego działania moduł Input Capture został wyposażony w układ cyfrowej filtracji szumów. Licznik rozpocznie prace dopiero po wyborze źródła jego zegara.

Przetwornik ADC Mikrokontroler ATmega16 wyposażony jest w 10-bitowy przetwornik ADC z sukcesywną aproksymacją. ADC podłączony jest do 8 kanałowego multipleksera pozwalając na przyłączenie ośmiu napięć wejściowych do każdego z pinów portu A. Możliwe jest także 16 kombinacji podłączenia napięcia różnicowego. Dwa z różnicowych wejść (ADC1, ADC0 oraz ADC3, ADC2) są wyposażone w programowalny stopień wzmacniający, pozwalając na wzmocnienie 0dB (1x), 20dB (10x) i 46dB (200x) zanim sygnał wejściowy zostanie poddany konwersji. Tryb różnicowy wspierany jest w układach ATMega16 w obudowach innych niż PDIP40. Do zasilania przetwornika został specjalnie wyprowadzony pin AVCC. Napięcie zasilające ADC nie może się różnić więcej niż o ±0,3 od VCC. Dla lepszego zabezpieczenia przed szumami z zewnątrz, możliwe jest zasilanie przetwornika z filtra dolnoprzepustowego LC.

Interfejs USART Obecny w mikrokontrolerach szeregowy dwukierunkowy interfejs USART (lub UART) najczęściej służy do komunikacji z komputerem lub innym mikrokontrolerem. Moduły do tego typu transmisji integrowane w mikrokontrolerach, pozwalają często na zaawansowaną konfigurację i wygodną obsługę, a przy tym odciążają CPU. Wybrane istotne cechy modułu USART: Pełny duplex (dzięki niezależnym rejestrom nadawania i odbioru). Praca synchroniczna lub asynchroniczna. Precyzyjny generator szybkości transmisji. Obsługa różnych konfiguracji ramek i kontroli parzystości. Wykrywanie błędów transmisji. Filtrowanie przeciwzakłóceniowe. Trzy niezależne źródła przerwań. Tryb podwójnej szybkości w trybie asynchronicznym. Tryb komunikacji wieloprocesorowej.

USART a UART Od układu UART, w którego często wyposażone są inne starsze mikrokontrolery Atmela, np. AT90S9515 różni się między innymi tym, że może pracować w trybie synchronicznym. W większości przypadków zachowana jest zgodność ze starszym UART, jednak dwa ulepszenia mogą zaburzyć kompatybilność. Dodany został drugi bufor odbiorczy, a rejestr przesuwny odbiornika może pełnić rolę trzeciego bufora. Przez to że dwa bufory odbiorcze pracują jako obrotowy FIFO, odczyt UDR wykonuje się tylko raz na każdy nowy odebrany pakiet danych. Bity statusu (FE, DOR) oraz 9 bit danych, muszą być odczytywane przed odczytem UDR, gdyż potem są tracone. Pin XCK używany jest tylko w trybie pracy synchronicznej.

Interfejs TWI Interfejs TWI (two wire interface) jest w pełni zgodny z popularnym I2C firmy Philips, a Atmel używa innej nazwy aby nie łamać praw patentowych. Interfejs I2C podobnie jak SPI, został stworzony do komunikacji między układami scalonymi w obrębie jednego urządzenia. Komunikacja odbywa się dwuprzewodowo, linią danych SDA oraz linią zegara SCL, które są mogą być wspólne dla wszystkich układów w systemie. Pomimo jednej linii danych, transmisja może odbywać się dwukierunkowo, jednak ze stosunkowo niewielką transmisją. W większości przypadków spotyka się możliwość pracy przy częstotliwości linii SCL do 100kHz, a rzadziej do 400kHz. Moduł TWI wbudowany w ATmega16 umożliwia pracę w obu tych trybach. Współpraca wielu układów po tych samych przewodach jest możliwa dzięki temu, iż każdemu z urządzeń przypisuje się indywidualny adres. Liczba urządzeń podłączonych jednocześnie jest ograniczona jedynie maksymalną pojemnością linii 400pF oraz 7-bitową przestrzenią adresową dla urządzeń podrzędnych.

Instrukcje asemblera W estawieniu instrukcji, w argumentach używane są następujące oznaczenia: Rd R0-R31, rejestr docelowy operacji (także źródłowy), czasem np. 16 d 31, Rr R0-R31, rejestr źródłowy, czasem np. 16 r 31, b stała o wartości 0-7, do oznaczania numeru lub nazwy bitu, np. OCIE0, s stała o wartości 0-7, bit rejestru statusowego SREG, np. V, Z, P stała (0-31/63) określająca adres z przestrzeni adresowej I/O, np. PORTA, K stała (0-31/63) określająca adres z przestrzeni adresowej I/O, np. R16, PORTA, k stała z przedziału wartości zależnego od instrukcji, q stała (0-63) określająca wartość przesunięcia przy adresowaniu pośrednim, X rejestr adresowania pośredniego, X=R27:26, Y rejestr adresowania pośredniego, Y=R29:28, Z rejestr adresowania pośredniego, Z=R31:30.

Opis oznaczeń flag rejestru statusowego SREG (przypomnienie): C flaga przeniesienia (carry), Z flaga zera, N flaga wyniku ujemnego, V wskaźnik przepełnienia uzupełnienia do dwóch, S S = N V, do testów znaku, H flaga przeniesienia połówkowego (half carry), T bit transferowy, używany przez instrukcje BLD i BST, I globalna flaga przerwań.

Tryby adresowania natychmiastowe: LDI R16, 3 bezpośrednie: LDS R1, 100 pośrednie: LD R1, X pośrednie z postinkrementacją: LD R1, X+ pośrednie z predekrementacją: LD R1, -X pośrednie z przemieszczeniem: LDD R1, Y+2 pośrednie pamięci programu: LPM R1, Z

Opis kolumn: Mnemonik składnia instrukcji asemblera, Opis skrócony opis operacji realizowanej przez instrukcję, Operacja logiczny zapis operacji wykonywanej przez instrukcję, Clk liczba taktów zegara systemowego potrzebnych na wykonanie operacji. Pozostałe oznaczenia używane w zestawieniu instrukcji: SP wskaźnik stosu (stack pointer), STACK stos adresów powrotnych i przechowywanych rejestrów. W przypadku używania złożonych instrukcji jak np. mnożenie (MULS, FMULS itd.), zalecane jest skorzystanie z opisu w pomocy programu AVRStudio lub dokumentacji instrukcji mikrokontrolerów AVR

Instrukcje organizujące rozgałęzienia

Instrukcje transferu danych

Instrukcje operacji bitowych

Przerwania Kod programu rozpoczyna sie od wektora przerwan. Zgłoszenie przerwania powoduje sprzetowe: odłozenie na stos - adresu powrotu (ale nie rejestru stanu!), - zablokowanie przerwań poprzez wyzerowanie bitu I w rejestrze stanu SREG, - wykonanie rozkazu spod odpowiedniego adresu w pamięci programu. Program obsługi przerwania zwykle kończy sie rozkazem RETI, który włącza przerwania.

Wektor przerwań

Pierwszy program.cseg ; segment kodu.org 0 ; przerwanie o adresie 0 = reset JMP START.ORG 42 ; pierwszy adres za wektorem przerwan START: LDI R16, 0b00001111 OUT DDRA, R16 ; nogi PA0..PA3 jako wyjscia LDI R16, 0b00001011 OUT PORTA, R16 ; nogi PA0,PA1,PA3 stan wysoki ; noga PA2 stan niski PETLA: RJMP PETLA ; główna pętla programu

Programowanie w języku C/C++ Podstawowe instrukcje sterujące Pierwszą podstawową i najprostszą instrukcją jest instrukcją ustawiająca dany port jako wejście lub wyjście. Podanie zera do rejestru portu ustawi go jako wejściowy, podanie jedynki zdefiniuje go jako wyjściowy. Dla przykładu aby zdefiniować wszystkie piny portu B jako wejściowe musimy posłużyć się następującą operacją: DDRB= 0x00; Aby ustawić wszystkie piny portu B jako wyjściowe dokonujemy operacji: DDRB = 0xFF; Kierunkowość pinów danego partu może być ustawiana w dowolny sposób np.: DDRB = 0x3F; W tym przypadku tylko 2 najstarsze bity rejestru będą powodowały ustawienie pinów wejściowych, reszta pinów zostanie zdefiniowana jako wyjścia.

Odczyt i zapis danych na pinach jest wykonywany równie prosto jak definiowanie kierunkowości portu. Musimy pamiętać tylko o jednej rzeczy aby zapisać informacje na dany port musi on być zdefiniowany jako wyjściowy, aby odczytać informacje port musi być ustawiony jako wejściowy. Zapisu przykładowej wartości na port B dokonujemy w następujący sposób: PORTB = 0x12; Aby odczytać informacje z portu B wykonujemy operacje: Informacja = PINB; W tym wypadku wartość na porcie B została zapisana do zmiennej Informacja.

Instrukcje warunkowe są podstawowymi instrukcjami dla każdego rodzaju programowania. Możemy wyróżnić 3 rożne rodzaje warunków: if, else, else if. Oto przykład: if(warunek1) { instrukcja1; } else if(warunek2) { instrukcja2; } else { instrukcja3; } W tym przypadku jeżeli zostanie spełniony warunek1 zostanie wykonana instrukcja1, jeżeli zostanie spełniony warunek2 zostanie wykonana instrukcja2, natomiast jeśli żaden z powyższych warunków nie będzie spełniony nastąpi wykonanie instrukcji3.

Kolejną grupą instrukcji sterujących są pętle. Wyróżniamy 3 rodzaje instrukcji pętli: for, while, do-while. Pętli używa się w celu powtórzenia danej instrukcji o zdefiniowaną przez programistę ilość razy. Poniżej podaje przykładowe fragmentu kodu posiadającego każdy z wyżej wymienionych instrukcji pętli: Pętla for for(int i=0; i<20; i++) { Suma += i; } Pierwsze wyrażenie w nawiasie występującym po słowie for oznacza początkową wartość argumentu i. Drugie wyrażenie jest warunkiem, który póki jest spełniony gwarantuje wykonanie instrukcji Suma +=i. Trzecie wyrażenie jest zwyczajną instrukcją wykonywaną każdorazowo, gdy okaże się, że warunek zapisany w drugiej instrukcji jest spełniony. Zazwyczaj instrukcja ta związana jest z warunkiem by zapewnić skończoną ilość wykonania pętli. W powyższym przykładzie pętla zostanie wykonana 20 razy.

int i=0; while(i<20) { Suma += i; i++; } Pętla while Pętla while jest wykonywana tak długo jak długo spełniony jest warunek opisany w nawiasie znajdującym się po słowie while. Wykonanie pętli oznacza wykonanie instrukcji zawartej w nawiasie klamrowym. Po każdorazowym wykonaniu instrukcji następuje sprawdzenie warunku.

do { Suma += i; i++; }while(i<10); Pętla do-while Pętla do-while nie rożni się wiele od pętli while. Jedyną różnicą jest to, że najpierw wykonywana jest instrukcja w nawiasach klamrowych, a dopiero potem sprawdzany warunek zawarty w nawiasach zwykłych. Powoduje to przynajmniej jedno wykonanie instrukcji nawet przy nie spełnionym warunku.

Operatory arytmetyczne i logiczne W każdego typu programowaniu, a w szczególności programowaniu mikrokontrolerów wielką role odgrywają operatory. Możemy je podzielić na operatory arytmetyczne oraz logiczne. Mikrokontroler ATMega16 jest w stanie wykonywać operacje arytmetyczne takie jak: dodawanie, odejmowanie, mnożenie, dzielenie. Odpowiednio do ich realizacji wykorzystywane są operatory: +, -, *, / oraz operator przypisania =. Przykładowy zapis operacji: Wynik = zmienna1 * zmienna2; Wynik2 = Wynik + zmienna2; Jak widać zapis kodu jest bardzo intuicyjny.

Operacje logiczne są drugim rodzajem operacji najczęściej wykonywanych podczas programowania mikrokontrolera. ATMega16 ma możliwość wykonywania operacji: AND, OR, XOR. Do ich realizacji wykorzystywane są odpowiednio operatory: &,, ^. Przykładowy zapis operacji przedstawia się niemalże identycznie jak przy wykonywaniu operacji logicznych np. Wynik_log = zmienna1 ^ zmienna2

Dodatkowo operacja AND jest używana do tzw. operacji maskowania. Maskowanie polega na wyzerowaniu niepotrzebnych w dalszych operacjach bitów. Wykonywana jest operacja Wynik_log = Zmienna1 & Liczba_maskujaca. Poszczególne bity ciągu zerojedynkowego Liczba_maskujaca zerują bity zmiennej Zmienna1 o tej samej hierarchii jeżeli ich wartość wynosi 0, a przepisują, gdy ich wartość wyniesie 1. Najprościej to przedstawić na przykładzie, gdzie: Zmienna1 = 10110101; Jeżeli teraz chcemy przenieść informacje zawartą tylko na 3 najstarszych bitach ustawiamy: Liczba_maskujaca = 11100000; Da to nam wynik: Wynik_log = 10100000;

Przesunięcie Ostatnim rodzajem operacji jest operacja przesuwania bitów w lewo lub w prawo. Do przesunięcia bitów w lewo służy operator <<, w prawo >>. Przykładowo - Dana = 0xA5 >> 4. W wyniku tej operacji zmienna dana zostanie przesunięta w prawo 4 razy. Lub też z perspektywy arytmetyki można powiedzieć, zostanie podzielona przez 2 do potęgi 4. W zapisie binarnym wyglądać to będzie następująco: Dana = 10100101 - wartość początkowa Dana = 01010010 - jedno przesunięcie w prawo Dana = 00010100 - trzy przesunięcia w prawo Przesuwanie w lewo działa odwrotnie do przesuwania w prawo i analogicznie w rozumieniu arytmetycznym jest mnożeniem przez 2 do potęgi wynoszącej ilość przesunięć.

AtMega128

To na dzisiaj tyle Dziękuję za uwagę