Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2022 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Mikrokontrolery

ATtiny15

Przegląd architektury

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Zestaw szybkich rejestrów składa się z 32 8-bitowych rejestrów roboczych ogólnego przeznaczenia z czasem dostępu równym jednemu cyklowi zegara. Oznacza to, iż podczas jednego cyklu zegarowego  wykonywana jest jedna operacja jednostki arytmetyczno-logicznej (ang. Arithmetic Logic Unit, ALU). Na początku cyklu z zestawu rejestrów wyprowadzana jest zawartość dwóch rejestrów, następnie w środku cyklu wykonywana jest operacja na tej zawartości, a pod koniec cyklu wynik zostaje z powrotem wpisany do zestawu rejestrów – wszystko odbywa się w jednym cyklu zegara.

Dwa z tych 32 rejestrów mogą zostać użyte jako 16-bitowy wskaźnik przy pośrednim dostępie do pamięci. Wskaźnik ten nazywany jest wskaźnikiem Z (ang. Z-pointer) i może adresować rejestry w zestawie, rejestry we/wy oraz pamięć FLASH programu.

Architektura RISC AVR mikrokontrolera ATtiny15

obrazek

 

Jednostka arytmetyczno-logiczna (ALU) wykonuje operacje arytmetyczne i logiczne pomiędzy rejestrami lub pomiędzy stałą i rejestrem. Operacje na pojedynczym rejestrze również są wykonywane w ALU. Powyższy rysunek przedstawia schematycznie architekturę AVR RISC mikrokontrolera ATtiny15. AVR używa koncepcji architektury harwardzkiej z rozdzielonymi pamięciami i magistralami dla pamięci programu i danych. Dostęp do pamięci programu odbywa się z dwuetapowym nakładkowaniem (ang. two-stage pipeline). Gdy wykonywana jest jedna instrukcja, następna zostaje wstępnie pobrana z pamięci programu. Koncepcja ta pozwala wykonywać instrukcje w każdym cyklu zegara. Pamięć programu jest pamięcią FLASH programowalną w systemie (ang. In-System Programmable FLASH memory).

Cała przestrzeń adresowa jest bezpośrednio dostępna dla skoku względnego i wywołania względnego. Wszystkie instrukcje AVR posiadają pojedynczy 16-bitowy format, co oznacz, iż każda 16-bitowa komórka pamięci programu zawiera pojedynczą 16-bitową instrukcję.

Podczas przerwań i wywołań podprogramów adres powrotny w liczniku programu (ang. Program Counter, PC) jest umieszczany na stosie (ang. Stack). Stos jest stosem sprzętowym o pojemności 3 adresów, który został przeznaczony dla podprogramów i przerwań. Taka pojemność stosu ogranicza zagnieżdżanie wywołań podprogramów, lecz musisz pamiętać, iż ATtiny15 przeznaczony jest do prostych zastosowań, które nie wymagają skomplikowanych programów.

Przestrzeń adresowa we/wy zawiera 64 adresy dla funkcji peryferyjnych mikroprocesora takich jak rejestry sterujące, timery/liczniki oraz inne funkcje we/wy. Wszystkie przestrzenie adresowe w architekturze AVR są liniowymi i regularnymi odwzorowaniami pamięciowymi.

Elastyczny moduł przerwań posiada swoje rejestry sterujące w przestrzeni we/wy z dodatkowym bitem uaktywniającym globalnie przerwania (ang. Global Interrupt Enable bit) w rejestrze stanu (ang. Status Register). Wszystkie różne przerwania mają swoje oddzielne wektory przerwań (ang. Interrupt Vectors) w tablicy wektorów przerwań znajdującej się na początku pamięci programu. Różne przerwania posiadają priorytety zgodnie z pozycją ich wektora przerwań. Im niższy adres wektora, tym wyższy priorytet.

Wektor przerwania jest adresem w pamięci programu, pod który następuje skok w momencie rozpoczęcia obsługi danego przerwania. Pod tym adresem znajduje się najczęściej instrukcja skoku względnego do procedury obsługi przerwania. Dzięki temu rozwiązaniu procedura ta może być umieszczana w dowolnie wybranym miejscu pamięci programu.

Zestaw rejestrów ogólnego przeznaczenia

Zestaw rejestrów ogólnego przeznaczenia w ATtiny15

7 0
R0
R1
R2
...
...
R28
R29
  R30 (dolny bajt rejestru Z)  
R31 (górny bajt rejestru Z)

Wszystkie instrukcje operujące na rejestrach w zestawie instrukcji posiadają bezpośredni i jedno-cyklowy dostęp do wszystkich rejestrów. Jedynym wyjątkiem jest pięć instrukcji arytmetycznych i logicznych SBCI, SUBI, CPI, ANDI i ORI pomiędzy stałą a rejestrem oraz instrukcja LDI lądująca bezpośrednie dane stałe. Instrukcje te operują na drugiej połowie rejestrów w zestawie – R16..R31. Ogólne instrukcje SBC, SUB, CP, AND, OR oraz wszystkie pozostałe operacje pomiędzy dwoma rejestrami lub na pojedynczym rejestrze mają dostęp do wszystkich rejestrów w całym zestawie.

Rejestry 30 i 31 tworzą 16-bitowy wskaźnik (wskaźnik Z), który jest wykorzystywany do pośredniego dostępu do pamięci FLASH oraz do zestawu rejestrów. Gdy wykonywany jest dostęp do zestawu rejestrów, zawartość R31 (górny bajt wskaźnika Z) jest ignorowana przez mikroprocesor.

Na początek:  podrozdziału   strony 

Jednostka arytmetyczno/logiczna

Wysoko wydajna jednostka arytmetyczno-logiczna AVR (ang. arithmetic logic unit, ALU) pracuje z bezpośrednim połączeniem z 16 roboczymi rejestrami ogólnego przeznaczenia. W ciągu pojedynczego cyklu zegarowego wykonywane są operacje arytmetyczne pomiędzy dowolnymi dwoma rejestrami ogólnego przeznaczenia lub pomiędzy rejestrem a wartością bezpośrednią. Operacje wykonywane przez JAL dzielą się na trzy główne kategorie – arytmetyczne, logiczne i bitowe. Niektóre implementacje tej architektury udostępniają również obsługę mnożenia liczb całkowitych ze znakiem i bez oraz liczb ułamkowych. Zobacz do rozdziałów ”Instrukcje AVR" oraz  “Zestaw instrukcji”, gdzie znajdziesz więcej szczegółów.
Na początek:  podrozdziału   strony 

Pamięć FLASH programu

Mikrokontroler ATtiny15L zawiera 1KB wbudowanej, programowalnej w systemie pamięci FLASH do przechowywania programu. Ponieważ wszystkie instrukcje są pojedynczymi słowami 16-bitowymi, pamięć FLASH została zorganizowana w 512 słów 16-bitowych. Pamięć ta wytrzymuje co najmniej 1000 cykli kasowania/zapisu.

Licznik programu w ATtiny15 ma długość 9 bitów, co pozwala mu zaadresować 512 słów pamięci programu we FLASH.

Szczegółowy opis pamięci FLASH znajdziesz w rozdziale o jej programowaniu.

Na początek:  podrozdziału   strony 

Tryby adresowania programu i danych

