Atmel

8-bitowy mikrokontroler AVR firmy Atmel z programowalną w systemie pamięcią flash o pojemności 2/4/8 kilobajtówżeton

 

Cechy

  • 8-bitowy mikrokontroler AVR® o wysokiej wydajności i niskim poborze mocy
  • Zaawansowana architektura RISC
  • 120 Potężne instrukcje - większość wykonywania pojedynczego cyklu zegara
  • 32 x 8 rejestrów roboczych ogólnego przeznaczenia
  • W pełni statyczna praca
  • Nieulotne pamięci programów i danych
  • 2/4/8K bajtów programowalnej pamięci programu Flash w systemie
  • Wytrzymałość: 10,000 XNUMX cykli zapisu/kasowania
  • Programowalna w systemie pamięć EEPROM o pojemności 128/256/512 bajtów
  • Wytrzymałość: 100,000 XNUMX cykli zapisu/kasowania
  • Wewnętrzna pamięć SRAM 128/256/512 bajtów
  • Blokada programowa dla samoprogramującego się programu Flash i bezpieczeństwa danych EEPROM

Funkcje peryferyjne

  • 8-bitowy timer/licznik z preskalerem i dwoma kanałami PWM
  • 8-bitowy szybki zegar/licznik z oddzielnym preskalerem
  • 2 wyjścia PWM wysokiej częstotliwości z oddzielnymi rejestrami porównawczymi
  • Programowalny generator czasu martwego
  • USI – uniwersalny interfejs szeregowy z detektorem stanu startu
  • 10-bitowy przetwornik analogowo-cyfrowy

4 kanały z pojedynczą końcówką

2 pary kanałów różnicowych ADC z programowanym wzmocnieniem (1x, 20x)

Pomiar temperatury

Programowalny zegar Watchdog z oddzielnym oscylatorem na chipie

Analogowy komparator na chipie

Specjalne funkcje mikrokontrolera

debugWIRE Wbudowany system debugowania

Możliwość programowania w systemie poprzez port SPI

Zewnętrzne i wewnętrzne źródła przerwań

Tryby bezczynności przy niskim poborze mocy, redukcja szumów ADC i tryby wyłączenia

Ulepszony obwód resetowania po włączeniu zasilania

Programowalny obwód wykrywania zaniku napięcia

Wewnętrzny kalibrowany oscylator

I / O i pakiety

Sześć programowalnych linii we/wy

8-pinowe PDIP, 8-pinowe SOIC, 20-pinowe QFN/MLF i 8-pinowe TSSOP (tylko ATtiny45/V)

Objętość operacyjnatage
– 1.8 – 5.5 V dla ATtiny25V/45V/85V
– 2.7 – 5.5 V dla ATtiny25/45/85

Klasa prędkości
– ATtiny25V/45V/85V: 0 – 4 MHz przy 1.8 – 5.5 V, 0 – 10 MHz przy 2.7 ​​– 5.5 V
– ATtiny25/45/85: 0 – 10 MHz przy 2.7 ​​– 5.5 V, 0 – 20 MHz przy 4.5 – 5.5 V

Przemysłowy zakres temperatur

Niskie zużycie energii

Tryb aktywny:

1 MHz, 1.8 V: 300 µA

Tryb wyłączenia:

Konfiguracje pinów

Pinout ATtiny25/45/85 Konfiguracja

Opisy pinów

VCC: Dostawa objtage.
GND: Masa.
Port B (PB5:PB0): Port B to 6-bitowy dwukierunkowy port we/wy z wewnętrznymi rezystorami podciągającymi (wybieranymi dla każdego bitu). Bufory wyjściowe portu B mają symetryczną charakterystykę napędu, zarówno z dużą wydajnością ujścia, jak i źródła. Jako wejścia, piny Portu B, które są zewnętrznie ustawione w stan niski, będą źródłem prądu, jeśli zostaną aktywowane rezystory podciągające. Styki Portu B są trójstanowe, gdy stan resetowania staje się aktywny, nawet jeśli zegar nie działa.

Port B obsługuje także różne funkcje specjalne ATtiny25/45/85 wymienione na liście
W ATtiny25 programowalne porty we/wy PB3 i PB4 (piny 2 i 3) są zamieniane w trybie zgodności ATtiny15 w celu zapewnienia kompatybilności wstecznej z ATtiny15.

RESET: Resetowanie wejścia. Niski poziom na tym pinie przez czas dłuższy niż minimalna długość impulsu spowoduje reset, nawet jeśli zegar nie pracuje i pod warunkiem, że pin resetowania nie został wyłączony. Minimalna długość impulsu podana jest w Tabela 21-4 na stronie 165. Krótsze impulsy nie gwarantują wygenerowania resetu.

Pin resetowania może być również używany jako (słaby) pin I/O.

Nadview

ATtiny25/45/85 to 8-bitowy mikrokontroler CMOS o niskim poborze mocy, oparty na ulepszonej architekturze RISC AVR. Wykonując potężne instrukcje w jednym cyklu zegara, ATtiny25/45/85 osiąga przepustowość bliską 1 MIPS na MHz, umożliwiając projektantowi systemu optymalizację zużycia energii w porównaniu z szybkością przetwarzania.

Schemat blokowy Schemat blokowy

Rdzeń AVR łączy bogaty zestaw instrukcji z 32 rejestrami roboczymi ogólnego przeznaczenia. Wszystkie 32 rejestry są bezpośrednio połączone z jednostką arytmetyczną (ALU), umożliwiając dostęp do dwóch niezależnych rejestrów w ramach jednej instrukcji wykonywanej w jednym cyklu zegara. Powstała architektura jest bardziej wydajna pod względem kodu, a jednocześnie osiąga przepustowość do dziesięciu razy większą niż w przypadku konwencjonalnych mikrokontrolerów CISC.

ATtiny25/45/85 zapewnia następujące funkcje: 2/4/8 KB programowalnej pamięci Flash w systemie, 128/256/512 bajtów EEPROM, 128/256/256 bajtów SRAM, 6 linii we/wy ogólnego przeznaczenia, 32 ogólne rejestry robocze, jeden 8-bitowy timer/licznik z trybami porównywania, jeden 8-bitowy szybki timer/licznik, uniwersalny interfejs szeregowy, przerwania wewnętrzne i zewnętrzne, 4-kanałowy, 10-bitowy przetwornik ADC, programowalny zegar Watchdog z wewnętrznym Oscylator i trzy tryby oszczędzania energii wybierane programowo. Tryb bezczynności zatrzymuje procesor, umożliwiając dalsze działanie pamięci SRAM, timera/licznika, ADC, komparatora analogowego i systemu przerwań. Tryb wyłączenia zapisuje zawartość rejestru, wyłączając wszystkie funkcje chipa aż do następnego przerwania lub resetu sprzętowego. Tryb redukcji szumów ADC zatrzymuje procesor i wszystkie moduły we/wy z wyjątkiem ADC, aby zminimalizować szumy przełączania podczas konwersji ADC.

Urządzenie zostało wyprodukowane przy użyciu technologii pamięci nieulotnej o dużej gęstości firmy Atmel. Wbudowana pamięć ISP Flash umożliwia przeprogramowanie pamięci programu w systemie za pośrednictwem interfejsu szeregowego SPI, za pomocą konwencjonalnego programatora pamięci nieulotnej lub za pomocą wbudowanego kodu rozruchowego działającego na rdzeniu AVR.

ATtiny25/45/85 AVR jest obsługiwany przez pełny zestaw narzędzi do tworzenia programów i systemów, w tym: kompilatory C, asemblery makr, debugery/symulatory programów i zestawy ewaluacyjne.

O zasobach

Wyczerpujący zestaw narzędzi programistycznych, notatek aplikacji i arkuszy danych jest dostępny do pobrania http://www.atmel.com/avr.

Kod Examples

Ta dokumentacja zawiera prosty kod examp, które pokrótce pokazują, jak korzystać z różnych części urządzenia. Te kody exampzałóżmy, że nagłówek specyficzny dla części file jest dołączany przed kompilacją. Należy pamiętać, że nie wszyscy dostawcy kompilatorów C dołączają definicje bitów w nagłówku files i obsługa przerwań w C zależy od kompilatora. Aby uzyskać więcej informacji, sprawdź dokumentację kompilatora C.

W przypadku rejestrów we/wy znajdujących się na rozszerzonej mapie we/wy instrukcje „IN”, „OUT”, „SBIS”, „SBIC”, „CBI” i „SBI” należy zastąpić instrukcjami umożliwiającymi dostęp do rozszerzonych I /O. Zazwyczaj oznacza to „LDS” i „STS” w połączeniu z „SBRS”, „SBRC”, „SBR” i „CBR”. Należy pamiętać, że nie wszystkie urządzenia AVR zawierają rozszerzoną mapę wejść/wyjść.

Pojemnościowy czujnik dotykowy

Biblioteka Atmel QTouch zapewnia proste w użyciu rozwiązanie dla interfejsów dotykowych w mikrokontrolerach Atmel AVR. Biblioteka QTouch obsługuje metody akwizycji QTouch® i QMatrix®.

Czujnik dotyku można łatwo dodać do dowolnej aplikacji, łącząc bibliotekę QTouch i używając interfejsu programowania aplikacji (API) biblioteki w celu zdefiniowania kanałów dotykowych i czujników. Następnie aplikacja wywołuje interfejs API w celu pobrania informacji o kanale i określenia stanu czujnika dotykowego.

Biblioteka QTouch jest bezpłatna i można ją pobrać ze strony Atmel webstrona. Więcej informacji i szczegółów implementacji można znaleźć w Podręczniku użytkownika biblioteki QTouch – dostępnym również w witrynie Atmel webstrona.

Przechowywanie danych

Niezawodność Wyniki kwalifikacji pokazują, że przewidywany wskaźnik niepowodzenia przechowywania danych jest znacznie mniejszy niż 1 PPM w ciągu 20 lat w temperaturze 85°C lub 100 lat w temperaturze 25°C.

Rdzeń procesora AVR

Wstęp

W tej sekcji omówiono ogólnie architekturę rdzenia AVR. Główną funkcją rdzenia procesora jest zapewnienie poprawnego wykonania programu. Dlatego procesor musi mieć dostęp do pamięci, wykonywać obliczenia, sterować urządzeniami peryferyjnymi i obsługiwać przerwania.

Architektoniczny koniecview Architektura

Aby zmaksymalizować wydajność i równoległość, AVR wykorzystuje architekturę Harvarda – z oddzielnymi pamięciami i magistralami dla programów i danych. Instrukcje w pamięci programu są wykonywane w trybie potokowania jednopoziomowego. Podczas wykonywania jednej instrukcji następna instrukcja jest pobierana z wyprzedzeniem z pamięci programu. Koncepcja ta umożliwia wykonywanie instrukcji w każdym cyklu zegara. Pamięć programu jest programowalną w systemie pamięcią Flash.

Rejestr szybkiego dostępu File zawiera 32 x 8-bitowe rejestry robocze ogólnego przeznaczenia z czasem dostępu w jednym cyklu zegara. Umożliwia to jednocyklową pracę w jednostce arytmetyczno-logicznej (ALU). W typowej operacji ALU z rejestru wyprowadzane są dwa argumenty File, operacja jest wykonywana, a wynik zapisywany jest z powrotem w Rejestrze File– w jednym cyklu zegarowym.

Sześć z 32 rejestrów można wykorzystać jako trzy 16-bitowe wskaźniki pośrednich rejestrów adresowych do adresowania przestrzeni danych – umożliwiając wydajne obliczanie adresu. Jeden z tych wskaźników adresu może być także użyty jako wskaźnik adresu dla tablic przeglądowych w pamięci programu Flash. Te dodane rejestry funkcyjne to 16-bitowe rejestry X, Y i Z, opisane w dalszej części tej sekcji.

Jednostka ALU obsługuje operacje arytmetyczne i logiczne pomiędzy rejestrami lub pomiędzy stałą a rejestrem. W ALU można także wykonywać operacje na pojedynczych rejestrach. Po operacji arytmetycznej Rejestr Stanu jest aktualizowany w celu odzwierciedlenia informacji o wyniku operacji.

Przebieg programu zapewniają instrukcje warunkowego i bezwarunkowego skoku i wywołania, które mogą bezpośrednio adresować całą przestrzeń adresową. Większość instrukcji AVR ma pojedynczy format słowa 16-bitowego, ale są też instrukcje 32-bitowe.

Podczas przerwań i wywołań podprogramów, licznik programów z adresem zwrotnym (PC) jest przechowywany na stosie. Stos jest skutecznie alokowany w ogólnej pamięci SRAM danych, w związku z czym rozmiar stosu jest ograniczony jedynie całkowitym rozmiarem SRAM i wykorzystaniem pamięci SRAM. Wszystkie programy użytkownika muszą inicjalizować SP w procedurze Reset (zanim zostaną wykonane podprogramy lub przerwania). Wskaźnik stosu (SP) jest dostępny do odczytu/zapisu w przestrzeni we/wy. Dostęp do danych SRAM można łatwo uzyskać poprzez pięć różnych trybów adresowania obsługiwanych w architekturze AVR.

Wszystkie przestrzenie pamięci w architekturze AVR są liniowymi i regularnymi mapami pamięci.

Elastyczny moduł przerwań ma swoje rejestry sterujące w przestrzeni we/wy z dodatkowym bitem globalnego zezwolenia na przerwanie w rejestrze stanu. Wszystkie przerwania mają oddzielny wektor przerwań w tabeli wektorów przerwań. Przerwania mają priorytet zgodnie z położeniem wektora przerwań. Im niższy adres wektora przerwań, tym wyższy priorytet.

Przestrzeń pamięci we/wy zawiera 64 adresy dla funkcji peryferyjnych procesora, takich jak rejestry sterujące, SPI i inne funkcje we/wy. Dostęp do pamięci we/wy można uzyskać bezpośrednio lub jako lokalizacje przestrzeni danych następujące po lokalizacjach rejestru File, 0x20 – 0x5F.

ALU – jednostka arytmetyczno-logiczna

Wysokowydajny AVR ALU działa w bezpośrednim połączeniu ze wszystkimi 32 rejestrami roboczymi ogólnego przeznaczenia. W ciągu jednego cyklu zegara wykonywane są operacje arytmetyczne pomiędzy rejestrami ogólnego przeznaczenia lub pomiędzy rejestrem a bezpośrednio. Operacje ALU są podzielone na trzy główne kategorie – funkcje arytmetyczne, logiczne i bitowe. Niektóre implementacje tej architektury zapewniają również potężny mnożnik obsługujący zarówno mnożenie ze znakiem/bez znaku, jak i format ułamkowy. Szczegółowy opis znajduje się w sekcji „Zestaw instrukcji”.

Rejestr statusu

Rejestr Statusu zawiera informację o wyniku ostatnio wykonanej instrukcji arytmetycznej. Informacje te można wykorzystać do zmiany przebiegu programu w celu wykonania operacji warunkowych. Należy pamiętać, że rejestr stanu jest aktualizowany po wszystkich operacjach ALU, zgodnie z opisem w instrukcji zestawu instrukcji. W wielu przypadkach eliminuje to potrzebę używania dedykowanych instrukcji porównania, co skutkuje szybszym i bardziej zwartym kodem.

Rejestr stanu nie jest automatycznie zapisywany przy wejściu do procedury przerwania i przywracany po powrocie z przerwania. To musi być obsługiwane przez oprogramowanie.

SREG – Rejestr Statusu AVR

Rejestr Statusu AVR – SREG – definiuje się jako:

Fragment 7 6 5 4 3 2 1 0
0x3F I T H S V N Z C SREG
Odczyt/Zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 0

Bit 7 – I: Globalne przerwanie włączone

Aby przerwania były włączone, musi być ustawiony bit Global Interrupt Enable. Sterowanie włączaniem poszczególnych przerwań odbywa się wówczas w oddzielnych rejestrach sterujących. Jeżeli globalny rejestr włączania przerwań jest wyczyszczony, żadne z przerwań nie jest włączane niezależnie od indywidualnych ustawień włączania przerwań. Bit I jest kasowany sprzętowo po wystąpieniu przerwania i ustawiany przez instrukcję RETI w celu umożliwienia kolejnych przerwań. Bit I może być także ustawiany i kasowany przez aplikację za pomocą instrukcji SEI i CLI, jak opisano w dokumentacji zestawu instrukcji.

Bit 6 – T: Pamięć kopii bitowej

Instrukcje Bit Copy BLD (Bit LoaD) i BST (Bit STore) wykorzystują bit T jako źródło lub miejsce docelowe obsługiwanego bitu. Trochę z rejestru w Rejestrze File można skopiować do T za pomocą instrukcji BST, a bit w T można skopiować do bitu w rejestrze w rejestrze File według instrukcji BLD.

Bit 5 – H: Flaga połowy przeniesienia

Flaga Half Carry H wskazuje opcję Half Carry w niektórych operacjach arytmetycznych. Half Carry jest przydatne w arytmetyce BCD. Szczegółowe informacje można znaleźć w „Opisie zestawu instrukcji”.

Bit 4 – S: Bit znaku, S = N ⊕ V

Bit S jest zawsze bitem wyłącznym lub znajduje się pomiędzy flagą ujemną N a flagą przepełnienia dopełnienia do dwóch V. Aby uzyskać szczegółowe informacje, zobacz „Opis zestawu instrukcji”.

Bit 3 – V: Flaga przepełnienia uzupełnienia do dwóch

Flaga przepełnienia uzupełnienia do dwóch V obsługuje arytmetykę uzupełnienia do dwóch. Szczegółowe informacje można znaleźć w „Opisie zestawu instrukcji”.

Bit 2 – N: Flaga ujemna

Flaga ujemna N wskazuje negatywny wynik operacji arytmetycznej lub logicznej. Szczegółowe informacje można znaleźć w „Opisie zestawu instrukcji”.

Bit 1 – Z: Flaga zera

Flaga zera Z wskazuje zerowy wynik operacji arytmetycznej lub logicznej. Szczegółowe informacje można znaleźć w „Opisie zestawu instrukcji”.

Bit 0 – C: Flaga przeniesienia

Flaga przeniesienia C wskazuje przeniesienie w operacji arytmetycznej lub logicznej. Szczegółowe informacje można znaleźć w „Opisie zestawu instrukcji”.

Rejestr ogólnego przeznaczenia File

Rejestr File jest zoptymalizowany pod kątem zestawu instrukcji AVR Enhanced RISC. Aby osiągnąć wymaganą wydajność i elastyczność, Rejestr wspiera następujące schematy wejścia/wyjścia File:

Jeden 8-bitowy argument wyjściowy i jedno 8-bitowe wejście wynikowe

Dwa 8-bitowe operandy wyjściowe i jedno 8-bitowe wejście wynikowe

Dwa 8-bitowe operandy wyjściowe i jedno 16-bitowe wejście wynikowe

Jeden 16-bitowy argument wyjściowy i jedno 16-bitowe wejście wynikowe

Rysunek 4-2 pokazuje strukturę 32 rejestrów roboczych ogólnego przeznaczenia w procesorze. Ogólnego przeznaczenia

Jak pokazano w Rysunek 4-2, każdemu rejestrowi przypisany jest także adres pamięci danych, odwzorowujący je bezpośrednio na pierwsze 32 lokalizacje przestrzeni danych użytkownika. Chociaż ta organizacja pamięci nie jest fizycznie zaimplementowana jako lokalizacje SRAM, zapewnia dużą elastyczność w dostępie do rejestrów, ponieważ rejestry wskaźników X, Y i Z można ustawić tak, aby indeksowały dowolny rejestr w file.Większość instrukcji działających na Rejestrze File mają bezpośredni dostęp do wszystkich rejestrów, a większość z nich to instrukcje jednocyklowe.

Rejestr X, rejestr Y i rejestr Z

Rejestry R26..R31 mają dodatkowe funkcje w stosunku do ich ogólnego zastosowania. Rejestry te są 16-bitowymi wskaźnikami adresowymi do pośredniego adresowania przestrzeni danych. Trzy pośrednie rejestry adresowe X, Y i Z są zdefiniowane w sposób opisany w Rysunek 4-3.

Rejestr

W różnych trybach adresowania te rejestry adresowe pełnią funkcje stałego przemieszczenia, automatycznego zwiększania i automatycznego zmniejszania (szczegółowe informacje można znaleźć w opisie zestawu instrukcji).

Wskaźnik stosu

Stos służy głównie do przechowywania danych tymczasowych, do przechowywania zmiennych lokalnych i do przechowywania adresów zwrotnych po przerwaniach i wywołaniach podprogramów. Rejestr wskaźników stosu zawsze wskazuje górę stosu. Należy zauważyć, że stos jest zaimplementowany w miarę wzrostu od wyższych lokalizacji pamięci do niższych lokalizacji pamięci. Oznacza to, że polecenie Stack PUSH zmniejsza wskaźnik stosu.

Wskaźnik stosu wskazuje obszar stosu danych SRAM, w którym znajdują się stosy podprogramów i przerwań. Ta przestrzeń stosu w pamięci SRAM danych musi zostać zdefiniowana przez program przed wykonaniem wywołań podprogramów lub umożliwieniem przerwań. Wskaźnik stosu musi być ustawiony na punkt powyżej 0x60. Wskaźnik stosu jest zmniejszany o jeden, gdy dane są wypychane na stos za pomocą instrukcji PUSH, i jest zmniejszany o dwa, gdy adres zwrotny jest wypychany na stos za pomocą wywołania podprogramu lub przerwania. Wskaźnik stosu zwiększa się o jeden, gdy dane są pobierane ze stosu za pomocą instrukcji POP, i zwiększa się o dwa, gdy dane są pobierane ze stosu w wyniku powrotu z podprogramu RET lub powrotu z przerwania RETI.

Wskaźnik stosu AVR jest zaimplementowany jako dwa 8-bitowe rejestry w przestrzeni we/wy. Liczba faktycznie używanych bitów zależy od implementacji. Należy zauważyć, że przestrzeń danych w niektórych implementacjach architektury AVR jest tak mała, że ​​potrzebny jest jedynie SPL. W takim przypadku Rejestr SPH nie będzie obecny.

SPH i SPL — rejestr wskaźników stosu

Fragment 15 14 13 12 11 10 9 8
0x3E SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SPH
0x3D SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 SPL
7 6 5 4 3 2 1 0
Odczyt/Zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Odczyt/Zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND
Wartość początkowa RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND

Czas wykonania instrukcji

W tej sekcji opisano ogólne koncepcje czasu dostępu do wykonywania instrukcji. Procesor AVR sterowany jest przez zegar clkCPU, generowany bezpośrednio z wybranego źródła zegara dla chipa. Nie stosuje się wewnętrznego podziału zegara.

Rys. 4.4

Rysunek 4-4 pokazuje równoległe pobieranie i wykonywanie instrukcji możliwe dzięki architekturze Harvardu i rejestrowi szybkiego dostępu File pojęcie. Jest to podstawowa koncepcja potokowania pozwalająca uzyskać do 1 MIPS na MHz z odpowiednimi unikalnymi wynikami dla funkcji na koszt, funkcji na zegary i funkcji na jednostkę mocy.

Rysunek 4-5. Operacja ALU w pojedynczym cyklu

Rys. 4.5

Resetowanie i obsługa przerwań

AVR zapewnia kilka różnych źródeł przerwań. Te przerwania i oddzielny wektor resetowania mają oddzielny wektor programu w przestrzeni pamięci programu. Wszystkim przerwaniom przypisane są indywidualne bity zezwolenia, które muszą być zapisane jako jeden logiczny bit razem z bitem globalnego zezwolenia na przerwanie w rejestrze stanu, aby umożliwić przerwanie.

Najniższe adresy w przestrzeni pamięci programu są domyślnie zdefiniowane jako wektory resetowania i przerwania. Pełna lista wektorów jest pokazana w „Przerwania” na stronie 48. Lista określa również poziomy priorytetów różnych przerwań. Im niższy adres, tym wyższy poziom priorytetu. Najwyższy priorytet ma RESET, a następny jest INT0 – żądanie przerwania zewnętrznego 0.

Gdy wystąpi przerwanie, bit I-bit Global Interrupt Enable jest kasowany i wszystkie przerwania są wyłączane. Oprogramowanie użytkownika może zapisać jedynkę logiczną na bicie I, aby włączyć zagnieżdżone przerwania. Wszystkie włączone przerwania mogą następnie przerwać bieżącą procedurę przerwania. Bit I jest ustawiany automatycznie, gdy wykonywana jest instrukcja Return from Interrupt – RETI.

Zasadniczo istnieją dwa rodzaje przerwań. Pierwszy typ jest wyzwalany przez zdarzenie, które ustawia flagę przerwania. W przypadku tych przerwań licznik programu jest wektorowany do rzeczywistego wektora przerwań w celu wykonania procedury obsługi przerwania, a sprzęt kasuje odpowiednią flagę przerwania. Flagi przerwań można również wyczyścić, zapisując jedynkę logiczną w pozycjach bitów flagi, które mają zostać wyczyszczone. Jeśli warunek przerwania wystąpi, gdy odpowiedni bit włączania przerwania zostanie wyczyszczony, flaga przerwania zostanie ustawiona i zapamiętana do momentu włączenia przerwania lub flagi wyczyszczenia przez oprogramowanie. Podobnie, jeśli wystąpi jeden lub więcej warunków przerwania, gdy bit globalnego zezwolenia na przerwanie jest wyczyszczony, odpowiednie flagi przerwań zostaną ustawione i zapamiętane do czasu ustawienia bitu globalnego zezwolenia na przerwanie, a następnie zostaną wykonane zgodnie z kolejnością priorytetów.

Drugi typ przerwań będzie wyzwalany tak długo, jak długo będzie obecny warunek przerwania. Przerwania te niekoniecznie mają flagi przerwań. Jeśli warunek przerwania zniknie przed włączeniem przerwania, przerwanie nie zostanie wyzwolone.

Kiedy AVR wyjdzie z przerwania, zawsze powróci do programu głównego i wykona jeszcze jedną instrukcję, zanim zostanie obsłużone jakiekolwiek oczekujące przerwanie.

Należy zauważyć, że Rejestr Stanu nie jest automatycznie zapisywany przy wejściu do procedury przerwania ani przywracany po powrocie z procedury przerwania. To musi być obsługiwane przez oprogramowanie.

Używając instrukcji CLI do wyłączania przerwań, przerwania zostaną natychmiast wyłączone. Żadne przerwanie nie zostanie wykonane po instrukcji CLI, nawet jeśli nastąpi jednocześnie z instrukcją CLI. Poniższy przykładampPlik pokazuje, jak można to wykorzystać, aby uniknąć przerwań podczas sekwencji czasowego zapisu EEPROM.

Kod montażu Npample
w r16, SREG; zapisz wartość SREG

kli; wyłącz przerwania podczas sekwencji czasowej

sbi EECR, EEMPE ; rozpocznij zapis EEPROM

sbi EECR, EEPE

na zewnątrz SREG, r16; przywróć wartość SREG (I-bit)

Kod C Npample
znak cSREG;

cSREG = SREG; /* zapisz wartość SREG */

