Atmel 8-битов AVR микроконтролер с 2/4/8K байта в системна програмируема флаш
Характеристики
- Високопроизводителен 8-битов микроконтролер AVR® с ниска мощност
- Разширена RISC архитектура
- 120 мощни инструкции - изпълнение на най-много цикъла на часовника
- 32 x 8 работни регистри с общо предназначение
- Напълно статична операция
- Енергонезависима памет за програми и данни
- 2/4/8K байта в системна програмируема флаш програмна памет
- Издръжливост: 10,000 XNUMX цикъла на запис/изтриване
- 128/256/512 байта Вътрешносистемна програмируема EEPROM
- Издръжливост: 100,000 XNUMX цикъла на запис/изтриване
- 128/256/512 байта вътрешна SRAM
- Заключване за програмиране за самопрограмиране на Flash програма и защита на данните на EEPROM
Периферни характеристики
- 8-битов таймер/брояч с Prescaler и два PWM канала
- 8-битов високоскоростен таймер/брояч с отделен прескалер
- 2 високочестотни PWM изхода с отделни регистри за сравнение на изхода
- Програмируем генератор на мъртво време
- USI – Универсален сериен интерфейс с детектор за стартово състояние
- 10-битов ADC
4 канала с единичен край
2 двойки диференциални ADC канали с програмируемо усилване (1x, 20x)
Измерване на температура
Програмируем Watchdog таймер с отделен вграден осцилатор
Вграден аналогов компаратор
Специални функции на микроконтролера
debugWIRE Вградена система за отстраняване на грешки
Вътрешно системно програмируемо чрез SPI порт
Външни и вътрешни източници на прекъсвания
Режими на празен ход с ниска мощност, намаляване на шума на ADC и режими на изключване
Подобрена верига за нулиране при включване
Програмируема верига за откриване на изгасване
Вътрешен калибриран осцилатор
I / O и пакети
Шест програмируеми I/O линии
8-пинов PDIP, 8-пинов SOIC, 20-пинов QFN/MLF и 8-пинов TSSOP (само ATtiny45/V)
Работен обемtage
– 1.8 – 5.5V за ATtiny25V/45V/85V
– 2.7 – 5.5V за ATtiny25/45/85
Скоростна степен
– ATtiny25V/45V/85V: 0 – 4 MHz при 1.8 – 5.5 V, 0 – 10 MHz при 2.7 – 5.5 V
– ATtiny25/45/85: 0 – 10 MHz при 2.7 – 5.5 V, 0 – 20 MHz при 4.5 – 5.5 V
Промишлен температурен диапазон
Ниска консумация на енергия
Активен режим:
1 MHz, 1.8 V: 300 µA
Режим на изключване:
Конфигурации на щифтове
Pinout ATtiny25/45/85
Описания на пинове
VCC: Доставка томtage.
GND: Земя.
Порт B (PB5:PB0): Порт B е 6-битов двупосочен I/O порт с вътрешни издърпващи резистори (избрани за всеки бит). Изходните буфери на порт B имат симетрични характеристики на задвижване с висока способност както за приемник, така и за източник. Като входове, щифтовете на порт B, които са външно изтеглени ниско, ще генерират ток, ако издърпващите резистори са активирани. Изводите на порт B са в три състояния, когато условието за нулиране стане активно, дори ако часовникът не работи.
Порт B също така обслужва функциите на различни специални характеристики на ATtiny25/45/85, както е посочено
На ATtiny25, програмируемите I/O портове PB3 и PB4 (щифтове 2 и 3) се разменят в режим на съвместимост ATtiny15 за поддържане на обратна съвместимост с ATtiny15.
RESET: Нулиране на входа. Ниско ниво на този щифт за по-дълго от минималната дължина на импулса ще генерира нулиране, дори ако часовникът не работи и при условие че щифтът за нулиране не е деактивиран. Минималната дължина на импулса е дадена в Таблица 21-4 на страница 165. Не е гарантирано, че по-кратките импулси ще генерират нулиране.
Пинът за нулиране може да се използва и като (слаб) I/O щифт.
крайview
ATtiny25/45/85 е CMOS 8-битов микроконтролер с ниска мощност, базиран на подобрената AVR RISC архитектура. Чрез изпълнение на мощни инструкции в един тактов цикъл, ATtiny25/45/85 постига пропускателна способност, близка до 1 MIPS на MHz, позволявайки на системния дизайнер да оптимизира консумацията на енергия спрямо скоростта на обработка.
Блок-диаграма
Ядрото на AVR съчетава богат набор от инструкции с 32 работни регистри с общо предназначение. Всички 32 регистъра са директно свързани към модула за аритметична логика (ALU), което позволява достъп до два независими регистъра в една инструкция, изпълнявана в един тактов цикъл. Получената архитектура е по-ефективна от кода, като същевременно постига производителност до десет пъти по-бърза от конвенционалните CISC микроконтролери.
ATtiny25/45/85 предоставя следните характеристики: 2/4/8K байта вътрешносистемна програмируема флаш памет, 128/256/512 байта EEPROM, 128/256/256 байта SRAM, 6 I/O линии с общо предназначение, 32 общи целеви работни регистри, един 8-битов таймер/брояч с режими на сравнение, един 8-битов високоскоростен таймер/брояч, универсален сериен интерфейс, вътрешни и външни прекъсвания, 4-канален, 10-битов ADC, програмируем Watchdog Timer с вътрешен Осцилатор и три софтуерно избираеми режима за пестене на енергия. Режимът на неактивност спира процесора, като същевременно позволява на SRAM, таймера/брояча, ADC, аналоговия компаратор и системата за прекъсване да продължат да функционират. Режимът на изключване запазва съдържанието на регистъра, дезактивирайки всички функции на чипа до следващото прекъсване или нулиране на хардуера. Режимът за намаляване на шума на ADC спира процесора и всички I/O модули с изключение на ADC, за да минимизира шума при превключване по време на преобразуването на ADC.
Устройството е произведено по технологията на Atmel за енергонезависима памет с висока плътност. Вградената в чипа ISP Flash позволява програмната памет да бъде препрограмирана вътрешносистемно чрез SPI сериен интерфейс, от конвенционален програмист за енергонезависима памет или от вграден в чип код за зареждане, работещ на ядрото на AVR.
ATtiny25/45/85 AVR се поддържа с пълен набор от инструменти за разработка на програми и системи, включително: C компилатори, асемблери на макроси, програми за дебъгер/симулатори и комплекти за оценка.
Относно ресурси
Наличен е изчерпателен набор от инструменти за разработка, бележки за приложения и таблици с данни за изтегляне http://www.atmel.com/avr.
Код Прampлес
Тази документация съдържа прост код напрampфайлове, които накратко показват как да използвате различни части на устройството. Тези кодове, напрampможе да приемем, че заглавката за частта file е включена преди компилацията. Имайте предвид, че не всички доставчици на компилатор на C включват битови дефиниции в заглавката files и обработката на прекъсвания в C зависи от компилатора. Моля, потвърдете с документацията на компилатора C за повече подробности.
За I/O регистри, разположени в разширената I/O карта, инструкциите „IN“, „OUT“, „SBIS“, „SBIC“, „CBI“ и „SBI“ трябва да бъдат заменени с инструкции, които позволяват достъп до разширен I /О. Обикновено това означава „LDS“ и „STS“ в комбинация с „SBRS“, „SBRC“, „SBR“ и „CBR“. Имайте предвид, че не всички AVR устройства включват разширена I/O карта.
Капацитивен сензорен сензор
Atmel QTouch Library предоставя лесно за използване решение за чувствителни на допир интерфейси на Atmel AVR микроконтролери. QTouch Library включва поддръжка за QTouch® и QMatrix® методи за придобиване.
Сензорът за докосване се добавя лесно към всяко приложение чрез свързване на библиотеката QTouch и използване на интерфейса за програмиране на приложения (API) на библиотеката за дефиниране на каналите за докосване и сензорите. След това приложението извиква API, за да извлече информация за канала и да определи състоянието на сензора за докосване.
Библиотеката QTouch е безплатна и може да бъде изтеглена от Atmel webсайт. За повече информация и подробности относно изпълнението вижте Ръководството за потребителя на библиотеката QTouch – също достъпно от Atmel webсайт.
Запазване на данни
Резултатите от квалификацията за надеждност показват, че прогнозираният процент на отказ при запазване на данни е много по-малък от 1 PPM за 20 години при 85°C или 100 години при 25°C.
AVR CPU ядро
Въведение
Този раздел обсъжда основната архитектура на AVR като цяло. Основната функция на ядрото на процесора е да осигури правилното изпълнение на програмата. Следователно процесорът трябва да има достъп до паметта, да извършва изчисления, да контролира периферни устройства и да обработва прекъсвания.
Архитектурно свършванеview
За да увеличи максимално производителността и паралелизма, AVR използва архитектура на Харвард – с отделни памети и шини за програма и данни. Инструкциите в програмната памет се изпълняват с конвейерна обработка на едно ниво. Докато една инструкция се изпълнява, следващата инструкция се извлича предварително от паметта на програмата. Тази концепция позволява инструкциите да се изпълняват във всеки такт. Програмната памет е вътрешносистемна препрограмируема флаш памет.
Регистърът за бърз достъп File съдържа 32 x 8-битови работни регистри с общо предназначение с време за достъп с един тактов цикъл. Това позволява работа с аритметична логическа единица (ALU) с един цикъл. При типична ALU операция от регистъра се извеждат два операнда File, операцията се изпълнява и резултатът се съхранява обратно в регистъра File– в един такт.
Шест от 32-та регистъра могат да се използват като три 16-битови указателя на индиректен адресен регистър за адресиране на пространството за данни – което позволява ефективни изчисления на адреси. Един от тези адресни указатели може също да се използва като адресен указател за таблици за търсене в паметта на Flash програмата. Тези добавени функционални регистри са 16-битовите X-, Y- и Z-регистри, описани по-нататък в този раздел.
ALU поддържа аритметични и логически операции между регистри или между константа и регистър. Операциите с единичен регистър също могат да се изпълняват в ALU. След аритметична операция регистърът на състоянието се актуализира, за да отрази информация за резултата от операцията.
Програмният поток се осигурява от условни и безусловни инструкции за прескачане и повикване, способни директно да адресират цялото адресно пространство. Повечето AVR инструкции имат единичен 16-битов формат на думата, но има и 32-битови инструкции.
По време на прекъсвания и извиквания на подпрограми адресът за връщане Program Counter (PC) се съхранява в стека. Стекът е ефективно разпределен в SRAM за общи данни и следователно размерът на стека е ограничен само от общия размер на SRAM и използването на SRAM. Всички потребителски програми трябва да инициализират SP в процедурата Reset (преди да бъдат изпълнени подпрограми или прекъсвания). Указателят на стека (SP) е достъпен за четене/запис в I/O пространството. SRAM за данни може лесно да бъде достъпен чрез петте различни режима на адресиране, поддържани в AVR архитектурата.
Пространствата на паметта в AVR архитектурата са всички линейни и редовни карти на паметта.
Модулът за гъвкаво прекъсване има своите контролни регистри в I/O пространството с допълнителен бит за разрешаване на глобално прекъсване в регистъра на състоянието. Всички прекъсвания имат отделен вектор на прекъсване в таблицата на вектора на прекъсване. Прекъсванията имат приоритет в съответствие с тяхната позиция на вектора на прекъсване. Колкото по-нисък е адресът на вектора за прекъсване, толкова по-висок е приоритетът.
I/O пространството на паметта съдържа 64 адреса за периферни функции на CPU като контролни регистри, SPI и други I/O функции. Входно/изходната памет може да бъде достъпна директно или като местоположения на пространството за данни, следващи тези на регистъра File, 0x20 – 0x5F.
ALU – Аритметично логическо устройство
Високопроизводителният AVR ALU работи в пряка връзка с всички 32 работни регистъра с общо предназначение. В рамките на един такт се изпълняват аритметични операции между регистри с общо предназначение или между регистър и незабавен. ALU операциите са разделени на три основни категории – аритметични, логически и битови функции. Някои реализации на архитектурата също предоставят мощен умножител, поддържащ както умножение със знак/без знак, така и дробен формат. Вижте раздела „Набор инструкции“ за подробно описание.
Регистър на състоянието
Регистърът на състоянието съдържа информация за резултата от последната изпълнена аритметична инструкция. Тази информация може да се използва за промяна на програмния поток с цел извършване на условни операции. Обърнете внимание, че регистърът на състоянието се актуализира след всички ALU операции, както е посочено в препратката към набора инструкции. Това в много случаи ще премахне необходимостта от използване на специални инструкции за сравнение, което ще доведе до по-бърз и по-компактен код.
Регистърът на състоянието не се съхранява автоматично при влизане в програма за прекъсване и се възстановява при връщане от прекъсване. Това трябва да се обработва от софтуер.
SREG – регистър на състоянието на AVR
Регистърът на състоянието на AVR – SREG – се определя като:
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3F | I | T | H | S | V | N | Z | C | SREG |
Четене/Писане | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит 7 – I: Разрешаване на глобално прекъсване
Битът Global Interrupt Enable трябва да бъде зададен, за да бъдат активирани прекъсванията. След това индивидуалното управление на разрешаването на прекъсването се извършва в отделни контролни регистри. Ако глобалният регистър за разрешаване на прекъсвания е изчистен, нито едно от прекъсванията не е разрешено независимо от индивидуалните настройки за разрешаване на прекъсване. I-битът се изчиства от хардуера след възникване на прекъсване и се задава от инструкцията RETI, за да позволи последващи прекъсвания. I-битът може също да бъде зададен и изчистен от приложението с инструкциите SEI и CLI, както е описано в препратката към набора инструкции.
Бит 6 – T: Съхранение на битово копие
Инструкциите за битово копиране BLD (Bit LoaD) и BST (Bit STore) използват T-бита като източник или дестинация за оперирания бит. Малко от регистър в Регистъра File може да се копира в T чрез инструкцията BST и бит в T може да се копира в бит в регистър в регистъра File по BLD инструкция.
Бит 5 – H: Флаг за половин пренос
Флагът за половин пренасяне H показва половин пренасяне в някои аритметични операции. Half Carry е полезно при BCD аритметика. Вижте “Описание на набора инструкции” за подробна информация.
Бит 4 – S: Знаков бит, S = N ⊕ V
S-битът винаги е изключителен или между отрицателния флаг N и флага за препълване на второто допълнение V. Вижте „Описание на набора инструкции“ за подробна информация.
Бит 3 – V: Флаг за препълване на комплемент на две
Флагът за препълване на комплемент на две V поддържа аритметика на комплемент на две. Вижте “Описание на набора инструкции” за подробна информация.
Бит 2 – N: Отрицателен флаг
Отрицателният флаг N показва отрицателен резултат при аритметична или логическа операция. Вижте “Описание на набора инструкции” за подробна информация.
Бит 1 – Z: Нулев флаг
Нулевият флаг Z показва нулев резултат при аритметична или логическа операция. Вижте “Описание на набора инструкции” за подробна информация.
Бит 0 – C: Флаг за пренасяне
Флагът за пренасяне C показва пренасяне в аритметична или логическа операция. Вижте “Описание на набора инструкции” за подробна информация.
Регистър с общо предназначение File
Регистърът File е оптимизиран за набора от инструкции AVR Enhanced RISC. За да се постигне необходимата производителност и гъвкавост, следните входно/изходни схеми се поддържат от регистъра File:
Един 8-битов изходен операнд и един 8-битов входен резултат
Два 8-битови изходни операнда и един 8-битов входен резултат
Два 8-битови изходни операнда и един 16-битов входен резултат
Един 16-битов изходен операнд и един 16-битов входен резултат
Фигура 4-2 показва структурата на 32 работни регистъра с общо предназначение в CPU.
Както е показано в Фигура 4-2, на всеки регистър също се присвоява адрес на паметта за данни, който ги нанася директно в първите 32 местоположения на потребителското пространство за данни. Въпреки че не е физически реализирана като местоположения на SRAM, тази организация на паметта осигурява голяма гъвкавост при достъпа до регистрите, тъй като регистрите на X-, Y- и Z-указателя могат да бъдат настроени да индексират всеки регистър в file.Повечето от инструкциите, работещи в регистъра File имат директен достъп до всички регистри и повечето от тях са инструкции за един цикъл.
X-регистър, Y-регистър и Z-регистър
Регистрите R26..R31 имат някои допълнителни функции към общото им използване. Тези регистри са 16-битови адресни указатели за индиректно адресиране на пространството от данни. Трите индиректни адресни регистъра X, Y и Z са дефинирани, както е описано в Фигура 4-3.
В различните режими на адресиране тези адресни регистри имат функции като фиксирано изместване, автоматично нарастване и автоматично намаляване (вижте препратката към набора инструкции за подробности).
Указател на стека
Стекът се използва главно за съхраняване на временни данни, за съхраняване на локални променливи и за съхраняване на адреси за връщане след прекъсвания и извиквания на подпрограми. Регистърът на указателя на стека винаги сочи към върха на стека. Имайте предвид, че стекът се реализира като нарастващ от по-високи места в паметта към по-ниски места в паметта. Това означава, че командата Stack PUSH намалява указателя на стека.
Указателят на стека сочи към областта на стека на SRAM с данни, където се намират стековете за подпрограма и прекъсване. Това пространство на стека в SRAM за данни трябва да бъде дефинирано от програмата, преди да бъдат изпълнени извиквания на подпрограми или да бъдат активирани прекъсвания. Указателят на стека трябва да бъде настроен да сочи над 0x60. Указателят на стека се намалява с единица, когато данните се избутват в стека с инструкцията PUSH, и се намалява с две, когато адресът за връщане се избутва в стека с извикване на подпрограма или прекъсване. Указателят на стека се увеличава с единица, когато данните се изваждат от стека с инструкцията POP, и се увеличава с две, когато данните се изваждат от стека с връщане от подпрограма RET или връщане от прекъсване RETI.
AVR Stack Pointer е реализиран като два 8-битови регистъра в I/O пространството. Броят на действително използваните битове зависи от изпълнението. Имайте предвид, че пространството за данни в някои реализации на AVR архитектурата е толкова малко, че е необходим само SPL. В този случай SPH регистърът няма да присъства.
SPH и SPL — регистър на указателя на стека
малко | 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 | ||
Четене/Писане | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Четене/Писане | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Първоначална стойност | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД | |
Първоначална стойност | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД | РАМЕНД |
Време за изпълнение на инструкциите
Този раздел описва общите концепции за синхронизиране на достъпа за изпълнение на инструкции. AVR процесорът се задвижва от часовника на процесора clkCPU, директно генериран от избрания източник на часовник за чипа. Не се използва вътрешно деление на часовника.
Фигура 4-4 показва паралелното извличане на инструкции и изпълнение на инструкции, активирани от архитектурата на Харвард и регистъра за бърз достъп File концепция. Това е основната концепция за конвейер за получаване на до 1 MIPS на MHz със съответните уникални резултати за функции за цена, функции за тактове и функции за мощност.
Фигура 4-5. ALU операция с един цикъл
Нулиране и обработка на прекъсвания
AVR осигурява няколко различни източника на прекъсване. Тези прекъсвания и отделният вектор за нулиране имат отделен програмен вектор в пространството на програмната памет. На всички прекъсвания се присвояват индивидуални разрешаващи битове, които трябва да бъдат записани като логическа единица заедно с глобалния бит за разрешаване на прекъсване в регистъра на състоянието, за да се разреши прекъсването.
Най-ниските адреси в пространството на програмната памет са дефинирани по подразбиране като вектори за нулиране и прекъсване. Пълният списък с вектори е показан в “Прекъсвания” на страница 48. Списъкът също така определя нивата на приоритет на различните прекъсвания. Колкото по-нисък е адресът, толкова по-високо е нивото на приоритет. RESET има най-висок приоритет, а следващият е INT0 – заявката за външно прекъсване 0.
Когато възникне прекъсване, I-битът за разрешаване на глобално прекъсване се изчиства и всички прекъсвания се забраняват. Потребителският софтуер може да запише логическа единица в I-бита, за да активира вложени прекъсвания. След това всички разрешени прекъсвания могат да прекъснат текущата процедура за прекъсване. I-битът се задава автоматично, когато се изпълни инструкция за връщане от прекъсване – RETI.
Има основно два вида прекъсвания. Първият тип се задейства от събитие, което задава флага за прекъсване. За тези прекъсвания програмният брояч се векторизира към действителния вектор на прекъсване, за да се изпълни рутинната процедура за обработка на прекъсванията, а хардуерът изчиства съответния флаг за прекъсване. Флаговете за прекъсване могат също да бъдат изчистени чрез записване на логическа единица в позицията(ите) на флага за изчистване. Ако възникне условие за прекъсване, докато съответният бит за разрешаване на прекъсване е изчистен, флагът за прекъсване ще бъде зададен и запомнен, докато прекъсването бъде разрешено или флагът бъде изчистен от софтуера. По същия начин, ако се появят едно или повече условия на прекъсване, докато битът за разрешаване на глобално прекъсване е изчистен, съответният(ите) флаг(ове) за прекъсване ще бъдат зададени и запомнени, докато битът за разрешаване на глобално прекъсване не бъде зададен, и след това ще се изпълни по ред на приоритет.
Вторият тип прекъсвания ще се задействат, докато е налице условието за прекъсване. Тези прекъсвания не е задължително да имат флагове за прекъсване. Ако условието за прекъсване изчезне преди прекъсването да бъде разрешено, прекъсването няма да бъде задействано.
Когато AVR излезе от прекъсване, той винаги ще се върне към основната програма и ще изпълни още една инструкция, преди да бъде обслужено чакащо прекъсване.
Обърнете внимание, че регистърът на състоянието не се съхранява автоматично при влизане в програма за прекъсване, нито се възстановява при връщане от процедура за прекъсване. Това трябва да се обработва от софтуер.
Когато използвате CLI инструкцията за деактивиране на прекъсвания, прекъсванията ще бъдат незабавно деактивирани. Няма да се изпълни прекъсване след CLI инструкцията, дори ако се появи едновременно с CLI инструкцията. Следният примерample показва как това може да се използва за избягване на прекъсвания по време на времевата последователност за запис на EEPROM.
Код за сглобяване Прample |
в r16, SREG; съхранява SREG стойност
cli; забранете прекъсванията по време на времева последователност sbi EECR, EEMPE; започнете запис на EEPROM sbi EECR, EEPE изходящ SREG, r16; възстановяване на SREG стойност (I-бит) |
C Код Прample |
char cSREG;
cSREG = SREG; /* съхранява SREG стойност */ /* деактивиране на прекъсванията по време на времева последователност */ _CLI(); EECR |= (1< EECR |= (1< SREG = cSREG; /* възстановяване на SREG стойност (I-бит) */ |
Когато използвате инструкцията SEI за разрешаване на прекъсвания, инструкцията след SEI ще бъде изпълнена преди чакащите прекъсвания, както е показано в този примерampле.
Код за сглобяване Прample |
сей ; задайте Global Interrupt Enable
сън; влезте в режим на заспиване, чакайки прекъсване ; забележка: ще влезе в режим на заспиване преди всеки чакащ ; прекъсване(я) |
C Код Прample |
_SEI(); /* задаване на глобално разрешаване на прекъсване */
_SLEEP(); /* влизане в режим на заспиване, чакане на прекъсване */ /* забележка: ще влезе в режим на заспиване преди всяко чакащо прекъсване(я) */ |
Време за реакция на прекъсване
Отговорът за изпълнение на прекъсване за всички разрешени AVR прекъсвания е минимум четири тактови цикъла. След четири тактови цикъла се изпълнява адресът на програмния вектор за действителната рутинна обработка на прекъсванията. По време на този период от четири часовникови цикъла програмният брояч се избутва в стека. Векторът обикновено е скок към рутинната програма за прекъсване и този скок отнема три тактови цикъла. Ако възникне прекъсване по време на изпълнение на многоциклова инструкция, тази инструкция е завършена преди прекъсването да бъде обслужено. Ако възникне прекъсване, когато MCU е в режим на заспиване, времето за реакция на изпълнение на прекъсването се увеличава с четири тактови цикъла. Това увеличение идва в допълнение към времето за стартиране от избрания режим на заспиване.
Връщането от рутинна процедура за обработка на прекъсвания отнема четири тактови цикъла. По време на тези четири тактови цикъла програмният брояч (два байта) се изважда обратно от стека, указателят на стека се увеличава с две и I-битът в SREG се задава.
AVR памети
Този раздел описва различните памети в ATtiny25/45/85. Архитектурата на AVR има две основни пространства на паметта, паметта за данни и пространството на програмната памет. В допълнение, ATtiny25/45/85 разполага с EEPROM памет за съхранение на данни. И трите пространства на паметта са линейни и правилни.
Вътрешносистемна препрограмируема флаш програмна памет
ATtiny25/45/85 съдържа 2/4/8K байта вградена в системата препрограмируема флаш памет за програмно съхранение. Тъй като всички AVR инструкции са с ширина 16 или 32 бита, Flash е организиран като 1024/2048/4096 x 16.
Флаш паметта има издръжливост от поне 10,000 25 цикъла на запис/изтриване. Програмният брояч (PC) ATtiny45/85/10 е 11/12/1024 бита широк, като по този начин адресира 2048/4096/XNUMX програмни памети. „Програма за памет- ming” на страница 147 съдържа подробно описание на серийното изтегляне на Flash данни с помощта на SPI щифтовете.
Константните таблици могат да бъдат разпределени в рамките на цялото адресно пространство на паметта на програмата (вижте описанието на инструкциите за LPM – Зареждане на паметта на програмата).
Фигура 5-1. Карта на програмната памет
Памет за данни SRAM
Фигура 5-2 показва как е организирана паметта ATtiny25/45/85 SRAM.
По-ниските 224/352/607 местоположения на паметта за данни адресират както регистъра File, I/O паметта и вътрешния SRAM за данни. Първите 32 локации адресират регистъра File, следващите 64 местоположения са стандартната I/O памет, а последните 128/256/512 местоположения адресират вътрешния SRAM за данни.
Петте различни режима на адресиране за паметта за данни обхващат: Директно, Индиректно с изместване, Индиректно, Индиректно с предварително намаляване и Индиректно с последващо увеличение. В регистъра File, регистрите R26 до R31 включват регистрите на указателя за непряко адресиране.
Директното адресиране достига до цялото пространство от данни.
Режимът Indirect with Displacement достига до 63 адресни местоположения от основния адрес, даден от Y- или Z- регистъра.
Когато се използват режими на индиректно адресиране на регистъра с автоматично предварително намаляване и последващо увеличение, адресните регистри X, Y и Z се намаляват или увеличават.
32-те работни регистъра с общо предназначение, 64 I/O регистъра и 128/256/512 байта вътрешни данни SRAM в ATtiny25/45/85 са достъпни чрез всички тези режими на адресиране. Регистърът File е описано в „Ген- Регистър за целите File”На страница 10.
Фигура 5-2. Карта на паметта на данните
Достъп до паметта за данни пъти
Този раздел описва общите концепции за времето за достъп за достъп до вътрешна памет. Достъпът до SRAM вътрешните данни се извършва в два цикъла clkCPU, както е описано в Фигура 5-3.
Фигура 5-3. Цикли на достъп до SRAM данни в чип EEPROM памет за данни
ATtiny25/45/85 съдържа 128/256/512 байта EEPROM памет с данни. Той е организиран като отделно пространство за данни, в което могат да се четат и записват отделни байтове. EEPROM има издръжливост от поне 100,000 XNUMX цикъла на запис/изтриване. Достъпът между EEPROM и процесора е описан по-долу, като се уточняват адресните регистри на EEPROM, регистърът на данните на EEPROM и контролният регистър на EEPROM. За подробности вж “Серийно изтегляне” на страница 151.
EEPROM достъп за четене/запис
Регистрите за достъп до EEPROM са достъпни в I/O пространството.
Времената за достъп до запис за EEPROM са дадени в Таблица 5-1 на страница 21. Функцията за самонастройка обаче позволява на потребителския софтуер да открие кога следващият байт може да бъде записан. Ако потребителският код съдържа инструкции, които записват EEPROM, трябва да се вземат някои предпазни мерки. При силно филтрирани захранвания, VCC е вероятно да се повиши или да спадне бавно
Включване/намаляване. Това кара устройството за известен период от време да работи на обемtage по-ниска от определената като минимална за използваната тактова честота. Вижте “Предотвратяване на повреда на EEPROM” на страница 19 за подробности как да избегнете проблеми в тези ситуации.
За да се предотврати неволно записване на EEPROM, трябва да се следва специфична процедура за запис. Препоръчай на „Атомно Програмиране на байтове” на страница 17 и “Програмиране на разделен байт” на страница 17 за подробности относно това.
Когато EEPROM се чете, процесорът спира за четири тактови цикъла, преди да се изпълни следващата инструкция. Когато EEPROM се записва, процесорът спира за два тактови цикъла, преди да се изпълни следващата инструкция.
Програмиране на атомни байтове
Използването на атомно байтово програмиране е най-простият режим. Когато записва байт в EEPROM, потребителят трябва да запише адреса в регистъра EEAR и данните в регистъра EEDR. Ако битовете EEPMn са нула, записът на EEPE (в рамките на четири цикъла след записването на EEMPE) ще задейства операцията за изтриване/запис. Както цикълът на изтриване, така и цикълът на запис се извършват в една операция и е дадено общото време за програмиране Таблица 5-1 на страница 21. Битът EEPE остава зададен, докато не завършат операциите по изтриване и запис. Докато устройството е заето с програмиране, не е възможно да се извършват други операции с EEPROM.
Програмиране с разделен байт
Възможно е да разделите цикъла на изтриване и запис на две различни операции. Това може да е полезно, ако системата изисква кратко време за достъп за някакъв ограничен период от време (обикновено ако захранването voltage пада). За да вземете напред- tage на този метод се изисква местата за запис да са изтрити преди операцията за запис. Но тъй като операциите за изтриване и запис са разделени, е възможно да се извършват операциите за изтриване, когато системата позволява извършването на критични за времето операции (обикновено след включване).
Изтриване
За да изтриете байт, адресът трябва да бъде записан в EEAR. Ако битовете EEPMn са 0b01, записването на EEPE (в рамките на четири цикъла след записването на EEMPE) ще задейства само операцията по изтриване (времето за програмиране е дадено в Таблица 5-1 на страница 21). Битът EEPE остава зададен, докато операцията по изтриване завърши. Докато устройството е заето с програмиране, не е възможно да се извършват други операции с EEPROM.
Пишете
За да напише местоположение, потребителят трябва да запише адреса в EEAR и данните в EEDR. Ако битовете EEPMn са 0b10, записването на EEPE (в рамките на четири цикъла след записването на EEMPE) ще задейства само операцията за запис (времето за програмиране е дадено в Таблица 5-1 на страница 21). Битът EEPE остава зададен, докато операцията по запис завърши. Ако мястото за запис не е изтрито преди записа, съхранените данни трябва да се считат за изгубени. Докато устройството е заето с програмиране, не е възможно да се извършват други операции с EEPROM.
Калибрираният осцилатор се използва за време на достъп до EEPROM. Уверете се, че честотата на осцилатора е в рамките на изискванията, описани в “OSCCAL – Регистър за калибриране на осцилатора” на страница 31.
Следният код напрamples показват едно сглобяване и една C функция за изтриване, запис или атомарно записване на EEPROM. Бившиятamples предполагат, че прекъсванията се контролират (напр. чрез глобално забраняване на прекъсванията), така че да няма прекъсвания по време на изпълнение на тези функции.
Код за сглобяване Прample |
EEPROM_запис:
; Изчакайте завършването на предишното писане sbic EECR,EEPE rjmp EEPROM_запис ; Задайте режим на програмиране ldi r16, (0<<EEPM1)|(0<<EEPM0) извън EECR, r16 ; Настройте адрес (r18:r17) в адресния регистър извън EEARH, r18 извън EEARL, r17 ; Запишете данни (r19) в регистъра на данните извън EEDR, r19 ; Напишете логическа единица на EEMPE sbi EECR,EEMPE ; Стартирайте записа в eeprom, като зададете EEPE sbi EECR,EEPE ret |
C Код Прample |
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
{ /* Изчакайте завършването на предишния запис */ while(EECR & (1< ; /* Задайте режим на програмиране */ EECR = (0< /* Настройване на регистри за адреси и данни */ EEAR = ucAddress; EEDR = ucData; /* Пише логическа единица в EEMPE */ EECR |= (1< /* Стартиране на запис на eeprom чрез настройка на EEPE */ EECR |= (1< } |
Следващият код напрamples show asembler и C функции за четене на EEPROM. Бившиятamples предполагат, че прекъсванията се контролират, така че да няма прекъсвания по време на изпълнение на тези функции.
Код за сглобяване Прample |
EEPROM_четене:
; Изчакайте завършването на предишното писане sbic EECR,EEPE rjmp EEPROM_четене ; Настройте адрес (r18:r17) в адресния регистър извън EEARH, r18 извън EEARL, r17 ; Започнете четене на eeprom, като напишете EERE sbi EECR,EERE ; Прочетете данни от регистъра на данните в r16, EEDR ret |
C Код Прample |
unsigned char EEPROM_read(unsigned char ucAddress)
{ /* Изчакайте завършването на предишния запис */ докато (EECR & (1< ; /* Настройка на адресния регистър */ EEAR = ucAddress; /* Стартирайте четенето на eeprom, като напишете EERE */ EECR |= (1< /* Връща данни от регистър на данни */ връщане на EEDR; } |
Предотвратяване на повреда на EEPROM
По време на периоди на нисък VCC, EEPROM данните могат да бъдат повредени, защото захранващият обемtage е твърде ниско, за да работят правилно процесорът и EEPROM. Тези проблеми са същите като при системи на ниво платка, използващи EEPROM, и трябва да се прилагат същите дизайнерски решения.
Повредата на данни в EEPROM може да бъде причинена от две ситуации, когато voltage е твърде ниско. Първо, редовната последователност на запис в EEPROM изисква минимален обемtage да работи правилно. Второ, самият процесор може да изпълни инструкциите неправилно, ако захранващият обемtage е твърде ниско.
Повредата на данните в EEPROM може лесно да бъде избегната, като следвате тази препоръка за проектиране:
Поддържайте AVR RESET активен (нисък) по време на периоди на недостатъчно захранване voltagд. Това може да бъде направено чрез активиране на вътрешния детектор за изчерпан цвят (BOD). Ако нивото на откриване на вътрешния BOD не съвпада с
необходимото ниво на откриване, може да се използва външна верига за защита при нулиране при нисък VCC. Ако възникне нулиране, докато се извършва операция по запис, операцията по запис ще бъде завършена, при условие че захранването voltagд е достатъчно.
I/O памет
Дефиницията на I/O пространството на ATtiny25/45/85 е показана в „Резюме на регистъра“ на страница 200.
Всички I/O и периферни устройства на ATtiny25/45/85 са поставени в I/O пространството. Всички входно/изходни местоположения могат да бъдат достъпни чрез LD/LDS/LDD и ST/STS/STD инструкции, прехвърлящи данни между 32-те работни регистъра с общо предназначение и I/O пространството. I/O регистрите в адресния диапазон 0x00 – 0x1F са директно битово достъпни с помощта на инструкциите SBI и CBI. В тези регистри стойността на единичните битове може да се провери с помощта на инструкциите SBIS и SBIC. Обърнете се към раздела за набор от инструкции за повече подробности. Когато използвате I/O специфични команди IN и OUT, трябва да се използват I/O адреси 0x00 – 0x3F. При адресиране на I/O регистри като пространство за данни с помощта на LD и ST инструкции, 0x20 трябва да се добави към тези адреси.
За съвместимост с бъдещи устройства, запазените битове трябва да бъдат записани на нула, ако имат достъп. Запазените адреси за I / O памет никога не трябва да се записват.
Някои от флаговете за състояние се изчистват чрез записване на логическа единица към тях. Обърнете внимание, че инструкциите CBI и SBI ще работят само върху посочения бит и следователно могат да се използват в регистри, съдържащи такива флагове за състояние. Инструкциите CBI и SBI работят само с регистри от 0x00 до 0x1F.
Регистрите за управление на I/O и периферните устройства са обяснени в следващите раздели.
Описание на регистъра
EEARH – EEPROM адресен регистър
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1F | – | – | – | – | – | – | – | EEAR8 | EEARH |
Четене/Писане | R | R | R | R | R | R | R | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | X/0 |
Битове 7:1 – Res: Запазени битове
Тези битове са запазени за бъдеща употреба и винаги ще се четат като нула.
Битове 0 – EEAR8: EEPROM адрес
Това е най-значимият EEPROM адресен бит на ATtiny85. В устройства с по-малко EEPROM, т.е. ATtiny25/ATtiny45, този бит е запазен и винаги ще чете нула. Първоначалната стойност на EEPROM адресния регистър (EEAR) е недефинирана и следователно трябва да се запише правилна стойност, преди да се осъществи достъп до EEPROM.
EEARL – EEPROM адресен регистър
малко
0x1E | EEAR7 | EEAR6 | EEAR5 | EEAR4 | EEAR3 | EEAR2 | EEAR1 | EEAR0 | EEARL |
Отзад/Писане | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Първоначална стойност | X | X | X | X | X | X | X | X |
Бит 7 – EEAR7: EEPROM адрес
Това е най-значимият EEPROM адресен бит на ATtiny45. В устройства с по-малко EEPROM, т.е. ATtiny25, този бит е запазен и винаги ще чете нула. Първоначалната стойност на адресния регистър на EEPROM (EEAR) е недефинирана и следователно трябва да се запише правилна стойност, преди да се осъществи достъп до EEPROM.
Битове 6:0 – EEAR[6:0]: EEPROM адрес
Това са (ниските) битове на EEPROM адресния регистър. Байтовете данни на EEPROM се адресират линейно в диапазона 0…(128/256/512-1). Първоначалната стойност на EEAR е недефинирана и следователно трябва да се запише правилна стойност, преди да може да се осъществи достъп до EEPROM.
EEDR – EEPROM регистър на данни
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1D | EEDR7 | EEDR6 | EEDR5 | EEDR4 | EEDR3 | EEDR2 | EEDR1 | EEDR0 | EEDR |
Четене/Писане | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
За операцията по запис на EEPROM регистърът EEDR съдържа данните, които трябва да бъдат записани в EEPROM на адреса, даден от регистъра EEAR. За операцията по четене на EEPROM, EEDR съдържа данните, прочетени от
EEPROM на адреса, даден от EEAR.
5.5.4 EECR – Контролен регистър на EEPROM |
|||||||||
Битове 7 6 5 | 4 | 3 | 2 | 1 | 0 | ||||
0x1C – | – | EEPM1 | EEPM0 | ЗЛОВЕНО | EEMPE | EEPE | EERE | EECR | |
Четене/запис R R R/W | R/W | R/W | R/W | R/W | R/W | ||||
Първоначална стойност 0 0 X | X | 0 | 0 | X | 0 |
Бит 7 – Res: Запазен бит
Този бит е запазен за бъдеща употреба и винаги ще се чете като 0 в ATtiny25/45/85. За съвместимост с бъдещи AVR устройства, винаги записвайте този бит на нула. След като прочетете, маскирайте тази част.
Бит 6 – Res: Запазен бит
Този бит е запазен в ATtiny25/45/85 и винаги ще се чете като нула.
Битове 5:4 – EEPM[1:0]: Битове за режим на програмиране на EEPROM
Настройката на битовете за режим на програмиране на EEPROM определя кое програмно действие ще бъде задействано при запис на EEPE. Възможно е да програмирате данни в една атомна операция (изтриване на старата стойност и програмиране на новата стойност) или да разделите операциите Изтриване и Запис на две различни операции. Времената за програмиране за различните режими са показани в Таблица 5-1. Докато EEPE е зададено, всяко писане в EEPMn ще бъде игнорирано. По време на нулиране битовете EEPMn ще бъдат нулирани на 0b00, освен ако EEPROM не е заета с програмиране.
Таблица 5-1. Битове за режим EEPROM
EEPM1 | EEPM0 | Време за програмиране | Операция |
0 | 0 | 3.4 ms | Изтриване и записване с една операция (атомна операция) |
0 | 1 | 1.8 ms | Само изтриване |
1 | 0 | 1.8 ms | Пишете само |
1 | 1 | – | Запазено за бъдеща употреба |
Бит 3 – EERIE: EEPROM Ready Interrupt Enable
Записването на EERIE в едно активира EEPROM Ready Interrupt, ако I-битът в SREG е зададен. Записването на EERIE на нула деактивира прекъсването. EEPROM Ready Interrupt генерира постоянно прекъсване, когато енергонезависимата памет е готова за програмиране.
Бит 2 – EEMPE: Разрешаване на главната програма на EEPROM
Битът EEMPE определя дали записването на EEPE към един ще има ефект или не.
Когато е зададен EEMPE, настройката на EEPE в рамките на четири тактови цикъла ще програмира EEPROM на избрания адрес. Ако EEMPE е нула, настройката на EEPE няма да има ефект. Когато EEMPE е записан в единица от софтуера, хардуерът изчиства бита до нула след четири тактови цикъла.
Бит 1 – EEPE: Разрешаване на EEPROM програма
Сигналът за активиране на програмата EEPROM EEPE е сигналът за разрешаване на програмирането към EEPROM. Когато се запише EEPE, EEPROM ще бъде програмиран според настройката на битовете EEPMn. Битът EEMPE трябва да бъде записан в единица, преди да се запише логическа единица в EEPE, в противен случай не се извършва запис на EEPROM. Когато времето за достъп за запис изтече, битът EEPE се изчиства от хардуера. Когато EEPE е зададено, процесорът спира за два цикъла, преди да се изпълни следващата инструкция.
Бит 0 – EERE: Разрешено четене на EEPROM
Сигналът за разрешаване на четене на EEPROM – EERE – е светкавицата за четене към EEPROM. Когато правилният адрес е зададен в регистъра EEAR, битът EERE трябва да бъде записан в единица, за да задейства четенето на EEPROM. Достъпът за четене на EEPROM отнема една инструкция и исканите данни са налични незабавно. Когато EEPROM се чете, процесорът спира за четири цикъла, преди да се изпълни следващата инструкция. Потребителят трябва да поиска EEPE бита, преди да започне операцията по четене. Ако се извършва операция по запис, не е възможно нито да се прочете EEPROM, нито да се промени регистърът EEAR.
Системен часовник и опции за часовника
Часовникови системи и тяхното разпространение
Часовник на процесора
Часовникът на процесора се насочва към части от системата, свързани с работата на ядрото на AVR. Прampфайловете на такива модули са регистърът с общо предназначение File, регистъра на състоянието и паметта за данни, съдържаща указателя на стека. Спирането на часовника на процесора възпрепятства ядрото да извършва общи операции и изчисления.
I/O часовник – clkI/O
I/O часовникът се използва от повечето I/O модули, като таймер/брояч. I/O часовникът също се използва от модула за външно прекъсване, но имайте предвид, че някои външни прекъсвания се откриват от асинхронна логика, което позволява такива прекъсвания да бъдат открити дори ако I/O часовникът е спрян.
Флаш часовник – clkFLASH
Flash часовникът контролира работата на Flash интерфейса. Флаш часовникът обикновено е активен едновременно с часовника на процесора.
ADC часовник – clkADC
ADC е снабден със специален тактов домейн. Това позволява спиране на CPU и I/O часовниците, за да се намали шумът, генериран от цифровите схеми. Това дава по-точни резултати от ADC преобразуване.
Вътрешен PLL за генериране на бърз периферен часовник – clkPCK
Вътрешният PLL в ATtiny25/45/85 генерира тактова честота, която е 8x умножена от входен източник. По подразбиране PLL използва изхода на вътрешния 8.0 MHz RC осцилатор като източник. Като алтернатива, ако е зададен бит LSM на PLLCSR, PLL ще използва изхода на RC осцилатора, разделен на две. Така изходът на PLL, бързият периферен часовник е 64 MHz. Бързият периферен часовник или часовник, предварително мащабиран от него, може да бъде избран като източник на часовник за Timer/Counter1 или като системен часовник. Вижте Фигура 6-2. Честотата на бързия периферен часовник се дели на две, когато е зададен LSM на PLLCSR, което води до тактова честота от 32 MHz. Имайте предвид, че LSM не може да бъде зададен, ако PLLCLK се използва като системен часовник.
Фигура 6-2. PCK тактова система.
PLL е заключен на RC осцилатора и регулирането на RC осцилатора чрез OSCCAL регистър ще коригира едновременно бързия периферен часовник. Въпреки това, дори ако RC осцилаторът е настроен на по-висока честота от 8 MHz, бързата периферна тактова честота се насища при 85 MHz (в най-лошия случай) и остава да осцилира на максималната честота. Трябва да се отбележи, че PLL в този случай вече не е заключен с часовника на RC осцилатора. Поради това се препоръчва да не се правят корекции на OSCCAL на по-висока честота от 8 MHz, за да се поддържа PLL в правилния работен диапазон.
Вътрешният PLL е активиран, когато:
Битът PLLE в регистъра PLLCSR е зададен.
Предпазителят CKSEL е програмиран на '0001'.
Предпазителят CKSEL е програмиран на '0011'.
PLLCSR битът PLOCK е зададен, когато PLL е заключен. Както вътрешният RC осцилатор, така и PLL са изключени в режим на изключване и в режим на готовност.
Вътрешен PLL в режим на съвместимост с ATtiny15
Тъй като ATtiny25/45/85 е устройство за миграция за потребители на ATtiny15, има режим на съвместимост с ATtiny15 за обратна съвместимост. Режимът на съвместимост ATtiny15 се избира чрез програмиране на предпазителите CKSEL на '0011'.
В режим на съвместимост ATtiny15 честотата на вътрешния RC осцилатор е калибрирана до 6.4 MHz и коефициентът на умножение на PLL е настроен на 4x. Вижте Фигура 6-3. С тези настройки тактовата система е съвместима с ATtiny15 и полученият бърз периферен часовник има честота от 25.6 MHz (същата като в ATtiny15).
Фигура 6-3. PCK тактова система в режим на съвместимост с ATtiny15.
Източници на часовника
Устройството има следните опции за източник на часовник, избираеми чрез битове Flash Fuse, както е показано по-долу. Часовникът от избрания източник се въвежда в тактовия генератор на AVR и се насочва към съответните модули.
Таблица 6-1. Опции за часовник на устройството Изберете
Опция за часовник на устройството | CKSEL[3:0](1) |
Външен часовник (виж страница 26) | 0000 |
Високочестотен PLL часовник (виж страница 26) | 0001 |
Калибриран вътрешен осцилатор (виж страница 27) | 0010(2) |
Калибриран вътрешен осцилатор (виж страница 27) | 0011(3) |
Вътрешен 128 kHz осцилатор (виж страница 28) | 0100 |
Нискочестотен кристален осцилатор (виж страница 29) | 0110 |
Кристален осцилатор/керамичен резонатор (виж страница 29) | 1000 – 1111 |
Запазено | 0101, 0111 |
За всички предпазители “1” означава непрограмиран, докато “0” означава програмиран.
Устройството се доставя с избрана тази опция.
Това ще избере ATtiny15 Compatibility Mode, където системният часовник е разделен на четири, което води до 1.6 MHz тактова честота. За повече информация вижте “Калибриран вътрешен осцилатор” на страница 27.
Различните възможности за избор за всяка опция за часовник са дадени в следващите раздели. Когато процесорът се събуди след изключване, избраният източник на часовник се използва за време на стартиране, като се гарантира стабилна работа на осцилатора, преди да започне изпълнението на инструкциите. Когато процесорът стартира от нулиране, има допълнително забавяне, което позволява на захранването да достигне стабилно ниво, преди да започне нормална работа. Осцилаторът Watchdog се използва за измерване на тази част в реално време от времето за стартиране. Броят цикли на WDT осцилатора, използвани за всяко изчакване, е показан в Таблица 6-2.
Таблица 6-2. Брой цикли на Watchdog Oscillator
Въведете Изчакване | Брой цикли |
4 ms | 512 |
64 ms | 8K (8,192) |
Външен часовник
За да управлявате устройството от външен източник на часовник, CLKI трябва да се управлява, както е показано в Фигура 6-4. За да работи устройството с външен часовник, CKSEL предпазителите трябва да бъдат програмирани на „00“.
Фигура 6-4. Конфигурация на външно часовниково устройство
Когато е избран този източник на часовник, времената за стартиране се определят от SUT предпазителите, както е показано в Таблица 6-3.
Таблица 6-3. Времена за стартиране за избор на външен часовник
СУТ [1:0] | Време за стартиране след изключване | Допълнително забавяне от нулиране | Препоръчителна употреба |
00 | 6 CK | 14CK | BOD активиран |
01 | 6 CK | 14CK + 4 ms | Бързо нарастваща мощност |
10 | 6 CK | 14CK + 64 ms | Бавно нарастваща мощност |
11 | Запазено |
Когато се прилага външен часовник, е необходимо да се избягват внезапни промени в приложената тактова честота, за да се осигури стабилна работа на MCU. Вариация в честотата с повече от 2% от един часовников цикъл до следващия може да доведе до непредсказуемо поведение. Изисква се да се гарантира, че MCU се поддържа в Нулиране по време на такива промени в тактовата честота.
Имайте предвид, че предварителната продажба на системния часовник може да се използва за внедряване на промени по време на изпълнение на вътрешната тактова честота, като същевременно се гарантира стабилна работа. Препоръчай на „Предварителен мащабер на системния часовник“ на страница 31 за подробности.
Високочестотен PLL часовник
Има вътрешен PLL, който осигурява номинално 64 MHz тактова честота, заключена към RC осцилатора за използване на периферния таймер/брояч1 и за източника на системния часовник. Когато е избран като източник на системен часовник, чрез програмиране на CKSEL предпазителите на '0001', той се разделя на четири, както е показано на Таблица 6-4.
Таблица 6-4. Работни режими на високочестотен PLL часовник
CKSEL[3:0] | Номинална честота |
0001 | 16 MHz |
Когато е избран този източник на часовник, времената за стартиране се определят от предпазителите на SUT, както е показано в Таблица 6-5.
Таблица 6-5. Времена за стартиране на високочестотния PLL часовник
СУТ [1:0] | Време за стартиране след изключване | Допълнително забавяне от нулиране при включване (VCC = 5.0 V) | Препоръчителна употреба |
00 | 14CK + 1K (1024) CK + 4 ms | 4 ms | BOD активиран |
Таблица 6-5. Времена за стартиране на високочестотния PLL часовник
СУТ [1:0] | Време за стартиране след изключване | Допълнително забавяне от нулиране при включване (VCC = 5.0 V) | Препоръчителна употреба |
01 | 14CK + 16K (16384) CK + 4 ms | 4 ms | Бързо нарастваща мощност |
10 | 14CK + 1K (1024) CK + 64 ms | 4 ms | Бавно нарастваща мощност |
11 | 14CK + 16K (16384) CK + 64 ms | 4 ms | Бавно нарастваща мощност |
Калибриран вътрешен осцилатор
По подразбиране вътрешният RC осцилатор осигурява тактова честота от приблизително 8.0 MHz. Въпреки че обtage и зависим от температурата, този часовник може да бъде много точно калибриран от потребителя. Вижте „Калибриран вътрешен RC осцилатор пикантен” на страница 164 и “Скорост на вътрешния осцилатор” на страница 192 за повече информация. Устройството се доставя с програмиран предпазител CKDIV8. Вижте „Предварителен мащабер на системния часовник“ на страница 31 за повече подробности.
Този часовник може да бъде избран като системен часовник чрез програмиране на предпазителите CKSEL, както е показано в Таблица 6-6 на страница
27. Ако е избрано, то ще работи без външни компоненти. По време на нулиране хардуерът зарежда предварително програмираната стойност за калибриране в OSCCAL регистъра и по този начин автоматично калибрира RC осцилатора. Точността на това калибриране е показана като фабрично калибриране в Таблица 21-2 на страница 164.
Чрез промяна на регистъра OSCCAL от SW, вижте “OSCCAL – Регистър за калибриране на осцилатора” на страница 31, възможно е да получите по-висока точност на калибриране, отколкото при използване на фабрично калибриране. Точността на това калибриране се показва като Потребителско калибриране в Таблица 21-2 на страница 164.
Когато този осцилатор се използва като часовник на чипа, Watchdog осцилаторът все още ще се използва за Watchdog Timer и за Reset Time-out. За повече информация относно предварително програмираната стойност на калибриране вижте раздела „Кали- брашън байтове” на страница 150.
Вътрешният осцилатор може също да бъде настроен да осигурява тактова честота от 6.4 MHz чрез записване на CKSEL предпазители на „0011“, както е показано в Таблица 6-6 По-долу. Тази настройка се нарича ATtiny15 Compatibility Mode и има за цел да осигури калибриран часовников източник на 6.4 MHz, както в ATtiny15. В режим на съвместимост ATtiny15 PLL използва вътрешния осцилатор, работещ на 6.4 MHz, за да генерира 25.6 MHz периферен тактов сигнал за Timer/Counter1 (вижте “8-битов таймер/брояч1 в Режим ATtiny15” на страница 95). Имайте предвид, че в този режим на работа 6.4 MHz тактов сигнал винаги се разделя на четири, осигурявайки 1.6 MHz системен часовник.
Таблица 6-6. Режими на работа на вътрешен калибриран RC осцилатор
CKSEL[3:0] | Номинална честота |
0010(1) | 8.0 MHz |
0011(2) | 6.4 MHz |
Устройството се доставя с избрана тази опция.
Тази настройка ще избере режим на съвместимост ATtiny15, където системният часовник е разделен на четири, което води до 1.6 MHz тактова честота.
Когато калибрираният 8 MHz вътрешен осцилатор е избран като източник на часовник, времената за стартиране се определят от SUT предпазителите, както е показано в Таблица 6-7 по-долу.
Таблица 6-7. Времена за стартиране на вътрешен калибриран RC осцилаторен часовник
СУТ [1:0] | Време за стартиране след изключване | Допълнително забавяне от нулиране (VCC = 5.0V) | Препоръчителна употреба |
00 | 6 CK | 14CK(1) | BOD активиран |
01 | 6 CK | 14CK + 4 ms | Бързо нарастваща мощност |
10(2) | 6 CK | 14CK + 64 ms | Бавно нарастваща мощност |
11 | Запазено |
1. Ако предпазителят RSTDISBL е програмиран, това време за стартиране ще бъде увеличено до 14CK + 4 ms, за да се гарантира, че може да се влезе в режим на програмиране.
2. Устройството се доставя с избрана тази опция.
В режим на съвместимост ATtiny15 времената за стартиране се определят от SUT предпазители, както е показано в Таблица 6-8 по-долу.
Таблица 6-8. Времена за стартиране на вътрешен калибриран часовник на RC осцилатор (в режим ATtiny15)
СУТ [1:0] | Време за стартиране след изключване | Допълнително забавяне от нулиране (VCC = 5.0V) | Препоръчителна употреба |
00 | 6 CK | 14CK + 64 ms | |
01 | 6 CK | 14CK + 64 ms | |
10 | 6 CK | 14CK + 4 ms | |
11 | 1 CK | 14CK(1) |
Забележка: Ако предпазителят RSTDISBL е програмиран, това време за стартиране ще бъде увеличено до 14CK + 4 ms, за да се гарантира, че може да се влезе в режим на програмиране.
В обобщение, повече информация за режима на съвместимост на ATtiny15 може да бъде намерена в раздели „Порт B (PB5:PB0)“ е включен страница 2, „Вътрешен PLL в режим на съвместимост с ATtiny15“ на страница 24, „8-битов таймер/брояч1 в режим ATtiny15“ е включен страница 95, “Ограничения на debugWIRE” на страница 140, “Байтове за калибриране” на страница 150 и в табл „Часовник Prescaler Изберете” на страница 33.
Вътрешен 128 kHz осцилатор
Вътрешният осцилатор 128 kHz е осцилатор с ниска мощност, осигуряващ тактова честота от 128 kHz. Честотата е номинална при 3V и 25°C. Този часовник може да бъде избран като системен часовник чрез програмиране на предпазителите CKSEL на “0100”.
Когато е избран този източник на часовник, времената за стартиране се определят от SUT предпазителите, както е показано в Таблица 6-9.
Таблица 6-9. Времена за стартиране на вътрешния осцилатор 128 kHz
СУТ [1:0] | Време за стартиране след изключване | Допълнително забавяне от нулиране | Препоръчителна употреба |
00 | 6 CK | 14CK(1) | BOD активиран |
01 | 6 CK | 14CK + 4 ms | Бързо нарастваща мощност |
10 | 6 CK | 14CK + 64 ms | Бавно нарастваща мощност |
11 | Запазено |
Забележка: Ако предпазителят RSTDISBL е програмиран, това време за стартиране ще бъде увеличено до 14CK + 4 ms, за да се гарантира, че може да се влезе в режим на програмиране.
Нискочестотен кристален осцилатор
За да използвате 32.768 kHz кристал за часовник като източник на часовник за устройството, нискочестотният кристален осцилатор трябва да бъде избран чрез настройване на CKSEL предпазители на '0110'. Кристалът трябва да бъде свързан, както е показано на Фигура 6-5. За да намерите подходящ товарен капацитет за 32.768 kHz crysal, моля, консултирайте се с листа с данни на производителя.
Когато е избран този осцилатор, времената за стартиране се определят от предпазителите на SUT, както е показано в Таблица 6-10.
Таблица 6-10. Времена за стартиране за избор на часовник на нискочестотен кристален осцилатор
СУТ [1:0] | Време за стартиране след изключване | Допълнително забавяне от нулиране (VCC = 5.0V) | Препоръчителна употреба |
00 | 1K (1024) CK(1) | 4 ms | Активирана е бързо нарастваща мощност или BOD |
01 | 1K (1024) CK(1) | 64 ms | Бавно нарастваща мощност |
10 | 32K (32768) CK | 64 ms | Стабилна честота при стартиране |
11 | Запазено |
Забележка: Тези опции трябва да се използват само ако стабилността на честотата при стартиране не е важна.
Нискочестотният кристален осцилатор осигурява вътрешен капацитет на натоварване, вижте Таблица 6-11 на всеки TOSC щифт.
Таблица 6-11. Капацитет на нискочестотен кристален осцилатор
устройство | 32 kHz Osc. Тип | Капачка (Xtal1/Tosc1) | Капачка (Xtal2/Tosc2) |
ATtiny25/45/85 | Система Osc. | 16 pF | 6 pF |
Кристален осцилатор/керамичен резонатор
XTAL1 и XTAL2 са съответно вход и изход на инвертиране amplifier, който може да бъде конфигуриран за използване като вграден осцилатор, както е показано в Фигура 6-5. Може да се използва или кварцов кристал, или керамичен резонатор.
C1 и C2 винаги трябва да са равни както за кристали, така и за резонатори. Оптималната стойност на кондензаторите зависи от използвания кристал или резонатор, количеството на паразитния капацитет и електромагнитния шум на околната среда. Дадени са някои първоначални насоки за избор на кондензатори за използване с кристали Таблица 6-12 По-долу. За керамични резонатори трябва да се използват стойностите на кондензатора, дадени от производителя.
Таблица 6-12. Режими на работа на кристалния осцилатор
CKSEL[3:1] | Честотен диапазон (MHz) | Препоръчителен диапазон за кондензатори C1 и C2 за използване с кристали (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 |
Забележки: Тази опция не трябва да се използва с кристали, а само с керамични резонатори.
Осцилаторът може да работи в три различни режима, всеки оптимизиран за определен честотен диапазон. Режимът на работа се избира от предпазителите CKSEL[3:1], както е показано на Таблица 6-12.
Предпазителят CKSEL0 заедно с предпазителите SUT[1:0] избират времената за стартиране, както е показано в Таблица 6-13.
Таблица 6-13. Времена за стартиране за избор на часовник на кристалния осцилатор
CKSEL0 | СУТ [1:0] | Време за стартиране след изключване | Допълнително забавяне от нулиране | Препоръчителна употреба |
0 | 00 | 258 CK(1) | 14CK + 4 ms | Керамичен резонатор, бързо нарастваща мощност |
0 | 01 | 258 CK(1) | 14CK + 64 ms | Керамичен резонатор, бавно нарастваща мощност |
0 | 10 | 1K (1024) CK(2) | 14CK | Керамичен резонатор, активиран BOD |
0 | 11 | 1K (1024)CK(2) | 14CK + 4 ms | Керамичен резонатор, бързо нарастваща мощност |
1 | 00 | 1K (1024)CK(2) | 14CK + 64 ms | Керамичен резонатор, бавно нарастваща мощност |
1 | 01 | 16K (16384) CK | 14CK | Кристален осцилатор, активиран BOD |
1 | 10 | 16K (16384) CK | 14CK + 4 ms | Кристален осцилатор, бързо нарастваща мощност |
1 | 11 | 16K (16384) CK | 14CK + 64 ms | Кристален осцилатор, бавно нарастваща мощност |
Бележки
Тези опции трябва да се използват само когато не работят близо до максималната честота на устройството и само ако стабилността на честотата при стартиране не е важна за приложението. Тези опции не са подходящи за кристали.
Тези опции са предназначени за използване с керамични резонатори и ще осигурят стабилност на честотата при стартиране. Те могат да се използват и с кристали, когато не работят близо до максималната честота на устройството и ако стабилността на честотата при стартиране не е важна за приложението.
Източник на часовник по подразбиране
Устройството се доставя с програмиран CKSEL = “0010”, SUT = “10” и CKDIV8. Следователно настройката на източника на часовник по подразбиране е вътрешният RC осцилатор, работещ на 8 MHz с най-дълго време за стартиране и първоначално мащабиране на системния часовник от 8, което води до 1.0 MHz системен часовник. Тази настройка по подразбиране гарантира, че всички потребители могат да направят желаната от тях настройка за източник на часовник, като използват In-System или High-voltagд Програмист.
Системен часовник Prescaler
Системният часовник ATtiny25/45/85 може да бъде разделен чрез настройка на „CLKPR – Регистър за предварителна скала на часовника“ на страница 32. Тази функция може да се използва за намаляване на консумацията на енергия, когато изискването за процесорна мощност е ниско. Това може да се използва с всички опции за източник на часовник и ще повлияе на тактовата честота на процесора и всички синхронни периферни устройства. clkI/O, clkADC, clkCPU и clkFLASH се разделят на коефициент, както е показано в Таблица 6-15 на страница 33.
Време за превключване
Когато превключвате между настройките на предварителния скалер, System Clock Prescaler гарантира, че няма да възникнат проблеми в тактовата система и че никоя междинна честота не е по-висока нито от тактовата честота, съответстваща на предишната настройка, нито от тактовата честота, съответстваща на новата настройка.
Броячът на пулсации, който прилага предварителния мащабер, работи на честотата на неразделения часовник, която може да е по-бърза от тактовата честота на процесора. Следователно не е възможно да се определи състоянието на прескалера – дори и да може да се чете, и точното време, необходимо за превключване от едно деление на часовника към друго, не може да бъде точно предвидено.
От момента на записване на CLKPS стойностите отнема между T1 + T2 и T1 + 2*T2 преди новата тактова честота да е активна. В този интервал се произвеждат 2 активни фронта на часовника. Тук T1 е предишният тактов период, а T2 е периодът, съответстващ на новата настройка на предскалера.
Изходен буфер за часовник
Устройството може да изведе системния часовник на пин CLKO (когато не се използва като щифт XTAL2). За да активирате изхода, предпазителят CKOUT трябва да бъде програмиран. Този режим е подходящ, когато часовникът на чипа се използва за управление на други вериги в системата. Имайте предвид, че часовникът няма да бъде изведен по време на нулиране и че нормалната работа на I/O щифта ще бъде отменена, когато предпазителят е програмиран. Вътрешен RC осцилатор, WDT осцилатор, PLL и външен часовник (CLKI) могат да бъдат избрани, когато часовникът се извежда на CLKO. Кристалните осцилатори (XTAL1, XTAL2) не могат да се използват за часовников изход на CLKO. Ако се използва System Clock Prescaler, извежда се разделеният системен часовник.
Описание на регистъра
OSCCAL – Регистър за калибриране на осцилатор
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x31 | CAL7 | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | OSCCAL |
Четене/Писане | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
Битове 7:0 – CAL[7:0]: Стойност на калибриране на осцилатора
Регистърът за калибриране на осцилатора се използва за настройка на калибрирания вътрешен RC осцилатор, за да се премахнат вариациите на процеса от честотата на осцилатора. Предварително програмирана стойност за калибриране се записва автоматично в този регистър по време на нулиране на чипа, давайки фабрично калибрирана честота, както е посочено в Таблица 21-2 на страница 164. Приложният софтуер може да запише този регистър, за да промени честотата на осцилатора. Осцилаторът може да бъде калибриран до честоти, както е посочено в Таблица 21-2 на страница 164. Калибриране извън този диапазон не е гарантирано.
Обърнете внимание, че този осцилатор се използва за определяне на времето за запис на EEPROM и Flash и тези времена за запис ще бъдат съответно засегнати. Ако EEPROM или Flash са записани, не калибрирайте на повече от 8.8 MHz. В противен случай записът на EEPROM или Flash може да се провали.
Битът CAL7 определя обхвата на работа на осцилатора. Настройването на този бит на 0 дава най-ниския честотен диапазон, настройването на този бит на 1 дава най-високия честотен диапазон. Двата честотни диапазона се припокриват, с други думи настройка на OSCCAL = 0x7F дава по-висока честота от OSCCAL = 0x80.
Битовете CAL[6:0] се използват за настройка на честотата в избрания диапазон. Настройка 0x00 дава най-ниската честота в този диапазон, а настройка 0x7F дава най-високата честота в диапазона.
За да се осигури стабилна работа на MCU, стойността на калибриране трябва да се промени малко. Промяна в честотата с повече от 2% от един цикъл до следващия може да доведе до непредсказуемо поведение. Промените в OSCCAL не трябва да надвишават 0x20 за всяко калибриране. Изисква се да се гарантира, че MCU се поддържа в Нулиране по време на такива промени в тактовата честота
Таблица 6-14. Честотен диапазон на вътрешния RC осцилатор
OSCCAL стойност | Типична най-ниска честота по отношение на номиналната честота | Типична най-висока честота по отношение на номиналната честота |
0x00 | 50% | 100% |
0x3F | 75% | 150% |
0x7F | 100% | 200% |
CLKPR – Регистър на часовниковата предскала
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x26 | CLKPCE | – | – | – | CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | CLKPR |
Четене/Писане | R/W | R | R | R | R/W | R/W | R/W | R/W |
Първоначална стойност 0 0 0 0 Вижте битово описание
Бит 7 – CLKPCE: Разрешаване на промяна на часовниковия предскалер
Битът CLKPCE трябва да бъде записан в логическа единица, за да се позволи промяна на битовете CLKPS. Битът CLKPCE се актуализира само когато другите битове в CLKPR се записват едновременно на нула. CLKPCE се изчиства от хардуера четири цикъла след записването му или когато CLKPS битовете се записват. Пренаписването на бита CLKPCE в рамките на този период на изчакване нито удължава периода на изчакване, нито изчиства бита CLKPCE.
Битове 6:4 – Res: Запазени битове
Тези битове са запазени битове в ATtiny25/45/85 и винаги ще се четат като нула.
Битове 3:0 – CLKPS[3:0]: Избор на часовников прескалер Битове 3 – 0
Тези битове определят коефициента на разделяне между избрания източник на часовник и вътрешния системен часовник. Тези битове могат да бъдат записани по време на изпълнение, за да променят тактовата честота, за да отговарят на изискванията на приложението. Тъй като делителят разделя входа на главния часовник към MCU, скоростта на всички синхронни периферни устройства се намалява, когато се използва коефициент на разделяне. Коефициентите на разделяне са дадени в Таблица 6-15.
За да се избегнат неволни промени на тактовата честота, трябва да се следва специална процедура за запис, за да се променят CLKPS битовете:
Записване на бита за активиране на промяната на прескалера на часовника (CLKPCE) до единица и всички останали битове в CLKPR до нула.
В рамките на четири цикъла запишете желаната стойност в CLKPS, докато записвате нула в CLKPCE.
Прекъсванията трябва да бъдат дезактивирани, когато се променя настройката на пределира, за да се гарантира, че процедурата за запис не е прекъсната.
Предпазителят CKDIV8 определя първоначалната стойност на битовете CLKPS. Ако CKDIV8 е непрограмиран, CLKPS битовете ще бъдат нулирани на „0000“. Ако CKDIV8 е програмиран, CLKPS битовете се нулират на „0011“, давайки коефициент на деление осем при стартиране. Тази функция трябва да се използва, ако избраният източник на часовник има по-висока честота от максималната честота на устройството при настоящите работни условия. Имайте предвид, че всяка стойност може да бъде записана в CLKPS битовете, независимо от настройката на CKDIV8 Fuse. Приложният софтуер трябва да осигури достатъчен коефициент на разделяне
избран, ако избраният източник на часовник има по-висока честота от максималната честота на устройството при настоящите работни условия. Устройството се доставя с програмиран предпазител CKDIV8.
Таблица 6-15. Избор на часовник Prescaler
CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | Коефициент на деление на часовника |
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 | Запазено |
1 | 0 | 1 | 0 | Запазено |
1 | 0 | 1 | 1 | Запазено |
1 | 1 | 0 | 0 | Запазено |
1 | 1 | 0 | 1 | Запазено |
1 | 1 | 1 | 0 | Запазено |
1 | 1 | 1 | 1 | Запазено |
Забележка: Prescaler е деактивиран в режим на съвместимост с ATtiny15 и нито писането в CLKPR, нито програмирането на предпазителя CKDIV8 нямат ефект върху системния часовник (който винаги ще бъде 1.6 MHz).
Управление на захранването и режими на заспиване
Високата производителност и водещата в индустрията ефективност на кода прави AVR микроконтролерите идеален избор за приложения с ниска мощност. Освен това режимите на заспиване позволяват на приложението да изключва неизползваните модули в MCU, като по този начин пести енергия. AVR осигурява различни режими на заспиване, позволяващи на потребителя да приспособи консумацията на енергия към изискванията на приложението.
Режими на заспиване
Фигура 6-1 на страница 23 представя различните часовникови системи и тяхното разпределение в ATtiny25/45/85. Фигурата е полезна при избора на подходящ режим на сън. Таблица 7-1 показва различните режими на заспиване и техните източници за събуждане.
Таблица 7-1. Домейни на активен часовник и източници на събуждане в различните режими на заспиване
Домейни с активен часовник | Осцилатори | Източници за събуждане | ||||||||||
Режим на заспиване | clkCPU | clkFLASH | clkIO | clkADC | clkPCK | Основният източник на часовник е активиран | INT0 и промяна на ПИН | SPM/EEPROM
Готови |
USI Начално състояние |
ADC | Други I/O | Куче пазач Прекъсване |
празен ход | X | X | X | X | X | X | X | X | X | X | ||
ADC намаляване на шума | X | X | X(1) | X | X | X | X | |||||
Изключване | X(1) | X | X |
Забележка: За INT0, прекъсване само на ниво.
За да влезете в който и да е от трите режима на заспиване, битът SE в MCUCR трябва да бъде записан в логическа единица и трябва да бъде изпълнена инструкция SLEEP. Битовете SM[1:0] в регистъра MCUCR избират кой режим на заспиване (Idle, ADC Noise Reduction или Power-down) ще бъде активиран от инструкцията SLEEP. Вижте Таблица 7-2 за обобщение.
Ако възникне разрешено прекъсване, докато MCU е в режим на заспиване, MCU се събужда. След това MCU се спира за четири цикъла в допълнение към времето за стартиране, изпълнява рутинната процедура за прекъсване и възобновява изпълнението от инструкцията след SLEEP. Съдържанието на регистъра File и SRAM са непроменени, когато устройството се събуди от заспиване. Ако възникне нулиране по време на режим на заспиване, MCU се събужда и изпълнява от вектора за нулиране.
Забележка: ако прекъсване, предизвикано от ниво, се използва за събуждане, промененото ниво трябва да се задържи известно време, за да се събуди MCU (и за MCU да влезе в рутинната услуга за прекъсване). Вижте “Външни прекъсвания” на страница 49 за подробности.
Режим на готовност
Когато битовете SM[1:0] се записват на 00, инструкцията SLEEP кара MCU да влезе в режим на неактивност, спирайки процесора, но позволявайки на аналоговия компаратор, ADC, USI, таймера/брояча, Watchdog и системата за прекъсване да продължат да работят. ядене. Този режим на заспиване основно спира clkCPU и clkFLASH, като същевременно позволява на другите часовници да работят.
Режимът на неактивност позволява на MCU да се събуди от външни задействани прекъсвания, както и вътрешни, като препълването на таймера. Ако не се изисква събуждане от прекъсване на аналоговия компаратор, аналоговият компаратор може да бъде изключен чрез задаване на бита ACD в “ACSR – Регистър за контрол и състояние на аналогов компаратор” на страница 120. Това ще намали консумацията на енергия в режим на готовност. Ако ADC е активиран, преобразуването започва автоматично, когато се влезе в този режим.
ADC режим на намаляване на шума
Когато битовете SM[1:0] се записват на 01, инструкцията SLEEP кара MCU да влезе в режим на намаляване на шума на ADC, спирайки процесора, но позволявайки на ADC, външните прекъсвания и Watchdog да продължат да работят (ако е разрешено). Този режим на заспиване спира clkI/O, clkCPU и clkFLASH, като същевременно позволява на другите часовници да работят.
Това подобрява шумовата среда за ADC, позволявайки измервания с по-висока разделителна способност. Ако ADC е активиран, преобразуването започва автоматично, когато се влезе в този режим. Отделно от ADC Conversion Complete прекъсване, само външно нулиране, Watchdog Reset, Brown-out Reset, прекъсване на готовност за SPM/EEPROM, прекъсване на външно ниво на INT0 или прекъсване при смяна на пин може да събуди MCU от намаляване на шума на ADC режим.
Режим на изключване
Когато битовете SM[1:0] се записват на 10, инструкцията SLEEP кара MCU да влезе в режим на изключване. В този режим осцилаторът е спрян, докато външните прекъсвания, откриването на условие за стартиране на USI и Watchdog продължават да работят (ако са разрешени). Само външно нулиране, нулиране на Watchdog, нулиране на Brown-out, прекъсване при условие за стартиране на USI, прекъсване на външно ниво на INT0 или прекъсване при смяна на пин може да събуди MCU. Този режим на заспиване спира всички генерирани часовници, позволявайки работа само на асинхронни модули.
Софтуер BOD Disable
Когато детекторът за изгаряне (BOD) е активиран от предпазители BODLEVEL (вижте Таблица 20-4 на страница 148), СД активно следи доставките обtage по време на период на сън. В някои устройства е възможно да се пести енергия чрез деактивиране на BOD от софтуер в режим на изключване на захранването. Тогава консумацията на енергия в режим на заспиване ще бъде на същото ниво, както когато BOD е глобално деактивиран от предпазители.
Ако BOD е деактивиран от софтуера, функцията BOD се изключва веднага след влизане в режим на заспиване. При събуждане от сън BOD автоматично се активира отново. Това гарантира безопасна работа в случай, че нивото на VCC падне по време на периода на заспиване.
Когато BOD е деактивиран, времето за събуждане от режим на заспиване ще бъде същото като това за събуждане от RESET. Потребителят трябва ръчно да конфигурира времената за събуждане, така че референтната лента да има време да започне и BOD да работи правилно, преди MCU да продължи да изпълнява кода. Вижте битовете за предпазители SUT[1:0] и CKSEL[3:0] в таблицата “Нисък байт на предпазител” на страница 149
Деактивирането на BOD се контролира от бита BODS (BOD Sleep) на контролния регистър на MCU, вижте „MCUCR – MCU контрол Регистрирайте се” на страница 37. Записването на този бит до единица изключва BOD при Power-Down, докато записването на нула поддържа BOD активен. Настройката по подразбиране е нула, т.е. BOD активен.
Записването в бита BODS се контролира от времева последователност и бит за разрешаване, вижте „MCUCR – MCU контролен регистър- ter” на страница 37.
Ограничения
Функцията за деактивиране на BOD е внедрена само в следните устройства:
ATtiny25, ревизия E и по-нова
ATtiny45, ревизия D и по-нова
ATtiny85, ревизия C и по-нова
Ревизиите са отбелязани върху опаковката на устройството и могат да бъдат разположени, както следва:
Долна страна на пакети 8P3 и 8S2
Горна страна на опаковка 20M1
Регистър за намаляване на мощността
Регистърът за намаляване на мощността (PRR), вижте “PRR – Регистър за намаляване на мощността” на страница 38, предоставя метод за намаляване на консумацията на енергия чрез спиране на часовника на отделни периферни устройства. Текущото състояние на периферията е замразено и I/O регистрите не могат да се четат или записват. Ресурсите, използвани от периферното устройство при спиране на часовника, ще останат заети, следователно периферното устройство в повечето случаи трябва да бъде деактивирано, преди да спре часовника. Събуждането на модул, което се извършва чрез изчистване на бита в PRR, поставя модула в същото състояние, както преди изключване.
Изключването на модула може да се използва в режим на неактивност и активен режим за значително намаляване на общата консумация на енергия. Във всички други режими на заспиване часовникът вече е спрян. Вижте “Захранващ ток на I/O модули” на страница 177 напримерampлес.
Минимизиране на консумацията на енергия
Има няколко въпроса, които трябва да имате предвид, когато се опитвате да намалите консумацията на енергия в AVR контролирана система. Като цяло режимите на заспиване трябва да се използват колкото е възможно повече и режимът на заспиване трябва да бъде избран така, че да работят възможно най-малко от функциите на устройството. Всички ненужни функции трябва да бъдат деактивирани. По-специално, следните модули може да се нуждаят от специално внимание, когато се опитвате да постигнете възможно най-ниската консумация на енергия.
Аналогово-цифров преобразувател
Ако е активиран, ADC ще бъде активиран във всички режими на заспиване. За да спестите енергия, ADC трябва да бъде деактивиран, преди да влезете в режим на заспиване. Когато ADC се изключи и включи отново, следващото преобразуване ще бъде разширено преобразуване. Препоръчай на “Аналогово-цифров преобразувател” на страница 122 за подробности относно работата на ADC.
Аналогов компаратор
Когато влизате в режим на готовност, аналоговият компаратор трябва да бъде деактивиран, ако не се използва. Когато влизате в режим на намаляване на шума на ADC, аналоговият компаратор трябва да бъде деактивиран. В другите режими на заспиване аналоговият компаратор се дезактивира автоматично. Въпреки това, ако аналоговият компаратор е настроен да използва Internal Voltage Позовавайки се на вход, аналоговият компаратор трябва да бъде деактивиран във всички режими на заспиване. В противен случай Internal Voltage Справката ще бъде активирана, независимо от режима на заспиване. Препоръчай на “Аналогов компаратор” на страница 119 за подробности как да конфигурирате аналоговия компаратор.
Детектор за изчервяване
Ако детекторът за изчервяване не е необходим в приложението, този модул трябва да бъде изключен. Ако детекторът за изгасване е активиран от предпазителите BODLEVEL, той ще бъде активиран във всички режими на заспиване и следователно винаги ще консумира енергия. В по-дълбоките режими на заспиване това ще допринесе значително за общата консумация на ток. Вижте „Откриване на кафяво ция” на страница 41 и “Софтуерно деактивиране на BOD” на страница 35 за подробности как да конфигурирате детектор за изчервяване.
Вътрешен томtage Справка
The Internal Voltage Референцията ще бъде активирана, когато е необходима от функцията за откриване на изчакване, аналоговия компаратор или ADC. Ако тези модули са деактивирани, както е описано в разделите по-горе, вътрешният voltagЕталонът ще бъде деактивиран и няма да консумира енергия. Когато се включи отново, потребителят трябва да позволи на препратката да стартира, преди да се използва изходът. Ако препратката се поддържа включена в режим на заспиване, изходът може да се използва незабавно. Препоръчай на „Internal Voltage Справка” на страница 42 за подробности относно времето за стартиране.
Таймер за наблюдение
Ако Watchdog Timer не е необходим в приложението, този модул трябва да бъде изключен. Ако таймерът Watchdog е активиран, той ще бъде активиран във всички режими на заспиване и следователно винаги ще консумира енергия. В режимите на по-дълбок сън това ще допринесе значително за общата консумация на ток. Препоръчай на „Таймер за наблюдение“ на страница 42 за подробности как да конфигурирате Watchdog Timer.
Портови щифтове
Когато влизате в режим на заспиване, всички щифтове на порта трябва да бъдат конфигурирани да използват минимална мощност. Най-важното нещо тогава е да се гарантира, че никакви щифтове не задвижват резистивни товари. В режими на заспиване, където и I/O часовникът (clkI/O), и ADC часовникът (clkADC) са спрени, входните буфери на устройството ще бъдат деактивирани. Това гарантира, че няма да се консумира енергия
чрез входната логика, когато не е необходимо. В някои случаи входната логика е необходима за откриване на условия за събуждане и
след това ще бъде активиран. Обърнете се към раздела “Разрешаване на цифров вход и режими на заспиване” на страница 57 за подробности кои пинове са активирани. Ако входният буфер е активиран и входният сигнал е оставен плаващ или има ниво на аналогов сигнал, близко до VCC/2, входният буфер ще използва прекомерна мощност.
За аналогови входни щифтове цифровият входен буфер трябва да бъде деактивиран през цялото време. Ниво на аналогов сигнал, близко до VCC/2 на входен щифт, може да причини значителен ток дори в активен режим. Цифровите входни буфери могат да бъдат деактивирани чрез запис в регистъра за деактивиране на цифров вход (DIDR0). Препоръчай на “DIDR0 – Регистър за забрана на цифров вход 0” на страница 121 за подробности.
Описание на регистъра
MCUCR – Контролен регистър на MCU
Контролният регистър на MCU съдържа контролни битове за управление на мощността.
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | ПУД | SE | SM1 | SM0 | БОДСЕ | ISC01 | ISC00 | MCUCR |
Четене/Писане | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит 7 – BODS: BOD Sleep
Функцията за деактивиране на BOD е налична само в някои устройства. Вижте “Ограничения” на страница 36.
За да деактивирате BOD по време на сън (вж Таблица 7-1 на страница 34) битът BODS трябва да бъде записан в логическа единица. Това се контролира от времева последователност и бита за разрешаване, BODSE в MCUCR. Първо, както BODS, така и BODSE трябва да бъдат зададени на едно. Второ, в рамките на четири тактови цикъла BODS трябва да бъде настроен на единица, а BODSE трябва да бъде настроен на нула. Битът BODS е активен три тактови цикъла след като е зададен. Трябва да се изпълни инструкция за заспиване, докато BODS е активен, за да се изключи BOD за действителния режим на заспиване. Битът BODS се изчиства автоматично след три тактови цикъла.
В устройства, където Sleeping BOD не е реализиран, този бит не се използва и винаги ще чете нула.
Бит 5 – SE: Разрешаване на заспиване
Битът SE трябва да бъде записан в логическа единица, за да накара MCU да влезе в режим на заспиване, когато се изпълни инструкцията SLEEP. За да избегнете влизането на MCU в режим на заспиване, освен ако това не е целта на програмиста, се препоръчва да запишете бита за разрешаване на заспиване (SE) на единица точно преди изпълнението на инструкцията SLEEP и да го изчистите веднага след събуждане.
Битове 4:3 – SM[1:0]: Режим на заспиване Изберете битове 1 и 0
Тези битове избират между трите налични режима на заспиване, както е показано в Таблица 7-2.
Таблица 7-2. Избор на режим на заспиване
SM1 | SM0 | Режим на заспиване |
0 | 0 | празен ход |
0 | 1 | ADC намаляване на шума |
1 | 0 | Изключване |
1 | 1 | Запазено |
Бит 2 – BODSE: Разрешаване на заспиване на BOD
Функцията за деактивиране на BOD е налична само в някои устройства. Вижте “Ограничения” на страница 36.
Битът BODSE позволява настройка на контролния бит BODS, както е обяснено в описанието на битовете BODS. Деактивирането на BOD се контролира от времева последователност.
Този бит не се използва в устройства, където софтуерното BOD деактивиране не е внедрено и ще се чете като нула в тези устройства.
PRR – Регистър за намаляване на мощността
Регистърът за намаляване на мощността осигурява метод за намаляване на консумацията на енергия, като позволява деактивирането на периферни часовникови сигнали.
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x20 | – | – | – | – | PRTIM1 | PRTIM0 | ПРУСИ | PRADC | PRR |
Четене/Писане | R | R | R | R | R/W | R/W | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Битове 7:4 – Res: Запазени битове
Тези битове са запазени битове в ATtiny25/45/85 и винаги ще се четат като нула.
Бит 3 – PRTIM1: Таймер/брояч1 за намаляване на мощността
Записването на логическа единица в този бит изключва модула Timer/Counter1. Когато Timer/Counter1 е активиран, работата ще продължи както преди изключване.
Бит 2 – PRTIM0: Таймер/брояч0 за намаляване на мощността
Записването на логическа единица в този бит изключва модула Timer/Counter0. Когато Timer/Counter0 е активиран, работата ще продължи както преди изключване.
Бит 1 – PRUSI: USI за намаляване на мощността
Записването на логическа единица в този бит изключва USI чрез спиране на часовника към модула. При повторно събуждане на USI, USI трябва да се инициализира отново, за да се осигури правилна работа.
Бит 0 – PRADC: ADC за намаляване на мощността
Записването на логическа единица в този бит изключва ADC. ADC трябва да бъде деактивиран преди изключване. Имайте предвид, че часовникът на ADC се използва и от някои части на аналоговия компаратор, което означава, че аналоговият компаратор не може да се използва, когато този бит е висок.
Системен контрол и нулиране
Нулиране на AVR
По време на нулиране всички входно-изходни регистри се настройват на първоначалните си стойности и програмата започва да се изпълнява от вектора за нулиране. Инструкцията, поставена във вектора за нулиране, трябва да бъде RJMP – Relative Jump – инструкция към рутинната процедура за нулиране. Ако програмата никога не активира източник на прекъсване, векторите на прекъсване не се използват и редовен програмен код може да бъде поставен на тези места. Схемата на веригата в Фигура 8-1 показва логиката за нулиране. Електрическите параметри на веригата за нулиране са дадени в “Система и характеристики за нулиране” на страница 165.
Фигура 8-1 Логика за нулиране
I/O портовете на AVR незабавно се нулират до първоначалното си състояние, когато източникът за нулиране стане активен. Това не изисква да работи източник на часовник.
След като всички източници за нулиране станат неактивни, се извиква брояч на забавяне, който разтяга вътрешното нулиране. Това позволява мощността да достигне стабилно ниво, преди да започне нормалната работа. Периодът на изчакване на брояча на забавяне се определя от потребителя чрез предпазителите SUT и CKSEL. Различните селекции за периода на забавяне са представени в "Часовник Източници” на страница 25.
Нулиране на източници
ATtiny25/45/85 има четири източника на нулиране:
Нулиране при включване. MCU се нулира, когато захранващият обемtage е под прага за нулиране при включване (VPOT).
Външно нулиране. MCU се нулира, когато има ниско ниво на щифта RESET за по-дълго от минималната дължина на импулса.
Нулиране на Watchdog. MCU се нулира, когато периодът на Watchdog Timer изтече и Watchdog е активиран.
Браун-аут Нулиране. MCU се нулира, когато захранващият обемtage VCC е под прага за нулиране на изчакване (VBOT) и детекторът на изчакване е активиран.
Нулиране при включване
Импулс за нулиране при включване (POR) се генерира от верига за откриване в чип. Нивото на откриване е определено в „Сис- Тема и нулиране на характеристиките” на страница 165. POR се активира винаги, когато VCC е под нивото на откриване. Веригата POR може да се използва за задействане на Start-up Reset, както и за откриване на повреда в захранващия обемtage.
Верига за нулиране при включване (POR) гарантира, че устройството се нулира от включване. Достигане на прага за нулиране при включване обtage извиква брояча на забавяне, който определя колко дълго устройството се държи в RESET след нарастване на VCC. Сигналът RESET се активира отново, без никакво забавяне, когато VCC спадне под нивото на откриване.
Фигура 8-2. Стартиране на MCU, НУЛИРАНЕ Свързано с VCC
ВЪТРЕШНО НУЛИРАНЕ
Фигура 8-3. Стартиране на MCU, RESET Разширено външно
Външно нулиране
Външно нулиране се генерира от ниско ниво на щифта RESET, ако е активиран. Нулирайте импулси, по-дълги от минималната ширина на импулса (вижте “Система и характеристики за нулиране” на страница 165) ще генерира нулиране, дори ако часовникът не работи. Не е гарантирано, че по-кратките импулси ще генерират нулиране. Когато приложеният сигнал достигне Reset Threshold Voltage – VRST – на своя положителен фронт, броячът на забавяне стартира MCU след изтичане на периода на изчакване.
Фигура 8-4. Външно нулиране по време на работа
Откриване на изчервяване
ATtiny25/45/85 има вградена схема за откриване на изчакване (BOD) за наблюдение на нивото на VCC по време на работа, като го сравнява с фиксирано ниво на задействане. Нивото на задействане за BOD може да бъде избрано от предпазителите BODLEVEL. Нивото на задействане има хистерезис, за да се гарантира откриване на изгасване без пикове. Хистерезисът на нивото на откриване трябва да се интерпретира като VBOT+ = VBOT + VHYST/2 и VBOT- = VBOT – VHYST/2.
Когато BOD е активиран и VCC намалява до стойност под нивото на задействане (VBOT-in Фигура 8-5), функцията за нулиране на изчакване се активира незабавно. Когато VCC се увеличи над нивото на задействане (VBOT+ в Фигура 8-5), броячът на забавяне стартира MCU след изтичане на периода на изчакване tTOUT.
BOD веригата ще открие спад в VCC само ако voltage остава под задействащото ниво за по-дълго от даденото tBOD “Система и характеристики за нулиране” на страница 165.
Нулиране на Watchdog
Когато Watchdog изтече, той ще генерира кратък импулс за нулиране с продължителност на един CK цикъл. При спадащия фронт на този импулс таймерът за забавяне започва да отброява периода на изчакване tTOUT. Препоръчай на „Таймер за наблюдение“ на страница 42 за подробности относно работата на Watchdog Timer.
Voltage Референтни сигнали за активиране и време за стартиране
ТомътtagСправката има време за стартиране, което може да повлияе на начина, по който трябва да се използва. Посочено е времето за стартиране “Система и характеристики за нулиране” на страница 165. За да се пести енергия, справката не винаги е включена. Референцията е включена при следните ситуации:
Когато BOD е активиран (чрез програмиране на BODLEVEL[2:0] Fuse Bits).
Когато еталонът за ширина на лентата е свързан към аналоговия компаратор (чрез задаване на бит ACBG в ACSR).
Когато ADC е активиран.
По този начин, когато BOD не е активиран, след настройване на бита ACBG или активиране на ADC, потребителят трябва винаги да позволява референтната стойност да се стартира, преди да се използва изходът от аналоговия компаратор или ADC. За да намали консумацията на енергия в режим на изключване, потребителят може да избегне трите условия по-горе, за да гарантира, че референтният сигнал е изключен, преди да влезе в режим на изключване.
Таймер за наблюдение
Таймерът Watchdog се тактова от вграден в чип осцилатор, който работи на 128 kHz. Чрез контролиране на прескалера на таймера за наблюдение, интервалът за нулиране на часовника може да се регулира, както е показано в Таблица 8-3 на страница 46. Инструкцията WDR – Watchdog Reset – нулира Watchdog Timer. Таймерът Watchdog също се нулира, когато е деактивиран и когато възникне нулиране на чип. Могат да бъдат избрани десет различни периода на тактовия цикъл, за да се определи периодът на нулиране. Ако периодът за нулиране изтече без друго нулиране на Watchdog, ATtiny25/45/85 се нулира и изпълнява от вектора за нулиране. За подробности относно синхронизирането на Watchdog Reset вижте Таблица 8-3 на страница 46.
Таймерът Watchdog може също да бъде конфигуриран да генерира прекъсване вместо нулиране. Това може да бъде много полезно, когато използвате Watchdog за събуждане от Power-down.
За да се предотврати неволно деактивиране на Watchdog или неволна промяна на периода на изчакване, две различни нива на безопасност се избират от предпазителя WDTON, както е показано в Таблица 8-1 Обърнете се към „Времеви последователности за промяна на кон- фигура на Watchdog Timer” на страница 43 за подробности.
Таблица 8-1. WDT конфигурация като функция на настройките на предпазителите на WDTON
WDTON | Ниво на безопасност | Първоначално състояние на WDT | Как да деактивирате WDT | Как да промените времето за изчакване |
Непрограмирано | 1 | Забранено | Времева последователност | Без ограничения |
Програмиран | 2 | Активирано | Винаги активиран | Времева последователност |
Фигура 8-7. Таймер за наблюдение
Времеви последователности за промяна на конфигурацията на таймера за наблюдение
Последователността за промяна на конфигурацията се различава леко между двете нива на безопасност. За всяко ниво са описани отделни процедури.
Ниво на безопасност 1: В този режим таймерът Watchdog първоначално е деактивиран, но може да бъде активиран чрез запис на бита WDE в единица без никакви ограничения. Необходима е времева последователност, когато деактивирате активиран Watchdog Timer. За да деактивирате активиран Watchdog Timer, трябва да се следва следната процедура:
В същата операция напишете логическа единица в WDCE и WDE. Логическа единица трябва да бъде записана в WDE независимо от предишната стойност на бита WDE.
В рамките на следващите четири тактови цикъла, в същата операция, запишете битовете WDE и WDP по желание, но с изчистен бит WDCE.
Ниво на безопасност 2: В този режим таймерът Watchdog винаги е активиран и битът WDE винаги ще се чете като единица. Необходима е времева последователност, когато променяте периода на изчакване на Watchdog. За да промените Watchdog Time-out, трябва да се следва следната процедура:
В същата операция напишете логическа единица в WDCE и WDE. Въпреки че WDE винаги е зададено, WDE трябва да бъде записано в единица, за да започне времевата последователност.
В рамките на следващите четири тактови цикъла, в същата операция, запишете WDP битовете по желание, но с изчистен WDCE бит. Стойността, записана в бита WDE, е без значение.
Код Прample
Следният код напрample показва един модул и една C функция за изключване на WDT. Бившиятample предполага, че прекъсванията се контролират (напр. чрез глобално забраняване на прекъсванията), така че да няма прекъсвания по време на изпълнение на тези функции.
Код за сглобяване Прample(1) |
WDT_изкл.:
wdr ; Изчистете WDRF в MCUSR ldi r16, (0< извън MCUSR, r16 ; Напишете логическа единица в WDCE и WDE ; Запазете старата настройка на предскалера, за да предотвратите неволно нулиране на Watchdog в r16, WDTCR ori r16, (1< извън WDTCR, r16 ; Изключете WDT ldi r16, (0< извън WDTCR, r16 ret |
C Код Прample(1) |
void WDT_off(void)
{ _WDR(); /* Изчистване на WDRF в MCUSR */ MCUSR = 0x00 /* Пише логическа единица в WDCE и WDE */ WDTCR |= (1< /* Изключване на WDT */ WDTCR = 0x00; } |
Забележка: 1. Вж „Кодекс Прamples ”на страница 6.
Описание на регистъра
MCUSR – регистър на състоянието на MCU
Регистърът на състоянието на MCU предоставя информация кой източник на нулиране е причинил нулиране на MCU.
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 | – | – | – | – | WDRF | БОРФ | EXTRF | ПОРФ | MCUSR |
Четене/Писане | R | R | R | R | R/W | R/W | R/W | R/W |
Първоначална стойност 0 0 0 0 Вижте битово описание
Битове 7:4 – Res: Запазени битове
Тези битове са запазени битове в ATtiny25/45/85 и винаги ще се четат като нула.
Бит 3 – WDRF: Флаг за нулиране на Watchdog
Този бит се задава, ако се появи Watchdog Reset. Битът се нулира чрез нулиране при включване или чрез записване на логическа нула на флага.
Бит 2 – BORF: Флаг за нулиране на изчерпан цвят
Този бит се задава, ако възникне Браун-аут Нулиране. Битът се нулира чрез нулиране при включване или чрез записване на логическа нула на флага.
Бит 1 – EXTRF: Външен флаг за нулиране
Този бит се задава, ако възникне външно нулиране. Битът се нулира чрез нулиране при включване или чрез записване на логическа нула на флага.
Бит 0 – PORF: Флаг за нулиране при включване
Този бит се задава, ако възникне нулиране при включване. Битът се нулира само чрез записване на логическа нула на флага.
За да използва флаговете за нулиране за идентифициране на състояние за нулиране, потребителят трябва да прочете и след това да нулира MCUSR възможно най-рано в програмата. Ако регистърът е изчистен, преди да възникне друго нулиране, източникът на нулирането може да бъде намерен чрез изследване на флаговете за нулиране.
WDTCR – Регистър за контрол на таймера за наблюдение
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x21 | WDIF | WDIE | WDP3 | WDCE | WDE | WDP2 | WDP1 | WDP0 | WDTCR |
Четене/Писане | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
Бит 7 – WDIF: Watchdog Timeout Interrupt Flag
Този бит се задава, когато настъпи изчакване в Watchdog Timer и Watchdog Timer е конфигуриран за прекъсване. WDIF се изчиства от хардуера при изпълнение на съответния вектор за обработка на прекъсване. Като алтернатива WDIF се изчиства чрез записване на логическа единица към флага. Когато I-битът в SREG и WDIE са зададени, се изпълнява прекъсване на Watchdog Time-out.
Бит 6 – WDIE: Разрешаване на прекъсване при изчакване на Watchdog
Когато този бит се запише в единица, WDE се изчиства и I-битът в регистъра на състоянието е зададен, прекъсването на Watchdog Time-out е разрешено. В този режим съответното прекъсване се изпълнява вместо нулиране, ако настъпи таймаут в Watchdog Timer.
Ако е зададено WDE, WDIE се изчиства автоматично от хардуера, когато настъпи изчакване. Това е полезно за поддържане на защитата на Watchdog Reset, докато използвате прекъсването. След като битът WDIE бъде изчистен, следващото изчакване ще генерира нулиране. За да се избегне Watchdog Reset, WDIE трябва да се задава след всяко прекъсване.
Таблица 8-2. Конфигурация на таймера за наблюдение
WDE | WDIE | Състояние на таймера за наблюдение | Действие при прекъсване |
0 | 0 | Спряно | Няма |
0 | 1 | бягане | Прекъсване |
1 | 0 | бягане | Нулиране |
1 | 1 | бягане | Прекъсване |
Бит 4 – WDCE: Активиране на Watchdog Change
Този бит трябва да бъде зададен, когато битът WDE се запише на логическа нула. В противен случай Watchdog няма да бъде деактивиран. Веднъж записан на едно, хардуерът ще изчисти този бит след четири тактови цикъла. Обърнете се към описанието на бита WDE за процедура за деактивиране на Watchdog. Този бит също трябва да бъде зададен, когато се променят битовете на предразпределителя. Вижте „Времеви последователности за промяна на конфигурацията на таймера Watchdog” на страница 43.
Бит 3 – WDE: Разрешаване на Watchdog
Когато WDE е записан на логическа единица, Watchdog Timer е активиран, а ако WDE е записан на логическа нула, функцията Watchdog Timer е дезактивирана. WDE може да се изчисти само ако битът WDCE има логическо ниво едно. За да деактивирате активиран Watchdog Timer, трябва да се следва следната процедура:
В същата операция напишете логическа единица в WDCE и WDE. Логическа единица трябва да бъде записана в WDE, въпреки че е зададена на единица, преди да започне операцията за дезактивиране.
В рамките на следващите четири тактови цикъла запишете логическа 0 на WDE. Това деактивира Watchdog.
При ниво на безопасност 2 не е възможно да деактивирате Watchdog Timer, дори и с алгоритъма, описан по-горе. Вижте „Времеви последователности за промяна на конфигурацията на таймера Watchdog“ на страница 43.
При ниво на безопасност 1 WDE се отменя от WDRF в MCUSR. Вижте “MCUSR – регистър на състоянието на MCU” на страница 44 за описание на WDRF. Това означава, че WDE винаги е зададен, когато е зададен WDRF. За да изчистите WDE, WDRF трябва да бъде изчистен, преди да деактивирате Watchdog с описаната по-горе процедура. Тази функция гарантира многократно нулиране по време на условия, причиняващи повреда, и безопасно стартиране след повреда.
Забележка: Ако таймерът за наблюдение няма да се използва в приложението, важно е да преминете през процедура за дезактивиране на наблюдението при инициализацията на устройството. Ако Watchdog е случайно активиран, напрampако указателят се изплъзне или избледнее, устройството ще бъде нулирано, което от своя страна ще доведе до ново нулиране на watchdog. За да се избегне тази ситуация, приложният софтуер трябва винаги да изчиства WDRF флага и WDE контролния бит в процедурата за инициализация.
Битове 5, 2:0 – WDP[3:0]: таймер за наблюдение Prescaler 3, 2, 1 и 0
Битовете WDP[3:0] определят предварително мащабиране на Watchdog Timer, когато Watchdog Timer е активиран. Различните стойности на предварително мащабиране и съответните им периоди на изчакване са показани в Таблица 8-3.
Таблица 8-3. Watchdog Timer Prescale Select
WDP3 | WDP2 | WDP1 | WDP0 | Брой цикли на WDT осцилатор | Типично изчакване при VCC = 5.0 V |
0 | 0 | 0 | 0 | 2K (2048) цикъла | 16 ms |
0 | 0 | 0 | 1 | 4K (4096) цикъла | 32 ms |
0 | 0 | 1 | 0 | 8K (8192) цикъла | 64 ms |
0 | 0 | 1 | 1 | 16K (16384) цикъла | 0.125 s |
0 | 1 | 0 | 0 | 32K (32764) цикъла | 0.25 s |
0 | 1 | 0 | 1 | 64K (65536) цикъла | 0.5 s |
0 | 1 | 1 | 0 | 128K (131072) цикъла | 1.0 s |
0 | 1 | 1 | 1 | 256K (262144) цикъла | 2.0 s |
1 | 0 | 0 | 0 | 512K (524288) цикъла | 4.0 s |
1 | 0 | 0 | 1 | 1024K (1048576) цикъла | 8.0 s |
Таблица 8-3. Watchdog Timer Prescale Select (Продължение)
WDP3 | WDP2 | WDP1 | WDP0 | Брой цикли на WDT осцилатор | Типично изчакване при VCC = 5.0 V |
1 | 0 | 1 | 0 | Запазено(1) | |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 0 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
Забележка: 1. Ако е избрано, ще се използва една от валидните настройки под 0b1010.
прекъсвания
Този раздел описва спецификата на обработката на прекъсванията, както се извършва в ATtiny25/45/85. За общо обяснение на обработката на прекъсванията на AVR вижте “Нулиране и обработка на прекъсвания” на страница 12.
Прекъсващи вектори в ATtiny25/45/85
Векторите на прекъсване на ATtiny25/45/85 са описани в Таблица 9-1по-долу.
Таблица 9-1. Нулиране и прекъсване на вектори
Вектор № | Адрес на програмата | Източник | Дефиниция на прекъсване |
1 | 0x0000 | НУЛИРАНЕ | Външен щифт, нулиране при включване, нулиране при изчакване, нулиране на Watchdog |
2 | 0x0001 | INT0 | Заявка за външно прекъсване 0 |
3 | 0x0002 | PCINT0 | Заявка за прекъсване на промяна на ПИН 0 |
4 | 0x0003 | TIMER1_COMPA | Таймер/Брояч1 Сравнете съвпадение A |
5 | 0x0004 | ТАЙМЕР1_OVF | Препълване на таймер/брояч1 |
6 | 0x0005 | ТАЙМЕР0_OVF | Препълване на таймер/брояч0 |
7 | 0x0006 | EE_RDY | EEPROM готов |
8 | 0x0007 | ANA_COMP | Аналогов компаратор |
9 | 0x0008 | ADC | Преобразуването на ADC е завършено |
10 | 0x0009 | TIMER1_COMPB | Таймер/брояч1 Сравнете съвпадение B |
11 | 0x000A | TIMER0_COMPA | Таймер/Брояч0 Сравнете съвпадение A |
12 | 0x000B | TIMER0_COMPB | Таймер/брояч0 Сравнете съвпадение B |
13 | 0x000C | WDT | Тайм-аут на Watchdog |
14 | 0x000D | USI_START | USI START |
15 | 0x000E | USI_OVF | USI препълване |
Ако програмата никога не активира източник на прекъсване, векторите на прекъсване не се използват и редовен програмен код може да бъде поставен на тези места.
Типична и обща настройка за векторни адреси на прекъсвания в ATtiny25/45/85 е показана в програмата exampле по-долу.
Код за сглобяване Прample | ||
.org 0x0000 | ;Задайте адрес на следващия | изявление |
rjmp НУЛИРАНЕ | ; Адрес 0x0000 | |
rjmp INT0_ISR | ; Адрес 0x0001 | |
rjmp PCINT0_ISR | ; Адрес 0x0002 | |
rjmp TIM1_COMPA_ISR | ; Адрес 0x0003 | |
rjmp TIM1_OVF_ISR | ; Адрес 0x0004 | |
rjmp TIM0_OVF_ISR | ; Адрес 0x0005 | |
rjmp EE_RDY_ISR | ; Адрес 0x0006 | |
rjmp ANA_COMP_ISR | ; Адрес 0x0007 | |
rjmp ADC_ISR | ; Адрес 0x0008 | |
rjmp TIM1_COMPB_ISR | ; Адрес 0x0009 | |
rjmp TIM0_COMPA_ISR | ; Адрес 0x000A | |
rjmp TIM0_COMPB_ISR | ; Адрес 0x000B | |
rjmp WDT_ISR | ; Адрес 0x000C | |
rjmp USI_START_ISR | ; Адрес 0x000D | |
rjmp USI_OVF_ISR | ; Адрес 0x000E | |
НУЛИРАНЕ: | ; Старт на основната програма | |
; Адрес 0x000F | ||
… |
Забележка: Вижте „Кодекс Прamples ”на страница 6.
Външни прекъсвания
Външните прекъсвания се задействат от пин INT0 или някой от пиновете PCINT[5:0]. Обърнете внимание, че ако е разрешено, прекъсванията ще се задействат дори ако пиновете INT0 или PCINT[5:0] са конфигурирани като изходи. Тази функция осигурява начин за генериране на софтуерно прекъсване. Прекъсванията за промяна на щифта PCI ще се задействат, ако някой активиран щифт PCINT[5:0] превключи. Регистърът PCMSK контролира кои щифтове допринасят за прекъсванията при промяна на щифта. Прекъсванията за смяна на ПИН на PCINT[5:0] се откриват асинхронно. Това означава, че тези прекъсвания могат да се използват за събуждане на частта и от режими на заспиване, различни от режим на неактивност.
Прекъсванията INT0 могат да бъдат задействани от падащ или нарастващ фронт или ниско ниво. Това е настроено, както е посочено в спецификацията за контролния регистър на MCU – MCUCR. Когато прекъсването INT0 е разрешено и е конфигурирано като задействано ниво, прекъсването ще се задейства, докато щифтът се държи ниско. Имайте предвид, че разпознаването на прекъсвания на падащ или нарастващ фронт на INT0 изисква наличието на I/O часовник, описан в „Часовникови системи и тяхното разпространение“ на страница 23.
Прекъсване на ниско ниво
Прекъсване на ниско ниво на INT0 се открива асинхронно. Това означава, че това прекъсване може да се използва за събуждане на частта и от режими на заспиване, различни от режим на неактивност. I/O часовникът е спрян във всички режими на заспиване, с изключение на режим на готовност.
Имайте предвид, че ако прекъсване, задействано от ниво, се използва за събуждане от прекъсване на захранването, необходимото ниво трябва да се задържи достатъчно дълго, за да може MCU да завърши събуждането, за да задейства прекъсването на нивото. Ако нивото изчезне преди края на времето за стартиране, MCU пак ще се събуди, но няма да се генерира прекъсване. Времето за стартиране се определя от предпазителите SUT и CKSEL, както е описано в „Системен часовник и опции за часовника“ на страница 23.
Ако ниското ниво на щифта за прекъсване бъде премахнато, преди устройството да се е събудило, тогава изпълнението на програмата няма да бъде пренасочено към рутинната услуга за прекъсване, а ще продължи от инструкцията, следваща командата SLEEP.
Време за прекъсване на промяна на ПИН
Бившampфайлът за времето за прекъсване на промяна на пин е показан в Фигура 9-1.
Описание на регистъра
MCUCR – Контролен регистър на MCU
Външният контролен регистър за прекъсване A съдържа контролни битове за контрол на усещането за прекъсване.
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | ПУД | SE | SM1 | SM0 | БОДСЕ | ISC01 | ISC00 | MCUCR |
Четене/Писане | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Битове 1:0 – ISC0[1:0]: Прекъсване Sense Control 0 Бит 1 и Бит 0
Външното прекъсване 0 се активира от външния пин INT0, ако са зададени SREG I-флагът и съответната маска за прекъсване. Нивото и ръбовете на външния пин INT0, които активират прекъсването, са дефинирани в Таблица 9-2. Стойността на извода INT0 е sampводи преди откриване на ръбове. Ако е избрано прекъсване на фронт или превключване, импулси, които продължават повече от един тактов период, ще генерират прекъсване. Не е гарантирано, че по-кратките импулси ще генерират прекъсване. Ако е избрано прекъсване на ниско ниво, ниското ниво трябва да се задържи до завършване на текущо изпълняваната инструкция, за да се генерира прекъсване.
Таблица 9-2. Прекъсване 0 Контрол на сетивата
ISC01 | ISC00 | Описание |
0 | 0 | Ниското ниво на INT0 генерира заявка за прекъсване. |
0 | 1 | Всяка логическа промяна на INT0 генерира заявка за прекъсване. |
1 | 0 | Падащият фронт на INT0 генерира заявка за прекъсване. |
1 | 1 | Нарастващият фронт на INT0 генерира заявка за прекъсване. |
GIMSK – Регистър на обща маска за прекъсване
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3B | – | INT0 | PCIE | – | – | – | – | – | GIMSK |
Четене/Писане | R | R/W | R/W | R | R | R | R | R | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Битове 7, 4:0 – Res: Запазени битове
Тези битове са запазени битове в ATtiny25/45/85 и винаги ще се четат като нула.
Бит 6 – INT0: Разрешаване на заявка за външно прекъсване 0
Когато битът INT0 е зададен (един) и I-битът в регистъра на състоянието (SREG) е зададен (един), прекъсването на външния щифт е разрешено. Битовете 0/1 за контрол на прекъсване на прекъсване (ISC0 и ISC01) в контролния регистър на MCU (MCUCR) определят дали външното прекъсване се активира при нарастващ и/или спадащ фронт на пин INT00 или усетено ниво. Активността на щифта ще предизвика заявка за прекъсване, дори ако INT0 е конфигуриран като изход. Съответното прекъсване на заявка за външно прекъсване 0 се изпълнява от вектора за прекъсване INT0.
Бит 5 – PCIE: Разрешаване на прекъсване за промяна на Пин
Когато PCIE битът е зададен (един) и I-битът в регистъра на състоянието (SREG) е зададен (един), прекъсването при смяна на щифта е разрешено. Всяка промяна на който и да е разрешен PCINT[5:0] щифт ще предизвика прекъсване. Съответното прекъсване на Pin Change Interrupt Request се изпълнява от PCI Interrupt Vector. PCINT[5:0] пинове се активират индивидуално от регистъра PCMSK0.
GIFR – Регистър на общи флагове за прекъсване
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3A | – | INTF0 | PCIF | – | – | – | – | – | GIFR |
Четене/Писане | R | R/W | R/W | R | R | R | R | R | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Битове 7, 4:0 – Res: Запазени битове
Тези битове са запазени битове в ATtiny25/45/85 и винаги ще се четат като нула.
Бит 6 – INTF0: Флаг за външно прекъсване 0
Когато край или логическа промяна на пин INT0 задейства заявка за прекъсване, INTF0 става зададен (един). Ако I-битът в SREG и битът INT0 в GIMSK са зададени (едно), MCU ще премине към съответния вектор на прекъсване. Флагът се изчиства, когато се изпълни програмата за прекъсване. Алтернативно, флагът може да бъде изчистен чрез записване на логическа единица към него. Този флаг винаги се изчиства, когато INT0 е конфигуриран като прекъсване на ниво.
Бит 5 – PCIF: Флаг за прекъсване при промяна на ПИН
Когато логическа промяна на който и да е PCINT[5:0] щифт задейства заявка за прекъсване, PCIF става зададен (един). Ако I-битът в SREG и PCIE битът в GIMSK са зададени (един), MCU ще премине към съответния вектор на прекъсване. Флагът се изчиства, когато се изпълни програмата за прекъсване. Алтернативно, флагът може да бъде изчистен чрез записване на логическа единица към него.
PCMSK – Регистър на маската за промяна на ПИН
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x15 | – | – | PCINT5 | PCINT4 | PCINT3 | PCINT2 | PCINT1 | PCINT0 | PCMSK |
Четене/Писане | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Битове 7:6 – Res: Запазени битове
Тези битове са запазени битове в ATtiny25/45/85 и винаги ще се четат като нула.
Битове 5:0 – PCINT[5:0]: Маска за активиране на промяна на ПИН 5:0
Всеки PCINT[5:0] бит избира дали прекъсването за промяна на щифта е разрешено на съответния I/O щифт. Ако PCINT[5:0] е зададен и битът PCIE в GIMSK е зададен, прекъсването на смяната на щифта е разрешено на съответния I/O щифт. Ако PCINT[5:0] е изчистено, прекъсването на смяната на щифта на съответния I/O щифт е деактивирано.
I/O портове
Въведение
Всички AVR портове имат истинска функционалност за четене-промяна-запис, когато се използват като общи цифрови I/O портове. Това означава, че посоката на един щифт на порта може да се промени, без неволно да се промени посоката на който и да е друг щифт с инструкциите SBI и CBI. Същото важи при промяна на стойността на задвижване (ако е конфигуриран като изход) или активиране/деактивиране на издърпващи резистори (ако е конфигуриран като вход). Всеки изходен буфер има симетрични характеристики на задвижване с висока способност за приемник и източник. Драйверът на щифта е достатъчно силен, за да задвижва директно LED дисплеи. Всички щифтове на порта имат индивидуално избираеми издърпващи резистори със захранващ обемtage инвариантно съпротивление. Всички I/O щифтове имат защитни диоди както към VCC, така и към земята, както е посочено в Фигура 10-1. Обърнете се към “Електрически характеристики” на страница 161 за пълен списък с параметри.
Фигура 10-1. I/O Pin еквивалентна схема
Всички регистри и препратки към битове в този раздел са написани в общ вид. Малка буква „x“ представлява номерационната буква за порта, а малка буква „n“ представлява номера на бита. Въпреки това, когато използвате регистъра или битовите дефиниции в програма, трябва да се използва точната форма. Напримерample, PORTB3 за бит №. 3 в порт B, тук документиран най-общо като PORTxn. Физическите I/O регистри и местата на битове са изброени в „Описание на регистъра“ е включено страница 64.
Три входно/изходни адреса на паметта са разпределени за всеки порт, по едно за регистъра на данните – PORTx, регистъра за посока на данните – DDRx и входните щифтове на порта – PINx. Входно/изходното местоположение на входните щифтове на порта е само за четене, докато регистърът на данните и регистърът за насочване на данни са четене/запис. Но записването на логическа единица в бит в PINx регистъра ще доведе до превключване на съответния бит в регистъра на данните. В допълнение, битът Pull-up Disable – PUD в MCUCR деактивира функцията Pull-up за всички щифтове във всички портове, когато е зададена.
Използването на I/O порта като общ цифров I/O е описано в “Портовете като общи цифрови I/O” на страница 53. Повечето щифтове на порта са мултиплексирани с алтернативни функции за периферните функции на устройството. Как всяка алтернативна функция пречи на щифта на порта е описано в “Алтернативни функции на порт” на страница 57. Обърнете се към разделите на отделните модули за пълно описание на алтернативните функции.
Имайте предвид, че активирането на алтернативната функция на някои от щифтовете на порта не засяга използването на другите щифтове в порта като общи цифрови I/O.
Портове като общи цифрови I/O
Портовете са двупосочни I/O портове с опционални вътрешни издърпвания. Фигура 10-2 показва функционално описание на един I/O-порт щифт, тук общо наричан Pxn.
Фигура 10-2. Общи цифрови I/O(1)
Конфигуриране на Pin
Всеки щифт на порта се състои от три регистърни бита: DDxn, PORTxn и PINxn. Както е показано в „Описание на регистъра“ е включено страница 64, DDxn битовете са достъпни на DDRx I/O адреса, PORTxn битовете на PORTx I/O адреса и PINxn битовете на PINx I/O адреса.
Битът DDxn в регистъра DDRx избира посоката на този щифт. Ако DDxn е записано логическо едно, Pxn е конфигуриран като изходен щифт. Ако DDxn е записана логическа нула, Pxn е конфигуриран като входен щифт.
Ако PORTxn е записан като логическа единица, когато щифтът е конфигуриран като входен щифт, издърпващият резистор се активира. За да изключите изтеглящия резистор, PORTxn трябва да бъде записана логическа нула или щифтът трябва да бъде конфигуриран като изходен щифт. Изводите на порта са в три състояния, когато условието за нулиране стане активно, дори ако не работят часовници.
Ако PORTxn е записано като логическо едно, когато щифтът е конфигуриран като изходен щифт, щифтът на порта се управлява високо (едно). Ако PORTxn е записан като логическа нула, когато щифтът е конфигуриран като изходен щифт, щифтът на порта се управлява ниско (нула).
Превключване на ПИН
Записването на логическа единица в PINxn превключва стойността на PORTxn, независимо от стойността на DDRxn. Имайте предвид, че инструкцията SBI може да се използва за превключване на един бит в порт.
Превключване между вход и изход
При превключване между три състояния ({DDxn, PORTxn} = 0b00) и изход високо ({DDxn, PORTxn} = 0b11), междинно състояние с активирано изтегляне {DDxn, PORTxn} = 0b01) или изход ниско ({DDxn, PORTxn} = 0b10) трябва да възникне. Обикновено състоянието с разрешено издърпване е напълно приемливо, тъй като среда с висок импеданс няма да забележи разликата между силен висок драйвер и издърпване. Ако това не е така, битът PUD в регистъра MCUCR може да бъде настроен да деактивира всички изтегляния във всички портове.
Превключването между вход с издърпване и нисък изход генерира същия проблем. Потребителят трябва да използва или трисъстоянието ({DDxn, PORTxn} = 0b00) или изходното високо състояние ({DDxn, PORTxn} = 0b10) като междинна стъпка.
Таблица 10-1 обобщава контролните сигнали за стойността на щифта.
Таблица 10-1. Конфигурации на ПИН портове
DDxn | PORTxn | ПУД
(в MCUCR) |
I/O | Набиране | Коментирайте |
0 | 0 | X | Вход | не | Три състояния (Hi-Z) |
0 | 1 | 0 | Вход | да | Pxn ще източник на ток, ако ext. дръпна ниско. |
0 | 1 | 1 | Вход | не | Три състояния (Hi-Z) |
1 | 0 | X | Изход | не | Нисък изход (потъване) |
1 | 1 | X | Изход | не | Висок изход (източник) |
Четене на ПИН стойността
Независимо от настройката на бита за посока на данните DDxn, щифтът на порта може да бъде прочетен чрез бита за регистър на PINxn. Както е показано в Фигура 10-2, битът на регистъра на PINxn и предходното резе представляват синхронизатор. Това е необходимо, за да се избегне метастабилност, ако физическият щифт промени стойност близо до ръба на вътрешния часовник, но също така въвежда забавяне. Фигура 10-3 показва времева диаграма на синхронизацията при четене на външно приложена пин стойност. Максималното и минималното забавяне на разпространението се обозначават съответно с tpd,max и tpd,min.
Помислете, че периодът на часовника започва малко след първия спад на фронта на системния часовник. Резето е затворено, когато часовникът е нисък, и става прозрачен, когато часовникът е висок, както е показано от щрихованата област на сигнала „SYNC LATCH“. Стойността на сигнала се фиксира, когато системният часовник спадне. Той се записва в PINxn регистъра на следващия положителен фронт на часовника. Както е посочено от двете стрелки tpd,max и tpd,min, преходът на единичен сигнал на щифта ще бъде забавен между ½ и 1½ системен тактов период в зависимост от времето на утвърждаване.
Когато четете обратно зададена от софтуера пин стойност, трябва да се вмъкне инструкция nop, както е посочено в Фигура 10-4. Инструкцията за изход задава сигнала “SYNC LATCH” на положителния фронт на часовника. В този случай забавянето tpd през синхронизатора е един системен тактов период.
Следният код напрample показва как да зададете щифтове на порт B 0 и 1 високо, 2 и 3 ниско и да дефинирате щифтовете на порта от 4 до 5 като вход с изтегляне, присвоено на пин 4 на порта. Получените стойности на пиновете се четат отново, но както беше обсъдено по-рано, е включена инструкция nop, за да може да се прочете обратно наскоро присвоената стойност на някои от щифтовете.
Код за сглобяване Прample(1) |
…
; Определете набирания и задайте високи резултати ; Определете посоките за щифтовете на порта ldi r16,(1<<PB4)|(1<<PB1)|(1<<PB0) ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0) изходящ PORTB, r16 извън DDRB, r17 ; Въведете nop за синхронизация не ; Прочетете щифтовете на порта в r16, PINB … |
Забележка: За програмата за асемблиране се използват два временни регистъра, за да се минимизира времето от издърпванията, зададени на щифтове 0, 1 и 4, докато битовете за посока са правилно зададени, дефинирайки битове 2 и 3 като ниски и предефинирайки битове 0 и 1 като силни високи водачи.
C Код Прample |
неподписан char i;
… /* Дефинирайте набирания и задайте високи резултати */ /* Определете посоките за щифтовете на порта */ PORTB = (1< DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* Вмъкнете nop за синхронизация*/ _NOP(); /* Прочетете щифтовете на порта */ i = PINB; … |
Активиране на цифров вход и режими на заспиване
Както е показано в Фигура 10-2, цифровият входен сигнал може да бъде клamped към земята на входа на тригера на Шмит. Сигналът, означен на фигурата SLEEP, се задава от контролера за заспиване на MCU в режим на изключване, за да се избегне висока консумация на енергия, ако някои входни сигнали останат плаващи или имат ниво на аналоговия сигнал, близко до VCC/2.
SLEEP се отменя за щифтовете на порта, активирани като външни щифтове за прекъсване. Ако заявката за външно прекъсване не е активирана, SLEEP е активен и за тези пинове. SLEEP също се отменя от различни други алтернативни функции, както е описано в “Алтернативни функции на порт” на страница 57.
Ако логическо високо ниво („едно“) присъства на асинхронен външен прекъсващ щифт, конфигуриран като „Прекъсване при нарастващ фронт, спадащ фронт или всяка логическа промяна на пин“, докато външното прекъсване не е активирано, съответният външен флаг за прекъсване ще се настройва при възобновяване от горепосочения режим на заспиване, като клampвлизането в тези режими на заспиване произвежда исканата логическа промяна.
Несвързани пинове
Ако някои щифтове са неизползвани, препоръчително е да се уверите, че тези щифтове имат определено ниво. Въпреки че повечето от цифровите входове са деактивирани в режимите на дълбок сън, както е описано по-горе, плаващите входове трябва да се избягват, за да се намали консумацията на ток във всички други режими, където цифровите входове са активирани (Нулиране, Активен режим и Неактивен режим).
Най-простият метод за осигуряване на определено ниво на неизползван щифт е да активирате вътрешното издърпване. В този случай изтеглянето ще бъде деактивирано по време на нулиране. Ако ниската консумация на енергия по време на нулирането е важна, препоръчително е да използвате външно издърпване или изтегляне. Свързването на неизползвани щифтове директно към VCC или GND не се препоръчва, тъй като това може да причини прекомерни токове, ако щифтът случайно бъде конфигуриран като изход.
Алтернативни функции на порта
Повечето щифтове на портове имат алтернативни функции в допълнение към общите цифрови I/O. Фигура 10-5 показва как сигналите за управление на щифта на порта от опростения Фигура 10-2 може да бъде заменен от алтернативни функции. Преобладаващите сигнали може да не присъстват във всички щифтове на портове, но фигурата служи като общо описание, приложимо за всички щифтове на портове в семейството на микроконтролера AVR.
Таблица 10-2. Общо описание на сигнали за отмяна за алтернативни функции
Име на сигнала | Пълно име | Описание |
PUOE | Pull-up Override Enable | Ако този сигнал е зададен, разрешаването на изтеглянето се управлява от PUOV сигнала. Ако този сигнал е изчистен, изтеглянето е разрешено, когато
{DDxn, PORTxn, PUD} = 0b010. |
ПУОВ | Стойност за отмяна на издърпване | Ако PUOE е зададено, изтеглянето е активирано/деактивирано, когато PUOV е зададено/изчистено, независимо от настройката на битовете на регистъра DDxn, PORTxn и PUD. |
DDOE | Разрешаване на отмяна на посоката на данните | Ако този сигнал е зададен, Разрешаването на изходния драйвер се управлява от DDOV сигнала. Ако този сигнал е изчистен, изходният драйвер се активира от бита DDxn Register. |
DDOV | Стойност за замяна на посоката на данните | Ако е зададено DDOE, изходният драйвер е активиран/деактивиран, когато DDOV е зададен/изчистен, независимо от настройката на бита за регистър DDxn. |
PVOE | Разрешаване на замяна на стойността на порта | Ако този сигнал е зададен и изходният драйвер е активиран, стойността на порта се контролира от PVOV сигнала. Ако PVOE е изчистен и изходният драйвер е активиран, стойността на порта се управлява от бита за регистър PORTxn. |
ПВОВ | Port Value Override Стойност | Ако е зададен PVOE, стойността на порта е зададена на PVOV, независимо от настройката на бита за регистър PORTxn. |
PTOE | Разрешаване на замяна на превключване на порт | Ако е зададен PTOE, битът на регистъра PORTxn се инвертира. |
DIEOE | Активиране на цифров вход Разрешаване на отмяна | Ако този бит е зададен, Digital Input Enable се управлява от DIEOV сигнала. Ако този сигнал е изчистен, активирането на цифровия вход се определя от състоянието на MCU (нормален режим, режим на заспиване). |
ДИЕОВ | Стойност за замяна на активиране на цифров вход | Ако е настроен DIEOE, цифровият вход е активиран/деактивиран, когато DIEOV е зададен/изчистен, независимо от състоянието на MCU (нормален режим, режим на заспиване). |
DI | Цифров вход | Това е цифровият вход за алтернативни функции. На фигурата сигналът е свързан към изхода на тригера на Шмит, но преди синхронизатора. Освен ако цифровият вход не се използва като източник на часовник, модулът с алтернативната функция ще използва свой собствен синхронизатор. |
AIO | Аналогов вход / изход | Това е аналоговият вход/изход към/от алтернативни функции. Сигналът се свързва директно към подложката и може да се използва двупосочно. |
Следващите подраздели описват накратко алтернативните функции за всеки порт и свързват приоритетните сигнали с алтернативната функция. Вижте описанието на алтернативната функция за повече подробности.
Алтернативни функции на порт B
Щифтовете на порт B с алтернативна функция са показани в Таблица 10-3.
Таблица 10-3. Порт B щифтове алтернативни функции
Порт ПИН | Алтернативна функция |
PB5 | ![]() RESET: Нулиране на ПИН dW: debugWIRE I/O ADC0: ADC входен канал 0 PCINT5: Прекъсване при промяна на ПИН, източник 5 |
PB4 | XTAL2: Изход на кристален осцилатор CLKO: Изход на системния часовник ADC2: ADC входен канал 2
OC1B: Таймер/Брояч1 Сравнение на съвпадение B Изход PCINT4: Прекъсване за промяна на ПИН 0, Източник 4 |
PB3 | XTAL1: Вход за кристален осцилатор CLKI: Вход за външен часовник ADC3: ADC входен канал 3
OC1B: Допълнителен таймер/брояч1 Сравнение на съвпадение B Изход PCINT3: Прекъсване за промяна на пин 0, източник 3 |
PB2 | SCK: Сериен часовников вход ADC1: ADC входен канал 1
T0: Таймер/Counter0 Clock Source USCK: USI Clock (Трижилен режим) SCL: USI Clock (Двужилен режим) INT0: Външно прекъсване 0 Вход PCINT2: Pin Change Interrupt 0, Source 2 |
PB1 | MISO: SPI главни входни данни / подчинени изходни данни AIN1: аналогов компаратор, отрицателен вход OC0B: таймер/брояч0 Сравняване на съвпадение B изход OC1A: таймер/брояч1 сравняване на съвпадение A изход DO: USI изход на данни (трипроводен режим) PCINT1: Прекъсване при смяна на пин 0, източник 1 |
PB0 | MOSI:: SPI главни изходни данни / входни подчинени данни AIN0: аналогов компаратор, положителен вход
OC0A: Таймер/брояч0 Сравнение на съвпадение A изход OC1A: Допълнителен таймер/брояч1 Сравнение на съвпадение A Изход DI: USI вход на данни (трижичен режим) SDA: USI въвеждане на данни (двупроводен режим) AREF: Външен аналогов референтен PCINT0: Прекъсване за промяна на пин 0, източник 0 |
Порт B, бит 5 – RESET/dW/ADC0/PCINT5
НУЛИРАНЕ: Входът за външно нулиране е активен нисък и активиран чрез депрограмиране (“1”) на предпазителя RSTDISBL. Pullup се активира и изходният драйвер и цифровият вход се деактивират, когато щифтът се използва като щифт RESET.
dW: Когато предпазителят за активиране на debugWIRE (DWEN) е програмиран и битовете за заключване са непрограмирани, системата debugWIRE в целевото устройство се активира. Пинът на порта RESET е конфигуриран като двупосочен входно-изходен щифт с проводник И (отворен дрейн) с активирано изтегляне и се превръща в комуникационен шлюз между целта и емулатора.
ADC0: аналогово-цифров преобразувател, канал 0.
PCINT5: Pin Change Interrupt източник 5.
Порт B, бит 4 – XTAL2/CLKO/ADC2/OC1B/PCINT4
XTAL2: щифт 2 на осцилатора на часовника на чипа. Използва се като щифт на часовника за всички източници на часовник на чип, с изключение на вътрешния калибрируем RC осцилатор и външния часовник. Когато се използва като щифт за часовник, щифтът не може да се използва като I/O щифт. Когато използвате вътрешен калибрируем RC осцилатор или външен часовник като източници на часовник на чип, PB4 служи като обикновен I/O щифт.
CLKO: Разделеният системен часовник може да бъде изведен на щифт PB4. Разделеният системен часовник ще бъде изведен, ако CKOUT Fuse е програмиран, независимо от настройките на PORTB4 и DDB4. Той също ще бъде изведен по време на нулиране.
ADC2: аналогово-цифров преобразувател, канал 2.
OC1B: Output Compare Match output: Пинът PB4 може да служи като външен изход за Timer/Counter1 Compare Match B, когато е конфигуриран като изход (комплект DDB4). Пинът OC1B също е изходният щифт за функцията на таймера в режим PWM.
PCINT4: Pin Change Interrupt източник 4.
Порт B, бит 3 – XTAL1/CLKI/ADC3/OC1B/PCINT3
XTAL1: Извод 1 на осцилатора на часовника на чипа. Използва се за всички източници на часовник на чип, с изключение на вътрешния калибрируем RC осцилатор. Когато се използва като щифт за часовник, щифтът не може да се използва като I/O щифт.
CLKI: Вход за часовник от външен източник на часовник, вижте “Външен часовник” на страница 26.
ADC3: аналогово-цифров преобразувател, канал 3.
OC1B: Обърнат изход Сравняване на съвпадение: Изводът PB3 може да служи като външен изход за Timer/Counter1 Compare Match B, когато е конфигуриран като изход (набор DDB3). Пинът OC1B също е инвертираният изходен извод за функцията на таймера в режим PWM.
PCINT3: Pin Change Interrupt източник 3.
Порт B, бит 2 – SCK/ADC1/T0/USCK/SCL/INT0/PCINT2
SCK: Главен изход за часовник, входен щифт за подчинен часовник за SPI канал. Когато SPI е активиран като Slave, този щифт е конфигуриран като вход, независимо от настройката на DDB2. Когато SPI е активиран като главен, посоката на данните на този щифт се контролира от DDPB2. Когато щифтът е принуден от SPI да бъде вход, изтеглянето все още може да се контролира от бита PORTB2.
ADC1: аналогово-цифров преобразувател, канал 1.
T0: Таймер/Counter0 източник на брояч.
USCK: часовник за универсален сериен интерфейс с трипроводен режим.
SCL: Двупроводен режим Сериен часовник за USI двупроводен режим.
INT0: Външен източник на прекъсване 0.
PCINT2: Pin Change Interrupt източник 2.
Порт B, бит 1 – MISO/AIN1/OC0B/OC1A/DO/PCINT1
MISO: вход за основни данни, изходен щифт за подчинени данни за SPI канал. Когато SPI е активиран като главен, този щифт е конфигуриран като вход, независимо от настройката на DDB1. Когато SPI е активиран като подчинен, посоката на данните на този щифт се контролира от DDB1. Когато щифтът е принуден от SPI да бъде вход, изтеглянето все още може да се контролира от бита PORTB1.
AIN1: Отрицателен вход на аналоговия компаратор. Конфигурирайте щифта на порта като вход с изключено вътрешно изтегляне, за да избегнете намесата на цифровия порт във функцията на аналоговия компаратор.
OC0B: Изход Сравнение Съвпадение на изход. Пинът PB1 може да служи като външен изход за Timer/Counter0 Compare Match B. Пинът PB1 трябва да бъде конфигуриран като изход (DDB1 набор (един)), за да обслужва тази функция. Пинът OC0B също е изходният щифт за функцията на таймера в режим PWM.
OC1A: Изход за сравняване на съвпадението: Пинът PB1 може да служи като външен изход за Timer/Counter1 Compare Match B, когато е конфигуриран като изход (комплект DDB1). Пинът OC1A също е изходният щифт за функцията на таймера в режим PWM.
DO: Трипроводен режим на универсален сериен интерфейс за извеждане на данни. Трипроводен режим Изходните данни заменят стойността на PORTB1 и се задвижват към порта, когато битът за посока на данните е зададен DDB1 (едно). PORTB1 все още позволява изтеглянето, ако посоката е въведена и PORTB1 е зададен (един).
PCINT1: Pin Change Interrupt източник 1.
Порт B, бит 0 – MOSI/AIN0/OC0A/OC1A/DI/SDA/AREF/PCINT0
MOSI: SPI Master Data изход, Slave Data вход за SPI канал. Когато SPI е активиран като Slave, този щифт е конфигуриран като вход, независимо от настройката на DDB0. Когато SPI е активиран като главен, посоката на данните на този щифт се контролира от DDB0. Когато щифтът е принуден от SPI да бъде вход, изтеглянето все още може да се контролира от бита PORTB0.
AIN0: Положителен вход на аналоговия компаратор. Конфигурирайте щифта на порта като вход с изключено вътрешно изтегляне, за да избегнете намесата на цифровия порт във функцията на аналоговия компаратор.
OC0A: Изход Сравнение Съвпадение на изход. Пинът PB0 може да служи като външен изход за Timer/Counter0 Compare Match A, когато е конфигуриран като изход (DDB0 комплект (един)). Пинът OC0A също е изходният щифт за функцията на таймера в режим PWM.
OC1A: Обърнат изход Сравняване на съвпадение на изхода: Пинът PB0 може да служи като външен изход за Timer/Counter1 Compare Match B, когато е конфигуриран като изход (DDB0 комплект). Пинът OC1A също е обърнатият изходен щифт за функцията на таймера в режим PWM.
SDA: Данни за сериен интерфейс в двупроводен режим.
AREF: Външен аналогов референтен сигнал за ADC. Pullup и изходният драйвер са деактивирани на PB0, когато щифтът се използва като външна референция или вътрешен обемtage Еталон с външен кондензатор на щифта AREF.
DI: Въвеждане на данни в USI Трипроводен режим. USI трипроводният режим не отменя нормалните функции на порта, така че щифтът трябва да бъде конфигуриран като вход за DI функция.
PCINT0: Pin Change Interrupt източник 0.
Таблица 10-4 и Таблица 10-5 свържете алтернативните функции на порт B с приоритетните сигнали, показани в Фигура 10-5 на страница 58.
Таблица 10-4. Отменящи сигнали за алтернативни функции в PB[5:3]
Име на сигнала | PB5/НУЛИРАНЕ/ ADC0/PCINT5 | PB4/ADC2/XTAL2/ OC1B/PCINT4 | PB3/ADC3/XTAL1/ OC1B/PCINT3 |
PUOE | ![]() |
0 | 0 |
ПУОВ | 1 | 0 | 0 |
DDOE | RSTDISBL(1) • ДУЕН(1) | 0 | 0 |
DDOV | debugWire предаване | 0 | 0 |
PVOE | 0 | OC1B Активиране | ![]() OC1B Активиране |
ПВОВ | 0 | OC1B | OC1B |
PTOE | 0 | 0 | 0 |
DIEOE | ![]() RSTDISBL(1) + (PCINT5 • PCIE + ADC0D) |
PCINT4 • PCIE + ADC2D | PCINT3 • PCIE + ADC3D |
ДИЕОВ | ADC0D | ADC2D | ADC3D |
DI | PCINT5 вход | PCINT4 вход | PCINT3 вход |
AIO | Вход RESET, вход ADC0 | ADC2 вход | ADC3 вход |
Забележка: когато предпазителят е “0” (програмиран).
Таблица 10-5. Отменящи сигнали за алтернативни функции в PB[2:0]
Име на сигнала | 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_TWO_WIRE | 0 | USI_TWO_WIRE |
ПУОВ | 0 | 0 | 0 |
DDOE | USI_TWO_WIRE | 0 | USI_TWO_WIRE |
DDOV | (USI_SCL_HOLD + PORTB2) • DDB2 | 0 | ![]() ![]() (SDA + PORTB0) • DDB0 |
PVOE | USI_TWO_WIRE • DDB2 | OC0B Активиране + OC1A Активиране + USI_THREE_WIRE | ![]() OC0A Активиране + OC1A Активиране + (USI_TWO_WIRE DDB0) |
ПВОВ | 0 | OC0B + OC1A + DO | ![]() OC0A + OC1A |
PTOE | USITC | 0 | 0 |
DIEOE | PCINT2 • PCIE + ADC1D + USISIE | PCINT1 • PCIE + AIN1D | PCINT0 • PCIE + AIN0D + USISIE |
ДИЕОВ | ADC1D | AIN1D | AIN0D |
DI | T0/USCK/SCL/INT0/
PCINT2 вход |
PCINT1 вход | DI/SDA/PCINT0 вход |
AIO | ADC1 вход | Отрицателен вход на аналоговия компаратор | Положителен вход на аналоговия компаратор |
Описание на регистъра
MCUCR – Контролен регистър на MCU
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | ПУД | SE | SM1 | SM0 | БОДСЕ | ISC01 | ISC00 | MCUCR |
Четене/Писане | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит 6 – PUD: Забрана на издърпването
Когато този бит е записан в единица, издърпванията в I/O портовете са забранени, дори ако регистрите DDxn и PORTxn са конфигурирани да разрешават изтеглянето ({DDxn, PORTxn} = 0b01). Вижте “Конфигуриране на ПИН” на страница 54 за повече подробности относно тази функция.
PORTB – Регистър на данни на порт B
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x18 | – | – | PORTB5 | PORTB4 | PORTB3 | PORTB2 | PORTB1 | PORTB0 | PORTB |
Четене/Писане | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
DDRB – Регистър за посока на данни на порт B
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x17 | – | – | DDB5 | DDB4 | DDB3 | DDB2 | DDB1 | DDB0 | DDRB |
Четене/Писане | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Първоначална стойност | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PINB – Адрес на входни пинове на порт B
малко | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x16 | – | – | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 | PINB |
Четене/Писане | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Първоначална стойност | 0 | 0 | N/A | N/A | N/A | N/A | N/A | N/A |
8-битов таймер/брояч0 с ШИМ
Характеристики
Две независими единици за сравнение на изхода
Двойно буферирани регистри за сравнение на изхода
Изчистване на таймера при сравняване на съвпадение (автоматично презареждане)
Широчинно-импулсен модулатор (PWM) без бъгове, с правилна фаза
Променлив период на ШИМ
Честотен генератор
Три независими източника на прекъсване (TOV0, OCF0A и OCF0B)
крайview
Timer/Counter0 е 8-битов модул за таймер/брояч с общо предназначение, с две независими единици за сравнение на изхода и с поддръжка на PWM. Позволява точно време за изпълнение на програмата (управление на събития) и генериране на вълни.
Показана е опростена блокова диаграма на 8-битовия таймер/брояч Фигура 11-1. За действителното разположение на I/O щифтовете вижте “Пинout ATtiny25/45/85” на страница 2. Достъпните I/O регистри, включително I/O битове и I/O щифтове, са показани с удебелен шрифт. Специфичният за устройството I/O регистър и местоположенията на битовете са изброени в “Описание на регистъра” на страница 77.
Регистрите за таймер/брояч (TCNT0) и изходно сравнение (OCR0A и OCR0B) са 8-битови регистри. Всички сигнали за искане за прекъсване (съкратено до Int.Req. на фигурата) са видими в регистъра на флаговете за прекъсване на таймера (TIFR). Всички прекъсвания са индивидуално маскирани с регистъра на маската за прекъсване на таймера (TIMSK). TIFR и TIMSK не са показани на фигурата.
Таймерът/броячът може да бъде тактован вътрешно, чрез прескалера или от външен източник на часовник на щифта T0. Логическият блок за избор на часовник контролира кой източник на часовник и граница, които таймерът/броячът използва, за да увеличи (или намали) своята стойност. Таймерът/броячът е неактивен, когато не е избран източник на часовник. Изходът от логиката за избор на часовник се нарича часовник на таймера (clkT0).
Двойно буферираните регистри за сравнение на изхода (OCR0A и OCR0B) се сравняват със стойността на таймера/брояча по всяко време. Резултатът от сравнението може да се използва от Waveform Generator за генериране на PWM или изход с променлива честота на щифтовете за сравнение на изхода (OC0A и OC0B). Вижте „Единица за сравнение на изхода“ на страница 69. за подробности. Събитието Compare Match също ще зададе флага Compare (OCF0A или OCF0B), който може да се използва за генериране на заявка за прекъсване на Output Compare.
Дефиниции
Много препратки към регистри и битове в този раздел са написани в обща форма. Малка буква „n“ замества номера на таймера/брояча, в този случай 0. Малка буква „x“ замества единицата за сравнение на изхода, в този случай единица за сравнение A или единица за сравнение B. Въпреки това, когато се използва регистърът или битът дефинира в програма трябва да се използва точната форма, т.е. TCNT0 за достъп до стойността на брояча на Timer/Counter0 и т.н.
Определенията в Таблица 11-1 също се използват широко в целия документ.
Таблица 11-1. Дефиниции
Константа | Описание |
ДЪНО | Броячът достига ДЪНОТО, когато стане 0x00 |
МАКС | Броячът достига максимума си, когато стане 0xFF (десетично 255) |
ТОП | Броячът достига ВЪРХУ, когато стане равен на най-високата стойност в последователността от броене. Стойността TOP може да бъде присвоена като фиксирана стойност 0xFF (MAX) или стойността, съхранена в регистъра OCR0A. Заданието зависи от режима на работа |
Таймер/брояч Prescaler и часовникови източници
Таймерът/броячът може да бъде тактован от вътрешен или външен източник на часовник. Източникът на часовник се избира от логиката за избор на часовник, която се управлява от битовете за избор на часовник (c), намиращи се в контролния регистър на таймера/брояча (TCCR0B).
Вътрешен източник на часовник с Prescaler
Таймер/брояч 0 може да бъде тактован директно от системния часовник (чрез настройка на CS0[2:0] = 1). Това осигурява най-бързата работа с максимална тактова честота на таймера/брояча, равна на честотата на системния часовник (fCLK_I/O). Алтернативно, едно от четирите крана от предскалера може да се използва като източник на часовник. Предварително мащабираният часовник има честота от двете
Нулиране на предскалера
Прескалерът работи свободно, т.е. работи независимо от логиката за избор на часовник на Timer/Counter0. Тъй като прескалерът не се влияе от избора на часовник на таймера/брояча, състоянието на прескалера ще има значение за ситуации, в които се използва предварително мащабиран часовник. Един бившample на артефакт за предварително мащабиране е, когато таймерът/броячът е активиран и тактован от предварително мащабиращия (6 > CS0[2:0] > 1). Броят на циклите на системния часовник от момента, в който таймерът е активиран, до възникването на първото преброяване може да бъде от 1 до N+1 цикъла на системния часовник, където N е равно на делителя на предскалера (8, 64, 256 или 1024).
Възможно е да се използва Prescaler Reset за синхронизиране на таймера/брояча с изпълнението на програмата.
Външен източник на часовник
Външен източник на часовник, приложен към щифта T0, може да се използва като часовник на таймер/брояч (clkT0). Щифтът T0 е sampводен веднъж на всеки цикъл на системния часовник от логиката за синхронизиране на щифтовете. Синхронизираният (сampLED) след това се предава сигнал
през детектора за ръбове. Фигура 11-2 показва функционална еквивалентна блокова диаграма на T0 синхронизацията и логиката на детектора на ръбове. Регистрите се тактират на положителния фронт на вътрешния системен часовник (clkI/O). Резето е прозрачно във високия период на вътрешния системен часовник.
Детекторът на ръбове генерира един импулс clkT0 за всеки положителен (CS0[2:0] = 7) или отрицателен (CS0[2:0] = 6) ръб, който открие.
Регистрите OCR0x са двойно буферирани, когато се използва някой от режимите на модулация на ширината на импулса (PWM). За нормалния и Clear Timer on Compare (CTC) режими на работа двойното буфериране е деактивирано. Двойното буфериране синхронизира актуализацията на регистрите за сравнение на OCR0x към горната или долната част на последователността за броене. Синхронизацията предотвратява появата на несиметрични PWM импулси с нечетна дължина, като по този начин прави изхода без проблеми.
Достъпът до регистъра OCR0x може да изглежда сложен, но това не е така. Когато двойното буфериране е активирано, процесорът има достъп до буферния регистър OCR0x и ако двойното буфериране е деактивирано, процесорът ще има директен достъп до OCR0x.
Force Output Compare
В режими на генериране на форма на вълна без PWM, изходът за съвпадение на компаратора може да бъде принуден чрез записване на единица в бита Force Output Compare (FOC0x). Принудителното съвпадение на сравнение няма да зададе флага OCF0x или да презареди/изчисти таймера, но щифтът OC0x ще се актуализира, сякаш е настъпило истинско съвпадение на сравнение (настройките за битове COM0x[1:0] определят дали пинът OC0x е зададен, изчистен или превключван).
Сравнете блокирането на съвпадение от TCNT0 Write
Всички операции за запис на CPU в регистъра TCNT0 ще блокират всяко съвпадение на сравнение, което се случва в следващия тактов цикъл на таймера, дори когато таймерът е спрян. Тази функция позволява OCR0x да бъде инициализиран със същата стойност като TCNT0, без да задейства прекъсване, когато часовникът на таймера/брояча е активиран.
Използване на модула за сравнение на изхода
Тъй като писането на TCNT0 във всеки режим на работа ще блокира всички съвпадения за сравнение за един тактов цикъл на таймера, съществуват рискове, свързани с промяната на TCNT0, когато се използва модулът за сравнение на изхода, независимо от това дали таймерът/броячът работи или не. Ако стойността, записана в TCNT0, е равна на стойността OCR0x, съвпадението за сравнение ще бъде пропуснато, което ще доведе до неправилно генериране на вълнова форма. По същия начин не записвайте стойността TCNT0, равна на BOTTOM, когато броячът брои надолу.
Настройката на OC0x трябва да се извърши, преди да се настрои регистърът за посока на данните за щифта на порта за изход. Най-лесният начин за задаване на стойността OC0x е да използвате битовете за стробиране на Force Output Compare (FOC0x) в нормален режим. Регистрите OC0x запазват стойностите си дори при смяна между режимите на генериране на вълнова форма.
Имайте предвид, че битовете COM0x[1:0] не са двойно буферирани заедно със стойността за сравнение. Промяната на битовете COM0x[1:0] ще влезе в сила незабавно.
Сравнете изходната единица за съвпадение
Битовете за режим на изход за сравнение (COM0x[1:0]) имат две функции. Генераторът на вълнови форми използва битовете COM0x[1:0] за дефиниране на състоянието на изходното сравнение (OC0x) при следващото съвпадение на сравнение. Освен това битовете COM0x[1:0] управляват изходния източник на пин OC0x. Фигура 11-6 показва опростена схема на логиката, засегната от битовата настройка COM0x[1:0]. I/O регистрите, I/O битовете и I/O щифтовете на фигурата са показани с удебелен шрифт. Показани са само частите от общите регистри за управление на I/O портове (DDR и PORT), които са засегнати от битовете COM0x[1:0]. Когато се говори за състоянието OC0x, препратката е за вътрешния регистър OC0x, а не за щифта OC0x. Ако възникне нулиране на системата, регистърът OC0x се нулира на „0“.
Когато OC0A/OC0B е свързан към I/O щифта, функцията на битовете COM0A[1:0]/COM0B[1:0] зависи от настройката на бита WGM0[2:0]. Таблица 11-2 показва функционалността на бита COM0x[1:0], когато битовете WGM0[2:0] са настроени на нормален или CTC режим (не-PWM).
Таблица 11-2. Сравнете изходен режим, не-PWM режим
COM0A1 COM0B1 | COM0A0 COM0B0 | Описание |
0 | 0 | Нормална работа на порта, OC0A/OC0B прекъснат. |
0 | 1 | Превключете OC0A/OC0B при съвпадение на сравнение |
1 | 0 | Изчистване на OC0A/OC0B при сравнение на съвпадението |
1 | 1 | Задайте OC0A/OC0B на Compare Match |
Таблица 11-3 показва функционалността на бита COM0x[1:0], когато битовете WGM0[2:0] са настроени на бърз PWM режим.
Таблица 11-3. Сравнете изходен режим, бърз PWM режим(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Описание |
0 | 0 | Нормална работа на порта, OC0A/OC0B прекъснат. |
0 | 1 | Запазено |
1 | 0 | Изчистване на OC0A/OC0B при съвпадение на сравнение, задаване на OC0A/OC0B в ДОЛНОТО (неинвертиращ режим) |
1 | 1 | Задайте OC0A/OC0B на Compare Match, изчистете OC0A/OC0B в BOTTOM (режим на обръщане) |
Забележка: Възниква специален случай, когато OCR0A или OCR0B е равно на TOP и е зададено COM0A1/COM0B1. В този случай съвпадението за сравнение се игнорира, но настройката или изчистването се извършва в ДОЛНОТО. Вижте “Бърз режим PWM” на страница 73 за повече подробности.
Таблица 11-4 показва функционалността на бита COM0x[1:0], когато битовете WGM0[2:0] са настроени на фазово правилен PWM режим.
Таблица 11-4. Сравнете режим на изход, фазово правилен PWM режим(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Описание |
0 | 0 | Нормална работа на порта, OC0A/OC0B прекъснат. |
0 | 1 | Запазено |
1 | 0 | Изчистете OC0A/OC0B при сравнение на съвпадението при преброяване. Задайте OC0A/OC0B на Compare Match, когато броите надолу. |
1 | 1 | Задайте OC0A/OC0B на Compare Match при преброяване. Изчистване на OC0A/OC0B при сравняване на съвпадението при преброяване. |
Забележка: 1. Възниква специален случай, когато OCR0A или OCR0B е равно на TOP и е зададено COM0A1/COM0B1. В този случай съвпадението за сравнение се игнорира, но настройката или изчистването се извършват от TOP. Вижте “Phase Correct PWM Mode” на страница 74 за повече подробности.
Битове 3:2 – Res: Запазени битове
Тези битове са запазени битове в ATtiny25/45/85 и винаги ще се четат като нула.
Битове 1:0 – WGM0[1:0]: Режим на генериране на вълнова форма
Комбинирани с бита WGM02, намиращ се в регистъра TCCR0B, тези битове контролират последователността на броене на брояча, източника за максимална (TOP) стойност на брояча и какъв тип генериране на вълнова форма да се използва, вж. Таблица 11-5. Режимите на работа, поддържани от модула за таймер/брояч, са: нормален режим (брояч), режим Clear Timer on Compare Match (CTC) и два вида режими на модулация на ширината на импулса (PWM) (вж. „Режими на работа“ на страница 71).
Таблица 11-5. Описание на бита на режима на генериране на вълнова форма
Режим | WGM 02 | WGM 01 | WGM 00 | Режим на работа на таймера/брояча | ТОП | Актуализация на OCRx на | Флагът на TOV е включен |
0 | 0 | 0 | 0 | нормално | 0xFF | Незабавно | МАКС(1) |
1 | 0 | 0 | 1 | PWM, правилна фаза | 0xFF | ТОП | ДЪНО(2) |
2 | 0 | 1 | 0 | CTC | OCRA | Незабавно | МАКС(1) |
3 | 0 | 1 | 1 | Бърз ШИМ | 0xFF | ДЪНО(2) | МАКС(1) |
4 | 1 | 0 | 0 | Запазено | – | – | – |
5 | 1 | 0 | 1 | PWM, правилна фаза | OCRA | ТОП | ДЪНО(2) |
6 | 1 | 1 | 0 | Запазено | – | – | – |
7 | 1 | 1 | 1 | Бърз ШИМ | OCRA | ДЪНО(2) | ТОП |
Бит 7 – FOC0A: Принудително сравняване на изхода A
Битът FOC0A е активен само когато битовете WGM определят режим без PWM.
Въпреки това, за да се осигури съвместимост с бъдещи устройства, този бит трябва да бъде зададен на нула, когато TCCR0B се записва при работа в режим PWM. Когато записвате логическа единица в бита FOC0A, незабавно съвпадение на сравнението се принуждава към модула за генериране на вълнова форма. Изходът OC0A се променя според настройката му за битове COM0A[1:0]. Обърнете внимание, че битът FOC0A е реализиран като светкавица. Следователно стойността, присъстваща в битовете COM0A[1:0], определя ефекта от принудителното сравнение.
Стробоскоп FOC0A няма да генерира никакво прекъсване, нито ще изчисти таймера в режим CTC, използвайки OCR0A като TOP. Битът FOC0A винаги се чете като нула.
Бит 6 – FOC0B: Принудително сравняване на изхода B
Битът FOC0B е активен само когато битовете WGM указват режим без ШИМ.
Въпреки това, за да се осигури съвместимост с бъдещи устройства, този бит трябва да бъде зададен на нула, когато TCCR0B се записва при работа в режим PWM. Когато записвате логическа единица в бита FOC0B, незабавно съвпадение на сравнението се принуждава към модула за генериране на вълнова форма. Изходът OC0B се променя според настройката му за битове COM0B[1:0]. Обърнете внимание, че битът FOC0B е реализиран като светкавица. Следователно стойността, присъстваща в битовете COM0B[1:0], определя ефекта от принудителното сравнение.
Стробоскоп FOC0B няма да генерира никакво прекъсване, нито ще изчисти таймера в режим CTC, използвайки OCR0B като TOP.
Битът FOC0B винаги се чете като нула.
Битове 5:4 – Res: Запазени битове
Тези битове са запазени битове в ATtiny25/45/85 и винаги ще се четат като нула.
Бит 3 – WGM02: Режим на генериране на вълнова форма
Вижте описанието в “TCCR0A – Контролен регистър на таймер/брояч A” на страница 77.
Битове 2:0 – CS0[2:0]: Избор на часовник
Трите бита за избор на часовник избират източника на часовник, който да се използва от таймера/брояча.
Таблица 11-6. Часовник Избор на бит Описание
CS02 | CS01 | CS00 | Описание |
0 | 0 | 0 | Няма източник на часовник (таймерът/броячът е спрян) |
0 | 0 | 1 | clkI/O/(без предварително мащабиране) |
0 | 1 | 0 | clkI/O/8 (От предскалер) |
0 | 1 | 1 | clkI/O/64 (От предскалер) |
1 | 0 | 0 | clkI/O/256 (От предскалер) |
1 | 0 | 1 | clkI/O/1024 (От предскалер) |
1 | 1 | 0 | Външен източник на часовник на щифт T0. Часовник на падащ ръб. |
1 | 1 | 1 | Външен източник на часовник на щифт T0. Часовник на нарастващ ръб. |
Ако се използват режими на външни щифтове за Timer/Counter0, преходите на щифта T0 ще синхронизират брояча, дори ако щифтът е конфигуриран като изход. Тази функция позволява софтуерен контрол на броенето.
Брояч и сравнение на единици
Общата работа на Timer/Counter1 е описана в асинхронен режим, а работата в синхронен режим се споменава само ако има разлики между тези два режима. Фигура 12-2 показва блокова диаграма на регистъра за синхронизация на таймер/брояч 1 и закъснения при синхронизиране между регистрите. Обърнете внимание, че всички подробности за стробирането на часовника не са показани на фигурата. Стойностите на регистъра Timer/Counter1 преминават през вътрешните регистри за синхронизация, които причиняват забавяне на синхронизирането на входа, преди да повлияят на работата на брояча. Регистрите TCCR1, GTCCR, OCR1A, OCR1B и OCR1C могат да бъдат прочетени обратно веднага след запис на регистъра. Стойностите за обратно четене се забавят за регистъра Timer/Counter1 (TCNT1) и флаговете (OCF1A, OCF1B и TOV1), поради входната и изходната синхронизация.
Таймер/брояч1 се отличава с висока разделителна способност и използване с висока точност с по-ниски възможности за предварително мащабиране. Той може също така да поддържа два точни, високоскоростни, 8-битови модулатори на ширина на импулса, използващи тактови скорости до 64 MHz (или 32 MHz в режим на ниска скорост). В този режим Timer/Counter1 и регистрите за сравнение на изхода служат като двойни самостоятелни PWM с непрепокриващи се неинвертирани и инвертирани изходи. Обърнете се към страница 86 за подробно описание на тази функция. По подобен начин възможностите за високо предварително мащабиране правят това устройство полезно за функции с по-ниска скорост или функции за точно синхронизиране с редки действия.
Фигура 12-2. Блокова схема на регистъра за синхронизиране на таймер/брояч 1.
Таймер/брояч1 и прескалерът позволяват стартиране на процесора от всеки източник на тактова честота, докато прескалерът работи на бързия 64 MHz (или 32 MHz в режим на ниска скорост) PCK часовник в асинхронен режим.
Имайте предвид, че тактовата честота на системата трябва да е по-ниска от една трета от честотата на PCK. Механизмът за синхронизиране на асинхронния таймер/брояч1 се нуждае от поне два фронта на PCK, когато системният часовник е висок. Ако честотата на системния часовник е твърде висока, съществува риск от загуба на данни или контролни стойности.
Следното Фигура 12-3 показва блоковата диаграма за Timer/Counter1.
Таблица 12-1. Режим на сравнение Изберете в режим PWM
COM1x1 | COM1x0 | Ефект върху пинове за сравнение на изхода |
0 | 0 | OC1x не е свързан. OC1x не е свързан. |
0 | 1 | OC1x изчистен при сравняване. Задайте, когатоTCNT1 = $00. OC1x, зададен за сравнение. Изчиства се, когато TCNT1 = $00. |
1 | 0 | OC1x изчистен при сравняване. Задайте, когато TCNT1 = $00. OC1x не е свързан. |
1 | 1 | OC1x Задайте при сравняване. Изчиства се, когато TCNT1= $00. OC1x не е свързан. |
Характеристики на ADC
Таблица 21-8. Характеристики на ADC, канали с единичен край. TA = -40°C до +85°C
Символ | Параметър | Състояние | Мин | Тип | Макс | единици |
Резолюция | 10 | битове | ||||
Абсолютна точност (включително грешки при INL, DNL и квантуване, усилване и отместване) | VREF = 4V, VCC = 4V,
ADC часовник = 200 kHz |
2 | LSB | |||
VREF = 4V, VCC = 4V,
ADC тактова честота = 1 MHz |
3 | LSB | ||||
VREF = 4V, VCC = 4V,
ADC часовник = 200 kHz Режим за намаляване на шума |
1.5 | LSB | ||||
VREF = 4V, VCC = 4V,
ADC тактова честота = 1 MHz Режим за намаляване на шума |
2.5 | LSB | ||||
Интегрална нелинейност (INL) (Точност след отместване и калибриране на усилването) | VREF = 4V, VCC = 4V,
ADC часовник = 200 kHz |
1 | LSB | |||
Диференциална нелинейност (DNL) | VREF = 4V, VCC = 4V,
ADC часовник = 200 kHz |
0.5 | LSB | |||
Получаване на грешка | VREF = 4V, VCC = 4V,
ADC часовник = 200 kHz |
2.5 | LSB | |||
Грешка при отместване | VREF = 4V, VCC = 4V,
ADC часовник = 200 kHz |
1.5 | LSB | |||
Време за преобразуване | Безплатно преобразуване | 14 | 280 | µs | ||
Тактова честота | 50 | 1000 | кХц | |||
VIN номер | Входен обемtage | GND | VREF | V | ||
Входна честотна лента | 38.4 | кХц | ||||
AREF | Външна справка томtage | 2.0 | VCC | V | ||
VINT | Вътрешен томtage Справка | 1.0 | 1.1 | 1.2 | V | |
Вътрешен референтен 2.56V (1) | VCC > 3.0 V | 2.3 | 2.56 | 2.8 | V | |
RREF | 32 | kΩ | ||||
ДЪЖД | Аналогово входно съпротивление | 100 | MΩ | |||
ADC изход | 0 | 1023 | LSB |
Забележка: 1. Стойностите са само насоки.
Таблица 21-9. Характеристики на ADC, диференциални канали (еднополярен режим). TA = -40°C до +85°C
Символ | Параметър | Състояние | Мин | Тип | Макс | единици |
Резолюция | Печалба = 1x | 10 | битове | |||
Печалба = 20x | 10 | битове | ||||
Абсолютна точност (включително INL, DNL и
Грешки при квантуване, усилване и отместване) |
Печалба = 1x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
10.0 | LSB | |||
Печалба = 20x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
20.0 | LSB | ||||
Интегрална нелинейност (INL) (точност след отместване и калибриране на усилването) | Печалба = 1x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
4.0 | LSB | |||
Печалба = 20x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
10.0 | LSB | ||||
Получаване на грешка | Печалба = 1x | 10.0 | LSB | |||
Печалба = 20x | 15.0 | LSB | ||||
Грешка при отместване | Печалба = 1x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
3.0 | LSB | |||
Печалба = 20x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
4.0 | LSB | ||||
Време за преобразуване | Безплатно преобразуване | 70 | 280 | µs | ||
Тактова честота | 50 | 200 | кХц | |||
VIN номер | Входен обемtage | GND | VCC | V | ||
VDIFF | Входна диференциална обtage | VREF/усилване | V | |||
Входна честотна лента | 4 | кХц | ||||
AREF | Външна справка томtage | 2.0 | VCC – 1.0 | V | ||
VINT | Вътрешен томtage Справка | 1.0 | 1.1 | 1.2 | V | |
Вътрешен референтен 2.56V (1) | VCC > 3.0 V | 2.3 | 2.56 | 2.8 | V | |
RREF | Референтно входно съпротивление | 32 | kΩ | |||
ДЪЖД | Аналогово входно съпротивление | 100 | MΩ | |||
Изход за ADC преобразуване | 0 | 1023 | LSB |
Забележка: Стойностите са само насоки.
Таблица 21-10. Характеристики на ADC, диференциални канали (биполярен режим). TA = -40°C до +85°C
Символ | Параметър | Състояние | Мин | Тип | Макс | единици |
Резолюция | Печалба = 1x | 10 | битове | |||
Печалба = 20x | 10 | битове | ||||
Абсолютна точност (включително INL, DNL и
Грешки при квантуване, усилване и отместване) |
Печалба = 1x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
8.0 | LSB | |||
Печалба = 20x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
8.0 | LSB | ||||
Интегрална нелинейност (INL) (точност след отместване и калибриране на усилването) | Печалба = 1x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
4.0 | LSB | |||
Печалба = 20x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
5.0 | LSB | ||||
Получаване на грешка | Печалба = 1x | 4.0 | LSB | |||
Печалба = 20x | 5.0 | LSB | ||||
Грешка при отместване | Печалба = 1x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
3.0 | LSB | |||
Печалба = 20x
VREF = 4V, VCC = 5V ADC тактова честота = 50 – 200 kHz |
4.0 | LSB | ||||
Време за преобразуване | Безплатно преобразуване | 70 | 280 | µs | ||
Тактова честота | 50 | 200 | кХц | |||
VIN номер | Входен обемtage | GND | VCC | V | ||
VDIFF | Входна диференциална обtage | VREF/усилване | V | |||
Входна честотна лента | 4 | кХц | ||||
AREF | Външна справка томtage | 2.0 | VCC – 1.0 | V | ||
VINT | Вътрешен томtage Справка | 1.0 | 1.1 | 1.2 | V | |
Вътрешен референтен 2.56V (1) | VCC > 3.0 V | 2.3 | 2.56 | 2.8 | V | |
RREF | Референтно входно съпротивление | 32 | kΩ | |||
ДЪЖД | Аналогово входно съпротивление | 100 | MΩ | |||
Изход за ADC преобразуване | -512 | 511 | LSB |
Обобщение на набора инструкции
Мнемоника | Операнди | Описание | Операция | Знамена | #Часовници |
АРИТМЕТИЧНИ И ЛОГИЧЕСКИ ИНСТРУКЦИИ | |||||
ДОБАВЯНЕ | Rd, Rr | Добавете два регистъра | Rd ← Rd + Rr | Z,C,N,V,H | 1 |
ADC | Rd, Rr | Добавете с Carry два регистъра | Rd ← Rd + Rr + C | Z,C,N,V,H | 1 |
ADIW | Rdl,K | Добавете незабавно към Word | Rdh:Rdl ← Rdh:Rdl + K | Z,C,N,V,S | 2 |
ПОДП | Rd, Rr | Извадете два регистъра | Rd ← Rd – Rr | Z,C,N,V,H | 1 |
СУБИ | Рд, К | Извадете константата от регистъра | Rd ← Rd – К | Z,C,N,V,H | 1 |
SBC | Rd, Rr | Изваждане с Carry два регистъра | Rd ← Rd – Rr – C | Z,C,N,V,H | 1 |
SBCI | Рд, К | Извадете с Carry Constant от Reg. | Rd ← Rd – K – C | Z,C,N,V,H | 1 |
SBIW | Rdl,K | Извадете незабавно от Word | Rdh:Rdl ← Rdh:Rdl – К | Z,C,N,V,S | 2 |
И | Rd, Rr | Логически И регистри | Rd ← Rd ∙ Rr | Z,N,V | 1 |
АНДИ | Рд, К | Логически регистър И и константа | Rd ← Rd ∙ K | Z,N,V | 1 |
OR | Rd, Rr | Регистри логическо ИЛИ | Rd ← Rd v Rr | Z,N,V | 1 |
ORI | Рд, К | Логически регистър ИЛИ и константа | Rd ← Rd v K | Z,N,V | 1 |
EOR | Rd, Rr | Изключителни ИЛИ регистри | Rd ← Rd ⊕ Rr | Z,N,V | 1 |
COM | Rd | Едно допълнение | Rd ← 0xFF − Rd | Z,C,N,V | 1 |
NEG | Rd | Допълнение на две | Rd ← 0x00 − Rd | Z,C,N,V,H | 1 |
SBR | Rd,K | Задайте бит(ове) в регистъра | Rd ← Rd v K | Z,N,V | 1 |
CBR | Rd,K | Изчистване на бит(ове) в регистъра | Rd ← Rd ∙ (0xFF – K) | Z,N,V | 1 |
INC | Rd | Увеличаване | Rd ← Rd + 1 | Z,N,V | 1 |
ДЕК | Rd | снижаване | Rd ← Rd − 1 | Z,N,V | 1 |
TST | Rd | Тествайте за нула или минус | Rd ← Rd ∙ Rd | Z,N,V | 1 |
CLR | Rd | Изчистване на регистъра | Rd ← Rd ⊕ Rd | Z,N,V | 1 |
SER | Rd | Задайте Регистрация | Rd ← 0xFF | Няма | 1 |
УКАЗАНИЯ ЗА КЛОН | |||||
RJMP | k | Относителен скок | PC ← PC + k + 1 | Няма | 2 |
IJMP | Непряк скок към (Z) | PC ← Z | Няма | 2 | |
RCALL | k | Извикване на относителна подпрограма | PC ← PC + k + 1 | Няма | 3 |
ICALL | Непряко обаждане до (Z) | PC ← Z | Няма | 3 | |
RET | Подпрограма Връщане | КОМПЮТЪР ← СТОК | Няма | 4 | |
РЕТИ | Връщане на прекъсване | КОМПЮТЪР ← СТОК | I | 4 | |
CPSE | Rd,Rr | Сравнете, пропуснете, ако е равно | ако (Rd = Rr) PC ← PC + 2 или 3 | Няма | 1/2/3 |
CP | Rd,Rr | Сравнете | Rd − Rr | Z, N, V, C, H | 1 |
CPC | Rd,Rr | Сравнете с Carry | Rd − Rr − C | Z, N, V, C, H | 1 |
CPI | Rd,K | Сравнете Регистриране с Незабавно | Rd − K | Z, N, V, C, H | 1 |
SBRC | Rr, b | Пропускане, ако битът в регистъра е изчистен | ако (Rr(b)=0) PC ← PC + 2 или 3 | Няма | 1/2/3 |
SBRS | Rr, b | Пропуснете, ако битът в регистъра е зададен | ако (Rr(b)=1) PC ← PC + 2 или 3 | Няма | 1/2/3 |
SBIC | П, б | Пропускане, ако битът в I/O регистър е изчистен | ако (P(b)=0) PC ← PC + 2 или 3 | Няма | 1/2/3 |
SBIS | П, б | Пропуснете, ако битът в I/O регистър е зададен | ако (P(b)=1) PC ← PC + 2 или 3 | Няма | 1/2/3 |
БРБС | s, k | Разклоняване, ако е зададен флаг за състояние | ако (SREG(s) = 1), тогава PC ←PC+k + 1 | Няма | 1/2 |
BRBC | s, k | Разклоняване, ако флагът за състояние е изчистен | ако (SREG(s) = 0), тогава PC ←PC+k + 1 | Няма | 1/2 |
BREQ | k | Разклоняване, ако е равно | ако (Z = 1), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRNE | k | Разклоняване, ако не е равно | ако (Z = 0), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRCS | k | Разклонете, ако Carry Set | ако (C = 1), тогава PC ← PC + k + 1 | Няма | 1/2 |
БРЦК | k | Клон, ако Carry е изчистено | ако (C = 0), тогава PC ← PC + k + 1 | Няма | 1/2 |
БРШ | k | Клон, ако същото или по-високо | ако (C = 0), тогава PC ← PC + k + 1 | Няма | 1/2 |
БРЛО | k | Клон, ако е по-нисък | ако (C = 1), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRMI | k | Клон ако минус | ако (N = 1), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRPL | k | Разклонете ако Плюс | ако (N = 0), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRGE | k | Разклонение, ако е по-голямо или равно, със знак | ако (N ⊕ V= 0), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRLT | k | Разклонение, ако е по-малко от нула, със знак | ако (N ⊕ V= 1), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRHS | k | Разклонете, ако сте поставили флаг на половин носене | ако (H = 1), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRHC | k | Разклоняване, ако флагът за пренасяне наполовина е изчистен | ако (H = 0), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRTS | k | Разклоняване, ако е зададен флаг T | ако (T = 1), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRTC | k | Разклоняване, ако T флагът е изчистен | ако (T = 0), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRVS | k | Разклонете, ако е зададен флаг за препълване | ако (V = 1), тогава PC ← PC + k + 1 | Няма | 1/2 |
BRVC | k | Разклонете, ако флагът за препълване е изчистен | ако (V = 0), тогава PC ← PC + k + 1 | Няма | 1/2 |
БРИЙ | k | Разклоняване, ако прекъсването е разрешено | ако ( I = 1), тогава PC ← PC + k + 1 | Няма | 1/2 |
МУЛКА | k | Разклоняване, ако прекъсването е забранено | ако ( I = 0), тогава PC ← PC + k + 1 | Няма | 1/2 |
ИНСТРУКЦИИ ЗА БИТ И БИТ-ТЕСТ | |||||
SBI | П,б | Задайте бит в I/O регистър | I/O(P,b) ← 1 | Няма | 2 |
CBI | П,б | Изчистване на бит в I/O регистър | I/O(P,b) ← 0 | Няма | 2 |
LSL | Rd | Логическо изместване наляво | Rd(n+1) ← Rd(n), Rd(0) ← 0 | Z,C,N,V | 1 |
LSR | Rd | Логическо изместване надясно | Rd(n) ← Rd(n+1), Rd(7) ← 0 | Z,C,N,V | 1 |
РОЛЯ | Rd | Завъртане наляво чрез носене | Rd(0)←C,Rd(n+1) ← Rd(n),C←Rd(7) | Z,C,N,V | 1 |
ROR | Rd | Rotate Right Through Carry | Rd(7)←C,Rd(n) ← Rd(n+1),C←Rd(0) | Z,C,N,V | 1 |
ASR | Rd | Аритметично изместване надясно | Rd(n) ← Rd(n+1), n=0..6 | Z,C,N,V | 1 |
Мнемоника | Операнди | Описание | Операция | Знамена | #Часовници |
СВАП | Rd | Разменете хапките | Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) | Няма | 1 |
BSET | s | Комплект знамена | SREG(s) ← 1 | SREG(и) | 1 |
BCLR | s | Изчистване на флага | SREG(s) ← 0 | SREG(и) | 1 |
BST | Rr, b | Bit Store от Register към T | T ← Rr(b) | T | 1 |
BLD | Rd, b | Битово натоварване от T до регистър | Rd(b) ← T | Няма | 1 |
SEC | Задайте Carry | C ← 1 | C | 1 | |
CLC | Clear Carry | C ← 0 | C | 1 | |
SEN | Задаване на отрицателен флаг | N ← 1 | N | 1 | |
CLN | Изчистване на отрицателния флаг | N ← 0 | N | 1 | |
SEZ | Задайте нулев флаг | Z ← 1 | Z | 1 | |
CLZ | Изчистване на флага за нула | Z ← 0 | Z | 1 | |
SEI | Разрешаване на глобално прекъсване | I ← 1 | I | 1 | |
CLI | Глобално забраняване на прекъсването | I ← 0 | I | 1 | |
SES | Задайте подписан тестов флаг | S ← 1 | S | 1 | |
CLS | Ясно подписано тестово знаме | S ← 0 | S | 1 | |
SEV | Set Twos Complement Overflow. | V ← 1 | V | 1 | |
CLV | Clear Twos Complement Overflow | V ← 0 | V | 1 | |
НАБОР | Задайте T в SREG | Т ← 1 | T | 1 | |
CLT | Изчистете T в SREG | Т ← 0 | T | 1 | |
SEH | Задайте Half Carry Flag в SREG | H ← 1 | H | 1 | |
CLH | Изчистване на флага за половин пренос в SREG | H ← 0 | H | 1 | |
ИНСТРУКЦИИ ЗА ТРАНСФЕР НА ДАННИ | |||||
MOV | Rd, Rr | Преместване между регистри | Rd ← Rr | Няма | 1 |
MOVW | Rd, Rr | Копиране на регистрационна дума | Rd+1:Rd ← Rr+1:Rr | Няма | 1 |
LDI | Рд, К | Заредете незабавно | Rd ← K | Няма | 1 |
LD | Rd, X | Заредете индиректно | Rd ← (X) | Няма | 2 |
LD | Rd, X+ | Заредете непряко и пост-вкл. | Rd ← (X), X ← X + 1 | Няма | 2 |
LD | Рд, – X | Заредете индиректно и преди дек. | X ← X – 1, Rd ← (X) | Няма | 2 |
LD | Rd, Y | Заредете индиректно | Rd ← (Y) | Няма | 2 |
LD | Rd, Y+ | Заредете непряко и пост-вкл. | Rd ← (Y), Y ← Y + 1 | Няма | 2 |
LD | Rd, – Y | Заредете индиректно и преди дек. | Y ← Y – 1, Rd ← (Y) | Няма | 2 |
LDD | Rd,Y+q | Натоварване индиректно с изместване | Rd ← (Y + q) | Няма | 2 |
LD | Рд, З | Заредете индиректно | Rd ← (Z) | Няма | 2 |
LD | Rd, Z+ | Заредете непряко и пост-вкл. | Rd ← (Z), Z ← Z+1 | Няма | 2 |
LD | Rd, -Z | Заредете индиректно и преди дек. | Z ← Z – 1, Rd ← (Z) | Няма | 2 |
LDD | Rd, Z+q | Натоварване индиректно с изместване | Rd ← (Z + q) | Няма | 2 |
LDS | Rd, k | Заредете директно от SRAM | Rd ← (k) | Няма | 2 |
ST | X, Rr | Store Indirect | (X) ← Rr | Няма | 2 |
ST | X+, Rr | Store Indirect и Post-Inc. | (X) ← Rr, X ← X + 1 | Няма | 2 |
ST | – X, Rr | Store Indirect и Pre-Dec. | X ← X – 1, (X) ← Rr | Няма | 2 |
ST | Y, Rr | Store Indirect | (Y) ← Rr | Няма | 2 |
ST | Y+, Rr | Store Indirect и Post-Inc. | (Y) ← Rr, Y ← Y + 1 | Няма | 2 |
ST | – Y, Rr | Store Indirect и Pre-Dec. | Y ← Y – 1, (Y) ← Rr | Няма | 2 |
STD | Y+q,Rr | Съхранявайте индиректно с изместване | (Y + q) ← Rr | Няма | 2 |
ST | Z, Rr | Store Indirect | (Z) ← Rr | Няма | 2 |
ST | Z+, Rr | Store Indirect и Post-Inc. | (Z) ← Rr, Z ← Z + 1 | Няма | 2 |
ST | -Z, Rr | Store Indirect и Pre-Dec. | Z ← Z – 1, (Z) ← Rr | Няма | 2 |
STD | Z+q,Rr | Съхранявайте индиректно с изместване | (Z + q) ← Rr | Няма | 2 |
STS | k, Rr | Съхранявайте директно в SRAM | (k) ← Rr | Няма | 2 |
LPM | Заредете програмната памет | R0 ← (Z) | Няма | 3 | |
LPM | Рд, З | Заредете програмната памет | Rd ← (Z) | Няма | 3 |
LPM | Rd, Z+ | Заредете програмната памет и Post-Inc | Rd ← (Z), Z ← Z+1 | Няма | 3 |
SPM | Съхраняване на програмна памет | (z) ← R1:R0 | Няма | ||
IN | Рд, П | В Порт | Rd ← P | Няма | 1 |
ВЪН | P, Rr | Изходен порт | P ← Rr | Няма | 1 |
НАТИСНЕТЕ | Rr | Push Register on Stack | СТЪК ← Rr | Няма | 2 |
POP | Rd | Изскачане на регистрация от стека | Rd ← СТИК | Няма | 2 |
ИНСТРУКЦИИ ЗА УПРАВЛЕНИЕ НА MCU | |||||
NOP | Без операция | Няма | 1 | ||
СЪН | сън | (вижте конкретното описание за функцията Sleep) | Няма | 1 | |
WDR | Нулиране на Watchdog | (вижте конкретното описание за WDR/таймер) | Няма | 1 | |
БРЕЙК | почивка |
Скорост (MHz) (1) | Обем на доставкитеtagд (V) | Температурен диапазон | Пакет (2) | Код за поръчка (3) |
10 | 1.8 – 5.5 | Индустриален
(-40 ° C до + 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 | Индустриален
(-40 ° C до + 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 |
Бележки: 1. За скорост спрямо доставка voltage, вижте раздела 21.3 “Скорост” на страница 163.
Всички опаковки не съдържат Pb, без халиди и са напълно зелени и отговарят на Европейската директива за ограничаване на опасните вещества (RoHS).
Кодови индикатори
H: NiPdAu оловно покритие
U: матиран калай
R: лента и макара
Тези устройства могат да бъдат доставени и под формата на вафли. Моля, свържете се с местния търговски офис на Atmel за подробна информация за поръчка и минимални количества.
печатни грешки
Грешка ATtiny25
Писмото за ревизия в този раздел се отнася до ревизията на устройството ATtiny25.
Rev D – F
Няма известна грешка.
Rev B – C
Четенето на EEPROM може да се провали при нисък захранващ обемtage / ниска тактова честота
Четенето на EEPROM може да се провали при нисък захранващ обемtage / ниска тактова честота
Опитвайки се да прочете EEPROM при ниски тактови честоти и/или нисък обем на захранванеtage може да доведе до невалидни данни.
Отстраняване/заобиколно решение на проблема
Не използвайте EEPROM, когато тактовата честота е под 1MHz и обемът на захранванетоtage е под 2V. Ако работната честота не може да се повиши над 1 MHz, тогава захранващият обtage трябва да бъде повече от 2V. По същия начин, ако обtage не може да се повиши над 2V, тогава работната честота трябва да бъде повече от 1MHz.
Известно е, че тази характеристика зависи от температурата, но не е характеризирана. Насоките са дадени само за стайна температура.
Откровение A
Не sampводена.
Грешка ATtiny45
Писмото за ревизия в този раздел се отнася до ревизията на устройството ATtiny45.
Rev F – G
Няма известни грешки
Rev D – E
Четенето на EEPROM може да се провали при нисък захранващ обемtage / ниска тактова честота
Четенето на EEPROM може да се провали при нисък захранващ обемtage / ниска тактова честота
Опитвайки се да прочете EEPROM при ниски тактови честоти и/или нисък обем на захранванеtage може да доведе до невалидни данни.
Отстраняване/заобиколно решение на проблема
Не използвайте EEPROM, когато тактовата честота е под 1MHz и обемът на захранванетоtage е под 2V. Ако работната честота не може да се повиши над 1 MHz, тогава захранващият обtage трябва да бъде повече от 2V. По същия начин, ако обtage не може да се повиши над 2V, тогава работната честота трябва да бъде повече от 1MHz.
Известно е, че тази характеристика зависи от температурата, но не е характеризирана. Насоките са дадени само за стайна температура.
Rev B – C
PLL не се заключва
Четенето на EEPROM от кода на приложението не работи в Lock Bit Mode 3
Четенето на EEPROM може да се провали при нисък захранващ обемtage / ниска тактова честота
Таймер Брояч 1 PWM генериране на изход на OC1B-XOC1B не работи правилно
PLL не се заключва
Когато е на честоти под 6.0 MHz, PLL няма да се заключи
Отстраняване на проблем/заобиколно решение
Когато използвате PLL, работете на 6.0 MHz или по-висока.
Четенето на EEPROM от кода на приложението не работи в Lock Bit Mode 3
Когато битовете за заключване на паметта LB2 и LB1 са програмирани в режим 3, четенето на EEPROM не работи от кода на приложението.
Отстраняване на проблем/заобикаляне
Не задавайте Lock Bit Protection Mode 3, когато кодът на приложението трябва да чете от EEPROM.
Четенето на EEPROM може да се провали при нисък захранващ обемtage / ниска тактова честота
Опитвайки се да прочете EEPROM при ниски тактови честоти и/или нисък обем на захранванеtage може да доведе до невалидни данни.
Отстраняване/заобиколно решение на проблема
Не използвайте EEPROM, когато тактовата честота е под 1MHz и обемът на захранванетоtage е под 2V. Ако работната честота не може да се повиши над 1 MHz, тогава захранващият обtage трябва да бъде повече от 2V. По същия начин, ако обtage не може да се повиши над 2V, тогава работната честота трябва да бъде повече от 1MHz.
Известно е, че тази характеристика зависи от температурата, но не е характеризирана. Насоките са дадени само за стайна температура.
Таймер Брояч 1 Генериране на PWM изход на OC1B – XOC1B не работи правилно
Таймер Брояч1 PWM изход OC1B-XOC1B не работи правилно. Само в случай, когато контролните битове COM1B1 и COM1B0 са в същия режим като COM1A1 и COM1A0, съответно, изходът OC1B-XOC1B работи правилно.
Отстраняване на проблем/заобикаляне
Единственото заобиколно решение е да използвате една и съща контролна настройка на контролните битове COM1A[1:0] и COM1B[1:0], вижте таблица 14-4 в информационния лист. Проблемът е отстранен за Tiny45 rev D.
Откровение A
Твърде висока консумация на енергия при изключване
DebugWIRE губи комуникация при еднократно влизане в прекъсвания
PLL не се заключва
Четенето на EEPROM от кода на приложението не работи в Lock Bit Mode 3
Четенето на EEPROM може да се провали при нисък захранващ обемtage / ниска тактова честота
Твърде висока консумация на енергия при изключване
Три ситуации ще доведат до твърде висока консумация на енергия при изключване. Това са:
Външен часовник е избран чрез предпазители, но I/O PORT все още е активиран като изход.
EEPROM се чете преди изключване на захранването.
VCC е 4.5 волта или повече.
Отказ от отговорност: Информацията в този документ е предоставена във връзка с продуктите на Atmel. Този документ или във връзка с продажбата на продуктите на Atmel не предоставя никакъв лиценз, изричен или подразбиращ се, чрез изключване или по друг начин, за право на интелектуална собственост. ОСВЕН КАКВОТО Е ПОСОЧЕНО В ПРАВИЛАТА И УСЛОВИЯТА ЗА ПРОДАЖБА НА ATMEL, РАЗПОЛОЖЕНИ В ATMEL WEBСАЙТ, ATMEL НЕ ПОЕМА НИКАКВА ОТГОВОРНОСТ И СЕ ОТХВЪРЛЯ ИЗРИЧНА, КОСВЕНА ИЛИ ЗАКОНОВА ГАРАНЦИЯ, СВЪРЗАНА С НЕГОВИТЕ ПРОДУКТИ, ВКЛЮЧИТЕЛНО, НО НЕ САМО, КОСВЕНАТА ГАРАНЦИЯ ЗА ПРОДАВАЕМОСТ, ГОДНОСТ ЗА ОПРЕДЕЛЕНА ЦЕЛ ИЛИ НЕНАРУШЕНИЕ. В НИКАКЪВ СЛУЧАЙ ATMEL НЕ НОСИ ОТГОВОРНОСТ ЗА ПРЯКИ, НЕПРЯКИ, ПОСЛЕДВАЩИ, НАКАЗАТЕЛНИ, СПЕЦИАЛНИ ИЛИ СЛУЧАЙНИ ЩЕТИ (ВКЛЮЧИТЕЛНО, БЕЗ ОГРАНИЧЕНИЕ, ЩЕТИ ЗА ЗАГУБИ И ПЕЧАЛБИ, ПРЕКЪСВАНЕ НА БИЗНЕС ИЛИ ЗАГУБА НА ИНФОРМАЦИЯ), ПРОИЗТИЧАЩИ ОТ ИЗПОЛЗВАНЕТО ИЛИ НЕВЪЗМОЖНОСТТА ТОЗИ ДОКУМЕНТ, ДОРИ И АКО ATMEL Е БИЛ УВЕДОМЛЕН ЗА ВЪЗМОЖНОСТТА ЗА ТАКИВА ЩЕТИ.
Atmel не дава никакви декларации или гаранции по отношение на точността или пълнотата на съдържанието на този документ и си запазва правото да прави промени в спецификациите и описанията на продуктите по всяко време без предизвестие. Atmel не поема никакъв ангажимент да актуализира информацията, съдържаща се тук. Освен ако изрично не е предвидено друго, продуктите на Atmel не са подходящи и не трябва да се използват в автомобилни приложения. Продуктите на Atmel не са предназначени, разрешени или гарантирани за употреба като компоненти в приложения, предназначени да поддържат или поддържат живота.