Atmel

Microcontroler AVR Atmel pe 8 biți cu bliț programabil în sistem de 2/4/8K octețicip

 

Caracteristici

  • Microcontroler AVR® pe 8 biți, de înaltă performanță și putere redusă
  • Arhitectură RISC avansată
  • 120 Instrucțiuni puternice - Executarea majorității ciclului de ceas unic
  • 32 x 8 registre de lucru cu scop general
  • Funcționare complet statică
  • Memorii nevolatile de programe și date
  • 2/4 / 8K octeți de memorie programabilă programabilă în sistem Flash
  • Rezistenta: 10,000 de cicluri de scriere/ștergere
  • 128/256/512 octeți EEPROM programabil în sistem
  • Rezistenta: 100,000 de cicluri de scriere/ștergere
  • 128/256/512 octeți SRAM intern
  • Blocare programare pentru programul de auto-programare Flash și securitatea datelor EEPROM

Caracteristici periferice

  • Temporizator / Contor pe 8 biți cu Prescaler și două canale PWM
  • Temporizator / Contor de mare viteză pe 8 biți cu precalificator separat
  • 2 ieșiri PWM de înaltă frecvență cu registre de comparare a ieșirii separate
  • Generator de timp mort programabil
  • USI - Interfață serială universală cu detector de stare de pornire
  • ADC pe 10 biți

4 canale cu un singur capăt

2 perechi de canale ADC diferențiale cu câștig programabil (1x, 20x)

Măsurarea temperaturii

Temporizator programabil de pază cu oscilator separat pe cip

Comparator analog on-chip

Caracteristici speciale ale microcontrolerului

debugWIRE Sistem de depanare pe cip

Programabil în sistem prin portul SPI

Surse de întrerupere externe și interne

Mod redus de inactivitate, reducere a zgomotului ADC și moduri de oprire

Circuit de resetare la pornire îmbunătățit

Circuit de detectare programabil Brown-out

Oscilator intern calibrat

I / O și pachete

Șase linii I / O programabile

PDIP cu 8 pini, SOIC cu 8 pini, QFN / MLF cu 20 de paduri și TSSOP cu 8 pini (numai ATtiny45 / V)

Vol. De operaretage
- 1.8 - 5.5V pentru ATtiny25V / 45V / 85V
- 2.7 - 5.5V pentru ATtiny25 / 45/85

Grad de viteză
- ATtiny25V / 45V / 85V: 0 - 4 MHz @ 1.8 - 5.5V, 0 - 10 MHz @ 2.7 - 5.5V
- ATtiny25 / 45/85: 0 - 10 MHz @ 2.7 - 5.5V, 0 - 20 MHz @ 4.5 - 5.5V

Gama de temperatură industrială

Consum redus de energie

Mod activ:

1 MHz, 1.8 V: 300 uA

Mod de oprire:

Configurări Pin

Pinout ATtiny25 / 45/85 Configurare

Descrieri Pin

VCC: Voltage.
GND: Pământ.
Portul B (PB5:PB0): Portul B este un port I/O bidirecțional pe 6 biți cu rezistențe interne pull-up (selectate pentru fiecare bit). Bufferele de ieșire Port B au caracteristici de unitate simetrice, cu capacitate mare de absorbție și sursă. Ca intrări, pinii portului B care sunt trasi la nivel scăzut din exterior vor genera curent dacă sunt activate rezistențele de tragere. Pinii portului B sunt tri-stați atunci când o condiție de resetare devine activă, chiar dacă ceasul nu funcționează.

Portul B servește, de asemenea, funcțiile diferitelor caracteristici speciale ale ATtiny25 / 45/85, așa cum sunt listate
Pe ATtiny25, porturile de I / O programabile PB3 și PB4 (pinii 2 și 3) sunt schimbate în modul de compatibilitate ATtiny15 pentru a susține compatibilitatea cu ATtiny15.

RESET: Resetare intrare. Un nivel scăzut al acestui pin mai mult decât durata minimă a impulsului va genera o resetare, chiar dacă ceasul nu funcționează și cu condiția ca pinul de resetare să nu fi fost dezactivat. Lungimea minimă a impulsului este dată în Tabelul 21-4 pe pagina 165. Impulsurile mai scurte nu sunt garantate pentru a genera o resetare.

Pinul de resetare poate fi folosit și ca pin (slab) I / O.

Pesteview

ATtiny25 / 45/85 este un microcontroler CMOS de 8 biți de mică putere bazat pe arhitectura RISC îmbunătățită AVR. Executând instrucțiuni puternice într-un singur ciclu de ceas, ATtiny25 / 45/85 realizează randamente care se apropie de 1 MIPS pe MHz permițând proiectantului sistemului să optimizeze consumul de energie față de viteza de procesare.

Diagramă bloc Diagrama bloc

Nucleul AVR combină un set bogat de instrucțiuni cu 32 de registre de lucru de uz general. Toate cele 32 de registre sunt conectate direct la Unitatea Logică Aritmetică (ALU), permițând accesarea a două registre independente într-o singură instrucțiune executată într-un ciclu de ceas. Arhitectura rezultată este mai eficientă în ceea ce privește codul, obținând în același timp randamente de până la zece ori mai rapide decât microcontrolerele convenționale CISC.

ATtiny25 / 45/85 oferă următoarele caracteristici: 2/4 / 8K octeți de bliț programabil în sistem, 128/256/512 octeți EEPROM, 128/256/256 octeți SRAM, 6 linii I / O de uz general, 32 general registre de lucru, un temporizator / contor de 8 biți cu moduri de comparare, un temporizator / contor de mare viteză de 8 biți, interfață serială universală, întreruperi interne și externe, un ADC pe 4 canale, 10 biți, un temporizator de pază programabil cu control intern Oscilator și trei moduri de economisire a energiei selectabile de software. Modul de repaus oprește CPU, permițând în același timp SRAM, Timer / Counter, ADC, Comparator analog și sistemul de întrerupere să funcționeze în continuare. Modul de oprire salvează conținutul registrului, dezactivând toate funcțiile cipului până la următoarea întrerupere sau resetare hardware. Modul de reducere a zgomotului ADC oprește procesorul și toate modulele I / O, cu excepția ADC, pentru a minimiza zgomotul de comutare în timpul conversiilor ADC.

Dispozitivul este fabricat folosind tehnologia de memorie non-volatilă Atmel de înaltă densitate. Blițul ISP On-chip permite re-programarea memoriei Program în sistem printr-o interfață serială SPI, printr-un programator de memorie nevolatil convențional sau printr-un cod de boot On-chip care rulează pe nucleul AVR.

AVR-ul ATtiny25 / 45/85 este acceptat cu o suită completă de instrumente de dezvoltare de programe și sisteme, inclusiv: compilatoare C, ansambluri macro, depanatoare / simulatoare de programe și kituri de evaluare.

Despre Resurse

Un set cuprinzător de instrumente de dezvoltare, note de aplicație și fișe tehnice sunt disponibile pentru descărcare http://www.atmel.com/avr.

Cod Examples

Această documentație conține cod simplu example care arată pe scurt modul de utilizare a diferitelor părți ale dispozitivului. Acest cod examppresupunem că antetul specific al piesei file este inclus înainte de compilare. Rețineți că nu toți furnizorii de compilatoare C includ definiții de biți în antet fileManipularea și întreruperea în C depinde de compilator. Vă rugăm să confirmați cu documentația compilatorului C pentru mai multe detalii.

Pentru registrele I / O situate pe harta I / O extinsă, instrucțiunile „IN”, „OUT”, „SBIS”, „SBIC”, „CBI” și „SBI” trebuie înlocuite cu instrucțiuni care permit accesul la I extins / O. De obicei, aceasta înseamnă „LDS” și „STS” combinate cu „SBRS”, „SBRC”, „SBR” și „CBR”. Rețineți că nu toate dispozitivele AVR includ o hartă I / O extinsă.

Sensare capacitivă a atingerii

Biblioteca Atmel QTouch oferă o soluție simplu de utilizat pentru interfețele sensibile la atingere pe microcontrolerele Atmel AVR. Biblioteca QTouch include suport pentru metodele de achiziție QTouch® și QMatrix®.

Detectarea tactilă este ușor adăugată la orice aplicație prin conectarea bibliotecii QTouch și prin utilizarea interfeței de programare a aplicației (API) a bibliotecii pentru a defini canalele tactile și senzorii. Aplicația apelează apoi API-ul pentru a prelua informații despre canal și pentru a determina starea senzorului tactil.

Biblioteca QTouch este gratuită și poate fi descărcată de pe Atmel website. Pentru mai multe informații și detalii despre implementare, consultați Ghidul utilizatorului QTouch Library - disponibil și de la Atmel website-ul.

Păstrarea datelor

Fiabilitate Rezultatele calificării arată că rata de eșec a reținerii datelor proiectate este mult mai mică de 1 PPM în 20 de ani la 85 ° C sau 100 de ani la 25 ° C.

Core CPU AVR

Introducere

Această secțiune discută arhitectura de bază AVR în general. Funcția principală a nucleului procesorului este de a asigura executarea corectă a programului. Prin urmare, CPU trebuie să poată accesa memorii, să efectueze calcule, să controleze perifericele și să gestioneze întreruperile.

Arhitectural terminatview Arhitectură

Pentru a maximiza performanța și paralelismul, AVR utilizează o arhitectură Harvard - cu memorii și autobuze separate pentru program și date. Instrucțiunile din memoria programului sunt executate cu un singur nivel de conducte. În timp ce se execută o instrucțiune, următoarea instrucțiune este pre-preluată din memoria programului. Acest concept permite executarea instrucțiunilor în fiecare ciclu de ceas. Memoria de program este memorie Flash reprogramabilă în sistem.

Registrul cu acces rapid File conține 32 de registre de lucru de uz general pe 8 biți cu un singur timp de acces al ciclului de ceas. Acest lucru permite funcționarea unității aritmetice logice (ALU) cu un singur ciclu. Într-o operațiune tipică ALU, doi operanzi sunt scoși din registru File, operațiunea este executată, iar rezultatul este stocat înapoi în registru File- într-un singur ciclu de ceas.

Șase din cele 32 de registre pot fi utilizate ca trei indicatoare indirecte de 16 biți pentru adresarea spațiului de date - permițând calcule eficiente ale adreselor. Unul dintre acești indicatori de adresă poate fi, de asemenea, utilizat ca indicator de adresă pentru căutarea tabelelor în memoria programului Flash. Aceste registre de funcții adăugate sunt registrul X pe 16 biți, Y și Z, descrise mai târziu în această secțiune.

ALU acceptă operații aritmetice și logice între registre sau între o constantă și un registru. Operațiile de registru unic pot fi executate și în ALU. După o operație aritmetică, Registrul de stare este actualizat pentru a reflecta informații despre rezultatul operației.

Fluxul de programe este asigurat de instrucțiuni de salt și apel condiționate și necondiționate, capabile să abordeze direct întregul spațiu de adrese. Majoritatea instrucțiunilor AVR au un singur format de cuvânt pe 16 biți, dar există și instrucțiuni pe 32 de biți.

În timpul întreruperilor și apelurilor subrutine, adresa de returnare Program Counter (PC) este stocată pe Stack. Stiva este efectiv alocată în datele generale SRAM și, în consecință, dimensiunea stivei este limitată doar de dimensiunea totală a SRAM și de utilizarea SRAM. Toate programele de utilizator trebuie să inițializeze SP în rutina Reset (înainte ca subrutinele sau întreruperile să fie executate). Stack Pointer (SP) este accesibil în citire / scriere în spațiul I / O. Datele SRAM pot fi accesate cu ușurință prin intermediul celor cinci moduri diferite de adresare acceptate în arhitectura AVR.

Spațiile de memorie din arhitectura AVR sunt toate hărți de memorie liniare și regulate.

Un modul de întrerupere flexibil are registrele sale de control în spațiul I / O cu un bit suplimentar de activare a întreruperii globale în registrul de stare. Toate întreruperile au un vector de întrerupere separat în tabelul Vector de întrerupere. Întreruperile au prioritate în conformitate cu poziția lor de vector de întrerupere. Cu cât este mai mică adresa vectorului de întrerupere, cu atât este mai mare prioritatea.

Spațiul de memorie I / O conține 64 de adrese pentru funcțiile periferice ale procesorului, precum Control Registers, SPI și alte funcții I / O. Memoria I / O poate fi accesată direct sau ca locații ale spațiului de date în urma celor din registru File, 0x20 - 0x5F.

ALU - Unitate logică aritmetică

AVR ALU performant funcționează în conexiune directă cu toate cele 32 de registre de lucru de uz general. În cadrul unui singur ciclu de ceas, se execută operații aritmetice între registrele cu scop general sau între un registru și un imediat. Operațiile ALU sunt împărțite în trei categorii principale - funcții aritmetice, logice și bit. Unele implementări ale arhitecturii oferă, de asemenea, un multiplicator puternic care acceptă atât multiplicarea semnată / nesemnată, cât și formatul fracționat. Consultați secțiunea „Set de instrucțiuni” pentru o descriere detaliată.

Registrul de stare

Registrul de stare conține informații despre rezultatul celei mai recente instrucțiuni aritmetice executate. Aceste informații pot fi utilizate pentru modificarea fluxului de programe în vederea efectuării operațiilor condiționate. Rețineți că Registrul de stare este actualizat după toate operațiunile ALU, așa cum se specifică în Referința setului de instrucțiuni. În multe cazuri, acest lucru va elimina necesitatea utilizării instrucțiunilor dedicate de comparare, rezultând un cod mai rapid și mai compact.

Registrul de stare nu este stocat automat la intrarea într-o rutină de întrerupere și restaurat la revenirea de la o întrerupere. Acest lucru trebuie gestionat de software.

SREG - Registrul de stare AVR

Registrul de stare AVR - SREG - este definit ca:

Pic 7 6 5 4 3 2 1 0
0x3F I T H S V N Z C SREG
Citiți/Scrieți R/V R/V R/V R/V R/V R/V R/V R/V
Valoarea inițială 0 0 0 0 0 0 0 0

Bit 7 - I: Global Interrupt Enable

Bitul Global Interrupt Enable trebuie activat pentru ca întreruperile să fie activate. Controlul individual de activare a întreruperii este apoi efectuat în registre de control separate. Dacă Registrul de activare a întreruperii globale este șters, niciuna dintre întreruperi nu este activată independent de setările individuale de activare a întreruperii. I-bitul este șters de hardware după ce a avut loc o întrerupere și este setat de instrucțiunea RETI pentru a permite întreruperile ulterioare. I-bitul poate fi setat și șters de aplicație cu instrucțiunile SEI și CLI, așa cum este descris în referința setului de instrucțiuni.

Bit 6 - T: stocare copiere bit

Instrucțiunile de copiere bit BLD (Bit LoaD) și BST (Bit STore) utilizează bitul T ca sursă sau destinație pentru bitul operat. Un pic dintr-un registru din registru File poate fi copiat în T de instrucțiunea BST, iar un bit din T poate fi copiat într-un bit într-un registru din Registr File prin instrucțiunea BLD.

Bit 5 - H: Steagul Carry Half

Steagul Half Carry H indică un Half Carry în unele operații aritmetice. Half Carry este util în aritmetica BCD. Consultați „Descrierea setului de instrucțiuni” pentru informații detaliate.

Bit 4 – S: Bit de semn, S = N ⊕ V

S-bitul este întotdeauna un exclusiv sau între Flagul negativ N și Flagul de revărsare a complementului celor doi. Consultați „Descrierea setului de instrucțiuni” pentru informații detaliate.

Bit 3 - V: Steagul de depășire a complementului Two

Drapelul V de depășire a complementului Two acceptă aritmetica complementului doi. Consultați „Descrierea setului de instrucțiuni” pentru informații detaliate.

Bit 2 - N: Steag negativ

Steagul negativ N indică un rezultat negativ într-o operație aritmetică sau logică. Consultați „Descrierea setului de instrucțiuni” pentru informații detaliate.

Bit 1 - Z: Zero Flag

Zero Flag Z indică un rezultat zero într-o operație aritmetică sau logică. Consultați „Descrierea setului de instrucțiuni” pentru informații detaliate.

Bit 0 - C: Carry Flag

Steagul Carry C indică un carry într-o operație aritmetică sau logică. Consultați „Descrierea setului de instrucțiuni” pentru informații detaliate.

Registrul cu scop general File

Registrul File este optimizat pentru setul de instrucțiuni AVR Enhanced RISC. Pentru a obține performanța și flexibilitatea necesare, următoarele scheme de intrare / ieșire sunt acceptate de registru File:

Un operand de ieșire de 8 biți și o intrare de rezultat de 8 biți

Două operanzi de ieșire pe 8 biți și o intrare de rezultat pe 8 biți

Două operanzi de ieșire pe 8 biți și o intrare de rezultat pe 16 biți

Un operand de ieșire de 16 biți și o intrare de rezultat de 16 biți

Figura 4-2 arată structura celor 32 de registre de lucru de uz general din CPU. Scop general

După cum se arată în Figura 4-2, fiecărui registru i se atribuie și o adresă de memorie de date, mapându-le direct în primele 32 de locații ale spațiului de date al utilizatorului. Deși nu este implementat fizic ca locații SRAM, această organizare a memoriei oferă o mare flexibilitate în accesul registrelor, deoarece registrele pointerului X, Y și Z pot fi setate pentru a indexa orice registru din file.Majoritatea instrucțiunilor care operează pe Registru File au acces direct la toate registrele și cele mai multe dintre ele sunt instrucțiuni de ciclu unic.

Registrul X, registrul Y și registrul Z

Registrele R26..R31 au unele funcții adăugate la utilizarea lor cu scop general. Aceste registre sunt indicatori de adresă pe 16 biți pentru adresarea indirectă a spațiului de date. Cele trei registre indirecte de adrese X, Y și Z sunt definite așa cum este descris în Figura 4-3.

Registru

În diferitele moduri de adresare, aceste registre de adrese au funcții precum deplasarea fixă, creșterea automată și descreșterea automată (consultați referința setului de instrucțiuni pentru detalii).

Indicator Stack

Stiva este utilizată în principal pentru stocarea datelor temporare, pentru stocarea variabilelor locale și pentru stocarea adreselor de retur după întreruperi și apeluri de subrutină. Registrul indicatorului stivei indică întotdeauna partea de sus a stivei. Rețineți că Stack-ul este implementat pe măsură ce crește de la locații de memorie mai mari la locații de memorie mai mici. Aceasta implică faptul că o comandă Stack PUSH scade indicatorul Stack.

Pointerul Stack indică zona de date SRAM Stack în care se află Subroutine și Interrupt Stacks. Acest spațiu Stack în datele SRAM trebuie să fie definit de program înainte ca orice apel de subrutină să fie executat sau întreruperile să fie activate. Indicatorul Stack trebuie să fie setat la punctul de peste 0x60. Indicatorul Stack este decrementat cu unul când datele sunt împinse pe Stack cu instrucțiunea PUSH și este decrementat cu două când adresa de returnare este împinsă pe Stack cu apel sau întrerupere subrutină. Pointerul Stack este incrementat cu unul când datele sunt scoase din Stack cu instrucțiunea POP și este incrementat cu două când datele sunt scoase din Stack cu revenirea din subrutina RET sau revenirea din întreruperea RETI.

AVR Stack Pointer este implementat ca două registre de 8 biți în spațiul I / O. Numărul de biți efectiv utilizați depinde de implementare. Rețineți că spațiul de date din unele implementări ale arhitecturii AVR este atât de mic încât este nevoie doar de SPL. În acest caz, Registrul SPH nu va fi prezent.

SPH și SPL - Registrul indicatorului stivei

Pic 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
Citiți/Scrieți R/V R/V R/V R/V R/V R/V R/V R/V
Citiți/Scrieți R/V R/V R/V R/V R/V R/V R/V R/V
Valoarea inițială RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND
Valoarea inițială RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND

Timpul de executare a instrucțiunilor

Această secțiune descrie conceptele generale de sincronizare a accesului pentru execuția instrucțiunilor. CPU AVR este condus de clock CPU clkCPU, generat direct din sursa de ceas selectată pentru cip. Nu este utilizată nicio diviziune internă a ceasului.

Fig4.4

Figura 4-4 arată preluările de instrucțiuni paralele și execuțiile de instrucțiuni activate de arhitectura Harvard și Registrul de acces rapid File concept. Acesta este conceptul de bază de conducte pentru a obține până la 1 MIPS pe MHz cu rezultatele unice corespunzătoare pentru funcții pe cost, funcții pe ceasuri și funcții pe unitate de putere.

Figura 4-5. Funcționare ALU cu un singur ciclu

Fig4.5

Resetați și gestionați întreruperea

AVR oferă mai multe surse diferite de întrerupere. Aceste întreruperi și vectorul de resetare separat au fiecare câte un vector de program separat în spațiul de memorie al programului. Toate întreruperile sunt atribuite biți de activare individuali, care trebuie să fie înscriși în logică, împreună cu bitul de activare a întreruperii globale din Registrul de stare, pentru a permite întreruperea.

Cele mai mici adrese din spațiul de memorie ale programului sunt definite în mod implicit ca Reset și Interrupt Vectors. Lista completă a vectorilor este prezentată în „Întreruperi” la pagina 48. Lista determină, de asemenea, nivelurile de prioritate ale diferitelor întreruperi. Cu cât adresa este mai mică, cu atât este mai mare nivelul de prioritate. RESET are cea mai mare prioritate, iar următorul este INT0 - Cererea de întrerupere externă 0.

Când apare o întrerupere, bitul I de activare a întreruperii globale este șters și toate întreruperile sunt dezactivate. Programul utilizator poate scrie o logică pe I-bit pentru a activa întreruperile imbricate. Toate întreruperile activate pot întrerupe apoi rutina de întrerupere curentă. I-bitul este setat automat când se execută o instrucțiune Return from Interrupt - RETI.

În principiu, există două tipuri de întreruperi. Primul tip este declanșat de un eveniment care setează semnalul de întrerupere. Pentru aceste întreruperi, Contorul de program este vectorizat la Vectorul de întrerupere real pentru a executa rutina de gestionare a întreruperilor, iar hardware-ul șterge semnalizatorul de întrerupere corespunzător. Semnalizatoarele de întrerupere pot fi, de asemenea, șterse prin scrierea unuia logic în poziția (pozițiile) bitului de semnalizare care urmează să fie ștearsă. Dacă apare o condiție de întrerupere în timp ce bitul de activare a întreruperii corespunzător este șters, semnalizatorul de întrerupere va fi setat și memorat până când este activată întreruperea sau steagul este șters de software. În mod similar, dacă apare una sau mai multe condiții de întrerupere în timp ce bitul de activare a întreruperii globale este șters, vor fi setate și memorate semnalizatoarele corespunzătoare de întrerupere până când bitul de activare a întreruperii globale este setat și vor fi apoi executate prin ordinea de prioritate.

Al doilea tip de întreruperi se va declanșa atâta timp cât este prezentă starea de întrerupere. Aceste întreruperi nu au în mod necesar semne de întrerupere. Dacă starea de întrerupere dispare înainte ca întreruperea să fie activată, întreruperea nu va fi declanșată.

Când AVR iese dintr-o întrerupere, va reveni întotdeauna la programul principal și va executa încă o instrucțiune înainte ca orice întrerupere în așteptare să fie servită.

Rețineți că Registrul de stare nu este stocat automat când intrați într-o rutină de întrerupere și nici nu se restabilește când reveniți dintr-o rutină de întrerupere. Acest lucru trebuie gestionat de software.

Când utilizați instrucțiunea CLI pentru a dezactiva întreruperile, întreruperile vor fi imediat dezactivate. Nicio întrerupere nu va fi executată după instrucțiunea CLI, chiar dacă apare simultan cu instrucțiunea CLI. Următoarele example arată cum se poate utiliza acest lucru pentru a evita întreruperile în timpul secvenței de scriere EEPROM temporizată.

Cod asamblare Example
în r16, SREG; stocați valoarea SREG

cli ; dezactivați întreruperile în timpul secvenței temporizate

sbi EECR, EEMPE ; porniți scrierea EEPROM

sbi EECR, EEPE

afară SREG, r16; restabiliți valoarea SREG (I-bit)