Mikrokontroler ATtiny15L RISC AVR wspiera potężne i efektywne tryby adresowania. W tym podrozdziale opisano różne tryby adresowania obsługiwane w ATtiny15L. Na obrazkach OP oznacza część operacyjną kodu słowa instrukcji. W celu uproszczenia nie wszystkie rysunki pokazują dokładne położenie bitów adresowych.

Więcej na ten temat znajdziesz w rozdziale "Instrukcje AVR".

Bezpośrednie adresowanie pojedynczego rejestru (ang. Register Direct, Single Register Rd) :

obrazek

Argument instrukcji zawarty jest w rejestrze d (Rd).

Pośrednie adresowanie rejestru (ang. Register Indirect)

obrazek

Dostęp następuje do rejestru wskazywanego przez dolny bajt rejestru Z (R30). Zawartość górnego bajtu (R31) jest ignorowana.

Bezpośrednie adresowanie dwóch rejestrów (ang. Register Direct, Two Registers Rd and Rr)

obrazek

Argumenty instrukcji znajdują się w rejestrach r (Rr) i d (Rd). Wynik jest zapisywany w rejestrze d (Rd).

Bezpośrednie adresowanie we/wy (ang. I/O Direct)

obrazek

Adres argumentu zawarty jest w 6 bitach słowa instrukcji. Pole Rr/Rd określa rejestr docelowy lub źródłowy.

Względne adresowanie pamięci programu (ang. Relative Program Addressing)

obrazek

Tryb dotyczy instrukcji RJMP i RCALL. Pole k jest zwiększane o 1 i dodawane do aktualnej zawartości licznika rozkazów, a wynik zostaje umieszczony w liczniku rozkazów. W efekcie mikrokontroler wykona instrukcję spod adresu PC + k + 1. Pole k jest traktowane jako liczba ze znakiem w kodzie U2. Posiada ono długość 12 bitów. Zakres przesunięcia wynosi od -2048 do 2047.

Adresowanie stałej w pamięci programu (ang. Program Memory Constant Addressing)

obrazek

Tryb ten odnosi się do instrukcji LPM. Adres bajtu stałej jest określany przez zawartość rejestru Z. Pamięć programu zorganizowana jest w słowa 16-bitowe, zatem każda jej komórka składa się z dwóch bajtów: dolnego (ang. Less Significant Bajt, LSB) oraz górnego (ang. More Significant Byte, MSB). 15 starszych bitów rejestru Z stanowi adres komórki ze stałą, czyli adres słowa 16-bitowego. Dla instrukcji LPM najmłodszy bit rejestru Z wybiera dolny bajt stałej, jeśli jest wyzerowany, lub górny bajt stałej, jeśli jest ustawiony na 1.

Na początek:  podrozdziału   strony 

Stos sprzętowy dla podprogramów i przerwań

ATtiny15 używa 3-poziomowego stosu sprzętowego dla podprogramów i przerwań. Komórki stosu sprzętowego posiadają szerokość 9 bitów i przechowują adresy powrotne licznika programu (PC), gdy nastąpiło wywołanie podprogramu lub procedury obsługi przerwania.
Instrukcje RCALL i przerwania umieszczają adres powrotny dla rejestru PC na poziomie 0 stosu, a dane znajdujące się na poziomach stosu 1-2 są przesuwane o jeden poziom w głąb stosu. Gdy zostaje wykonana instrukcja RET lub RETI, adres powrotu jjest pobierany do PC z poziomu 0 stosu, a dane z poziomów 1-2 są przesuwane o jeden poziom w górę stosu.

Jeśli wystąpią kolejno więcej niż 3 wywołania podprogramów lub przerwań, to pierwsze wartości zapisane na stosie ulegną nadpisaniu. Umieszczenie na stosie czterech adresów powrotnych A1, A2, A3 i A4, a następnie wykonanie czterech powrotów, pobierze ze stosu A4, A3, A2 i jeszcze raz A2.

Na pierwszy rzut oka może to wyglądać na wadę mikrokontrolera. Pamiętaj jednak, iż ATtiny15 opracowano specjalnie dla prostych zastosowań. Jeśli potrzebujesz wywoływać dużo podprogramów lub stosujesz złożony system przerwań, to prawdopodobnie potrzebny będzie ci inny mikrokontroler.

Na początek:  podrozdziału   strony 

Pamięć danych EEPROM

ATtiny15L zawiera pamięć danych EEPROM o pojemności 64 bajtów. Została ona zorganizowana jako oddzielna przestrzeń danych, w której można odczytywać i zapisywać pojedyncze bajty. Pamięć EEPROM wytrzymuje co najmniej 100.000 cykli zapisu/kasowania. Sposób komunikacji pomiędzy mikroprocesorem a pamięcią EEPROM jest dokładnie opisany w rozdziale "Zapis/odczyt EEPROM".
Na początek:  podrozdziału   strony 

Czasy dostępu do pamięci i wykonywania instrukcji

Mikroprocesor AVR jest synchronizowany impulsami zegara systemowego Ø bezpośrednio generowanymi przez zewnętrzny kwarc. Wewnątrz nie jest stosowany żaden podział zegara.

Rysunek poniżej pokazuje pobieranie instrukcji równolegle z ich wykonywaniem, co umożliwia architektura harwardzka i zbiór rejestrów o szybkim dostępie. Jest to podstawowa koncepcja nakładkowania w celu osiągnięcia wydajności do 1 MIPSa (ang. Million Instructions per Second – milion operacji na sekundę) na 1 MHz zegara  z odpowiednimi unikalnymi wynikami zmniejszania kosztów, wykorzystania zegara oraz zmniejszenia poboru energii.

obrazek

Niżej przedstawiono wewnętrzny chronometraż dostępu do zestawu rejestrów. W pojedynczym cyklu zegara wykonywana jest operacja jednostki arytmetyczno-logicznej JAL przy użyciu dwóch argumentów-rejestrów, a wynik zostaje z powrotem umieszczony w rejestrze docelowym.

obrazek

Na początek:  podrozdziału   strony 

Pamięć we/wy

Poniższa tabela przedstawia przeznaczenie komórek przestrzeni we/wy w ATtiny15L:
Adres Nazwa Funkcja
0x3F SREG Rejestr stanu
0x3B GIMSK Ogólny rejestr maski przerwań
0x3A GIFR Ogólny rejestr znaczników przerwań
0x39 TIMSK Rejestr maski przerwań z timera/licznika
0x38 TIFR Rejestr znaczników przerwań z timera/licznika
0x35 MCUCR Rejestr sterowania mikrokontrolerem
0x34 MCUSR Rejestr stanu mikrokontrolera
0x33 TCCR0 Rejestr sterowania timerem/licznikiem 0
0x32 TCNT0 Timer/licznik 0 (8 bitów)
0x31 OSCCAL Rejestr kalibracji oscylatora
0x30 TCCR1 Rejestr sterowania timerem/licznikiem 1
0x2F TCNT1 Timer/licznik 1 (8 bitów)
0x2E OCR1A Rejestr A Output Compare dla timera/licznika 1
0x2D OCR1B Rejestr B Output Compare dla timera/licznika 1
0x2C SFIOR Rejestr funkcji specjalnych
0x21 WDTCR Rejestr sterowania licznikiem zegarowym
0x1E EEAR Rejestr adresu dla EEPROM
0x1D EEDR Rejestr danych dla/z EEPROM
0x1C EECR Rejestr sterowania EEPROM
0x18 PORTB Rejestr danych portu B
0x17 DDRB Rejestr kierunku dla portu B
0x16 PINB Stan końcówek wejściowych portu B
0x08 ACSR Rejestr sterowania i stanu komparatora analogowego
0x07 ADMUX Rejestr wyboru kanału wejściowego dla przetwornika A/C
0x06 ADCSR Rejestr sterowania i stanu przetwornika A/C
0x05 ADCH Rejestr górnego bajtu danych z przetwornika A/C
0x04 ADCL Rejestr dolnego bajtu danych z przetwornika A/C

Uwaga: W tabeli zostały pominięte komórki zarezerwowane lub nieużywane.

Wszystkie układy peryferyjne we/wy ATtiny15 są obsługiwane poprzez przestrzeń we/wy. Komórki w tej przestrzeni są odczytywane i zapisywane odpowiednio instrukcjami IN i OUT, które wykonują przesył danych pomiędzy 32 rejestrami ogólnego przeznaczenia a przestrzenią we/wy.. Rejestry we/wy znajdujące się w zakresie adresów od 0x00 do 0x1F są bezpośrednio dostępne bitowo za pomocą instrukcji SBI i CBI. W tych rejestrach wartość pojedynczych bitów można sprawdzać przy użyciu instrukcji SBIS i SBIC.

Dla kompatybilności z przyszłymi modelami mikrokontrolerów zarezerwowane bity powinny przy dostępie być zapisywane wartością 0. Zarezerwowanych adresów pamięci we/wy nigdy nie należy zapisywać.


SREG – Status Register – Rejestr stanu

Rejestr stanu mikroprocesora (SREG) umieszczony w przestrzeni we/wy pod adresem 0x3F posiada następującą definicję:

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

Bit 7 – I: Globalne Uaktywnienie Przerwań

Bit globalnego uaktywnienia przerwań (ang. Global Interrupt Enable bit) musi być ustawiony, aby mikrokontroler zaczął reagować na przerwania. Włączanie indywidualnych przerwań wykonywane jest wtedy w rejestrach GIMSK oraz TIMSK. Jeśli bit ten jest wyzerowany, to żadne przerwanie nie będzie aktywne bez względu na indywidualne ustawienia przerwań w GIMSK i TIMSK. Bit I jest zerowany przez logikę mikrokontrolera po wystąpieniu jakiegoś przerwania, a jest z powrotem ustawiany na 1 przez instrukcję RETI, aby włączyć obsługę kolejnych przerwań. Bit I może również być zerowany i ustawiany  przez instrukcje SEI i CLI (zobacz do rozdziałów "Instrukcje AVR" i "Zestaw instrukcji").

Bit 6 – T: Przechowanie bitu przy kopiowaniu

Instrukcje kopiowania bitu BLD (Bit LoaD) i BST (Bit STore) używają bitu T jako bitu źródłowego i docelowego. Bit z rejestru można skopiować do T za pomocą instrukcji BST, a bit w T można skopiować do bitu w rejestrze za pomocą instrukcji BLD.

Bit 5 – H: Znacznik połówkowego przeniesienia

Znacznik H oznacza przeniesienie połówkowe (z bitu czwartego na piąty) w niektórych operacjach arytmetycznych. Jest on użyteczny w arytmetyce liczb BCD (ang. binary coded decimal – liczby dziesiętne kodowane dwójkowo) (zobacz do rozdziałów "Instrukcje AVR" i "Zestaw instrukcji").

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

Bit znaku jest zawsze wynikiem operacji sumy modulo dwa pomiędzy znacznikiem liczby ujemnej N oraz znacznikiem nadmiaru V liczb w systemie uzupełnień do podstawy 2 (zobacz do rozdziałów "Instrukcje AVR" i "Zestaw instrukcji").

Bit 3 – V: Znacznik nadmiaru dla liczb w systemie uzupełnień do podstawy 2

Znacznik ten wspiera arytmetykę liczb w systemie U2 (zobacz do rozdziałów "Instrukcje AVR" i "Zestaw instrukcji").

Bit 2 – N: Znacznik liczby ujemnej

Znacznik ten wskazuje na ujemny wynik w operacji arytmetycznej lub logicznej (zobacz do rozdziałów "Instrukcje AVR" i "Zestaw instrukcji").

Bit 1 – Z: Znacznik zera

Znacznik ten oznacza zerowy wynik w operacji arytmetycznej lub logicznej (zobacz do rozdziałów "Instrukcje AVR" i "Zestaw instrukcji").

Bit 0 – C: Znacznik przeniesienia

Znacznik C wskazuje na przeniesienie w operacji arytmetycznej lub logicznej (zobacz do rozdziałów "Instrukcje AVR" i "Zestaw instrukcji").

Na początek:  podrozdziału   strony 

Reset i obsługa przerwań

ATtiny15L udostępnia osiem źródeł przerwań. Te przerwania oraz resetowanie posiadają swoje oddzielne wektory w przestrzeni pamięci programu. Wszystkie przerwania mają przydzielone indywidualne bity uaktywniające, które muszą być ustawione w stan logiczny jeden wraz z bitem I w rejestrze stanu SREG, aby włączyć obsługę danego przerwania.

Najniższe adresy w pamięci programu są automatycznie zdefiniowane jako wektory resetu oraz przerwań. Kompletną listę wektorów prezentuje tabela poniżej. Lista ta określa również poziomy priorytetów różnych przerwań. Im niższy adres posiada wektor przerwania, tym wyższy priorytet ma to przerwanie. Najwyższy priorytet ma RESET, a następny należy do INT0 – żądania obsługi przerwania zewnętrznego 0, itd.

Wektory RESET i przerwań

Numer
wektora
Adres
wektora
Źródło
przerwania
Opis przerwania
1 0x000 RESET Reset zewnętrzny, reset przy włączaniu zasilania,
reset przy spadku napięcia zasilającego i reset
od licznika zegarowego
2 0x001  INT0 Żądanie obsługi przerwania zewnętrznego 0
3 0x002 Końcówki we/wy Przerwanie od zmiany stanu końcówki
4 0x003 TIMER1,COMPA Zgodność porównania A dla timera/licznika 1
5 0x004 TIMER1, OVF Przepełnienie w timerze/liczniku 1
6 0x005  TIMER0, OVF Przepełnienie w timerze/liczniku 0
7 0x006 EE_RDY Gotowość EEPROM
8 0x007 ANA_COMP Komparator analogowy
9 0x008 ADC Zakończenie przetwarzania w przetworniku A/C

Najbardziej typowy i ogólny układ programu dla wektorów RESET i przerwań dla ATtiny15L jest następujący:

Przykład w kodzie maszynowym
Adres Etykiety Kod             Komentarze
0x000           rjmp RESET      ; Obsługa resetu
0x001           rjmp EXT_INT0   ; Obsługa IRQ0
0x002           rjmp PIN_CHANGE ; Obsługa zmiany stanu końcówki
0x003           rjmp TIM1_CMP   ; Zgodność porównania w Timer1
0x004           rjmp TIM1_OVF   ; Obsługa przepełnienia Timer1
0x005           rjmp TIM0_OVF   ; Obsługa przepełnienia Timer0
0x006           rjmp EE_RDY     ; Obsługa gotowości EEPROM
0x007           rjmp ANA_COMP   ; Obsługa komparatora analogowego
0x008           rjmp ADC        ; Obsługa przetwarzania w przetworniku A/C
;
0x009 MAIN:     <instr> xxx     ; Start programu głównego
…    …         …               …

Źródła resetu w ATtiny15L

ATtiny15L posiada cztery źródła resetu:

Podczas resetu wszystkie rejestry we/wy są ustawiane na swoje początkowe wartości a wykonanie programu rozpoczyna się od adresu 0x000. Pod tym adresem powinna znaleźć się instrukcja RJMP (ang. relative jump – skok względny) prowadząca do procedury obsługi resetu. Jeśli program nigdy nie uaktywnia źródeł przerwań, to wektory przerwań nie będą używane i w ich miejscu można umieścić normalny kod programu. Na poniższym rysunku przedstawiono schemat blokowy układu resetowania. Zwróć uwagę, iż reset nie zmienia zawartości zestawu rejestrów.

obrazek

Parametry resetu (VCC = 5V)(1)

Symbol Parametr Warunek Min. Typ. Max. Jednostki
VPOT Napięcie progowe resetu przy włączaniu zasilania (wzrost) BOD wyłączone 1,0 1,4 1,8 V
BOD włączone 1,7 2,2 2,7 V
Napięcie progowe resetu przy włączaniu zasilania (spadek) BOD wyłączone 0,4 0,6 0,8 V
BOD włączone 1,7 2,2 2,7 V
VRST Napięcie progowe końcówki RESET   0,85VCC V
VBOT Napięcie progowe resetu przy spadku napięcia zasilającego BODLEVEL = 1 2,3 2,7 2,9 V
BODLEVEL = 0 3,4 4,0 4,3 V
Uwaga: 1. Reset przy włączaniu zasilania nie zadziała dopóki napięcie zasilające nie spadnie poniżej progu VPOT.

Wybór opóźnienia przy resecie

BODEN(2) CKSEL[1:0](2) Czas startu
tTOUT przy VCC=2,7V
Czas startu
tTOUT przy VCC=5,0V
Zalecane użycie
x 00 256 ms+18 CK 64 ms + 18 CK BOD wyłączone, wolno narastające VCC
x 01 256 ms+18 CK 64 ms + 18 CK BOD wyłączone, wolno narastające VCC
x 10 16 ms+18 CK 4 ms + 18 CK BOD wyłączone, szybko narastające VCC
1 11 18 CK + 32 μs 18 CK + 8 μs BOD wyłączone
0 11 18 CK + 128 μs 18 CK + 32 μs BOD włączone
Uwagi: 1. Przy włączeniu zasilania czas startu jest typowo zwiększany o 0,6 ms.
  2. "0" oznacza bit zaprogramowany, "1" oznacza bit niezaprogramowany

Tabela powyżej pokazuje czasy startu po resecie. Gdy mikroprocesor wybudza się z trybu wyłączenia zasilania, używana jest tylko część zawierająca liczbę cykli zegarowych (CK) w czasie startu. Do odmierzania części w czasie rzeczywistym czasu startu wykorzystywany jest oscylator licznika zegarowego. Liczba cykli oscylatora licznika zegarowego używanych do każdego z czasów jest pokazana w tabeli poniżej.

Częstotliwość oscylatora licznika zegarowego zależy od napięcia zasilającego, jak pokazano w charakterystykach elektrycznych. Mikrokontroler jest sprzedawany z bitami bezpiecznikowymi CKSEL ustawionymi na "00".

Liczba cykli oscylatora licznika zegarowego
Warunki zasilania Okres zliczania Liczba cykli
2,7V 32 μs 8
2,7V 128 μs 32
2,7V 16 ms 4K
2,7V 256 ms 64K
5V 8 μs 8
5V 32 μs 32
5V 4 ms 4K
5V 64 ms 64K

Reset przy włączaniu

Impuls resetu przy włączaniu zasilania (ang. Power-on Reset, POR) jest generowany przez wewnętrzny obwód wykrywania. Poziom wykrywania pokazano w tabeli charakterystyk resetu. POR jest aktywowany zawsze, gdy napięcie zasilania VCC spadnie poniżej poziomu wykrywania. Obwód POR może być użyty do wyzwolenia resetu przy uruchamianiu (ang. the start-up reset) jak również do wykrywania awarii napięcia zasilającego.

Obwód POR zapewnia resetowanie mikrokontrolera przy włączeniu zasilania. Gdy zostanie osiągnięte napięcie progowe resetu przy włączaniu, to uruchamiany jest licznik opóźniający, który określa opóźnienie, w ciągu którego mikrokontroler jest utrzymywany  w stanie resetu po wzroście VCC. Okres przewinięcia się licznika opóźniającego może zostać zdefiniowany przez użytkownika poprzez bity bezpiecznikowe CKSEL. Ustawienia tych bitów i związane z nimi czasy opóźnień pokazuje poniższa tabela opóźnień przy resecie. Sygnał resetu jest aktywowany ponownie bez żadnego opóźnienia, gdy VCC spada poniżej poziomu wykrywania.

Start mikrokontrolera, RESET połączony z Vcc
obrazek

Start mikrokontrolera, RESET przedłużony zewnętrznie
obrazek

Zewnętrzny reset

Zewnętrzne resetowanie generowane jest przez niski stan na wyprowadzeniu RESET. Impuls resetu dłuższy niż 500 ns wygeneruje reset, nawet jeśli zegar mikrokontrolera nie pracuje. Krótsze impulsy nie dają gwarancji wygenerowania resetu. Gdy zastosowany sygnał osiągnie napięcie progu resetowania VRST (ang. Reset Threshold Voltage) na krawędzi dodatniej (narastającej, 0 → 1), licznik opóźnienia uruchomi mikrokontroler po upływie okresu opóźnienia tTOUT.

Reset zewnętrzny w trakcie pracy mikrokontrolera
obrazek

Wykrywanie spadku napięcia (ATtiny12)

ATtiny15L posiada wbudowany obwód wykrywania spadku napięcia zasilającego (ang. brown-out detection circuit, BOD) do monitorowania poziomu VCC podczas pracy. Obwód BOD może zostać włączony/wyłączony za pomocą bitu bezpiecznikowego BODEN. Gdy BODEN jest włączone (bit BODEN zaprogramowany na 0), a napięcie VCC spadnie poniżej poziomu wyzwalania, to zostaje natychmiast aktywowany reset przy spadku napięcia zasilania (ang. brown-out reset). Gdy VCC wzrośnie powyżej poziomu wyzwalania, reset od spadku napięcia zasilania zostaje dezaktywowany po pewnym opóźnieniu, które definiuje użytkownik w ten sam sposób, co opóźnienie sygnału POR. Poziom wyzwalania dla BOD można wybrać bitem bezpiecznikowym BODLEVEL na 2,7V (BODLEVEL niezaprogramowany) lub 4,0V (BODLEVEL zaprogramowany). Poziom wyzwalania ma histerezę 50mV w celu ochrony przed wykryciem szpilkowych spadków napięcia..

Obwód BOD tylko wtedy wykryje spadek VCC, jeśli to napięcie utrzyma się poniżej progu wyzwalania dłużej niż 3 μs dla poziomu wyzwalania 4,0V, 7 μs dla poziomu wyzwalania 2,7V (wartości typowe).

Reset przy spadku napięcia zasilającego w trakcie pracy
 obrazek

Uwaga: Histereza dla VBOT: VBOT+ = VBOT + 25 mV, VBOT– = VBOT – 25 mV.

Reset od licznika zegarowego

