Microcontroler AVR Atmel pe 8 biți cu bliț programabil în sistem de 2/4/8K octeți
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
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
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
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.
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.
Î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.
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
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
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
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 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
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.
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.
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
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ă
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
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.
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
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
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)
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 | ![]() |
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 | kΩ | ||||
PLOAIE | Rezistență la intrare analogică | 100 | MΩ | |||
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 | kΩ | |||
PLOAIE | Rezistență la intrare analogică | 100 | MΩ | |||
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 | kΩ | |||
PLOAIE | Rezistență la intrare analogică | 100 | MΩ | |||
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.