/* wyłącz przerwania podczas sekwencji czasowej */

_CLI();

EECR |= (1<

EECR |= (1<

SREG = cSREG; /* przywróć wartość SREG (I-bit) */

Kiedy używasz instrukcji SEI do włączania przerwań, instrukcja następująca po SEI zostanie wykonana przed jakimikolwiek oczekującymi przerwaniami, jak pokazano w tym przykładzieample.

Kod montażu Npample
se; ustaw opcję Włącz globalne przerwanie

spać; wejdź w stan uśpienia, czekając na przerwanie

; uwaga: przejdzie w tryb uśpienia przed jakimkolwiek oczekującym

; przerwanie(a)

Kod C Npample
_SEI(); /* ustaw włączenie globalnego przerwania */

_SPAĆ(); /* wejście w tryb uśpienia, oczekiwanie na przerwanie */

/* uwaga: przejdzie w stan uśpienia przed jakimkolwiek oczekującym przerwaniem */

Czas reakcji na przerwanie

Odpowiedź na wykonanie przerwania dla wszystkich włączonych przerwań AVR wynosi minimum cztery cykle zegara. Po czterech cyklach zegara wykonywany jest adres wektora programu dla aktualnej procedury obsługi przerwań. Podczas tego czterogodzinnego okresu cyklu licznik programu jest umieszczany na stosie. Wektor jest zwykle skokiem do procedury przerwania i skok ten zajmuje trzy cykle zegara. Jeśli podczas wykonywania instrukcji wielocyklowej wystąpi przerwanie, instrukcja ta zostanie zakończona przed obsłużeniem przerwania. Jeśli przerwanie wystąpi, gdy MCU znajduje się w trybie uśpienia, czas reakcji na wykonanie przerwania zwiększa się o cztery cykle zegara. Do tego zwiększenia należy doliczyć czas rozruchu z wybranego trybu uśpienia.

Powrót z procedury obsługi przerwań zajmuje cztery cykle zegara. Podczas tych czterech cykli zegara licznik programu (dwa bajty) jest usuwany ze stosu, wskaźnik stosu jest zwiększany o dwa i ustawiany jest bit I w SREG.

Pamięci AVR-a

W tej sekcji opisano różne pamięci w ATtiny25/45/85. Architektura AVR ma dwie główne przestrzenie pamięci, pamięć danych i przestrzeń pamięci programu. Ponadto ATtiny25/45/85 posiada pamięć EEPROM do przechowywania danych. Wszystkie trzy przestrzenie pamięci są liniowe i regularne.

Programowalna w systemie pamięć programu Flash

ATtiny25/45/85 zawiera 2/4/8K bajtów wbudowaną, programowalną w systemie pamięć Flash do przechowywania programów. Ponieważ wszystkie instrukcje AVR mają szerokość 16 lub 32 bitów, pamięć Flash jest zorganizowana w formacie 1024/2048/4096 x 16.

Pamięć Flash ma trwałość co najmniej 10,000 25 cykli zapisu/kasowania. Licznik programów ATtiny45/85/10 (PC) ma szerokość 11/12/1024 bitów, adresując w ten sposób lokalizacje pamięci programu 2048/4096/XNUMX. „Program pamięci – ming” na stronie 147 zawiera szczegółowy opis pobierania szeregowego danych Flash za pomocą pinów SPI.

Tablice stałe mogą być alokowane w obrębie całej przestrzeni adresowej pamięci Programu (patrz opis instrukcji LPM – Load Program memory).

Rysunek 5-1. Mapa pamięci programu Mapa pamięci

Pamięć danych SRAM

Rysunek 5-2 pokazuje, jak zorganizowana jest pamięć SRAM ATtiny25/45/85.

Dolne lokalizacje pamięci danych 224/352/607 adresują oba rejestry File, pamięć we/wy i wewnętrzna pamięć SRAM. Pierwsze 32 lokalizacje dotyczą Rejestru File, kolejne 64 lokalizacje to standardowa pamięć we/wy, a ostatnie 128/256/512 lokalizacji adresują wewnętrzną pamięć SRAM.

Pięć różnych trybów adresowania dla pokrycia pamięci danych: Bezpośredni, Pośredni z przesunięciem, Pośredni, Pośredni ze wstępnym zmniejszaniem i Pośredni z przyrostem końcowym. W Rejestrze File, rejestry od R26 do R31 zawierają rejestry wskaźnika adresowania pośredniego.

Adresowanie bezpośrednie obejmuje całą przestrzeń danych.

Tryb pośredni z przesunięciem osiąga 63 lokalizacje adresowe z adresu bazowego podanego przez rejestr Y lub Z.

Podczas korzystania z trybów adresowania pośredniego rejestrów z automatycznym zmniejszaniem wstępnym i przyrostem końcowym, rejestry adresowe X, Y i Z są zmniejszane lub zwiększane.

32 rejestry robocze ogólnego przeznaczenia, 64 rejestry we/wy i 128/256/512 bajtów wewnętrznej pamięci SRAM w ATtiny25/45/85 są dostępne we wszystkich tych trybach adresowania. Rejestr File jest opisany w „Gen- Rejestr celów File” na stronie 10.

Rysunek 5-2. Mapa pamięci danych Mapa pamięci 2

Dostęp do pamięci danych Czasy

W tej sekcji opisano ogólne koncepcje synchronizacji dostępu do pamięci wewnętrznej. Dostęp do danych wewnętrznych SRAM odbywa się w dwóch cyklach clkCPU, jak opisano w Rysunek 5-3.

Rysunek 5-3. Cykle dostępu do danych SRAM w chipie Na danych chipowych Pamięć danych EEPROM

ATtiny25/45/85 zawiera 128/256/512 bajtów pamięci EEPROM danych. Jest zorganizowany jako oddzielna przestrzeń danych, w której można odczytywać i zapisywać pojedyncze bajty. Pamięć EEPROM ma trwałość co najmniej 100,000 XNUMX cykli zapisu/kasowania. Dostęp pomiędzy EEPROM i CPU opisano poniżej, określając rejestry adresowe EEPROM, rejestr danych EEPROM i rejestr kontrolny EEPROM. Aby uzyskać szczegółowe informacje, zobacz „Pobieranie szeregowe” na stronie 151.

Dostęp do odczytu/zapisu EEPROM

Rejestry dostępu EEPROM są dostępne w przestrzeni we/wy.

Czasy dostępu do zapisu dla EEPROM podano w Tabela 5-1 na stronie 21. Jednakże funkcja automatycznego pomiaru czasu pozwala oprogramowaniu użytkownika wykryć, kiedy można zapisać następny bajt. Jeżeli kod użytkownika zawiera instrukcje zapisu pamięci EEPROM, należy podjąć pewne środki ostrożności. W mocno filtrowanych zasilaczach wartość VCC prawdopodobnie będzie powoli rosnąć lub spadać

Włączanie/wyłączanie. Powoduje to, że urządzenie przez pewien czas działa przy napięciu voltage niższa niż określona jako minimalna dla używanej częstotliwości zegara. Widzieć „Zapobieganie uszkodzeniom pamięci EEPROM” na stronie 19 aby uzyskać szczegółowe informacje o tym, jak uniknąć problemów w takich sytuacjach.

Aby zapobiec niezamierzonym zapisom EEPROM, należy przestrzegać określonej procedury zapisu. Odnosić się do "Atomowy Programowanie bajtów” na stronie 17 „Programowanie z podziałem bajtów” na stronie 17 po szczegóły na ten temat.

Kiedy pamięć EEPROM jest odczytywana, procesor jest zatrzymywany na cztery cykle zegara, zanim zostanie wykonana następna instrukcja. Po zapisaniu pamięci EEPROM procesor jest zatrzymywany na dwa cykle zegara przed wykonaniem następnej instrukcji.

Programowanie bajtów atomowych

Korzystanie z programowania bajtów atomowych jest najprostszym trybem. Zapisując bajt do EEPROM, użytkownik musi wpisać adres do rejestru EEAR, a dane do rejestru EEDR. Jeżeli bity EEPMn wynoszą zero, zapisanie EEPE (w ciągu czterech cykli po zapisaniu EEMPE) uruchomi operację kasowania/zapisu. Zarówno cykl kasowania, jak i zapisu odbywa się w jednej operacji i podany jest całkowity czas programowania Tabela 5-1 na stronie 21. Bit EEPE pozostaje ustawiony do czasu zakończenia operacji kasowania i zapisu. Gdy urządzenie jest zajęte programowaniem, nie można wykonywać żadnych innych operacji na pamięci EEPROM.

Programowanie w dzielonym bajcie

Możliwe jest podzielenie cyklu kasowania i zapisu na dwie różne operacje. Może to być przydatne, jeśli system wymaga krótkiego czasu dostępu przez pewien ograniczony okres czasu (zwykle jeśli napięcie zasilania voltage spada). Aby zyskać przewagę tagW przypadku tej metody wymagane jest, aby przed operacją zapisu usunięte zostały lokalizacje, które mają zostać zapisane. Ponieważ jednak operacje kasowania i zapisu są rozdzielone, możliwe jest wykonywanie operacji kasowania, gdy system pozwala na wykonywanie operacji krytycznych czasowo (zwykle po włączeniu zasilania).

Usuwać

Aby usunąć bajt, adres musi zostać zapisany w EEAR. Jeżeli bity EEPMn mają wartość 0b01, zapisanie EEPE (w ciągu czterech cykli po zapisie EEMPE) spowoduje jedynie operację kasowania (czas programowania podany jest w Tabela 5-1 na strona 21). Bit EEPE pozostaje ustawiony aż do zakończenia operacji kasowania. Gdy urządzenie jest zajęte programowaniem, nie można wykonywać żadnych innych operacji na pamięci EEPROM.

Pisać

Aby zapisać lokalizację, użytkownik musi wpisać adres do EEAR, a dane do EEDR. Jeżeli bity EEPMn mają wartość 0b10, zapisanie EEPE (w ciągu czterech cykli po zapisie EEMPE) spowoduje jedynie operację zapisu (czas programowania podany jest w Tabela 5-1 na stronie 21). Bit EEPE pozostaje ustawiony aż do zakończenia operacji zapisu. Jeżeli lokalizacja, która ma zostać zapisana, nie została usunięta przed zapisem, zapisane dane należy uznać za utracone. Gdy urządzenie jest zajęte programowaniem, nie można wykonywać żadnych innych operacji na pamięci EEPROM.

Kalibrowany oscylator służy do pomiaru czasu dostępu do pamięci EEPROM. Upewnij się, że częstotliwość oscylatora mieści się w wymaganiach opisanych w „OSCCAL – rejestr kalibracji oscylatora” na stronie 31.

Poniższy kod examppliki pokazują jeden zespół i jedną funkcję C do kasowania, zapisu lub zapisu atomowego pamięci EEPROM. ByłyampLes zakłada, że ​​przerwania są kontrolowane (np. poprzez globalne wyłączenie przerwań), tak że podczas wykonywania tych funkcji nie wystąpią żadne przerwania.

Kod montażu Npample
EEPROM_zapis:

; Poczekaj na zakończenie poprzedniego zapisu

Sbic EECR,EEPE

rjmp EEPROM_zapis

; Ustaw tryb programowania

ldi        r16, (0<<EEPM1)|(0<<EEPM0)

poza EECR, r16

; Ustaw adres (r18:r17) w rejestrze adresowym

out EEARH, r18

poza EEARL, r17

; Zapisz dane (r19) do rejestru danych

poza EEDR, r19

; Napisz logiczny jeden do EEMPE

sbi EECR, EEMPE

; Rozpocznij zapis eepromu, ustawiając EEPE

sbi EECR, EEPE

gnić

Kod C Npample
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)

{

/* Czekaj na zakończenie poprzedniego zapisu */ while(EECR & (1<

;

/* Ustaw tryb programowania */

EECR = (0<

/* Konfiguracja rejestrów adresowych i danych */ EEAR = ucAddress;

EEDR = ucData;

/* Zapisz logiczną jedynkę do EEMPE */

EECR |= (1<

/* Rozpocznij zapis eepromu, ustawiając EEPE */

EECR |= (1<

}

Następny kod npampPliki pokazują funkcje asemblera i C do odczytu EEPROM. ByłyampZakłada się, że przerwania są kontrolowane w taki sposób, że podczas wykonywania tych funkcji nie wystąpią żadne przerwania.

Kod montażu Npample
EEPROM_odczyt:

; Poczekaj na zakończenie poprzedniego zapisu

Sbic EECR,EEPE

rjmp EEPROM_odczyt

; Ustaw adres (r18:r17) w rejestrze adresowym

out EEARH, r18

poza EEARL, r17

; Rozpocznij czytanie eepromu, pisząc EERE

sbi EECR, EERE

; Odczytaj dane z rejestru danych

w r16,EEDR

gnić

Kod C Npample
unsigned char EEPROM_read(unsigned char ucAddress)

{

/* Czekaj na zakończenie poprzedniego zapisu */

podczas(EECR & (1<

;

/* Ustaw rejestr adresów */ EEAR = ucAddress;

/* Rozpocznij czytanie eepromu, pisząc EERE */

EECR |= (1<

/* Zwróć dane z rejestru danych */

zwrócić EEDR;

}

Zapobieganie uszkodzeniom EEPROM

W okresach niskiego VCC dane EEPROM mogą zostać uszkodzone, ponieważ pojemność zasilaniatage jest zbyt niskie, aby procesor i pamięć EEPROM mogły działać prawidłowo. Zagadnienia te są takie same jak w przypadku układów na poziomie płytki wykorzystujących pamięć EEPROM i należy zastosować te same rozwiązania konstrukcyjne.

Uszkodzenie danych EEPROM może być spowodowane dwiema sytuacjami, gdy plik voltage jest za niskie. Po pierwsze, regularna sekwencja zapisu do EEPROM wymaga minimalnej objętościtage działać prawidłowo. Po drugie, sam procesor może błędnie wykonać instrukcje, jeśli wielkość zasilaniatage jest za niskie.

Uszkodzenia danych EEPROM można łatwo uniknąć, postępując zgodnie z poniższymi zaleceniami projektowymi:

Utrzymuj RESET AVR aktywny (niski) w okresach niewystarczającej głośności zasilaniatagmi. Można tego dokonać poprzez włączenie wewnętrznego detektora zaniku napięcia (BOD). Jeśli poziom wykrywania wewnętrznego BZT nie jest zgodny z

wymaganego poziomu wykrywania, można zastosować zewnętrzny obwód zabezpieczający przed niskim poziomem VCC. Jeśli reset nastąpi w trakcie operacji zapisu, operacja zapisu zostanie zakończona, pod warunkiem, że napięcie zasilania nie spadnietage jest wystarczające.

Pamięć we/wy

Definicja przestrzeni we/wy ATtiny25/45/85 jest pokazana w „Podsumowanie rejestru” na stronie 200.

Wszystkie wejścia/wyjścia i urządzenia peryferyjne ATtiny25/45/85 są umieszczone w przestrzeni we/wy. Dostęp do wszystkich lokalizacji we/wy można uzyskać za pomocą instrukcji LD/LDS/LDD i ST/STS/STD, przesyłając dane pomiędzy 32 rejestrami roboczymi ogólnego przeznaczenia a przestrzenią we/wy. Rejestry I/O w zakresie adresów 0x00 – 0x1F są bezpośrednio dostępne bitowo za pomocą instrukcji SBI i CBI. W rejestrach tych wartość pojedynczych bitów można sprawdzić za pomocą instrukcji SBIS i SBIC. Więcej szczegółów można znaleźć w sekcji dotyczącej zestawu instrukcji. Używając poleceń specyficznych dla wejścia/wyjścia IN i OUT, należy użyć adresów wejścia/wyjścia 0x00 – 0x3F. Podczas adresowania rejestrów we/wy jako przestrzeni danych przy użyciu instrukcji LD i ST, do tych adresów należy dodać 0x20.

Aby zapewnić kompatybilność z przyszłymi urządzeniami, zarezerwowane bity powinny być zapisane do zera, jeśli będą dostępne. Zarezerwowane adresy pamięci we / wy nigdy nie powinny być zapisywane.

Niektóre flagi stanu można wyczyścić poprzez zapisanie do nich flagi logicznej. Należy zauważyć, że instrukcje CBI i SBI będą działać tylko na określonym bicie i dlatego mogą być używane w rejestrach zawierających takie flagi stanu. Instrukcje CBI i SBI działają wyłącznie z rejestrami od 0x00 do 0x1F.

Rejestry sterujące wejściami/wyjściami i urządzeniami peryferyjnymi wyjaśniono w dalszych rozdziałach.

Opis rejestru

EEARH – rejestr adresów EEPROM

Fragment 7 6 5 4 3 2 1 0
0x1F EEAR8 EEARH
Odczyt/Zapis R R R R R R R Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 X/0

Bity 7:1 – Res: Bity zarezerwowane

Bity te są zarezerwowane do wykorzystania w przyszłości i zawsze będą odczytywane jako zero.

Bity 0 – EEAR8: Adres EEPROM

Jest to najbardziej znaczący bit adresu EEPROM w ATtiny85. W urządzeniach z mniejszą ilością pamięci EEPROM, np. ATtiny25/ATtiny45, ten bit jest zarezerwowany i zawsze będzie wynosić zero. Początkowa wartość rejestru adresowego EEPROM (EEAR) jest niezdefiniowana i dlatego przed uzyskaniem dostępu do EEPROM należy zapisać odpowiednią wartość.

EEARL – rejestr adresów EEPROM

Fragment

0x1E EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 EEARL
Tył/Napisz Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa X X X X X X X X

Bit 7 – EEAR7: Adres EEPROM

Jest to najbardziej znaczący bit adresu EEPROM w ATtiny45. W urządzeniach z mniejszą ilością pamięci EEPROM, np. ATtiny25, ten bit jest zarezerwowany i zawsze będzie wynosić zero. Początkowa wartość rejestru adresowego EEPROM (EEAR) jest niezdefiniowana i dlatego przed uzyskaniem dostępu do EEPROM należy zapisać odpowiednią wartość.

Bity 6:0 – EEAR[6:0]: Adres EEPROM

Są to (najmniejsze) bity rejestru adresów EEPROM. Bajty danych EEPROM adresowane są liniowo w zakresie 0…(128/256/512-1). Początkowa wartość EEAR jest niezdefiniowana i dlatego przed uzyskaniem dostępu do EEPROM należy zapisać odpowiednią wartość.

EEDR – Rejestr danych EEPROM

Fragment 7 6 5 4 3 2 1 0
0x1D EEDR7 EEDR6 EEDR5 EEDR4 EEDR3 EEDR2 EEDR1 EEDR0 EEDR
Odczyt/Zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 0

Dla operacji zapisu EEPROM rejestr EEDR zawiera dane, które mają zostać zapisane w EEPROM pod adresem podanym przez rejestr EEAR. W przypadku operacji odczytu EEPROM, EEDR zawiera dane odczytane z

EEPROM pod adresem podanym przez EEAR.

 

5.5.4 EECR – Rejestr kontrolny EEPROM

Bit 7 6 5 4 3 2 1 0
0x1C        – EEPM1 EEPM0 NIESAMOWITY EEMPE EEPE ERE EKG
Odczyt/zapis R R O/Z Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 X X 0 0 X 0

Bit 7 – Res: Bit zarezerwowany

Ten bit jest zarezerwowany do wykorzystania w przyszłości i zawsze będzie odczytywany jako 0 w ATtiny25/45/85. Aby zachować kompatybilność z przyszłymi urządzeniami AVR, zawsze zapisuj ten bit na zero. Po przeczytaniu zamaskuj ten fragment.

Bit 6 – Res: Bit zarezerwowany

Ten bit jest zarezerwowany w ATtiny25/45/85 i zawsze będzie odczytywany jako zero.

Bity 5:4 – EEPM[1:0]: Bity trybu programowania EEPROM

Ustawienie bitów trybu programowania EEPROM definiuje, jaka akcja programowa zostanie uruchomiona podczas zapisu EEPE. Możliwe jest zaprogramowanie danych w jednej niepodzielnej operacji (usunięcie starej wartości i zaprogramowanie nowej wartości) lub rozdzielenie operacji kasowania i zapisu na dwie różne operacje. Czasy programowania dla różnych trybów są pokazane w Tabela 5-1. Gdy EEPE jest ustawione, wszelkie zapisy do EEPMn będą ignorowane. Podczas resetowania bity EEPMn zostaną zresetowane do wartości 0b00, chyba że EEPROM jest zajęty programowaniem.

Tabela 5-1. Bity trybu EEPROM

EEPM1 EEPM0 Czas programowania Działanie
0 0 3.4 milisekund Wymazywanie i zapisywanie w jednej operacji (operacja atomowa)
0 1 1.8 milisekund Tylko usuń
1 0 1.8 milisekund Tylko pisz
1 1 Zarezerwowane do wykorzystania w przyszłości

Bit 3 – EERIE: Włącz przerwanie gotowości EEPROM

Zapisanie EERIE do jedynki włącza przerwanie gotowości EEPROM, jeśli ustawiony jest bit I w SREG. Zapisanie EERIE na zero wyłącza przerwanie. Przerwanie gotowości EEPROM generuje stałe przerwanie, gdy pamięć nieulotna jest gotowa do programowania.

Bit 2 – EEMPE: Włącz program główny EEPROM

Bit EEMPE określa, czy zapisanie EEPE do jednego z nich będzie miało skutek, czy nie.

Gdy ustawiono EEMPE, ustawienie EEPE w ciągu czterech cykli zegara spowoduje zaprogramowanie EEPROM pod wybranym adresem. Jeśli EEMPE wynosi zero, ustawienie EEPE nie będzie miało żadnego efektu. Kiedy oprogramowanie zapisuje EEMPE do jedynki, sprzęt kasuje bit do zera po czterech cyklach zegara.

Bit 1 – EEPE: Włącz program EEPROM

Sygnał umożliwiający programowanie EEPROM EEPE jest sygnałem umożliwiającym programowanie przesyłanym do pamięci EEPROM. Po zapisaniu EEPE pamięć EEPROM zostanie zaprogramowana zgodnie z ustawieniem bitów EEPMn. Bit EEMPE musi zostać zapisany do jedynki, zanim bit logiczny zostanie zapisany do EEPE, w przeciwnym razie nie nastąpi zapis do EEPROM. Po upływie czasu dostępu do zapisu bit EEPE jest kasowany sprzętowo. Gdy ustawiono EEPE, procesor jest zatrzymywany na dwa cykle przed wykonaniem kolejnej instrukcji.

Bit 0 – EERE: Zezwolenie na odczyt EEPROM

Sygnał zezwolenia na odczyt EEPROM – EERE – jest sygnałem odczytu pamięci EEPROM. Po ustawieniu prawidłowego adresu w rejestrze EEAR bit EERE musi zostać zapisany na jedynkę, aby uruchomić odczyt EEPROM. Dostęp do odczytu EEPROM zajmuje jedną instrukcję, a żądane dane są dostępne natychmiast. Kiedy pamięć EEPROM jest odczytywana, procesor jest zatrzymywany na cztery cykle przed wykonaniem następnej instrukcji. Użytkownik powinien odpytać bit EEPE przed rozpoczęciem operacji odczytu. Jeśli trwa operacja zapisu, nie jest możliwe odczytanie EEPROM, ani zmiana rejestru EEAR.

Zegar systemowy i opcje zegara

Systemy zegarowe i ich dystrybucja

Dystrybucja zegara

Zegar procesora

Zegar procesora kierowany jest do części systemu odpowiedzialnych za działanie rdzenia AVR. ByłyampPliki takich modułów stanowią Rejestr Ogólnego Przeznaczenia File, Rejestr Statusu i pamięć danych zawierająca wskaźnik stosu. Zatrzymanie zegara procesora uniemożliwia rdzeńowi wykonywanie ogólnych operacji i obliczeń.

Zegar we/wy – clkI/O

Zegar we/wy jest używany przez większość modułów we/wy, takich jak timer/licznik. Zegar we/wy jest również używany przez moduł przerwań zewnętrznych, należy jednak pamiętać, że niektóre przerwania zewnętrzne są wykrywane przez logikę asynchroniczną, co pozwala na wykrycie takich przerwań nawet wtedy, gdy zegar we/wy jest zatrzymany.

Zegar Flash – clkFLASH

Zegar Flash steruje działaniem interfejsu Flash. Zegar Flash jest zwykle aktywny jednocześnie z zegarem procesora.

Zegar ADC – clkADC

Przetwornik ADC jest wyposażony w dedykowaną domenę zegara. Umożliwia to zatrzymanie zegarów procesora i wejść/wyjść w celu zmniejszenia szumów generowanych przez obwody cyfrowe. Daje to dokładniejsze wyniki konwersji ADC.

Wewnętrzna PLL do szybkiego generowania zegara peryferyjnego – clkPCK

Wewnętrzna PLL w ATtiny25/45/85 generuje częstotliwość zegara, która jest 8-krotnie mnożona z wejścia źródłowego. Domyślnie PLL wykorzystuje jako źródło wyjście wewnętrznego oscylatora RC 8.0 MHz. Alternatywnie, jeśli ustawiony jest bit LSM PLLCSR, PLL użyje sygnału wyjściowego oscylatora RC podzielonego przez dwa. Zatem sygnał wyjściowy PLL, szybkiego zegara peryferyjnego, wynosi 64 MHz. Szybki zegar peryferyjny lub zegar wstępnie przeskalowany na jego podstawie można wybrać jako źródło zegara dla Timera/Licznika 1 lub jako zegar systemowy. Widzieć Rysunek 6-2. Częstotliwość szybkiego zegara peryferyjnego jest dzielona przez dwa, gdy ustawiony jest LSM PLLCSR, co daje częstotliwość zegara 32 MHz. Należy pamiętać, że LSM nie można ustawić, jeśli jako zegar systemowy używany jest PLLCLK.

Rysunek 6-2. System taktowania PCK. Taktowanie PCK

PLL jest zablokowany na oscylatorze RC i regulacja oscylatora RC za pomocą rejestru OSCCAL spowoduje jednoczesne dostosowanie szybkiego zegara peryferyjnego. Jednakże, nawet jeśli oscylator RC zostanie przestawiony na wyższą częstotliwość niż 8 MHz, szybka częstotliwość zegara peryferyjnego nasyca się na poziomie 85 MHz (w najgorszym przypadku) i nadal oscyluje na częstotliwości maksymalnej. Należy zauważyć, że w tym przypadku PLL nie jest już zablokowana za pomocą zegara oscylatora RC. Dlatego zaleca się, aby nie przeprowadzać regulacji OSCCAL na częstotliwość wyższą niż 8 MHz, aby utrzymać PLL w prawidłowym zakresie roboczym.

Wewnętrzna PLL jest włączona, gdy:

Bit PLLE w rejestrze PLLCSR jest ustawiony.

Bezpiecznik CKSEL jest zaprogramowany na „0001”.

Bezpiecznik CKSEL jest zaprogramowany na „0011”.

Bit PLLCSR PLOCK jest ustawiony, gdy PLL jest zablokowany. Zarówno wewnętrzny oscylator RC, jak i PLL są wyłączane w trybach wyłączenia i uśpienia.

Wewnętrzna PLL w trybie zgodności ATtiny15

Ponieważ ATtiny25/45/85 jest urządzeniem migracyjnym dla użytkowników ATtiny15, istnieje tryb zgodności ATtiny15 zapewniający kompatybilność wsteczną. Tryb zgodności ATtiny15 wybiera się poprzez zaprogramowanie bezpieczników CKSEL na „0011”.

W trybie zgodności ATtiny15 częstotliwość wewnętrznego oscylatora RC jest kalibrowana do 6.4 MHz, a współczynnik mnożenia PLL jest ustawiony na 4x. Widzieć Rysunek 6-3. Dzięki tym zmianom system taktowania jest kompatybilny z ATtiny15, a powstały szybki zegar peryferyjny ma częstotliwość 25.6 MHz (taką samą jak w ATtiny15).

Rysunek 6-3. System taktowania PCK w trybie zgodności z ATtiny15. System taktowania

Źródła zegara

Urządzenie posiada następujące opcje źródła zegara, wybierane za pomocą bitów Flash Fuse, jak pokazano poniżej. Zegar z wybranego źródła jest wprowadzany do generatora zegara AVR i kierowany do odpowiednich modułów.

Tabela 6-1. Opcje taktowania urządzenia Wybierz

Opcja taktowania urządzenia CKSEL[3:0](1)
Zegar zewnętrzny (Widzieć strona 26) 0000
Zegar PLL wysokiej częstotliwości (Widzieć strona 26) 0001
Kalibrowany oscylator wewnętrzny (Widzieć strona 27) 0010(2)
Kalibrowany oscylator wewnętrzny (Widzieć strona 27) 0011(3)
Wewnętrzny oscylator 128 kHz (Widzieć strona 28) 0100
Oscylator kwarcowy niskiej częstotliwości (Widzieć strona 29) 0110
Oscylator kwarcowy/rezonator ceramiczny (Widzieć strona 29) 1000 – 1111
Skryty 0101, 0111

Dla wszystkich bezpieczników „1” oznacza niezaprogramowany, a „0” oznacza zaprogramowany.

Urządzenie jest dostarczane z wybraną tą opcją.

Spowoduje to wybranie trybu zgodności ATtiny15, w którym zegar systemowy jest dzielony przez cztery, co daje częstotliwość zegara 1.6 MHz. Więcej informacji znajdziesz w „Skalibrowany oscylator wewnętrzny” na stronie 27.

W poniższych sekcjach przedstawiono różne możliwości wyboru każdej opcji taktowania. Kiedy procesor budzi się po wyłączeniu, wybrane źródło zegara jest wykorzystywane do pomiaru czasu rozruchu, zapewniając stabilną pracę oscylatora przed rozpoczęciem wykonywania instrukcji. Gdy procesor rozpoczyna pracę od resetu, występuje dodatkowe opóźnienie umożliwiające osiągnięcie stabilnego poziomu zasilania przed rozpoczęciem normalnej pracy. Do pomiaru tej części czasu rozruchu w czasie rzeczywistym używany jest oscylator Watchdog. Liczba cykli oscylatora WDT wykorzystanych dla każdego limitu czasu jest pokazana w Tabela 6-2.

Tabela 6-2. Liczba cykli oscylatora Watchdog

Wpisz Limit czasu Liczba cykli
4 milisekund 512
64 milisekund 8 tys. (8,192)

Zegar zewnętrzny

Aby sterować urządzeniem z zewnętrznego źródła zegara, należy sterować CLKI w sposób pokazany na rysunku Rysunek 6-4. Aby urządzenie mogło pracować na zegarze zewnętrznym, bezpieczniki CKSEL muszą być zaprogramowane na „00”.

Rysunek 6-4. Konfiguracja zewnętrznego napędu zegarowego

Rys. 6.4

Po wybraniu tego źródła zegara czasy rozruchu są określane przez bezpieczniki SUT, jak pokazano na rysunku Tabela 6-3.

Tabela 6-3. Czasy uruchomienia dla wyboru zegara zewnętrznego

SUT[1:0] Czas rozruchu od wyłączenia Dodatkowe opóźnienie od resetu Zalecane użycie
00 6 CK 14CK BOD włączony
01 6 CK 14CK + 4 ms Szybko rosnąca moc
10 6 CK 14CK + 64 ms Powoli rosnąca moc
11 Skryty

Stosując zegar zewnętrzny, należy unikać nagłych zmian częstotliwości stosowanego zegara, aby zapewnić stabilną pracę MCU. Zmiana częstotliwości o więcej niż 2% między jednym cyklem zegara a następnym może prowadzić do nieprzewidywalnego zachowania. Wymagane jest zapewnienie, że MCU pozostanie w stanie Reset podczas takich zmian częstotliwości zegara.

Należy pamiętać, że przedsprzedaż zegara systemowego może zostać wykorzystana do wprowadzenia zmian częstotliwości wewnętrznego zegara w czasie wykonywania, przy jednoczesnym zapewnieniu stabilnej pracy. Odnosić się do „Preskaler zegara systemowego” na stronie 31 Więcej szczegółów.

Zegar PLL wysokiej częstotliwości

Istnieje wewnętrzna PLL, która zapewnia nominalną częstotliwość taktowania 64 MHz, zblokowaną z oscylatorem RC w celu wykorzystania peryferyjnego zegara/licznika 1 oraz dla źródła zegara systemowego. Po wybraniu jako źródło zegara systemowego, poprzez zaprogramowanie bezpieczników CKSEL na „0001”, jest on dzielony przez cztery, jak pokazano na Tabela 6-4.

Tabela 6-4. Tryby pracy zegara PLL wysokiej częstotliwości

CKSEL[3:0] Częstotliwość nominalna
0001 16MHz

Po wybraniu tego źródła zegara czasy rozruchu są określane przez bezpieczniki SUT, jak pokazano na rysunku Tabela 6-5.

Tabela 6-5. Czasy uruchamiania zegara PLL wysokiej częstotliwości

SUT[1:0] Czas uruchamiania od wyłączenia zasilania Dodatkowe opóźnienie od resetu po włączeniu zasilania (VCC = 5.0 V) Zalecane zastosowanie
00 14CK + 1K (1024) CK + 4 ms 4 milisekund BOD włączony

Tabela 6-5. Czasy uruchamiania zegara PLL wysokiej częstotliwości

SUT[1:0] Czas uruchamiania od wyłączenia zasilania Dodatkowe opóźnienie od resetu po włączeniu zasilania (VCC = 5.0 V) Zalecane zastosowanie
01 14CK + 16K (16384) CK + 4 ms 4 milisekund Szybko rosnąca moc
10 14CK + 1K (1024) CK + 64 ms 4 milisekund Powoli rosnąca moc
11 14CK + 16K (16384) CK + 64 ms 4 milisekund Powoli rosnąca moc

Kalibrowany oscylator wewnętrzny

Domyślnie wewnętrzny oscylator RC zapewnia zegar o częstotliwości około 8.0 MHz. Choć objtagzależny od temperatury i temperatury, zegar ten może być bardzo dokładnie skalibrowany przez użytkownika. Widzieć „Skalibrowany wewnętrzny akumulator oscylatora RC pikantny” na stronie 164 „Prędkość wewnętrznego oscylatora” na stronie 192 po więcej szczegółów. Urządzenie jest dostarczane z zaprogramowanym bezpiecznikiem CKDIV8. Widzieć „Preskaler zegara systemowego” na stronie 31 po więcej szczegółów.

Zegar ten można wybrać jako zegar systemowy poprzez zaprogramowanie bezpieczników CKSEL, jak pokazano na rysunku Tabela 6-6 na stronie

27. Jeśli zostanie wybrana, będzie działać bez komponentów zewnętrznych. Podczas resetowania sprzęt ładuje wstępnie zaprogramowaną wartość kalibracji do rejestru OSCCAL i tym samym automatycznie kalibruje oscylator RC. Dokładność tej kalibracji jest pokazana jako Kalibracja fabryczna w Tabela 21-2 na stronie 164.

Zmieniając rejestr OSCCAL z SW, patrz „OSCCAL – rejestr kalibracji oscylatora” na stronie 31można uzyskać większą dokładność kalibracji niż przy zastosowaniu kalibracji fabrycznej. Dokładność tej kalibracji jest pokazana jako Kalibracja użytkownika w Tabela 21-2 na stronie 164.

Kiedy ten oscylator jest używany jako zegar chipowy, oscylator Watchdog będzie nadal używany do licznika czasu Watchdog i limitu czasu resetowania. Więcej informacji na temat wstępnie zaprogramowanej wartości kalibracji można znaleźć w rozdziale „Kali- BRation Bajty” na stronie 150.

Wewnętrzny oscylator można również ustawić tak, aby zapewniał zegar 6.4 MHz, zapisując bezpieczniki CKSEL na „0011”, jak pokazano w Tabela 6-6 poniżej. To ustawienie nazywa się trybem zgodności ATtiny15 i ma na celu zapewnienie skalibrowanego źródła zegara o częstotliwości 6.4 MHz, tak jak w ATtiny15. W trybie zgodności ATtiny15 PLL wykorzystuje wewnętrzny oscylator pracujący z częstotliwością 6.4 MHz do generowania peryferyjnego sygnału zegarowego o częstotliwości 25.6 MHz dla Timera/Licznika 1 (patrz „8-bitowy timer/licznik 1 cal Tryb ATtiny15” na stronie 95). Należy pamiętać, że w tym trybie pracy sygnał zegara 6.4 MHz jest zawsze dzielony przez cztery, co daje zegar systemowy 1.6 MHz.

Tabela 6-6. Wewnętrznie skalibrowane tryby pracy oscylatora RC

CKSEL[3:0] Częstotliwość nominalna
0010(1) 8.0MHz
0011(2) 6.4MHz

Urządzenie jest dostarczane z wybraną tą opcją.

To ustawienie spowoduje wybranie trybu zgodności ATtiny15, w którym zegar systemowy jest dzielony przez cztery, co daje częstotliwość zegara 1.6 MHz.

Kiedy jako źródło zegara wybrany jest skalibrowany wewnętrzny oscylator 8 MHz, czasy rozruchu są określane przez bezpieczniki SUT, jak pokazano na Tabela 6-7 poniżej.

Tabela 6-7. Czasy rozruchu dla wewnętrznie skalibrowanego zegara oscylatora RC

SUT[1:0] Czas rozruchu od wyłączenia Dodatkowe opóźnienie od resetu (VCC = 5.0 V) Zalecane użycie
00 6 CK 14CK(1) BOD włączony
01 6 CK 14CK + 4 ms Szybko rosnąca moc
10(2) 6 CK 14CK + 64 ms Powoli rosnąca moc
11 Skryty

1. Jeżeli zaprogramowany jest bezpiecznik RSTDISBL, czas rozruchu zostanie wydłużony do 14CK + 4 ms, aby umożliwić wejście do trybu programowania.
2. Urządzenie jest dostarczane z wybraną tą opcją.

W trybie zgodności ATtiny15 czasy rozruchu są określane przez bezpieczniki SUT, jak pokazano w Tabela 6-8 poniżej.

Tabela 6-8. Czasy rozruchu dla wewnętrznie skalibrowanego zegara oscylatora RC (w trybie ATtiny15)

SUT[1:0] Czas rozruchu od wyłączenia Dodatkowe opóźnienie od resetu (VCC = 5.0 V) Zalecane użycie
00 6 CK 14CK + 64 ms
01 6 CK 14CK + 64 ms
10 6 CK 14CK + 4 ms
11 1 CK 14CK(1)

Uwaga: Jeżeli zaprogramowany jest bezpiecznik RSTDISBL, czas rozruchu zostanie wydłużony do 14CK + 4 ms, aby umożliwić wejście do trybu programowania.

Podsumowując, więcej informacji na temat trybu zgodności ATtiny15 znajdziesz w rozdziałach „Port B (PB5:PB0)” włączony strona 2„Wewnętrzna PLL w trybie zgodności ATtiny15” na stronie 24„8-bitowy timer/licznik1 w trybie ATtiny15” włączony strona 95„Ograniczenia debugWIRE” na stronie 140„Bajty kalibracji” na stronie 150 i w tabeli „Preskaler zegara Wybierz” na stronie 33.

Wewnętrzny oscylator 128 kHz

Wewnętrzny oscylator 128 kHz to oscylator małej mocy zapewniający zegar o częstotliwości 128 kHz. Częstotliwość jest nominalna przy 3 V i 25°C. Zegar ten może zostać wybrany jako zegar systemowy poprzez zaprogramowanie bezpieczników CKSEL na „0100”.

Po wybraniu tego źródła zegara czasy rozruchu są określane przez bezpieczniki SUT, jak pokazano na rysunku Tabela 6-9.

Tabela 6-9. Czasy rozruchu wewnętrznego oscylatora 128 kHz

SUT[1:0] Czas rozruchu od wyłączenia Dodatkowe opóźnienie od resetu Zalecane użycie
00 6 CK 14CK(1) BOD włączony
01 6 CK 14CK + 4 ms Szybko rosnąca moc
10 6 CK 14CK + 64 ms Powoli rosnąca moc
11 Skryty

Uwaga: Jeżeli zaprogramowany jest bezpiecznik RSTDISBL, czas rozruchu zostanie wydłużony do 14CK + 4 ms, aby umożliwić wejście do trybu programowania.

Oscylator kwarcowy niskiej częstotliwości

Aby użyć kryształu zegarka 32.768 kHz jako źródła zegara dla urządzenia, należy wybrać oscylator kwarcowy niskiej częstotliwości, ustawiając bezpieczniki CKSEL na „0110”. Kryształ należy podłączyć jak pokazano na rysunku Rysunek 6-5. Aby znaleźć odpowiednią pojemność obciążenia dla kryształu 32.768 kHz, zapoznaj się z arkuszem danych producenta.

Gdy wybrany jest ten oscylator, czasy rozruchu są określane przez bezpieczniki SUT, jak pokazano na rysunku Tabela 6-10.

Tabela 6-10. Czasy rozruchu dla wyboru zegara oscylatora kwarcowego niskiej częstotliwości

SUT[1:0] Czas uruchamiania od wyłączenia zasilania Dodatkowe opóźnienie od resetu (VCC = 5.0 V) Zalecane zastosowanie
00 1K (1024) CK(1) 4 milisekund Możliwość szybkiego wzrostu mocy lub BOD
01 1K (1024) CK(1) 64 milisekund Powoli rosnąca moc
10 32K (32768) CK 64 milisekund Stabilna częstotliwość przy uruchomieniu
11 Skryty

Uwaga: Opcji tych należy używać tylko wtedy, gdy stabilność częstotliwości przy rozruchu nie jest istotna.

Oscylator kwarcowy niskiej częstotliwości zapewnia wewnętrzną pojemność obciążenia, patrz Tabela 6-11 na każdym pinie TOSC.

Tabela 6-11. Pojemność oscylatora kwarcowego niskiej częstotliwości

Urządzenie 32 kHz Os. Typ Czapka (Xtal1/Tosc1) Czapka (Xtal2/Tosc2)
ATtiny25/45/85 System Os. 16 pF 6 pF

Oscylator kwarcowy/rezonator ceramiczny

XTAL1 i XTAL2 są odpowiednio wejściem i wyjściem odwracania amplifier, który można skonfigurować do stosowania jako oscylator na chipie, jak pokazano na rysunku Rysunek 6-5. Można zastosować kryształ kwarcowy lub rezonator ceramiczny.

C1 i C2 powinny zawsze być równe zarówno dla kryształów, jak i rezonatorów. Optymalna wartość kondensatorów zależy od używanego kryształu lub rezonatora, wielkości pojemności rozproszonej i szumu elektromagnetycznego otoczenia. Podano pewne wstępne wytyczne dotyczące wyboru kondensatorów do stosowania z kryształami Tabela 6-12 poniżej. W przypadku rezonatorów ceramicznych należy stosować wartości kondensatorów podane przez producenta.

Tabela 6-12. Tryby pracy oscylatora kwarcowego

CKSEL[3:1] Zakres częstotliwości (MHz) Zalecany zakres dla kondensatorów C1 i C2 do stosowania z kryształami (pF)
100(1) 0.4 – 0.9
101 0.9 – 3.0 12 – 22
110 3.0 – 8.0 12 – 22
111 8.0 – 12 – 22

Uwagi: Opcji tej nie należy stosować w przypadku kryształów, a jedynie w przypadku rezonatorów ceramicznych.

Oscylator może działać w trzech różnych trybach, każdy zoptymalizowany dla określonego zakresu częstotliwości. Tryb pracy wybierany jest za pomocą bezpieczników CKSEL[3:1] jak pokazano na rysunku Tabela 6-12.

Bezpiecznik CKSEL0 wraz z bezpiecznikami SUT[1:0] wybierają czasy rozruchu, jak pokazano na Tabela 6-13.

Tabela 6-13. Czasy rozruchu dla wyboru zegara oscylatora kwarcowego

CKSEL0 SUT[1:0] Czas rozruchu od wyłączenia Dodatkowe opóźnienie od resetu Zalecane użycie
0 00 258 CK(1) 14CK + 4 ms Rezonator ceramiczny, szybko rosnąca moc
0 01 258 CK(1) 14CK + 64 ms Rezonator ceramiczny, powoli rosnąca moc
0 10 1K (1024) CK(2) 14CK Rezonator ceramiczny, obsługa BOD
0 11 1K (1024)CK(2) 14CK + 4 ms Rezonator ceramiczny, szybko rosnąca moc
1 00 1K (1024)CK(2) 14CK + 64 ms Rezonator ceramiczny, powoli rosnąca moc
1 01 16K (16384) CK 14CK Oscylator kwarcowy z obsługą BOD
1 10 16K (16384) CK 14CK + 4 ms Oscylator kwarcowy, szybko rosnąca moc
1 11 16K (16384) CK 14CK + 64 ms Oscylator kryształowy, powoli rosnąca moc

Notatki

Opcji tych należy używać tylko wtedy, gdy urządzenie nie pracuje w pobliżu maksymalnej częstotliwości urządzenia i tylko wtedy, gdy stabilność częstotliwości przy uruchomieniu nie jest istotna dla aplikacji. Te opcje nie są odpowiednie dla kryształów.

Opcje te są przeznaczone do stosowania z rezonatorami ceramicznymi i zapewniają stabilność częstotliwości przy rozruchu. Można je również stosować z kryształami, gdy nie pracują w pobliżu maksymalnej częstotliwości urządzenia i jeśli stabilność częstotliwości przy uruchomieniu nie jest istotna dla aplikacji.

Domyślne źródło zegara

Urządzenie jest dostarczane z zaprogramowanymi parametrami CKSEL = „0010”, SUT = „10” i CKDIV8. Domyślnym ustawieniem źródła zegara jest zatem wewnętrzny oscylator RC pracujący z częstotliwością 8 MHz z najdłuższym czasem rozruchu i początkowym przeskalowaniem zegara systemowego wynoszącym 8, co daje zegar systemowy 1.0 MHz. To ustawienie domyślne zapewnia, że ​​wszyscy użytkownicy mogą dokonać żądanych ustawień źródła zegara za pomocą opcji In-System lub High-voltagProgramista.

Preskaler zegara systemowego

Zegar systemowy ATtiny25/45/85 można podzielić, ustawiając „CLKPR – Rejestr wstępnego skalowania zegara” na stronie 32. Tej funkcji można użyć do zmniejszenia zużycia energii, gdy zapotrzebowanie na moc obliczeniową jest niskie. Można tego używać ze wszystkimi opcjami źródła zegara i będzie to miało wpływ na częstotliwość zegara procesora i wszystkich synchronicznych urządzeń peryferyjnych. clkI/O, clkADC, clkCPU i clkFLASH są dzielone przez współczynnik, jak pokazano w Tabela 6-15 na stronie 33.

Czas przełączania

Podczas przełączania między ustawieniami preskalera, Preskaler zegara systemowego zapewnia, że ​​w systemie zegara nie wystąpią żadne zakłócenia i że żadna częstotliwość pośrednia nie będzie wyższa ani od częstotliwości zegara odpowiadającej poprzedniemu ustawieniu, ani częstotliwości zegara odpowiadającej nowemu ustawieniu.

Licznik tętnień, który implementuje preskaler, działa z częstotliwością niepodzielnego zegara, która może być większa niż częstotliwość zegara procesora. Nie da się zatem określić stanu preskalera – nawet gdyby był on czytelny, a także nie można dokładnie przewidzieć czasu potrzebnego na przejście z jednego podziału zegara na drugi.

Od momentu zapisania wartości CLKPS upływa czas od T1 + T2 do T1 + 2*T2, zanim nowa częstotliwość taktowania stanie się aktywna. W tym przedziale powstają 2 aktywne zbocza zegara. Tutaj T1 jest poprzednim okresem zegara, a T2 jest okresem odpowiadającym nowemu ustawieniu preskalera.

Bufor wyjściowy zegara

Urządzenie może wyprowadzać zegar systemowy na pin CLKO (jeśli nie jest używany jako pin XTAL2). Aby załączyć wyjście należy zaprogramować Bezpiecznik CKOUT. Ten tryb jest odpowiedni, gdy zegar chipowy jest używany do sterowania innymi obwodami w systemie. Należy pamiętać, że zegar nie będzie wysyłany podczas resetowania i że normalne działanie pinów I/O zostanie anulowane po zaprogramowaniu bezpiecznika. Wewnętrzny oscylator RC, oscylator WDT, PLL i zegar zewnętrzny (CLKI) można wybrać, gdy zegar jest wyprowadzany na CLKO. Oscylatorów kwarcowych (XTAL1, XTAL2) nie można używać do wyjścia zegara na CLKO. Jeśli używany jest preskaler zegara systemowego, na wyjściu wyprowadzany jest podzielony zegar systemowy.

Opis rejestru

OSCCAL – Rejestr kalibracji oscylatora

Fragment 7 6 5 4 3 2 1 0
0x31 CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL
Odczyt/Zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis

Bity 7:0 – CAL[7:0]: Wartość kalibracji oscylatora

Rejestr kalibracji oscylatora służy do dostrojenia skalibrowanego wewnętrznego oscylatora RC w celu usunięcia zmian procesowych z częstotliwości oscylatora. Wstępnie zaprogramowana wartość kalibracyjna jest automatycznie zapisywana w tym rejestrze podczas resetowania chipa, co daje częstotliwość skalibrowaną fabrycznie, jak określono w Tabela 21-2 na stronie 164. Oprogramowanie aplikacyjne może zapisać ten rejestr w celu zmiany częstotliwości oscylatora. Oscylator można skalibrować do częstotliwości określonych w Tabela 21-2 na stronie 164. Kalibracja poza tym zakresem nie jest gwarantowana.

Należy zauważyć, że ten oscylator służy do ustalania czasu dostępu do zapisu w pamięci EEPROM i Flash, a czasy zapisu będą odpowiednio zmienione. Jeśli zapisano pamięć EEPROM lub Flash, nie należy kalibrować do częstotliwości większej niż 8.8 MHz. W przeciwnym razie zapis w EEPROM lub Flash może się nie powieść.

Bit CAL7 określa zakres działania oscylatora. Ustawienie tego bitu na 0 daje najniższy zakres częstotliwości, ustawienie tego bitu na 1 daje najwyższy zakres częstotliwości. Te dwa zakresy częstotliwości nakładają się, innymi słowy ustawienie OSCCAL = 0x7F daje wyższą częstotliwość niż OSCCAL = 0x80.

Bity CAL[6:0] służą do strojenia częstotliwości w wybranym zakresie. Ustawienie 0x00 daje najniższą częstotliwość w tym zakresie, a ustawienie 0x7F daje najwyższą częstotliwość w tym zakresie.

Aby zapewnić stabilną pracę MCU, wartość kalibracji należy zmienić na małą. Zmiana częstotliwości o więcej niż 2% między cyklami może prowadzić do nieprzewidywalnego zachowania. Zmiany w OSCCAL nie powinny przekraczać 0x20 dla każdej kalibracji. Wymagane jest zapewnienie, że MCU pozostanie w stanie Reset podczas takich zmian częstotliwości zegara

Tabela 6-14. Zakres częstotliwości wewnętrznego oscylatora RC

Wartość OSCCAL Typowa najniższa częstotliwość w odniesieniu do częstotliwości nominalnej Typowa najwyższa częstotliwość w odniesieniu do częstotliwości nominalnej
0x00 50% 100%
0x3F 75% 150%
0x7F 100% 200%

CLKPR – Rejestr preskalowania zegara

Fragment 7 6 5 4 3 2 1 0
0x26 CLKPCE CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR
Odczyt/Zapis Odczyt/zapis R R R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis

Wartość początkowa 0 0 0 0 Patrz opis bitu

Bit 7 – CLKPCE: Włącz zmianę preskalera zegara

Bit CLKPCE musi zostać zapisany na jedynkę logiczną, aby umożliwić zmianę bitów CLKPS. Bit CLKPCE jest aktualizowany tylko wtedy, gdy inne bity w CLKPR zostaną jednocześnie zapisane na zero. CLKPCE jest kasowany sprzętowo cztery cykle po zapisaniu lub po zapisaniu bitów CLKPS. Ponowne zapisanie bitu CLKPCE w ramach tego okresu limitu czasu nie wydłuża tego okresu ani nie kasuje bitu CLKPCE.

Bity 6:4 – Res: Bity zarezerwowane

Bity te są bitami zarezerwowanymi w ATtiny25/45/85 i zawsze będą odczytywane jako zero.

Bity 3:0 – CLKPS[3:0]: Preskaler zegara Wybierz bity 3 – 0

Bity te definiują współczynnik podziału pomiędzy wybranym źródłem zegara i wewnętrznym zegarem systemowym. Bity te można zapisać w czasie wykonywania, aby zmieniać częstotliwość zegara w celu dostosowania do wymagań aplikacji. Ponieważ dzielnik dzieli wejście zegara głównego na MCU, prędkość wszystkich synchronicznych urządzeń peryferyjnych jest zmniejszana, gdy używany jest współczynnik podziału. Współczynniki podziału podano w Tabela 6-15.

Aby uniknąć niezamierzonych zmian częstotliwości zegara, należy zastosować specjalną procedurę zapisu w celu zmiany bitów CLKPS:

Zapisz bit zezwolenia na zmianę preskalera zegara (CLKPCE) na jeden, a wszystkie pozostałe bity w CLKPR na zero.

W ciągu czterech cykli zapisz żądaną wartość do CLKPS, jednocześnie zapisując zero do CLKPCE.

Przerwania muszą być wyłączone podczas zmiany ustawień preskalera, aby mieć pewność, że procedura zapisu nie zostanie przerwana.

Bezpiecznik CKDIV8 określa wartość początkową bitów CLKPS. Jeśli CKDIV8 nie jest zaprogramowany, bity CLKPS zostaną zresetowane do „0000”. Jeśli zaprogramowano CKDIV8, bity CLKPS są resetowane do „0011”, co daje współczynnik dzielenia 8 przy uruchomieniu. Cechę tę należy zastosować w przypadku, gdy wybrane źródło zegara ma częstotliwość wyższą niż maksymalna częstotliwość urządzenia w aktualnych warunkach pracy. Należy pamiętać, że do bitów CLKPS można zapisać dowolną wartość, niezależnie od ustawienia bezpiecznika CKDIVXNUMX. Oprogramowanie aplikacyjne musi zapewniać wystarczający współczynnik podziału

wybierana, jeśli wybrane źródło zegara ma wyższą częstotliwość niż maksymalna częstotliwość urządzenia w aktualnych warunkach pracy. Urządzenie jest dostarczane z zaprogramowanym bezpiecznikiem CKDIV8.

Tabela 6-15. Wybierz preskaler zegara

CLKPS3 CLKPS2 CLKPS1 CLKPS0 Współczynnik podziału zegara
0 0 0 0 1
0 0 0 1 2
0 0 1 0 4
0 0 1 1 8
0 1 0 0 16
0 1 0 1 32
0 1 1 0 64
0 1 1 1 128
1 0 0 0 256
1 0 0 1 Skryty
1 0 1 0 Skryty
1 0 1 1 Skryty
1 1 0 0 Skryty
1 1 0 1 Skryty
1 1 1 0 Skryty
1 1 1 1 Skryty

Uwaga: Preskaler jest wyłączony w trybie zgodności z ATtiny15 i ani zapis do CLKPR, ani zaprogramowanie bezpiecznika CKDIV8 nie ma żadnego wpływu na zegar systemowy (który zawsze będzie wynosić 1.6 MHz).

Zarządzanie energią i tryby uśpienia

Wysoka wydajność i wiodąca w branży wydajność kodu sprawiają, że mikrokontrolery AVR są idealnym wyborem do zastosowań o niskim poborze mocy. Ponadto tryby uśpienia umożliwiają aplikacji wyłączanie nieużywanych modułów w MCU, oszczędzając w ten sposób energię. AVR zapewnia różne tryby uśpienia, dzięki czemu użytkownik może dostosować zużycie energii do wymagań aplikacji.

Tryby uśpienia

Rysunek 6-1 na stronie 23 przedstawia różne systemy zegarów i ich dystrybucję w ATtiny25/45/85. Rysunek jest pomocny w wyborze odpowiedniego trybu uśpienia. Tabela 7-1 pokazuje różne tryby uśpienia i źródła ich wybudzenia.

Tabela 7-1. Domeny aktywnego zegara i źródła wybudzenia w różnych trybach uśpienia

Aktywne domeny zegara Oscylatory Źródła przebudzenia
Tryb uśpienia clkCPU kliknijFLASH kliknijIO clkADC clkPCK Włączono główne źródło zegara INT0 i zmiana pinów SPM/EEPROM

Gotowy

 

Warunek początkowy USI

ADC Inne wejścia/wyjścia Pies podwórzowy Przerywać
Bezczynny X X X X X X X X X X
Redukcja szumów ADC X X X(1) X X X X
Wyłączać X(1) X X

Uwaga: Dla INT0 tylko przerwanie poziomu.

Aby wejść w którykolwiek z trzech trybów uśpienia, bit SE w MCUCR musi zostać zapisany na wartość logiczną i musi zostać wykonana instrukcja SLEEP. Bity SM[1:0] w rejestrze MCUCR wybierają, który tryb uśpienia (bezczynność, redukcja szumów ADC lub wyłączenie zasilania) zostanie aktywowany przez instrukcję SLEEP. Widzieć Tabela 7-2 dla podsumowania.

Jeśli włączone przerwanie wystąpi, gdy MCU jest w trybie uśpienia, MCU się budzi. Następnie MCU zostaje zatrzymany na cztery cykle oprócz czasu rozruchu, wykonuje procedurę przerwania i wznawia wykonywanie od instrukcji następującej po SLEEP. Treść Rejestru File i SRAM pozostają niezmienione, gdy urządzenie budzi się ze stanu uśpienia. Jeśli reset nastąpi w trybie uśpienia, MCU budzi się i wykonuje z wektora resetowania.

Uwaga: jeśli do wybudzenia używane jest przerwanie wyzwalane poziomem, zmieniony poziom musi zostać utrzymany przez pewien czas, aby obudzić MCU (i aby MCU mogło wejść do procedury obsługi przerwania). Widzieć „Przerwania zewnętrzne” na stronie 49 Więcej szczegółów.

Tryb czuwania

Kiedy bity SM[1:0] są zapisane na 00, instrukcja SLEEP powoduje przejście MCU w tryb bezczynności, zatrzymując procesor, ale umożliwiając komparatorowi analogowemu, ADC, USI, timerowi/licznikowi, watchdogowi i systemowi przerwań dalszą pracę. jedzenie. Ten tryb uśpienia w zasadzie zatrzymuje clkCPU i clkFLASH, pozwalając jednocześnie na pracę pozostałych zegarów.

Tryb bezczynności umożliwia MCU wybudzenie się z przerwań wyzwalanych zewnętrznie, a także wewnętrznych, takich jak przepełnienie timera. Jeżeli wybudzenie z przerwania Komparatora Analogowego nie jest wymagane, można wyłączyć Komparator Analogowy ustawiając bit ACD w „ACSR – rejestr kontroli i stanu komparatora analogowego” na stronie 120. Zmniejszy to zużycie energii w trybie bezczynności. Jeśli ADC jest włączony, konwersja rozpoczyna się automatycznie po wejściu w ten tryb.

Tryb redukcji szumów ADC

Kiedy bity SM[1:0] są zapisane na 01, instrukcja SLEEP powoduje, że MCU przechodzi w tryb redukcji szumów ADC, zatrzymując procesor, ale umożliwiając ADC, przerwaniom zewnętrznym i watchdogowi kontynuowanie pracy (jeśli jest włączone). Ten tryb uśpienia zatrzymuje clkI/O, clkCPU i clkFLASH, pozwalając jednocześnie na pracę pozostałych zegarów.

Poprawia to środowisko szumowe przetwornika ADC, umożliwiając pomiary o wyższej rozdzielczości. Jeśli ADC jest włączony, konwersja rozpoczyna się automatycznie po wejściu w ten tryb. Oprócz całkowitego przerwania konwersji ADC, tylko reset zewnętrzny, reset watchdoga, reset zaniku napięcia, przerwanie gotowości SPM/EEPROM, przerwanie poziomu zewnętrznego na INT0 lub przerwanie zmiany pinów mogą obudzić MCU z redukcji szumów ADC tryb.

Tryb wyłączenia

Kiedy bity SM[1:0] zostaną zapisane na 10, instrukcja SLEEP powoduje przejście MCU w tryb wyłączenia. W tym trybie oscylator zostaje zatrzymany, podczas gdy przerwania zewnętrzne, wykrywanie warunku startu USI i Watchdog kontynuują działanie (jeśli jest włączone). Tylko reset zewnętrzny, reset watchdoga, reset zaniku napięcia, przerwanie warunku startu USI, przerwanie poziomu zewnętrznego na INT0 lub przerwanie zmiany pinów mogą obudzić MCU. Ten tryb uśpienia zatrzymuje wszystkie generowane zegary, umożliwiając pracę tylko modułów asynchronicznych.

Oprogramowanie BOD wyłączone

Gdy detektor zaniku napięcia (BOD) jest włączony przez bezpieczniki BODLEVEL (patrz Tabela 20-4 na stronie 148), BZT aktywnie monitoruje wielkość dostawtage w okresie snu. W niektórych urządzeniach możliwe jest oszczędzanie energii poprzez wyłączenie BOD programowo w trybie uśpienia Power-Down. Pobór mocy w trybie uśpienia będzie wówczas na tym samym poziomie, co przy globalnym wyłączeniu BOD za pomocą bezpieczników.

Jeśli BOD zostanie wyłączony programowo, funkcja BOD zostanie wyłączona natychmiast po wejściu w tryb uśpienia. Po wybudzeniu ze snu BOD jest automatycznie ponownie włączany. Zapewnia to bezpieczną pracę w przypadku spadku poziomu VCC w okresie uśpienia.

Gdy BOD zostało wyłączone, czas wybudzenia z trybu uśpienia będzie taki sam jak w przypadku wybudzenia z RESETU. Użytkownik musi ręcznie skonfigurować czasy budzenia, tak aby odniesienie do pasma wzbronionego miało czas na rozpoczęcie i BOD działało poprawnie, zanim MCU będzie kontynuować wykonywanie kodu. Zobacz bity bezpiecznikowe SUT[1:0] i CKSEL[3:0] w tabeli „Młodszy bajt bezpiecznika” na stronie 149

Wyłączenie BOD jest kontrolowane przez bit BODS (uśpienie BOD) rejestru sterującego MCU, patrz „MCUCR – sterowanie MCU Zarejestruj się” na stronie 37. Zapisanie tego bitu do jedynki wyłącza BOD podczas wyłączania zasilania, podczas gdy wpisanie zera utrzymuje BOD aktywny. Domyślne ustawienie to zero, tj. BOD aktywny.

Zapisywanie do bitu BODS jest kontrolowane przez sekwencję czasową i bit włączający, patrz „MCUCR – rejestry kontrolne MCU ter” na stronie 37.

Ograniczenia

Funkcjonalność wyłączania BOD została zaimplementowana tylko w następujących urządzeniach:

ATtiny25, wersja E i nowsze

ATtiny45, wersja D i nowsza

ATtiny85, wersja C i nowsza

Wersje są oznaczone na opakowaniu urządzenia i można je zlokalizować w następujący sposób:

Dolna strona pakietów 8P3 i 8S2

Górna strona opakowania 20M1

Rejestr redukcji mocy

Rejestr redukcji mocy (PRR), zob „PRR – Rejestr redukcji mocy” na stronie 38, zapewnia metodę zmniejszenia zużycia energii poprzez zatrzymanie zegara poszczególnych urządzeń peryferyjnych. Bieżący stan urządzenia peryferyjnego jest zamrożony i rejestrów we/wy nie można odczytać ani zapisać. Zasoby wykorzystywane przez urządzenie peryferyjne podczas zatrzymywania zegara pozostaną zajęte, dlatego w większości przypadków urządzenie peryferyjne powinno zostać wyłączone przed zatrzymaniem zegara. Wybudzenie modułu poprzez wyczyszczenie bitu w PRR powoduje ustawienie modułu w takim samym stanie jak przed wyłączeniem.

Wyłączenie modułu można zastosować w trybie bezczynności i trybie aktywnym, aby znacznie zmniejszyć całkowite zużycie energii. We wszystkich pozostałych trybach uśpienia zegar jest już zatrzymany. Widzieć „Prąd zasilania modułów we/wy” na stronie 177 na przykładamples.

Minimalizowanie zużycia energii

Próbując zminimalizować zużycie energii w systemie sterowanym AVR, należy wziąć pod uwagę kilka kwestii. Generalnie należy jak najczęściej korzystać z trybów uśpienia, a tryb uśpienia należy dobierać tak, aby działało jak najmniej funkcji urządzenia. Wszystkie niepotrzebne funkcje należy wyłączyć. W szczególności następujące moduły mogą wymagać szczególnej uwagi przy próbie osiągnięcia najniższego możliwego zużycia energii.

Konwerter analogowo-cyfrowy

Jeśli ta opcja jest włączona, ADC będzie włączony we wszystkich trybach uśpienia. Aby oszczędzać energię, należy wyłączyć ADC przed wejściem w jakikolwiek tryb uśpienia. Kiedy ADC zostanie wyłączony i ponownie włączony, następna konwersja będzie konwersją rozszerzoną. Odnosić się do „Przetwornik analogowo-cyfrowy” na stronie 122 aby uzyskać szczegółowe informacje na temat działania ADC.

Komparator analogowy

Po wejściu w tryb bezczynności komparator analogowy powinien zostać wyłączony, jeśli nie jest używany. Po wejściu w tryb redukcji szumów ADC komparator analogowy powinien być wyłączony. W pozostałych trybach uśpienia komparator analogowy jest automatycznie wyłączany. Jeśli jednak komparator analogowy jest skonfigurowany do korzystania z sygnału wewnętrznego Voltage Odniesienie jako wejście, komparator analogowy powinien być wyłączony we wszystkich trybach uśpienia. W przeciwnym razie Wewnętrzny Voltage Wartość zadana zostanie włączona niezależnie od trybu uśpienia. Odnosić się do „Komparator analogowy” na stronie 119 aby uzyskać szczegółowe informacje na temat konfigurowania komparatora analogowego.

Detektor zaciemnienia

Jeżeli w aplikacji nie jest potrzebny Detektor zaniku napięcia, należy wyłączyć ten moduł. Jeśli detektor zaniku napięcia zostanie włączony przez bezpieczniki BODLEVEL, będzie on włączony we wszystkich trybach uśpienia, a zatem zawsze będzie zużywał energię. W głębszych trybach uśpienia będzie to znacząco wpływać na całkowite zużycie prądu. Widzieć „Wykrywanie brązowienia” cja” na stronie 41 „Wyłączanie oprogramowania BOD” na stronie 35 aby uzyskać szczegółowe informacje na temat konfigurowania detektora zaniku napięcia.

Objętość wewnętrznatage Odniesienie

Wewnętrzny tomtagWartość odniesienia zostanie włączona w razie potrzeby przez wykrywanie zaniku napięcia, komparator analogowy lub przetwornik ADC. Jeśli te moduły zostaną wyłączone zgodnie z opisem w powyższych sekcjach, wewnętrzny objtagReferencja zostanie wyłączona i nie będzie zużywać energii. Po ponownym włączeniu użytkownik musi pozwolić na uruchomienie odniesienia przed użyciem wyjścia. Jeśli wartość zadana jest włączona w trybie uśpienia, wyjście może zostać natychmiast wykorzystane. Odnosić się do „Wewnętrzny tomtage Odniesienie” na stronie 42 aby uzyskać szczegółowe informacje na temat czasu uruchomienia.

Zegar Watchdog

Jeżeli w aplikacji nie jest potrzebny Watchdog Timer należy wyłączyć ten moduł. Jeśli zegar Watchdog jest włączony, będzie on włączony we wszystkich trybach uśpienia, a zatem zawsze będzie zużywał energię. W głębszych trybach uśpienia będzie to znacząco wpływać na całkowite zużycie prądu. Odnosić się do „Timer Watchdog” na stronie 42 aby uzyskać szczegółowe informacje na temat konfiguracji zegara Watchdog.

Piny portu

Po wejściu w tryb uśpienia wszystkie piny portu powinny być skonfigurowane tak, aby zużywały minimalną moc. Najważniejszą rzeczą jest wtedy upewnienie się, że żadne piny nie napędzają obciążeń rezystancyjnych. W trybach uśpienia, w których zarówno zegar we/wy (clkI/O), jak i zegar ADC (clkADC) są zatrzymane, bufory wejściowe urządzenia zostaną wyłączone. Dzięki temu nie jest pobierana żadna energia

przez logikę wejściową, gdy nie jest potrzebna. W niektórych przypadkach logika wejściowa jest potrzebna do wykrycia warunków wybudzenia i

zostanie wówczas włączony. Zapoznaj się z sekcją „Włączenie wejścia cyfrowego i tryby uśpienia” na stronie 57 aby uzyskać szczegółowe informacje o tym, które piny są włączone. Jeśli bufor wejściowy jest włączony, a sygnał wejściowy pozostaje płynny lub ma poziom sygnału analogowego bliski VCC/2, bufor wejściowy będzie zużywał nadmierną moc.

W przypadku pinów wejścia analogowego bufor wejścia cyfrowego powinien być zawsze wyłączony. Poziom sygnału analogowego bliski VCC/2 na pinie wejściowym może powodować znaczny prąd nawet w trybie aktywnym. Bufory wejść cyfrowych można wyłączyć poprzez zapis do rejestru blokady wejścia cyfrowego (DIDR0). Odnosić się do „DIDR0 – rejestr blokady wejścia cyfrowego 0” na stronie 121 Więcej szczegółów.

Opis rejestru

MCUCR – rejestr kontrolny MCU

Rejestr kontrolny MCU zawiera bity kontrolne do zarządzania energią.

Fragment 7 6 5 4 3 2 1 0
0x35 BODY PUD SE SM1 SM0 BODY ISC01 ISC00 MCUCR
Odczyt/Zapis R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis R Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 0

Bit 7 – BODS: Uśpienie BOD

Funkcja wyłączania BOD jest dostępna tylko w niektórych urządzeniach. Widzieć „Ograniczenia” na stronie 36.

Aby wyłączyć BOD podczas snu (patrz Tabela 7-1 na stronie 34) bit BODS musi zostać zapisany na jedynkę logiczną. Jest to kontrolowane przez sekwencję czasową i bit włączający BODSE w MCUCR. Po pierwsze, BODS i BODSE muszą być ustawione na jeden. Po drugie, w ciągu czterech cykli zegara BODS musi zostać ustawione na jeden, a BODSE musi zostać ustawione na zero. Bit BODS jest aktywny przez trzy cykle zegara po jego ustawieniu. Instrukcja uśpienia musi zostać wykonana, gdy BODS jest aktywny, aby wyłączyć BOD dla rzeczywistego trybu uśpienia. Bit BODS jest automatycznie kasowany po trzech cyklach zegara.

W urządzeniach, w których nie zaimplementowano Sleeping BOD, ten bit jest nieużywany i zawsze będzie wynosić zero.

Bit 5 – SE: Włącz tryb uśpienia

Bit SE musi zostać zapisany na jedynkę logiczną, aby MCU przeszło w tryb uśpienia po wykonaniu instrukcji SLEEP. Aby uniknąć przejścia MCU w tryb uśpienia, chyba że jest to celem programisty, zaleca się zapisanie bitu Włącz uśpienie (SE) na jeden tuż przed wykonaniem instrukcji SLEEP i wyzerowanie go natychmiast po przebudzeniu.

Bity 4:3 – SM[1:0]: Tryb uśpienia Wybierz bity 1 i 0

Bity te wybierają pomiędzy trzema dostępnymi trybami uśpienia, jak pokazano na rysunku Tabela 7-2.

Tabela 7-2. Wybierz tryb uśpienia

SM1 SM0 Tryb uśpienia
0 0 Bezczynny
0 1 Redukcja szumów ADC
1 0 Wyłączać
1 1 Skryty

Bit 2 – BODSE: Włącz uśpienie BOD

Funkcja wyłączania BOD jest dostępna tylko w niektórych urządzeniach. Widzieć „Ograniczenia” na stronie 36.

Bit BODSE umożliwia ustawienie bitu kontrolnego BODS, jak wyjaśniono w opisie bitu BODS. Wyłączenie BOD jest kontrolowane poprzez sekwencję czasową.

Bit ten nie jest używany w urządzeniach, w których nie zaimplementowano programowego wyłączania BOD i w tych urządzeniach będzie odczytywany jako zero.

PRR – Rejestr redukcji mocy

Rejestr redukcji mocy zapewnia metodę zmniejszania zużycia energii poprzez umożliwienie wyłączenia sygnałów zegara peryferyjnego.

Fragment 7 6 5 4 3 2 1 0
0x20 PRIM1 PRIM0 PRUSI PRADC PRR
Odczyt/Zapis R R R R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 0

Bity 7:4 – Res: Bity zarezerwowane

Bity te są bitami zarezerwowanymi w ATtiny25/45/85 i zawsze będą odczytywane jako zero.

Bit 3 – PRTIM1: Zegar/licznik redukcji mocy1

Zapisanie jedynki logicznej na tym bicie powoduje wyłączenie modułu Timera/Licznika 1. Po włączeniu Timera/Licznika 1 działanie będzie kontynuowane jak przed wyłączeniem.

Bit 2 – PRTIM0: Zegar/licznik redukcji mocy0

Zapisanie jedynki logicznej na tym bicie powoduje wyłączenie modułu Timera/Licznika 0. Po włączeniu Timera/Licznika 0 działanie będzie kontynuowane jak przed wyłączeniem.

Bit 1 – PRUSI: Redukcja mocy USI

Zapisanie jedynki logicznej na tym bicie powoduje zamknięcie USI poprzez zatrzymanie zegara modułu. Po ponownym wybudzeniu USI należy je ponownie zainicjować, aby zapewnić prawidłowe działanie.

Bit 0 – PRADC: ADC redukcji mocy

Zapisanie jedynki logicznej do tego bitu powoduje wyłączenie ADC. Przed wyłączeniem należy wyłączyć ADC. Należy zauważyć, że zegar ADC jest również używany przez niektóre części komparatora analogowego, co oznacza, że ​​komparator analogowy nie może być używany, gdy ten bit jest wysoki.

Kontrola systemu i resetowanie

Resetowanie amplitunera AVR

Podczas resetowania wszystkie rejestry we/wy są ustawiane na wartości początkowe, a program rozpoczyna wykonanie od wektora resetowania. Instrukcja umieszczona w wektorze resetowania musi być instrukcją RJMP – Relative Jump – do procedury obsługi resetowania. Jeśli program nigdy nie włącza źródła przerwań, wektory przerwań nie są używane i w tych lokalizacjach można umieścić zwykły kod programu. Schemat obwodu w Rysunek 8-1 pokazuje logikę resetowania. Parametry elektryczne układu resetowania podano w „Charakterystyka systemu i resetowania” na stronie 165.

Rysunek 8-1 Resetuj logikę Resetuj logikę

Porty we/wy odbiornika AVR są natychmiast resetowane do stanu początkowego, gdy źródło resetowania stanie się aktywne. Nie wymaga to działania żadnego źródła zegara.

Gdy wszystkie źródła resetowania staną się nieaktywne, wywoływany jest licznik opóźnienia, wydłużający czas wewnętrznego resetu. Dzięki temu moc może osiągnąć stabilny poziom przed rozpoczęciem normalnej pracy. Limit czasu licznika opóźnienia jest definiowany przez użytkownika poprzez bezpieczniki SUT i CKSEL. Różne możliwości wyboru okresu opóźnienia przedstawiono w "Zegar Źródła” na stronie 25.

Zresetuj źródła

ATtiny25/45/85 ma cztery źródła resetowania:

Resetowanie po włączeniu zasilania. MCU jest resetowany, gdy objętość zasilaniatage jest poniżej progu resetowania po włączeniu zasilania (VPOT).

Reset zewnętrzny. MCU zostaje zresetowany, gdy na pinie RESET występuje niski poziom przez czas dłuższy niż minimalna długość impulsu.

Resetowanie Watchdoga. MCU jest resetowany po upływie okresu licznika Watchdog i włączeniu funkcji Watchdog.

Reset zaniku napięcia. MCU jest resetowany, gdy objętość zasilaniatage VCC jest poniżej progu resetowania napięcia zasilania (VBOT), a detektor zaniku napięcia jest włączony.

Reset przy włączaniu

Impuls resetowania po włączeniu zasilania (POR) jest generowany przez obwód detekcji na chipie. Poziom detekcji jest zdefiniowany w „System- tem i Resetuj charakterystykę” na stronie 165. POR jest aktywowany, gdy VCC jest poniżej poziomu detekcji. Obwód POR można wykorzystać do wywołania resetu rozruchowego, a także do wykrycia awarii w objętości zasilaniatage.

Obwód resetowania po włączeniu zasilania (POR) zapewnia reset urządzenia po włączeniu zasilania. Osiągnięcie progu resetowania po włączeniu zasilania, objtage wywołuje licznik opóźnienia, który określa, jak długo urządzenie pozostaje w stanie RESET po wzroście VCC. Sygnał RESET zostaje ponownie aktywowany bez opóźnienia, gdy VCC spadnie poniżej poziomu detekcji.

Rysunek 8-2. Uruchamianie MCU, RESET Powiązany z VCC

WEWNĘTRZNY RESET

Rysunek 8-3. Uruchomienie MCU, RESET rozszerzony zewnętrznie

Reset zewnętrzny

Reset zewnętrzny jest generowany przez niski poziom na pinie RESET, jeśli jest włączony. Resetuj impulsy dłuższe niż minimalna szerokość impulsu (patrz „Charakterystyka systemu i resetowania” na stronie 165) wygeneruje reset, nawet jeśli zegar nie działa. Krótsze impulsy nie gwarantują wygenerowania resetu. Gdy zastosowany sygnał osiągnie próg resetowania Voltage – VRST – na zboczu dodatnim licznik opóźnienia uruchamia MCU po upływie limitu czasu.

Rysunek 8-4. Zewnętrzny reset podczas pracy Rys. 8.4

Wykrywanie zaciemnienia

ATtiny25/45/85 posiada wbudowany obwód wykrywania zaniku napięcia (BOD) służący do monitorowania poziomu VCC podczas pracy poprzez porównanie go ze stałym poziomem wyzwalania. Poziom wyzwalania BZT można wybrać za pomocą bezpieczników BODLEVEL. Poziom wyzwalania ma histerezę, aby zapewnić wykrywanie zaniku napięcia bez impulsów. Histerezę na poziomie detekcji należy interpretować jako VBOT+ = VBOT + VHYST/2 i VBOT- = VBOT – VHYST/2.

Gdy BOD jest włączone, a VCC spada do wartości poniżej poziomu wyzwalania (VBOT-in Rysunek 8-5), resetowanie zaniku napięcia zostanie natychmiast aktywowane. Gdy VCC wzrośnie powyżej poziomu wyzwalacza (VBOT+ w Rysunek 8-5), licznik opóźnienia uruchamia MCU po upływie limitu czasu tTOUT.

Obwód BOD wykryje spadek VCC tylko wtedy, gdy objtage pozostaje poniżej poziomu wyzwalającego dłużej niż podany tBOD „Charakterystyka systemu i resetowania” na stronie 165. Rys. 8.5

Resetowanie Watchdoga

Kiedy Watchdog upłynie, wygeneruje krótki impuls resetujący o długości jednego cyklu CK. Na opadającym zboczu tego impulsu licznik opóźnienia zaczyna odliczać okres czasu tTOUT. Odnosić się do „Timer Watchdog” na stronie 42 aby uzyskać szczegółowe informacje na temat działania zegara Watchdog.

Tomtage Odniesienie do sygnałów włączających i czasu rozruchu

tomtagReferencja ma czas uruchomienia, który może mieć wpływ na sposób jej użycia. Podany jest czas uruchomienia „Charakterystyka systemu i resetowania” na stronie 165. Aby oszczędzać energię, wartość zadana nie zawsze jest włączona. Wartość zadana jest włączona w następujących sytuacjach:

Gdy BOD jest włączone (poprzez zaprogramowanie bitów bezpiecznika BODLEVEL[2:0]).

Gdy odniesienie pasma wzbronionego jest podłączone do komparatora analogowego (poprzez ustawienie bitu ACBG w ACSR).

Gdy ADC jest włączony.

Zatem, gdy BOD nie jest włączone, po ustawieniu bitu ACBG lub włączeniu ADC, użytkownik musi zawsze pozwolić na uruchomienie odniesienia, zanim zostanie użyte wyjście z komparatora analogowego lub ADC. Aby zmniejszyć zużycie energii w trybie wyłączenia, użytkownik może uniknąć trzech powyższych warunków, aby upewnić się, że źródło odniesienia zostało wyłączone przed przejściem w tryb wyłączenia.

Zegar Watchdog

Zegar Watchdog jest taktowany zegarem wbudowanym w chip, który pracuje z częstotliwością 128 kHz. Kontrolując preskaler zegara Watchdog, można regulować interwał resetowania Watchdoga, jak pokazano w Tabela 8-3 na stronie 46. Instrukcja WDR – Watchdog Reset – resetuje licznik czasu Watchdog. Zegar Watchdog jest również resetowany, gdy jest wyłączony i gdy nastąpi reset chipa. Można wybrać dziesięć różnych okresów cyklu zegara, aby określić okres resetowania. Jeśli okres resetowania upłynie bez kolejnego resetu Watchdoga, ATtiny25/45/85 resetuje się i wykonuje z wektora resetowania. Aby poznać szczegóły dotyczące czasu resetowania Watchdoga, patrz Tabela 8-3 na stronie 46.

Timer Watchdog można również skonfigurować tak, aby zamiast resetowania generował przerwanie. Może to być bardzo pomocne podczas używania Watchdoga do wybudzania po wyłączeniu zasilania.

Aby zapobiec niezamierzonemu wyłączeniu Watchdoga lub niezamierzonej zmianie limitu czasu, bezpiecznik WDTON wybiera dwa różne poziomy bezpieczeństwa, jak pokazano na Tabela 8-1 Odnieś się do „Sekwencje czasowe zmiany konfiguracji” figuracja licznika czasu Watchdog” na stronie 43 Więcej szczegółów.

Tabela 8-1. Konfiguracja WDT jako funkcja ustawień bezpieczników WDTON

WDTON Poziom bezpieczeństwa Stan początkowy WDT Jak wyłączyć WDT Jak zmienić limit czasu
Nie zaprogramowany 1 Wyłączony Sekwencja czasowa Brak ograniczeń
Zaprogramowany 2 Włączony Zawsze włączone Sekwencja czasowa

Rysunek 8-7. Zegar stróżujący Pies podwórzowy

Sekwencje czasowe zmiany konfiguracji timera Watchdog

Kolejność zmiany konfiguracji różni się nieco w przypadku obu poziomów bezpieczeństwa. Dla każdego poziomu opisane są osobne procedury.

Poziom bezpieczeństwa 1: W tym trybie licznik czasu Watchdog jest początkowo wyłączony, ale można go włączyć, zapisując bit WDE na jeden, bez żadnych ograniczeń. Sekwencja czasowa jest wymagana w przypadku wyłączania włączonego zegara nadzorującego. Aby wyłączyć włączony zegar Watchdog, należy wykonać poniższą procedurę:

W tej samej operacji zapisz jedynkę logiczną do WDCE i WDE. Jedynka logiczna musi zostać zapisana do WDE niezależnie od poprzedniej wartości bitu WDE.

W ciągu następnych czterech cykli zegara, w ramach tej samej operacji, zapisz bity WDE i WDP według potrzeb, ale z wyczyszczonym bitem WDCE.

Poziom bezpieczeństwa 2: W tym trybie licznik czasu Watchdog jest zawsze włączony, a bit WDE zawsze będzie odczytywany jako jeden. Zmiana limitu czasu Watchdog wymaga sekwencji czasowej. Aby zmienić limit czasu Watchdog, należy wykonać następującą procedurę:

W tej samej operacji zapisz logiczny do WDCE i WDE. Mimo że WDE jest zawsze ustawione, WDE musi zostać zapisane na jedynkę, aby rozpocząć sekwencję czasową.

W ciągu następnych czterech cykli zegara, w tej samej operacji, zapisz bity WDP według potrzeb, ale z wyczyszczonym bitem WDCE. Wartość zapisana do bitu WDE jest nieistotna.

Kod Example

Poniższy kod exampplik pokazuje jeden zespół i jedną funkcję C do wyłączania WDT. ByłyampW pliku zakłada się, że przerwania są kontrolowane (np. poprzez globalne wyłączenie przerwań), tak aby podczas wykonywania tych funkcji nie wystąpiły żadne przerwania.

Kod montażu Npample(1)
WDT_wyłączone:

wdr

; Wyczyść WDRF w MCUSR

ldi r16, (0<

out MCUSR, r16

; Zapisz logiczną jedynkę do WDCE i WDE

; Zachowaj stare ustawienia preskalera, aby zapobiec niezamierzonemu resetowi Watchdoga

w r16, WDTCR

ori r16, (1<

poza WDTCR, r16

; Wyłącz WDT

ldi r16, (0<

poza WDTCR, r16

gnić

Kod C Npample(1)
nieważne WDT_off(nieważne)

{

_WDR();

/* Wyczyść WDRF w MCUSR */ MCUSR = 0x00

/* Zapisz jedynkę logiczną do WDCE i WDE */ WDTCR |= (1<

/* Wyłącz WDT */ WDTCR = 0x00;

}

Uwaga: 1. Patrz „Kod npamples” na stronie 6.

Opis rejestru

MCUSR – rejestr stanu MCU

Rejestr stanu MCU dostarcza informacji o tym, które źródło resetowania spowodowało reset MCU.

Fragment 7 6 5 4 3 2 1 0
0x34 WDRF BORF EKSTREF PORF MCUSR
Odczyt/Zapis R R R R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis

Wartość początkowa 0 0 0 0 Patrz opis bitu

Bity 7:4 – Res: Bity zarezerwowane

Bity te są bitami zarezerwowanymi w ATtiny25/45/85 i zawsze będą odczytywane jako zero.

Bit 3 – WDRF: Flaga resetowania watchdoga

Bit ten jest ustawiany, jeśli nastąpi Reset Watchdoga. Bit jest resetowany poprzez reset po włączeniu zasilania lub przez zapisanie zera logicznego do flagi.

Bit 2 – BORF: Flaga resetowania zaniku napięcia

Bit ten jest ustawiany, jeśli nastąpi Reset Brown-out. Bit jest resetowany poprzez reset po włączeniu zasilania lub przez zapisanie zera logicznego do flagi.

Bit 1 – EXTRF: Flaga resetowania zewnętrznego

Bit ten jest ustawiany, jeśli nastąpi reset zewnętrzny. Bit jest resetowany poprzez reset po włączeniu zasilania lub przez zapisanie zera logicznego do flagi.

Bit 0 – PORF: Flaga resetowania po włączeniu zasilania

Bit ten jest ustawiany, jeśli nastąpi reset po włączeniu zasilania. Bit jest resetowany jedynie poprzez zapisanie zera logicznego do flagi.

Aby skorzystać z flag resetowania w celu zidentyfikowania stanu resetu, użytkownik powinien przeczytać, a następnie zresetować MCUSR tak wcześnie, jak to możliwe w programie. Jeżeli rejestr zostanie wyczyszczony przed wystąpieniem kolejnego resetu, źródło resetu można znaleźć sprawdzając flagi resetowania.

WDTCR – rejestr kontrolny timera Watchdog

Fragment 7 6 5 4 3 2 1 0
0x21 WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 WDTCR
Odczyt/Zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 X 0 0 0

Bit 7 – WDIF: Flaga przerwania przekroczenia limitu czasu watchdoga

Bit ten jest ustawiany, gdy w zegarze Watchdog nastąpi przekroczenie limitu czasu, a licznik czasu Watchdog jest skonfigurowany na przerwanie. WDIF jest czyszczony sprzętowo podczas wykonywania odpowiedniego wektora obsługi przerwań. Alternatywnie WDIF jest czyszczony poprzez zapisanie logicznej jedynki do flagi. Gdy ustawiony jest bit I w SREG i WDIE, wykonywane jest przerwanie Time-out Watchdog.

Bit 6 – WDIE: Włącz przerwanie przekroczenia limitu czasu watchdoga

Kiedy ten bit zostanie zapisany na jeden, WDE zostanie wyczyszczony i bit I w rejestrze stanu zostanie ustawiony, włączane jest przerwanie Time-out Watchdog. W tym trybie odpowiednie przerwanie jest wykonywane zamiast resetowania, jeśli nastąpi przekroczenie limitu czasu w zegarze Watchdog.

Jeśli ustawione jest WDE, WDIE jest automatycznie czyszczone sprzętowo po przekroczeniu limitu czasu. Jest to przydatne do utrzymania bezpieczeństwa resetowania Watchdoga podczas korzystania z przerwania. Po wyczyszczeniu bitu WDIE następny limit czasu spowoduje zresetowanie. Aby uniknąć resetu Watchdoga, po każdym przerwaniu należy ustawić WDIE.

Tabela 8-2. Konfiguracja timera Watchdoga

WDE WDIE Stan timera watchdoga Akcja po przekroczeniu limitu czasu
0 0 Zatrzymany Nic
0 1 Działanie Przerywać
1 0 Działanie Nastawić
1 1 Działanie Przerywać

Bit 4 – WDCE: Włącz zmianę watchdoga

Bit ten musi być ustawiony, gdy bit WDE jest zapisywany do logicznego zera. W przeciwnym razie Watchdog nie zostanie wyłączony. Po zapisaniu do jednego, sprzęt wyczyści ten bit po czterech cyklach zegara. Aby zapoznać się z procedurą wyłączania Watchdoga, zapoznaj się z opisem bitu WDE. Bit ten należy także ustawić przy zmianie bitów preskalera. Widzieć „Sekwencje czasowe dotyczące zmiany konfiguracji timera Watchdog” na stronie 43.

Bit 3 – WDE: Włącz watchdog

Gdy WDE zostanie zapisane do logicznej jedynki, funkcja Watchdog Timer zostanie włączona, a jeśli WDE zostanie zapisane do logicznego zera, funkcja Watchdog Timer zostanie wyłączona. WDE można wyczyścić tylko wtedy, gdy bit WDCE ma pierwszy poziom logiczny. Aby wyłączyć włączony zegar Watchdog, należy wykonać poniższą procedurę:

W tej samej operacji zapisz jedynkę logiczną do WDCE i WDE. Jedynka logiczna musi zostać zapisana w WDE, nawet jeśli jest ustawiona na jeden przed rozpoczęciem operacji wyłączania.

W ciągu następnych czterech cykli zegara zapisz logiczne 0 do WDE. To wyłącza Watchdog.

Na poziomie bezpieczeństwa 2 nie ma możliwości wyłączenia Timera Watchdoga, nawet przy użyciu algorytmu opisanego powyżej. Widzieć „Sekwencje czasowe zmiany konfiguracji timera Watchdog” na stronie 43.

Na poziomie bezpieczeństwa 1 WDE jest zastępowane przez WDRF w MCUSR. Widzieć „MCUSR – rejestr stanu MCU” na stronie 44 dla opisu WDRF. Oznacza to, że WDE jest zawsze ustawione, gdy ustawione jest WDRF. Aby wyczyścić WDE, należy wyczyścić WDRF przed wyłączeniem Watchdoga za pomocą procedury opisanej powyżej. Ta funkcja zapewnia wielokrotne resetowanie w warunkach powodujących awarię oraz bezpieczny rozruch po awarii.

Uwaga: Jeżeli timer watchdog nie będzie używany w aplikacji, ważne jest, aby podczas inicjalizacji urządzenia przejść przez procedurę wyłączenia watchdoga. Jeśli Watchdog zostanie przypadkowo włączony, npample przez niekontrolowany wskaźnik lub stan zaniku zasilania, urządzenie zostanie zresetowane, co z kolei doprowadzi do nowego resetu układu watchdog. Aby uniknąć tej sytuacji, oprogramowanie aplikacji powinno zawsze usuwać flagę WDRF i bit kontrolny WDE w procedurze inicjalizacji.

Bity 5, 2:0 – WDP[3:0]: Preskaler zegara Watchdog 3, 2, 1 i 0

Bity WDP[3:0] określają wstępne skalowanie zegara Watchdog, gdy licznik czasu Watchdog jest włączony. Różne wartości wstępnego skalowania i odpowiadające im okresy limitu czasu są pokazane w Tabela 8-3.

Tabela 8-3. Wybór wstępnego skalowania zegara Watchdog

WDP3 WDP2 WDP1 WDP0 Liczba cykli oscylatora WDT Typowy limit czasu przy VCC = 5.0 V
0 0 0 0 2 tys. (2048) cykli 16 milisekund
0 0 0 1 4 tys. (4096) cykli 32 milisekund
0 0 1 0 8 tys. (8192) cykli 64 milisekund
0 0 1 1 16 tys. (16384) cykli 0.125 sekunda
0 1 0 0 32 tys. (32764) cykli 0.25 sekunda
0 1 0 1 64 tys. (65536) cykli 0.5 sekunda
0 1 1 0 128 tys. (131072) cykli 1.0 sekunda
0 1 1 1 256 tys. (262144) cykli 2.0 sekunda
1 0 0 0 512 tys. (524288) cykli 4.0 sekunda
1 0 0 1 1024 tys. (1048576) cykli 8.0 sekunda

Tabela 8-3. Wybór wstępnego skalowania timera Watchdog (ciąg dalszy)

WDP3 WDP2 WDP1 WDP0 Liczba cykli oscylatora WDT Typowy limit czasu przy VCC = 5.0 V
1 0 1 0 Skryty(1)
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1

Uwaga: 1. Jeśli ta opcja zostanie wybrana, zostanie użyte jedno z prawidłowych ustawień poniżej 0b1010.

Przerwania

W tej sekcji opisano specyfikę obsługi przerwań wykonywanej w ATtiny25/45/85. Ogólne wyjaśnienie obsługi przerwań AVR można znaleźć w „Obsługa resetowania i przerwania” na stronie 12.

Wektory przerwań w ATtiny25/45/85

Wektory przerwań ATtiny25/45/85 opisano w Tabela 9-1poniżej.

Tabela 9-1. Resetuj i przerywaj wektory

Nr wektora Adres programu Źródło Definicja przerwania
1 0x0000 NASTAWIĆ Zewnętrzny pin, reset po włączeniu zasilania, reset zaniku napięcia, reset watchdoga
2 0x0001 INT0 Żądanie przerwania zewnętrznego 0
3 0x0002 PCINT0 Żądanie przerwania zmiany pinów 0
4 0x0003 TIMER1_COMPA Timer/Licznik 1 Porównaj Dopasowanie A
5 0x0004 TIMER1_OVF Przepełnienie timera/licznika 1
6 0x0005 TIMER0_OVF Przepełnienie timera/licznika 0
7 0x0006 EE_RDY Gotowa pamięć EEPROM
8 0x0007 ANA_COMP Komparator analogowy
9 0x0008 ADC Konwersja ADC zakończona
10 0x0009 TIMER1_COMPB Timer/Licznik 1 Porównaj Dopasowanie B
11 0x000A TIMER0_COMPA Timer/Licznik 0 Porównaj Dopasowanie A
12 0x000B TIMER0_COMPB Timer/Licznik 0 Porównaj Dopasowanie B
13 0x000C WDT Limit czasu dla psa stróżującego
14 0x000D USI_START START USI
15 0x000E USI_OVF Przepełnienie USI

Jeśli program nigdy nie włącza źródła przerwań, wektory przerwań nie są używane i w tych lokalizacjach można umieścić zwykły kod programu.

Typową i ogólną konfigurację adresów wektorów przerwań w ATtiny25/45/85 pokazano w programie exampzobacz poniżej.

Kod montażu Npample
org 0x0000 ;Ustaw adres następnego oświadczenie
rjmp ZRESETUJ ; Adres 0x0000
rjmp INT0_ISR ; Adres 0x0001
rjmp PCINT0_ISR ; Adres 0x0002
rjmp TIM1_COMPA_ISR ; Adres 0x0003
rjmp TIM1_OVF_ISR ; Adres 0x0004
rjmp TIM0_OVF_ISR ; Adres 0x0005
rjmp EE_RDY_ISR ; Adres 0x0006
rjmp ANA_COMP_ISR ; Adres 0x0007
rjmp ADC_ISR ; Adres 0x0008
rjmp TIM1_COMPB_ISR ; Adres 0x0009
rjmp TIM0_COMPA_ISR ; Adres 0x000A
rjmp TIM0_COMPB_ISR ; Adres 0x000B
rjmp WDT_ISR ; Adres 0x000C
rjmp USI_START_ISR ; Adres 0x000D
rjmp USI_OVF_ISR ; Adres 0x000E
RESETOWANIE: ; Uruchomienie programu głównego
; Adres 0x000F

Uwaga: Zobacz „Kod npamples” na stronie 6.

Przerwania zewnętrzne

Przerwania zewnętrzne są wyzwalane przez pin INT0 lub dowolny z pinów PCINT[5:0]. Należy zauważyć, że jeśli jest włączone, przerwania będą wyzwalane nawet jeśli piny INT0 lub PCINT[5:0] są skonfigurowane jako wyjścia. Ta funkcja umożliwia generowanie przerwania programowego. Zmiana pinów przerywa PCI zostanie uruchomione, jeśli którykolwiek włączony pin PCINT [5:0] zostanie przełączony. Rejestr PCMSK kontroluje, które piny przyczyniają się do przerwań związanych ze zmianą pinów. Przerwania związane ze zmianą pinów na PCINT[5:0] są wykrywane asynchronicznie. Oznacza to, że przerwań tych można używać do wybudzania części również z trybów uśpienia innych niż tryb bezczynności.

Przerwania INT0 mogą być wyzwalane przez zbocze opadające, narastające lub niski poziom. Jest to skonfigurowane zgodnie ze specyfikacją rejestru sterującego MCU – MCUCR. Gdy przerwanie INT0 jest włączone i skonfigurowane jako wyzwalane poziomem, przerwanie zostanie uruchomione tak długo, jak pin będzie utrzymywany w stanie niskim. Należy zauważyć, że rozpoznawanie przerwań zbocza opadającego lub narastającego na INT0 wymaga obecności zegara we/wy, opisanego w „Systemy zegarowe i ich dystrybucja” na strona 23.

Przerwanie niskiego poziomu

Przerwanie niskiego poziomu na INT0 zostało wykryte asynchronicznie. Oznacza to, że tego przerwania można użyć do wybudzenia części również z trybów uśpienia innych niż tryb bezczynności. Zegar we/wy jest zatrzymywany we wszystkich trybach uśpienia z wyjątkiem trybu bezczynności.

Należy pamiętać, że jeśli do wybudzenia po wyłączeniu zasilania używane jest przerwanie wyzwalane poziomem, wymagany poziom musi być utrzymywany wystarczająco długo, aby MCU zakończył wybudzanie i wyzwolił przerwanie poziomu. Jeśli poziom zniknie przed końcem czasu rozruchu, MCU nadal się obudzi, ale nie zostanie wygenerowane żadne przerwanie. Czas rozruchu jest określony przez bezpieczniki SUT i CKSEL zgodnie z opisem w „Zegar systemowy i opcje zegara” na stronie 23.

Jeśli niski poziom na pinie przerwania zostanie usunięty, zanim urządzenie się przebudzi, wykonanie programu nie zostanie przekierowane do procedury obsługi przerwania, ale będzie kontynuowane od instrukcji następującej po poleceniu SLEEP.

Zmiana pinów Czas przerwania

ByłyampPokazano plik czasu przerwania zmiany pinów Rysunek 9-1.

Opis rejestru

MCUCR – rejestr kontrolny MCU

Zewnętrzny rejestr kontroli przerwań A zawiera bity kontrolne służące do sterowania wykrywaniem przerwań.

Fragment 7 6 5 4 3 2 1 0
0x35 BODY PUD SE SM1 SM0 BODY ISC01 ISC00 MCUCR
Odczyt/Zapis R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis R Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 0

Bity 1:0 – ISC0[1:0]: Kontrola wykrywania przerwania 0 Bit 1 i Bit 0

Przerwanie zewnętrzne 0 jest aktywowane przez zewnętrzny pin INT0, jeśli ustawiona jest flaga I SREG i odpowiednia maska ​​przerwania. Poziom i zbocza na zewnętrznym pinie INT0, które aktywują przerwanie, są zdefiniowane w Tabela 9-2. Wartość na pinie INT0 wynosi sampLED przed wykryciem krawędzi. Jeśli wybrane zostanie przerwanie zboczem lub przerwanie przełączające, impulsy trwające dłużej niż jeden okres zegara wygenerują przerwanie. Krótsze impulsy nie gwarantują wygenerowania przerwania. Jeśli wybrane zostanie przerwanie niskiego poziomu, niski poziom musi zostać utrzymany aż do zakończenia aktualnie wykonywanej instrukcji, aby wygenerować przerwanie.

Tabela 9-2. Przerwanie 0 Kontrola sensu

ISC01 ISC00 Opis
0 0 Niski poziom INT0 generuje żądanie przerwania.
0 1 Każda logiczna zmiana na INT0 generuje żądanie przerwania.
1 0 Opadające zbocze INT0 generuje żądanie przerwania.
1 1 Zbocze narastające INT0 generuje żądanie przerwania.

GIMSK – rejestr masek przerwań ogólnych

Fragment 7 6 5 4 3 2 1 0
0x3B INT0 PCIE GIMSK
Odczyt/Zapis R Odczyt/zapis Odczyt/zapis R R R R R
Wartość początkowa 0 0 0 0 0 0 0 0

Bity 7, 4:0 – Res: Bity zarezerwowane

Bity te są bitami zarezerwowanymi w ATtiny25/45/85 i zawsze będą odczytywane jako zero.

Bit 6 – INT0: Żądanie przerwania zewnętrznego 0 Włączone

Gdy bit INT0 jest ustawiony (jeden) i bit I w rejestrze stanu (SREG) jest ustawiony (jeden), włączone jest przerwanie zewnętrznego pinu. Bity 0/1 kontroli przerwań 0 (ISC01 i ISC00) w rejestrze kontrolnym MCU (MCUCR) określają, czy przerwanie zewnętrzne jest aktywowane w przypadku narastającego i/lub opadającego zbocza pinu INT0 lub wykrytego poziomu. Aktywność na pinie spowoduje żądanie przerwania, nawet jeśli INT0 jest skonfigurowany jako wyjście. Odpowiednie przerwanie żądania zewnętrznego przerwania 0 jest wykonywane z wektora przerwania INT0.

Bit 5 – PCIE: Włącz przerwanie zmiany pinów

Gdy bit PCIE jest ustawiony (jeden) i bit I w rejestrze stanu (SREG) jest ustawiony (jeden), włączone jest przerwanie zmiany pinów. Jakakolwiek zmiana na dowolnym aktywnym pinie PCINT[5:0] spowoduje przerwanie. Odpowiednie przerwanie żądania przerwania zmiany pinów jest wykonywane z wektora przerwań PCI. Piny PCINT[5:0] są włączane indywidualnie przez rejestr PCMSK0.

GIFR – ogólny rejestr flag przerwań

Fragment 7 6 5 4 3 2 1 0
0x3A INTF0 PCIF GIFR
Odczyt/Zapis R Odczyt/zapis Odczyt/zapis R R R R R
Wartość początkowa 0 0 0 0 0 0 0 0

Bity 7, 4:0 – Res: Bity zarezerwowane

Bity te są bitami zarezerwowanymi w ATtiny25/45/85 i zawsze będą odczytywane jako zero.

Bit 6 – INTF0: Flaga przerwania zewnętrznego 0

Kiedy zbocze lub zmiana logiczna na pinie INT0 wyzwala żądanie przerwania, INTF0 zostaje ustawione (jeden). Jeśli bit I w SREG i bit INT0 w GIMSK są ustawione (jeden), MCU przeskoczy do odpowiedniego wektora przerwania. Flaga jest kasowana, gdy wykonywana jest procedura przerwania. Alternatywnie flagę można wyczyścić, zapisując do niej flagę logiczną. Flaga ta jest zawsze kasowana, gdy INT0 jest skonfigurowane jako przerwanie poziomu.

Bit 5 – PCIF: Flaga przerwania zmiany pinów

Kiedy zmiana logiczna na którymkolwiek pinie PCINT[5:0] wyzwala żądanie przerwania, PCIF zostaje ustawione (jeden). Jeśli bit I w SREG i bit PCIE w GIMSK są ustawione (jeden), MCU przeskoczy do odpowiedniego wektora przerwań. Flaga jest kasowana, gdy wykonywana jest procedura przerwania. Alternatywnie flagę można wyczyścić, zapisując do niej flagę logiczną.

PCMSK – rejestr maski zmiany pinów

Fragment 7 6 5 4 3 2 1 0
0x15 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 PCMSK
Odczyt/Zapis R R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 0

Bity 7:6 – Res: Bity zarezerwowane

Bity te są bitami zarezerwowanymi w ATtiny25/45/85 i zawsze będą odczytywane jako zero.

Bity 5:0 – PCINT[5:0]: Zmiana pinów Włącz maskę 5:0

Każdy bit PCINT[5:0] określa, czy przerwanie zmiany pinów jest włączone na odpowiednim pinie we/wy. Jeśli ustawiono PCINT[5:0] i bit PCIE w GIMSK, przerwanie zmiany pinów jest włączone na odpowiednim pinie I/O. Jeśli PCINT[5:0] jest wyczyszczone, przerwanie zmiany pinów na odpowiednim pinie I/O jest wyłączone.

Porty wejścia/wyjścia

Wstęp

Wszystkie porty AVR posiadają prawdziwą funkcjonalność odczytu, modyfikacji i zapisu, gdy są używane jako ogólne cyfrowe porty we/wy. Oznacza to, że kierunek jednego pinu portu można zmienić bez niezamierzonej zmiany kierunku dowolnego innego pinu za pomocą instrukcji SBI i CBI. To samo dotyczy zmiany wartości napędu (jeśli jest skonfigurowany jako wyjście) lub włączania/wyłączania rezystorów podciągających (jeśli jest skonfigurowany jako wejście). Każdy bufor wyjściowy ma symetryczną charakterystykę napędu, zapewniając zarówno wysoką zdolność pochłaniania, jak i źródła. Sterownik pinowy jest wystarczająco mocny, aby bezpośrednio sterować wyświetlaczami LED. Wszystkie piny portu mają indywidualnie wybierane rezystory podciągające z napięciem zasilaniatage niezmienna rezystancja. Wszystkie styki we/wy mają diody zabezpieczające zarówno VCC, jak i masę, jak wskazano w Rysunek 10-1. Odnieś się do „Charakterystyka elektryczna” na stronie 161 aby uzyskać pełną listę parametrów.

Rysunek 10-1. Schemat odpowiednika pinów we/wy

Rys. 10

Wszystkie rejestry i odniesienia do bitów w tej sekcji są zapisane w formie ogólnej. Mała litera „x” oznacza literę numerującą port, a mała litera „n” oznacza numer bitu. Jednakże, gdy w programie używany jest rejestr lub definicja bitu, należy użyć dokładnej formy. Na przykładample, PORTB3 dla bitu nr. 3 w porcie B, tutaj ogólnie udokumentowane jako PORTxn. Fizyczne rejestry we/wy i lokalizacje bitów są wymienione w „Opis rejestru” na strona 64.

Dla każdego portu przydzielone są trzy adresy pamięci we/wy, po jednym dla rejestru danych – PORTx, rejestru kierunku danych – DDRx i pinów wejściowych portu – PINx. Lokalizacja wejść/wyjść pinów wejściowych portu jest przeznaczona tylko do odczytu, natomiast rejestr danych i rejestr kierunku danych są przeznaczone do odczytu/zapisu. Jednakże zapisanie jedynki logicznej do bitu w Rejestrze PINx spowoduje przełączenie odpowiedniego bitu w Rejestrze Danych. Dodatkowo, opcja Pull-up Disable – bit PUD w MCUCR wyłącza funkcję pull-up dla wszystkich pinów we wszystkich portach, gdy jest ustawiona.

Używanie portu we/wy zgodnie z ogólnym opisem cyfrowych wejść/wyjść opisano w „Porty jako ogólne cyfrowe wejścia/wyjścia” na stronie 53. Większość pinów portów jest multipleksowana z alternatywnymi funkcjami dla funkcji peryferyjnych urządzenia. Sposób, w jaki każda alternatywna funkcja zakłóca pin portu, opisano w „Alternatywne funkcje portu” na stronie 57. Pełny opis alternatywnych funkcji znajduje się w poszczególnych sekcjach modułów.

Należy pamiętać, że włączenie alternatywnej funkcji niektórych styków portu nie wpływa na wykorzystanie pozostałych styków portu jako ogólnych cyfrowych wejść/wyjść.

Porty jako ogólne cyfrowe wejścia/wyjścia

Porty są dwukierunkowymi portami we/wy z opcjonalnymi wewnętrznymi modułami podciągającymi. Rysunek 10-2 pokazuje opis funkcjonalny jednego pinu portu I/O, tutaj ogólnie zwanego Pxn.

Rysunek 10-2. Ogólne cyfrowe wejścia/wyjścia(1)

Rys. 10

Konfiguracja Pinu

Każdy pin portu składa się z trzech bitów rejestru: DDxn, PORTxn i PINxn. Jak pokazano w „Opis rejestru” na strona 64, bity DDxn są dostępne pod adresem wejścia/wyjścia DDRx, bity PORTxn pod adresem wejścia/wyjścia PORTx, a bity PINxn pod adresem wejścia/wyjścia PINx.

Bit DDxn w rejestrze DDRx wybiera kierunek tego pinu. Jeśli DDxn jest zapisany jako logiczny, Pxn jest skonfigurowany jako pin wyjściowy. Jeśli DDxn ma zapisane zero logiczne, Pxn jest skonfigurowany jako pin wejściowy.

Jeśli PORTxn zostanie zapisany jako logiczny, gdy pin jest skonfigurowany jako pin wejściowy, rezystor podciągający jest aktywowany. Aby wyłączyć rezystor podciągający, w PORTxn należy zapisać logiczne zero lub pin musi zostać skonfigurowany jako pin wyjściowy. Styki portu są trójstanowe, gdy stan resetowania staje się aktywny, nawet jeśli nie działają żadne zegary.

Jeśli PORTxn ma zapisaną logiczną jedynkę, gdy pin jest skonfigurowany jako pin wyjściowy, pin portu jest ustawiony na wysoki poziom (jeden). Jeżeli PORTxn ma zapisane zero logiczne, gdy pin jest skonfigurowany jako pin wyjściowy, pin portu jest ustawiany na stan niski (zero).

Przełączanie Pinu

Zapisanie jedynki logicznej do PINxn powoduje przełączenie wartości PORTxn, niezależnie od wartości DDRxn. Należy zauważyć, że instrukcji SBI można użyć do przełączenia jednego bitu w porcie.

Przełączanie pomiędzy wejściem i wyjściem

Podczas przełączania między stanem trójstanowym ({DDxn, PORTxn} = 0b00) a poziomem wysokim na wyjściu ({DDxn, PORTxn} = 0b11), stanem pośrednim z włączonym podciąganiem {DDxn, PORTxn} = 0b01) lub stanem niskim na wyjściu ({DDxn, PORTxn} = 0b10) musi wystąpić. Zwykle stan włączenia podciągania jest w pełni akceptowalny, ponieważ środowisko o wysokiej impedancji nie zauważy różnicy pomiędzy silnym wysokim przetwornikiem a podciągnięciem. Jeśli tak nie jest, bit PUD w rejestrze MCUCR można ustawić tak, aby wyłączyć wszystkie podciągnięcia na wszystkich portach.

Przełączanie pomiędzy wejściem z podciąganiem i niskim wyjściem generuje ten sam problem. Użytkownik musi wykorzystać stan trójstanowy ({DDxn, PORTxn} = 0b00) lub wysoki stan wyjściowy ({DDxn, PORTxn} = 0b10) jako krok pośredni.

Tabela 10-1 podsumowuje sygnały sterujące dla wartości pinów.

Tabela 10-1. Konfiguracje pinów portu

DDxn PORTxn PUD

(w MCUCR)

Wejście/Wyjście Podciąganie Komentarz
0 0 X Wejście NIE Trójstanowy (Hi-Z)
0 1 0 Wejście Tak Pxn będzie źródłem prądu, jeśli ext. pociągnięty nisko.
0 1 1 Wejście NIE Trójstanowy (Hi-Z)
1 0 X Wyjście NIE Wyjście niskie (ujście)
1 1 X Wyjście NIE Wyjście wysokie (źródło)

Odczytywanie wartości Pin

Niezależnie od ustawienia bitu kierunku danych DDxn, pin portu można odczytać poprzez bit rejestru PINxn. Jak pokazano w Rysunek 10-2, bit rejestru PINxn i poprzedzający zatrzask stanowią synchronizator. Jest to potrzebne, aby uniknąć metastabilności, jeśli fizyczny pin zmienia wartość w pobliżu krawędzi wewnętrznego zegara, ale wprowadza również opóźnienie. Rysunek 10-3 pokazuje diagram czasowy synchronizacji podczas odczytu wartości pinów zastosowanej zewnętrznie. Maksymalne i minimalne opóźnienia propagacji są oznaczone odpowiednio tpd,max i tpd,min.

Rozważmy okres zegara rozpoczynający się wkrótce po pierwszym opadającym zboczu zegara systemowego. Zatrzask jest zamknięty, gdy zegar jest niski, i staje się przezroczysty, gdy zegar jest wysoki, jak wskazuje zacieniony obszar sygnału „SYNC LATCH”. Wartość sygnału jest blokowana, gdy zegar systemowy spada do poziomu niskiego. Jest on rejestrowany w rejestrze PINxn przy kolejnym dodatnim zboczu zegara. Jak wskazują dwie strzałki tpd,max i tpd,min, pojedyncze przejście sygnału na pinie będzie opóźnione od ½ do 1½ okresu zegara systemowego, w zależności od czasu potwierdzenia.

Podczas odczytywania wartości PIN przypisanej programowo należy wstawić instrukcję nop, jak wskazano w Rysunek 10-4. Instrukcja out ustawia sygnał „SYNC LATCH” na dodatnim zboczu zegara. W tym przypadku opóźnienie tpd przez synchronizator wynosi jeden okres zegara systemowego.

Poniższy kod exampplik pokazuje, jak ustawić piny 0 i 1 portu B na wysoki, 2 i 3 na niski oraz zdefiniować piny portu od 4 do 5 jako wejście z podciągnięciem przypisanym do pinu portu 4. Wynikowe wartości pinów są ponownie odczytywane, ale jak wspomniano wcześniej, dołączona jest instrukcja nop, która umożliwia odczytanie wartości ostatnio przypisanej do niektórych pinów.

Kod montażu Npample(1)

; Zdefiniuj podciągnięcia i ustaw wysokie wyjścia

; Zdefiniuj kierunki pinów portu

ldi        r16,(1<<PB4)|(1<<PB1)|(1<<PB0)

ldi        r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)

wyjście PORTB, r16

poza DDRB, r17

; Wstaw nop dla synchronizacji

nie

; Przeczytaj piny portu

w r16, PINB

Uwaga: W programie asemblera zastosowano dwa rejestry tymczasowe, aby zminimalizować czas od ustawienia podciągnięć na pinach 0, 1 i 4 do momentu prawidłowego ustawienia bitów kierunku, definiując bity 2 i 3 jako niskie i redefiniując bity 0 i 1 jako silni, wysokie sterowniki.

Kod C Npample
niepodpisany znak i;

/* Zdefiniuj podciągnięcia i ustaw wysokie wartości wyjściowe */

/* Określ kierunki pinów portu */ PORTB = (1<

DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);

/* Wstaw nop dla synchronizacji*/

_NOP();

/* Odczyt pinów portu */ i = PINB;

Włącz wejście cyfrowe i tryby uśpienia

Jak pokazano w Rysunek 10-2, cyfrowy sygnał wejściowy może być clampdo masy na wejściu wyzwalacza Schmitta. Sygnał oznaczony na rysunku jako SLEEP jest ustawiany przez kontroler uśpienia MCU w trybie wyłączania, aby uniknąć wysokiego zużycia energii, jeśli niektóre sygnały wejściowe pozostają niezmienione lub mają poziom sygnału analogowego bliski VCC/2.

SLEEP jest zastępowany dla pinów portu włączonych jako piny zewnętrznego przerwania. Jeśli żądanie przerwania zewnętrznego nie jest włączone, SLEEP jest aktywny również dla tych pinów. SLEEP jest również zastępowany przez różne inne alternatywne funkcje, jak opisano w „Alternatywne funkcje portu” na stronie 57.

Jeśli wysoki poziom logiczny („jeden”) występuje na pinie asynchronicznego przerwania zewnętrznego skonfigurowanego jako „Przerwanie na zboczu narastającym, zboczu opadającym lub dowolna zmiana logiki na pinie”, podczas gdy przerwanie zewnętrzne nie jest włączone, odpowiednia flaga przerwania zewnętrznego zostanie wyświetlona należy ustawić po wznowieniu z wyżej wymienionego trybu uśpienia, ponieważ parametr clampprzejście w ten tryb uśpienia powoduje żądaną zmianę logiki.

Niepołączone piny

Jeśli niektóre kołki nie są używane, zaleca się upewnić, że mają one określony poziom. Mimo że większość wejść cyfrowych jest wyłączona w trybach głębokiego uśpienia, jak opisano powyżej, należy unikać wejść bezpotencjałowych, aby zmniejszyć pobór prądu we wszystkich innych trybach, w których wejścia cyfrowe są włączone (reset, tryb aktywny i tryb bezczynności).

Najprostszą metodą zapewnienia określonego poziomu niewykorzystanego trzpienia jest umożliwienie wewnętrznego podciągnięcia. W takim przypadku podciąganie zostanie wyłączone podczas resetowania. Jeśli ważny jest niski pobór mocy podczas resetowania, zaleca się użycie zewnętrznego urządzenia podciągającego lub rozwijanego. Nie zaleca się podłączania nieużywanych pinów bezpośrednio do VCC lub GND, ponieważ może to spowodować nadmierne prądy, jeśli pin zostanie przypadkowo skonfigurowany jako wyjście.

Alternatywne funkcje portu

Większość pinów portów ma alternatywne funkcje oprócz ogólnych cyfrowych wejść/wyjść. Rysunek 10-5 pokazuje, w jaki sposób sygnały sterujące pinów portu są uproszczone Rysunek 10-2 można zastąpić funkcjami alternatywnymi. Sygnały nadrzędne mogą nie występować we wszystkich pinach portu, ale rysunek służy jako ogólny opis mający zastosowanie do wszystkich pinów portów w rodzinie mikrokontrolerów AVR.

Tabela 10-2. Ogólny opis sygnałów nadrzędnych dla funkcji alternatywnych

Nazwa sygnału Pełne imię i nazwisko Opis
PUOE Włącz opcję pomijania podciągania Jeśli ten sygnał jest ustawiony, zezwolenie na podciąganie jest kontrolowane przez sygnał PUOV. Jeśli ten sygnał zostanie usunięty, podciąganie zostanie włączone, gdy

{DDxn, PORTxn, PUD} = 0b010.

PUOV Wartość zastąpienia podciągnięcia Jeśli ustawiono PUOE, podciąganie jest włączone/wyłączone, gdy PUOV jest ustawione/wyczyszczone, niezależnie od ustawienia bitów rejestru DDxn, PORTxn i PUD.
DDOE Włącz zmianę kierunku danych Jeśli ten sygnał jest ustawiony, włączenie sterownika wyjściowego jest kontrolowane przez sygnał DDOV. Jeśli ten sygnał zostanie usunięty, sterownik wyjściowy zostanie włączony przez bit rejestru DDxn.
DDOV Wartość zastąpienia kierunku danych Jeśli ustawione jest DDOE, sterownik wyjściowy jest włączany/wyłączany po ustawieniu/wyczyszczeniu DDOV, niezależnie od ustawienia bitu rejestru DDxn.
PVOE Włącz zmianę wartości portu Jeśli ten sygnał jest ustawiony i sterownik wyjściowy jest włączony, wartość portu jest kontrolowana przez sygnał PVOV. Jeśli PVOE jest wyczyszczone i sterownik wyjściowy jest włączony, wartość portu jest kontrolowana przez bit rejestru PORTxn.
PVOV Wartość zastąpienia wartości portu Jeśli ustawione jest PVOE, wartość portu jest ustawiana na PVOV, niezależnie od ustawienia bitu rejestru PORTxn.
PTOE Włącz obejście przełączania portu Jeśli ustawione jest PTOE, bit rejestru PORTxn jest odwrócony.
DIEOE Wejście cyfrowe Włącz obejście Włącz Jeśli ten bit jest ustawiony, zezwolenie na wejście cyfrowe jest kontrolowane przez sygnał DIEOV. Jeśli ten sygnał zostanie usunięty, włączenie wejścia cyfrowego jest określane przez stan MCU (tryb normalny, tryb uśpienia).
DIEOV Wejście cyfrowe Włącz wartość zastąpienia Jeśli ustawiono DIEOE, wejście cyfrowe jest włączone/wyłączone po ustawieniu/wyczyszczeniu DIEOV, niezależnie od stanu MCU (tryb normalny, tryb uśpienia).
DI Wejście cyfrowe Jest to wejście cyfrowe umożliwiające korzystanie z alternatywnych funkcji. Na rysunku sygnał jest podłączony do wyjścia wyzwalacza Schmitta, ale przed synchronizatorem. Jeżeli wejście cyfrowe nie jest wykorzystywane jako źródło zegara, moduł z funkcją alternatywną będzie korzystał z własnego synchronizatora.
AIO Wejście / wyjście analogowe Jest to wejście/wyjście analogowe do/z alternatywnych funkcji. Sygnał jest podłączony bezpośrednio do padu i może być używany dwukierunkowo.

W poniższych podrozdziałach krótko opisano alternatywne funkcje każdego portu i powiązano sygnały nadrzędne z funkcją alternatywną. Więcej szczegółów można znaleźć w opisie funkcji alternatywnych.

Alternatywne funkcje portu B

Pokazano piny portu B z alternatywną funkcją Tabela 10-3.

Tabela 10-3. Styki portu B Alternatywne funkcje

Pin portu Funkcja alternatywna
PB5

RESETUJ: Zresetuj PIN

dW: debugWIRE I/O ADC0: Kanał wejściowy ADC 0

PCINT5: Przerwanie zmiany pinów, źródło 5

PB4 XTAL2: Wyjście oscylatora kwarcowego CLKO: Wyjście zegara systemowego ADC2: Kanał wejściowy ADC 2

OC1B: Timer/Licznik 1 Porównaj dopasowanie B Wyjście PCINT4: Przerwanie zmiany pinów 0, źródło 4

PB3 XTAL1: Wejście oscylatora kwarcowego CLKI: Wejście zegara zewnętrznego ADC3: Kanał wejściowy ADC 3

OC1B: Uzupełniający timer/licznik1 Porównaj dopasowanie B Wyjście PCINT3: Przerwanie zmiany pinów 0, źródło 3

PB2 SCK: Wejście zegara szeregowego ADC1: Kanał wejściowy ADC 1

T0: Timer/Licznik0 Źródło zegara USCK: Zegar USI (tryb trzyprzewodowy) SCL: Zegar USI (tryb dwuprzewodowy) INT0: Przerwanie zewnętrzne 0 Wejście PCINT2: Przerwanie zmiany pinów 0, Źródło 2

PB1 MISO: Wejście danych głównych SPI/Wyjście danych slave AIN1: Komparator analogowy, wejście ujemne OC0B: Timer/licznik 0 Porównanie wyjścia B OC1A: Timer/licznik 1 Porównanie dopasowania A Wyjście DO: Wyjście danych USI (tryb trójprzewodowy) PCINT1: Przerwanie zmiany pinów 0, źródło 1
PB0 MOSI:: Wyjście danych głównych SPI / Wejście danych podrzędnych AIN0: Komparator analogowy, wejście dodatnie

OC0A: Timer/Licznik0 Porównaj Dopasuj wyjście

OC1A: Uzupełniający timer/licznik 1 Porównaj dopasowanie A Wyjście DI: Wejście danych USI (tryb trójprzewodowy)

SDA: Wejście danych USI (tryb dwuprzewodowy) AREF: Zewnętrzne odniesienie analogowe PCINT0: Przerwanie zmiany pinów 0, źródło 0

Port B, Bit 5 – RESET/dW/ADC0/PCINT5

RESET: Wejście resetu zewnętrznego jest aktywne w stanie niskim i jest włączone poprzez wyprogramowanie („1”) bezpiecznika RSTDISBL. Podciąganie jest aktywowane, a sterownik wyjściowy i wejście cyfrowe są dezaktywowane, gdy pin jest używany jako pin RESET.

dW: Gdy zaprogramowany jest bezpiecznik debugWIRE Enable (DWEN), a bity blokady nie są zaprogramowane, system debugWIRE w urządzeniu docelowym jest aktywowany. Styk portu RESET jest skonfigurowany jako dwukierunkowy pin wejścia/wyjścia typu wire-AND (otwarty dren) z włączoną funkcją pull-up i staje się bramą komunikacyjną pomiędzy obiektem docelowym a emulatorem.

ADC0: Przetwornik analogowo-cyfrowy, kanał 0.

PCINT5: Źródło przerwania zmiany pinów 5.

Port B, Bit 4 – XTAL2/CLKO/ADC2/OC1B/PCINT4

XTAL2: Pin 2 oscylatora zegara chipowego. Używany jako pin zegara dla wszystkich źródeł zegara chipowego z wyjątkiem wewnętrznego kalibrowanego oscylatora RC i zegara zewnętrznego. W przypadku użycia jako pin zegara, pin ten nie może być używany jako pin I/O. W przypadku korzystania z wewnętrznego kalibrowanego oscylatora RC lub zegara zewnętrznego jako źródła zegara chipowego, PB4 służy jako zwykły pin we/wy.

CLKO: Wydzielony zegar systemowy może być wyprowadzany na pin PB4. Podzielony zegar systemowy będzie wysyłany, jeśli zaprogramowany zostanie bezpiecznik CKOUT, niezależnie od ustawień PORTB4 i DDB4. Będzie on także wyprowadzany podczas resetowania.

ADC2: Przetwornik analogowo-cyfrowy, kanał 2.

OC1B: Output Compare Wyjście Match: Pin PB4 może służyć jako zewnętrzne wyjście dla Timera/Licznika 1 Compare Match B, jeśli jest skonfigurowany jako wyjście (ustawiony DDB4). Pin OC1B jest także pinem wyjściowym dla funkcji timera trybu PWM.

PCINT4: Źródło przerwania zmiany pinów 4.

Port B, Bit 3 – XTAL1/CLKI/ADC3/OC1B/PCINT3

XTAL1: Pin 1 oscylatora zegara chipowego. Używany do wszystkich źródeł zegara chipowego z wyjątkiem wewnętrznego oscylatora RC z możliwością kalibracji. W przypadku użycia jako pin zegara, pin ten nie może być używany jako pin I/O.

CLKI: Wejście zegara z zewnętrznego źródła zegara, patrz „Zegar zewnętrzny” na stronie 26.

ADC3: Przetwornik analogowo-cyfrowy, kanał 3.

OC1B: Odwrócone wyjście Porównaj Wyjście dopasowania: Pin PB3 może służyć jako zewnętrzne wyjście dla Timera/Licznika 1 Porównaj dopasowanie B, jeśli jest skonfigurowany jako wyjście (ustawiony DDB3). Pin OC1B jest także odwróconym pinem wyjściowym dla funkcji timera trybu PWM.

PCINT3: Źródło przerwania zmiany pinów 3.

Port B, Bit 2 – SCK/ADC1/T0/USCK/SCL/INT0/PCINT2

SCK: wyjście zegara głównego, pin wejściowy zegara podrzędnego dla kanału SPI. Gdy SPI jest włączone jako Slave, ten pin jest skonfigurowany jako wejście niezależnie od ustawienia DDB2. Gdy SPI jest włączone jako Master, kierunek danych na tym pinie jest kontrolowany przez DDPB2. Gdy pin jest wymuszany przez SPI jako wejście, podciąganie może nadal być kontrolowane przez bit PORTB2.

ADC1: Przetwornik analogowo-cyfrowy, kanał 1.

T0: Źródło licznika timera/licznika 0.

USCK: Zegar z uniwersalnym interfejsem szeregowym w trybie trójprzewodowym.

SCL: Zegar szeregowy w trybie dwuprzewodowym dla trybu dwuprzewodowego USI.

INT0: Zewnętrzne źródło przerwania 0.

PCINT2: Źródło przerwania zmiany pinów 2.

Port B, Bit 1 – MISO/AIN1/OC0B/OC1A/DO/PCINT1

MISO: wejście Master Data, pin wyjściowy danych Slave dla kanału SPI. Gdy SPI jest włączone jako Master, ten pin jest skonfigurowany jako wejście niezależnie od ustawienia DDB1. Gdy SPI jest włączone jako Slave, kierunek danych na tym pinie jest kontrolowany przez DDB1. Gdy pin jest wymuszany przez SPI jako wejście, podciąganie może nadal być kontrolowane przez bit PORTB1.

AIN1: Wejście ujemne komparatora analogowego. Skonfiguruj pin portu jako wejście z wyłączonym wewnętrznym podciąganiem, aby uniknąć zakłócania funkcji portu cyfrowego z funkcją komparatora analogowego.

OC0B: Porównanie wyników Dopasowanie wyników. Pin PB1 może służyć jako zewnętrzne wyjście dla Timera/Licznika 0 Porównaj dopasowanie B. Pin PB1 musi być skonfigurowany jako wyjście (zestaw DDB1 (jeden)), aby móc pełnić tę funkcję. Pin OC0B jest także pinem wyjściowym dla funkcji timera trybu PWM.

OC1A: Wyjście dopasowania wyjścia: Pin PB1 może służyć jako zewnętrzne wyjście dla zegara/licznika 1 porównania dopasowania B, jeśli jest skonfigurowany jako wyjście (zestaw DDB1). Pin OC1A jest także pinem wyjściowym dla funkcji timera trybu PWM.

ZRÓB: Wyjście danych w trybie trójprzewodowym Uniwersalny interfejs szeregowy. Tryb trójprzewodowy Wyjście danych zastępuje wartość PORTB1 i jest kierowane do portu, gdy ustawiony jest bit kierunku danych DDB1 (jeden). PORTB1 nadal umożliwia podciąganie, jeśli kierunek jest podany i PORTB1 jest ustawiony (jeden).

PCINT1: Źródło przerwania zmiany pinów 1.

Port B, bit 0 – MOSI/AIN0/OC0A/OC1A/DI/SDA/AREF/PCINT0

MOSI: wyjście danych głównych SPI, wejście danych slave dla kanału SPI. Gdy SPI jest włączone jako Slave, ten pin jest skonfigurowany jako wejście niezależnie od ustawienia DDB0. Gdy SPI jest włączone jako Master, kierunek danych na tym pinie jest kontrolowany przez DDB0. Gdy pin jest wymuszany przez SPI jako wejście, podciąganie może być nadal kontrolowane przez bit PORTB0.

AIN0: Wejście dodatnie komparatora analogowego. Skonfiguruj pin portu jako wejście z wyłączonym wewnętrznym podciąganiem, aby uniknąć zakłócania funkcji portu cyfrowego z funkcją komparatora analogowego.

OC0A: Porównanie wyników Dopasowanie wyników. Pin PB0 może służyć jako zewnętrzne wyjście dla zegara/licznika 0 Porównanie dopasowania A, jeśli jest skonfigurowane jako wyjście (zestaw DDB0 (jeden)). Pin OC0A jest także pinem wyjściowym dla funkcji timera trybu PWM.

OC1A: Odwrócone wyjście Porównaj Wyjście dopasowania: Pin PB0 może służyć jako zewnętrzne wyjście dla Timera/Licznika 1 Porównaj dopasowanie B, jeśli jest skonfigurowany jako wyjście (ustawiony DDB0). Pin OC1A jest także odwróconym pinem wyjściowym dla funkcji timera trybu PWM.

SDA: Dane interfejsu szeregowego w trybie dwuprzewodowym.

AREF: Zewnętrzne odniesienie analogowe dla ADC. Podciąganie i sterownik wyjściowy są wyłączone na PB0, gdy pin jest używany jako zewnętrzne odniesienie lub wewnętrzny Voltage Odniesienie z zewnętrznym kondensatorem na pinie AREF.

DI: Wejście danych w trybie USI Three-wire. Tryb USI Three-wire nie zastępuje normalnych funkcji portu, więc pin musi być skonfigurowany jako wejście dla funkcji DI.

PCINT0: Źródło przerwania zmiany pinów 0.

Tabela 10-4 Tabela 10-5 powiązać alternatywne funkcje portu B z nadrzędnymi sygnałami pokazanymi na rysunku Rysunek 10-5 wł strona 58.

Tabela 10-4. Nadpisywanie sygnałów dla funkcji alternatywnych w PB[5:3]

Nazwa sygnału PB5/RESET/ ADC0/ PCINT5 PB4/ADC2/XTAL2/ OC1B/PCINT4 PB3/ADC3/XTAL1/ OC1B/PCINT3
PUOE

RSTDISBL(1) • DWEN(1)

0 0
PUOV 1 0 0
DDOE RSTDISBL(1) • DWEN(1) 0 0
DDOV debugWire Transmisja 0 0
PVOE 0 OC1B Włącz

OC1B Włącz

PVOV 0 OC1B OC1B
PTOE 0 0 0
DIEOE

RSTDISBL(1) + (PCINT5 • PCIE + ADC0D)

PCINT4 • PCIE + ADC2D PCINT3 • PCIE + ADC3D
DIEOV ADC0D ADC2D ADC3D
DI Wejście PCINT5 Wejście PCINT4 Wejście PCINT3
AIO Wejście RESET, wejście ADC0 Wejście ADC2 Wejście ADC3

Uwaga: gdy bezpiecznik jest ustawiony na „0” (zaprogramowany).

Tabela 10-5. Nadpisywanie sygnałów dla funkcji alternatywnych w PB[2:0]

Nazwa sygnału PB2/SCK/ADC1/T0/ USCK/SCL/INT0/PCINT2 PB1/MISO/DO/AIN1/ OC1A/OC0B/PCINT1 PB0/MOSI/DI/SDA/AIN0/AR EF/OC1A/OC0A/

PCINT0

PUOE USI_DWA_PRZEWODY 0 USI_DWA_PRZEWODY
PUOV 0 0 0
DDOE USI_DWA_PRZEWODY 0 USI_DWA_PRZEWODY
DDOV (USI_SCL_HOLD + PORTB2) • DDB2 0  

(SDA + PORTB0) • DDB0

PVOE USI_TWO_WIRE • DDB2 OC0B Włącz + OC1A Włącz + USI_THREE_WIRE

OC0A Włącz + OC1A Włącz + (USI_TWO_WIRE

DDB0)

PVOV 0 OC0B + OC1A + DO

OC0A + OC1A

PTOE USITC 0 0
DIEOE PCINT2 • PCIE + ADC1D + USISIE PCINT1 • PCIE + AIN1D PCINT0 • PCIE + AIN0D + USISIE
DIEOV ADC1D AIN1D AIN0D
DI T0/USCK/SCL/INT0/

Wejście PCINT2

Wejście PCINT1 Wejście DI/SDA/PCINT0
AIO Wejście ADC1 Analogowy komparator ujemne wejście Analogowy komparator dodatni wejściowy

Opis rejestru

MCUCR – rejestr kontrolny MCU

Fragment 7 6 5 4 3 2 1 0
0x35 BODY PUD SE SM1 SM0 BODY ISC01 ISC00 MCUCR
Odczyt/Zapis R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis R Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 0

Bit 6 – PUD: Wyłącz podciąganie

Gdy ten bit zostanie zapisany na jeden, pull-upy w portach I/O zostaną wyłączone, nawet jeśli rejestry DDxn i PORTxn są skonfigurowane tak, aby włączyć pull-upy ({DDxn, PORTxn} = 0b01). Zobacz „Konfigurowanie pinu” na stronie 54 Aby uzyskać więcej szczegółów na temat tej funkcji.

PORTB – Rejestr danych portu B

Fragment 7 6 5 4 3 2 1 0
0x18 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB
Odczyt/Zapis R R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 0

DDRB – Rejestr kierunku danych portu B

Fragment 7 6 5 4 3 2 1 0
0x17 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DRB
Odczyt/Zapis R R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 0 0 0 0 0 0

PINB – Adres pinów wejściowych portu B

Fragment 7 6 5 4 3 2 1 0
0x16 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB
Odczyt/Zapis R R Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis Odczyt/zapis
Wartość początkowa 0 0 Brak Brak Brak Brak Brak Brak

8-bitowy Timer/Licznik 0 z PWM

Cechy

Dwie niezależne jednostki porównania wyjścia

Podwójnie buforowane porównanie rejestrów wyjściowych

Wyczyść licznik czasu przy porównywaniu (automatyczne ponowne ładowanie)

Modulator szerokości impulsu (PWM) bez zakłóceń i z poprawną fazą

Zmienny okres PWM

Generator częstotliwości

Trzy niezależne źródła przerwań (TOV0, OCF0A i OCF0B)

Nadview

Timer/Counter0 to uniwersalny 8-bitowy moduł Timer/Counter z dwoma niezależnymi jednostkami Output Compare i obsługą PWM. Umożliwia dokładne odmierzanie czasu wykonywania programu (zarządzanie zdarzeniami) i generowanie fal.

Na rysunku pokazano uproszczony schemat blokowy 8-bitowego licznika/timera. Rysunek 11-1. Rzeczywiste rozmieszczenie pinów I/O można znaleźć w „Wyprowadzenia ATtiny25/45/85” na stronie 2. Rejestry I/O dostępne dla CPU, w tym bity I/O i piny I/O, są pogrubione. Lokalizacje rejestru I/O i bitów specyficznych dla urządzenia są wymienione w „Opis rejestru” na stronie 77.

Rejestry Timer/Counter (TCNT0) i Output Compare Registers (OCR0A i OCR0B) są rejestrami 8-bitowymi. Sygnały żądania przerwania (w skrócie Int.Req. na rysunku) są widoczne w rejestrze Timer Interrupt Flag Register (TIFR). Wszystkie przerwania są indywidualnie maskowane za pomocą rejestru Timer Interrupt Mask Register (TIMSK). Rejestry TIFR i TIMSK nie są pokazane na rysunku.

Timer/Licznik może być taktowany wewnętrznie, przez preskaler lub przez zewnętrzne źródło zegara na pinie T0. Blok logiki Clock Select kontroluje, którego źródła zegara i zbocza używa Timer/Licznik, aby zwiększyć (lub zmniejszyć) swoją wartość. Timer/Licznik jest nieaktywny, gdy nie wybrano żadnego źródła zegara. Wyjście z logiki Clock Select jest określane jako zegar timera (clkT0).

Podwójnie buforowane rejestry Output Compare (OCR0A i OCR0B) są porównywane z wartością Timera/Licznika w każdym momencie. Wynik porównania może być użyty przez Generator przebiegów do wygenerowania wyjścia PWM lub zmiennej częstotliwości na pinach Output Compare (OC0A i OC0B). Zobacz „Jednostka porównania wyników” na stronie 69. aby uzyskać szczegółowe informacje. Zdarzenie Compare Match ustawi również flagę Compare (OCF0A lub OCF0B), która może zostać użyta do wygenerowania żądania przerwania Output Compare.

Definicje

Wiele odniesień do rejestrów i bitów w tej sekcji jest zapisanych w formie ogólnej. Mała litera „n” zastępuje numer Timera/Licznika, w tym przypadku 0. Mała litera „x” zastępuje Output Compare Unit, w tym przypadku Compare Unit A lub Compare Unit B. Jednak podczas korzystania z definicji rejestru lub bitu w programie należy użyć dokładnej formy, tj. TCNT0 w celu uzyskania dostępu do wartości licznika Timera/Licznika0 itd.

Definicje w Tabela 11-1 są również szeroko stosowane w całym dokumencie.

Tabela 11-1. Definicje

Stały Opis
SPÓD Licznik osiąga DNO, gdy wynosi 0x00
MAKS Licznik osiąga wartość MAX, gdy przyjmuje wartość 0xFF (255 w systemie dziesiętnym)
SZCZYT Licznik osiąga TOP, gdy staje się równy najwyższej wartości w sekwencji zliczania. Wartość TOP może być przypisana jako stała wartość 0xFF (MAX) lub wartość zapisana w rejestrze OCR0A. Przypisanie zależy od trybu działania

Timer/licznik Preskaler i źródła zegara

Timer/Licznik może być taktowany przez wewnętrzne lub zewnętrzne źródło zegara. Źródło zegara jest wybierane przez logikę Clock Select, która jest kontrolowana przez bity Clock Select (c) znajdujące się w rejestrze sterującym Timer/Counter0 (TCCR0B).

Wewnętrzne źródło zegara z preskalerem

Timer/Licznik0 może być taktowany bezpośrednio przez zegar systemowy (poprzez ustawienie CS0[2:0] = 1). Zapewnia to najszybszą pracę, przy maksymalnej częstotliwości zegara timera/licznika równej częstotliwości zegara systemowego (fCLK_I/O). Alternatywnie, jeden z czterech odczepów z preskalera może być użyty jako źródło zegara. Preskaler ma częstotliwość:

Reset preskalera

Preskaler działa swobodnie, tzn. działa niezależnie od logiki Clock Select Timer/Counter0. Ponieważ preskaler nie jest objęty wyborem zegara timera/licznika, stan preskalera będzie miał wpływ na sytuacje, w których używany jest preskaler. Jeden z przykładówample artefaktu preskalera ma miejsce, gdy timer/licznik jest włączony i taktowany przez preskaler (6 > CS0[2:0] > 1). Liczba cykli zegara systemowego od momentu włączenia timera do wystąpienia pierwszego zliczenia może wynosić od 1 do N+1 cykli zegara systemowego, gdzie N jest równe dzielnikowi preskalera (8, 64, 256 lub 1024).

Możliwe jest użycie Prescaler Reset w celu zsynchronizowania Timera/Licznika z wykonywaniem programu.

Zewnętrzne źródło zegara

Zewnętrzne źródło zegara podłączone do pinu T0 może być używane jako zegar timera/licznika (clkT0). Pin T0 jest sampprowadzony raz na każdy cykl zegara systemowego przez logikę synchronizacji pinów. Zsynchronizowany (sampNastępnie przekazywany jest sygnał LED

przez detektor krawędzi. Rysunek 11-2 pokazuje funkcjonalny równoważny schemat blokowy logiki synchronizacji T0 i detektora krawędzi. Rejestry są taktowane na dodatnim zboczu wewnętrznego zegara systemowego (clkI/O). Zatrzask jest przezroczysty w wysokim okresie wewnętrznego zegara systemowego.

Detektor krawędzi generuje jeden impuls clkT0 dla każdej dodatniej (CS0[2:0] = 7) lub ujemnej (CS0[2:0] = 6) wykrytej krawędzi.

Rejestry OCR0x są podwójnie buforowane podczas korzystania z dowolnego z trybów modulacji szerokości impulsu (PWM). W przypadku normalnego trybu pracy i trybu Clear Timer on Compare (CTC) podwójne buforowanie jest wyłączone. Podwójne buforowanie synchronizuje aktualizację rejestrów OCR0x Compare do góry lub dołu sekwencji zliczania. Synchronizacja zapobiega występowaniu impulsów PWM o nieparzystej długości i niesymetrycznych, dzięki czemu wyjście jest wolne od zakłóceń.

Dostęp do rejestru OCR0x może wydawać się skomplikowany, ale tak nie jest. Gdy podwójne buforowanie jest włączone, CPU ma dostęp do rejestru buforowego OCR0x, a jeśli podwójne buforowanie jest wyłączone, CPU uzyska dostęp do OCR0x bezpośrednio.

Porównanie siły wyjściowej

W trybach generowania przebiegów bez PWM, wyjście dopasowania komparatora może zostać wymuszone przez zapisanie jedynki do bitu Force Output Compare (FOC0x). Wymuszenie Compare Match nie ustawi flagi OCF0x ani nie przeładuje/nie wyczyści timera, ale pin OC0x zostanie zaktualizowany tak, jakby wystąpiło prawdziwe Compare Match (ustawienia bitów COM0x[1:0] definiują, czy pin OC0x jest ustawiony, wyczyszczony czy przełączony).

Porównaj blokowanie dopasowania według zapisu TCNT0

Wszystkie operacje zapisu CPU do rejestru TCNT0 zablokują wszelkie dopasowania porównawcze występujące w następnym cyklu zegara timera, nawet gdy timer jest zatrzymany. Ta funkcja umożliwia zainicjowanie OCR0x do tej samej wartości co TCNT0 bez wyzwalania przerwania, gdy zegar Timera/Licznika jest włączony.

Korzystanie z jednostki porównania wyników

Ponieważ zapisanie TCNT0 w dowolnym trybie działania zablokuje wszystkie dopasowania porównawcze na jeden cykl zegara timera, istnieje ryzyko związane ze zmianą TCNT0 podczas korzystania z jednostki Output Compare, niezależnie od tego, czy Timer/Counter jest uruchomiony, czy nie. Jeśli wartość zapisana do TCNT0 jest równa wartości OCR0x, dopasowanie porównawcze zostanie pominięte, co spowoduje niepoprawne generowanie przebiegu. Podobnie nie zapisuj wartości TCNT0 równej BOTTOM, gdy licznik zlicza w dół.

Konfigurację OC0x należy wykonać przed ustawieniem Data Direction Register dla pinu portu do wyjścia. Najprostszym sposobem ustawienia wartości OC0x jest użycie bitów stroboskopowych Force Output Compare (FOC0x) w trybie normalnym. Rejestry OC0x zachowują swoje wartości nawet podczas zmiany trybów generowania przebiegów.

Należy pamiętać, że bity COM0x[1:0] nie są podwójnie buforowane razem z wartością porównawczą. Zmiana bitów COM0x[1:0] będzie miała natychmiastowy skutek.

Porównaj jednostkę wyjściową dopasowania

Bity trybu Compare Output (COM0x[1:0]) mają dwie funkcje. Generator przebiegów używa bitów COM0x[1:0] do definiowania stanu Output Compare (OC0x) przy następnym Compare Match. Ponadto bity COM0x[1:0] kontrolują źródło wyjściowe pinu OC0x. Rysunek 11-6 pokazuje uproszczony schemat logiki, na którą wpływa ustawienie bitu COM0x[1:0]. Rejestry I/O, bity I/O i piny I/O na rysunku są pogrubione. Pokazano tylko części ogólnych rejestrów sterujących portem I/O (DDR i PORT), na które wpływają bity COM0x[1:0]. Odnosząc się do stanu OC0x, odniesienie dotyczy wewnętrznego rejestru OC0x, a nie pinu OC0x. Jeśli nastąpi reset systemu, rejestr OC0x zostanie zresetowany do „0”.

Po podłączeniu OC0A/OC0B do pinu I/O funkcja bitów COM0A[1:0]/COM0B[1:0] zależy od ustawienia bitu WGM0[2:0]. Tabela 11-2 pokazuje funkcjonalność bitu COM0x[1:0], gdy bity WGM0[2:0] są ustawione na tryb normalny lub CTC (bez PWM).

Tabela 11-2. Porównanie trybu wyjściowego, trybu nie-PWM

COM0A1 COM0B1 COM0A0 COM0B0 Opis
0 0 Normalna praca portu, OC0A/OC0B rozłączone.
0 1 Przełącz OC0A/OC0B w celu porównania dopasowania
1 0 Wyczyść OC0A/OC0B w porównaniu
1 1 Ustaw OC0A/OC0B w celu porównania

Tabela 11-3 pokazuje funkcjonalność bitu COM0x[1:0], gdy bity WGM0[2:0] są ustawione na szybki tryb PWM.

Tabela 11-3. Porównanie trybu wyjściowego, szybkiego trybu PWM(1)

COM0A1 COM0B1 COM0A0 COM0B0 Opis
0 0 Normalna praca portu, OC0A/OC0B rozłączone.
0 1 Skryty
1 0 Wyczyść OC0A/OC0B w dopasowaniu porównawczym, ustaw OC0A/OC0B na DOLNYM (tryb bez inwersji)
1 1 Ustaw OC0A/OC0B w opcji Porównaj, wyczyść OC0A/OC0B w opcji DÓŁ (tryb odwracania)

Uwaga: Szczególny przypadek występuje, gdy OCR0A lub OCR0B równa się TOP, a COM0A1/COM0B1 jest ustawiony. W takim przypadku dopasowanie porównania jest ignorowane, ale ustawienie lub czyszczenie jest wykonywane w BOTTOM. Zobacz „Szybki tryb PWM” na stronie 73 po więcej szczegółów.

Tabela 11-4 pokazuje funkcjonalność bitu COM0x[1:0], gdy bity WGM0[2:0] są ustawione na tryb PWM z poprawną fazą.

Tabela 11-4. Porównanie trybu wyjściowego, trybu PWM z poprawną fazą(1)

COM0A1 COM0B1 COM0A0 COM0B0 Opis
0 0 Normalna praca portu, OC0A/OC0B rozłączone.
0 1 Skryty
1 0 Wyczyść OC0A/OC0B w Compare Match podczas liczenia w górę. Ustaw OC0A/OC0B w Compare Match podczas liczenia w dół.
1 1 Ustaw OC0A/OC0B w Compare Match podczas liczenia w górę. Wyczyść OC0A/OC0B w Compare Match podczas liczenia w dół.

Uwaga: 1. Szczególny przypadek występuje, gdy OCR0A lub OCR0B równa się TOP, a COM0A1/COM0B1 jest ustawiony. W takim przypadku Comp-pare Match jest ignorowane, ale ustawienie lub czyszczenie jest wykonywane w TOP. Zobacz „Tryb PWM z poprawną fazą” na stronie 74 po więcej szczegółów.

Bity 3:2 – Res: Bity zarezerwowane

Bity te są bitami zarezerwowanymi w ATtiny25/45/85 i zawsze będą odczytywane jako zero.

Bity 1:0 – WGM0[1:0]: Tryb generowania przebiegów

W połączeniu z bitem WGM02 znajdującym się w rejestrze TCCR0B bity te sterują sekwencją zliczania licznika, źródłem maksymalnej (TOP) wartości licznika oraz typem generowania przebiegu, który ma zostać użyty, patrz Tabela 11-5. Tryby pracy obsługiwane przez jednostkę Timera/Licznika to: tryb normalny (licznik), tryb czyszczenia timera przy dopasowaniu porównania (CTC) oraz dwa typy trybów modulacji szerokości impulsu (PWM) (patrz „Tryby działania” na stronie 71).

Tabela 11-5. Tryb generowania przebiegu Opis bitu

Tryb WGM 02 WGM 01 WGM 00 Tryb działania timera/licznika SZCZYT Aktualizacja OCRx w Flaga TOV ustawiona na
0 0 0 0 Normalna 0xFF Natychmiastowy MAKS(1)
1 0 0 1 PWM, poprawna faza 0xFF SZCZYT SPÓD(2)
2 0 1 0 CTC OCR Natychmiastowy MAKS(1)
3 0 1 1 Szybki PWM 0xFF SPÓD(2) MAKS(1)
4 1 0 0 Skryty
5 1 0 1 PWM, poprawna faza OCR SZCZYT SPÓD(2)
6 1 1 0 Skryty
7 1 1 1 Szybki PWM OCR SPÓD(2) SZCZYT

Bit 7 – FOC0A: Wymuś porównanie wyjścia A

Bit FOC0A jest aktywny tylko wtedy, gdy bity WGM określają tryb inny niż PWM.

Jednak w celu zapewnienia zgodności z przyszłymi urządzeniami ten bit musi być ustawiony na zero, gdy TCCR0B jest zapisywany podczas pracy w trybie PWM. Podczas zapisywania logicznej jedynki do bitu FOC0A, natychmiastowe Compare Match jest wymuszane na jednostce Waveform Generation. Wyjście OC0A jest zmieniane zgodnie z ustawieniem bitów COM0A[1:0]. Należy zauważyć, że bit FOC0A jest implementowany jako stroboskop. Dlatego to wartość obecna w bitach COM0A[1:0] określa efekt wymuszonego porównania.

Stroboskop FOC0A nie wygeneruje żadnego przerwania, ani nie wyczyści timera w trybie CTC używając OCR0A jako TOP. Bit FOC0A jest zawsze odczytywany jako zero.

Bit 6 – FOC0B: Wymuś porównanie wyjścia B

Bit FOC0B jest aktywny tylko wtedy, gdy bity WGM określają tryb inny niż PWM.

Jednak w celu zapewnienia zgodności z przyszłymi urządzeniami ten bit musi być ustawiony na zero, gdy TCCR0B jest zapisywany podczas pracy w trybie PWM. Podczas zapisywania logicznej jedynki do bitu FOC0B, natychmiastowe Compare Match jest wymuszane na jednostce Waveform Generation. Wyjście OC0B jest zmieniane zgodnie z ustawieniem bitów COM0B[1:0]. Należy zauważyć, że bit FOC0B jest implementowany jako stroboskop. Dlatego to wartość obecna w bitach COM0B[1:0] określa efekt wymuszonego porównania.

Sygnał stroboskopowy FOC0B nie wygeneruje żadnego przerwania, ani nie wyczyści licznika w trybie CTC używając OCR0B jako TOP.

Bit FOC0B zawsze jest odczytywany jako zero.

Bity 5:4 – Res: Bity zarezerwowane

Bity te są bitami zarezerwowanymi w ATtiny25/45/85 i zawsze będą odczytywane jako zero.

Bit 3 – WGM02: Tryb generowania przebiegów

Zobacz opis w „TCCR0A – Rejestr sterujący timerem/licznikiem A” na stronie 77.

Bity 2:0 – CS0[2:0]: Wybór zegara

Trzy bity wyboru zegara wybierają źródło zegara, które będzie używane przez Timer/Licznik.

Tabela 11-6. Opis bitu wyboru zegara

CS02 CS01 CS00 Opis
0 0 0 Brak źródła zegara (zatrzymany licznik/timer)
0 0 1 clkI/O/(Bez preskalowania)
0 1 0 clkI/O/8 (z preskalera)
0 1 1 clkI/O/64 (z preskalera)
1 0 0 clkI/O/256 (z preskalera)
1 0 1 clkI/O/1024 (z preskalera)
1 1 0 Zewnętrzne źródło zegara na pinie T0. Zegar na opadającym zboczu.
1 1 1 Zewnętrzne źródło zegara na pinie T0. Zegar na zboczu narastającym.

Jeśli dla Timer/Counter0 używane są zewnętrzne tryby pinów, przejścia na pinie T0 będą taktować licznik, nawet jeśli pin jest skonfigurowany jako wyjście. Ta funkcja umożliwia programowe sterowanie liczeniem.

Licznik i porównywanie jednostek

Ogólna praca Timera/Licznika 1 opisana jest w trybie asynchronicznym, natomiast praca w trybie synchronicznym wspomniana jest tylko wtedy, gdy występują różnice między tymi dwoma trybami. Rysunek 12-2 pokazuje blokowy diagram rejestru synchronizacji Timera/Licznika 1 i opóźnienia synchronizacji pomiędzy rejestrami. Należy zauważyć, że wszystkie szczegóły bramkowania zegara nie są pokazane na rysunku. Wartości rejestru Timera/Licznika 1 przechodzą przez wewnętrzne rejestry synchronizacji, które powodują opóźnienie synchronizacji wejścia, zanim wpłyną na działanie licznika. Rejestry TCCR1, GTCCR, OCR1A, OCR1B i OCR1C można odczytać zaraz po zapisaniu rejestru. Odczytane wartości są opóźnione dla rejestru Timera/Licznika 1 (TCNT1) i flag (OCF1A, OCF1B i TOV1) ze względu na synchronizację wejścia i wyjścia.

Timer/Counter1 charakteryzuje się wysoką rozdzielczością i wysoką dokładnością użytkowania przy niższych możliwościach preskalowania. Może również obsługiwać dwa dokładne, szybkie, 8-bitowe modulatory szerokości impulsu, wykorzystujące prędkości zegara do 64 MHz (lub 32 MHz w trybie niskiej prędkości). W tym trybie Timer/Counter1 i rejestry porównania wyjścia służą jako podwójne samodzielne PWM z nienakładającymi się na siebie wyjściami nieodwróconymi i odwróconymi. Zobacz strona 86 aby uzyskać szczegółowy opis tej funkcji. Podobnie, wysokie możliwości preskalowania sprawiają, że ta jednostka jest przydatna do funkcji o niższej prędkości lub funkcji dokładnego czasu z rzadkimi działaniami.

Rysunek 12-2. Schemat blokowy rejestru synchronizacji timera/licznika 1.

Timer/Licznik 1 i preskaler umożliwiają uruchomienie procesora z dowolnego źródła zegara, podczas gdy preskaler działa na szybkim zegarze PCK 64 MHz (lub 32 MHz w trybie niskiej prędkości) w trybie asynchronicznym.

Należy pamiętać, że częstotliwość zegara systemowego musi być niższa niż jedna trzecia częstotliwości PCK. Mechanizm synchronizacji asynchronicznego Timera/Licznika 1 wymaga co najmniej dwóch krawędzi PCK, gdy zegar systemowy jest wysoki. Jeśli częstotliwość zegara systemowego jest zbyt wysoka, istnieje ryzyko utraty danych lub wartości sterujących.

Następujące Rysunek 12-3 pokazuje schemat blokowy dla Timera/Licznika1.

Tabela 12-1. Wybór trybu porównania w trybie PWM

COM1x1 COM1x0 Wpływ na piny porównania wyjścia
0 0 OC1x nie jest połączony. OC1x nie jest połączony.
0 1 OC1x wyczyszczone przy porównaniu. Ustawione, gdy TCNT1 = $00. OC1x ustawione przy porównaniu. Wyczyszczone, gdy TCNT1 = $00.
1 0 OC1x wyczyszczone przy dopasowaniu porównawczym. Ustawione, gdy TCNT1 = $00. OC1x nie jest połączony.
1 1 OC1x Ustawione przy porównaniu dopasowania. Wyczyszczone, gdy TCNT1= $00. OC1x nie jest połączone.

Charakterystyka ADC

Tabela 21-8. Charakterystyka przetwornika ADC, kanały jednostronne. TA = -40°C do +85°C

Symbol Parametr Stan Min Typ Maksymalnie Jednostki
Rezolucja 10 Bity
Absolutna dokładność (w tym INL, DNL oraz błędy kwantyzacji, wzmocnienia i przesunięcia) VREF = 4 V, VCC = 4 V,

Zegar ADC = 200 kHz

2 LSB
VREF = 4 V, VCC = 4 V,

Zegar ADC = 1 MHz

3 LSB
VREF = 4 V, VCC = 4 V,

Zegar ADC = 200 kHz

Tryb redukcji szumów

1.5 LSB
VREF = 4 V, VCC = 4 V,

Zegar ADC = 1 MHz

Tryb redukcji szumów

2.5 LSB
Nieliniowość całkowa (INL) (Dokładność po kalibracji przesunięcia i wzmocnienia) VREF = 4 V, VCC = 4 V,

Zegar ADC = 200 kHz

1 LSB
Nieliniowość różniczkowa (DNL) VREF = 4 V, VCC = 4 V,

Zegar ADC = 200 kHz

0.5 LSB
Uzyskaj błąd VREF = 4 V, VCC = 4 V,

Zegar ADC = 200 kHz

2.5 LSB
Błąd przesunięcia VREF = 4 V, VCC = 4 V,

Zegar ADC = 200 kHz

1.5 LSB
Czas konwersji Konwersja biegu swobodnego 14 280 μs
Częstotliwość zegara 50 1000 kHz
Numer VIN Wejście Voltage GND VREF V
Przepustowość wejściowa 38.4 kHz
RZECZ Tom odniesień zewnętrznychtage 2.0 VCC V
WINT Objętość wewnętrznatage Odniesienie 1.0 1.1 1.2 V
Wewnętrzne odniesienie 2.56 V. (1) Napięcie > 3.0 V 2.3 2.56 2.8 V
REF 32
DESZCZ Rezystancja wejścia analogowego 100
Wyjście ADC 0 1023 LSB

Uwaga: 1. Podane wartości mają charakter wyłącznie orientacyjny.

Tabela 21-9. Charakterystyki przetwornika ADC, kanały różnicowe (tryb unipolarny). TA = -40°C do +85°C

Symbol Parametr Stan Min Typ Maksymalnie Jednostki
Rezolucja Zysk = 1x 10 Bity
Zysk = 20x 10 Bity
Absolutna dokładność (w tym INL, DNL i

Błędy kwantyzacji, wzmocnienia i offsetu)

Zysk = 1x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

10.0 LSB
Zysk = 20x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

20.0 LSB
Nieliniowość całkowa (INL) (dokładność po kalibracji przesunięcia i wzmocnienia) Zysk = 1x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

4.0 LSB
Zysk = 20x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

10.0 LSB
Uzyskaj błąd Zysk = 1x 10.0 LSB
Zysk = 20x 15.0 LSB
Błąd przesunięcia Zysk = 1x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

3.0 LSB
Zysk = 20x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

4.0 LSB
Czas konwersji Konwersja biegu swobodnego 70 280 μs
Częstotliwość zegara 50 200 kHz
Numer VIN Wejście Voltage GND VCC V
Różnica Objętość różnicowa wejściowatage VREF/Wzmocnienie V
Przepustowość wejściowa 4 kHz
RZECZ Tom odniesień zewnętrznychtage 2.0 VCC – 1.0 V
WINT Objętość wewnętrznatage Odniesienie 1.0 1.1 1.2 V
Wewnętrzne odniesienie 2.56 V. (1) Napięcie > 3.0 V 2.3 2.56 2.8 V
REF Rezystancja wejściowa odniesienia 32
DESZCZ Rezystancja wejścia analogowego 100
Wyjście konwersji ADC 0 1023 LSB

Uwaga: Podane wartości mają jedynie charakter orientacyjny.

Tabela 21-10. Charakterystyki ADC, kanały różnicowe (tryb bipolarny). TA = -40°C do +85°C

Symbol Parametr Stan Min Typ Maksymalnie Jednostki
Rezolucja Zysk = 1x 10 Bity
Zysk = 20x 10 Bity
Absolutna dokładność (w tym INL, DNL i

Błędy kwantyzacji, wzmocnienia i offsetu)

Zysk = 1x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

8.0 LSB
Zysk = 20x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

8.0 LSB
Nieliniowość całkowa (INL) (dokładność po kalibracji przesunięcia i wzmocnienia) Zysk = 1x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

4.0 LSB
Zysk = 20x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

5.0 LSB
Uzyskaj błąd Zysk = 1x 4.0 LSB
Zysk = 20x 5.0 LSB
Błąd przesunięcia Zysk = 1x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

3.0 LSB
Zysk = 20x

VREF = 4 V, VCC = 5 V

Zegar ADC = 50 – 200 kHz

4.0 LSB
Czas konwersji Konwersja biegu swobodnego 70 280 μs
Częstotliwość zegara 50 200 kHz
Numer VIN Wejście Voltage GND VCC V
Różnica Objętość różnicowa wejściowatage VREF/Wzmocnienie V
Przepustowość wejściowa 4 kHz
RZECZ Tom odniesień zewnętrznychtage 2.0 VCC – 1.0 V
WINT Objętość wewnętrznatage Odniesienie 1.0 1.1 1.2 V
Wewnętrzne odniesienie 2.56 V. (1) Napięcie > 3.0 V 2.3 2.56 2.8 V
REF Rezystancja wejściowa odniesienia 32
DESZCZ Rezystancja wejścia analogowego 100
Wyjście konwersji ADC -512 511 LSB

Podsumowanie zestawu instrukcji

Mnemonika Operandy Opis Działanie Flagi #Zegary
INSTRUKCJE Arytmetyczne i Logiczne
DODAĆ Rd, Rr Dodaj dwa rejestry Rząd ← Rząd + Rząd Z, C, N, V, H 1
ADC Rd, Rr Dodaj za pomocą Carry dwa rejestry Rd ← Rd + Rr + C Z, C, N, V, H 1
ADIW Rdl,K Dodaj natychmiast do Worda Rdh:Rdl ← Rdh:Rdl + K Z, C, N, V, S 2
ZASTĄPIĆ Rd, Rr Odejmij dwa rejestry Droga ← Droga – Droga Z, C, N, V, H 1
SUBI Rd, K Odejmij stałą od rejestru Droga ← Droga – K Z, C, N, V, H 1
SBC Rd, Rr Odejmij za pomocą przeniesienia dwóch rejestrów Rząd ← Rząd – Rząd – C Z, C, N, V, H 1
SBCI Rd, K Odejmij ze stałą przenoszenia od Reg. Rząd ← Rząd – K – C Z, C, N, V, H 1
SBIW Rdl,K Odejmij natychmiast od Worda Rdh:Rdl ← Rdh:Rdl – K Z, C, N, V, S 2
I Rd, Rr Rejestry logiczne AND Rząd ← Rząd ∙ Rząd Z, N, V 1
ANDI Rd, K Rejestr logiczny AND i stała Rząd ← Rząd ∙ K Z, N, V 1
OR Rd, Rr Rejestry logiczne OR Rd ← Rd v Rr Z, N, V 1
ORI Rd, K Logiczny rejestr OR i stała Rd ← Rd v K Z, N, V 1
EOR Rd, Rr Ekskluzywne rejestry OR Droga ← Droga ⊕ Droga Z, N, V 1
KOM Rd Uzupełnienie Rd ← 0xFF − Rd Z, C, N, V 1
NEG Rd Uzupełnienie do dwóch Rd ← 0x00 − Rd Z, C, N, V, H 1
SBR Rd, K Ustaw bit(y) w rejestrze Rd ← Rd v K Z, N, V 1
CBR Rd, K Wyczyść bity w rejestrze Rd ← Rd ∙ (0xFF – K) Z, N, V 1
INNE Rd Przyrost Droga ← Droga + 1 Z, N, V 1
GRUDZIEŃ Rd Zmniejszenie Rząd ← Rząd − 1 Z, N, V 1
TST Rd Sprawdź zero lub minus Droga ← Droga ∙ Droga Z, N, V 1
CLR Rd Wyczyść rejestrację Droga ← Droga ⊕ Droga Z, N, V 1
SER Rd Ustaw rejestrację Rd ← 0xFF Nic 1
INSTRUKCJE ODDZIAŁU
RJMP k Skok względny K ← K + 1 Nic 2
IJMP Pośredni skok do (Z) Komputer ← Z Nic 2
RCALL k Względne wywołanie podprogramu K ← K + 1 Nic 3
ZADZWOŃ Pośrednie połączenie z (Z) Komputer ← Z Nic 3
GNIĆ Powrót podprogramu Komputer ← STOS Nic 4
SIECI Przerwanie powrotu Komputer ← STOS I 4
CPSE Rd, Rr Porównaj, pomiń, jeśli są równe jeśli (Rd = Rr) PC ← PC + 2 lub 3 Nic 1/2/3
CP Rd, Rr Porównywać Droga − Droga Z, N, V, C, H 1
CPC Rd, Rr Porównaj z Carry Rd − Rr − C Z, N, V, C, H 1
Wskaźnik CPI Rd, K Porównaj Zarejestruj się z Natychmiastowym Rząd − K Z, N, V, C, H 1
SBRC Rr, ur Pomiń, jeśli bit w rejestrze został wyczyszczony jeśli (Rr(b)=0) PC ← PC + 2 lub 3 Nic 1/2/3
SBR Rr, ur Pomiń, jeśli bit w rejestrze jest ustawiony jeśli (Rr(b)=1) PC ← PC + 2 lub 3 Nic 1/2/3
SBI P., ur Pomiń, jeśli bit w rejestrze we/wy został wyczyszczony jeśli (P(b)=0) PC ← PC + 2 lub 3 Nic 1/2/3
SBI P., ur Pomiń, jeśli bit w rejestrze we/wy jest ustawiony jeśli (P(b)=1) PC ← PC + 2 lub 3 Nic 1/2/3
BRBS s, k Oddział, jeśli ustawiono flagę stanu jeśli (SREG(s) = 1) wtedy PC←PC+k + 1 Nic 1/2
BRBC s, k Oddział, jeśli flaga stanu została wyczyszczona jeśli (SREG(s) = 0) wtedy PC←PC+k + 1 Nic 1/2
BREK k Gałąź jeśli równe jeśli (Z = 1) wtedy PC ← PC + k + 1 Nic 1/2
BRNE k Gałąź, jeśli nie jest równa jeśli (Z = 0) wtedy PC ← PC + k + 1 Nic 1/2
BRCS k Oddział, jeśli zestaw do noszenia jeśli (C = 1) wtedy PC ← PC + k + 1 Nic 1/2
BRCC k Oddział, jeśli opcja przeniesienia została usunięta jeśli (C = 0) wtedy PC ← PC + k + 1 Nic 1/2
BRSH k Oddział, jeśli taki sam lub wyższy jeśli (C = 0) wtedy PC ← PC + k + 1 Nic 1/2
BRLO k Oddział, jeśli niższy jeśli (C = 1) wtedy PC ← PC + k + 1 Nic 1/2
BRMI k Oddział, jeśli Minus jeśli (N = 1) wtedy PC ← PC + k + 1 Nic 1/2
BRPL k Oddział w Plusie jeśli (N = 0) wtedy PC ← PC + k + 1 Nic 1/2
BRGE k Oddział, jeśli jest większy lub równy, podpisany jeśli (N ⊕ V= 0) wtedy PC ← PC + k + 1 Nic 1/2
BRLT k Oddział, jeśli jest mniejszy niż zero, podpisany jeśli (N ⊕ V= 1) wtedy PC ← PC + k + 1 Nic 1/2
BRHS k Oddział, jeśli ustawiona jest flaga Half Carry jeśli (H = 1) wtedy PC ← PC + k + 1 Nic 1/2
BRHC k Oddział, jeśli flaga Half Carry została wyczyszczona jeśli (H = 0) wtedy PC ← PC + k + 1 Nic 1/2
BRTS k Oddział, jeśli ustawiona jest flaga T jeśli (T = 1) wtedy PC ← PC + k + 1 Nic 1/2
BRTC k Oddział, jeśli flaga T została wyczyszczona jeśli (T = 0) wtedy PC ← PC + k + 1 Nic 1/2
BRVS k Oddział, jeśli ustawiona jest flaga przepełnienia jeśli (V = 1) wtedy PC ← PC + k + 1 Nic 1/2
BRVC k Oddział, jeśli flaga przepełnienia jest wyczyszczona jeśli (V = 0) wtedy PC ← PC + k + 1 Nic 1/2
SER BRIE k Rozgałęzienie, jeśli przerwanie jest włączone jeśli (I = 1) wtedy PC ← PC + k + 1 Nic 1/2
BRYT k Rozgałęzienie, jeśli przerwanie jest wyłączone jeśli (I = 0) wtedy PC ← PC + k + 1 Nic 1/2
INSTRUKCJE BITÓW I BIT-TESTÓW
SBI P., ur Ustaw bit w rejestrze we/wy I/O(P,b) ← 1 Nic 2
CBI P., ur Wyczyść bit w rejestrze we/wy I/O(P,b) ← 0 Nic 2
LSL Rd Logiczne przesunięcie w lewo Rd(n+1) ← Rd(n), Rd(0) ← 0 Z, C, N, V 1
LSR Rd Logiczne przesunięcie w prawo Rd(n) ← Rd(n+1), Rd(7) ← 0 Z, C, N, V 1
ROL Rd Obróć w lewo podczas przenoszenia Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) Z, C, N, V 1
ROR Rd Obróć w prawo podczas przenoszenia Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) Z, C, N, V 1
ASR Rd Przesunięcie arytmetyczne w prawo Rd(n) ← Rd(n+1), n=0..6 Z, C, N, V 1
Mnemonika Operandy Opis Działanie Flagi #Zegary
ZAMIENIAĆ Rd Zamień Nibbles Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) Nic 1
BSET s Zestaw flag SREG(i) ← 1 SREG(-y) 1
BCLR s Flaga wyczyszczona SREG(i) ← 0 SREG(-y) 1
BST Rr, ur Przechowywanie bitów z rejestru do T T ← Rr(b) T 1
BLD Rd, ur Ładowanie bitów z T do rejestru Rd(b) ← T Nic 1
SEKCJA Ustaw Przenoszenie ← 1 C 1
CLC Wyczyść opcję Przenieś ← 0 C 1
SEN Ustaw flagę negatywną N ← 1 N 1
KN Wyczyść flagę negatywną N ← 0 N 1
Specjalna Strefa Ekonomiczna Ustaw flagę zerową Z← 1 Z 1
CLZ Wyczyść flagę zerową Z← 0 Z 1
SEI Globalne włączanie przerwań Ja ← 1 I 1
Interfejs wiersza poleceń Globalne wyłączenie przerwań Ja ← 0 I 1
SES Ustaw podpisaną flagę testową S ← 1 S 1
KLS Wyczyść podpisaną flagę testową S ← 0 S 1
SEV Ustaw przepełnienie uzupełnienia do dwóch. W ← 1 V 1
CLV Wyczyść przepełnienie dopełniacza dwójkowego W ← 0 V 1
USTAWIĆ Ustaw T w SREG W ← 1 T 1
CLT Wyczyść T w SREG W ← 0 T 1
SEH Ustaw flagę Half Carry w SREG O ← 1 H 1
CLH Wyczyść flagę Half Carry w SREG O ← 0 H 1
INSTRUKCJA TRANSFERU DANYCH
Ruch Rd, Rr Przechodzenie między rejestrami Droga ← Droga Nic 1
MOVW Rd, Rr Kopiuj Rejestr Word Rd+1:Rd ← Rr+1:Rr Nic 1
LDI Rd, K Załaduj natychmiast Droga ← K Nic 1
LD Ulica, X Załaduj pośrednio Droga ← (X) Nic 2
LD Droga, X+ Załaduj pośrednio i post-inc. Rząd ← (X), X ← X + 1 Nic 2
LD Ulica, – X Załaduj pośrednio i przeddegradacyjnie. X ← X – 1, Runda ← (X) Nic 2
LD Ulica, Y Załaduj pośrednio Droga ← (Y) Nic 2
LD Ulica, Y+ Załaduj pośrednio i post-inc. Rd ← (Y), Y ← Y + 1 Nic 2
LD Ulica, – Y Załaduj pośrednio i przeddegradacyjnie. Y ← Y – 1, Rd ← (Y) Nic 2
LDD Rd,Y+q Obciążenie pośrednie z przemieszczeniem Rd ← (Y + q) Nic 2
LD Ulica, Z Załaduj pośrednio Droga ← (Z) Nic 2
LD Ulica, Z+ Załaduj pośrednio i post-inc. Rząd ← (Z), Z ← Z+1 Nic 2
LD Ulica, -Z Załaduj pośrednio i przeddegradacyjnie. Z ← Z – 1, Runda ← (Z) Nic 2
LDD Rd, Z+q Obciążenie pośrednie z przemieszczeniem Rd ← (Z + q) Nic 2
Święci w dniach ostatnich Ulica, k Ładowanie bezpośrednio z pamięci SRAM Droga ← (k) Nic 2
ST X, Rr Przechowuj pośrednio (X) ← Rr Nic 2
ST X+, Rr Sklep pośredni i post-inc. (X) ← Rr, X ← X + 1 Nic 2
ST – X, Rr Przechowuj pośrednio i przeddegradacyjnie. X ← X – 1, (X) ← Rr Nic 2
ST Y, Rr Przechowuj pośrednio (Y) ← Rr Nic 2
ST Y+, Rr Sklep pośredni i post-inc. (Y) ← Rr, Y ← Y + 1 Nic 2
ST – Y, Rr Przechowuj pośrednio i przeddegradacyjnie. Y ← Y – 1, (Y) ← Rr Nic 2
Choroby przenoszone drogą płciową Y+q,Rr Przechowuj pośrednio z przemieszczeniem (Y + q) ← Rr Nic 2
ST Z, Rr Przechowuj pośrednio (Z) ← Rr Nic 2
ST Z+, Rr Sklep pośredni i post-inc. (Z) ← Rr, Z ← Z + 1 Nic 2
ST -Z, Rr Przechowuj pośrednio i przeddegradacyjnie. Z ← Z – 1, (Z) ← Rr Nic 2
Choroby przenoszone drogą płciową Z+q,Rr Przechowuj pośrednio z przemieszczeniem (Z + q) ← Rr Nic 2
STS k, Rr Przechowuj bezpośrednio w pamięci SRAM (k) ← Rr Nic 2
LPM Załaduj pamięć programu R0 ← (Z) Nic 3
LPM Ulica, Z Załaduj pamięć programu Droga ← (Z) Nic 3
LPM Ulica, Z+ Załaduj pamięć programu i Post-Inc Rząd ← (Z), Z ← Z+1 Nic 3
SPM Przechowuj pamięć programu (z) ← R1:R0 Nic
IN Rd, P W porcie Droga ← P Nic 1
NA ZEWNĄTRZ P., R Port wyjściowy P ← Rr Nic 1
NACISKAĆ Rr Wciśnij Rejestr na Stos STOSUJ ← Rr Nic 2
MUZYKA POP Rd Rejestr Pop ze Stack Rd ← STOS Nic 2
INSTRUKCJE STEROWANIA MCU
NIE Brak operacji Nic 1
SPAĆ Spać (patrz szczegółowy opis funkcji uśpienia) Nic 1
WDR Resetowanie Watchdoga (patrz szczegółowy opis WDR/Timer) Nic 1
PRZERWA Przerwa
Szybkość (MHz) (1) Objętość dostawtagmi (V) Zakres temperatur Pakiet (2) Kod zamówienia (3)
10 1.8 – 5.5 Przemysłowy

(-40°C do +85°C) (4)

8P3 ATtiny45V-10PU
8S2 ATtiny45V-10SU ATtiny45V-10SUR ATtiny45V-10SH ATtiny45V-10SHR
8X ATtiny45V-10XU ATtiny45V-10XUR
20M1 ATtiny45V-10MU ATtiny45V-10MUR
20 2.7 – 5.5 Przemysłowy

(-40°C do +85°C) (4)

8P3 ATtiny45-20PU
8S2 ATtiny45-20SU ATtiny45-20SUR

ATtiny45-20SH ATtiny45-20SHR

8X ATtiny45-20XU ATtiny45-20XUR
20M1 ATtiny45-20MU ATtiny45-20MUR

Uwagi: 1. W przypadku prędkości w stosunku do objętości zasilaniatage, zobacz sekcję 21.3 „Prędkość” na stronie 163.

Wszystkie opakowania nie zawierają ołowiu ani halogenków, są w pełni ekologiczne i spełniają wymogi europejskiej dyrektywy w sprawie ograniczenia stosowania substancji niebezpiecznych (RoHS).

Wskaźniki kodu

H: Wykończenie ołowiem NiPdAu

U: matowa puszka

R: taśma i szpula

Te urządzenia mogą być również dostarczane w formie płytek. Aby uzyskać szczegółowe informacje dotyczące zamawiania i minimalnych ilości, skontaktuj się z lokalnym biurem sprzedaży Atmel.

Errata

Błąd ATtiny25

List rewizji w tej sekcji odnosi się do rewizji urządzenia ATtiny25.

Rewizja D – F

Brak znanej erraty.

Rewizja B – C

Odczyt pamięci EEPROM może się nie powieść przy niskim napięciu zasilaniatage/niska częstotliwość zegara

Odczyt pamięci EEPROM może się nie powieść przy niskim napięciu zasilaniatage/niska częstotliwość zegara

Próba odczytu pamięci EEPROM przy niskich częstotliwościach zegara i/lub niskim napięciu zasilaniatage może spowodować otrzymanie nieprawidłowych danych.

Rozwiązanie problemu/obejście

Nie należy używać pamięci EEPROM, gdy częstotliwość zegara jest niższa niż 1 MHz i gdy napięcie zasilania jest zbyt wysokie.tage jest poniżej 2V. Jeśli częstotliwość robocza nie może być podniesiona powyżej 1MHz, wówczas należy podać objętośćtage powinno być większe niż 2V. Podobnie, jeśli wolumen zasilaniatage nie może być wyższe niż 2 V, wówczas częstotliwość robocza powinna być większa niż 1 MHz.

Wiadomo, że ta cecha jest zależna od temperatury, ale nie została scharakteryzowana. Wytyczne podano wyłącznie dla temperatury pokojowej.

Wersja A

Nie sampdoprowadziło.

Błąd ATtiny45

List rewizji w tej sekcji odnosi się do rewizji urządzenia ATtiny45.

Rewizja F – G

Brak znanej erraty

Rewizja D – E

Odczyt pamięci EEPROM może się nie powieść przy niskim napięciu zasilaniatage/niska częstotliwość zegara

Odczyt pamięci EEPROM może się nie powieść przy niskim napięciu zasilaniatage/niska częstotliwość zegara

Próba odczytu pamięci EEPROM przy niskich częstotliwościach zegara i/lub niskim napięciu zasilaniatage może spowodować otrzymanie nieprawidłowych danych.

Rozwiązanie problemu/obejście

Nie należy używać pamięci EEPROM, gdy częstotliwość zegara jest niższa niż 1 MHz i gdy napięcie zasilania jest zbyt wysokie.tage jest poniżej 2V. Jeśli częstotliwość robocza nie może być podniesiona powyżej 1MHz, wówczas należy podać objętośćtage powinno być większe niż 2V. Podobnie, jeśli wolumen zasilaniatage nie może być wyższe niż 2 V, wówczas częstotliwość robocza powinna być większa niż 1 MHz.

Wiadomo, że ta cecha jest zależna od temperatury, ale nie została scharakteryzowana. Wytyczne podano tylko dla temperatury pokojowej.

Rewizja B – C

PLL nie blokuje się

Odczyt pamięci EEPROM z kodu aplikacji nie działa w trybie Lock Bit 3

Odczyt pamięci EEPROM może się nie powieść przy niskim napięciu zasilaniatage/niska częstotliwość zegara

Generowanie wyjścia PWM licznika czasu 1 na OC1B-XOC1B nie działa prawidłowo

PLL nie blokuje się

Przy częstotliwościach poniżej 6.0 MHz PLL nie zostanie zablokowany

Naprawa problemu / obejście problemu

Podczas używania PLL należy ustawić częstotliwość na 6.0 MHz lub wyższą.

Odczyt pamięci EEPROM z kodu aplikacji nie działa w trybie Lock Bit 3

Gdy bity blokady pamięci LB2 i LB1 są zaprogramowane w trybie 3, odczyt pamięci EEPROM nie działa z poziomu kodu aplikacji.

Naprawa/obejście problemu

Nie należy ustawiać trybu ochrony Lock Bit Protection Mode 3, jeśli kod aplikacji musi odczytywać dane z pamięci EEPROM.

Odczyt pamięci EEPROM może się nie powieść przy niskim napięciu zasilaniatage/niska częstotliwość zegara

Próba odczytu pamięci EEPROM przy niskich częstotliwościach zegara i/lub niskim napięciu zasilaniatage może spowodować otrzymanie nieprawidłowych danych.

Rozwiązanie problemu/obejście

Nie należy używać pamięci EEPROM, gdy częstotliwość zegara jest niższa niż 1 MHz i gdy napięcie zasilania jest zbyt wysokie.tage jest poniżej 2V. Jeśli częstotliwość robocza nie może być podniesiona powyżej 1MHz, wówczas należy podać objętośćtage powinno być większe niż 2V. Podobnie, jeśli wolumen zasilaniatage nie może być wyższe niż 2 V, wówczas częstotliwość robocza powinna być większa niż 1 MHz.

Wiadomo, że ta cecha jest zależna od temperatury, ale nie została scharakteryzowana. Wytyczne podano wyłącznie dla temperatury pokojowej.

Generowanie wyjścia PWM licznika czasu 1 na OC1B – XOC1B nie działa prawidłowo

Wyjście PWM licznika czasu 1 OC1B-XOC1B nie działa prawidłowo. Tylko w przypadku, gdy bity sterujące COM1B1 i COM1B0 są w tym samym trybie co COM1A1 i COM1A0, wyjście OC1B-XOC1B działa prawidłowo.

Naprawa/obejście problemu

Jedynym obejściem jest użycie tego samego ustawienia sterowania na bitach sterujących COM1A[1:0] i COM1B[1:0], patrz tabela 14-4 w arkuszu danych. Problem został rozwiązany w Tiny45 rev D.

Wersja A

Zbyt wysokie zużycie energii podczas wyłączania

DebugWIRE traci komunikację podczas pojedynczego wejścia w przerwania

PLL nie blokuje się

Odczyt pamięci EEPROM z kodu aplikacji nie działa w trybie Lock Bit 3

Odczyt pamięci EEPROM może się nie powieść przy niskim napięciu zasilaniatage/niska częstotliwość zegara

Zbyt wysokie zużycie energii podczas wyłączania

Trzy sytuacje doprowadzą do zbyt wysokiego zużycia energii podczas wyłączania. Są to:

Zegar zewnętrzny wybierany jest za pomocą bezpieczników, ale PORT I/O jest nadal włączony jako wyjście.

Przed wyłączeniem zasilania odczytywana jest pamięć EEPROM.

VCC wynosi 4.5 V lub więcej.

Zastrzeżenie: Informacje zawarte w tym dokumencie są udostępniane w związku z produktami Atmel. Niniejszy dokument lub sprzedaż produktów Atmel nie udziela żadnej licencji, wyraźnej lub dorozumianej, na mocy estoppelu lub w inny sposób, na jakiekolwiek prawa własności intelektualnej. Z WYJĄTKIEM USTALEŃ WARUNKÓW SPRZEDAŻY ATMEL ZNAJDUJĄCYCH SIĘ NA STRONIE ATMEL WEBFIRMA ATMEL NIE PRZYJMUJE ŻADNEJ ODPOWIEDZIALNOŚCI I NIE UDZIELA ŻADNEJ WYRAŹNEJ, DOROZUMIANEJ LUB USTAWOWEJ GWARANCJI DOTYCZĄCEJ JEJ PRODUKTÓW, W TYM MIĘDZY INNYMI DOROZUMIANEJ GWARANCJI PRZYDATNOŚCI HANDLOWEJ, PRZYDATNOŚCI DO OKREŚLONEGO CELU LUB NIENARUSZALNOŚCI PRAW. W ŻADNYM WYPADKU ATMEL NIE PONOSI ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK SZKODY BEZPOŚREDNIE, POŚREDNIE, NASTĘPCZE, KARNE, SZCZEGÓLNE LUB PRZYPADKOWE (W TYM MIĘDZY INNYMI SZKODY Z TYTUŁU STRAT I ZYSKÓW, PRZERWY W BIZNESIE LUB UTRATĘ INFORMACJI) WYNIKAJĄCE Z UŻYTKOWANIA LUB NIEMOŻNOŚCI UŻYTKOWANIA NINIEJSZEGO DOKUMENTU, NAWET JEŚLI FIRMA ATMEL ZOSTAŁA POWIADOMANA O MOŻLIWOŚCI WYSTĄPIENIA TAKICH SZKÓD.

Firma Atmel nie składa żadnych oświadczeń ani nie udziela gwarancji w odniesieniu do dokładności lub kompletności treści niniejszego dokumentu i zastrzega sobie prawo do wprowadzania zmian w specyfikacjach i opisach produktów w dowolnym czasie i bez powiadomienia. Atmel nie zobowiązuje się do aktualizowania informacji zawartych w niniejszym dokumencie. O ile wyraźnie nie określono inaczej, produkty firmy Atmel nie nadają się i nie powinny być używane w zastosowaniach motoryzacyjnych. Produkty firmy Atmel nie są przeznaczone, autoryzowane ani objęte gwarancją do użytku jako komponenty w zastosowaniach mających na celu podtrzymywanie lub podtrzymywanie życia.

Odniesienia

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *