8-bitowy mikrokontroler AVR firmy Atmel z programowalną w systemie pamięcią flash o pojemności 2/4/8 kilobajtów
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
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
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
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.
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.
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.
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
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
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
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 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 I „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
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.
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.
Ź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
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 I „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 I „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ę
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
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.
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
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
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)
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 I 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 | ![]() |
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 | kΩ | ||||
DESZCZ | Rezystancja wejścia analogowego | 100 | MΩ | |||
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 | kΩ | |||
DESZCZ | Rezystancja wejścia analogowego | 100 | MΩ | |||
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 | kΩ | |||
DESZCZ | Rezystancja wejścia analogowego | 100 | MΩ | |||
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.