Gdy licznik zegarowy dojdzie do końca okresu swojego zliczania, wygeneruje krótki impuls reset o czasie trwania równym jednemu cyklowi zegara CK. Przy opadającym zboczu tego impulsu licznik opóźnienia zaczyna zliczać okres opóźnienia tTOUT.

Reset od licznika zegarowego podczas pracy mikrokontrolera
obrazek


MCUSR – MCU Status Register – Rejestr stanu mikrokontrolera

Rejestr stanu mikrokontrolera udostępnia informację o źródle zresetowania mikrokontrolera.

Bit 7 6 5 4 3 2 1 0  
0x34 - - - - WDRF BORF EXTRF PORF MCUSR
Zapis/Odczyt O O O O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 Zobacz na opis bitów  

Bity 7:4 – Zarezerwowane

Te bity są zarezerwowane w ATtiny15L i zawsze dają odczyt zero.

Bit 3 – WDRF: Watchdog Reset Flag – Znacznik resetu od licznika zegarowego

Ten bit zostaje ustawiony, gdy występuje reset spowodowany przepełnieniem licznika zegarowego. Bit jest zerowany przez reset przy włączeniu zasilania lub przez zapis logicznego zera do tego znacznika.

Bit 2 – BORF: Brown-out Reset Flag – Znacznik resetu przy spadku napięcia zasilania

Ten bit jest ustawiany, jeśli wystąpi reset przy spadku napięcia zasilania. Bit jest zerowany przez reset przy włączeniu zasilania lub przez zapis logicznego zera do tego znacznika.

Bit 1 – EXTRF: EXTernal Reset Flag – Znacznik resetu zewnętrznego

Ten bit jest ustawiany, jeśli wystąpi reset zewnętrzny. Bit jest zerowany przez reset przy włączeniu zasilania lub przez zapis logicznego zera do tego znacznika.

Bit 0 – PORF: Power-on Reset Flag – Znacznik resetu przy włączaniu zasilania

Ten bit zostaje ustawiony, jeśli wystąpi reset przy włączeniu zasilania. Bit jest resetowany przez zapis logicznego zera do tego znacznika.

Aby wykorzystać znaczniki resetu do identyfikacji warunku resetu, użytkownik powinien odczytać, a następnie wyzerować rejestr MCUSR najwcześniej jak tylko to możliwe w programie. Jeśli rejestr został wyzerowany przed wystąpieniem kolejnego resetu, to źródło resetu można znaleźć przez zbadanie znaczników resetu.

Na początek:  podrozdziału   strony 

Wewnętrzne napięcie odniesienia

ATtiny15L posiada możliwość stosowania wewnętrznego napięcia odniesienia o nominalnej wartości 1,22V. Napięcie to jest używane przy wykrywaniu spadków napięcia zasilającego (ang. Brown-out Detection) i można je wykorzystać jako napięcie wejściowe dla komparatora analogowego. Napięcie referencyjne 2,56V dla przetwornika A/C jest generowane z wewnętrznego napięcia odniesienia.

Sygnały uaktywniane napięciem odniesienia a czas uruchamiania

Napięcie odniesienia posiada pewien czas uruchamiania, który może wpłynąć na sposób używania tego napięcia. Maksymalny czas uruchamiania wynosi 10μs. Aby zaoszczędzić energię, napięcie odniesienia nie zawsze jest włączone. Jest ono włączane w następujących sytuacjach:

  1. Gdy włączone jest wykrywanie spadku napięcia zasilającego (przez zaprogramowanie bitu bezpiecznikowego BODEN).
  2. Gdy napięcie odniesienia jest podłączone do komparatora analogowego (przez ustawienie bitu AINBG w rejestrze ACSR).
  3. Gdy aktywny jest przetwornik A/C.

W ten sposób, gdy BOD (ang. Brown-out Detection, wykrywanie spadku napięcia zasilającego) nie jest włączone, po ustawieniu bitu AINBG użytkownik zawsze musi odczekać, aż napięcie odniesienia w pełni się uruchomi, zanim będzie można je wykorzystywać wyjście z komparatora analogowego. Obwód napięcia odniesienia pobiera typowo prąd 10 μA, a w celu zmniejszenia poboru energii w trybie wyłączenia zasilania (ang. Power-down mode) użytkownik może wyłączyć to napięcie przed wejściem w tryb uśpienia.

Na początek:  podrozdziału   strony 

Obsługa przerwań

ATtiny15L posiada dwa 8-bitowe rejestry maskowania przerwań: GIMSKogólny rejestr maskowania przerwań (ang. General Interrupt Mask Register) i TIMSKrejestr maskowania przerwań od timerów/liczników (ang. Timer/Counter Interrupt Mask Register).

Gdy wystąpi przerwanie, zerowany jest bit I globalnego uaktywnienia przerwań (ang. Global Interrupt Enable I-bit) w rejestrze stanu i wszystkie przerwania zostają zablokowane. Oprogramowanie użytkownika może ustawić z powrotem bit I, aby włączyć przerwania zagnieżdżone. Bit I jest ustawiany, gdy jest wykonywana instrukcja powrotu z przerwania – RETI.

Gdy licznik programu (ang. Program Counter, PC) jest ustawiany na adres wektora w celu wykonania procedury obsługi przerwania, odpowiedni znacznik przerwania zostaje sprzętowo wyzerowany. Niektóre znaczniki przerwań można również wyzerować przez zapis logicznej jedynki na pozycji bitu znacznika do wyzerowania.

Jeśli warunek przerwania wystąpi, gdy odpowiadający mu bit uaktywnienia jest wyzerowany, to znacznik przerwania zostanie ustawiony i zapamiętany aż do uaktywnienia przerwania lub do wyzerowania tego znacznika przez oprogramowanie.

Gdy wystąpi jeden lub więcej warunków przerwania, gdy bit I globalnego uaktywnienia przerwań jest wyzerowany, to odpowiednie znaczniki przerwań zostaną ustawione i zapamiętane, aż do ustawienia bitu I, a następnie zostaną wykonane w kolejności ich priorytetów.

Zwróć uwagę, iż przerwanie od zewnętrznego poziomu nie posiada znacznika i będzie pamiętane tak długo, jak długo aktywny jest warunek przerwania.

Również zauważ, iż rejestr stanu nie jest automatycznie zapamiętywany przy wejściu do procedury obsługującej przerwanie, ani nie zostaje automatycznie odtworzony przy powrocie z tej procedury. Operacje te muszą zostać wykonane programowo.

Czas reakcji na przerwanie

Czas reakcji na przerwanie dla wszystkich uaktywnionych przerwań AVR wynosi co najmniej 4 cykle zegarowe. Po tym okresie 4 cykli zegarowych licznik programu (9 bitów) jest umieszczany na stosie, po czym wykonany zostaje rozkaz umieszczony w wektorze przerwania, będący najczęściej skokiem względnym  RJMP do procedury obsługi przerwania, a skok ten zajmuje dodatkowe dwa cykle zegarowe. Jeśli przerwanie wystąpi podczas instrukcji wielocyklowej, to wykonanie tej instrukcji zostaje doprowadzone do końca przed obsłużeniem przerwania. W ATtiny12, jeśli przerwanie wystąpi w trakcie uśpienia mikrokontrolera, to czas reakcji wydłuża się o 4 dalsze cykle zegarowe.