Cod C Example
char cSREG;

cSREG = SREG; /* stochează valoarea SREG */

/* dezactivează întreruperile în timpul secvenței cronometrate */

_CLI ();

EECR |= (1<

EECR | = (1 <

SREG = cSREG; /* restabiliți valoarea SREG (I-bit) */

Când utilizați instrucțiunea SEI pentru a activa întreruperile, instrucțiunea următoare SEI va fi executată înainte de orice întrerupere suspendată, așa cum se arată în acest example.

Cod asamblare Example
sei ; setați Activarea întreruperii globale

dormi; intră în somn, așteptând întrerupere

; notă: va intra în repaus înainte de orice așteptare

; întrerupere

Cod C Example
_SEI(); /* setează activarea întreruperii globale */

_DORMI(); /* intră în repaus, așteptând întrerupere */

/ * notă: va intra în repaus înainte de orice întrerupere în așteptare * /

Timp de răspuns la întrerupere

Răspunsul la executarea întreruperii pentru toate întreruperile AVR activate este minim de patru cicluri de ceas. După patru cicluri de ceas, se execută adresa Vector Program pentru rutina efectivă de gestionare a întreruperilor. În această perioadă de patru cicluri de ceas, Contorul de programe este împins pe stivă. Vectorul este în mod normal un salt la rutina de întrerupere și acest salt durează trei cicluri de ceas. Dacă apare o întrerupere în timpul executării unei instrucțiuni cu mai multe cicluri, această instrucțiune este finalizată înainte ca întreruperea să fie servită. Dacă apare o întrerupere când MCU este în modul de repaus, timpul de răspuns la executarea întreruperii este mărit cu patru cicluri de ceas. Această creștere se adaugă la timpul de pornire din modul de repaus selectat.

Revenirea dintr-o rutină de gestionare a întreruperilor durează patru cicluri de ceas. În timpul acestor patru cicluri de ceas, Contorul de programe (doi octeți) este retras din Stack, Pointerul Stack este incrementat cu doi și I-bitul în SREG este setat.

Amintiri AVR

Această secțiune descrie diferitele amintiri din ATtiny25 / 45/85. Arhitectura AVR are două spații principale de memorie, memoria de date și spațiul de memorie program. În plus, ATtiny25 / 45/85 are o memorie EEPROM pentru stocarea datelor. Toate cele trei spații de memorie sunt liniare și regulate.

Memorie de program Flash reprogramabilă în sistem

ATtiny25 / 45/85 conține 2/4 / 8K octeți Memorie Flash reprogramabilă în sistem pe cip, pentru stocarea programului. Deoarece toate instrucțiunile AVR au o lățime de 16 sau 32 de biți, blițul este organizat ca 1024/2048/4096 x 16.

Memoria Flash are o rezistență de cel puțin 10,000 de cicluri de scriere / ștergere. Contorul de programe (PC) ATtiny25 / 45/85 are o lățime de 10/11/12 biți, abordând astfel locațiile de memorie ale programului 1024/2048/4096. „Program de memorie- ming ”la pagina 147 conține o descriere detaliată a descărcării seriale a datelor Flash folosind pinii SPI.

Tabelele constante pot fi alocate în întregul spațiu de adrese ale memoriei programului (consultați descrierea instrucțiunilor LPM - Încărcare memorie program)

Figura 5-1. Harta memoriei programului Harta de memorie

Memorie de date SRAM

Figura 5-2 arată cum este organizată memoria ATtiny25 / 45/85 SRAM.

Locațiile de memorie 224/352/607 inferioare se adresează atât registrului File, memoria I / O și datele interne SRAM. Primele 32 de locații se adresează Registrului File, următoarele 64 de locații, memoria I / O standard și ultimele 128/256/512 locații adresează datele interne SRAM.

Cele cinci moduri diferite de adresare pentru capacul memoriei de date: Direct, indirect cu deplasare, indirect, indirect cu pre-decrement și indirect cu post-increment. În registru File, registrele de la R26 la R31 prezintă registrele pointerului de adresare indirectă.

Adresarea directă atinge întregul spațiu de date.

Modul indirect cu deplasare atinge 63 de locații de adrese de la adresa de bază dată de registrul Y sau Z.

Atunci când se utilizează moduri de adresare indirectă a registrului cu pre-decrementare automată și post-incrementare, registrele de adrese X, Y și Z sunt decrementate sau incrementate.

Cele 32 de registre de lucru cu scop general, 64 de registre I / O și 128/256/512 octeți de date interne SRAM din ATtiny25 / 45/85 sunt toate accesibile prin toate aceste moduri de adresare. Registrul File este descris în „Gen- Registrul scopurilor generale File”La pagina 10.

Figura 5-2. Harta memoriei de date Harta de memorie 2

Acces la memorie de date Times

Această secțiune descrie conceptele generale de sincronizare a accesului pentru accesul la memoria internă. Accesul la datele interne la SRAM se realizează în două cicluri clkCPU, așa cum este descris în Figura 5-3.

Figura 5-3. Cicluri de acces SRAM la date pe cip Pe date cu cip Memorie de date EEPROM

ATtiny25 / 45/85 conține 128/256/512 octeți de memorie EEPROM de date. Este organizat ca un spațiu de date separat, în care unii octeți pot fi citiți și scrise. EEPROM are o rezistență de cel puțin 100,000 de cicluri de scriere / ștergere. Accesul dintre EEPROM și CPU este descris în cele ce urmează, specificând registrele de adrese EEPROM, registrul de date EEPROM și registrul de control EEPROM. Pentru detalii vezi „Descărcare în serie” la pagina 151.

Acces la citire / scriere EEPROM

Registrele de acces EEPROM sunt accesibile în spațiul I / O.

Timpii de acces la scriere pentru EEPROM sunt indicați în Tabelul 5-1 la pagina 21. Cu toate acestea, o funcție de cronometrare automată permite software-ului utilizatorului să detecteze când poate fi scris următorul octet. Dacă codul utilizatorului conține instrucțiuni care scriu EEPROM-ul, trebuie luate unele măsuri de precauție. În sursele de alimentare puternic filtrate, VCC este probabil să crească sau să scadă lent

Pornire / oprire. Acest lucru face ca dispozitivul să funcționeze la o anumită perioadă de timptage mai mică decât cea specificată ca minim pentru frecvența de ceas utilizată. Vedea „Prevenirea corupției EEPROM” la pagina 19 pentru detalii despre cum să evitați problemele în aceste situații.

Pentru a preveni scrierea EEPROM neintenționată, trebuie urmată o procedură specifică de scriere. A se referi la "Atomic Programarea octeților ”la pagina 17 şi „Programare divizare octeți” la pagina 17 pentru detalii despre aceasta.

Când se citește EEPROM, CPU este oprit timp de patru cicluri de ceas înainte de executarea următoarei instrucțiuni. Când se scrie EEPROM, CPU-ul este oprit pentru două cicluri de ceas înainte de executarea următoarei instrucțiuni.

Programarea octeților atomici

Folosirea programării de octeți atomici este cel mai simplu mod. Când scrie un octet în EEPROM, utilizatorul trebuie să scrie adresa în Registrul EEAR și datele în Registrul EEDR. Dacă biții EEPMn sunt zero, scrierea EEPE (în termen de patru cicluri după ce este scris EEMPE) va declanșa operațiunea de ștergere / scriere. Atât ciclul de ștergere, cât și ciclul de scriere se fac într-o singură operație și timpul total de programare este dat în Tabelul 5-1 la pagina 21. Bitul EEPE rămâne setat până la finalizarea operațiunilor de ștergere și scriere. În timp ce dispozitivul este ocupat cu programarea, nu este posibil să efectuați alte operații EEPROM.

Programare de divizare a octeților

Este posibil să împărțiți ciclul de ștergere și scriere în două operații diferite. Acest lucru poate fi util dacă sistemul necesită un timp de acces scurt pentru o perioadă limitată de timp (de obicei, dacă alimentarea cu energie voltage cade). Pentru a profita de tagPentru această metodă, este necesar ca locațiile care trebuie scrise să fie șterse înainte de operația de scriere. Dar, din moment ce operațiunile de ștergere și scriere sunt împărțite, este posibil să efectuați operațiile de ștergere atunci când sistemul permite efectuarea de operații critice în timp (de obicei după pornire).

Şterge

Pentru a șterge un octet, adresa trebuie scrisă în EEAR. Dacă biții EEPMn sunt 0b01, scrierea EEPE (în termen de patru cicluri după ce este scris EEMPE) va declanșa numai operația de ștergere (timpul de programare este dat în Tabelul 5-1 pe pagina 21). Bitul EEPE rămâne setat până la finalizarea operației de ștergere. În timp ce dispozitivul este ocupat cu programarea, nu este posibil să efectuați alte operații EEPROM.

Scrie

Pentru a scrie o locație, utilizatorul trebuie să scrie adresa în EEAR și datele în EEDR. Dacă biții EEPMn sunt 0b10, scrierea EEPE (în termen de patru cicluri după ce este scris EEMPE) va declanșa numai operația de scriere (timpul de programare este dat în Tabelul 5-1 la pagina 21). Bitul EEPE rămâne setat până la finalizarea operației de scriere. Dacă locația de scris nu a fost ștearsă înainte de scriere, datele stocate trebuie considerate pierdute. În timp ce dispozitivul este ocupat cu programarea, nu este posibil să efectuați alte operații EEPROM.

Oscilatorul calibrat este folosit pentru a cronometra accesul EEPROM. Asigurați-vă că frecvența oscilatorului se încadrează în cerințele descrise în „OSCCAL - Registrul de calibrare a oscilatorului” la pagina 31.

Următorul cod examparată un ansamblu și o funcție C pentru ștergerea, scrierea sau scrierea atomică a EEPROM. Fostulamppresupun că întreruperile sunt controlate (de exemplu, prin dezactivarea întreruperilor la nivel global), astfel încât să nu apară întreruperi în timpul executării acestor funcții.

Cod asamblare Example
EEPROM_write:

; Așteptați finalizarea scrierii anterioare

sbic EECR,EEPE

rjmp EEPROM_write

; Setați modul de programare

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

afară EECR, r16

; Configurați adresa (r18: r17) în registrul de adrese

afară EEARH, r18

afară EEARL, r17

; Scrieți datele (r19) în registrul de date

afară EEDR, r19

; Scrieți unul logic către EEMPE

sbi EECR,EEMPE

; Porniți eeprom write setând EEPE

sbi EECR,EEPE

ret

Cod C Example
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)

{

/* Așteptați finalizarea scrierii anterioare */ while(EECR & (1<

;

/* Setează modul de programare */

EECR = (0 <

/ * Configurați registrele de adrese și date * / EEAR = ucAddress;

EEDR = ucData;

/* Scrieți unul logic în EEMPE */

EECR | = (1 <

/ * Porniți eeprom write setând EEPE * /

EECR | = (1 <

}

Următorul cod exampafișează funcțiile de asamblare și C pentru citirea EEPROM. Fostulamppresupun că întreruperile sunt controlate astfel încât să nu apară întreruperi în timpul executării acestor funcții.

Cod asamblare Example
EEPROM_read:

; Așteptați finalizarea scrierii anterioare

sbic EECR,EEPE

rjmp EEPROM_read

; Configurați adresa (r18: r17) în registrul de adrese

afară EEARH, r18

afară EEARL, r17

; Începeți citirea eeprom scriind EERE

sbi EECR,EERE

; Citiți datele din registrul de date

în r16,EEDR

ret

Cod C Example
unsigned char EEPROM_read(unsigned char ucAddress)

{

/ * Așteptați finalizarea scrierii anterioare * /

în timp ce (EECR & (1 <

;

/ * Configurați registrul de adrese * / EEAR = ucAddress;

/* Porniți citirea eeprom-ului scriind EERE */

EECR | = (1 <

/ * Returnați datele din registrul de date * /

returnează EEDR;

}

Prevenirea corupției EEPROM

În perioadele de VCC scăzut, datele EEPROM pot fi corupte deoarece volumul de alimentaretage este prea scăzut pentru ca CPU și EEPROM să funcționeze corect. Aceste probleme sunt aceleași ca și pentru sistemele de bord care utilizează EEPROM și ar trebui aplicate aceleași soluții de proiectare.

O corupție de date EEPROM poate fi cauzată de două situații când voltage prea scăzut. În primul rând, o secvență de scriere regulată în EEPROM necesită un volum minimtage să funcționeze corect. În al doilea rând, CPU în sine poate executa instrucțiuni incorect, dacă volumul de alimentaretage este prea scăzut.

Corupția datelor EEPROM poate fi ușor evitată urmând această recomandare de proiectare:

Păstrați AVR RESET activ (scăzut) în perioadele de alimentare cu energie insuficiente voltage. Acest lucru se poate face activând detectorul Brown-out intern (BOD). Dacă nivelul de detecție al BOD intern nu se potrivește cu

nivelul de detectare necesar, poate fi utilizat un circuit extern de protecție la resetare VCC scăzut. Dacă are loc o resetare în timp ce o operație de scriere este în desfășurare, operația de scriere va fi finalizată cu condiția ca sursa de alimentare voltage este suficient.

Memorie I / O

Definiția spațiului I / O al ATtiny25 / 45/85 este prezentată în „Rezumatul înregistrării” la pagina 200.

Toate E / S și perifericele ATtiny25 / 45/85 sunt plasate în spațiul I / O. Toate locațiile I / O pot fi accesate de instrucțiunile LD / LDS / LDD și ST / STS / STD, transferând date între cele 32 de registre de lucru de uz general și spațiul I / O. Registrele I / O din intervalul de adrese 0x00 - 0x1F sunt direct accesibile biților folosind instrucțiunile SBI și CBI. În aceste registre, valoarea biților simpli poate fi verificată folosind instrucțiunile SBIS și SBIC. Consultați secțiunea setului de instrucțiuni pentru mai multe detalii. Când se utilizează comenzile specifice I / O IN și OUT, trebuie utilizate adresele I / O 0x00 - 0x3F. La adresarea registrelor I / O ca spațiu de date folosind instrucțiuni LD și ST, trebuie adăugat 0x20 la aceste adrese.

Pentru compatibilitate cu dispozitivele viitoare, biții rezervați ar trebui să fie scrise la zero dacă sunt accesate. Adresele de memorie I / O rezervate nu trebuie scrise niciodată.

Unele dintre steagurile de stare sunt șterse scriindu-le una logică. Rețineți că instrucțiunile CBI și SBI vor funcționa numai pe bitul specificat și, prin urmare, pot fi utilizate pe registre care conțin astfel de steaguri de stare. Instrucțiunile CBI și SBI funcționează numai cu registrele de la 0x00 la 0x1F.

Registrele de control I / O și periferice sunt explicate în secțiunile ulterioare.

Descriere registru

EEARH - Registrul de adrese EEPROM

Pic 7 6 5 4 3 2 1 0
0x1F EEAR8 EEARH
Citiți/Scrieți R R R R R R R R/V
Valoarea inițială 0 0 0 0 0 0 0 X/0

Bits 7: 1 - Res: Bits rezervate

Acești biți sunt rezervați pentru utilizare viitoare și vor fi citite întotdeauna ca zero.

Biți 0 - EEAR8: Adresă EEPROM

Acesta este cel mai semnificativ bit de adresă EEPROM al ATtiny85. În dispozitivele cu mai puțină EEPROM, adică ATtiny25 / ATtiny45, acest bit este rezervat și va citi întotdeauna zero. Valoarea inițială a registrului de adrese EEPROM (EEAR) este nedefinită și, prin urmare, trebuie scrisă o valoare adecvată înainte de accesarea EEPROM.

EEARL - Registrul de adrese EEPROM

Pic

0x1E EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 EEARL
Spate / Scrie R/V R/V R/V R/V R/V R/V R/V R/V
Valoarea inițială X X X X X X X X

Bit 7 - EEAR7: Adresă EEPROM

Acesta este cel mai semnificativ bit de adresă EEPROM al ATtiny45. În dispozitivele cu mai puțină EEPROM, adică ATtiny25, acest bit este rezervat și va citi întotdeauna zero. Valoarea inițială a registrului de adrese EEPROM (EEAR) este nedefinită și, prin urmare, trebuie scrisă o valoare adecvată înainte de accesarea EEPROM.

Biți 6: 0 - EEAR [6: 0]: Adresa EEPROM

Acestea sunt biții (mici) ai registrului de adrese EEPROM. Octetii de date EEPROM sunt abordați liniar în intervalul 0 ... (128/256 / 512-1). Valoarea inițială a EEAR este nedefinită și, prin urmare, trebuie scrisă o valoare adecvată înainte ca EEPROM să poată fi accesată.

EEDR - Registrul de date EEPROM

Pic 7 6 5 4 3 2 1 0
0x1D EEDR7 EEDR6 EEDR5 EEDR4 EEDR3 EEDR2 EEDR1 EEDR0 EEDR
Citiți/Scrieți R/V R/V R/V R/V R/V R/V R/V R/V
Valoarea inițială 0 0 0 0 0 0 0 0

Pentru operațiunea de scriere EEPROM, Registrul EEDR conține datele care trebuie scrise în EEPROM la adresa dată de registrul EEAR. Pentru operația de citire EEPROM, EEDR conține datele citite din

EEPROM la adresa dată de EEAR.

 

5.5.4 Registrul de control EECR - EEPROM

Bit 7 6 5 4 3 2 1 0
0x1C        – EEPM1 EEPM0 STRANIU EEMPE EEPE EERE CEER
Citiți / scrieți R R R / W R/V R/V R/V R/V R/V
Valoare inițială 0 0 X X 0 0 X 0

Bit 7 - Res: Bit rezervat

Acest bit este rezervat pentru utilizare viitoare și va citi întotdeauna 0 în ATtiny25 / 45/85. Pentru compatibilitate cu dispozitivele AVR viitoare, scrieți întotdeauna acest bit la zero. După citire, mascați acest bit.

Bit 6 - Res: Bit rezervat

Acest bit este rezervat în ATtiny25 / 45/85 și va citi întotdeauna ca zero.

Bits 5: 4 - EEPM [1: 0]: Biti în modul de programare EEPROM

Setarea de biți ai modului de programare EEPROM definește acțiunea de programare care va fi declanșată la scrierea EEPE. Este posibil să programați datele într-o singură operație atomică (ștergeți vechea valoare și să programați noua valoare) sau să împărțiți operațiile de ștergere și scriere în două operații diferite. Timpii de programare pentru diferite moduri sunt afișate în Tabelul 5-1. În timp ce EEPE este setat, orice scriere către EEPMn va fi ignorată. În timpul resetării, biții EEPMn vor fi resetați la 0b00, cu excepția cazului în care EEPROM este ocupată cu programarea.

Tabelul 5-1. Biți de mod EEPROM

EEPM1 EEPM0 Timp de programare Operațiunea
0 0 3.4 ms Ștergeți și scrieți într-o singură operație (operație atomică)
0 1 1.8 ms Ștergeți numai
1 0 1.8 ms Numai scris
1 1 Rezervat pentru utilizare ulterioară

Bit 3 - EERIE: Activare întrerupere gata EEPROM

Scrierea EERIE pe una activează EEPROM Ready Interrupt dacă I-bit-ul din SREG este setat. Scrierea EERIE la zero dezactivează întreruperea. EEPROM Ready Interrupt generează o întrerupere constantă atunci când memoria nevolatilă este pregătită pentru programare.

Bit 2 - EEMPE: Activare program master EEPROM

Bitul EEMPE determină dacă scrierea EEPE pe unul va avea efect sau nu.

Când EEMPE este setat, setarea EEPE în patru cicluri de ceas va programa EEPROM la adresa selectată. Dacă EEMPE este zero, setarea EEPE nu va avea niciun efect. Când EEMPE a fost scris pe unul de către software, hardware-ul curăță bitul la zero după patru cicluri de ceas.

Bit 1 - EEPE: Activare program EEPROM

Semnalul de activare a programului EEPROM EEPE este semnalul de activare a programării către EEPROM. Când EEPE este scris, EEPROM va fi programată în funcție de setarea de biți EEPMn. Bitul EEMPE trebuie scris către unul înainte ca unul logic să fie scris către EEPE, altfel nu are loc nicio scriere EEPROM. Când s-a scurs timpul de acces la scriere, bitul EEPE este șters de hardware. Când EEPE a fost setat, CPU-ul este oprit pentru două cicluri înainte ca următoarea instrucțiune să fie executată.

Bit 0 - EERE: Activare citire EEPROM

Semnalul de activare a citirii EEPROM - EERE - este stroboscopul de citire al EEPROM. Când adresa corectă este configurată în registrul EEAR, bitul EERE trebuie scris într-unul pentru a declanșa citirea EEPROM. Accesul la citire EEPROM necesită o instrucțiune, iar datele solicitate sunt disponibile imediat. Când se citește EEPROM, CPU-ul este oprit timp de patru cicluri înainte de executarea următoarei instrucțiuni. Utilizatorul ar trebui să sondeze bitul EEPE înainte de a începe operația de citire. Dacă o operațiune de scriere este în curs, nu este posibilă citirea EEPROM și nici schimbarea registrului EEAR.

Ceas sistem și Opțiuni ceas

Sisteme de ceas și distribuția acestora

Distribuirea ceasului

Ceas CPU

Ceasul CPU este direcționat către părți ale sistemului care se ocupă de funcționarea nucleului AVR. Exampaceste module sunt Registrul cu scop general File, Registrul de stare și memoria de date care deține indicatorul Stack. Oprirea ceasului CPU inhibă nucleul de la efectuarea operațiilor și calculelor generale.

I / O Clock - clkI / O

Ceasul I / O este utilizat de majoritatea modulelor I / O, cum ar fi Timer / Counter. Ceasul I / O este, de asemenea, utilizat de modulul de întrerupere externă, dar rețineți că unele întreruperi externe sunt detectate prin logică asincronă, permițând astfel de întreruperi să fie detectate chiar dacă ceasul I / O este oprit.

Flash Clock - clkFLASH

Ceasul Flash controlează funcționarea interfeței Flash. Ceasul Flash este de obicei activ simultan cu ceasul CPU.

ADC Clock - clkADC

ADC este prevăzut cu un domeniu de ceas dedicat. Aceasta permite oprirea ceasurilor CPU și I / O pentru a reduce zgomotul generat de circuitele digitale. Acest lucru oferă rezultate mai precise ale conversiei ADC.

PLL intern pentru generarea de ceasuri periferice rapide - clkPCK

PLL-ul intern din ATtiny25 / 45/85 generează o frecvență de ceas care este de 8 ori înmulțită de la o sursă de intrare. În mod implicit, PLL utilizează ieșirea oscilatorului RC intern de 8.0 MHz ca sursă. Alternativ, dacă bitul LSM al PLLCSR este setat, PLL va utiliza ieșirea oscilatorului RC împărțit la doi. Astfel, ieșirea PLL, ceasul periferic rapid este de 64 MHz. Ceasul periferic rapid sau un ceas precalificat din acesta poate fi selectat ca sursă de ceas pentru Timer / Counter1 sau ca ceas de sistem. Vedea Figura 6-2. Frecvența ceasului periferic rapid este împărțită la doi atunci când LSM al PLLCSR este setat, rezultând o frecvență de ceas de 32 MHz. Rețineți că LSM nu poate fi setat dacă PLLCLK este folosit ca ceas de sistem.

Figura 6-2. Sistemul de ceas PCK. Ceas PCK

PLL este blocat pe oscilatorul RC și reglarea oscilatorului RC prin registrul OSCCAL va regla ceasul periferic rapid în același timp. Cu toate acestea, chiar dacă oscilatorul RC este dus la o frecvență mai mare de 8 MHz, frecvența ceasului periferic rapid saturează la 85 MHz (cel mai rău caz) și rămâne oscilant la frecvența maximă. Trebuie remarcat faptul că PLL în acest caz nu mai este blocat cu ceasul oscilatorului RC. Prin urmare, este recomandat să nu luați ajustările OSCCAL la o frecvență mai mare de 8 MHz pentru a menține PLL în domeniul de operare corect.

PLL intern este activat atunci când:

Bitul PLLE din registrul PLLCSR este setat.

Siguranța CKSEL este programată la „0001”.

Siguranța CKSEL este programată la „0011”.

Bitul PLLCSR PLOCK este setat când PLL este blocat. Atât oscilatorul RC intern, cât și PLL sunt oprite în modurile de oprire și stand-by.

PLL intern în modul de compatibilitate ATtiny15

Deoarece ATtiny25 / 45/85 este un dispozitiv de migrare pentru utilizatorii ATtiny15, există un mod de compatibilitate ATtiny15 pentru compatibilitate înapoi. Modul de compatibilitate ATtiny15 este selectat prin programarea siguranțelor CKSEL la „0011”.

În modul de compatibilitate ATtiny15, frecvența oscilatorului RC intern este calibrată la 6.4 MHz și factorul de multiplicare al PLL este setat la 4x. Vedea Figura 6-3. Cu aceste ajustări, sistemul de ceasare este compatibil cu ATtiny15, iar ceasul periferic rapid rezultat are o frecvență de 25.6 MHz (la fel ca în ATtiny15).

Figura 6-3. Sistemul de ceas PCK în modul de compatibilitate ATtiny15. Sistem de ceas

Surse de ceas

Dispozitivul are următoarele opțiuni de sursă de ceas, selectabile de biții Flash Fuse, așa cum se arată mai jos. Ceasul de la sursa selectată este introdus în generatorul de ceas AVR și direcționat către modulele corespunzătoare.

Tabelul 6-1. Opțiuni de sincronizare a dispozitivului Selectați

Opțiunea de ceasare a dispozitivului CKSEL[3:0](1)
Ceas extern (vedea pagina 26) 0000
Ceas PLL de înaltă frecvență (vedea pagina 26) 0001
Oscilator intern calibrat (vedea pagina 27) 0010(2)
Oscilator intern calibrat (vedea pagina 27) 0011(3)
Oscilator intern de 128 kHz (vedea pagina 28) 0100
Oscilator cu cristale de joasă frecvență (vedea pagina 29) 0110
Oscilator de cristal / rezonator ceramic (vedea pagina 29) 1000 – 1111
Rezervat 0101, 0111

Pentru toate siguranțele, „1” înseamnă neprogramat, în timp ce „0” înseamnă programat.

Dispozitivul este livrat cu această opțiune selectată.

Aceasta va selecta modul de compatibilitate ATtiny15, unde ceasul sistemului este împărțit la patru, rezultând o frecvență de ceas de 1.6 MHz. Pentru mai multe inormări, vezi „Oscilator intern calibrat” la pagina 27.

Diversele opțiuni pentru fiecare opțiune de ceas sunt date în secțiunile următoare. Când CPU se trezește de la oprire, sursa de ceas selectată este utilizată pentru a cronometra pornirea, asigurând o funcționare stabilă a oscilatorului înainte de a începe executarea instrucțiunii. Când CPU-ul pornește de la resetare, există o întârziere suplimentară care permite puterii să atingă un nivel stabil înainte de a începe funcționarea normală. Oscilatorul Watchdog este utilizat pentru sincronizarea acestei părți în timp real a timpului de pornire. Numărul de cicluri de oscilatoare WDT utilizate pentru fiecare time-out este afișat în Tabelul 6-2.

Tabelul 6-2. Numărul de cicluri ale oscilatorului Watchdog

Tip Time-out Numărul de cicluri
4 ms 512
64 ms 8K (8,192)

Ceas extern

Pentru a conduce dispozitivul de la o sursă de ceas externă, CLKI ar trebui să fie condus așa cum se arată în Figura 6-4. Pentru a rula dispozitivul pe un ceas extern, siguranțele CKSEL trebuie să fie programate la „00”.

Figura 6-4. Configurație externă a unității de ceas

Fig6.4

Când este selectată această sursă de ceas, timpii de pornire sunt determinați de siguranțele SUT așa cum se arată în Tabelul 6-3.

Tabelul 6-3. Orele de pornire pentru selecția ceasului extern

SUT[1:0] Timp de pornire de la oprire Întârziere suplimentară de la resetare Utilizare recomandată
00 6 CK 14CK BOD activat
01 6 CK 14CK + 4 ms Putere în creștere rapidă
10 6 CK 14CK + 64 ms Creșterea lentă a puterii
11 Rezervat

Când aplicați un ceas extern, este necesar să evitați modificările bruște ale frecvenței de ceas aplicate pentru a asigura o funcționare stabilă a MCU. O variație a frecvenței de peste 2% de la un ciclu de ceas la următorul poate duce la un comportament imprevizibil. Este necesar să vă asigurați că MCU este păstrat în Resetare în timpul acestor modificări ale frecvenței ceasului.

Rețineți că Prevânzarea ceasului de sistem poate fi utilizată pentru a implementa modificări în timp de rulare a frecvenței ceasului intern, asigurând în același timp o funcționare stabilă. A se referi la „Sistem de măsurare a ceasului de sistem” la pagina 31 pentru detalii.

Ceas PLL de înaltă frecvență

Există un PLL intern care asigură o rată de ceas nominală de 64 MHz blocată la oscilatorul RC pentru utilizarea cronometrului periferic / Contor1 și pentru sursa de ceas a sistemului. Când este selectat ca sursă de ceas de sistem, programând siguranțele CKSEL la „0001”, acesta este împărțit la patru așa cum se arată în Tabelul 6-4.

Tabelul 6-4. Moduri de operare a ceasului PLL de înaltă frecvență

CKSEL[3:0] Frecvența nominală
0001 16 MHz

Când este selectată această sursă de ceas, timpii de pornire sunt determinați de siguranțele SUT așa cum se arată în Tabelul 6-5.

Tabelul 6-5. Timp de pornire pentru ceasul PLL de înaltă frecvență

SUT[1:0] Timp de pornire de la oprire Întârziere suplimentară de la resetarea la pornire (VCC = 5.0 V) Utilizare recomandată
00 14CK + 1K (1024) CK + 4 ms 4 ms BOD activat

Tabelul 6-5. Timp de pornire pentru ceasul PLL de înaltă frecvență

SUT[1:0] Timp de pornire de la oprire Întârziere suplimentară de la resetarea la pornire (VCC = 5.0 V) Utilizare recomandată
01 14CK + 16K (16384) CK + 4 ms 4 ms Putere în creștere rapidă
10 14CK + 1K (1024) CK + 64 ms 4 ms Creșterea lentă a puterii
11 14CK + 16K (16384) CK + 64 ms 4 ms Creșterea lentă a puterii

Oscilator intern calibrat

În mod implicit, Oscilatorul RC intern oferă un ceas de aproximativ 8.0 MHz. Deși voltagÎn funcție de temperatură și e, acest ceas poate fi calibrat foarte precis de către utilizator. Vedea „Oscilator RC intern calibrat racy ”la pagina 164 şi „Viteza oscilatorului intern” la pagina 192 pentru mai multe detalii. Dispozitivul este livrat cu siguranța CKDIV8 programată. Vedea „Sistem de măsurare a ceasului de sistem” la pagina 31 pentru mai multe detalii.

Acest ceas poate fi selectat ca ceas de sistem prin programarea siguranțelor CKSEL așa cum se arată în Tabelul 6-6 la pagina

27. Dacă este selectat, acesta va funcționa fără componente externe. În timpul resetării, hardware-ul încarcă valoarea de calibrare pre-programată în registrul OSCCAL și astfel calibrează automat oscilatorul RC. Precizia acestei calibrări este prezentată ca calibrare din fabrică în Tabelul 21-2 la pagina 164.

Schimbând registrul OSCCAL din SW, vezi „OSCCAL - Registrul de calibrare a oscilatorului” la pagina 31, este posibil să obțineți o precizie de calibrare mai mare decât utilizând calibrarea din fabrică. Precizia acestei calibrări este prezentată ca calibrare utilizator în Tabelul 21-2 la pagina 164.

Când acest oscilator este folosit ca ceas cu cip, Oscilatorul Watchdog va fi în continuare utilizat pentru cronometrul Watchdog și pentru timpul de resetare. Pentru mai multe informații despre valoarea de calibrare pre-programată, consultați secțiunea „Cali- octeți de bratație ”la pagina 150.

Oscilatorul intern poate fi, de asemenea, setat pentru a furniza un ceas de 6.4 MHz scriind siguranțe CKSEL pe „0011”, așa cum se arată în Tabelul 6-6 de mai jos. Această setare este denumită modul de compatibilitate ATtiny15 și este destinată să furnizeze o sursă de ceas calibrată la 6.4 MHz, ca în ATtiny15. În modul de compatibilitate ATtiny15, PLL utilizează oscilatorul intern care rulează la 6.4 MHz pentru a genera un semnal de ceas periferic de 25.6 MHz pentru Timer / Counter1 (vezi „8-bit Timer / Counter1 in Mod ATtiny15 ”la pagina 95). Rețineți că în acest mod de funcționare semnalul de ceas de 6.4 MHz este întotdeauna împărțit la patru, oferind un ceas de sistem de 1.6 MHz.

Tabelul 6-6. Moduri de operare a oscilatorului RC calibrat intern

CKSEL[3:0] Frecvența nominală
0010(1) 8.0 MHz
0011(2) 6.4 MHz

Dispozitivul este livrat cu această opțiune selectată.

Această setare va selecta modul de compatibilitate ATtiny15, unde ceasul sistemului este împărțit la patru, rezultând o frecvență de ceas de 1.6 MHz.

Când oscilatorul intern calibrat de 8 MHz este selectat ca sursă de ceas, timpul de pornire este determinat de siguranțele SUT așa cum se arată în Tabelul 6-7 de mai jos.

Tabelul 6-7. Timp de pornire pentru ceasul oscilator RC calibrat intern

SUT[1:0] Timp de pornire de la oprire Întârziere suplimentară de la resetare (VCC = 5.0 V) Utilizare recomandată
00 6 CK 14CK(1) BOD activat
01 6 CK 14CK + 4 ms Putere în creștere rapidă
10(2) 6 CK 14CK + 64 ms Creșterea lentă a puterii
11 Rezervat

1. Dacă siguranța RSTDISBL este programată, acest timp de pornire va fi mărit la 14CK + 4 ms pentru a asigura introducerea modului de programare.
2. Dispozitivul este livrat cu această opțiune selectată.

În modul de compatibilitate ATtiny15, timpul de pornire este determinat de siguranțele SUT, așa cum se arată în Tabelul 6-8 de mai jos.

Tabelul 6-8. Timp de pornire pentru ceasul oscilator RC calibrat intern (în modul ATtiny15)

SUT[1:0] Timp de pornire de la oprire Întârziere suplimentară de la resetare (VCC = 5.0 V) Utilizare recomandată
00 6 CK 14CK + 64 ms
01 6 CK 14CK + 64 ms
10 6 CK 14CK + 4 ms
11 1 CK 14CK(1)

Notă: Dacă siguranța RSTDISBL este programată, acest timp de pornire va fi mărit la 14CK + 4 ms pentru a asigura intrarea în modul de programare.

În rezumat, mai multe informații despre modul de compatibilitate ATtiny15 pot fi găsite în secțiuni „Port B (PB5: PB0)” activat pagina 2„PLL intern în modul de compatibilitate ATtiny15” la pagina 24„Timer / Counter8 pe 1 biți în modul ATtiny15” activat pagina 95„Limitări ale debugWIRE” la pagina 140„Octeturi de calibrare” la pagina 150 iar în tabel „Precalificator de ceas Selectați ”la pagina 33.

Oscilator intern de 128 kHz

Oscilatorul intern de 128 kHz este un oscilator de putere redusă care oferă un ceas de 128 kHz. Frecvența este nominală la 3V și 25°C. Acest ceas poate fi selectat ca ceas de sistem prin programarea Siguranțelor CKSEL la „0100”.

Când este selectată această sursă de ceas, timpii de pornire sunt determinați de siguranțele SUT așa cum se arată în Tabelul 6-9.

Tabelul 6-9. Timp de pornire pentru oscilatorul intern de 128 kHz

SUT[1:0] Timp de pornire de la oprire Întârziere suplimentară de la resetare Utilizare recomandată
00 6 CK 14CK(1) BOD activat
01 6 CK 14CK + 4 ms Putere în creștere rapidă
10 6 CK 14CK + 64 ms Creșterea lentă a puterii
11 Rezervat

Notă: Dacă siguranța RSTDISBL este programată, acest timp de pornire va fi mărit la 14CK + 4 ms pentru a asigura intrarea în modul de programare.

Oscilator cu cristale de joasă frecvență

Pentru a utiliza un cristal de ceas de 32.768 kHz ca sursă de ceas pentru dispozitiv, Oscilatorul de cristal de joasă frecvență trebuie selectat setând siguranțele CKSEL la „0110”. Cristalul ar trebui să fie conectat așa cum se arată în Figura 6-5. Pentru a găsi capacitatea de încărcare adecvată pentru un crysal de 32.768 kHz, vă rugăm să consultați fișa tehnică a producătorului.

Când este selectat acest oscilator, timpii de pornire sunt determinați de siguranțele SUT așa cum se arată în Tabelul 6-10.

Tabelul 6-10. Timp de pornire pentru selecția ceasului oscilatorului de cristal de joasă frecvență

SUT[1:0] Timp de pornire de la oprire Întârziere suplimentară de la resetare (VCC = 5.0 V) Utilizare recomandată
00 1K (1024) CK(1) 4 ms Puterea cu creștere rapidă sau BOD activată
01 1K (1024) CK(1) 64 ms Creșterea lentă a puterii
10 32K (32768) CK 64 ms Frecvență stabilă la pornire
11 Rezervat

Notă: Aceste opțiuni trebuie utilizate numai dacă stabilitatea frecvenței la pornire nu este importantă.

Oscilatorul de cristal de joasă frecvență oferă o capacitate de încărcare internă, vezi Tabelul 6-11 la fiecare pin TOSC.

Tabelul 6-11. Capacitatea oscilatorului de cristal de joasă frecvență

Dispozitiv 32 kHz Osc. Tip Capac (Xtal1 / Tosc1) Capac (Xtal2 / Tosc2)
ATtiny25 / 45/85 Sistem Osc. 16 pF 6 pF

Oscilator de cristal / rezonator ceramic

XTAL1 și XTAL2 sunt de intrare și respectiv de ieșire ale unui inversor ampmai ridicat, care poate fi configurat pentru a fi utilizat ca oscilator On-chip, așa cum se arată în Figura 6-5. Se poate folosi fie un cristal de cuarț, fie un rezonator ceramic.

C1 și C2 ar trebui să fie întotdeauna egale atât pentru cristale, cât și pentru rezonatoare. Valoarea optimă a condensatoarelor depinde de cristalul sau rezonatorul în uz, de cantitatea de capacitate parazită și de zgomotul electromagnetic al mediului. Câteva linii directoare inițiale pentru alegerea condensatoarelor pentru utilizarea cu cristale sunt prezentate în Tabelul 6-12 de mai jos. Pentru rezonatoarele ceramice, trebuie utilizate valorile condensatorului date de producător.

Tabelul 6-12. Moduri de operare a oscilatorului de cristal

CKSEL[3:1] Gama de frecvență (MHz) Gama recomandată pentru condensatorii C1 și C2 pentru utilizare cu cristale (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

Note: Această opțiune nu trebuie utilizată cu cristale, ci doar cu rezonatoare ceramice.

Oscilatorul poate funcționa în trei moduri diferite, fiecare optimizat pentru un anumit interval de frecvență. Modul de funcționare este selectat de siguranțele CKSEL [3: 1] așa cum se arată în Tabelul 6-12.

Siguranța CKSEL0 împreună cu siguranțele SUT [1: 0] selectează timpii de pornire așa cum se arată în Tabelul 6-13.

Tabelul 6-13. Timp de pornire pentru selecția ceasului oscilatorului de cristal

CKSEL0 SUT[1:0] Timp de pornire de la oprire Întârziere suplimentară de la resetare Utilizare recomandată
0 00 258 CK(1) 14CK + 4 ms Rezonator de ceramică, putere crescătoare rapidă
0 01 258 CK(1) 14CK + 64 ms Rezonator de ceramică, cu creștere lentă a puterii
0 10 1K (1024) CK(2) 14CK Rezonator ceramic, BOD activat
0 11 1K (1024) CK(2) 14CK + 4 ms Rezonator de ceramică, putere crescătoare rapidă
1 00 1K (1024) CK(2) 14CK + 64 ms Rezonator de ceramică, cu creștere lentă a puterii
1 01 16K (16384) CK 14CK Oscilator de cristal, BOD activat
1 10 16K (16384) CK 14CK + 4 ms Oscilator de cristal, putere cu creștere rapidă
1 11 16K (16384) CK 14CK + 64 ms Oscilator de cristal, putere crescând încet

Note

Aceste opțiuni trebuie utilizate numai atunci când nu funcționează aproape de frecvența maximă a dispozitivului și numai dacă stabilitatea frecvenței la pornire nu este importantă pentru aplicație. Aceste opțiuni nu sunt potrivite pentru cristale.

Aceste opțiuni sunt destinate utilizării cu rezonatoare ceramice și vor asigura stabilitatea frecvenței la pornire. Ele pot fi utilizate și cu cristale atunci când nu funcționează aproape de frecvența maximă a dispozitivului și dacă stabilitatea frecvenței la pornire nu este importantă pentru aplicație.

Sursă de ceas implicită

Dispozitivul este livrat cu CKSEL = „0010”, SUT = „10” și programat CKDIV8. Setarea implicită a sursei de ceas este, prin urmare, Oscilatorul RC intern care funcționează la 8 MHz cu cel mai mare timp de pornire și o precalificare a ceasului de sistem inițială de 8, rezultând un ceas de sistem de 1.0 MHz. Această setare implicită asigură faptul că toți utilizatorii își pot realiza setarea dorită a sursei de ceas folosind un sistem In-System sau High-voltage Programator.

Prescalator de ceas de sistem

Ceasul de sistem ATtiny25 / 45/85 poate fi împărțit prin setarea „CLKPR - Registrul de precalare a ceasului” la pagina 32. Această caracteristică poate fi utilizată pentru a reduce consumul de energie atunci când necesarul de putere de procesare este scăzut. Aceasta poate fi folosită cu toate opțiunile de sursă de ceas și va afecta frecvența de ceas a procesorului și a tuturor perifericelor sincrone. clkI/O, clkADC, clkCPU și clkFLASH sunt împărțite la un factor așa cum se arată în Tabelul 6-15 la pagina 33.

Timp de comutare

Când comutați între setările de prescalare, sistemul de presetare a ceasului asigură că nu apar erori în sistemul de ceas și că nici o frecvență intermediară nu este mai mare decât frecvența de ceas corespunzătoare setării anterioare și nici frecvența de ceas corespunzătoare noii setări.

Contorul de ondulații care implementează prescalerul rulează la frecvența ceasului nedivizat, care poate fi mai rapidă decât frecvența de ceas a procesorului. Prin urmare, nu este posibil să se determine starea prescalerului - chiar dacă ar fi lizibil, iar timpul exact necesar pentru a trece de la o diviziune de ceas la alta nu poate fi exact prezis.

Din momentul în care valorile CLKPS sunt scrise, durează între T1 + T2 și T1 + 2 * T2 înainte ca noua frecvență de ceas să fie activă. În acest interval, se produc 2 margini de ceas active. Aici, T1 este perioada de ceas anterioară, iar T2 este perioada corespunzătoare noii setări de prescaler.

Tampon ieșire ceas

Dispozitivul poate transmite ceasul sistemului pe pinul CLKO (atunci când nu este utilizat ca pin XTAL2). Pentru a activa ieșirea, siguranța CKOUT trebuie programată. Acest mod este potrivit atunci când ceasul cu cip este utilizat pentru a conduce alte circuite pe sistem. Rețineți că ceasul nu va fi transmis în timpul resetării și că funcționarea normală a pinului I / O va fi suprascrisă atunci când siguranța este programată. Oscilatorul RC intern, oscilatorul WDT, PLL și ceasul extern (CLKI) pot fi selectate atunci când ceasul este afișat pe CLKO. Oscilatoarele de cristal (XTAL1, XTAL2) nu pot fi utilizate pentru ieșirea ceasului pe CLKO. Dacă se folosește Prescalerul de ceas de sistem, este ieșirea ceasului de sistem divizat.

Descriere registru

OSCCAL - Registrul de calibrare a oscilatorului

Pic 7 6 5 4 3 2 1 0
0x31 CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL
Citiți/Scrieți R/V R/V R/V R/V R/V R/V R/V R/V

Biți 7: 0 - CAL [7: 0]: Valoarea calibrării oscilatorului

Registrul de calibrare a oscilatorului este folosit pentru a tăia oscilatorul RC intern calibrat pentru a elimina variațiile procesului de pe frecvența oscilatorului. O valoare de calibrare pre-programată este scrisă automat în acest registru în timpul resetării cipului, oferind frecvența calibrată din fabrică, așa cum este specificat în Tabelul 21-2 la pagina 164. Aplicația software poate scrie acest registru pentru a modifica frecvența oscilatorului. Oscilatorul poate fi calibrat la frecvențe specificate în Tabelul 21-2 la pagina 164. Calibrarea în afara acestui interval nu este garantată.

Rețineți că acest oscilator este utilizat pentru cronometrarea acceselor de scriere EEPROM și Flash, iar aceste timpuri de scriere vor fi afectate în consecință. Dacă sunt scrise EEPROM sau Flash, nu calibrați la mai mult de 8.8 MHz. În caz contrar, scrierea EEPROM sau Flash poate eșua.

Bitul CAL7 determină intervalul de funcționare pentru oscilator. Setarea acestui bit la 0 oferă cel mai mic interval de frecvență, setarea acestui bit la 1 oferă cel mai mare interval de frecvență. Cele două intervale de frecvență se suprapun, cu alte cuvinte o setare OSCCAL = 0x7F oferă o frecvență mai mare decât OSCCAL = 0x80.

Bitii CAL [6: 0] sunt utilizați pentru a regla frecvența în intervalul selectat. O setare de 0x00 oferă cea mai mică frecvență în acest domeniu, iar o setare de 0x7F oferă cea mai mare frecvență din interval.

Pentru a asigura o funcționare stabilă a MCU, valoarea de calibrare trebuie modificată în mici. O variație a frecvenței de peste 2% de la un ciclu la altul poate duce la un comportament imprevizibil. Modificările OSCCAL nu trebuie să depășească 0x20 pentru fiecare calibrare. Este necesar să vă asigurați că MCU este păstrat în Resetare în timpul acestor modificări ale frecvenței ceasului

Tabelul 6-14. Gama de frecvență a oscilatorului RC intern

Valoare OSCCAL Cea mai mică frecvență tipică în ceea ce privește frecvența nominală Cea mai mare frecvență tipică în ceea ce privește frecvența nominală
0x00 50% 100%
0x3F 75% 150%
0x7F 100% 200%

CLKPR - Registrul Prescalării ceasului

Pic 7 6 5 4 3 2 1 0
0x26 CLKPCE CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR
Citiți/Scrieți R/V R R R R/V R/V R/V R/V

Valoare inițială 0 0 0 0 Consultați descrierea biților

Bit 7 - CLKPCE: Activare schimbare precalator ceas

Bitul CLKPCE trebuie scris în una logică pentru a permite schimbarea biților CLKPS. Bitul CLKPCE este actualizat numai atunci când ceilalți biți din CLKPR sunt simultan scrise la zero. CLKPCE este eliminat de hardware patru cicluri după ce este scris sau când sunt scrise biții CLKPS. Rescrierea bitului CLKPCE în această perioadă de timp nu extinde nici perioada de expirare și nici nu șterge bitul CLKPCE.

Bits 6: 4 - Res: Bits rezervate

Acești biți sunt biți rezervați în ATtiny25 / 45/85 și se vor citi întotdeauna ca zero.

Biti 3: 0 - CLKPS [3: 0]: Prescaler de ceas Selectați biți 3 - 0

Acești biți definesc factorul de divizare între sursa de ceas selectată și ceasul intern al sistemului. Acești biți pot fi scrise în timpul rulării pentru a varia frecvența ceasului pentru a se potrivi cerințelor aplicației. Deoarece divizorul împarte intrarea ceasului principal la MCU, viteza tuturor perifericelor sincrone este redusă atunci când se utilizează un factor de divizare. Factorii de diviziune sunt prezentați în Tabelul 6-15.

Pentru a evita modificările neintenționate ale frecvenței ceasului, trebuie urmată o procedură specială de scriere pentru a schimba biții CLKPS:

Scrieți bitul CLKPCE (Clock Prescaler Change Enable) la unul și toți ceilalți biți din CLKPR la zero.

În termen de patru cicluri, scrieți valoarea dorită în CLKPS în timp ce scrieți un zero în CLKPCE.

Întreruperile trebuie dezactivate la modificarea setării prescalerului pentru a vă asigura că procedura de scriere nu este întreruptă.

Siguranța CKDIV8 determină valoarea inițială a biților CLKPS. Dacă CKDIV8 este neprogramat, biții CLKPS vor fi resetati la „0000”. Dacă CKDIV8 este programat, biții CLKPS sunt resetați la „0011”, dând un factor de divizare de opt la pornire. Această caracteristică trebuie utilizată dacă sursa de ceas selectată are o frecvență mai mare decât frecvența maximă a dispozitivului în condițiile actuale de funcționare. Rețineți că orice valoare poate fi scrisă în biții CLKPS, indiferent de setarea CKDIV8 Fuse. Aplicația software trebuie să se asigure că există un factor de divizare suficient

ales dacă sursa de ceas selectată are o frecvență mai mare decât frecvența maximă a dispozitivului în condițiile actuale de funcționare. Dispozitivul este livrat cu siguranța CKDIV8 programată.

Tabelul 6-15. Clock Prescaler Select

CLKPS3 CLKPS2 CLKPS1 CLKPS0 Factorul diviziunii ceasului
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 Rezervat
1 0 1 0 Rezervat
1 0 1 1 Rezervat
1 1 0 0 Rezervat
1 1 0 1 Rezervat
1 1 1 0 Rezervat
1 1 1 1 Rezervat

Notă: Prescaler-ul este dezactivat în modul de compatibilitate ATtiny15 și nici scrierea în CLKPR, nici programarea siguranței CKDIV8 nu au niciun efect asupra ceasului sistemului (care va fi întotdeauna 1.6 MHz).

Gestionarea energiei și modurile Sleep

Performanța ridicată și eficiența codului de vârf din industrie fac din microcontrolerele AVR o alegere ideală pentru aplicații cu consum redus de energie. În plus, modurile de repaus permit aplicației să oprească modulele neutilizate din MCU, economisind astfel energie. AVR oferă diferite moduri de repaus, permițând utilizatorului să adapteze consumul de energie la cerințele aplicației.

Moduri de somn

Figura 6-1 la pagina 23 prezintă diferitele sisteme de ceas și distribuția lor în ATtiny25 / 45/85. Cifra este utilă în selectarea unui mod de somn adecvat. Tabelul 7-1 arată diferitele moduri de somn și sursele lor de trezire.

Tabelul 7-1. Domenii active de ceas și surse de trezire în diferite moduri de repaus

Domenii active de ceas Oscilatoare Surse de trezire
Modul Sleep clkCPU clkFLASH clkIO clkADC clkPCK Sursa principală a ceasului activată INT0 și Pin Change SPM / EEPROM

Gata

 

Condiție de început USI

ADC Alte I/O Câine de pază Întrerupe
Inactiv X X X X X X X X X X
Reducerea zgomotului ADC X X X(1) X X X X
Putere scazuta X(1) X X

Notă: Pentru INT0, numai întrerupere de nivel.

Pentru a introduce oricare dintre cele trei moduri de repaus, bitul SE din MCUCR trebuie scris în logica unu și trebuie executată o instrucțiune SLEEP. Bitii SM [1: 0] din Registrul MCUCR selectează modul de repaus (Inactiv, Reducere zgomot ADC sau Power-down) care vor fi activate de instrucțiunea SLEEP. Vedea Tabelul 7-2 pentru un rezumat.

Dacă apare o întrerupere activată în timp ce MCU este în modul de repaus, MCU se trezește. MCU este apoi oprit pentru patru cicluri în plus față de timpul de pornire, execută rutina de întrerupere și reia executarea din instrucțiunea de după SLEEP. Conținutul registrului File și SRAM sunt nealterate atunci când dispozitivul se trezește din somn. Dacă apare o resetare în timpul modului de repaus, MCU se trezește și se execută din Vectorul de resetare.

Notă: dacă o întrerupere declanșată de nivel este utilizată pentru trezire, nivelul modificat trebuie menținut pentru o perioadă de timp pentru a activa MCU (și pentru ca MCU să intre în rutina de serviciu de întrerupere). Vedea „Întreruperi externe” la pagina 49 pentru detalii.

Mod inactiv

Când biții SM[1:0] sunt scriși la 00, instrucțiunea SLEEP face ca MCU să intre în modul Idle, oprind CPU-ul, dar permițând comparatorului analogic, ADC, USI, Timer/Counter, Watchdog și sistemului de întrerupere să continue funcționarea. mâncând. Acest mod de repaus oprește practic clkCPU și clkFLASH, permițând în același timp rularea celorlalte ceasuri.

Modul de repaus permite MCU-ului să se trezească din întreruperile externe declanșate, precum și din cele interne, cum ar fi Timer Overflow. Dacă nu este necesară trezirea de la întreruperea comparatorului analogic, comparatorul analogic poate fi oprit prin setarea bitului ACD în „ACSR - Control comparator analog și registru de stare” la pagina 120. Acest lucru va reduce consumul de energie în modul Repaus. Dacă ADC este activat, o conversie pornește automat la introducerea acestui mod.

Modul de reducere a zgomotului ADC

Când biții SM[1:0] sunt scriși la 01, instrucțiunea SLEEP face ca MCU să intre în modul de reducere a zgomotului ADC, oprind CPU-ul, dar permițând ADC-ului, întreruperilor externe și Watchdog-ului să continue să funcționeze (dacă este activat). Acest mod de repaus oprește clkI/O, clkCPU și clkFLASH, permițând în același timp rularea celorlalte ceasuri.

Acest lucru îmbunătățește mediul de zgomot pentru ADC, permițând măsurători de rezoluție mai mare. Dacă ADC este activat, o conversie pornește automat la introducerea acestui mod. În afară de întreruperea ADC Conversion Complete, doar o resetare externă, o resetare a câinelui de supraveghere, o resetare Brown-out, o întrerupere SPM / EEPROM pregătită, o întrerupere de nivel extern pe INT0 sau o întrerupere de schimbare a pinului poate trezi MCU din reducerea zgomotului ADC modul.

Mod de oprire

Când biții SM [1: 0] sunt scrise la 10, instrucțiunea SLEEP face ca MCU să intre în modul de oprire. În acest mod, oscilatorul este oprit, în timp ce externul se întrerupe, detectarea condiției de pornire USI și Watchdog continuă să funcționeze (dacă este activat). Numai o resetare externă, o resetare a câinelui de supraveghere, o resetare Brown-out, o întrerupere a condiției de pornire USI, o întrerupere de nivel extern pe INT0 sau o întrerupere de schimbare a pinului poate trezi MCU. Acest mod de repaus oprește toate ceasurile generate, permițând funcționarea numai a modulelor asincrone.

Dezactivare BOD software

Când detectorul Brown-out (BOD) este activat de siguranțele BODLEVEL (vezi Tabelul 20-4 la pagina 148), BOD monitorizează activ volumul aprovizionăriitage în timpul perioadei de somn. În unele dispozitive este posibil să economisiți energie prin dezactivarea BOD-ului de către software în modul de repaus Power-Down. Consumul de energie în modul de repaus va fi atunci la același nivel ca atunci când BOD este dezactivat global de siguranțe.

Dacă BOD este dezactivat de software, funcția BOD este dezactivată imediat după intrarea în modul de repaus. La trezirea din somn, BOD este activat automat din nou. Acest lucru asigură funcționarea în siguranță în cazul în care nivelul VCC a scăzut în timpul perioadei de somn.

Când BOD-ul a fost dezactivat, timpul de trezire din modul de repaus va fi același cu cel pentru trezirea din RESET. Utilizatorul trebuie să configureze manual orele de trezire astfel încât referința bandgap să aibă timp să înceapă și BOD funcționează corect înainte ca MCU să continue să execute cod. Vedeți biții de siguranță SUT [1: 0] și CKSEL [3: 0] din tabel „Fuse Low Byte” la pagina 149

Dezactivarea BOD este controlată de bitul BODS (BOD Sleep) al Registrului de control MCU, vezi „MCUCR - Control MCU Înregistrează-te ”la pagina 37. Scrierea acestui bit la unu dezactivează BOD în Power-Down, în timp ce scrierea unui zero menține BOD activ. Setarea implicită este zero, adică BOD activ.

Scrierea pe bitul BODS este controlată de o secvență temporizată și un bit de activare, vezi „MCUCR - MCU Control Regist- ter ”la pagina 37.

Limitări

Funcționalitatea de dezactivare BOD a fost implementată numai în următoarele dispozitive:

ATtiny25, revizuirea E și mai noi

ATtiny45, revizuirea D și mai noi

ATtiny85, revizuirea C și mai noi

Revizuirile sunt marcate pe pachetul dispozitivului și pot fi localizate după cum urmează:

Partea de jos a pachetelor 8P3 și 8S2

Partea superioară a pachetului 20M1

Registrul de reducere a puterii

Registrul de reducere a puterii (PRR), vezi „PRR - Registrul de reducere a puterii” la pagina 38, oferă o metodă de reducere a consumului de energie prin oprirea ceasului la periferice individuale. Starea actuală a perifericului este înghețată și registrele I / O nu pot fi citite sau scrise. Resursele utilizate de periferic la oprirea ceasului vor rămâne ocupate, prin urmare perifericul ar trebui dezactivat în majoritatea cazurilor înainte de a opri ceasul. Trezirea unui modul, care se face prin ștergerea bitului în PRR, pune modulul în aceeași stare ca înainte de oprire.

Oprirea modulului poate fi utilizată în modul Repaus și în modul Activ pentru a reduce semnificativ consumul total de energie. În toate celelalte moduri de repaus, ceasul este deja oprit. Vedea „Curent de alimentare al modulelor I / O” la pagina 177 de examples.

Minimizarea consumului de energie

Există mai multe probleme de luat în considerare atunci când încercați să reduceți la minimum consumul de energie într-un sistem controlat AVR. În general, modurile de repaus trebuie utilizate cât mai mult posibil, iar modul de repaus trebuie selectat astfel încât să funcționeze cât mai puține funcții ale dispozitivului. Toate funcțiile care nu sunt necesare ar trebui dezactivate. În special, următoarele module ar putea avea nevoie de o atenție specială atunci când se încearcă obținerea celui mai mic consum de energie posibil.

Convertor analog-digital

Dacă este activat, ADC va fi activat în toate modurile de repaus. Pentru a economisi energie, ADC ar trebui să fie dezactivat înainte de a intra în orice mod de repaus. Când ADC este oprit și pornit din nou, următoarea conversie va fi o conversie extinsă. A se referi la „Convertor analog la digital” la pagina 122 pentru detalii despre funcționarea ADC.

Comparator analogic

Când intrați în modul Repaus, comparatorul analogic trebuie dezactivat dacă nu este utilizat. Când intrați în modul de reducere a zgomotului ADC, comparatorul analogic ar trebui să fie dezactivat. În celelalte moduri de repaus, comparatorul analogic este dezactivat automat. Cu toate acestea, dacă comparatorul analogic este configurat pentru a utiliza volumul interntage Referință ca intrare, comparatorul analogic trebuie dezactivat în toate modurile de repaus. În caz contrar, volumul interntage Referința va fi activată, independent de modul de repaus. A se referi la „Comparator analog” la pagina 119 pentru detalii despre configurarea comparatorului analogic.

Detector Brown-out

Dacă nu este nevoie de detectorul Brown-out în aplicație, acest modul ar trebui să fie oprit. Dacă detectorul Brown-out este activat de siguranțele BODLEVEL, acesta va fi activat în toate modurile de repaus și, prin urmare, va consuma întotdeauna energie. În modurile de somn mai profund, acest lucru va contribui semnificativ la consumul total curent. Vedea „Detecție Brown-out „la pagina 41 şi „Software BOD Disable” la pagina 35 pentru detalii despre configurarea detectorului Brown-out.

Vol. Interntage Referință

Volumul interntage Referința va fi activată atunci când este nevoie de detecția Brown-out, comparatorul analogic sau ADC. Dacă aceste module sunt dezactivate așa cum este descris în secțiunile de mai sus, volumul interntagReferința va fi dezactivată și nu va consuma energie. Când este pornit din nou, utilizatorul trebuie să permită trimiterea referinței înainte de a fi utilizată ieșirea. Dacă referința este menținută în modul de repaus, ieșirea poate fi utilizată imediat. A se referi la „Vol. Interntage Referință ”la pagina 42 pentru detalii despre ora de pornire.

Timer Watchdog

Dacă nu este necesar Cronometrul de supraveghere în aplicație, acest modul ar trebui să fie oprit. Dacă Cronometrul Watchdog este activat, acesta va fi activat în toate modurile de repaus și, prin urmare, consumă întotdeauna energie. În modurile de somn mai profund, acest lucru va contribui semnificativ la consumul total curent. A se referi la „Cronometru câine de pază” la pagina 42 pentru detalii despre configurarea cronometrului Watchdog.

Port Pins

Când intrați într-un mod de repaus, toți pinii portului ar trebui configurați pentru a utiliza puterea minimă. Cel mai important lucru este atunci să vă asigurați că niciun pini nu antrenează sarcini rezistive. În modurile de repaus în care atât ceasul I/O (clkI/O) cât și ceasul ADC (clkADC) sunt oprite, bufferele de intrare ale dispozitivului vor fi dezactivate. Acest lucru asigură că nu este consumată nicio energie

de logica de intrare atunci când nu este necesar. În unele cazuri, logica de intrare este necesară pentru detectarea condițiilor de trezire și

va fi apoi activat. Consultați secțiunea „Activare intrare digitală și moduri de repaus” la pagina 57 pentru detalii despre pinii activați. Dacă tamponul de intrare este activat și semnalul de intrare este lăsat plutitor sau are un nivel de semnal analogic apropiat de VCC/2, tamponul de intrare va folosi putere excesivă.

Pentru pinii de intrare analogică, tamponul de intrare digitală ar trebui să fie dezactivat în orice moment. Un nivel de semnal analogic apropiat de VCC/2 pe un pin de intrare poate provoca un curent semnificativ chiar și în modul activ. Bufferele de intrare digitală pot fi dezactivate prin scrierea în Registrul de dezactivare a intrării digitale (DIDR0). A se referi la „DIDR0 - Registrare dezactivare intrare digitală 0” la pagina 121 pentru detalii.

Descriere registru

MCUCR - Registrul de control MCU

Registrul de control MCU conține biți de control pentru gestionarea energiei.

Pic 7 6 5 4 3 2 1 0
0x35 BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Citiți/Scrieți R R/V R/V R/V R/V R R/V R/V
Valoarea inițială 0 0 0 0 0 0 0 0

Bit 7 - BODS: BOD Sleep

Funcționalitatea de dezactivare BOD este disponibilă numai pe unele dispozitive. Vedea „Limitări” la pagina 36.

Pentru a dezactiva DBO în timpul somnului (a se vedea Tabelul 7-1 la pagina 34) bitul BODS trebuie scris în unul logic. Acest lucru este controlat de o secvență temporizată și de bitul de activare, BODSE în MCUCR. În primul rând, atât BODS, cât și BODSE trebuie setate la unul. În al doilea rând, în termen de patru cicluri de ceas, BODS trebuie setat la unul și BODSE trebuie setat la zero. Bitul BODS este activ la trei cicluri de ceas după ce este setat. O instrucțiune de somn trebuie executată în timp ce BODS este activ pentru a opri BOD-ul pentru modul de somn efectiv. Bitul BODS este șters automat după trei cicluri de ceas.

Pe dispozitivele în care Sleeping BOD nu a fost implementat, acest bit este neutilizat și va citi întotdeauna zero.

Bit 5 - SE: Sleep Enable

Bitul SE trebuie să fie scris în unul logic pentru ca MCU să intre în modul de repaus când este executată instrucțiunea SLEEP. Pentru a evita intrarea MCU în modul de repaus, cu excepția cazului în care este scopul programatorului, se recomandă să scrieți bitul de activare a repausului (SE) la unul chiar înainte de execuția instrucțiunii SLEEP și să îl ștergeți imediat după trezire.

Biți 4: 3 - SM [1: 0]: Modul Sleep Selectați biții 1 și 0

Acești biți selectează între cele trei moduri de repaus disponibile, așa cum se arată în Tabelul 7-2.

Tabelul 7-2. Selectarea modului Sleep

SM1 SM0 Modul Sleep
0 0 Inactiv
0 1 Reducerea zgomotului ADC
1 0 Putere scazuta
1 1 Rezervat

Bit 2 - BODSE: BOD Sleep Enable

Funcționalitatea de dezactivare BOD este disponibilă numai pe unele dispozitive. Vedea „Limitări” la pagina 36.

Bitul BODSE permite setarea bitului de control BODS, așa cum se explică în descrierea bitului BODS. Dezactivarea BOD este controlată de o secvență temporizată.

Acest bit nu este utilizat în dispozitivele în care dezactivarea software-ului BOD nu a fost implementată și va citi ca zero în acele dispozitive.

PRR - Registrul de reducere a puterii

Registrul de reducere a energiei oferă o metodă de reducere a consumului de energie, permițând dezactivarea semnalelor de ceas periferice.

Pic 7 6 5 4 3 2 1 0
0x20 PRTIM1 PRTIM0 PRUSI PRADC PRR
Citiți/Scrieți R R R R R/V R/V R/V R/V
Valoarea inițială 0 0 0 0 0 0 0 0

Bits 7: 4 - Res: Bits rezervate

Acești biți sunt biți rezervați în ATtiny25 / 45/85 și se vor citi întotdeauna ca zero.

Bit 3 - PRTIM1: Timer / Contor de reducere a puterii1

Scrierea unei logici pe acest bit oprește modulul Timer / Counter1. Când Timer / Counter1 este activat, funcționarea va continua ca înainte de oprire.

Bit 2 - PRTIM0: Timer / Contor de reducere a puterii0

Scrierea unei logici pe acest bit oprește modulul Timer / Counter0. Când Timer / Counter0 este activat, funcționarea va continua ca înainte de oprire.

Bit 1 - PRUSI: Reducerea puterii USI

Scrierea unei logici pe acest bit oprește USI oprind ceasul la modul. La trezirea din nou a USI, USI ar trebui să fie reinicializat pentru a asigura funcționarea corectă.

Bit 0 - PRADC: Reducerea puterii ADC

Scrierea unei logici pe acest bit închide ADC. ADC trebuie dezactivat înainte de oprire. Rețineți că ceasul ADC este utilizat și de unele părți ale comparatorului analogic, ceea ce înseamnă că comparatorul analogic nu poate fi utilizat atunci când acest bit este mare.

Control și resetare sistem

Resetarea AVR

În timpul resetării, toate registrele I / O sunt setate la valorile lor inițiale, iar programul începe executarea din Reset Vector. Instrucțiunea plasată la Vectorul de resetare trebuie să fie o instrucțiune RJMP - Relative Jump - la rutina de gestionare a resetării. Dacă programul nu activează niciodată o sursă de întrerupere, vectorii de întrerupere nu sunt utilizați și codul programului regulat poate fi plasat în aceste locații. Diagrama circuitului din Figura 8-1 arată logica de resetare. Parametrii electrici ai circuitelor de resetare sunt prezentați în „Caracteristici de sistem și resetare” la pagina 165.

Figura 8-1 Resetare logică Resetare-logică

Porturile I / O ale AVR sunt resetate imediat la starea lor inițială atunci când o sursă de resetare este activă. Acest lucru nu necesită nicio sursă de ceas pentru a rula.

După ce toate sursele de resetare au intrat inactive, este invocat un contor de întârziere, extinzând resetarea internă. Acest lucru permite puterii să atingă un nivel stabil înainte de începerea funcționării normale. Perioada de expirare a contorului de întârziere este definită de utilizator prin intermediul siguranțelor SUT și CKSEL. Diferitele selecții pentru perioada de întârziere sunt prezentate în "Ceas Surse ”la pagina 25.

Resetați sursele

ATtiny25 / 45/85 are patru surse de resetare:

Resetare la pornire. MCU-ul este resetat când volumul de alimentaretage este sub pragul de resetare la pornire (VPOT).

Resetare externă. MCU-ul este resetat atunci când este prezent un nivel scăzut pe pinul RESET mai mult decât lungimea minimă a impulsului.

Resetare câine de supraveghere. MCU-ul este resetat când expiră perioada Timerului Watchdog și Watchdog-ul este activat.

Resetați Brown-out. MCU-ul este resetat când volumul de alimentaretage VCC se află sub pragul de resetare Brown-out (VBOT) și detectorul Brown-out este activat.

Resetare la pornire

Un impuls de resetare la pornire (POR) este generat de un circuit de detectare On-chip. Nivelul de detecție este definit în „Sys- tem și Resetare caracteristici ”la pagina 165. POR este activat ori de câte ori VCC este sub nivelul de detectare. Circuitul POR poate fi utilizat pentru a declanșa resetarea la pornire, precum și pentru a detecta o defecțiune a volumului de alimentaretage.

Un circuit de resetare la pornire (POR) asigură resetarea dispozitivului de la pornire. Atingerea pragului de resetare la pornire voltage invocă contorul de întârziere, care determină cât timp dispozitivul este menținut în RESET după creșterea VCC. Semnalul RESET este activat din nou, fără întârziere, când VCC scade sub nivelul de detectare.

Figura 8-2. Pornire MCU, RESET Legat la VCC

RESETARE INTERNĂ

Figura 8-3. Pornire MCU, RESET extins extern

Resetare externă

O resetare externă este generată de un nivel scăzut pe pinul RESET, dacă este activat. Resetați impulsurile mai lungi decât lățimea minimă a impulsului (vezi „Caracteristici de sistem și resetare” la pagina 165) va genera o resetare, chiar dacă ceasul nu funcționează. Impulsurile mai scurte nu sunt garantate pentru a genera o resetare. Când semnalul aplicat ajunge la Reset Threshold Voltage – VRST – pe marginea pozitivă, contorul de întârziere pornește MCU după expirarea perioadei de time-out.

Figura 8-4. Resetare externă în timpul funcționării Fig8.4

Detectare Brown-out

ATtiny25/45/85 are un circuit de detectare a rupturii pe cip (BOD) pentru monitorizarea nivelului VCC în timpul funcționării, comparându-l cu un nivel de declanșare fix. Nivelul de declanșare pentru BOD poate fi selectat de siguranțele BODLEVEL. Nivelul de declanșare are o histerezis pentru a asigura o detectare a întreruperii fără vârfuri. Histerezisul la nivelul de detecție ar trebui interpretat ca VBOT+ = VBOT + VHYST/2 și VBOT- = VBOT – VHYST/2.

Când BOD este activat și VCC scade la o valoare sub nivelul de declanșare (VBOT-in Figura 8-5), resetarea în stare de întrerupere este imediat activată. Când VCC crește peste nivelul de declanșare (VBOT+ în Figura 8-5), contorul de întârziere pornește MCU după expirarea perioadei de time-out tTOUT.

Circuitul BOD va detecta o scădere a VCC numai dacă volumultage rămâne sub nivelul de declanșare mai mult decât tBOD dat în „Caracteristici de sistem și resetare” la pagina 165. Fig8.5

Resetare câine de supraveghere

Când Watchdog-ul expiră, va genera un impuls scurt de resetare cu durata unui ciclu CK. Pe marginea descendentă a acestui impuls, temporizatorul de întârziere începe să numere perioada de Time-out tTOUT. A se referi la „Cronometru câine de pază” la pagina 42 pentru detalii despre funcționarea temporizatorului de supraveghere.

Voltage Referință Activare semnale și timp de pornire

VoltagReferința are un timp de pornire care poate influența modul în care ar trebui utilizată. Timpul de pornire este dat în „Caracteristici de sistem și resetare” la pagina 165. Pentru a economisi energie, referința nu este întotdeauna activată. Referința este activă în următoarele situații:

Când BOD-ul este activat (prin programarea BODLEVEL [2: 0] Fuse Bits).

Când referința bandgap este conectată la comparatorul analogic (prin setarea bitului ACBG în ACSR).

Când ADC este activat.

Astfel, atunci când BOD-ul nu este activat, după setarea bitului ACBG sau activarea ADC, utilizatorul trebuie să permită întotdeauna referința să pornească înainte de a fi utilizată ieșirea din comparatorul analogic sau ADC. Pentru a reduce consumul de energie în modul de oprire, utilizatorul poate evita cele trei condiții de mai sus pentru a se asigura că referința este oprită înainte de a intra în modul de oprire.

Timer Watchdog

Cronometrul Watchdog este tactat de la un oscilator On-chip care rulează la 128 kHz. Controlând prescalerul Watchdog Timer, intervalul de resetare Watchdog poate fi ajustat așa cum se arată în Tabelul 8-3 la pagina 46. WDR - Watchdog Reset - instrucțiunea resetează temporizatorul Watchdog. Cronometrul Watchdog este, de asemenea, resetat atunci când este dezactivat și când are loc o resetare a cipului. Pot fi selectate zece perioade diferite ale ciclului de ceas pentru a determina perioada de resetare. Dacă perioada de resetare expiră fără o altă Resetare Watchdog, ATtiny25 / 45/85 se resetează și se execută din Vectorul Reset. Pentru detalii de sincronizare privind Resetarea câinelui de supraveghere, consultați Tabelul 8-3 la pagina 46.

Cronometrul Watchdog poate fi, de asemenea, configurat pentru a genera o întrerupere în loc de resetare. Acest lucru poate fi foarte util atunci când utilizați Watchdog pentru a vă trezi de la oprire.

Pentru a preveni dezactivarea neintenționată a Watchdog-ului sau schimbarea neintenționată a perioadei de expirare, două niveluri de siguranță diferite sunt selectate de siguranța WDTON așa cum se arată în Tabelul 8-1 Consultați „Secvențe temporizate pentru schimbarea con- figurarea temporizatorului de supraveghere ”la pagina 43 pentru detalii.

Tabelul 8-1. Configurarea WDT ca o funcție a setărilor de siguranțe ale WDTON

WDTON Nivel de siguranță Starea inițială WDT Cum se dezactivează WDT Cum să schimbați expirarea
Neprogramat 1 Dezactivat Secvență temporizată Fără limitări
Programat 2 Activat Activat întotdeauna Secvență temporizată

Figura 8-7. Timer Watchdog Câine de pază

Secvențe temporizate pentru modificarea configurației temporizatorului de supraveghere

Secvența pentru schimbarea configurației diferă ușor între cele două niveluri de siguranță. Sunt descrise proceduri separate pentru fiecare nivel.

Nivelul de siguranță 1: În acest mod, Timer-ul Watchdog este inițial dezactivat, dar poate fi activat prin scrierea bitului WDE într-unul, fără nicio restricție. Este necesară o secvență temporizată când dezactivați un Timer Watchdog activat. Pentru a dezactiva un temporizator Watchdog activat, trebuie urmată următoarea procedură:

În aceeași operație, scrieți una logică în WDCE și WDE. O logică trebuie scrisă în WDE, indiferent de valoarea anterioară a bitului WDE.

În următoarele patru cicluri de ceas, în aceeași operație, scrieți biții WDE și WDP după cum doriți, dar cu bitul WDCE șters.

Nivelul de siguranță 2: În acest mod, Timer-ul Watchdog este întotdeauna activat, iar bitul WDE va ​​citi întotdeauna ca unul. Este necesară o secvență cronometrată când se schimbă perioada de expirare Watchdog. Pentru a modifica Time-out Watchdog, trebuie urmată următoarea procedură:

În aceeași operație, scrieți una logică în WDCE și WDE. Chiar dacă WDE este întotdeauna setat, WDE trebuie scris către unul pentru a porni secvența temporizată.

În următoarele patru cicluri de ceas, în aceeași operație, scrieți biții WDP după cum doriți, dar cu bitul WDCE șters. Valoarea scrisă pe bitul WDE este irelevantă.

Cod Example

Următorul cod example arată un ansamblu și o funcție C pentru oprirea WDT. Fostulample presupune că întreruperile sunt controlate (de exemplu, prin dezactivarea întreruperilor la nivel global), astfel încât să nu apară întreruperi în timpul executării acestor funcții.

Cod asamblare Example(1)
WDT_off:

wdr

; Ștergeți WDRF în MCUSR

ldi r16, (0<

afară MCUSR, r16

; Scrieți unul logic pentru WDCE și WDE

; Păstrați setarea veche a prescalerului pentru a preveni resetarea neintenționată a câinelui de pază

în r16, WDTCR

ori r16, (1<

out WDTCR, r16

; Opriți WDT

ldi r16, (0<

out WDTCR, r16

ret

Cod C Example(1)
void WDT_off(void)

{

_WDR ();

/* Ștergeți WDRF în MCUSR */ MCUSR = 0x00

/* Scrieți unul logic în WDCE și WDE */ WDTCR |= (1<

/ * Dezactivați WDT * / WDTCR = 0x00;

}

Notă: 1. Vezi „Cod Examples ”la pagina 6.

Descriere registru

MCUSR - Registrul de stare MCU

Registrul de stare MCU oferă informații despre sursa de resetare care a cauzat o resetare MCU.

Pic 7 6 5 4 3 2 1 0
0x34 WDRF BORF EXTRF PORF MCUSR
Citiți/Scrieți R R R R R/V R/V R/V R/V

Valoare inițială 0 0 0 0 Consultați descrierea biților

Bits 7: 4 - Res: Bits rezervate

Acești biți sunt biți rezervați în ATtiny25 / 45/85 și se vor citi întotdeauna ca zero.

Bit 3 - WDRF: Semnal de resetare a câinelui de supraveghere

Acest bit este setat dacă are loc o resetare a câinelui de supraveghere. Bitul este resetat printr-o resetare la pornire sau prin scrierea unui zero logic în steag.

Bit 2 - BORF: Steag de resetare Brown-out

Acest bit este setat dacă are loc o resetare Brown-out. Bitul este resetat printr-o resetare la pornire sau prin scrierea unui zero logic în steag.

Bit 1 - EXTRF: Flag Reset extern

Acest bit este setat dacă are loc o resetare externă. Bitul este resetat printr-o resetare la pornire sau prin scrierea unui zero logic în steag.

Bit 0 - PORF: semnal de resetare la pornire

Acest bit este setat dacă apare o resetare la pornire. Bitul este resetat numai prin scrierea unui zero logic pe steag.

Pentru a utiliza steagurile de resetare pentru a identifica o stare de resetare, utilizatorul ar trebui să citească și apoi să reseteze MCUSR cât mai curând posibil în program. Dacă registrul este șters înainte de a se produce o altă resetare, sursa resetării poate fi găsită examinând semnalizările de resetare.

WDTCR - Registrul de control al temporizatorului de supraveghere

Pic 7 6 5 4 3 2 1 0
0x21 WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 WDTCR
Citiți/Scrieți R/V R/V R/V R/V R/V R/V R/V R/V
Valoarea inițială 0 0 0 0 X 0 0 0

Bit 7 - WDIF: semnal de întrerupere a expirării timpului de supraveghere

Acest bit este setat când are loc un time-out în cronometrul câinelui de supraveghere și când cronometrul câinelui de supraveghere este configurat pentru întrerupere. WDIF este eliminat de hardware atunci când se execută vectorul corespunzător de gestionare a întreruperilor. În mod alternativ, WDIF este eliminat scriind unul logic pe steag. Când bitul I din SREG și WDIE sunt setate, se execută întreruperea Time-out Watchdog.

Bit 6 - WDIE: Activare întrerupere timeout câine de supraveghere

Când acest bit este scris într-unul, WDE este șters și bitul I din Registrul de stare este setat, întreruperea Time-out Watchdog este activată. În acest mod, întreruperea corespunzătoare este executată în loc de resetare, dacă are loc un timeout în Timpul de supraveghere.

Dacă WDE este setat, WDIE este șters automat de hardware atunci când are loc un time-out. Acest lucru este util pentru păstrarea securității Resetului Watchdog în timpul utilizării întreruperii. După ce bitul WDIE este șters, următorul time-out va genera o resetare. Pentru a evita resetarea câinelui de supraveghere, WDIE trebuie setat după fiecare întrerupere.

Tabelul 8-2. Configurare Timer Watchdog

WDE WDIE Starea temporizatorului de supraveghere Acțiune la expirare
0 0 oprit Nici unul
0 1 Funcţionare Întrerupe
1 0 Funcţionare Resetați
1 1 Funcţionare Întrerupe

Bit 4 - WDCE: Activare schimbare câine de supraveghere

Acest bit trebuie setat când bitul WDE este scris în zero logic. În caz contrar, Watchdog-ul nu va fi dezactivat. Odată scris pe unul, hardware-ul va șterge acest bit după patru cicluri de ceas. Consultați descrierea bitului WDE pentru o procedură de dezactivare Watchdog. Acest bit trebuie setat și la schimbarea biților de prescaler. Vedea „Secvențe temporizate pentru modificarea configurației temporizatorului de supraveghere ”la pagina 43.

Bit 3 - WDE: Activare câine de supraveghere

Când WDE este scris în logica unu, Watchdog Timer este activat, iar dacă WDE este scris în zero logic, funcția Watchdog Timer este dezactivată. WDE poate fi șters numai dacă bitul WDCE are un nivel logic. Pentru a dezactiva un cronometru de pază activat, trebuie urmată următoarea procedură:

În aceeași operație, scrieți una logică în WDCE și WDE. O logică trebuie scrisă în WDE, chiar dacă este setată la una înainte de a începe operația de dezactivare.

În următoarele patru cicluri de ceas, scrieți o logică 0 în WDE. Aceasta dezactivează Watchdog-ul.

La nivelul de siguranță 2, nu este posibil să dezactivați temporizatorul Watchdog, chiar și cu algoritmul descris mai sus. Vedea „Secvențe temporizate pentru modificarea configurației temporizatorului de supraveghere” la pagina 43.

În nivelul de siguranță 1, WDE este suprascris de WDRF în MCUSR. Vedea „MCUSR - Registrul de stare MCU” la pagina 44 pentru descrierea WDRF. Aceasta înseamnă că WDE este întotdeauna setat atunci când este setat WDRF. Pentru a șterge WDE, WDRF trebuie șters înainte de a dezactiva Watchdog cu procedura descrisă mai sus. Această caracteristică asigură mai multe resetări în condițiile care cauzează eșec și o pornire sigură după eșec.

Notă: Dacă timer-ul watchdog nu va fi utilizat în aplicație, este important să parcurgeți o procedură de dezactivare watchdog la inițializarea dispozitivului. Dacă Watchdog este activat accidental, de exampPrintr-un indicator de evadare sau o condiție de decolorare, dispozitivul va fi resetat, ceea ce la rândul său va duce la o nouă resetare a câinelui de pază. Pentru a evita această situație, software-ul aplicației ar trebui să șteargă întotdeauna semnalizatorul WDRF și bitul de control WDE în rutina de inițializare.

Bits 5, 2: 0 - WDP [3: 0]: Watchdog Timer Prescaler 3, 2, 1 și 0

Biții WDP [3: 0] determină precalificarea temporizatorului Watchdog când este activat Timerul Watchdog. Diferitele valori de prescalare și perioadele lor de expirare corespunzătoare sunt prezentate în Tabelul 8-3.

Tabelul 8-3. Watchdog Timer Prescale Select

WDP3 WDP2 WDP1 WDP0 Numărul de cicluri de oscilatoare WDT Timp de expirare tipic la VCC = 5.0 V
0 0 0 0 2K (2048) cicluri 16 ms
0 0 0 1 4K (4096) cicluri 32 ms
0 0 1 0 8K (8192) cicluri 64 ms
0 0 1 1 16K (16384) cicluri 0.125 s
0 1 0 0 32K (32764) cicluri 0.25 s
0 1 0 1 64K (65536) cicluri 0.5 s
0 1 1 0 128K (131072) cicluri 1.0 s
0 1 1 1 256K (262144) cicluri 2.0 s
1 0 0 0 512K (524288) cicluri 4.0 s
1 0 0 1 1024K (1048576) cicluri 8.0 s

Tabelul 8-3. Watchdog Timer Prescale Select (Continuare)

WDP3 WDP2 WDP1 WDP0 Numărul de cicluri de oscilatoare WDT Timp de expirare tipic la VCC = 5.0 V
1 0 1 0 Rezervat(1)
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1

Notă: 1. Dacă este selectat, va fi utilizată una dintre setările valide sub 0b1010.

Întrerupe

Această secțiune descrie specificul gestionării întreruperilor, astfel cum a fost efectuat în ATtiny25 / 45/85. Pentru o explicație generală a gestionării întreruperilor AVR, consultați „Resetare și manipulare întrerupere” la pagina 12.

Întrerupeți vectorii în ATtiny25 / 45/85

Vectorii de întrerupere ai ATtiny25 / 45/85 sunt descriși în Tabelul 9-1de mai jos.

Tabelul 9-1. Resetați și întrerupeți vectorii

Vector nr. Adresa programului Sursă Definiție de întrerupere
1 0x0000 RESET Pin extern, resetare la pornire, resetare Brown-out, resetare câine de supraveghere
2 0x0001 INT0 Cerere de întrerupere externă 0
3 0x0002 PCINT0 Cerere de întrerupere a modificării pinului 0
4 0x0003 TIMER1_COMPA Temporizator / Contor1 Comparați meciul A
5 0x0004 TIMER1_OVF Timer / Counter1 Overflow
6 0x0005 TIMER0_OVF Timer / Counter0 Overflow
7 0x0006 EE_RDY Gata EEPROM
8 0x0007 ANA_COMP Comparator analogic
9 0x0008 ADC Conversie ADC finalizată
10 0x0009 TIMER1_COMPB Temporizator / Contor 1 Comparați meciul B
11 0x000A TIMER0_COMPA Temporizator / Contor0 Comparați meciul A
12 0x000B TIMER0_COMPB Temporizator / Contor 0 Comparați meciul B
13 0x000C WDT Time-out-ul câinelui de supraveghere
14 0x000D USI_START USI START
15 0x000E USI_OVF USI Overflow

Dacă programul nu activează niciodată o sursă de întrerupere, vectorii de întrerupere nu sunt utilizați și codul programului regulat poate fi plasat în aceste locații.

O configurare tipică și generală pentru adresele vectorului de întrerupere în ATtiny25 / 45/85 este prezentată în example de mai jos.

Cod asamblare Example
.org 0x0000 ; Setați adresa următoarei declaraţie
rjmp RESET ; Adresa 0x0000
rjmp INT0_ISR ; Adresa 0x0001
rjmp PCINT0_ISR ; Adresa 0x0002
rjmp TIM1_COMPA_ISR ; Adresa 0x0003
rjmp TIM1_OVF_ISR ; Adresa 0x0004
rjmp TIM0_OVF_ISR ; Adresa 0x0005
rjmp EE_RDY_ISR ; Adresa 0x0006
rjmp ANA_COMP_ISR ; Adresa 0x0007
rjmp ADC_ISR ; Adresa 0x0008
rjmp TIM1_COMPB_ISR ; Adresa 0x0009
rjmp TIM0_COMPA_ISR ; Adresa 0x000A
rjmp TIM0_COMPB_ISR ; Adresa 0x000B
rjmp WDT_ISR ; Adresa 0x000C
rjmp USI_START_ISR ; Adresa 0x000D
rjmp USI_OVF_ISR ; Adresa 0x000E
RESETARE: ; Începutul programului principal
; Adresa 0x000F

Notă: Vezi „Cod Examples ”la pagina 6.

Întreruperi externe

Întreruperile externe sunt declanșate de pinul INT0 sau de oricare dintre pinii PCINT [5: 0]. Observați că, dacă este activat, întreruperile se vor declanșa chiar dacă pinii INT0 sau PCINT [5: 0] sunt configurați ca ieșiri. Această caracteristică oferă o modalitate de a genera o întrerupere software. Schimbarea pinului întrerupe PCI se va declanșa dacă comutați orice pin PCINT [5: 0] activat. PCMSK Register controlează care pini contribuie la întreruperea schimbării pinului. Întreruperile de modificare a pinului pe PCINT [5: 0] sunt detectate asincron. Acest lucru implică faptul că aceste întreruperi pot fi utilizate pentru trezirea piesei și din moduri de repaus, altele decât modul inactiv.

Întreruperile INT0 pot fi declanșate de o margine descendentă sau ascendentă sau de un nivel scăzut. Aceasta este configurată conform indicațiilor din specificația pentru Registrul de control MCU - MCUCR. Când întreruperea INT0 este activată și este configurată ca nivel declanșat, întreruperea se va declanșa atâta timp cât pinul este menținut jos. Rețineți că recunoașterea întreruperilor marginii descendente sau ascendente pe INT0 necesită prezența unui ceas I / O, descris în „Sisteme de ceas și distribuția lor” activată pagina 23.

Întrerupere la nivel scăzut

O întrerupere de nivel scăzut pe INT0 este detectată asincron. Aceasta implică faptul că această întrerupere poate fi utilizată pentru trezirea piesei și din alte moduri de repaus, altele decât modul inactiv. Ceasul I / O este oprit în toate modurile de repaus, cu excepția modului Repaus.

Rețineți că dacă o întrerupere declanșată de nivel este utilizată pentru trezirea de la oprire, nivelul necesar trebuie menținut suficient de mult pentru ca MCU să finalizeze trezirea pentru a declanșa întreruperea nivelului. Dacă nivelul dispare înainte de sfârșitul timpului de pornire, MCU se va trezi în continuare, dar nu va fi generată nicio întrerupere. Timpul de pornire este definit de siguranțele SUT și CKSEL așa cum este descris în „System Clock and Clock Options” la pagina 23.

Dacă nivelul scăzut de pe pinul de întrerupere este eliminat înainte ca dispozitivul să se trezească, atunci execuția programului nu va fi redirecționată către rutina serviciului de întrerupere, ci va continua din instrucțiunea care urmează comenzii SLEEP.

Timpul de întrerupere a schimbării PIN

Un example de sincronizare a unei întreruperi de schimbare a pinului este afișat în Figura 9-1.

Descriere registru

MCUCR - Registrul de control MCU

Registrul de control al întreruperii externe A conține biți de control pentru controlul detectării întreruperilor.

Pic 7 6 5 4 3 2 1 0
0x35 BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Citiți/Scrieți R R/V R/V R/V R/V R R/V R/V
Valoarea inițială 0 0 0 0 0 0 0 0

Biți 1: 0 - ISC0 [1: 0]: Control întrerupere a sensului 0 Bit 1 și Bit 0

Întreruperea externă 0 este activată de pinul extern INT0 dacă sunt setate semnalizatorul SREG I și masca de întrerupere corespunzătoare. Nivelul și marginile de pe pinul INT0 extern care activează întreruperea sunt definite în Tabelul 9-2. Valoarea pe pinul INT0 este sampcondus înainte de detectarea muchiilor. Dacă este selectată întreruperea de margine sau de comutare, impulsurile care durează mai mult de o perioadă de ceas vor genera o întrerupere. Impulsurile mai scurte nu sunt garantate pentru a genera o întrerupere. Dacă este selectată întreruperea nivelului scăzut, nivelul scăzut trebuie menținut până la finalizarea instrucțiunii de executare curentă pentru a genera o întrerupere.

Tabelul 9-2. Întreruperea 0 Sense control

ISC01 ISC00 Descriere
0 0 Nivelul scăzut al INT0 generează o solicitare de întrerupere.
0 1 Orice modificare logică pe INT0 generează o cerere de întrerupere.
1 0 Marginea descendentă a INT0 generează o cerere de întrerupere.
1 1 Marginea ascendentă a INT0 generează o solicitare de întrerupere.

GIMSK - Registrul general al măștii de întrerupere

Pic 7 6 5 4 3 2 1 0
0x3B INT0 PCIE GIMSK
Citiți/Scrieți R R/V R/V R R R R R
Valoarea inițială 0 0 0 0 0 0 0 0

Bits 7, 4: 0 - Res: Bits rezervate

Acești biți sunt biți rezervați în ATtiny25 / 45/85 și se vor citi întotdeauna ca zero.

Bit 6 - INT0: Activare cerere de întrerupere externă 0

Când bitul INT0 este setat (unul) și bitul I din Registrul de stare (SREG) este setat (unul), întreruperea pinului extern este activată. Interrupt Sense Control0 biți 1/0 (ISC01 și ISC00) din Registrul de control MCU (MCUCR) definesc dacă întreruperea externă este activată la marginea ascendentă și / sau descendentă a pinului INT0 sau la nivelul detectat. Activitatea pe pin va provoca o solicitare de întrerupere chiar dacă INT0 este configurat ca ieșire. Întreruperea corespunzătoare a Cererii de întrerupere externe 0 este executată din Vectorul de întrerupere INT0.

Bit 5 - PCIE: Activare întrerupere schimbare pin

Când bitul PCIE este setat (unul) și bitul I din Registrul de stare (SREG) este setat (unul), întreruperea schimbării pinului este activată. Orice modificare a oricărui pin PCINT [5: 0] activat va provoca o întrerupere. Întreruperea corespunzătoare a cererii de întrerupere a modificării pinului este executată din Vectorul de întrerupere PCI. Pinii PCINT [5: 0] sunt activați individual de registrul PCMSK0.

GIFR - Registrul general al steagului de întrerupere

Pic 7 6 5 4 3 2 1 0
0x3A INTF0 PCIF GIFR
Citiți/Scrieți R R/V R/V R R R R R
Valoarea inițială 0 0 0 0 0 0 0 0

Bits 7, 4: 0 - Res: Bits rezervate

Acești biți sunt biți rezervați în ATtiny25 / 45/85 și se vor citi întotdeauna ca zero.

Bit 6 - INTF0: Flag de întrerupere externă 0

Când o margine sau o modificare logică a pinului INT0 declanșează o cerere de întrerupere, INTF0 devine setat (unul). Dacă bitul I din SREG și bitul INT0 în GIMSK sunt setate (unul), MCU va sări la vectorul de întrerupere corespunzător. Semnalizatorul este șters când se execută rutina de întrerupere. Alternativ, steagul poate fi eliminat scriindu-i unul logic. Acest semnalizator este întotdeauna șters când INT0 este configurat ca o întrerupere de nivel.

Bit 5 - PCIF: Pin Change Interrupt Flag

Când o modificare logică pe orice pin PCINT [5: 0] declanșează o cerere de întrerupere, PCIF devine setat (unul). Dacă bitul I din SREG și bitul PCIE din GIMSK sunt setate (unul), MCU va sări la vectorul de întrerupere corespunzător. Semnalizatorul este șters când se execută rutina de întrerupere. Alternativ, steagul poate fi șters, scriindu-i unul logic.

PCMSK - Registr de mască pentru schimbarea pinului

Pic 7 6 5 4 3 2 1 0
0x15 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 PCMSK
Citiți/Scrieți R R R/V R/V R/V R/V R/V R/V
Valoarea inițială 0 0 0 0 0 0 0 0

Bits 7: 6 - Res: Bits rezervate

Acești biți sunt biți rezervați în ATtiny25 / 45/85 și se vor citi întotdeauna ca zero.

Biți 5: 0 - PCINT [5: 0]: Pin Change Enable Mask 5: 0

Fiecare bit PCINT [5: 0] selectează dacă întreruperea schimbării pinului este activată pe pinul I / O corespunzător. Dacă PCINT [5: 0] este setat și bitul PCIE din GIMSK este setat, întreruperea schimbării pinului este activată pe pinul I / O corespunzător. Dacă PCINT [5: 0] este șters, întreruperea schimbării pinului de pe pinul I / O corespunzător este dezactivată.

Porturi I/O

Introducere

Toate porturile AVR au adevărate funcții de citire-modificare-scriere atunci când sunt utilizate ca porturi I / O digitale generale. Aceasta înseamnă că direcția unui pin de port poate fi schimbată fără a schimba neintenționat direcția oricărui alt pin cu instrucțiunile SBI și CBI. Același lucru se aplică la modificarea valorii unității (dacă este configurată ca ieșire) sau la activarea / dezactivarea rezistențelor de tracțiune (dacă este configurată ca intrare). Fiecare buffer de ieșire are caracteristici de acționare simetrice, atât cu capacitate ridicată cât și cu sursă. Driverul pinului este suficient de puternic pentru a conduce direct afișajele LED. Toți pinii portului au rezistențe de tracțiune selectabile individual, cu un volum de alimentaretage rezistenta invarianta. Toți pinii I/O au diode de protecție atât la VCC, cât și la masă, așa cum este indicat în Figura 10-1. Consultați „Caracteristici electrice” la pagina 161 pentru o listă completă de parametri.

Figura 10-1. Schema echivalentă a pinului I/O

Fig10

Toate registrele și referințele de biți din această secțiune sunt scrise în formă generală. O minusculă „x” reprezintă litera de numerotare a portului, iar o minusculă „n” reprezintă numărul de biți. Cu toate acestea, atunci când se utilizează registrul sau bitul definit într-un program, trebuie utilizată forma precisă. De example, PORTB3 pentru bitul nr. 3 în Portul B, aici documentat în general ca PORTxn. Registrele I / O fizice și locațiile de biți sunt listate în „Descriere înregistrare” activată pagina 64.

Trei locații de adrese de memorie I / O sunt alocate pentru fiecare port, fiecare pentru Registrul de date - PORTx, Registrul de direcție a datelor - DDRx și Pinii de intrare a portului - PINx. Locația I / O a pinilor de intrare a portului este doar citită, în timp ce Registrul de date și Registrul de direcție a datelor sunt citite / scrise. Cu toate acestea, scrierea unei logici unu la un bit în Registrul PINx va avea ca rezultat o comutare în bitul corespunzător din Registrul de date. În plus, funcția Pull-up Disable - PUD bit din MCUCR dezactivează funcția pull-up pentru toți pinii din toate porturile când este setată.

Utilizarea portului I / O ca I / O digitală generală este descrisă în „Porturi ca I / O digitală generală” la pagina 53. Majoritatea pinilor de port sunt multiplexați cu funcții alternative pentru funcțiile periferice de pe dispozitiv. Modul în care fiecare funcție alternativă interferează cu pinul portului este descris în „Funcții de port alternative” la pagina 57. Consultați secțiunile individuale ale modulului pentru o descriere completă a funcțiilor alternative.

Rețineți că activarea funcției alternative a unora dintre pinii portului nu afectează utilizarea celorlalți pin din port ca I / O digitale generale.

Porturi ca I / O digitală generală

Porturile sunt porturi I / O bidirecționale cu extrageri interne opționale. Figura 10-2 arată o descriere funcțională a unui pin I-O-port, numit aici Pxn generic.

Figura 10-2. I/O digitală generală(1)

Fig10

Configurarea Pinului

Fiecare pin de port este format din trei biți de registru: DDxn, PORTxn și PINxn. Așa cum se arată în „Descriere înregistrare” activată pagina 64, biții DDxn sunt accesați la adresa I / O DDRx, biții PORTxn la adresa I / O PORTx și biții PINxn la adresa I / O PINx.

Bitul DDxn din registrul DDRx selectează direcția acestui pin. Dacă DDxn este scris în logică, Pxn este configurat ca un pin de ieșire. Dacă DDxn este scris cu logică zero, Pxn este configurat ca un pin de intrare.

Dacă PORTxn este scris în logică una când pinul este configurat ca pin de intrare, rezistența de tragere este activată. Pentru a opri rezistența de tracțiune, PORTxn trebuie să fie scris logic zero sau pinul trebuie configurat ca pin de ieșire. Pinii portului sunt tri-declarați atunci când starea de resetare devine activă, chiar dacă nu funcționează ceasuri.

Dacă PORTxn este scris logic unul când pinul este configurat ca pin de ieșire, pinul portului este condus la mare (unul). Dacă PORTxn este scris cu logică zero atunci când pinul este configurat ca pin de ieșire, pinul portului este condus jos (zero).

Comutarea Pinului

Scrierea unei logici pentru PINxn comută valoarea PORTxn, independent de valoarea DDRxn. Rețineți că instrucțiunea SBI poate fi utilizată pentru a comuta un singur bit într-un port.

Comutarea între intrare și ieșire

Când comutați între trei stări ({DDxn, PORTxn} = 0b00) și ieșire ridicată ({DDxn, PORTxn} = 0b11), o stare intermediară fie cu pull-up activat {DDxn, PORTxn} = 0b01) fie o ieșire scăzută ({DDxn, PORTxn} = 0b10) trebuie să apară. În mod normal, starea activată pull-up este pe deplin acceptabilă, deoarece un mediu cu impedanță ridicată nu va observa diferența dintre un driver puternic și un pull-up. Dacă nu este cazul, bitul PUD din Registrul MCUCR poate fi setat pentru a dezactiva toate pull-up-urile din toate porturile.

Comutarea între intrare cu extragere și ieșire scăzută generează aceeași problemă. Utilizatorul trebuie să utilizeze fie tri-starea ({DDxn, PORTxn} = 0b00), fie starea înaltă de ieșire ({DDxn, PORTxn} = 0b10) ca etapă intermediară.

Tabelul 10-1 rezumă semnalele de control pentru valoarea pinului.

Tabelul 10-1. Configurații pin port

DDxn PORTxn PUD

(în MCUCR)

I/O Tragere în sus Comentariu
0 0 X Intrare Nu Tri-stat (Hi-Z)
0 1 0 Intrare Da Pxn va sursa curent dacă ext. tras jos.
0 1 1 Intrare Nu Tri-stat (Hi-Z)
1 0 X Ieșire Nu Ieșire scăzută (chiuvetă)
1 1 X Ieșire Nu Ieșire ridicată (sursă)

Citirea valorii Pin

Independent de setarea bitului de direcție a datelor DDxn, pinul portului poate fi citit prin bitul de înregistrare PINxn. Așa cum se arată în Figura 10-2, bitul de înregistrare PINxn și zăvorul precedent constituie un sincronizator. Acest lucru este necesar pentru a evita metastabilitatea dacă pinul fizic își schimbă valoarea în apropierea marginii ceasului intern, dar introduce și o întârziere. Figura 10-3 arată o diagramă de sincronizare a sincronizării la citirea unei valori de pin aplicată extern. Întârzierile maxime și minime de propagare sunt notate tpd,max și, respectiv, tpd,min.

Luați în considerare perioada de ceas care începe la scurt timp după prima margine de cădere a ceasului sistemului. Zăvorul este închis când ceasul este scăzut și devine transparent când ceasul este ridicat, așa cum este indicat de regiunea umbrită a semnalului „SYNC LATCH”. Valoarea semnalului este blocată când ceasul sistemului scade. Este încorporat în Registrul PINxn la marginea pozitivă a ceasului care urmează. După cum se indică prin cele două săgeți tpd, max și tpd, min, o singură tranziție de semnal pe pin va fi întârziată între ½ și 1½ perioadă de ceas a sistemului, în funcție de momentul afirmării.

Când citiți o valoare a pinului atribuită software-ului, trebuie introdusă o instrucțiune nop așa cum este indicat în Figura 10-4. Instrucțiunea de ieșire setează semnalul „SYNC LATCH” la marginea pozitivă a ceasului. În acest caz, întârzierea tpd prin sincronizator este o perioadă de ceas de sistem.

Următorul cod exampfișierul arată cum să setați pinii portului B 0 și 1 înalt, 2 și 3 jos și definiți pinii portului de la 4 la 5 ca intrare cu un pull-up atribuit pinului portului 4. Valorile pin rezultate sunt citite din nou, dar după cum sa discutat anterior, este inclusă o instrucțiune nop pentru a putea citi înapoi valoarea atribuită recent unora dintre pini.

Cod asamblare Example(1)

; Definiți tragerile și setați ieșirile ridicate

; Definiți direcțiile pentru pinii portului

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

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

afară PORTB,r16

afară DDRB,r17

; Introduceți nop pentru sincronizare

nup

; Citiți pinii portului

în r16, PINB

Notă: Pentru programul de asamblare, sunt utilizați doi registre temporare pentru a minimiza timpul de la tragerile sunt setate pe pinii 0, 1 și 4, până când biții de direcție sunt setați corect, definind biții 2 și 3 ca inferiori și redefinind biții 0 și 1 ca șoferi puternici.

Cod C Example
nesemnat char i;

/* Definiți tragerile și setați ieșirile la un nivel ridicat */

/* Definiți direcțiile pentru pinii portului */ PORTB = (1<

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

/* Inserați nop pentru sincronizare*/

_NOP ();

/* Citiți pinii portului */ i = PINB;

Activare intrare digitală și moduri Sleep

După cum se arată în Figura 10-2, semnalul de intrare digital poate fi clamped la masă la intrarea declanșatorului schmitt. Semnalul indicat SLEEP în figură este setat de controlerul MCU Sleep în modul Power-down pentru a evita consumul mare de energie dacă unele semnale de intrare sunt lăsate plutitoare sau au un nivel de semnal analogic apropiat de VCC/2.

SLEEP este suprascris pentru pini de port activați ca pini de întrerupere externi. Dacă solicitarea de întrerupere externă nu este activată, SLEEP este activ și pentru acești pini. SLEEP este, de asemenea, suprascris de diferite alte funcții alternative, așa cum este descris în „Funcții de port alternative” la pagina 57.

Dacă un nivel logic înalt („unul”) este prezent pe un pin de întrerupere externă asincron configurat ca „Întrerupere pe marginea ascendentă, marginea descendentă sau orice modificare logică pe pin” în timp ce întreruperea externă nu este activată, indicatorul de întrerupere externă corespunzător va fi setat la reluarea din modul Sleep menționat mai sus, deoarece clampintroducerea în aceste moduri de repaus produce modificarea logică solicitată.

Pinuri neconectate

Dacă unii pini nu sunt folosiți, se recomandă să vă asigurați că acești pini au un nivel definit. Chiar dacă majoritatea intrărilor digitale sunt dezactivate în modurile de somn profund, așa cum este descris mai sus, intrările flotante ar trebui evitate pentru a reduce consumul de curent în toate celelalte moduri în care intrările digitale sunt activate (Resetare, modul activ și modul inactiv).

Cea mai simplă metodă de a asigura un nivel definit al unui știft nefolosit este de a activa tragerea internă. În acest caz, pull-up-ul va fi dezactivat în timpul resetării. Dacă este important un consum redus de energie în timpul resetului, se recomandă utilizarea unui pull-up sau pulldown extern. Conectarea pinilor neutilizați direct la VCC sau GND nu este recomandată, deoarece acest lucru poate cauza curenți excesivi dacă pinul este configurat accidental ca ieșire.

Funcții de port alternative

Majoritatea pinilor de port au funcții alternative pe lângă faptul că sunt I / O digitale generale. Figura 10-5 arată modul în care pinul portului controlează semnalele din simplificat Figura 10-2 poate fi suprascris de funcții alternative. Este posibil ca semnalele suprasolicitate să nu fie prezente în toți pinii portului, dar figura servește ca o descriere generică aplicabilă tuturor pinilor porturilor din familia de microcontrolere AVR.

Tabelul 10-2. Descrierea generică a semnalelor de suprascriere pentru funcții alternative

Nume semnal Numele complet Descriere
PUOE Activare suprascriere pull-up Dacă acest semnal este setat, activarea de tragere este controlată de semnalul PUOV. Dacă acest semnal este șters, pull-up-ul este activat când

{DDxn, PORTxn, PUD} = 0b010.

PUOV Valoare de suprascriere pull-up Dacă PUOE este setat, extragerea este activată / dezactivată atunci când PUOV este setat / șters, indiferent de setarea biților de înregistrare DDxn, PORTxn și PUD.
DDOE Activare suprascriere direcție date Dacă acest semnal este setat, Activarea driverului de ieșire este controlată de semnalul DDOV. Dacă acest semnal este șters, driverul de ieșire este activat de bitul de înregistrare DDxn.
DDOV Valoare suprascriere direcție date Dacă DDOE este setat, Driverul de ieșire este activat / dezactivat când DDOV este setat / șters, indiferent de setarea bitului de înregistrare DDxn.
PVOE Activare suprascriere valoare port Dacă acest semnal este setat și driverul de ieșire este activat, valoarea portului este controlată de semnalul PVOV. Dacă PVOE este șters și driverul de ieșire este activat, valoarea portului este controlată de bitul de înregistrare PORTxn.
PVOV Valoarea portului Suprascrie valoarea Dacă PVOE este setat, valoarea portului este setată la PVOV, indiferent de setarea bitului de înregistrare PORTxn.
PTOE Activare Toggle Port Anulare Dacă PTOE este setat, bitul de registru PORTxn este inversat.
DIEOE Activare intrare digitală Activare suprascriere Dacă acest bit este setat, Activarea intrării digitale este controlată de semnalul DIEOV. Dacă acest semnal este șters, Activarea intrării digitale este determinată de starea MCU (modul normal, modul de repaus).
DIEOV Valoare suprascriere activare intrare digitală Dacă este setat DIEOE, intrarea digitală este activată / dezactivată când DIEOV este setat / șters, indiferent de starea MCU (modul normal, modul de repaus).
DI Intrare digitală Aceasta este intrarea digitală pentru funcții alternative. În figură, semnalul este conectat la ieșirea declanșatorului schmitt, dar înainte de sincronizator. Cu excepția cazului în care intrarea digitală este utilizată ca sursă de ceas, modulul cu funcția alternativă va utiliza propriul sincronizator.
AIO Intrare / ieșire analogică Aceasta este intrarea / ieșirea analogică către / de la funcții alternative. Semnalul este conectat direct la pad și poate fi utilizat bidirecțional.

Următoarele subsecțiuni descriu pe scurt funcțiile alternative pentru fiecare port și leagă semnalele suprasolicitate de funcția alternativă. Consultați descrierea funcției alternative pentru detalii suplimentare.

Funcții alternative ale portului B.

Pinii portului B cu funcție alternativă sunt afișați în Tabelul 10-3.

Tabelul 10-3. Portul B Pins Funcții alternative

Port Pin Funcție alternativă
PB5

RESET: Resetați pinul

dW: debugWIRE I / O ADC0: Canalul de intrare ADC 0

PCINT5: întrerupere modificare pin, sursă 5

PB4 XTAL2: ieșire oscilator cristal CLKO: ieșire ceas sistem ADC2: canal intrare ADC 2

OC1B: Temporizator / Contor1 Comparați ieșirea potrivită B PCINT4: întrerupere modificare pin 0, sursă 4

PB3 XTAL1: intrare oscilator cristal CLKI: intrare ceas extern ADC3: intrare ADC canal 3

OC1B: Temporizator complementar / Contor 1 Compara ieșire potrivire B PCINT3: întrerupere schimbare pin 0, sursă 3

PB2 SCK: Serial Clock Input ADC1: ADC Input Channel 1

T0: Timer / Counter0 Clock Source USCK: USI Clock (Three Wire Mode) SCL: USI Clock (Two Wire Mode) INT0: Intrerupere externă 0 Intrare PCINT2: Intrerupere modificare pin 0, Sursă 2

PB1 MISO: SPI Master Data Input / Slave Data Output AIN1: Analog Comparator, Negative OC0B: Timer / Counter0 Compare Match B Output OC1A: Timer / Counter1 Compare Match A Output DO: USI Data Output (Three Wire Mode) PCINT1: Pin Change Interrupt 0, Sursa 1
PB0 MOSI :: SPI Master Data Output / Slave Data Input AIN0: Comparator analogic, Intrare pozitivă

OC0A: Timer/Counter0 Compare Match A output

OC1A: Cronometru complementar / Contor 1 Comparare ieșire potrivire A: Intrare de date USI (mod cu trei fire)

SDA: USI Data Input (Two Wire Mode) AREF: Referință analogică externă PCINT0: Pin Change Interrupt 0, Source 0

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

RESET: Intrarea de resetare externă este activă scăzută și activată prin neprogramarea („1”) a siguranței RSTDISBL. Pullup-ul este activat și driverul de ieșire și intrarea digitală sunt dezactivate atunci când pinul este utilizat ca pin RESET.

dW: Când siguranța debugWIRE Enable (DWEN) este programată și biții de blocare sunt neprogramați, sistemul debugWIRE din dispozitivul țintă este activat. Pinul portului RESET este configurat ca un pin I / O bidirecțional sârmă-ȘI (golire deschisă) cu pull-up activat și devine poarta de comunicație între țintă și emulator.

ADC0: Convertor analog-digital, canal 0.

PCINT5: Pin Change Interrupt sursă 5.

Portul B, bitul 4 - XTAL2 / CLKO / ADC2 / OC1B / PCINT4

XTAL2: Chip Clock Oscillator pin 2. Folosit ca pin de ceas pentru toate sursele de ceas de chip, cu excepția oscilatorului RC calibrabil intern și a ceasului extern. Când este utilizat ca știft de ceas, știftul nu poate fi folosit ca știft I / O. Când se utilizează oscilatorul RC calibrabil intern sau ceasul extern ca surse de ceas cu cip, PB4 servește ca un pin I / O obișnuit.

CLKO: Ceasul de sistem divizat poate fi transmis pe pinul PB4. Ceasul de sistem divizat va fi afișat dacă siguranța CKOUT este programată, indiferent de setările PORTB4 și DDB4. De asemenea, va fi afișat în timpul resetării.

ADC2: Convertor analog-digital, canal 2.

OC1B: Output Compare Match output: Pinul PB4 poate servi ca ieșire externă pentru Timer / Counter1 Compare Match B atunci când este configurat ca ieșire (set DDB4). Pinul OC1B este, de asemenea, pinul de ieșire pentru funcția temporizatorului mod PWM.

PCINT4: Pin Change Interrupt sursă 4.

Portul B, bitul 3 - XTAL1 / CLKI / ADC3 / OC1B / PCINT3

XTAL1: Pinul oscilatorului cu ceas cu cip 1. Se utilizează pentru toate sursele de ceas cu cip, cu excepția oscilatorului RC calibrabil intern. Când este utilizat ca știft de ceas, știftul nu poate fi folosit ca știft I / O.

CLKI: Intrare ceas de la o sursă de ceas externă, vezi „Ceas extern” la pagina 26.

ADC3: Convertor analog-digital, canal 3.

OC1B: Ieșire inversă Comparare ieșire: Pinul PB3 poate servi ca ieșire externă pentru Temporizator / Contor 1 Comparare potrivire B atunci când este configurat ca ieșire (set DDB3). Pinul OC1B este, de asemenea, pinul de ieșire inversat pentru funcția de temporizare a modului PWM.

PCINT3: Pin Change Interrupt sursă 3.

Portul B, bitul 2 - SCK / ADC1 / T0 / USCK / SCL / INT0 / PCINT2

SCK: ieșire Master Clock, pin de intrare Slave Clock pentru canalul SPI. Când SPI este activat ca Slave, acest pin este configurat ca intrare, indiferent de setarea DDB2. Când SPI este activat ca Master, direcția de date a acestui pin este controlată de DDPB2. Când pinul este forțat de SPI să fie o intrare, pull-up-ul poate fi controlat în continuare de bitul PORTB2.

ADC1: Convertor analog-digital, canal 1.

T0: Sursa contorului Timer / Counter0.

USCK: Ceas universal cu interfață serial în trei fire.

SCL: modul cu două fire Serial Clock pentru modul USI cu două fire.

INT0: sursă de întrerupere externă 0.

PCINT2: Pin Change Interrupt sursă 2.

Portul B, bitul 1 - MISO / AIN1 / OC0B / OC1A / DO / PCINT1

MISO: Master Data input, Slave Data pin de ieșire pentru canalul SPI. Când SPI este activat ca Master, acest pin este configurat ca intrare, indiferent de setarea DDB1. Când SPI este activat ca Slave, direcția de date a acestui pin este controlată de DDB1. Când pinul este forțat de SPI să fie o intrare, pull-up-ul poate fi controlat în continuare de bitul PORTB1.

AIN1: Intrare comparativă analogică negativă. Configurați pinul portului ca intrare cu tragerea internă dezactivată pentru a evita funcția portului digital să interfereze cu funcția comparatorului analogic.

OC0B: Ieșire Comparare ieșire potrivire. Pinul PB1 poate servi ca o ieșire externă pentru Temporizator / Contor0 Comparație B. Pinul PB1 trebuie să fie configurat ca o ieșire (set DDB1 (unul)) pentru a îndeplini această funcție. Pinul OC0B este, de asemenea, pinul de ieșire pentru funcția de temporizare a modului PWM.

OC1A: Output Compare Match output: Pinul PB1 poate servi ca ieșire externă pentru Timer / Counter1 Compare Match B atunci când este configurat ca ieșire (set DDB1). Pinul OC1A este, de asemenea, pinul de ieșire pentru funcția de temporizare a modului PWM.

DO: Mod cu trei fire Interfață serială universală Ieșire de date. Modul cu trei fire Ieșirea de date anulează valoarea PORTB1 și este condusă la port când bitul de direcție a datelor DDB1 este setat (unul). PORTB1 activează în continuare tracțiunea, dacă direcția este introdusă și PORTB1 este setat (unul).

PCINT1: Pin Change Interrupt sursă 1.

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

MOSI: ieșire SPI Master Data, intrare Slave Data pentru canal SPI. Când SPI este activat ca Slave, acest pin este configurat ca intrare, indiferent de setarea DDB0. Când SPI este activat ca Master, direcția de date a acestui pin este controlată de DDB0. Când pinul este forțat de SPI să fie o intrare, pull-up-ul poate fi controlat în continuare de bitul PORTB0.

AIN0: Intrare pozitivă a comparatorului analogic. Configurați pinul portului ca intrare cu tragerea internă dezactivată pentru a evita funcția portului digital să interfereze cu funcția comparatorului analogic.

OC0A: Output Compare Match output. Pinul PB0 poate servi ca ieșire externă pentru Temporizator / Contor0 Comparați potrivirea A atunci când este configurat ca o ieșire (set DDB0 (unul)). Pinul OC0A este, de asemenea, pinul de ieșire pentru funcția de temporizare a modului PWM.

OC1A: Ieșire inversă Comparare ieșire: Pinul PB0 poate servi ca ieșire externă pentru Temporizator / Contor 1 Comparare potrivire B atunci când este configurat ca ieșire (set DDB0). Pinul OC1A este, de asemenea, pinul de ieșire inversat pentru funcția de temporizare a modului PWM.

SDA: Modul cu două fire Serial Interface Data.

AREF: Referință analogică externă pentru ADC. Pullup-ul și driverul de ieșire sunt dezactivate pe PB0 atunci când pinul este utilizat ca referință externă sau Vol interntage Referință cu condensator extern la pinul AREF.

DI: Introducere date în modul USI cu trei fire. Modul cu trei fire USI nu suprascrie funcțiile normale ale portului, deci pinul trebuie configurat ca intrare pentru funcția DI.

PCINT0: Pin Change Interrupt sursă 0.

Tabelul 10-4 şi Tabelul 10-5 conectați funcțiile alternative ale portului B la semnalele suprasolicitate prezentate în Figura 10-5 de mai sus pagina 58.

Tabelul 10-4. Semnale de anulare pentru funcții alternative în PB[5:3]

Nume semnal PB5 / RESET / ADC0 / PCINT5 PB4/ADC2/XTAL2/ OC1B/PCINT4 PB3/ADC3/XTAL1/ OC1B/PCINT3
PUOE

RSTDISBL(1) • DWEN(1)

0 0
PUOV 1 0 0
DDOE RSTDISBL(1) • DWEN(1) 0 0
DDOV debugWire Transmit 0 0
PVOE 0 Activare OC1B

Activare OC1B

PVOV 0 OC1B OC1B
PTOE 0 0 0
DIEOE

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

PCINT4 • PCIE + ADC2D PCINT3 • PCIE + ADC3D
DIEOV ADC0D ADC2D ADC3D
DI Intrare PCINT5 Intrare PCINT4 Intrare PCINT3
AIO Intrare RESET, intrare ADC0 Intrare ADC2 Intrare ADC3

Notă: când siguranța este „0” (programată).

Tabelul 10-5. Semnale de anulare pentru funcții alternative în PB[2:0]

Nume semnal 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
PUOV 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 Activare OC0B + Activare OC1A + USI_THREE_WIRE

Activare OC0A + Activare OC1A + (USI_TWO_WIRE

DDB0)

PVOV 0 OC0B + OC1A + DO

OC0A + OC1A

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

Intrare PCINT2

Intrare PCINT1 Intrare DI / SDA / PCINT0
AIO Intrare ADC1 Intrare comparativă analogică negativă Comparator analogic Intrare pozitivă

Descriere registru

MCUCR - Registrul de control MCU

Pic 7 6 5 4 3 2 1 0
0x35 BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Citiți/Scrieți R R/V R/V R/V R/V R R/V R/V
Valoarea inițială 0 0 0 0 0 0 0 0

Bit 6 - PUD: Dezactivare pull-up

Când acest bit este scris într-unul, extragerile din porturile I / O sunt dezactivate chiar dacă registrele DDxn și PORTxn sunt configurate pentru a activa extragerile ({DDxn, PORTxn} = 0b01). Vedea „Configurarea pinului” la pagina 54 pentru mai multe detalii despre această caracteristică.

PORTB - Registrul de date al portului B

Pic 7 6 5 4 3 2 1 0
0x18 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB
Citiți/Scrieți R R R/V R/V R/V R/V R/V R/V
Valoarea inițială 0 0 0 0 0 0 0 0

DDRB - Registrul de direcție a datelor portului B

Pic 7 6 5 4 3 2 1 0
0x17 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DDRB
Citiți/Scrieți R R R/V R/V R/V R/V R/V R/V
Valoarea inițială 0 0 0 0 0 0 0 0

PINB - Adresa pinilor de intrare a portului B

Pic 7 6 5 4 3 2 1 0
0x16 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB
Citiți/Scrieți R R R/V R/V R/V R/V R/V R/V
Valoarea inițială 0 0 N / A N / A N / A N / A N / A N / A

Temporizator / Contor de 8 biți cu PWM

Caracteristici

Două unități de comparare a ieșirii independente

Rezultatele de comparare a ieșirilor tamponate dublu

Ștergeți temporizatorul la compararea potrivirii (reîncărcare automată)

Modulator de lățime a impulsului (PWM) fără erori, fără erori

Perioada PWM variabilă

Generator de frecvență

Trei surse independente de întrerupere (TOV0, OCF0A și OCF0B)

Pesteview

Timer / Counter0 este un modul Timer / Counter de 8 biți de uz general, cu două unități independente de comparare a ieșirii și cu suport PWM. Permite sincronizarea exactă a programului (gestionarea evenimentelor) și generarea de unde.

O diagramă bloc simplificată a temporizatorului / contorului pe 8 biți este prezentată în Figura 11-1. Pentru amplasarea efectivă a pinilor I / O, consultați „Pinout ATtiny25 / 45/85” la pagina 2. Registrele I / O accesibile CPU, inclusiv biții I / O și pinii I / O, sunt afișate cu caractere aldine. Registrul I / O specific dispozitivului și locațiile de biți sunt listate în „Descriere registru” la pagina 77.

Timer/Counter (TCNT0) și registrele de comparare a ieșirilor (OCR0A și OCR0B) sunt registre de 8 biți. Semnalele de solicitare de întrerupere (abreviat la Int.Req. în figură) sunt toate vizibile în Timer Interrupt Flag Register (TIFR). Toate întreruperile sunt mascate individual cu Timer Interrupt Mask Register (TIMSK). TIFR și TIMSK nu sunt prezentate în figură.

Temporizatorul/contorul poate fi tactat intern, prin prescaler sau printr-o sursă externă de ceas pe pinul T0. Blocul logic Clock Select controlează ce sursă de ceas și ce front folosește Timer/Counter pentru a-și incrementa (sau decrementa) valoarea. Temporizatorul/Contorul este inactiv atunci când nu este selectată nicio sursă de ceas. Ieșirea din logica Clock Select este denumită ceas temporizator (clkT0).

Registrele de comparare a ieșirilor cu tampon dublu (OCR0A și OCR0B) sunt comparate cu valoarea Timer / Counter în orice moment. Rezultatul comparării poate fi utilizat de generatorul de forme de undă pentru a genera o ieșire PWM sau de frecvență variabilă pe pinii de comparare a ieșirii (OC0A și OC0B). Vedeți „Unitatea de comparare a ieșirii” la pagina 69. pentru detalii. Evenimentul Compare Match va seta, de asemenea, Flagul de comparare (OCF0A sau OCF0B), care poate fi utilizat pentru a genera o solicitare de întrerupere de comparație de ieșire.

Definiții

Multe referințe de registre și biți din această secțiune sunt scrise în formă generală. O minusculă „n” înlocuiește numărul Temporizatorului / Contorului, în acest caz 0. O minusculă „x” înlocuiește Unitatea de comparare a ieșirii, în acest caz Comparați unitatea A sau Comparați unitatea B. Cu toate acestea, atunci când utilizați registrul sau bitul definește într-un program, trebuie utilizată forma precisă, adică TCNT0 pentru accesarea valorii contorului Timer / Counter0 și așa mai departe.

Definițiile din Tabelul 11-1 sunt, de asemenea, utilizate pe scară largă în tot documentul.

Tabelul 11-1. Definiții

Constant Descriere
FUND Contorul ajunge la BOTTOM când devine 0x00
MAX Contorul atinge MAXIMUL când devine 0xFF (zecimal 255)
TOP Contorul ajunge la TOP când devine egal cu cea mai mare valoare din secvența de numărare. Valoarea TOP poate fi atribuită pentru a fi valoarea fixă ​​0xFF (MAX) sau valoarea stocată în registrul OCR0A. Alocarea depinde de modul de operare

Timer / Contor Prescaler și surse de ceas

Temporizatorul / Contorul poate fi tactat de o sursă de ceas internă sau externă. Sursa ceasului este selectată de logica Clock Select care este controlată de biții Clock Select (c) situați în registrul de control Timer / Counter0 (TCCR0B).

Sursă internă de ceas cu Prescaler

Timer/Counter0 poate fi sincronizat direct de ceasul sistemului (prin setarea CS0[2:0] = 1). Aceasta oferă cea mai rapidă operare, cu o frecvență maximă de cronometru/contor egală cu frecvența ceasului sistemului (fCLK_I/O). Alternativ, una dintre cele patru atingeri de la prescaler poate fi folosită ca sursă de ceas. Ceasul prescalat are o frecvență de oricare

Resetare precaler

Prescalerul funcționează gratuit, adică funcționează independent de logica Clock Select din Timer / Counter0. Deoarece prescalerul nu este afectat de selectarea ceasului temporizatorului / contorului, starea prescalerului va avea implicații pentru situațiile în care este utilizat un ceas prescalat. Un example-ul unui artefact de prescalare este atunci când cronometrul / contorul este activat și ceasuit de prescaler (6> CS0 [2: 0]> 1). Numărul de cicluri de ceas ale sistemului de la momentul în care este activat cronometrul până la primul număr poate fi de la 1 la N + 1 cicluri de ceas ale sistemului, unde N este egal cu divizorul prescalerului (8, 64, 256 sau 1024).

Este posibil să utilizați Prescaler Reset pentru sincronizarea cronometrului / contorului la executarea programului.

Sursa de ceas extern

O sursă externă de ceas aplicată pinului T0 poate fi utilizată ca temporizator/contor (clkT0). Pinul T0 este sampcondus o dată la fiecare ciclu de ceas al sistemului de către logica de sincronizare a pinilor. Sincronizat (sampled) semnalul este apoi trecut

prin detectorul de margine. Figura 11-2 prezintă o diagramă bloc echivalentă funcțional a logicii de sincronizare T0 și detectorului de margine. Registrele sunt tactate la frontul pozitiv al ceasului sistemului intern (clkI/O). Încuietoarea este transparentă în perioada înaltă a ceasului intern al sistemului.

Detectorul de margine generează un impuls clkT0 pentru fiecare front pozitiv (CS0[2:0] = 7) sau negativ (CS0[2:0] = 6) pe care îl detectează.

Registrele OCR0x sunt dublu tamponate atunci când se utilizează oricare dintre modurile PWM (Pulse Width Modulation). Pentru modurile de funcționare normale și Clear Timer on Compare (CTC), tamponul dublu este dezactivat. Bufferul dublu sincronizează actualizarea registrelor de comparare OCR0x fie în partea de sus, fie în partea de jos a secvenței de numărare. Sincronizarea previne apariția impulsurilor PWM nesimetrice de lungime impar, făcând astfel ieșirea fără probleme.

Accesul la registrul OCR0x poate părea complex, dar nu este cazul. Când bufferul dublu este activat, CPU-ul are acces la registrul tamponului OCR0x și, dacă bufferul dublu este dezactivat, CPU va accesa OCR0x direct.

Comparați forța de ieșire

În modurile de generare a formelor de undă non-PWM, ieșirea de potrivire a comparatorului poate fi forțată prin scrierea unuia pe bitul de comparare a forței de ieșire (FOC0x). Forțarea potrivirii comparației nu va seta semnalizatorul OCF0x sau nu va reîncărca / șterge temporizatorul, dar pinul OC0x va fi actualizat ca și cum ar fi apărut o comparație reală (setările de biți COM0x [1: 0] definesc dacă pinul OC0x este setat, șters sau comutat).

Comparați blocarea potrivirii prin scriere TCNT0

Toate operațiile de scriere CPU în Registrul TCNT0 vor bloca orice potrivire de comparație care apare în următorul ciclu de ceas al cronometrului, chiar și când cronometrul este oprit. Această caracteristică permite inițializarea OCR0x la aceeași valoare ca TCNT0 fără a declanșa o întrerupere când ceasul Timer / Counter este activat.

Utilizarea unității de comparare a ieșirii

Deoarece scrierea TCNT0 în orice mod de funcționare va bloca toate meciurile de comparare pentru un ciclu de ceas cu temporizator, există riscuri implicate la schimbarea TCNT0 atunci când utilizați unitatea de comparare a ieșirii, indiferent dacă temporizatorul / contorul rulează sau nu. În cazul în care valoarea scrisă în TCNT0 este egală cu valoarea OCR0x, Match Match va fi omis, rezultând o generare incorectă a formei de undă. În mod similar, nu scrieți valoarea TCNT0 egală cu BOTTOM atunci când contorul este în număr redus.

Configurarea OC0x trebuie efectuată înainte de a seta Registrul de direcție a datelor pentru ieșirea pinului portului. Cel mai simplu mod de a seta valoarea OC0x este de a utiliza biții stroboscopici de comparare a forței de ieșire (FOC0x) în modul Normal. Registrele OC0x își păstrează valorile chiar și atunci când se schimbă între modurile de formare a undelor.

Rețineți că biții COM0x [1: 0] nu sunt tamponati dublu împreună cu valoarea de comparare. Schimbarea biților COM0x [1: 0] va intra în vigoare imediat.

Comparați unitatea de ieșire Match

Biții de comparare a modului de ieșire (COM0x [1: 0]) au două funcții. Generatorul de forme de undă utilizează biții COM0x [1: 0] pentru definirea stării de comparare a ieșirii (OC0x) la următoarea potrivire de comparație. De asemenea, biții COM0x [1: 0] controlează sursa de ieșire a pinului OC0x. Figura 11-6 arată o schemă simplificată a logicii afectate de setarea de biți COM0x [1: 0]. Registrele I / O, biții I / O și pinii I / O din figură sunt afișate cu caractere aldine. Sunt afișate doar părțile din registrele generale de control al porturilor I / O (DDR și PORT) care sunt afectate de biții COM0x [1: 0]. Când faceți referire la starea OC0x, referința este pentru registrul intern OC0x, nu pinul OC0x. Dacă are loc o resetare a sistemului, registrul OC0x este resetat la „0”.

Când OC0A / OC0B este conectat la pinul I / O, funcția biților COM0A [1: 0] / COM0B [1: 0] depinde de setarea bitului WGM0 [2: 0]. Tabelul 11-2 arată funcționalitatea COM0x [1: 0] bit atunci când biții WGM0 [2: 0] sunt setați la un mod normal sau CTC (non-PWM).

Tabelul 11-2. Comparați modul de ieșire, modul non-PWM

COM0A1 COM0B1 COM0A0 COM0B0 Descriere
0 0 Funcționare normală a portului, OC0A / OC0B deconectat.
0 1 Comutați OC0A / OC0B pe Match Match
1 0 Ștergeți OC0A / OC0B pe Match Match
1 1 Setați OC0A / OC0B pe Match Match

Tabelul 11-3 arată funcționalitatea de biți COM0x [1: 0] când biții WGM0 [2: 0] sunt setați în modul PWM rapid.

Tabelul 11-3. Comparați modul de ieșire, modul rapid PWM(1)

COM0A1 COM0B1 COM0A0 COM0B0 Descriere
0 0 Funcționare normală a portului, OC0A / OC0B deconectat.
0 1 Rezervat
1 0 Ștergeți OC0A / OC0B pe Match Match, setați OC0A / OC0B la BOTTOM (modul fără inversare)
1 1 Setați OC0A / OC0B pe Match Match, ștergeți OC0A / OC0B la BOTTOM (modul de inversare)

Notă: Un caz special apare când OCR0A sau OCR0B este egal cu TOP și COM0A1/COM0B1 este setat. În acest caz, potrivirea de comparare este ignorată, dar setarea sau ștergerea se face la BOTTOM. Vedea „Mod PWM rapid” la pagina 73 pentru mai multe detalii.

Tabelul 11-4 arată funcționalitatea de biți COM0x [1: 0] când biții WGM0 [2: 0] sunt setați la modul PWM corect de fază.

Tabelul 11-4. Comparați modul de ieșire, modul PWM corectat de fază(1)

COM0A1 COM0B1 COM0A0 COM0B0 Descriere
0 0 Funcționare normală a portului, OC0A / OC0B deconectat.
0 1 Rezervat
1 0 Ștergeți OC0A / OC0B pe Comparare comparare la contorizare. Setați OC0A / OC0B pe Comparare potrivire atunci când numărați în jos.
1 1 Setați OC0A / OC0B pe Comparare comparare la contorizare. Ștergeți OC0A / OC0B pe Comparare potrivire atunci când numărătoarea inversă.

Notă: 1. Un caz special apare când OCR0A sau OCR0B este egal cu TOP și COM0A1/COM0B1 este setat. În acest caz, potrivirea de comparare este ignorată, dar setarea sau ștergerea se face la TOP. Vedea „Mod PWM Correct PWM” la pagina 74 pentru mai multe detalii.

Bits 3: 2 - Res: Bits rezervate

Acești biți sunt biți rezervați în ATtiny25 / 45/85 și se vor citi întotdeauna ca zero.

Biți 1: 0 - WGM0 [1: 0]: Mod de generare a formelor de undă

Combinat cu bitul WGM02 găsit în registrul TCCR0B, acești biți controlează secvența de numărare a contorului, sursa pentru valoarea maximă a contorului (TOP) și ce tip de generație a formei de undă care trebuie utilizată, consultați Tabelul 11-5. Modurile de funcționare acceptate de unitatea Timer / Counter sunt: ​​modul Normal (contor), Clear Timer on Compare Match (CTC) și două tipuri de moduri PWM (Pulse Width Modulation) „Moduri de funcționare” pe pagina 71).

Tabelul 11-5. Modul de generare a formei de undă Descriere biți

Modul WGM 02 WGM 01 WGM 00 Timer / Contor Mod de funcționare TOP Actualizare OCRx la Setare TOV Flag activată
0 0 0 0 Normal 0xFF Imediat MAX(1)
1 0 0 1 PWM, fază corectă 0xFF TOP FUND(2)
2 0 1 0 CTC OCRA Imediat MAX(1)
3 0 1 1 PWM rapid 0xFF FUND(2) MAX(1)
4 1 0 0 Rezervat
5 1 0 1 PWM, fază corectă OCRA TOP FUND(2)
6 1 1 0 Rezervat
7 1 1 1 PWM rapid OCRA FUND(2) TOP

Bit 7 - FOC0A: Comparație de ieșire forțată A

Bitul FOC0A este activ numai atunci când biții WGM specifică un mod non-PWM.

Cu toate acestea, pentru a asigura compatibilitatea cu dispozitivele viitoare, acest bit trebuie setat la zero atunci când TCCR0B este scris atunci când funcționează în modul PWM. Când scrieți unul logic pe bitul FOC0A, unitatea de comparare imediată este forțată pe unitatea de formare a undelor. Ieșirea OC0A este modificată în funcție de setarea sa de biți COM0A [1: 0]. Rețineți că bitul FOC0A este implementat ca stroboscop. Prin urmare, valoarea prezentă în biții COM0A [1: 0] determină efectul comparării forțate.

Un stroboscop FOC0A nu va genera nicio întrerupere și nici nu va șterge cronometrul în modul CTC folosind OCR0A ca TOP. Bitul FOC0A este citit întotdeauna ca zero.

Bit 6 - FOC0B: Comparați forța de ieșire B

Bitul FOC0B este activ numai atunci când biții WGM specifică un mod non-PWM.

Cu toate acestea, pentru a asigura compatibilitatea cu dispozitivele viitoare, acest bit trebuie setat la zero atunci când TCCR0B este scris atunci când funcționează în modul PWM. Când scrieți una logică pe bitul FOC0B, unitatea de comparare imediată este forțată pe unitatea de formare a undelor. Ieșirea OC0B este modificată în funcție de setarea sa de biți COM0B [1: 0]. Rețineți că bitul FOC0B este implementat ca stroboscop. Prin urmare, valoarea prezentă în biții COM0B [1: 0] determină efectul comparării forțate.

Un stroboscop FOC0B nu va genera nicio întrerupere și nici nu va șterge cronometrul în modul CTC folosind OCR0B ca TOP.

Bitul FOC0B este citit întotdeauna ca zero.

Bits 5: 4 - Res: Bits rezervate

Acești biți sunt biți rezervați în ATtiny25 / 45/85 și se vor citi întotdeauna ca zero.

Bit 3 - WGM02: Mod de generare a formelor de undă

Vezi descrierea în „TCCR0A - Registrul de control al temporizatorului / contorului A” la pagina 77.

Biți 2: 0 - CS0 [2: 0]: Selectare ceas

Cei trei biți de selectare a ceasului selectează sursa de ceas care va fi utilizată de temporizator / contor.

Tabelul 11-6. Clock Select Bit Descriere

CS02 CS01 CS00 Descriere
0 0 0 Fără sursă de ceas (Timer / Contor oprit)
0 0 1 clkI/O/(Fără prescalare)
0 1 0 clkI/O/8 (De la prescaler)
0 1 1 clkI/O/64 (De la prescaler)
1 0 0 clkI/O/256 (De la prescaler)
1 0 1 clkI/O/1024 (De la prescaler)
1 1 0 Sursă de ceas externă pe pinul T0. Ceas pe marginea de cădere.
1 1 1 Sursă de ceas externă pe pinul T0. Ceas pe margine ascendentă.

Dacă pentru Timer / Counter0 se utilizează moduri pin externe, tranzițiile pinului T0 vor contoriza contorul chiar dacă pinul este configurat ca ieșire. Această caracteristică permite controlul software al numărării.

Contorizați și comparați unitățile

Operația generală Timer / Counter1 este descrisă în modul asincron și operațiunea în modul sincron este menționată numai dacă există diferențe între aceste două moduri. Figura 12-2 afișează diagrama bloc a registrului de sincronizare Timer / Counter 1 și întârzierile de sincronizare între registre. Rețineți că toate detaliile de accesare a ceasului nu sunt prezentate în figură. Valorile registrului Timer / Counter1 trec prin registrele de sincronizare interne, care determină întârzierea sincronizării intrării, înainte de a afecta funcționarea contorului. Registrele TCCR1, GTCCR, OCR1A, OCR1B și OCR1C pot fi citite din nou imediat după scrierea registrului. Valorile read read sunt întârziate pentru registrul și semnalizatoarele Timer / Counter1 (TCNT1) (OCF1A, OCF1B și TOV1), din cauza sincronizării de intrare și ieșire.

Timer / Counter1 are o rezoluție ridicată și o utilizare de înaltă precizie, cu oportunități mai mici de prescalare. Poate suporta, de asemenea, două modulatoare cu lățime de impulsuri de 8 biți, precise, de mare viteză, folosind viteze de ceas de până la 64 MHz (sau 32 MHz în modul Low Speed). În acest mod, Timer / Counter1 și registrele de comparare a ieșirilor servesc ca PWM-uri duble independente cu ieșiri neinversate și inversate. A se referi la pagina 86 pentru o descriere detaliată a acestei funcții. În mod similar, oportunitățile ridicate de precalificare fac ca această unitate să fie utilă pentru funcții de viteză mai mică sau funcții de sincronizare exacte cu acțiuni rare.

Figura 12-2. Diagrama bloc registru de sincronizare cronometru/contor 1.

Timer / Counter1 și prescalerul permit rularea procesorului de la orice sursă de ceas în timp ce prescalerul funcționează pe ceasul PCK rapid de 64 MHz (sau 32 MHz în modul de viteză redusă) în modul asincron.

Rețineți că frecvența ceasului sistemului trebuie să fie mai mică decât o treime din frecvența PCK. Mecanismul de sincronizare al temporizatorului / contorului asincron are nevoie de cel puțin două margini ale PCK atunci când ceasul sistemului este ridicat. Dacă frecvența ceasului sistemului este prea mare, există riscul ca datele sau valorile de control să fie pierdute.

Următoarele Figura 12-3 arată schema bloc pentru Timer / Counter1.

Tabelul 12-1. Selectați modul de comparare în modul PWM

COM1x1 COM1x0 Efect asupra pinilor de comparare a ieșirii
0 0 OC1x nu este conectat. OC1x nu este conectat.
0 1 OC1x a fost eliminat la meciul de comparare. Setați cândTCNT1 = 00 $. OC1x setat pe meciul de comparare. Șters când TCNT1 = 00 $.
1 0 OC1x a fost eliminat la meciul de comparare. Setați când TCNT1 = 00 $. OC1x nu este conectat.
1 1 OC1x Setează pe meciul de comparare. Șters când TCNT1 = $ 00. OC1x nu este conectat.

Caracteristici ADC

Tabelul 21-8. Caracteristici ADC, canale cu un singur capăt. TA = -40°C până la +85°C

Simbol Parametru Stare Min Tip Max Unități
Rezoluţie 10 Biți
Precizie absolută (inclusiv erori INL, DNL și cuantificare, câștig și offset) VREF = 4V, VCC = 4V,

Ceas ADC = 200 kHz

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

Ceas ADC = 1 MHz

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

Ceas ADC = 200 kHz

Mod de reducere a zgomotului

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

Ceas ADC = 1 MHz

Mod de reducere a zgomotului

2.5 LSB
Non-liniaritate integrală (INL) (Precizie după compensare și calibrare a câștigului) VREF = 4V, VCC = 4V,

Ceas ADC = 200 kHz

1 LSB
Non-liniaritate diferențială (DNL) VREF = 4V, VCC = 4V,

Ceas ADC = 200 kHz

0.5 LSB
Eroare de câștig VREF = 4V, VCC = 4V,

Ceas ADC = 200 kHz

2.5 LSB
Eroare de compensare VREF = 4V, VCC = 4V,

Ceas ADC = 200 kHz

1.5 LSB
Timpul de conversie Conversie de rulare gratuită 14 280 µs
Frecvența ceasului 50 1000 kHz
VIN Vol. De intraretage GND VREF V
Lățime de bandă de intrare 38.4 kHz
AREF Referință externă Voltage 2.0 VCC V
VINT Vol. Interntage Referință 1.0 1.1 1.2 V
Referință internă de 2.56V (1) VCC > 3.0 V 2.3 2.56 2.8 V
RREF 32
PLOAIE Rezistență la intrare analogică 100
Ieșire ADC 0 1023 LSB

Notă: 1. Valorile sunt doar orientative.

Tabelul 21-9. Caracteristici ADC, canale diferențiale (mod unipolar). TA = -40°C până la +85°C

Simbol Parametru Stare Min Tip Max Unități
Rezoluţie Câștig = 1x 10 Biți
Câștig = 20x 10 Biți
Acuratețe absolută (inclusiv INL, DNL și

Erori de cuantificare, câștig și compensare)

Câștig = 1x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

10.0 LSB
Câștig = 20x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

20.0 LSB
Neliniaritate integrală (INL) (Precizie după compensare și calibrare a câștigului) Câștig = 1x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

4.0 LSB
Câștig = 20x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

10.0 LSB
Eroare de câștig Câștig = 1x 10.0 LSB
Câștig = 20x 15.0 LSB
Eroare de compensare Câștig = 1x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

3.0 LSB
Câștig = 20x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

4.0 LSB
Timpul de conversie Conversie de rulare gratuită 70 280 µs
Frecvența ceasului 50 200 kHz
VIN Vol. De intraretage GND VCC V
VDIFF Vol. Diferențial de intraretage VREF/Câștig V
Lățime de bandă de intrare 4 kHz
AREF Referință externă Voltage 2.0 VCC – 1.0 V
VINT Vol. Interntage Referință 1.0 1.1 1.2 V
Referință internă de 2.56V (1) VCC > 3.0 V 2.3 2.56 2.8 V
RREF Rezistență la intrare de referință 32
PLOAIE Rezistență la intrare analogică 100
Ieșire de conversie ADC 0 1023 LSB

Notă: Valorile sunt doar orientative.

Tabelul 21-10. Caracteristici ADC, canale diferențiale (mod bipolar). TA = -40°C până la +85°C

Simbol Parametru Stare Min Tip Max Unități
Rezoluţie Câștig = 1x 10 Biți
Câștig = 20x 10 Biți
Acuratețe absolută (inclusiv INL, DNL și

Erori de cuantificare, câștig și compensare)

Câștig = 1x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

8.0 LSB
Câștig = 20x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

8.0 LSB
Neliniaritate integrală (INL) (Precizie după compensare și calibrare a câștigului) Câștig = 1x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

4.0 LSB
Câștig = 20x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

5.0 LSB
Eroare de câștig Câștig = 1x 4.0 LSB
Câștig = 20x 5.0 LSB
Eroare de compensare Câștig = 1x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

3.0 LSB
Câștig = 20x

VREF = 4V, VCC = 5V

Ceas ADC = 50 - 200 kHz

4.0 LSB
Timpul de conversie Conversie de rulare gratuită 70 280 µs
Frecvența ceasului 50 200 kHz
VIN Vol. De intraretage GND VCC V
VDIFF Vol. Diferențial de intraretage VREF/Câștig V
Lățime de bandă de intrare 4 kHz
AREF Referință externă Voltage 2.0 VCC – 1.0 V
VINT Vol. Interntage Referință 1.0 1.1 1.2 V
Referință internă de 2.56V (1) VCC > 3.0 V 2.3 2.56 2.8 V
RREF Rezistență la intrare de referință 32
PLOAIE Rezistență la intrare analogică 100
Ieșire de conversie ADC -512 511 LSB

Rezumatul setului de instrucțiuni

Mnemonice Operanzi Descriere Operațiunea Steaguri #Ceasuri
INSTRUCȚIUNI ARITMETICE ȘI LOGICE
ADĂUGA Rd, Rr Adăugați două registre Rd ← Rd + Rr Z, C, N, V, H 1
ADC Rd, Rr Adăugați cu Carry two Registers Rd ← Rd + Rr + C Z, C, N, V, H 1
ADIW Rdl, K Adăugați Imediat la Word Rdh:Rdl ← Rdh:Rdl + K Z, C, N, V, S 2
SUB Rd, Rr Scădeți două registre Rd ← Rd – Rr Z, C, N, V, H 1
AM URCAT Rd, K Scădeți constantă din registru Rd ← Rd – K Z, C, N, V, H 1
SBC Rd, Rr Scădeți cu Carry two Registers Rd ← Rd – Rr – C Z, C, N, V, H 1
SBCI Rd, K Scădeți cu Carry Constant din Reg. Rd ← Rd – K – C Z, C, N, V, H 1
SBIW Rdl, K Scădeți imediat din Word Rdh:Rdl ← Rdh:Rdl – K Z, C, N, V, S 2
ŞI Rd, Rr Logice ȘI registre Rd ← Rd ∙ Rr Z, N, V 1
ANDI Rd, K Logică ȘI înregistrare și constantă Rd ← Rd ∙ K Z, N, V 1
OR Rd, Rr Înregistrări SAU logice Rd ← Rd v Rr Z, N, V 1
ORI Rd, K Înregistrare SAU logică și constantă Rd ← Rd v K Z, N, V 1
EOR Rd, Rr Registrele SAU exclusive Rd ← Rd ⊕ Rr Z, N, V 1
COM Rd Complementul unuia Rd ← 0xFF − Rd Z, C, N, V 1
NEG Rd Complementul a doi Rd ← 0x00 − Rd Z, C, N, V, H 1
SBR Rd, K Setați biți în registru Rd ← Rd v K Z, N, V 1
CBR Rd, K Ștergeți biți în registru Rd ← Rd ∙ (0xFF – K) Z, N, V 1
INC Rd Creştere Rd ← Rd + 1 Z, N, V 1
DEC Rd Decrementați Rd ← Rd − 1 Z, N, V 1
TST Rd Test pentru zero sau minus Rd ← Rd ∙ Rd Z, N, V 1
CLR Rd Ștergeți înregistrarea Rd ← Rd ⊕ Rd Z, N, V 1
SER Rd Setează Registrul Rd ← 0xFF Nici unul 1
INSTRUCȚIUNI DE SUCURSALĂ
RJMP k Salt relativ PC ← PC + k + 1 Nici unul 2
IJMP Salt indirect la (Z) PC ← Z Nici unul 2
RCALL k Apel relativ subrutină PC ← PC + k + 1 Nici unul 3
EU CHEM Apel indirect către (Z) PC ← Z Nici unul 3
RET Returnarea subrutinei PC ← STACK Nici unul 4
REȚELE Întrerupeți întoarcerea PC ← STACK I 4
CPSE Rd, Rr Comparați, săriți dacă este egal dacă (Rd = Rr) PC ← PC + 2 sau 3 Nici unul 1/2/3
CP Rd, Rr Comparaţie Rd − Rr Z, N, V, C, H 1
CPC Rd, Rr Comparați cu Carry Rd − Rr − C Z, N, V, C, H 1
IPC Rd, K Comparați Înregistrați-vă cu Imediat Rd - K Z, N, V, C, H 1
SBRC Rr, b Omiteți dacă Bit în înregistrare a fost șters dacă (Rr(b)=0) PC ← PC + 2 sau 3 Nici unul 1/2/3
SBRS Rr, b Omiteți dacă Bit in Register este setat dacă (Rr(b)=1) PC ← PC + 2 sau 3 Nici unul 1/2/3
SBIC P, b Omiteți dacă Bitul în I / O Register este șters dacă (P(b)=0) PC ← PC + 2 sau 3 Nici unul 1/2/3
SBIS P, b Omiteți dacă Bitul în registrul I / O este setat dacă (P(b)=1) PC ← PC + 2 sau 3 Nici unul 1/2/3
BRBS s, k Ramificați dacă steagul de stare este setat dacă (SREG(s) = 1) atunci PC←PC+k + 1 Nici unul 1/2
BRBC s, k Ramificați dacă steagul de stare este șters dacă (SREG(s) = 0) atunci PC←PC+k + 1 Nici unul 1/2
BREQ k Ramura dacă Egal dacă (Z = 1) atunci PC ← PC + k + 1 Nici unul 1/2
BRNE k Ramura dacă nu este egală dacă (Z = 0) atunci PC ← PC + k + 1 Nici unul 1/2
BRCS k Ramificați dacă Carry Set dacă (C = 1) atunci PC ← PC + k + 1 Nici unul 1/2
BRCC k Ramificați dacă Carry este eliminat dacă (C = 0) atunci PC ← PC + k + 1 Nici unul 1/2
BRSH k Ramificați dacă este același sau mai mare dacă (C = 0) atunci PC ← PC + k + 1 Nici unul 1/2
BRLO k Ramificați dacă este mai jos dacă (C = 1) atunci PC ← PC + k + 1 Nici unul 1/2
BRMI k Ramificați dacă Minus dacă (N = 1) atunci PC ← PC + k + 1 Nici unul 1/2
BRPL k Ramificați dacă Plus dacă (N = 0) atunci PC ← PC + k + 1 Nici unul 1/2
BRGE k Sucursală dacă este mai mare sau egală, semnată dacă (N ⊕ V= 0) atunci PC ← PC + k + 1 Nici unul 1/2
BRLT k Sucursală dacă mai puțin de zero, semnată dacă (N ⊕ V= 1) atunci PC ← PC + k + 1 Nici unul 1/2
BRHS k Ramificați dacă setul de steag Half Carry dacă (H = 1) atunci PC ← PC + k + 1 Nici unul 1/2
BRHC k Ramificați dacă pavilionul Half Carry este șters dacă (H = 0) atunci PC ← PC + k + 1 Nici unul 1/2
BRTS k Ramificați dacă T Flag Set dacă (T = 1) atunci PC ← PC + k + 1 Nici unul 1/2
BRTC k Ramificați dacă steagul T este șters dacă (T = 0) atunci PC ← PC + k + 1 Nici unul 1/2
BRVS k Ramificați dacă este setat semnalizatorul Overflow dacă (V = 1) atunci PC ← PC + k + 1 Nici unul 1/2
BRVC k Ramificați dacă pavilionul Overflow este șters dacă (V = 0) atunci PC ← PC + k + 1 Nici unul 1/2
BRIE k Ramificați dacă este activată întreruperea dacă ( I = 1) atunci PC ← PC + k + 1 Nici unul 1/2
MIREASA k Ramificați dacă întreruperea este dezactivată dacă ( I = 0) atunci PC ← PC + k + 1 Nici unul 1/2
INSTRUCȚIUNI BIT ȘI TEST BIT
SBI P, b Setați Bitul în registrul I / O I/O(P,b) ← 1 Nici unul 2
CBI P, b Ștergeți bitul în registrul I / O I/O(P,b) ← 0 Nici unul 2
LSL Rd Schimbarea logică la stânga Rd(n+1) ← Rd(n), Rd(0) ← 0 Z, C, N, V 1
LSR Rd Schimbarea logică la dreapta Rd(n) ← Rd(n+1), Rd(7) ← 0 Z, C, N, V 1
ROL Rd Rotiți la stânga prin Carry Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) Z, C, N, V 1
ROR Rd Rotiți la dreapta prin transport Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) Z, C, N, V 1
ASR Rd Aritmetic Shift Right Rd(n) ← Rd(n+1), n=0..6 Z, C, N, V 1
Mnemonice Operanzi Descriere Operațiunea Steaguri #Ceasuri
SWAP Rd Schimbați nibbles Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) Nici unul 1
BSET s Set de steaguri SREG(e) ← 1 SREG (uri) 1
BCLR s Semnalizare curată SREG(e) ← 0 SREG (uri) 1
BST Rr, b Bit Store de la Înregistrare la T T ← Rr(b) T 1
BLD Rd, b Încărcare de biți de la T la înregistrare Rd(b) ← T Nici unul 1
SEC Set Carry C ← 1 C 1
CLC Clear Carry C ← 0 C 1
SEN Setați steagul negativ N ← 1 N 1
CLN Ștergeți steagul negativ N ← 0 N 1
SEZ Setează Zero Flag Z ← 1 Z 1
CLZ Ștergeți steagul zero Z ← 0 Z 1
SEI Activare întrerupere globală I ← 1 I 1
CLI Dezactivare globală de întrerupere I ← 0 I 1
SES Setați semnul de test semnat S ← 1 S 1
CLS Ștergeți semnul de test semnat S ← 0 S 1
SEV Setați Twos Complement Overflow. V ← 1 V 1
CLV Ștergeți completarea complementului Twos V ← 0 V 1
SET Setați T în SREG T ← 1 T 1
CLT Ștergeți T în SREG T ← 0 T 1
VEDEA Setează Half Carry Flag în SREG H ← 1 H 1
CLH Ștergeți steagul Half Carry în SREG H ← 0 H 1
INSTRUCȚIUNI DE TRANSFER DE DATE
MOV Rd, Rr Mutați între registre Rd ← Rr Nici unul 1
MOVW Rd, Rr Copiați Registrul Word Rd+1:Rd ← Rr+1:Rr Nici unul 1
LDI Rd, K Încărcare imediată Rd ← K Nici unul 1
LD Rd, X Încărcați indirect Rd ← (X) Nici unul 2
LD Rd, X + Încărcați indirect și Post-Inc. Rd ← (X), X ← X + 1 Nici unul 2
LD Rd, - X Încărcați indirect și pre-dec. X ← X – 1, Rd ← (X) Nici unul 2
LD Rd, Y Încărcați indirect Rd ← (Y) Nici unul 2
LD Rd, Y + Încărcați indirect și Post-Inc. Rd ← (Y), Y ← Y + 1 Nici unul 2
LD Rd, - Y Încărcați indirect și pre-dec. Y ← Y – 1, Rd ← (Y) Nici unul 2
LDD Rd, Y + q Încărcați indirect cu deplasare Rd ← (Y + q) Nici unul 2
LD Rd, Z Încărcați indirect Rd ← (Z) Nici unul 2
LD Rd, Z + Încărcați indirect și Post-Inc. Rd ← (Z), Z ← Z+1 Nici unul 2
LD Rd, -Z Încărcați indirect și pre-dec. Z ← Z – 1, Rd ← (Z) Nici unul 2
LDD Rd, Z + q Încărcați indirect cu deplasare Rd ← (Z + q) Nici unul 2
LDS Rd, k Încărcați direct din SRAM Rd ← (k) Nici unul 2
ST X, Rr Magazin indirect (X) ← Rr Nici unul 2
ST X +, Rr Magazin indirect și Post-Inc. (X) ← Rr, X ← X + 1 Nici unul 2
ST - X, Rr Magazin indirect și pre-dec. X ← X – 1, (X) ← Rr Nici unul 2
ST Y, Rr Magazin indirect (Y) ← Rr Nici unul 2
ST Y +, Rr Magazin indirect și Post-Inc. (Y) ← Rr, Y ← Y + 1 Nici unul 2
ST - Da, Rr Magazin indirect și pre-dec. Y ← Y – 1, (Y) ← Rr Nici unul 2
STD Y + q, Rr Depozitați indirect cu deplasare (Y + q) ← Rr Nici unul 2
ST Z, Rr Magazin indirect (Z) ← Rr Nici unul 2
ST Z +, Rr Magazin indirect și Post-Inc. (Z) ← Rr, Z ← Z + 1 Nici unul 2
ST -Z, Rr Magazin indirect și pre-dec. Z ← Z – 1, (Z) ← Rr Nici unul 2
STD Z + q, Rr Depozitați indirect cu deplasare (Z + q) ← Rr Nici unul 2
STS k, Rr Magazin direct către SRAM (k) ← Rr Nici unul 2
LPM Încărcați memoria programului R0 ← (Z) Nici unul 3
LPM Rd, Z Încărcați memoria programului Rd ← (Z) Nici unul 3
LPM Rd, Z + Încărcați memoria programului și Post-Inc Rd ← (Z), Z ← Z+1 Nici unul 3
SPM Stocați memoria programului (z) ← R1:R0 Nici unul
IN Rd, P În Port Rd ← P Nici unul 1
OUT P, Rr Portul de ieșire P ← Rr Nici unul 1
APĂSAŢI Rr Apăsați Register on Stack STACK ← Rr Nici unul 2
POP Rd Pop Register din Stack Rd ← STACK Nici unul 2
INSTRUCȚIUNI DE CONTROL MCU
NOP Fără operație Nici unul 1
DORMI Dormi (vezi descrierea specifică pentru funcția Sleep) Nici unul 1
WDR Resetare câine de supraveghere (vezi descrierea specifică pentru WDR / Timer) Nici unul 1
PAUZĂ Pauză
Viteza (MHz) (1) Volumul aprovizionăriitage (V) Interval de temperatură Pachet (2) Cod de comandă (3)
10 1.8 – 5.5 Industrial

(-40 ° C până la + 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 Industrial

(-40 ° C până la + 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

Note: 1. Pentru viteza vs. volumul de alimentaretage, vezi secțiunea 21.3 „Viteză” la pagina 163.

Toate pachetele sunt fără Pb, fără halogenuri și complet verzi și sunt conforme cu directiva europeană pentru restricționarea substanțelor periculoase (RoHS).

Indicatori de cod

H: finisaj de plumb NiPdAu

U: tablă mată

R: bandă și bobină

Aceste dispozitive pot fi, de asemenea, furnizate sub formă de napolitane. Vă rugăm să contactați biroul local de vânzări Atmel pentru informații detaliate despre comandă și cantități minime.

Erată

Errata ATtiny25

Scrisoarea de revizuire din această secțiune se referă la revizuirea dispozitivului ATtiny25.

Rev. D - F

Nu există erori cunoscute.

Rev. B - C

Citirea EEPROM poate eșua la volumul redus de aprovizionaretage / frecvență de ceas scăzută

Citirea EEPROM poate eșua la volumul redus de aprovizionaretage / frecvență de ceas scăzută

Încercarea de a citi EEPROM la frecvențe de ceas reduse și / sau volumul redus de alimentaretage poate duce la date nevalide.

Remediere problemă / soluție

Nu utilizați EEPROM când frecvența ceasului este sub 1 MHz și furnizați voltage este sub 2V. Dacă frecvența de funcționare nu poate fi crescută peste 1 MHz, atunci furnizați voltage ar trebui să fie mai mare de 2V. În mod similar, dacă volumul aprovizionăriitage nu poate fi ridicat peste 2V, atunci frecvența de funcționare trebuie să fie mai mare de 1 MHz.

Se știe că această caracteristică este dependentă de temperatură, dar nu a fost caracterizată. Se oferă recomandări numai pentru temperatura camerei.

Rev. A

Nu sampLED.

Errata ATtiny45

Scrisoarea de revizuire din această secțiune se referă la revizuirea dispozitivului ATtiny45.

Rev F - G

Nu există erori cunoscute

Rev. D - E

Citirea EEPROM poate eșua la volumul redus de aprovizionaretage / frecvență de ceas scăzută

Citirea EEPROM poate eșua la volumul redus de aprovizionaretage / frecvență de ceas scăzută

Încercarea de a citi EEPROM la frecvențe de ceas reduse și / sau volumul redus de alimentaretage poate duce la date nevalide.

Remediere problemă / soluție

Nu utilizați EEPROM când frecvența ceasului este sub 1 MHz și furnizați voltage este sub 2V. Dacă frecvența de funcționare nu poate fi crescută peste 1 MHz, atunci furnizați voltage ar trebui să fie mai mare de 2V. În mod similar, dacă volumul aprovizionăriitage nu poate fi ridicat peste 2V, atunci frecvența de funcționare trebuie să fie mai mare de 1 MHz.

Se știe că această caracteristică este dependentă de temperatură, dar nu a fost caracterizată. Se oferă recomandări numai pentru temperatura camerei.

Rev. B - C

PLL nu se blochează

Citirea EEPROM din codul aplicației nu funcționează în modul 3 Bit de blocare

Citirea EEPROM poate eșua la volumul redus de aprovizionaretage / frecvență de ceas scăzută

Timer Counter 1 Generarea de ieșire PWM pe OC1B- XOC1B nu funcționează corect

PLL nu se blochează

Când este la frecvențe sub 6.0 MHz, PLL nu se blochează

Remedierea problemei / soluție

Când utilizați PLL, rulați la 6.0 MHz sau mai mare.

Citirea EEPROM din codul aplicației nu funcționează în modul 3 Bit de blocare

Când seturile de blocare a memoriei LB2 și LB1 sunt programate în modul 3, citirea EEPROM nu funcționează din codul aplicației.

Remedierea problemei / rezolvarea problemelor

Nu setați modul de protecție a bitului de blocare 3 când codul aplicației trebuie să citească din EEPROM.

Citirea EEPROM poate eșua la volumul redus de aprovizionaretage / frecvență de ceas scăzută

Încercarea de a citi EEPROM la frecvențe de ceas reduse și / sau volumul redus de alimentaretage poate duce la date nevalide.

Remediere problemă / soluție

Nu utilizați EEPROM când frecvența ceasului este sub 1 MHz și furnizați voltage este sub 2V. Dacă frecvența de funcționare nu poate fi crescută peste 1 MHz, atunci furnizați voltage ar trebui să fie mai mare de 2V. În mod similar, dacă volumul aprovizionăriitage nu poate fi ridicat peste 2V, atunci frecvența de funcționare trebuie să fie mai mare de 1 MHz.

Se știe că această caracteristică este dependentă de temperatură, dar nu a fost caracterizată. Se oferă recomandări numai pentru temperatura camerei.

Timer Counter 1 Generare ieșire PWM pe OC1B - XOC1B nu funcționează corect

Timer Counter1 Ieșirea PWM OC1B-XOC1B nu funcționează corect. Numai în cazul în care biții de control, COM1B1 și COM1B0 sunt în același mod ca și COM1A1 și respectiv COM1A0, ieșirea OC1B-XOC1B funcționează corect.

Remedierea problemei / rezolvarea problemelor

Singura soluție este să folosiți aceeași setare de control pe COM1A [1: 0] și COM1B [1: 0] biți de control, consultați tabelul 14-4 din foaia de date. Problema a fost rezolvată pentru Tiny45 rev D.

Rev. A

Consum de energie de putere prea mare

DebugWIRE pierde comunicarea atunci când intră într-o singură întrerupere

PLL nu se blochează

Citirea EEPROM din codul aplicației nu funcționează în modul 3 Bit de blocare

Citirea EEPROM poate eșua la volumul redus de aprovizionaretage / frecvență de ceas scăzută

Consum de energie de putere prea mare

Trei situații vor duce la o consumare prea mare a puterii. Acestea sunt:

Un ceas extern este selectat prin siguranțe, dar I / O PORT este încă activat ca ieșire.

EEPROM este citită înainte de a intra în oprire.

VCC este de 4.5 volți sau mai mare.

Disclaimer: informațiile din acest document sunt furnizate în legătură cu produsele Atmel. Nicio licență, expresă sau implicită, prin interdicție sau în alt mod, pentru niciun drept de proprietate intelectuală nu este acordată prin acest document sau în legătură cu vânzarea produselor Atmel. CU EXCEPȚIA CU PRIVIRE ÎN TERMENII ȘI CONDIȚIILE DE VÂNZARE ATMEL LOCATE PE ATMEL WEBSITE, ATMEL NU Își ASUMĂ NIMIC RESPONSABILITĂȚI ȘI RENUNȚĂ ORICE GARANȚIE EXPRESĂ, IMPLICITĂ SAU STATUTĂ PRIVIND PRODUSELE ACESTE INCLUSIV, DAR FĂRĂ A SE LIMITA LA, GARANȚIA IMPLICITĂ DE COMERCIABILITATE, ADECVENȚĂ PENTRU UN SCOP ANUMIT. ÎN NICIO CAZ ATMEL NU VA FI RESPONSABILĂ PENTRU NICIO DAUNE DIRECTE, INDIRECTE, CONSECUȚIONALE, PUNITIVE, SPECIALE SAU INCIDENTALE (INCLUSIVE, FĂRĂ LIMITARE, DAUNE PENTRU PIERDERI ȘI PROFIT, ÎNTRERUPEREA AFACERII SAU PIERDEREA INFORMAȚIILOR) DERIVATE DIN POSIBILITATEA DE UTILIZARE ACEST DOCUMENT, CHIAR DACĂ ATMEL A FOST Anunțat despre POSIBILITATEA ASTELOR DAUNE.

Atmel nu face nicio declarație sau garanție cu privire la acuratețea sau caracterul complet al conținutului acestui document și își rezervă dreptul de a aduce modificări specificațiilor și descrierilor produselor în orice moment, fără notificare. Atmel nu se angajează să actualizeze informațiile conținute aici. Cu excepția cazului în care se prevede altfel, produsele Atmel nu sunt adecvate și nu vor fi utilizate în aplicații auto. Produsele Atmel nu sunt destinate, autorizate sau garantate pentru utilizare ca componente în aplicații menite să susțină sau să susțină viața.

Referințe

Lasă un comentariu

Adresa ta de e-mail nu va fi publicată. Câmpurile obligatorii sunt marcate *