Powrót z procedury przerwania zajmuje 4 cykle zegarowe, podczas których licznik programu (9 bitów) jest pobierany z powrotem ze stosu, a znacznik I w SREG jest ustawiany. Gdy mikrokontroler AVR wychodzi z przerwania, zawsze powraca do programu, który był wykonywany w momencie wystąpienia przerwania i wykonuje jedną dalszą instrukcję, zanim zostanie obsłużone jakiekolwiek oczekujące przerwanie.


GIMSK – General Interrupt Mask Register – Ogólny rejestr maskowania przerwań

Bit 7 6 5 4 3 2 1 0  
0x3B - INT0 PCIE - - - - - GIMSK
Zapis/Odczyt O Z/O Z/O O O O O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7,4:0 – Zarezerwowane

Te bity są zarezerwowane w ATtiny15L i przy odczycie zawsze dają wartość 0.

Bit 6 – INT0: External Interrupt Request 0 Enable – Uaktywnienie żądania przerwań zewnętrznych 0

Gdy bit INT0 zostanie ustawiony i bit I w rejestrze stanu (SREG) jest również ustawiony, to zostanie uaktywnione przerwanie zewnętrzne z końcówki INT0. Bity 1:0 sterujące sposobem wykrywania przerwania 0 (ang. Interrupt Sense Control0 bits) (ISC01 i ISC00) w ogólnym rejestrze sterującym mikrokontrolera (ang. MCU general Control Register, MCUCR) definiują, czy przerwanie zewnętrzne będzie aktywowane narastającym/opadającym zboczem sygnału, zmianą stanu końcówki, czy niskim poziomem na końcówce INT0. Aktywność na tej końcówce spowoduje żądanie przerwania nawet, jeśli końcówka INT0 jest skonfigurowana jako wyjście. Procedura obsługi żądania przerwania 0 rozpoczyna się od adresu  0x001. 

Bit 5 – PCIE: Pin Change Interrupt Enable – Uaktywnienie przerwania od zmiany stanu końcówki

Gdy bit PCIE zostanie ustawiony i bit I w rejestrze stanu (SREG) jest ustawiony, to zostanie uaktywnione przerwanie przy zmianie stanu końcówki. Jakakolwiek zmiana na końcówkach wejściowych lub końcówkach we/wy spowoduje żądanie przerwania. Procedura obsługi tego przerwania rozpoczyna się od adresu 0x002 w pamięci programu.

GIFR – General Interrupt Flag Register – Ogólny Rejestr znaczników przerwań

Bit 7 6 5 4 3 2 1 0  
0x3A - INTF0 PCIF - - - - - GIFR
Zapis/Odczyt O Z/O Z/O O O O O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7,4:0 – Zarezerwowane

Te bity są zarezerwowane w ATtiny15L i przy odczycie zawsze dają wartość 0.

Bit 6 – INTF0: External Interrupt Flag0 – Znacznik przerwania zewnętrznego 0

Gdy zbocze sygnału na końcówce INT0 wyzwoli żądanie przerwania, to odpowiadający mu znacznik przerwania INTF0 otrzymuje stan wysoki 1. Jeśli bit I w SREG oraz odpowiedni bit uaktywniający INT0 w rejestrze GIMSK są ustawione, to mikrokontroler wykona skok do wektora przerwania. Znacznik ten zostaje wyzerowany, gdy rozpocznie się wykonywanie procedury przerwania. Alternatywnie znacznik można wyzerować przez zapis w nim stanu 1. Znacznik ten jest zawsze wyzerowany, gdy końcówka INT0 zostanie skonfigurowana na przerwanie od poziomu niskiego.

Bit 5 – PCIF: Pin Change Interrupt Flag – Znacznik przerwania od zmiany stanu końcówki

Gdy pewne zdarzenie na dowolnej końcówce wejścia lub końcówce we/wy wyzwoli żądanie przerwania, to bit PCIF jest ustawiany na 1. Jeśli bit I w SREG i bit PCIE w GIMSK są ustawione, to mikrokontroler skoczy do wektora przerwania pod adresem 0x002. Znacznik zostaje wyzerowany, gdy procedura obsługi przerwania zacznie być wykonywana. Alternatywnie znacznik można wyzerować przez zapis do niego logicznej jedynki.


TIMSK – The Timer/Counter Interrupt Mask Register – Rejestr maski przerwań z timerów/liczników

Bit 7 6 5 4 3 2 1 0  
0x39 - OCIE1A - - - TOIE1 TOIE0 - TIMSK
Zapis/Odczyt O Z/O O O O Z/O Z/O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7,5:3,0 – Zarezerwowane

Te bity są zarezerwowane w ATtiny15L i przy odczycie zawsze dają wartość 0.

Bit 6 – OCIE1A: Timer/Counter1 Output Compare Interrupt Enable – Uaktywnienie przerwania przy Output Compare dla timera/licznika 1

Gdy bit OCIE1A zostanie ustawiony i bit I w rejestrze stanu ma wartość 1, uaktywnione zostaje przerwanie przy zgodności porównania w timerze/liczniku 1. Odpowiadający mu wektor przerwania (pod adresem 0x003) zostanie wykonany, jeśli wystąpi zgodność porównania A w timerze/liczniku 1, tj. gdy zostanie ustawiony na 1 bit OCF1A w rejestrze znaczników przerwań z timerów/liczników (ang. Timer/Counter Interrupt Flag Register, TIFR).

Bit 2 – TOIE1: Timer/Counter1 Overflow Interrupt Enable – Uaktywnienie przerwania przy przepełnieniu timera/licznika 1

Gdy bit TOIE1 zostanie ustawiony na 1 i bit I w rejestrze stanu ma również stan 1, to zostają uaktywnione przerwanie z przepełnienia w timerze/liczniku 1. Odpowiadający mu wektor przerwania (pod adresem 0x004) zostanie wykonany, jeśli wystąpi przepełnienie w timerze/liczniku 1, tj. gdy zostanie ustawiony bit TOV1 w rejestrze znaczników przerwań timerów/liczników (ang. Timer/Counter Interrupt Flag Register, TIFR).

Bit 1 – TOIE0: Timer/Counter1 Overflow Interrupt Enable – Uaktywnienie przerwania przy przepełnieniu timera/licznika 0

Gdy bit TOIE0 zostanie ustawiony na 1 i bit I w rejestrze stanu ma również stan 1, to zostają uaktywnione przerwanie z przepełnienia w timerze/liczniku 0. Odpowiadający mu wektor przerwania (pod adresem 0x005) zostanie wykonany, jeśli wystąpi przepełnienie w timerze/liczniku 0, tj. gdy zostanie ustawiony bit TOV0 w rejestrze znaczników przerwań timerów/liczników (ang. Timer/Counter Interrupt Flag Register, TIFR).


TIFR – The Timer/Counter Interrupt Flag Register – Rejestr znaczników przerwań z timerów/liczników

Bit 7 6 5 4 3 2 1 0  
0x38 - OCF1A - - - TOV1 TOV0 - TIFR
Zapis/Odczyt O Z/O O O O Z/O Z/O O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7,5:3,0 – Zarezerwowane

Te bity są zarezerwowane w ATtiny15L i przy odczycie zawsze dają wartość 0.

Bit 6 – OCF1A: Output Compare Flag 1A – Znacznik Output Compare 1A

Bit OCF1A bit jest ustawiany, gdy wystąpi zgodność porównania pomiędzy timerem/licznikiem 1 a wartością danych w rejestrze OCR1A (ang. Output Compare Register 1A – Rejestr Output Compare 1A). Znacznik OCF1A jest zerowany sprzętowo przy wykonaniu odpowiadającego mu wektora obsługi przerwania. Alternatywnie znacznik OCF1A jest zerowany przez zapis "logicznej jedynki" na pozycji tego bitu. Gdy bity I w rejestrze  SREG, OCIE1A iOCF1A są wszystkie ustawione na 1, zostaje wykonane przerwanie zgodności porównania A w timerze/liczniku 1 (ang. Timer/Counter1 compare match A).

Bit 2 – TOV1: Timer/Counter1 Overflow Flag – Znacznik przepełnienia timera/licznika 1

Bit TOV1 jest ustawiany, gdy pojawi się przepełnienie w timerze/liczniku 1. Znacznik TOV1 jest zerowany sprzętowo przy wykonaniu odpowiadającego mu wektora obsługi przerwania. Alternatywnie znacznik TOV1 jest zerowany przez zapis "logicznej jedynki" na pozycji tego bitu. Gdy bity I w rejestrze  SREG, TOIE1 i TOV1 są wszystkie ustawione na 1, zostaje wykonane przerwanie przy przepełnieniu w timerze/liczniku 1 (ang. Timer/Counter1 Overflow Interrupt).

Bit 1 – TOV0: Timer/Counter0 Overflow Flag – Znacznik przepełnienia timera/licznika 0

Bit TOV0 jest ustawiany, gdy pojawi się przepełnienie w timerze/liczniku 0. Znacznik TOV0 jest zerowany sprzętowo przy wykonaniu odpowiadającego mu wektora obsługi przerwania. Alternatywnie znacznik TOV0 jest zerowany przez zapis "logicznej jedynki" na pozycji tego bitu. Gdy bity I w rejestrze  SREG, TOIE0 i TOV0 są wszystkie ustawione na 1, zostaje wykonane przerwanie przy przepełnieniu w timerze/liczniku 0 (ang. Timer/Counter0 Overflow Interrupt).

Przerwanie zewnętrzne

Przerwanie zewnętrzne (ang. External Interrupt) jest wyzwalane przez końcówkę INT0. Zwróć uwagę, iż jeśli przerwanie to jest uaktywnione, to zostanie wyzwolone nawet wtedy, gdy końcówka INT0 pracuje jako wyjście. Ta cecha dostarcza sposobu generowania przerwań programowych. Przerwanie zewnętrzne może zostać wyzwolone przez opadające/narastające zbocze, zmianę stanu końcówki lub niski poziom logiczny 0. Ustawia się to w rejestrze sterowania mikrokontrolerem (ang. MCU Control Register – MCUCR). Gdy przerwanie zewnętrzne zostało uaktywnione i skonfigurowane na wyzwalanie poziomem, przerwanie będzie wyzwalane tak długo, jak jego końcówka utrzymywana jest w stanie niskim 0.

Przerwanie przy zmianie stanu końcówki

Przerwanie przy zmianie stanu końcówki (ang. Pin Change Interrupt) jest wyzwalane przez każdą zmianę na dowolnej końcówce wejścia lub wyjścia. Zmiana na końcówkach PB4:0 zawsze wywoła przerwanie. Zmiana na końcówkach PB5 wywoła przerwanie, jeśli końcówka pracuje jako wejście lub wyjście. Zauważ, iż jeśli przerwanie zostało aktywowane to zostanie wyzwolone nawet wtedy, gdy końcówka pracuje jako wyjście. Ta cecha pozwala generować przerwania programowe. Zauważ również, iż przerwanie od zmiany stanu końcówki zostanie wyzwolone, nawet jeśli aktywność na danej końcówce wyzwala inne przerwanie, np. przerwanie zewnętrzne. Wynika z tego, iż jedno zdarzenie zewnętrzne może spowodować kilka przerwań.

Wartości na końcówkach są próbkowane przed wykrywaniem zboczy. Jeśli przerwanie od zmiany stanu końcówki jest aktywne, to impulsy o czasie trwania dłuższym od okresu zegarowego mikroprocesora wygenerują przerwanie. Krótsze impulsy nie dają pewności wygenerowania przerwania.


MCUCR – The MCU Control Register – Rejestr sterowania mikrokontrolerem

Bit 7 6 5 4 3 2 1 0  
0x35 - PUD SE SM1 SM0 - ISC01 ISC00 MCUCR
Zapis/Odczyt O Z/O Z/O Z/O Z/O O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7,2 – Zarezerwowane

Te bity są zarezerwowane w ATtiny15L i przy odczycie zawsze dają wartość 0.

Bit 6 – PUD: Pull-up Disable – Wyłączenie oporników podciągających

Bit PUD musi być ustawiony na 1, aby zostały zablokowane wewnętrzne oporniki podciągające portu B.

Bit 5 – SE: Sleep Enable – Uaktywnienie uśpienia

Bit SE musi być ustawiony na 1, aby mikrokontroler mógł przejść w tryb uśpienia przy wykonywaniu instrukcji SLEEP. Aby uniknąć niezamierzonego wejścia w tryb uśpienia przez mikrokontroler, zaleca sie ustawianie bitu SE tuż przed wykonaniem instrukcji SLEEP.

Bity 4:3 – SM1, SM0: Sleep Mode Select Bits 1 and 0  – Bity 1 i 0 wyboru trybu uśpienia

Bity te wybierają jeden z trzech dostępnych trybów uśpienia wg poniższej tabeli:

Tryby uśpienia

SM1 SM0 Tryb uśpienia
0 0 Tryb bezczynny (ang. Idle mode)
0 1 Tryb zmniejszania szumów dla przetwornika A/C (ang. ADC Noise Reduction mode)
1 0 Tryb wyłączenia zasilania (ang. Power-down mode)
1 1 Zarezerwowane

Bity 1:0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1 and Bit 0 – Bity 1 i 0 sterowania sposobem wykrywania przerwania 0

Przerwanie zewnętrzne 0 jest aktywowane przez zewnętrzną końcówkę INT0, jeśli są ustawione na 1 bit I w rejestrze SREG oraz odpowiedni bit maski przerwania. Aktywność na zewnętrznej końcówce INT0, która aktywuje to przerwanie jest zdefiniowana w poniższej tabeli:

Sterowanie wykrywaniem przerwania 0(1)

ISC01 ISC00 Opis
0 0 Niski poziom na INT0 generuje przerwanie.
0 1 Dowolna zmiana na INT0 generuje przerwanie.
1 0 Opadające zbocze sygnału na INT0 generuje przerwanie.
1 1 Narastające zbocze sygnału na INT0 generuje przerwanie.
Uwaga: 1. Przy zmianie bitów ISC10/ISC00 przerwanie INT0 musi zostać zablokowane przez wyzerowanie jego bitu uaktywniającego w rejestrze GIMSK. W przeciwnym razie przerwanie może pojawić się, gdy bity te są zmieniane.
Na początek:  podrozdziału   strony 

Tryby uśpienia

Aby wejść w dowolny z trzech trybów uśpienia, bit SE w rejestrze MCUCR musi być zapisany stanem jeden oraz musi zostać wykonana instrukcja SLEEP. Bity SM1:0 w rejestrze MCUCR wybierają rodzaj trybu uśpienia (bezczynny, zmniejszania szumów dla przetwornika A/C lub wyłączenia zasilania), który zostanie uaktywniony przez instrukcję SLEEP.

Gdy uaktywnione przerwanie wystąpi podczas uśpienia mikrokontrolera, zostanie on wybudzony. Następnie mikrokontroler jest wstrzymywany przez cztery cykle oprócz czasu uruchamiania, po czym wykonuje on procedurę obsługi przerwania i wznawia wykonywanie programu od następnej instrukcji za SLEEP. Zawartość zestawu rejestrów i pamięci SRAM jest niezmieniona, gdy mikrokontroler wybudza się z uśpienia. Jeśli podczas uśpienia wystąpi reset, to mikrokontroler wybudza się i wykonuje program od wektora Resetu,

Tryb bezczynności (ang. Idle Mode)

Gdy bity SM1/SM0 mają stan “00”, to instrukcja SLEEP wymusi na mikrokontrolerze przejście w tryb bezczynności, wstrzymując mikroprocesor, lecz pozwalając na kontynuowanie pracy przetwornikowi A/C, komparatorowi analogowemu, timerom/licznikom, licznikowi zegarowemu oraz systemowi przerwań. To pozwala mikrokontrolerowi wybudzić się z uśpienia w odpowiedzi na przerwania wyzwolone zewnętrznie lub wewnętrznie, np. przy przerwaniu od przepełnienia timera lub przy resecie od licznika zegarowego. Jeśli przetwornik A/C został włączony, to przetwarzanie rozpoczyna się automatycznie przy wejściu w ten tryb. Jeśli wybudzenie od komparatora analogowego nie jest potrzebne, to komparator analogowy może zostać odłączony od zasilania przez ustawienie bitu ADC w rejestrze sterowania i stanu komparatora analogowego (ang. Analog Comparator Control and Status Register, ACSR). Zredukuje to pobór prądu w trybie bezczynności

Tryb zmniejszania zakłóceń dla przetwornika A/C (ang. ADC Noise Reduction Mode)

Gdy bity SM1/SM0 mają stan “01”, to instrukcja SLEEP wymusi na mikrokontrolerze przejście w tryb zmniejszania zakłóceń dla przetwornika A/C, zatrzymując mikroprocesor, lecz zezwalając na dalszą pracę przetwornikowi A/C, końcówce przerwania zewnętrznego, przerwaniu od zmiany stanu końcówki oraz licznikowi zegarowemu (jeśli jest uaktywniony). Proszę zauważyć, że w tym trybie uśpienia aktywny jest również system zegarowy łącznie z PLL. Takie rozwiązanie zmniejsza szumy tła przy wykonywaniu przetwarzania w przetworniku A/C, co pozwala mu osiągnąć większą dokładność. Jeśli przetwornik A/C jest włączony, to po wejściu w ten tryb automatycznie rozpoczyna się przetwarzanie w przetworniku A/C. Dodatkowo do resetu z przepełnienia licznika zegarowego i resetu zewnętrznego mikrokontroler może zostać wybudzony jedynie przez przerwanie zewnętrzne wyzwalane poziomem, przerwanie od zmiany stanu końcówki lub przerwanie z przetwornika A/C.

Tryb wyłączenia zasilania (ang. Power-down Mode)

Gdy bity SM1/SM0 mają stan “10”, to instrukcja SLEEP wymusi na mikrokontrolerze przejście w tryb wyłączenia zasilania. Mikrokontroler może być wybudzony tylko przez reset zewnętrzny, reset z licznika zegarowego (jeśli został uaktywniony), przerwanie zewnętrzne wyzwalane poziomem lub przerwanie od zmiany stanu końcówki.

Zauważ, że jeśli do wybudzenia z trybu wyłączenia zasilania używane jest przerwanie wyzwalane poziomem lub przerwanie od zmiany stanu końcówki, to zmieniony poziom musi się utrzymać przez pewien czas, aby wybudzić mikrokontroler. To sprawia, iż mikrokontroler staje się mniej czuły na krótkotrwałe zakłócenia. Zmieniony poziom jest próbkowany dwukrotnie przez zegar oscylatora licznika zegarowego, a jeśli stan wejścia posiada wymagany poziom w tym czasie, to mikrokontroler wybudzi się. Okres oscylatora licznika zegarowego jest równy 2,9 μs (nominalnie) przy 3,0V i w temperaturze 25°C. Częstotliwość oscylatora licznika zegarowego jest zależna od napięcia zasilającego, jak pokazano w rozdziale "Parametry elektryczne".

Gdy następuje wybudzenie z trybu wyłączenia zasilania, występuje opóźnienie z warunku wybudzania aż wybudzenie zostanie zakończone. Pozwala to uruchomić się i ustabilizować zegarowi po wcześniejszym zatrzymaniu. Okres wybudzania jest zdefiniowany przez te same bity bezpiecznikowe CKSEL, które definiują okres opóźnienia dla resetu.

Na początek:  podrozdziału   strony 

Strojony, wewnętrzny oscylator RC

Wewnętrzny oscylator RC udostępnia zegar o stałej częstotliwości 1,6 MHz (nominalnie przy napięciu zasilania 5V i w temperaturze 25°C). Ten wewnętrzny zegar jest zawsze zegarem systemowym mikrokontrolera ATtiny15L. Oscylator mozna kalibrować przez zapis bajtu kalibracyjnego do rejestru OSCCAL.

OSCCAL – The System Clock Oscillator Calibration Register – Rejestr kalibracji oscylatora zegara systemowego

Bit 7 6 5 4 3 2 1 0  
0x31 CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL
Zapis/Odczyt Z/O Z/O Z/O Z/O Z/O Z/O Z/O Z/O  
Wartość początkowa 0 0 0 0 0 0 0 0  

Bity 7:0 - CAL7:0: Wartość kalibracji oscylatora

Zapis bajtu kalibracyjnego pod ten adres spowoduje wyregulowanie wewnętrznego oscylatora w celu usunięcia odchyłek w generowanej częstotliwości. Gdy OSCCAL ma wartość zero (wartość początkowa), zostaje wybrana najniższa dostępna częstotliwość. Zapis niezerowej wartości do tego rejestru spowoduje wzrost częstotliwości wewnętrznego oscylatora. Zapisanie 0xFF do tego rejestru da najwyższą dostępną częstotliwość.

Na początek:  podrozdziału   strony 

Wewnętrzna pętla PLL do generacji szybkiego zegara peryferyjnego

Wewnętrzna pętla PLL w ATtiny15L generuje częstotliwość zegarową, która jest 16 razy większa od częstotliwości generowanej przez oscylator RC zegara systemowego. Jeśli częstotliwość oscylatora RC wynosi nominalnie1,6 MHz, to szybki zegar peryferyjny posiada częstotliwość 25,6 MHz. Zegar ten lub zegar otrzymany z jego preskalera może zostać wybrany jako źródło zegarowe dla timera/licznika 1.

Pętla PLL jest sprzężona na stałe ze strojonym, wewnętrznym oscylatorem RC i kalibracja tego oscylatora poprzez rejestr OSCCAL spowoduje w tym samym czasie kalibrację częstotliwości szybkiego zegara peryferyjnego. Timer 1 może przestać działać prawidłowo, jeśli częstotliwość wewnętrznego oscylatora RC przekroczy 1,75 MHz.

Nie zaleca się ustawiania poprzez rejestr OSCCAL częstotliwości wyższych niż 1,75 MHz w celu zachowania poprawnego działania wszystkich funkcji układu.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2022 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.