Microcontroller Atmel AVR a 8 bit con flash programmabile nel sistema da 2/4/8 K byte
Caratteristiche
- Microcontrollore AVR® a 8 bit ad alte prestazioni e basso consumo
- Architettura RISC avanzata
- 120 potenti istruzioni - la maggior parte delle esecuzioni a ciclo di clock singolo
- 32 x 8 registri di lavoro per scopi generali
- Funzionamento completamente statico
- Programma non volatile e memorie dati
- 2/4 / 8K byte di memoria flash programmabile nel sistema
- Resistenza: 10,000 cicli di scrittura/cancellazione
- EEPROM programmabile nel sistema da 128/256/512 byte
- Resistenza: 100,000 cicli di scrittura/cancellazione
- SRAM interna da 128/256/512 byte
- Blocco programmazione per programma flash autoprogrammante e protezione dati EEPROM
Caratteristiche periferiche
- Timer / contatore a 8 bit con prescaler e due canali PWM
- Timer / contatore ad alta velocità a 8 bit con prescaler separato
- 2 uscite PWM ad alta frequenza con registri di confronto delle uscite separate
- Generatore di tempo morto programmabile
- USI - Interfaccia seriale universale con rilevatore delle condizioni di avvio
- Convertitore analogico-digitale a 10 bit
4 canali a terminazione singola
2 coppie di canali ADC differenziali con guadagno programmabile (1x, 20x)
Misurazione della temperatura
Timer watchdog programmabile con oscillatore separato su chip
Comparatore analogico su chip
Caratteristiche speciali del microcontrollore
debugWIRE Sistema di debug su chip
Programmabile nel sistema tramite la porta SPI
Fonti di interrupt esterne e interne
Modalità di inattività a basso consumo, riduzione del rumore ADC e modalità di spegnimento
Circuito di ripristino all'accensione migliorato
Circuito di rilevamento Brown-out programmabile
Oscillatore interno calibrato
I / O e pacchetti
Sei linee I / O programmabili
PDIP a 8 pin, SOIC a 8 pin, QFN / MLF a 20 pad e TSSOP a 8 pin (solo ATtiny45 / V)
Volume di eserciziotage
- 1.8 - 5.5 V per ATtiny25V / 45V / 85V
- 2.7 - 5.5 V per ATtiny25 / 45/85
Grado di velocità
- ATtiny25V / 45V / 85V: 0 - 4 MHz a 1.8 - 5.5 V, 0 - 10 MHz a 2.7 - 5.5 V
- ATtiny25 / 45/85: 0 - 10 MHz a 2.7 - 5.5 V, 0 - 20 MHz a 4.5 - 5.5 V
Intervallo di temperatura industriale
Basso consumo energetico
Modalità attiva:
1 MHz, 1.8 V: 300 µA
Modalità di spegnimento:
Configurazioni dei pin
Piedinatura ATtiny25 / 45/85
Descrizioni dei pin
VCC: Fornitura voltage.
GND: Terra.
Porta B (PB5:PB0): la porta B è una porta I/O bidirezionale a 6 bit con resistori pull-up interni (selezionati per ogni bit). I buffer di uscita della porta B hanno caratteristiche di azionamento simmetriche con elevata capacità sia di sink che di source. Come ingressi, i pin della porta B che sono abbassati esternamente genereranno corrente se i resistori di pull-up sono attivati. I pin della porta B vengono dichiarati tre volte quando si attiva una condizione di ripristino, anche se l'orologio non è in funzione.
La porta B serve anche le funzioni di varie caratteristiche speciali dell'ATtiny25 / 45/85 come elencate
Su ATtiny25, le porte I / O programmabili PB3 e PB4 (pin 2 e 3) vengono scambiate in modalità di compatibilità ATtiny15 per supportare la retrocompatibilità con ATtiny15.
RESET: resetta l'ingresso. Un livello basso su questo pin per una durata superiore alla durata minima dell'impulso genererà un reset, anche se l'orologio non è in funzione e a condizione che il pin di reset non sia stato disabilitato. La durata minima dell'impulso è indicata in Tabella 21-4 a pagina 165. Non è garantito che impulsi più brevi generino un ripristino.
Il pin di ripristino può essere utilizzato anche come pin I / O (debole).
Sopraview
ATtiny25 / 45/85 è un microcontrollore CMOS a 8 bit a bassa potenza basato sull'architettura RISC avanzata AVR. Eseguendo potenti istruzioni in un singolo ciclo di clock, ATtiny25 / 45/85 raggiunge velocità di trasmissione che si avvicinano a 1 MIPS per MHz consentendo al progettista del sistema di ottimizzare il consumo energetico rispetto alla velocità di elaborazione.
Diagramma a blocchi
Il core dell'AVR combina un ricco set di istruzioni con 32 registri di lavoro generici. Tutti i 32 registri sono collegati direttamente all'unità logica aritmetica (ALU), consentendo l'accesso a due registri indipendenti in un'unica istruzione eseguita in un ciclo di clock. L'architettura risultante è più efficiente dal punto di vista del codice, raggiungendo velocità fino a dieci volte più veloci rispetto ai microcontrollori CISC convenzionali.
ATtiny25 / 45/85 fornisce le seguenti caratteristiche: 2/4 / 8K byte di flash programmabile nel sistema, 128/256/512 byte EEPROM, 128/256/256 byte SRAM, 6 linee I / O per uso generico, 32 generali registri di lavoro, un timer / contatore a 8 bit con modalità di confronto, un timer / contatore ad alta velocità a 8 bit, interfaccia seriale universale, interrupt interni ed esterni, un ADC a 4 canali, 10 bit, un timer watchdog programmabile con Oscillatore e tre modalità di risparmio energetico selezionabili dal software. La modalità Idle arresta la CPU consentendo al sistema SRAM, Timer / Counter, ADC, Comparatore analogico e Interrupt di continuare a funzionare. La modalità di spegnimento salva il contenuto del registro, disabilitando tutte le funzioni del chip fino al successivo interrupt o reset hardware. La modalità di riduzione del rumore ADC arresta la CPU e tutti i moduli I / O tranne ADC, per ridurre al minimo il rumore di commutazione durante le conversioni ADC.
Il dispositivo è prodotto utilizzando la tecnologia di memoria non volatile ad alta densità di Atmel. L'ISP Flash su chip consente di riprogrammare la memoria del programma nel sistema tramite un'interfaccia seriale SPI, da un programmatore di memoria non volatile convenzionale o da un codice di avvio su chip in esecuzione sul core dell'AVR.
L'AVR ATtiny25 / 45/85 è supportato da una suite completa di strumenti di sviluppo di programmi e sistemi, inclusi: C Compilatori, Macro Assemblatori, Debugger / Simulatori di programma e Kit di valutazione.
Informazioni sulle risorse
Un set completo di strumenti di sviluppo, note applicative e fogli dati è disponibile per il download su http://www.atmel.com/avr.
Codice Examples
Questa documentazione contiene codice semplice esampfile che mostrano brevemente come utilizzare le varie parti del dispositivo. Questi codici exampsi supponga che l'intestazione specifica della parte file è incluso prima della compilazione. Tieni presente che non tutti i fornitori di compilatori C includono definizioni di bit nell'intestazione filese la gestione degli interrupt in C dipende dal compilatore. Si prega di confermare con la documentazione del compilatore C per maggiori dettagli.
Per i registri I / O situati nella mappa I / O estesa, le istruzioni "IN", "OUT", "SBIS", "SBIC", "CBI" e "SBI" devono essere sostituite con istruzioni che consentono l'accesso a I / O esteso / O. In genere, questo significa "LDS" e "STS" combinati con "SBRS", "SBRC", "SBR" e "CBR". Notare che non tutti i dispositivi AVR includono una mappa I / O estesa.
Rilevamento tattile capacitivo
Atmel QTouch Library fornisce una soluzione semplice da usare per le interfacce sensibili al tocco sui microcontrollori Atmel AVR. La Libreria QTouch include il supporto per i metodi di acquisizione QTouch® e QMatrix®.
Il rilevamento del tocco può essere facilmente aggiunto a qualsiasi applicazione collegando la libreria QTouch e utilizzando l'API (Application Programming Interface) della libreria per definire i canali tattili e i sensori. L'applicazione chiama quindi l'API per recuperare le informazioni sul canale e determinare lo stato del sensore tattile.
La libreria QTouch è gratuita e può essere scaricata da Atmel webposto. Per ulteriori informazioni e dettagli sull'implementazione, fare riferimento alla Guida per l'utente della libreria QTouch, disponibile anche presso Atmel websito.
Conservazione dei dati
I risultati della qualifica di affidabilità mostrano che il tasso di fallimento della conservazione dei dati previsto è molto inferiore a 1 PPM in 20 anni a 85 ° C o 100 anni a 25 ° C.
Nucleo CPU AVR
Introduzione
Questa sezione discute l'architettura di base di AVR in generale. La funzione principale del core della CPU è garantire la corretta esecuzione del programma. La CPU deve quindi essere in grado di accedere alle memorie, eseguire calcoli, controllare le periferiche e gestire gli interrupt.
Architettura Overview
Per massimizzare le prestazioni e il parallelismo, l'AVR utilizza un'architettura Harvard, con memorie e bus separati per programma e dati. Le istruzioni nella memoria del programma vengono eseguite con una pipeline a livello singolo. Mentre un'istruzione viene eseguita, l'istruzione successiva viene precaricata dalla memoria del programma. Questo concetto consente di eseguire le istruzioni in ogni ciclo di clock. La memoria del programma è una memoria flash riprogrammabile nel sistema.
Il Registro ad accesso rapido File contiene 32 registri di lavoro generici a 8 bit con un singolo tempo di accesso al ciclo di clock. Ciò consente il funzionamento dell'unità logica aritmetica (ALU) a ciclo singolo. In una tipica operazione ALU, vengono emessi due operandi dal registro File, l'operazione viene eseguita e il risultato viene memorizzato nuovamente nel Registro File- in un ciclo di clock.
Sei dei 32 registri possono essere utilizzati come tre puntatori di registro di indirizzo indiretto a 16 bit per l'indirizzamento dello spazio dati, consentendo calcoli di indirizzo efficienti. Uno di questi puntatori di indirizzo può essere utilizzato anche come puntatore di indirizzo per cercare tabelle nella memoria del programma Flash. Questi registri di funzioni aggiuntive sono i registri X, Y e Z a 16 bit, descritti più avanti in questa sezione.
L'ALU supporta operazioni aritmetiche e logiche tra registri o tra una costante e un registro. Le operazioni di registro singolo possono essere eseguite anche nell'ALU. Dopo un'operazione aritmetica, il registro di stato viene aggiornato per riflettere le informazioni sul risultato dell'operazione.
Il flusso del programma è fornito da istruzioni di salto e chiamata condizionali e incondizionate, in grado di indirizzare direttamente l'intero spazio di indirizzamento. La maggior parte delle istruzioni AVR ha un unico formato word a 16 bit, ma ci sono anche istruzioni a 32 bit.
Durante gli interrupt e le chiamate di subroutine, l'indirizzo di ritorno Program Counter (PC) viene memorizzato nello Stack. Lo Stack è effettivamente allocato nella SRAM dei dati generali e di conseguenza la dimensione dello Stack è limitata solo dalla dimensione totale della SRAM e dall'utilizzo della SRAM. Tutti i programmi utente devono inizializzare l'SP nella routine di ripristino (prima che vengano eseguite sottoprogrammi o interruzioni). Lo Stack Pointer (SP) è accessibile in lettura / scrittura nello spazio I / O. È possibile accedere facilmente alla SRAM dei dati attraverso le cinque diverse modalità di indirizzamento supportate nell'architettura AVR.
Gli spazi di memoria nell'architettura AVR sono tutte mappe di memoria lineari e regolari.
Un modulo di interrupt flessibile ha i suoi registri di controllo nello spazio I / O con un bit di abilitazione degli interrupt globali aggiuntivo nel registro di stato. Tutti gli interrupt hanno un vettore di interrupt separato nella tabella Vettore di interrupt. Gli interrupt hanno la priorità in base alla loro posizione del vettore di interrupt. Più basso è l'indirizzo del vettore di interrupt, maggiore è la priorità.
Lo spazio di memoria I/O contiene 64 indirizzi per le funzioni periferiche della CPU come Registri di controllo, SPI e altre funzioni I/O. Si può accedere direttamente alla memoria I/O, oppure come locazioni di Data Space successive a quelle del Register File, 0x20 – 0x5F.
ALU - Unità logica aritmetica
L'AVR ALU ad alte prestazioni opera in collegamento diretto con tutti i 32 registri di lavoro generici. All'interno di un singolo ciclo di clock, vengono eseguite operazioni aritmetiche tra registri di uso generale o tra un registro e un immediato. Le operazioni ALU sono suddivise in tre categorie principali: funzioni aritmetiche, logiche e bit. Alcune implementazioni dell'architettura forniscono anche un potente moltiplicatore che supporta sia la moltiplicazione con segno / senza segno che il formato frazionario. Vedere la sezione "Set di istruzioni" per una descrizione dettagliata.
Registro di stato
Il registro di stato contiene informazioni sul risultato dell'istruzione aritmetica eseguita più di recente. Queste informazioni possono essere utilizzate per modificare il flusso del programma al fine di eseguire operazioni condizionali. Notare che il registro di stato viene aggiornato dopo tutte le operazioni ALU, come specificato nel riferimento del set di istruzioni. Ciò in molti casi eliminerà la necessità di utilizzare le istruzioni di confronto dedicate, risultando in un codice più veloce e compatto.
Il registro di stato non viene memorizzato automaticamente quando si entra in una routine di interrupt e ripristinato al ritorno da un interrupt. Questo deve essere gestito dal software.
SREG - Registro di stato AVR
Il registro di stato dell'AVR - SREG - è definito come:
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3F | I | T | H | S | V | N | Z | C | SEG |
Leggere/scrivere | R/N | R/N | R/N | R/N | R/N | R/N | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 - I: Abilitazione interrupt globale
Il bit Global Interrupt Enable deve essere impostato per abilitare gli interrupt. Il controllo di abilitazione dell'interrupt individuale viene quindi eseguito in registri di controllo separati. Se il registro di abilitazione interrupt globale è deselezionato, nessuno degli interrupt viene abilitato indipendentemente dalle impostazioni di abilitazione degli interrupt individuali. Il bit I viene cancellato dall'hardware dopo che si è verificato un interrupt ed è impostato dall'istruzione RETI per abilitare gli interrupt successivi. L'I-bit può anche essere impostato e cancellato dall'applicazione con le istruzioni SEI e CLI, come descritto nel riferimento al set di istruzioni.
Bit 6 - T: Memoria copia bit
Le istruzioni Bit Copy BLD (Bit LoaD) e BST (Bit STore) utilizzano il bit T come sorgente o destinazione per il bit operato. Un po' da un registro nel Registro File può essere copiato in T dall'istruzione BST e un bit in T può essere copiato in un bit in un registro nel Registro File dall'istruzione BLD.
Bit 5 - H: Half Carry Flag
Il flag Half Carry H indica un Half Carry in alcune operazioni aritmetiche. Half Carry è utile nell'aritmetica BCD. Vedere la "Descrizione del set di istruzioni" per informazioni dettagliate.
Bit 4 – S: Bit di segno, S = N ⊕ V
Il bit S è sempre un'esclusiva o tra il flag negativo N e il flag di overflow del complemento a due V. Vedere la "Descrizione del set di istruzioni" per informazioni dettagliate.
Bit 3 - V: Flag di overflow del complemento a due
Flag di overflow del complemento a due V supporta l'aritmetica del complemento a due. Vedere la "Descrizione del set di istruzioni" per informazioni dettagliate.
Bit 2 - N: Flag negativo
Il flag negativo N indica un risultato negativo in un'operazione aritmetica o logica. Vedere la "Descrizione del set di istruzioni" per informazioni dettagliate.
Bit 1 - Z: Flag zero
Il Flag Zero Z indica un risultato zero in un'operazione aritmetica o logica. Vedere la "Descrizione del set di istruzioni" per informazioni dettagliate.
Bit 0 - C: flag di trasporto
Il flag di riporto C indica un riporto in un'operazione aritmetica o logica. Vedere la "Descrizione del set di istruzioni" per informazioni dettagliate.
Registro per scopi generici File
Il registro File è ottimizzato per il set di istruzioni AVR Enhanced RISC. Al fine di ottenere le prestazioni e la flessibilità richieste, il Registro supporta i seguenti schemi di input/output File:
Un operando di uscita a 8 bit e un ingresso di risultato a 8 bit
Due operandi di uscita a 8 bit e un ingresso di risultato a 8 bit
Due operandi di uscita a 8 bit e un ingresso di risultato a 16 bit
Un operando di uscita a 16 bit e un ingresso di risultato a 16 bit
Figura 4-2 mostra la struttura dei 32 registri di lavoro generici nella CPU.
Come mostrato in Figura 4-2, ad ogni registro viene inoltre assegnato un indirizzo di Memoria Dati, mappandoli direttamente nelle prime 32 locazioni del Data Space utente. Sebbene non sia fisicamente implementata come locazioni SRAM, questa organizzazione della memoria offre una grande flessibilità nell'accesso ai registri, poiché i registri dei puntatori X, Y e Z possono essere impostati per indicizzare qualsiasi registro nel file.La maggior parte delle istruzioni operanti sul Registro File hanno accesso diretto a tutti i registri e la maggior parte di essi sono istruzioni a ciclo singolo.
Il registro X, il registro Y e il registro Z.
I registri R26..R31 hanno alcune funzioni aggiuntive al loro utilizzo per scopi generali. Questi registri sono puntatori di indirizzi a 16 bit per l'indirizzamento indiretto dello spazio dati. I tre registri degli indirizzi indiretti X, Y e Z sono definiti come descritto in Figura 4-3.
Nelle diverse modalità di indirizzamento, questi registri degli indirizzi hanno funzioni come spostamento fisso, incremento automatico e decremento automatico (vedere il riferimento del set di istruzioni per i dettagli).
Puntatore a pila
Lo Stack viene utilizzato principalmente per memorizzare dati temporanei, per memorizzare variabili locali e per memorizzare indirizzi di ritorno dopo interrupt e chiamate di subroutine. Lo Stack Pointer Register punta sempre in cima allo Stack. Si noti che lo Stack viene implementato crescendo da posizioni di memoria superiori a posizioni di memoria inferiori. Ciò implica che un comando Stack PUSH riduce il puntatore dello stack.
Il puntatore dello stack punta all'area dello stack SRAM dei dati in cui si trovano gli stack di subroutine e interrupt. Questo spazio Stack nella SRAM dei dati deve essere definito dal programma prima che le chiamate di subroutine vengano eseguite o gli interrupt siano abilitati. Lo Stack Pointer deve essere impostato in modo che punti sopra 0x60. Lo Stack Pointer viene decrementato di uno quando i dati vengono inseriti nello Stack con l'istruzione PUSH e viene decrementato di due quando l'indirizzo di ritorno viene inserito nello Stack con la chiamata o l'interruzione della subroutine. Lo Stack Pointer viene incrementato di uno quando i dati vengono estratti dallo Stack con l'istruzione POP e viene incrementato di due quando i dati vengono estratti dallo Stack con il ritorno dalla subroutine RET o dal ritorno dall'interruzione RETI.
L'AVR Stack Pointer è implementato come due registri a 8 bit nello spazio I / O. Il numero di bit effettivamente utilizzati dipende dall'implementazione. Si noti che lo spazio dati in alcune implementazioni dell'architettura AVR è così piccolo che è necessario solo SPL. In questo caso il Registro SPH non sarà presente.
SPH e SPL - Stack Pointer Register
Morso | 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 | ||
Leggere/scrivere | R/N | R/N | R/N | R/N | R/N | R/N | R/N | R/N | |
Leggere/scrivere | R/N | R/N | R/N | R/N | R/N | R/N | R/N | R/N | |
Valore iniziale | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | |
Valore iniziale | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO | RAMENDO |
Tempi di esecuzione delle istruzioni
Questa sezione descrive i concetti generali di temporizzazione dell'accesso per l'esecuzione delle istruzioni. La CPU AVR è guidata dal clock della CPU clkCPU, generato direttamente dalla sorgente di clock selezionata per il chip. Non viene utilizzata alcuna divisione dell'orologio interno.
Figura 4-4 mostra le operazioni parallele di recupero ed esecuzione delle istruzioni abilitate dall'architettura di Harvard e dal registro ad accesso rapido File concetto. Questo è il concetto base di pipelining per ottenere fino a 1 MIPS per MHz con i corrispondenti risultati unici per funzioni per costo, funzioni per clock e funzioni per unità di potenza.
Figura 4-5. Funzionamento ALU a ciclo singolo
Ripristino e gestione degli interrupt
L'AVR fornisce diverse sorgenti di interrupt differenti. Questi interrupt e il vettore di ripristino separato hanno ciascuno un vettore di programma separato nello spazio di memoria del programma. A tutti gli interrupt vengono assegnati singoli bit di abilitazione che devono essere scritti uno logico insieme al bit Global Interrupt Enable nel registro di stato per abilitare l'interrupt.
Gli indirizzi più bassi nello spazio di memoria del programma sono definiti per impostazione predefinita come vettori di ripristino e interruzione. L'elenco completo dei vettori è mostrato in "Interruzioni" a pagina 48. L'elenco determina anche i livelli di priorità dei diversi interrupt. Più basso è l'indirizzo, più alto è il livello di priorità. RESET ha la priorità più alta e il successivo è INT0, la richiesta di interrupt esterno 0.
Quando si verifica un interrupt, il bit I di abilitazione interrupt globale viene azzerato e tutti gli interrupt vengono disabilitati. Il software utente può scrivere uno logico sull'I-bit per abilitare gli interrupt annidati. Tutti gli interrupt abilitati possono quindi interrompere la routine di interrupt corrente. Il bit I viene impostato automaticamente quando viene eseguita un'istruzione Return from Interrupt - RETI.
Esistono fondamentalmente due tipi di interruzioni. Il primo tipo viene attivato da un evento che imposta il flag di interrupt. Per questi interrupt, il contatore del programma viene indirizzato al vettore di interrupt effettivo per eseguire la routine di gestione degli interrupt e l'hardware cancella il flag di interrupt corrispondente. I flag di interrupt possono anche essere cancellati scrivendone uno logico nella posizione del bit flag da cancellare. Se si verifica una condizione di interrupt mentre il bit di abilitazione dell'interrupt corrispondente è azzerato, il flag di interrupt verrà impostato e ricordato fino a quando l'interrupt non viene abilitato o il flag non viene cancellato dal software. Allo stesso modo, se si verificano una o più condizioni di interrupt mentre il bit di abilitazione dell'interrupt globale è azzerato, i flag di interrupt corrispondenti verranno impostati e ricordati fino a quando non viene impostato il bit di abilitazione dell'interrupt globale, che verranno quindi eseguiti in base all'ordine di priorità.
Il secondo tipo di interrupt si attiverà fintanto che è presente la condizione di interrupt. Queste interruzioni non hanno necessariamente flag di interruzione. Se la condizione di interrupt scompare prima che l'interrupt sia abilitato, l'interrupt non verrà attivato.
Quando l'AVR esce da un interrupt, tornerà sempre al programma principale ed eseguirà un'altra istruzione prima che venga servito qualsiasi interrupt in sospeso.
Notare che il registro di stato non viene memorizzato automaticamente quando si entra in una routine di interrupt, né ripristinato quando si ritorna da una routine di interrupt. Questo deve essere gestito dal software.
Quando si utilizza l'istruzione CLI per disabilitare gli interrupt, gli interrupt verranno immediatamente disabilitati. Nessun interrupt verrà eseguito dopo l'istruzione CLI, anche se si verifica contemporaneamente all'istruzione CLI. Il seguente esample mostra come questo può essere usato per evitare interruzioni durante la sequenza di scrittura EEPROM temporizzata.
Codice assemblaggio Example |
in r16, SREG ; memorizzare il valore SREG
cli ; disabilitare gli interrupt durante la sequenza temporizzata sbi EECR, EEMPE ; avviare la scrittura EEPROM sbi EECR, EEPE fuori SREG, r16 ; ripristinare il valore SREG (I-bit) |
Codice C Example |
char cSREG;
cSREG = SREG; /* memorizza il valore SREG */ /* disabilita gli interrupt durante la sequenza temporizzata */ _CLI (); EECR |= (1< EECR | = (1 < SREG = cSREG; /* ripristina il valore SREG (I-bit) */ |
Quando si utilizza l'istruzione SEI per abilitare gli interrupt, l'istruzione successiva a SEI verrà eseguita prima di qualsiasi interrupt in sospeso, come mostrato in questo esempio.amplui.
Codice assemblaggio Example |
sei ; impostare l'abilitazione dell'interrupt globale
dormire; entra nel sonno, in attesa di interruzione ; nota: entrerà in sospensione prima di qualsiasi attesa ; interrompi |
Codice C Example |
_SEI(); /* imposta l'abilitazione dell'interrupt globale */
_DORMIRE(); /* entra in modalità sleep, in attesa di interrupt */ / * nota: entrerà in sospensione prima di qualsiasi interruzione in sospeso * / |
Tempo di risposta all'interruzione
La risposta di esecuzione dell'interrupt per tutti gli interrupt AVR abilitati è di almeno quattro cicli di clock. Dopo quattro cicli di clock, viene eseguito l'indirizzo del vettore di programma per la routine di gestione degli interrupt effettiva. Durante questo periodo di quattro cicli di clock, il Program Counter viene inserito nello Stack. Il vettore è normalmente un salto alla routine di interrupt e questo salto richiede tre cicli di clock. Se si verifica un interrupt durante l'esecuzione di un'istruzione a più cicli, questa istruzione viene completata prima che l'interrupt venga servito. Se si verifica un interrupt quando l'MCU è in modalità sleep, il tempo di risposta dell'esecuzione dell'interrupt aumenta di quattro cicli di clock. Questo aumento si aggiunge al tempo di avvio dalla modalità di sospensione selezionata.
Un ritorno da una routine di gestione degli interrupt richiede quattro cicli di clock. Durante questi quattro cicli di clock, il Program Counter (due byte) viene ritirato dallo Stack, lo Stack Pointer viene incrementato di due e l'I-bit in SREG viene impostato.
Ricordi di AVR
Questa sezione descrive le diverse memorie nell'ATtiny25 / 45/85. L'architettura AVR ha due spazi di memoria principali, la memoria dati e lo spazio di memoria del programma. Inoltre, l'ATtiny25 / 45/85 dispone di una memoria EEPROM per l'archiviazione dei dati. Tutti e tre gli spazi di memoria sono lineari e regolari.
Memoria di programma flash riprogrammabile nel sistema
ATtiny25 / 45/85 contiene 2/4 / 8K byte di memoria Flash riprogrammabile nel sistema su chip per l'archiviazione del programma. Poiché tutte le istruzioni AVR hanno una larghezza di 16 o 32 bit, il Flash è organizzato come 1024/2048/4096 x 16.
La memoria Flash ha una durata di almeno 10,000 cicli di scrittura / cancellazione. L'ATtiny25 / 45/85 Program Counter (PC) ha una larghezza di 10/11/12 bit, indirizzando così le posizioni di memoria del programma 1024/2048/4096. "Programma di memoria- ming ”a pagina 147 contiene una descrizione dettagliata del download seriale dei dati Flash utilizzando i pin SPI.
Le tabelle delle costanti possono essere allocate all'interno dell'intero spazio di indirizzi della memoria del programma (vedere la descrizione dell'istruzione LPM - Load Program memory).
Figura 5-1. Mappa della memoria del programma
Memoria dati SRAM
Figura 5-2 mostra come è organizzata la memoria SRAM ATtiny25 / 45/85.
Le locazioni di memoria Dati inferiori 224/352/607 indirizzano sia il Registro File, la memoria I/O e la SRAM dati interna. Le prime 32 sedi si rivolgono al Registro File, le successive 64 locazioni della memoria I/O standard e le ultime 128/256/512 locazioni indirizzano la SRAM dati interna.
Le cinque diverse modalità di indirizzamento per la Memoria Dati riguardano: Diretto, Indiretto con Spostamento, Indiretto, Indiretto con Pre-decremento e Indiretto con Post-incremento. Nel registro File, i registri da R26 a R31 presentano i registri puntatore di indirizzamento indiretto.
L'indirizzamento diretto raggiunge l'intero spazio dati.
La modalità Indirect with Displacement raggiunge 63 posizioni di indirizzo dall'indirizzo di base fornito dal registro Y o Z-.
Quando si utilizzano le modalità di indirizzamento indiretto del registro con pre-decremento e post-incremento automatici, i registri di indirizzo X, Y e Z vengono decrementati o incrementati.
I 32 registri di lavoro generici, 64 registri I/O e i 128/256/512 byte di SRAM dati interni nell'ATtiny25/45/85 sono tutti accessibili attraverso tutte queste modalità di indirizzamento. Il registro File è descritto in "Gen- erale Scopo Registro File" a pagina 10.
Figura 5-2. Mappa memoria dati
Accesso alla memoria dati Volte
Questa sezione descrive i concetti generali di temporizzazione dell'accesso per l'accesso alla memoria interna. L'accesso SRAM ai dati interni viene eseguito in due cicli clkCPU come descritto in Figura 5-3.
Figura 5-3. Cicli di accesso alla SRAM dati su chip Memoria dati EEPROM
ATtiny25 / 45/85 contiene 128/256/512 byte di memoria EEPROM di dati. È organizzato come uno spazio dati separato, in cui è possibile leggere e scrivere singoli byte. La EEPROM ha una durata di almeno 100,000 cicli di scrittura / cancellazione. L'accesso tra la EEPROM e la CPU è descritto di seguito, specificando i registri degli indirizzi EEPROM, il registro dati EEPROM e il registro di controllo EEPROM. Per i dettagli vedere "Download seriale" a pagina 151.
Accesso in lettura / scrittura EEPROM
I registri di accesso EEPROM sono accessibili nello spazio I / O.
I tempi di accesso in scrittura per la EEPROM sono indicati in Tabella 5-1 a pagina 21. Una funzione di temporizzazione automatica, tuttavia, consente al software dell'utente di rilevare quando è possibile scrivere il byte successivo. Se il codice utente contiene istruzioni che scrivono la EEPROM, bisogna prendere alcune precauzioni. Negli alimentatori fortemente filtrati, è probabile che VCC aumenti o diminuisca lentamente
Accensione/spegnimento. Ciò fa sì che il dispositivo per un certo periodo di tempo funzioni a volumetage minore di quanto specificato come minimo per la frequenza di clock utilizzata. Vedere "Prevenzione della corruzione della EEPROM" a pagina 19 per i dettagli su come evitare problemi in queste situazioni.
Per evitare scritture involontarie di EEPROM, è necessario seguire una procedura di scrittura specifica. Fare riferimento a "Atomico Byte Programming "a pagina 17 E "Programmazione a byte diviso" a pagina 17 per i dettagli su questo.
Quando la EEPROM viene letta, la CPU viene arrestata per quattro cicli di clock prima che venga eseguita l'istruzione successiva. Quando viene scritta la EEPROM, la CPU viene arrestata per due cicli di clock prima che venga eseguita l'istruzione successiva.
Programmazione di byte atomici
L'utilizzo della programmazione Atomic Byte è la modalità più semplice. Quando si scrive un byte nella EEPROM, l'utente deve scrivere l'indirizzo nel registro EEAR e i dati nel registro EEDR. Se i bit EEPMn sono zero, la scrittura di EEPE (entro quattro cicli dopo la scrittura di EEMPE) attiverà l'operazione di cancellazione / scrittura. Sia il ciclo di cancellazione che il ciclo di scrittura vengono eseguiti in un'unica operazione e viene indicato il tempo totale di programmazione Tabella 5-1 a pagina 21. Il bit EEPE rimane impostato fino al completamento delle operazioni di cancellazione e scrittura. Mentre il dispositivo è impegnato con la programmazione, non è possibile eseguire altre operazioni EEPROM.
Programmazione a byte divisi
È possibile suddividere il ciclo di cancellazione e scrittura in due diverse operazioni. Questo può essere utile se il sistema richiede un tempo di accesso breve per un periodo di tempo limitato (tipicamente se l'alimentazione voltage cade). Per avvantaggia- tage di questo metodo, è necessario che le locazioni da scrivere siano state cancellate prima dell'operazione di scrittura. Ma poiché le operazioni di cancellazione e scrittura sono suddivise, è possibile eseguire le operazioni di cancellazione quando il sistema consente di eseguire operazioni con tempi critici (tipicamente dopo l'accensione).
Cancellare
Per cancellare un byte, l'indirizzo deve essere scritto in EEAR. Se i bit EEPMn sono 0b01, la scrittura dell'EEPE (entro quattro cicli dopo la scrittura di EEMPE) attiverà solo l'operazione di cancellazione (il tempo di programmazione è dato in Tabella 5-1 su pagina 21). Il bit EEPE rimane impostato fino al completamento dell'operazione di cancellazione. Mentre il dispositivo è impegnato nella programmazione, non è possibile eseguire altre operazioni EEPROM.
Scrivere
Per scrivere una posizione, l'utente deve scrivere l'indirizzo in EEAR e i dati in EEDR. Se i bit EEPMn sono 0b10, la scrittura dell'EEPE (entro quattro cicli dopo la scrittura di EEMPE) attiverà solo l'operazione di scrittura (il tempo di programmazione è dato in Tabella 5-1 a pagina 21). Il bit EEPE rimane impostato fino al completamento dell'operazione di scrittura. Se la posizione da scrivere non è stata cancellata prima della scrittura, i dati memorizzati devono essere considerati persi. Mentre il dispositivo è impegnato con la programmazione, non è possibile eseguire altre operazioni EEPROM.
L'oscillatore calibrato viene utilizzato per temporizzare gli accessi alla EEPROM. Assicurati che la frequenza dell'oscillatore rientri nei requisiti descritti in "OSCCAL - Registro di calibrazione dell'oscillatore" a pagina 31.
Il seguente codice esampi le mostrano un assembly e una funzione C per la cancellazione, la scrittura o la scrittura atomica della EEPROM. L'exampi le presuppongono che gli interrupt siano controllati (ad esempio, disabilitandoli globalmente) in modo che non si verifichino interrupt durante l'esecuzione di queste funzioni.
Codice assemblaggio Example |
EEPROM_scrivi:
; Attendi il completamento della scrittura precedente sbic EECR,EEPE rjmp EEPROM_scrittura ; Impostare la modalità di programmazione ldi r16, (0<<EEPM1)|(0<<EEPM0) fuori EECR, r16 ; Impostare l'indirizzo (r18: r17) nel registro degli indirizzi fuori EEARH, r18 fuori EEARL, r17 ; Scrive i dati (r19) nel registro dati fuori EEDR, r19 ; Scrivi uno logico in EEMPE sbi EECR,EEMPE ; Avvia la scrittura della eeprom impostando EEPE sbi EECR,EEPE ritirare |
Codice C Example |
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
{ /* Attendi il completamento della scrittura precedente */ while(EECR & (1< ; /* Imposta la modalità di programmazione */ EECR = (0 < / * Imposta indirizzo e registri dati * / EEAR = ucAddress; EDR = ucData; /* Scrive quello logico in EEMPE */ EECR | = (1 < / * Avvia la scrittura della eeprom impostando EEPE * / EECR | = (1 < } |
Il prossimo codice exampi le mostrano le funzioni assembly e C per la lettura della EEPROM. L'exampi le presuppongono che gli interrupt siano controllati in modo che non si verifichino interruzioni durante l'esecuzione di queste funzioni.
Codice assemblaggio Example |
EEPROM_leggi:
; Attendi il completamento della scrittura precedente sbic EECR,EEPE rjmp EEPROM_lettura ; Impostare l'indirizzo (r18: r17) nel registro degli indirizzi fuori EEARH, r18 fuori EEARL, r17 ; Inizia la lettura della eeprom scrivendo EERE sbi EECR,EERE ; Leggere i dati dal registro dati in r16,EEDR ritirare |
Codice C Example |
unsigned char EEPROM_read(unsigned char ucAddress)
{ / * Attendi il completamento della scrittura precedente * / mentre (EECR & (1 < ; / * Imposta il registro degli indirizzi * / EEAR = ucAddress; /* Avvia la lettura della eeprom scrivendo EERE */ EECR | = (1 < / * Restituisce dati dal registro dati * / restituire l'EDR; } |
Prevenire la corruzione della EEPROM
Durante i periodi di basso VCC, i dati EEPROM possono essere corrotti perché il volume di alimentazionetage è troppo basso per il corretto funzionamento della CPU e della EEPROM. Questi problemi sono gli stessi dei sistemi a livello di scheda che utilizzano EEPROM e dovrebbero essere applicate le stesse soluzioni di progettazione.
Un danneggiamento dei dati EEPROM può essere causato da due situazioni in cui il volumetage è troppo basso. Innanzitutto, una normale sequenza di scrittura sulla EEPROM richiede un volume minimotage per funzionare correttamente. In secondo luogo, la stessa CPU può eseguire istruzioni in modo errato, se il volume di alimentazionetage è troppo basso.
La corruzione dei dati EEPROM può essere facilmente evitata seguendo questa raccomandazione di progettazione:
Mantenere attivo (basso) l'AVR RESET durante i periodi di alimentazione insufficiente voltage. Questo può essere fatto abilitando il rilevatore di Brown-out interno (BOD). Se il livello di rilevamento del BOD interno non corrisponde al
livello di rilevamento necessario, è possibile utilizzare un circuito di protezione reset VCC esterno basso. Se si verifica un ripristino mentre è in corso un'operazione di scrittura, l'operazione di scrittura verrà completata a condizione che l'alimentazione voltage è sufficiente.
Memoria I / O
La definizione dello spazio I / O di ATtiny25 / 45/85 è mostrata in "Riepilogo registrazione" a pagina 200.
Tutti gli I / O e le periferiche ATtiny25 / 45/85 sono posizionati nello spazio I / O. È possibile accedere a tutte le posizioni I / O tramite le istruzioni LD / LDS / LDD e ST / STS / STD, trasferendo i dati tra i 32 registri di lavoro generici e lo spazio I / O. I registri I / O all'interno dell'intervallo di indirizzi 0x00 - 0x1F sono direttamente accessibili tramite bit utilizzando le istruzioni SBI e CBI. In questi registri, il valore dei singoli bit può essere verificato utilizzando le istruzioni SBIS e SBIC. Fare riferimento alla sezione relativa al set di istruzioni per maggiori dettagli. Quando si utilizzano i comandi specifici di I / O IN e OUT, è necessario utilizzare gli indirizzi di I / O 0x00 - 0x3F. Quando si indirizzano i registri I / O come spazio dati utilizzando le istruzioni LD e ST, è necessario aggiungere 0x20 a questi indirizzi.
Per compatibilità con dispositivi futuri, i bit riservati dovrebbero essere scritti a zero se si accede. Gli indirizzi di memoria I / O riservati non devono mai essere scritti.
Alcuni dei flag di stato vengono cancellati scrivendovi uno logico. Si noti che le istruzioni CBI e SBI funzioneranno solo sul bit specificato e possono quindi essere utilizzate su registri contenenti tali flag di stato. Le istruzioni CBI e SBI funzionano solo con i registri da 0x00 a 0x1F.
I registri di controllo degli I / O e delle periferiche sono spiegati nelle sezioni successive.
Descrizione registro
EEARH - Registro indirizzi EEPROM
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1F | – | – | – | – | – | – | – | EEAR8 | EARH |
Leggere/scrivere | R | R | R | R | R | R | R | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | X/0 |
Bit 7: 1 - Ris: Bit riservati
Questi bit sono riservati per un utilizzo futuro e verranno sempre letti come zero.
Bit 0 - EEAR8: indirizzo EEPROM
Questo è il bit di indirizzo EEPROM più significativo di ATtiny85. Nei dispositivi con meno EEPROM, cioè ATtiny25 / ATtiny45, questo bit è riservato e leggerà sempre zero. Il valore iniziale dell'EEPROM Address Register (EEAR) non è definito e quindi è necessario scrivere un valore appropriato prima di accedere alla EEPROM.
EEARL - Registro indirizzi EEPROM
Morso
0x1E | EEAR7 | EEAR6 | EEAR5 | EEAR4 | EEAR3 | EEAR2 | EEAR1 | EEAR0 | EARL |
Posteriore / Scrivi | R/N | R/N | R/N | R/N | R/N | R/N | R/N | R/N | |
Valore iniziale | X | X | X | X | X | X | X | X |
Bit 7 - EEAR7: indirizzo EEPROM
Questo è il bit di indirizzo EEPROM più significativo di ATtiny45. Nei dispositivi con meno EEPROM, cioè ATtiny25, questo bit è riservato e leggerà sempre zero. Il valore iniziale dell'EEPROM Address Register (EEAR) non è definito e quindi è necessario scrivere un valore appropriato prima di accedere alla EEPROM.
Bit 6: 0 - EEAR [6: 0]: indirizzo EEPROM
Questi sono i bit (bassi) del registro degli indirizzi EEPROM. I byte di dati EEPROM vengono indirizzati linearmente nell'intervallo 0… (128/256 / 512-1). Il valore iniziale di EEAR non è definito e quindi deve essere scritto un valore appropriato prima di poter accedere alla EEPROM.
EEDR - Registro dati EEPROM
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1D | EDDR7 | EDDR6 | EDDR5 | EDDR4 | EDDR3 | EDDR2 | EDDR1 | EDDR0 | EDDR |
Leggere/scrivere | R/N | R/N | R/N | R/N | R/N | R/N | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Per l'operazione di scrittura EEPROM il registro EEDR contiene i dati da scrivere nella EEPROM nell'indirizzo fornito dal registro EEAR. Per l'operazione di lettura EEPROM, l'EEDR contiene i dati letti dal file
EEPROM all'indirizzo fornito da EEAR.
5.5.4 EECR - Registro di controllo EEPROM |
|||||||||
Bit 7 6 5 | 4 | 3 | 2 | 1 | 0 | ||||
0x1C – | – | EEPM1 | EEPM0 | SPAVENTOSO | EEMPE | EPE | EERE | CEECR | |
Lettura / scrittura R R R / W | R/N | R/N | R/N | R/N | R/N | ||||
Valore iniziale 0 0 X | X | 0 | 0 | X | 0 |
Bit 7 - Ris: bit riservato
Questo bit è riservato per un uso futuro e sarà sempre letto come 0 in ATtiny25 / 45/85. Per la compatibilità con i futuri dispositivi AVR, scrivere sempre questo bit a zero. Dopo aver letto, maschera questo pezzo.
Bit 6 - Ris: bit riservato
Questo bit è riservato nell'ATtiny25 / 45/85 e sarà sempre letto come zero.
Bit 5: 4 - EEPM [1: 0]: Bit della modalità di programmazione EEPROM
L'impostazione dei bit della modalità di programmazione EEPROM definisce quale azione di programmazione verrà attivata durante la scrittura dell'EEPE. È possibile programmare i dati in un'unica operazione atomica (cancellare il vecchio valore e programmare il nuovo valore) o suddividere le operazioni di cancellazione e scrittura in due diverse operazioni. I tempi di programmazione per le diverse modalità sono mostrati in Tabella 5-1. Mentre EEPE è impostato, qualsiasi scrittura su EEPMn verrà ignorata. Durante il ripristino, i bit EEPMn verranno ripristinati a 0b00 a meno che la EEPROM non sia impegnata nella programmazione.
Tabella 5-1. Bit modalità EEPROM
EEPM1 | EEPM0 | Tempo di programmazione | Operazione |
0 | 0 | 3.4 millisecondi | Cancella e scrivi in una sola operazione (operazione atomica) |
0 | 1 | 1.8 millisecondi | Cancella solo |
1 | 0 | 1.8 millisecondi | Solo scrittura |
1 | 1 | – | Riservato per uso futuro |
Bit 3 - EERIE: abilitazione interrupt pronto EEPROM
La scrittura di EERIE su uno abilita l'interrupt pronto EEPROM se è impostato il bit I in SREG. Scrivere EERIE a zero disabilita l'interruzione. L'interrupt pronto EEPROM genera un interrupt costante quando la memoria non volatile è pronta per la programmazione.
Bit 2 - EEMPE: Abilitazione programma master EEPROM
Il bit EEMPE determina se la scrittura di EEPE su uno avrà effetto o meno.
Quando EEMPE è impostato, l'impostazione di EEPE entro quattro cicli di clock programmerà l'EEPROM all'indirizzo selezionato. Se EEMPE è zero, l'impostazione di EEPE non avrà alcun effetto. Quando EEMPE è stato scritto su uno dal software, l'hardware azzera il bit dopo quattro cicli di clock.
Bit 1 - EEPE: abilitazione programma EEPROM
Il segnale di abilitazione del programma EEPROM EEPE è il segnale di abilitazione alla programmazione per la EEPROM. Quando viene scritta EEPE, la EEPROM verrà programmata in base all'impostazione dei bit EEPMn. Il bit EEMPE deve essere scritto su uno prima di scrivere uno logico su EEPE, altrimenti non avviene alcuna scrittura EEPROM. Quando il tempo di accesso in scrittura è trascorso, il bit EEPE viene cancellato dall'hardware. Quando EEPE è stato impostato, la CPU viene arrestata per due cicli prima che venga eseguita l'istruzione successiva.
Bit 0 - EERE: abilitazione lettura EEPROM
Il segnale di abilitazione lettura EEPROM - EERE - è lo strobo di lettura alla EEPROM. Quando l'indirizzo corretto è impostato nel registro EEAR, il bit EERE deve essere scritto su uno per attivare la lettura EEPROM. L'accesso in lettura alla EEPROM richiede un'istruzione ei dati richiesti sono immediatamente disponibili. Quando la EEPROM viene letta, la CPU viene arrestata per quattro cicli prima che venga eseguita l'istruzione successiva. L'utente deve interrogare il bit EEPE prima di avviare l'operazione di lettura. Se è in corso un'operazione di scrittura, non è possibile né leggere la EEPROM, né modificare il registro EEAR.
Orologio di sistema e opzioni dell'orologio
Sistemi di clock e loro distribuzione
Orologio della CPU
L'orologio della CPU è indirizzato alle parti del sistema interessate al funzionamento del core dell'AVR. Exampi di tali moduli sono il General Purpose Register File, lo Status Register e la Data memory che contiene lo Stack Pointer. L'arresto dell'orologio della CPU impedisce al core di eseguire operazioni e calcoli generali.
Orologio I / O - clkI / O
L'orologio I / O è utilizzato dalla maggior parte dei moduli I / O, come Timer / Counter. L'orologio di I / O viene utilizzato anche dal modulo Interrupt esterno, ma si noti che alcuni interrupt esterni vengono rilevati dalla logica asincrona, consentendo il rilevamento di tali interruzioni anche se l'orologio di I / O viene arrestato.
Flash Clock - clkFLASH
L'orologio Flash controlla il funzionamento dell'interfaccia Flash. L'orologio Flash è normalmente attivo contemporaneamente all'orologio della CPU.
Orologio ADC - clkADC
L'ADC è dotato di un dominio di clock dedicato. Ciò consente di arrestare la CPU e i clock I / O per ridurre il rumore generato dai circuiti digitali. Ciò fornisce risultati di conversione ADC più accurati.
PLL interno per la generazione veloce di clock periferici - clkPCK
Il PLL interno in ATtiny25 / 45/85 genera una frequenza di clock che è 8 volte moltiplicata da un ingresso sorgente. Per impostazione predefinita, il PLL utilizza l'uscita dell'oscillatore RC interno a 8.0 MHz come sorgente. In alternativa, se è impostato il bit LSM di PLLCSR, il PLL utilizzerà l'uscita dell'oscillatore RC diviso per due. Quindi l'uscita del PLL, il clock periferico veloce è di 64 MHz. Il clock periferico veloce, o un clock prescalato da quello, può essere selezionato come sorgente clock per Timer / Counter1 o come clock di sistema. Vedere Figura 6-2. La frequenza del clock periferico veloce è divisa per due quando è impostato LSM di PLLCSR, risultando in una frequenza di clock di 32 MHz. Si noti che LSM non può essere impostato se PLLCLK viene utilizzato come orologio di sistema.
Figura 6-2. Sistema di clock PCK.
Il PLL è bloccato sull'oscillatore RC e la regolazione dell'oscillatore RC tramite il registro OSCCAL regolerà contemporaneamente il clock periferico veloce. Tuttavia, anche se l'oscillatore RC viene portato a una frequenza superiore a 8 MHz, la frequenza di clock periferica veloce si satura a 85 MHz (caso peggiore) e rimane oscillante alla frequenza massima. Va notato che il PLL in questo caso non è più bloccato con l'orologio dell'oscillatore RC. Pertanto, si raccomanda di non portare le regolazioni OSCCAL su una frequenza superiore a 8 MHz per mantenere il PLL nel corretto intervallo operativo.
Il PLL interno è abilitato quando:
Il bit PLLE nel registro PLLCSR è impostato.
Il fusibile CKSEL è programmato su "0001".
Il fusibile CKSEL è programmato su "0011".
Il bit PLLCSR PLOCK è impostato quando PLL è bloccato. Sia l'oscillatore RC interno che il PLL sono spenti nelle modalità di spegnimento e stand-by.
PLL interno in modalità di compatibilità ATtiny15
Poiché ATtiny25 / 45/85 è un dispositivo di migrazione per gli utenti di ATtiny15, esiste una modalità di compatibilità ATtiny15 per la retrocompatibilità. La modalità di compatibilità ATtiny15 viene selezionata programmando i fusibili CKSEL su "0011".
Nella modalità di compatibilità ATtiny15 la frequenza dell'oscillatore RC interno è calibrata fino a 6.4 MHz e il fattore di moltiplicazione del PLL è impostato a 4x. Vedere Figura 6-3. Con queste regolazioni il sistema di clock è compatibile con ATtiny15 e il clock periferico veloce risultante ha una frequenza di 25.6 MHz (come in ATtiny15).
Figura 6-3. Sistema di clocking PCK in modalità di compatibilità ATtiny15.
Fonti dell'orologio
Il dispositivo dispone delle seguenti opzioni di sorgente di clock, selezionabili dai bit del fusibile flash come mostrato di seguito. Il clock della sorgente selezionata viene immesso nel generatore di clock dell'AVR e indirizzato ai moduli appropriati.
Tabella 6-1. Opzioni timbratura dispositivo Selezionare
Opzione di sincronizzazione del dispositivo | CKSEL[3:0](1) |
Orologio esterno (Vedere pagina 26) | 0000 |
Orologio PLL ad alta frequenza (Vedere pagina 26) | 0001 |
Oscillatore interno calibrato (Vedere pagina 27) | 0010(2) |
Oscillatore interno calibrato (Vedere pagina 27) | 0011(3) |
Oscillatore interno da 128 kHz (Vedere pagina 28) | 0100 |
Oscillatore in cristallo a bassa frequenza (Vedere pagina 29) | 0110 |
Oscillatore in cristallo / risonatore ceramico (Vedere pagina 29) | 1000 – 1111 |
Prenotato | 0101, 0111 |
Per tutti i fusibili "1" significa non programmato mentre "0" significa programmato.
Il dispositivo viene spedito con questa opzione selezionata.
Questo selezionerà la modalità di compatibilità ATtiny15, dove il clock di sistema è diviso per quattro, risultando in una frequenza di clock di 1.6 MHz. Per ulteriori informazioni, vedere "Oscillatore interno calibrato" a pagina 27.
Le varie scelte per ciascuna opzione di timbratura sono fornite nelle sezioni seguenti. Quando la CPU si riattiva dallo spegnimento, la sorgente di clock selezionata viene utilizzata per temporizzare l'avvio, garantendo un funzionamento stabile dell'oscillatore prima dell'inizio dell'esecuzione dell'istruzione. Quando la CPU si avvia dal ripristino, c'è un ritardo aggiuntivo che consente alla potenza di raggiungere un livello stabile prima di iniziare il normale funzionamento. L'oscillatore Watchdog viene utilizzato per cronometrare questa parte in tempo reale del tempo di avvio. Il numero di cicli dell'oscillatore WDT utilizzati per ogni timeout è mostrato in Tabella 6-2.
Tabella 6-2. Numero di cicli dell'oscillatore watchdog
Tipo Timeout | Numero di cicli |
4 millisecondi | 512 |
64 millisecondi | 8 mila (8,192) |
Orologio esterno
Per pilotare il dispositivo da una sorgente di clock esterna, CLKI deve essere pilotato come mostrato in Figura 6-4. Per far funzionare il dispositivo su un orologio esterno, i fusibili CKSEL devono essere programmati su "00".
Figura 6-4. Configurazione dell'unità orologio esterna
Quando è selezionata questa sorgente di clock, i tempi di avvio sono determinati dai fusibili SUT come mostrato in Tabella 6-3.
Tabella 6-3. Tempi di avvio per la selezione dell'orologio esterno
SULLA SCHIENA[1:0] | Tempo di avvio dallo spegnimento | Ritardo aggiuntivo dal ripristino | Utilizzo consigliato |
00 | 6 CK | 14CK | BOD abilitato |
01 | 6 CK | 14CK + 4ms | Potenza in rapida crescita |
10 | 6 CK | 14CK + 64ms | Potenza in lento aumento |
11 | Prenotato |
Quando si applica un clock esterno, è necessario evitare cambiamenti improvvisi nella frequenza di clock applicata per garantire un funzionamento stabile dell'MCU. Una variazione di frequenza superiore al 2% da un ciclo di clock al successivo può portare a comportamenti imprevedibili. È necessario garantire che l'MCU sia mantenuto in Reset durante tali cambiamenti nella frequenza di clock.
Si noti che la prevendita dell'orologio di sistema può essere utilizzata per implementare le modifiche del tempo di esecuzione della frequenza dell'orologio interno pur garantendo un funzionamento stabile. Fare riferimento a "Prescaler dell'orologio di sistema" a pagina 31 per maggiori dettagli.
Orologio PLL ad alta frequenza
Esiste un PLL interno che fornisce una frequenza di clock nominalmente di 64 MHz bloccata all'oscillatore RC per l'uso del timer / contatore periferico1 e per la sorgente del clock di sistema. Quando selezionato come sorgente del clock di sistema, programmando i fusibili CKSEL su '0001', viene diviso per quattro come mostrato in Tabella 6-4.
Tabella 6-4. Modalità operative del clock PLL ad alta frequenza
CKSEL[3:0] | Frequenza nominale |
0001 | 16 MHz |
Quando è selezionata questa sorgente di clock, i tempi di avvio sono determinati dai fusibili SUT come mostrato in Tabella 6-5.
Tabella 6-5. Tempi di avvio per il clock PLL ad alta frequenza
SULLA SCHIENA[1:0] | Tempo di avvio dallo spegnimento | Ritardo aggiuntivo dal ripristino all'accensione (VCC = 5.0 V) | Utilizzo consigliato |
00 | 14CK + 1K (1024) CK + 4ms | 4 millisecondi | BOD abilitato |
Tabella 6-5. Tempi di avvio per il clock PLL ad alta frequenza
SULLA SCHIENA[1:0] | Tempo di avvio dallo spegnimento | Ritardo aggiuntivo dal ripristino all'accensione (VCC = 5.0 V) | Utilizzo consigliato |
01 | 14CK + 16K (16384) CK + 4ms | 4 millisecondi | Potenza in rapida crescita |
10 | 14CK + 1K (1024) CK + 64ms | 4 millisecondi | Potenza in lento aumento |
11 | 14CK + 16K (16384) CK + 64ms | 4 millisecondi | Potenza in lento aumento |
Oscillatore interno calibrato
Per impostazione predefinita, l'oscillatore RC interno fornisce un clock di circa 8.0 MHz. Sebbene voltage dipendente dalla temperatura, questo orologio può essere calibrato molto accuratamente dall'utente. Vedere “Accumulatore oscillatore RC interno calibrato audace "a pagina 164 E "Velocità oscillatore interno" a pagina 192 per ulteriori dettagli. Il dispositivo viene spedito con il fusibile CKDIV8 programmato. Vedere "Prescaler dell'orologio di sistema" a pagina 31 per maggiori dettagli.
Questo orologio può essere selezionato come orologio di sistema programmando i fusibili CKSEL come mostrato in Tabella 6-6 a pagina
27. Se selezionato, funzionerà senza componenti esterni. Durante il ripristino, l'hardware carica il valore di calibrazione preprogrammato nel registro OSCCAL e quindi calibra automaticamente l'oscillatore RC. La precisione di questa calibrazione viene mostrata come Calibrazione di fabbrica in Tabella 21-2 a pagina 164.
Modificando il registro OSCCAL da SW, vedere "OSCCAL - Registro di calibrazione dell'oscillatore" a pagina 31, è possibile ottenere una maggiore precisione di calibrazione rispetto all'utilizzo della calibrazione di fabbrica. La precisione di questa calibrazione viene mostrata come Calibrazione utente in Tabella 21-2 a pagina 164.
Quando questo oscillatore viene utilizzato come clock del chip, l'oscillatore watchdog verrà comunque utilizzato per il timer watchdog e per il timeout di ripristino. Per ulteriori informazioni sul valore di calibrazione preprogrammato, vedere la sezione "Cali- bration Bytes "a pagina 150.
L'oscillatore interno può anche essere impostato per fornire un clock di 6.4 MHz scrivendo i fusibili CKSEL su "0011", come mostrato in Tabella 6-6 sotto. Questa impostazione è indicata come modalità di compatibilità ATtiny15 e ha lo scopo di fornire una sorgente di clock calibrata a 6.4 MHz, come in ATtiny15. Nella modalità di compatibilità ATtiny15 il PLL utilizza l'oscillatore interno funzionante a 6.4 MHz per generare un segnale di clock periferico a 25.6 MHz per Timer / Counter1 (vedere "Timer / contatore a 8 bit 1 in Modalità ATtiny15 ”a pagina 95). Notare che in questa modalità di funzionamento il segnale di clock a 6.4 MHz è sempre diviso per quattro, fornendo un clock di sistema a 1.6 MHz.
Tabella 6-6. Modalità operative dell'oscillatore RC calibrato interno
CKSEL[3:0] | Frequenza nominale |
0010(1) | 8.0 MHz |
0011(2) | 6.4 MHz |
Il dispositivo viene spedito con questa opzione selezionata.
Questa impostazione seleziona la modalità di compatibilità ATtiny15, in cui l'orologio di sistema è diviso per quattro, ottenendo una frequenza di clock di 1.6 MHz.
Quando l'oscillatore interno calibrato a 8 MHz è selezionato come sorgente di clock, i tempi di avvio sono determinati dai fusibili SUT come mostrato in Tabella 6-7 sotto.
Tabella 6-7. Tempi di avvio per il clock dell'oscillatore RC calibrato interno
SULLA SCHIENA[1:0] | Tempo di avvio dallo spegnimento | Ritardo aggiuntivo dal ripristino (VCC = 5.0 V) | Utilizzo consigliato |
00 | 6 CK | 14CK(1) | BOD abilitato |
01 | 6 CK | 14CK + 4ms | Potenza in rapida crescita |
10(2) | 6 CK | 14CK + 64ms | Potenza in lento aumento |
11 | Prenotato |
1. Se il fusibile RSTDISBL è programmato, questo tempo di avvio verrà aumentato a 14CK + 4 ms per garantire l'accesso alla modalità di programmazione.
2. Il dispositivo viene spedito con questa opzione selezionata.
Nella modalità di compatibilità ATtiny15 i tempi di avvio sono determinati dai fusibili SUT come mostrato in Tabella 6-8 sotto.
Tabella 6-8. Tempi di avvio per il clock dell'oscillatore RC calibrato interno (in modalità ATtiny15)
SULLA SCHIENA[1:0] | Tempo di avvio dallo spegnimento | Ritardo aggiuntivo dal ripristino (VCC = 5.0 V) | Utilizzo consigliato |
00 | 6 CK | 14CK + 64ms | |
01 | 6 CK | 14CK + 64ms | |
10 | 6 CK | 14CK + 4ms | |
11 | 1 CK | 14CK(1) |
Nota: se il fusibile RSTDISBL è programmato, questo tempo di avvio verrà aumentato a 14CK + 4 ms per garantire l'accesso alla modalità di programmazione.
In sintesi, ulteriori informazioni sulla modalità di compatibilità ATtiny15 sono disponibili nelle sezioni "Porta B (PB5: PB0)" pagina 2, "PLL interno in modalità di compatibilità ATtiny15" a pagina 24, "Timer / contatore 8 a 1 bit in modalità ATtiny15" attivato pagina 95, "Limitazioni di debugWIRE" a pagina 140, "Byte di calibrazione" a pagina 150 e in tabella "Orologio Prescaler Seleziona "a pagina 33.
Oscillatore interno da 128 kHz
L'oscillatore interno da 128 kHz è un oscillatore a bassa potenza che fornisce un clock di 128 kHz. La frequenza è nominale a 3V e 25°C. Questo orologio può essere selezionato come orologio di sistema programmando i fusibili CKSEL su “0100”.
Quando è selezionata questa sorgente di clock, i tempi di avvio sono determinati dai fusibili SUT come mostrato in Tabella 6-9.
Tabella 6-9. Tempi di avvio per l'oscillatore interno da 128 kHz
SULLA SCHIENA[1:0] | Tempo di avvio dallo spegnimento | Ritardo aggiuntivo dal ripristino | Utilizzo consigliato |
00 | 6 CK | 14CK(1) | BOD abilitato |
01 | 6 CK | 14CK + 4ms | Potenza in rapida crescita |
10 | 6 CK | 14CK + 64ms | Potenza in lento aumento |
11 | Prenotato |
Nota: se il fusibile RSTDISBL è programmato, questo tempo di avvio verrà aumentato a 14CK + 4 ms per garantire l'accesso alla modalità di programmazione.
Oscillatore in cristallo a bassa frequenza
Per utilizzare un orologio a 32.768 kHz come sorgente di clock per il dispositivo, è necessario selezionare l'oscillatore a cristalli a bassa frequenza impostando i fusibili CKSEL su "0110". Il cristallo dovrebbe essere collegato come mostrato in Figura 6-5. Per trovare la capacità di carico adatta per un crysal a 32.768 kHz, consultare la scheda tecnica del produttore.
Quando è selezionato questo oscillatore, i tempi di avvio sono determinati dai fusibili SUT come mostrato in Tabella 6-10.
Tabella 6-10. Tempi di avvio per la selezione dell'orologio dell'oscillatore a cristallo a bassa frequenza
SULLA SCHIENA[1:0] | Tempo di avvio dallo spegnimento | Ritardo aggiuntivo dal ripristino (VCC = 5.0 V) | Utilizzo consigliato |
00 | 1K (1024) CK(1) | 4 millisecondi | Potenza in aumento veloce o BOD abilitato |
01 | 1K (1024) CK(1) | 64 millisecondi | Potenza in lento aumento |
10 | 32K (32768) CK | 64 millisecondi | Frequenza stabile all'avvio |
11 | Prenotato |
Nota: queste opzioni devono essere utilizzate solo se la stabilità della frequenza all'avvio non è importante.
L'oscillatore a cristallo a bassa frequenza fornisce una capacità di carico interna, vedere Tabella 6-11 a ogni pin TOSC.
Tabella 6-11. Capacità dell'oscillatore a cristallo a bassa frequenza
Dispositivo | Osc. 32 kHz genere | Cap (Xtal1 / Tosc1) | Cap (Xtal2 / Tosc2) |
ATtiny25 / 45/85 | Osc di sistema. | 16 pF | 6 pF |
Oscillatore in cristallo / risonatore ceramico
XTAL1 e XTAL2 sono rispettivamente ingresso e uscita di un inversione amplifier che può essere configurato per l'uso come oscillatore su chip, come mostrato in Figura 6-5. Può essere utilizzato un cristallo di quarzo o un risonatore ceramico.
C1 e C2 dovrebbero essere sempre uguali sia per i cristalli che per i risonatori. Il valore ottimale dei condensatori dipende dal cristallo o dal risonatore in uso, dalla quantità di capacità parassita e dal rumore elettromagnetico dell'ambiente. Vengono fornite alcune linee guida iniziali per la scelta dei condensatori da utilizzare con i cristalli Tabella 6-12 sotto. Per i risonatori ceramici, devono essere utilizzati i valori del condensatore forniti dal produttore.
Tabella 6-12. Modalità operative dell'oscillatore a cristallo
CKSEL[3:1] | Gamma di frequenza (MHz) | Intervallo consigliato per i condensatori C1 e C2 per l'uso con cristalli (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: questa opzione non deve essere utilizzata con i cristalli, solo con risonatori in ceramica.
L'oscillatore può funzionare in tre diverse modalità, ciascuna ottimizzata per una specifica gamma di frequenze. La modalità di funzionamento è selezionata dai fusibili CKSEL [3: 1] come mostrato in Tabella 6-12.
Il fusibile CKSEL0 insieme ai fusibili SUT [1: 0] selezionano i tempi di avvio come mostrato in Tabella 6-13.
Tabella 6-13. Tempi di avvio per la selezione dell'orologio dell'oscillatore al cristallo
CKSEL0 | SULLA SCHIENA[1:0] | Tempo di avvio dallo spegnimento | Ritardo aggiuntivo dal ripristino | Utilizzo consigliato |
0 | 00 | 258 CK(1) | 14CK + 4ms | Risonatore ceramico, potenza in rapida ascesa |
0 | 01 | 258 CK(1) | 14CK + 64ms | Risonatore in ceramica, potenza in lento aumento |
0 | 10 | 1K (1024) CK(2) | 14CK | Risuonatore ceramico, abilitato BOD |
0 | 11 | 1K (1024) CK(2) | 14CK + 4ms | Risonatore ceramico, potenza in rapida ascesa |
1 | 00 | 1K (1024) CK(2) | 14CK + 64ms | Risonatore in ceramica, potenza in lento aumento |
1 | 01 | 16K (16384) CK | 14CK | Oscillatore in cristallo, BOD abilitato |
1 | 10 | 16K (16384) CK | 14CK + 4ms | Oscillatore in cristallo, potenza in rapida crescita |
1 | 11 | 16K (16384) CK | 14CK + 64ms | Oscillatore di cristallo, potenza in lento aumento |
Appunti
Queste opzioni devono essere utilizzate solo quando non si opera vicino alla frequenza massima del dispositivo e solo se la stabilità della frequenza all'avvio non è importante per l'applicazione. Queste opzioni non sono adatte per i cristalli.
Queste opzioni sono destinate all'uso con risuonatori ceramici e garantiranno la stabilità della frequenza all'avvio. Possono essere utilizzati anche con cristalli quando non operano vicino alla frequenza massima del dispositivo e se la stabilità della frequenza all'avvio non è importante per l'applicazione.
Sorgente di clock predefinita
Il dispositivo viene spedito con CKSEL = “0010”, SUT = “10” e CKDIV8 programmati. L'impostazione predefinita della sorgente di clock è quindi l'oscillatore RC interno che funziona a 8 MHz con il tempo di avvio più lungo e un clock di sistema iniziale prescaling di 8, con conseguente clock di sistema di 1.0 MHz. Questa impostazione predefinita garantisce che tutti gli utenti possano effettuare l'impostazione della sorgente di clock desiderata utilizzando un In-System o High-voltage Programmatore.
Prescaler orologio di sistema
L'orologio di sistema di ATtiny25 / 45/85 può essere diviso impostando il "CLKPR - Clock Prescale Register" a pagina 32. Questa funzione può essere utilizzata per ridurre il consumo energetico quando la richiesta di potenza di elaborazione è bassa. Questo può essere utilizzato con tutte le opzioni della sorgente di clock e influirà sulla frequenza di clock della CPU e di tutte le periferiche sincrone. clkI/O, clkADC, clkCPU e clkFLASH sono divisi per un fattore come mostrato in Tabella 6-15 a pagina 33.
Tempo di commutazione
Quando si passa tra le impostazioni del prescaler, il System Clock Prescaler garantisce che non si verifichino anomalie nel sistema di clock e che nessuna frequenza intermedia sia superiore né alla frequenza di clock corrispondente all'impostazione precedente, né alla frequenza di clock corrispondente alla nuova impostazione.
Il contatore di ondulazione che implementa il prescaler funziona alla frequenza del clock indiviso, che può essere più veloce della frequenza di clock della CPU. Pertanto, non è possibile determinare lo stato del prescaler, anche se fosse leggibile e il tempo esatto necessario per passare da una divisione di clock a un'altra non può essere previsto esattamente.
Dal momento in cui vengono scritti i valori CLKPS, ci vuole tra T1 + T2 e T1 + 2 * T2 prima che la nuova frequenza di clock sia attiva. In questo intervallo vengono prodotti 2 fronti di clock attivi. In questo caso, T1 è il periodo di clock precedente e T2 è il periodo corrispondente alla nuova impostazione del prescaler.
Buffer di uscita del clock
Il dispositivo può emettere l'orologio di sistema sul pin CLKO (se non utilizzato come pin XTAL2). Per abilitare l'uscita è necessario programmare il fusibile CKOUT. Questa modalità è adatta quando il chip clock viene utilizzato per pilotare altri circuiti sul sistema. Notare che l'orologio non verrà emesso durante il ripristino e che il normale funzionamento del pin I / O verrà ignorato quando viene programmato il fusibile. Quando il clock viene emesso su CLKO, è possibile selezionare l'oscillatore RC interno, l'oscillatore WDT, il PLL e il clock esterno (CLKI). Gli oscillatori a cristallo (XTAL1, XTAL2) non possono essere utilizzati per l'uscita del clock su CLKO. Se viene utilizzato il System Clock Prescaler, viene emesso l'orologio di sistema diviso.
Descrizione registro
OSCCAL - Registro di calibrazione dell'oscillatore
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x31 | CAL7 | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | OSCCALE |
Leggere/scrivere | R/N | R/N | R/N | R/N | R/N | R/N | R/N | R/N |
Bit 7: 0 - CAL [7: 0]: valore di calibrazione dell'oscillatore
Il registro di calibrazione dell'oscillatore viene utilizzato per regolare l'oscillatore RC interno calibrato per rimuovere le variazioni di processo dalla frequenza dell'oscillatore. Un valore di calibrazione preprogrammato viene scritto automaticamente in questo registro durante il ripristino del chip, fornendo la frequenza calibrata in fabbrica come specificato in Tabella 21-2 a pagina 164. Il software applicativo può scrivere questo registro per modificare la frequenza dell'oscillatore. L'oscillatore può essere calibrato sulle frequenze come specificato in Tabella 21-2 a pagina 164. La calibrazione al di fuori di tale intervallo non è garantita.
Notare che questo oscillatore viene utilizzato per temporizzare gli accessi in scrittura a EEPROM e Flash, e questi tempi di scrittura saranno influenzati di conseguenza. Se la EEPROM o la Flash sono scritte, non calibrare a più di 8.8 MHz. In caso contrario, la scrittura EEPROM o Flash potrebbe non riuscire.
Il bit CAL7 determina il range di funzionamento dell'oscillatore. Impostando questo bit su 0 si ottiene la gamma di frequenza più bassa, impostando questo bit su 1 si ottiene la gamma di frequenza più alta. Le due gamme di frequenza si sovrappongono, in altre parole un'impostazione di OSCCAL = 0x7F fornisce una frequenza maggiore di OSCCAL = 0x80.
I bit CAL [6: 0] vengono utilizzati per sintonizzare la frequenza all'interno dell'intervallo selezionato. Un'impostazione di 0x00 fornisce la frequenza più bassa in quella gamma e un'impostazione di 0x7F dà la frequenza più alta nella gamma.
Per garantire un funzionamento stabile dell'MCU, il valore di calibrazione deve essere modificato in piccolo. Una variazione della frequenza di oltre il 2% da un ciclo all'altro può portare a comportamenti imprevedibili. Le modifiche in OSCCAL non devono superare 0x20 per ciascuna calibrazione. È necessario garantire che l'MCU sia mantenuto in Reset durante tali cambiamenti nella frequenza di clock
Tabella 6-14. Intervallo di frequenza dell'oscillatore RC interno
Valore OSCCALE | Frequenza minima tipica rispetto alla frequenza nominale | Frequenza massima tipica rispetto alla frequenza nominale |
0x00 | 50% | 100% |
0x3F | 75% | 150% |
0x7F | 100% | 200% |
CLKPR - Registro della prescala dell'orologio
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x26 | CLKPCE | – | – | – | CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | CLKPR |
Leggere/scrivere | R/N | R | R | R | R/N | R/N | R/N | R/N |
Valore iniziale 0 0 0 0 Vedere la descrizione dei bit
Bit 7 - CLKPCE: abilitazione modifica del prescaler dell'orologio
Il bit CLKPCE deve essere scritto in uno logico per abilitare la modifica dei bit CLKPS. Il bit CLKPCE viene aggiornato solo quando gli altri bit in CLKPR vengono scritti simultaneamente a zero. CLKPCE viene cancellato dall'hardware quattro cicli dopo che è stato scritto o quando vengono scritti i bit CLKPS. La riscrittura del bit CLKPCE entro questo periodo di timeout non estende il periodo di timeout e non cancella il bit CLKPCE.
Bit 6: 4 - Ris: Bit riservati
Questi bit sono bit riservati nell'ATtiny25 / 45/85 e saranno sempre letti come zero.
Bit 3: 0 - CLKPS [3: 0]: Selezione del prescaler dell'orologio Bit 3 - 0
Questi bit definiscono il fattore di divisione tra la sorgente di clock selezionata e il clock di sistema interno. Questi bit possono essere scritti in fase di esecuzione per variare la frequenza di clock in base ai requisiti dell'applicazione. Poiché il divisore divide l'ingresso del master clock all'MCU, la velocità di tutte le periferiche sincrone viene ridotta quando viene utilizzato un fattore di divisione. Vengono forniti i fattori di divisione Tabella 6-15.
Per evitare modifiche involontarie della frequenza di clock, è necessario seguire una speciale procedura di scrittura per modificare i bit CLKPS:
Scrivere il bit CLKPCE (Clock Prescaler Change Enable) su uno e tutti gli altri bit in CLKPR su zero.
Entro quattro cicli, scrivere il valore desiderato in CLKPS mentre si scrive uno zero in CLKPCE.
Gli interrupt devono essere disabilitati quando si modifica l'impostazione del prescaler per assicurarsi che la procedura di scrittura non venga interrotta.
Il fusibile CKDIV8 determina il valore iniziale dei bit CLKPS. Se CKDIV8 non è programmato, i bit CLKPS verranno reimpostati su "0000". Se è programmato CKDIV8, i bit CLKPS vengono reimpostati su "0011", fornendo un fattore di divisione di otto all'avvio. Questa funzione dovrebbe essere utilizzata se la sorgente di clock selezionata ha una frequenza superiore alla frequenza massima del dispositivo nelle attuali condizioni operative. Si noti che qualsiasi valore può essere scritto nei bit CLKPS indipendentemente dall'impostazione del fusibile CKDIV8. Il software applicativo deve garantire che sia presente un fattore di divisione sufficiente
scelto se la sorgente di clock selezionata ha una frequenza superiore alla frequenza massima del dispositivo nelle attuali condizioni di funzionamento. Il dispositivo viene spedito con il fusibile CKDIV8 programmato.
Tabella 6-15. Prescaler orologio Selezionare
CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | Fattore di divisione dell'orologio |
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 | Prenotato |
1 | 0 | 1 | 0 | Prenotato |
1 | 0 | 1 | 1 | Prenotato |
1 | 1 | 0 | 0 | Prenotato |
1 | 1 | 0 | 1 | Prenotato |
1 | 1 | 1 | 0 | Prenotato |
1 | 1 | 1 | 1 | Prenotato |
Nota: il prescaler è disabilitato in modalità di compatibilità ATtiny15 e né la scrittura su CLKPR né la programmazione del fusibile CKDIV8 hanno alcun effetto sull'orologio di sistema (che sarà sempre 1.6 MHz).
Risparmio energetico e modalità di sospensione
Le elevate prestazioni e l'efficienza del codice leader del settore rendono i microcontrollori AVR la scelta ideale per applicazioni a bassa potenza. Inoltre, le modalità di sospensione consentono all'applicazione di spegnere i moduli inutilizzati nell'MCU, risparmiando così energia. L'AVR fornisce varie modalità di sospensione che consentono all'utente di adattare il consumo energetico ai requisiti dell'applicazione.
Modalità di sonno
Figura 6-1 a pagina 23 presenta i diversi sistemi di clock e la loro distribuzione in ATtiny25 / 45/85. La figura è utile per selezionare una modalità di sospensione appropriata. Tabella 7-1 mostra le diverse modalità di sonno e le loro fonti di risveglio.
Tabella 7-1. Domini di clock attivi e fonti di risveglio nelle diverse modalità di sospensione
Domini di clock attivi | Oscillatori | Fonti di risveglio | ||||||||||
Modalità di sospensione | clkCPU | clkFLASH | clkIO | clkADC | clkPCK | Sorgente orologio principale abilitata | INT0 e cambio pin | SPM / EEPROM
Pronto |
Condizione di partenza USI |
ADC | Altri I/O | Cane da guardia Interrompere |
Oziare | X | X | X | X | X | X | X | X | X | X | ||
Riduzione del rumore ADC | X | X | X(1) | X | X | X | X | |||||
Spegnimento | X(1) | X | X |
Nota: per INT0, solo interrupt di livello.
Per entrare in una delle tre modalità sleep, il bit SE in MCUCR deve essere scritto in uno logico e deve essere eseguita un'istruzione SLEEP. I bit SM [1: 0] nel registro MCUCR selezionano la modalità di sospensione (Idle, Riduzione rumore ADC o Spegnimento) che verrà attivata dall'istruzione SLEEP. Vedere Tabella 7-2 per un riepilogo.
Se si verifica un interrupt abilitato mentre l'MCU è in modalità di sospensione, l'MCU si riattiva. L'MCU viene quindi arrestato per quattro cicli oltre al tempo di avvio, esegue la routine di interrupt e riprende l'esecuzione dall'istruzione successiva a SLEEP. Il contenuto del Registro File e SRAM non vengono alterati quando il dispositivo si riattiva dallo stato di sospensione. Se si verifica un ripristino durante la modalità di sospensione, l'MCU si riattiva ed esegue il vettore di ripristino.
Nota: se per il risveglio viene utilizzato un interrupt attivato dal livello, il livello modificato deve essere mantenuto per un po' di tempo per riattivare l'MCU (e affinché l'MCU entri nella routine di servizio dell'interruzione). Vedere "Interrupt esterni" a pagina 49 per maggiori dettagli.
Modalità stand-by
Quando i bit SM[1:0] vengono scritti su 00, l'istruzione SLEEP fa entrare l'MCU in modalità Idle, arrestando la CPU ma consentendo a Analog Comparator, ADC, USI, Timer/Counter, Watchdog e al sistema di interrupt di continuare a funzionare. ating. Questa modalità di sospensione sostanzialmente blocca clkCPU e clkFLASH, consentendo l'esecuzione degli altri clock.
La modalità inattiva consente all'MCU di riattivarsi da interruzioni attivate dall'esterno e da interruzioni interne come l'overflow del timer. Se non è richiesta la riattivazione dall'interrupt del comparatore analogico, il comparatore analogico può essere spento impostando il bit ACD in "ACSR - Controllo del comparatore analogico e registro di stato" a pagina 120. Ciò ridurrà il consumo di energia in modalità inattiva. Se l'ADC è abilitato, una conversione inizia automaticamente quando si entra in questa modalità.
Modalità di riduzione del rumore ADC
Quando i bit SM[1:0] vengono scritti su 01, l'istruzione SLEEP fa entrare l'MCU in modalità ADC Noise Reduction, arrestando la CPU ma consentendo all'ADC, agli interrupt esterni e al Watchdog di continuare a funzionare (se abilitato). Questa modalità di sospensione arresta clkI/O, clkCPU e clkFLASH, consentendo l'esecuzione degli altri clock.
Ciò migliora l'ambiente di rumore per l'ADC, consentendo misurazioni a risoluzione più elevata. Se l'ADC è abilitato, una conversione inizia automaticamente quando si entra in questa modalità. A parte l'interrupt Conversion Complete ADC, solo un Reset Esterno, un Watchdog Reset, un Brown-out Reset, un SPM / EEPROM ready interrupt, un interrupt di livello esterno su INT0 o un pin change interrupt possono riattivare l'MCU dalla riduzione del rumore ADC modalità.
Modalità di spegnimento
Quando i bit SM [1: 0] vengono scritti su 10, l'istruzione SLEEP fa entrare l'MCU in modalità di spegnimento. In questa modalità, l'oscillatore viene arrestato, mentre gli interrupt esterni, il rilevamento della condizione di avvio dell'USI e il Watchdog continuano a funzionare (se abilitato). Solo un ripristino esterno, un ripristino watchdog, un ripristino brown-out, un interrupt della condizione di avvio USI, un interrupt di livello esterno su INT0 o un interrupt di cambio pin possono riattivare l'MCU. Questa modalità di sospensione arresta tutti gli orologi generati, consentendo il funzionamento solo dei moduli asincroni.
Disabilita BOD software
Quando il rilevatore di Brown-out (BOD) è abilitato dai fusibili BODLEVEL (vedere Tabella 20-4 a pagina 148), il CdA sta monitorando attivamente la fornitura voltage durante un periodo di sonno. In alcuni dispositivi è possibile risparmiare energia disabilitando il BOD via software in modalità di sospensione Power-Down. Il consumo energetico in modalità di sospensione sarà quindi allo stesso livello di quando BOD è disabilitato globalmente dai fusibili.
Se BOD è disabilitato dal software, la funzione BOD viene disattivata immediatamente dopo l'attivazione della modalità di sospensione. Al risveglio dalla sospensione, BOD viene nuovamente abilitato automaticamente. Ciò garantisce un funzionamento sicuro nel caso in cui il livello VCC sia sceso durante il periodo di sospensione.
Quando il BOD è stato disabilitato, il tempo di risveglio dalla modalità sleep sarà lo stesso di quello per il risveglio da RESET. L'utente deve configurare manualmente i tempi di riattivazione in modo tale che il riferimento bandgap abbia il tempo di avviarsi e il BOD funzioni correttamente prima che l'MCU continui a eseguire il codice. Vedere i bit dei fusibili SUT [1: 0] e CKSEL [3: 0] nella tabella "Fuse Low Byte" a pagina 149
La disabilitazione BOD è controllata dal bit BODS (BOD Sleep) del registro di controllo MCU, vedere "MCUCR - Controllo MCU Registrati "a pagina 37. Scrivere questo bit a uno disattiva BOD in Power-Down, mentre scrivere uno zero mantiene il BOD attivo. L'impostazione predefinita è zero, ovvero BOD attivo.
La scrittura sul bit BODS è controllata da una sequenza temporizzata e da un bit di abilitazione, vedere "MCUCR - MCU Control Regis- ter ”a pagina 37.
Limitazioni
La funzionalità di disabilitazione BOD è stata implementata solo nei seguenti dispositivi:
ATtiny25, revisione E e versioni successive
ATtiny45, revisione D e versioni successive
ATtiny85, revisione C e versioni successive
Le revisioni sono contrassegnate sulla confezione del dispositivo e possono essere individuate come segue:
Lato inferiore dei pacchetti 8P3 e 8S2
Lato superiore della confezione 20M1
Registro di riduzione della potenza
Il registro di riduzione della potenza (PRR), vedere "PRR - Registro di riduzione della potenza" a pagina 38, fornisce un metodo per ridurre il consumo energetico arrestando l'orologio delle singole periferiche. Lo stato corrente della periferica è congelato e i registri I / O non possono essere letti o scritti. Le risorse utilizzate dalla periferica quando si ferma l'orologio rimarranno occupate, quindi la periferica nella maggior parte dei casi dovrebbe essere disabilitata prima di arrestare l'orologio. La riattivazione di un modulo, che viene eseguita cancellando il bit in PRR, pone il modulo nello stesso stato in cui si trovava prima dell'arresto.
L'arresto del modulo può essere utilizzato in modalità Idle e Active per ridurre in modo significativo il consumo energetico complessivo. In tutte le altre modalità di sospensione, l'orologio è già fermo. Vedere "Corrente di alimentazione dei moduli I / O" a pagina 177 per esempioampmeno.
Riduzione al minimo del consumo energetico
Ci sono diversi problemi da considerare quando si cerca di ridurre al minimo il consumo energetico in un sistema controllato da AVR. In generale, le modalità di sospensione dovrebbero essere utilizzate il più possibile e la modalità di sospensione dovrebbe essere selezionata in modo che siano operative il minor numero possibile di funzioni del dispositivo. Tutte le funzioni non necessarie dovrebbero essere disabilitate. In particolare, i seguenti moduli potrebbero richiedere una considerazione speciale quando si cerca di ottenere il minor consumo energetico possibile.
Convertitore analogico-digitale
Se abilitato, l'ADC sarà abilitato in tutte le modalità di sospensione. Per risparmiare energia, l'ADC deve essere disabilitato prima di entrare in qualsiasi modalità di sospensione. Quando l'ADC viene spento e riacceso, la conversione successiva sarà una conversione estesa. Fare riferimento a "Convertitore da analogico a digitale" a pagina 122 per i dettagli sul funzionamento dell'ADC.
Comparatore analogico
Quando si entra in modalità Idle, il comparatore analogico deve essere disabilitato se non utilizzato. Quando si accede alla modalità di riduzione del rumore ADC, il comparatore analogico deve essere disabilitato. Nelle altre modalità di sospensione, il comparatore analogico viene disabilitato automaticamente. Tuttavia, se il comparatore analogico è impostato per utilizzare il volume internotage Riferimento come input, il comparatore analogico deve essere disabilitato in tutte le modalità di sospensione. In caso contrario, il volume internotage Riferimento sarà abilitato, indipendentemente dalla modalità di sospensione. Fare riferimento a "Comparatore analogico" a pagina 119 per i dettagli su come configurare il comparatore analogico.
Rilevatore di Brown-out
Se il rilevatore di Brown-out non è necessario nell'applicazione, questo modulo deve essere spento. Se il rilevatore di Brown-out è abilitato dai fusibili BODLEVEL, sarà abilitato in tutte le modalità di sospensione e quindi consumerà sempre energia. Nelle modalità di sonno più profondo, ciò contribuirà in modo significativo al consumo totale di corrente. Vedere "Brown-out Detec- zione "a pagina 41 E "Disabilitazione BOD software" a pagina 35 per i dettagli su come configurare il rilevatore di Brown-out.
Volume internotage Riferimento
Il volume internotage Il riferimento sarà abilitato quando richiesto dal rilevamento del Brown-out, dal comparatore analogico o dall'ADC. Se questi moduli sono disabilitati come descritto nelle sezioni precedenti, il volume internotagIl riferimento sarà disabilitato e non consumerà energia. Alla riaccensione, l'utente deve consentire l'avvio del riferimento prima di utilizzare l'uscita. Se il riferimento viene mantenuto in modalità di sospensione, l'uscita può essere utilizzata immediatamente. Fare riferimento a “Volume Internotage Riferimento” a pagina 42 per i dettagli sull'orario di avvio.
Timer di controllo
Se il timer watchdog non è necessario nell'applicazione, questo modulo deve essere disattivato. Se il timer watchdog è abilitato, sarà abilitato in tutte le modalità di sospensione e, quindi, consumerà sempre energia. Nelle modalità di sonno più profondo, ciò contribuirà in modo significativo al consumo totale di corrente. Fare riferimento a "Watchdog Timer" a pagina 42 per i dettagli su come configurare Watchdog Timer.
Perni della porta
Quando si entra in una modalità di sospensione, tutti i pin della porta devono essere configurati per utilizzare la potenza minima. La cosa più importante è quindi assicurarsi che nessun perno guidi carichi resistivi. Nelle modalità di sospensione in cui sono interrotti sia il clock I/O (clkI/O) che il clock ADC (clkADC), i buffer di input del dispositivo saranno disabilitati. Ciò garantisce che non venga consumata energia
dalla logica di ingresso quando non necessario. In alcuni casi, la logica di input è necessaria per rilevare le condizioni di attivazione e
sarà quindi abilitato. Fare riferimento alla sezione "Abilitazione dell'ingresso digitale e modalità di sospensione" a pagina 57 per i dettagli su quali pin sono abilitati. Se il buffer di ingresso è abilitato e il segnale di ingresso è lasciato flottante o ha un livello di segnale analogico vicino a VCC/2, il buffer di ingresso utilizzerà una potenza eccessiva.
Per i pin di ingresso analogico, il buffer di ingresso digitale deve essere sempre disabilitato. Un livello di segnale analogico vicino a VCC/2 su un pin di ingresso può causare una corrente significativa anche in modalità attiva. I buffer degli ingressi digitali possono essere disabilitati scrivendo nel registro di disabilitazione degli ingressi digitali (DIDR0). Fare riferimento a "DIDR0 - Registro di disabilitazione ingresso digitale 0" a pagina 121 per maggiori dettagli.
Descrizione registro
MCUCR - Registro di controllo MCU
Il registro di controllo MCU contiene bit di controllo per la gestione dell'alimentazione.
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | CORPI | PUD | SE | SM1 | SM0 | CORPO | ISC01 | ISC00 | MCUCR |
Leggere/scrivere | R | R/N | R/N | R/N | R/N | R | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 - BODS: BOD Sleep
La funzionalità di disabilitazione BOD è disponibile solo in alcuni dispositivi. Vedere "Limitazioni" a pagina 36.
Per disabilitare BOD durante il sonno (vedi Tabella 7-1 a pagina 34) il bit BODS deve essere scritto in uno logico. Questo è controllato da una sequenza temporizzata e dal bit di abilitazione, BODSE in MCUCR. Innanzitutto, sia BODS che BODSE devono essere impostati su uno. In secondo luogo, entro quattro cicli di clock, BODS deve essere impostato su uno e BODSE deve essere impostato su zero. Il bit BODS è attivo tre cicli di clock dopo l'impostazione. Un'istruzione sleep deve essere eseguita mentre BODS è attivo per disattivare BOD per la modalità sleep effettiva. Il bit BODS viene cancellato automaticamente dopo tre cicli di clock.
Nei dispositivi in cui Sleeping BOD non è stato implementato, questo bit non è utilizzato e leggerà sempre zero.
Bit 5 - SE: Abilita sospensione
Il bit SE deve essere scritto su uno logico per far entrare l'MCU in modalità sleep quando viene eseguita l'istruzione SLEEP. Per evitare che l'MCU entri in modalità sleep a meno che non sia lo scopo del programmatore, si consiglia di scrivere il bit Sleep Enable (SE) in uno appena prima dell'esecuzione dell'istruzione SLEEP e di cancellarlo immediatamente dopo il risveglio.
Bit 4: 3 - SM [1: 0]: modalità di sospensione Seleziona bit 1 e 0
Questi bit selezionano tra le tre modalità di sospensione disponibili come mostrato in Tabella 7-2.
Tabella 7-2. Modalità sospensione Seleziona
SM1 | SM0 | Modalità di sospensione |
0 | 0 | Oziare |
0 | 1 | Riduzione del rumore ADC |
1 | 0 | Spegnimento |
1 | 1 | Prenotato |
Bit 2 - BODSE: BOD Sleep Enable
La funzionalità di disabilitazione BOD è disponibile solo in alcuni dispositivi. Vedere "Limitazioni" a pagina 36.
Il bit BODSE consente l'impostazione del bit di controllo BODS, come spiegato nella descrizione del bit BODS. La disabilitazione del BOD è controllata da una sequenza temporizzata.
Questo bit non è utilizzato nei dispositivi in cui la disabilitazione BOD del software non è stata implementata e verrà letto come zero in quei dispositivi.
PRR - Registro di riduzione della potenza
Il registro di riduzione della potenza fornisce un metodo per ridurre il consumo energetico consentendo la disabilitazione dei segnali di clock delle periferiche.
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x20 | – | – | – | – | PRIM1 | PRIM0 | prusia | PRAD | PRR |
Leggere/scrivere | R | R | R | R | R/N | R/N | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7: 4 - Ris: Bit riservati
Questi bit sono bit riservati nell'ATtiny25 / 45/85 e saranno sempre letti come zero.
Bit 3 - PRTIM1: Timer / contatore di riduzione della potenza1
Scrivendo uno logico a questo bit si arresta il modulo Timer / Counter1. Quando il Timer / Contatore1 è abilitato, il funzionamento continuerà come prima dello spegnimento.
Bit 2 - PRTIM0: Timer / contatore di riduzione della potenza0
Scrivendo uno logico a questo bit si arresta il modulo Timer / Counter0. Quando il Timer / Contatore0 è abilitato, il funzionamento continuerà come prima dello spegnimento.
Bit 1 - PRUSI: Power Reduction USI
Scrivendone uno logico a questo bit, l'USI arresta l'orologio del modulo. Quando si riattiva l'USI, l'USI deve essere inizializzato di nuovo per garantire il corretto funzionamento.
Bit 0 - PRADC: ADC con riduzione della potenza
Scrivendo uno logico a questo bit si arresta l'ADC. L'ADC deve essere disabilitato prima dello spegnimento. Si noti che l'orologio dell'ADC viene utilizzato anche da alcune parti del comparatore analogico, il che significa che il comparatore analogico non può essere utilizzato quando questo bit è alto.
Controllo e ripristino del sistema
Ripristino dell'AVR
Durante il ripristino, tutti i registri di I / O vengono impostati sui valori iniziali e il programma inizia l'esecuzione da Reset Vector. L'istruzione inserita nel vettore di ripristino deve essere un'istruzione RJMP - Salto relativo - per la routine di gestione del ripristino. Se il programma non abilita mai una sorgente di interrupt, i vettori di interrupt non vengono utilizzati e il codice del programma regolare può essere posizionato in queste posizioni. Lo schema del circuito in Figura 8-1 mostra la logica di ripristino. Vengono forniti i parametri elettrici del circuito di ripristino "Caratteristiche del sistema e del ripristino" a pagina 165.
Figura 8-1 Reimposta logica
Le porte I / O dell'AVR vengono immediatamente ripristinate al loro stato iniziale quando una sorgente di ripristino diventa attiva. Ciò non richiede l'esecuzione di alcuna sorgente di clock.
Dopo che tutte le sorgenti di ripristino sono diventate inattive, viene richiamato un contatore di ritardo, allungando il ripristino interno. Ciò consente alla potenza di raggiungere un livello stabile prima che inizi il normale funzionamento. Il periodo di timeout del contatore di ritardo è definito dall'utente tramite i fusibili SUT e CKSEL. Le diverse selezioni per il periodo di ritardo sono presentate in "Orologio Fonti ”a pagina 25.
Reimposta sorgenti
L'ATtiny25 / 45/85 ha quattro fonti di ripristino:
Ripristino all'accensione. L'MCU viene ripristinato quando l'alimentazione voltage è inferiore alla soglia di ripristino all'accensione (VPOT).
Reset esterno. L'MCU viene ripristinato quando un livello basso è presente sul pin RESET per un tempo superiore alla lunghezza minima dell'impulso.
Ripristino watchdog. L'MCU viene ripristinato quando il periodo del timer watchdog scade e il watchdog è abilitato.
Ripristino del Brown-out. L'MCU viene ripristinato quando l'alimentazione voltage VCC è al di sotto della soglia di Brown-out Reset (VBOT) e il Rilevatore di Brown-out è abilitato.
Ripristino all'accensione
Un impulso di ripristino all'accensione (POR) viene generato da un circuito di rilevamento su chip. Il livello di rilevamento è definito in "Sys- caratteristiche e azzeramento ”a pagina 165. Il POR viene attivato ogni volta che VCC è al di sotto del livello di rilevamento. Il circuito POR può essere utilizzato per attivare il ripristino all'avvio, nonché per rilevare un'interruzione dell'alimentazione voltage.
Un circuito Power-on Reset (POR) assicura che il dispositivo venga ripristinato dall'accensione. Raggiungimento della soglia di ripristino all'accensione voltage richiama il contatore di ritardo, che determina per quanto tempo il dispositivo viene mantenuto in RESET dopo l'aumento di VCC. Il segnale di RESET viene riattivato, senza alcun ritardo, quando VCC scende al di sotto del livello di rilevamento.
Figura 8-2. Avvio MCU, RESET Legato a VCC
RIPRISTINO INTERNO
Figura 8-3. Avvio MCU, RESET esteso esternamente
Reset esterno
Un Reset Esterno è generato da un livello basso sul pin RESET se abilitato. Resettare impulsi più lunghi della durata minima dell'impulso (vedere "Caratteristiche del sistema e del ripristino" a pagina 165) genererà un reset, anche se l'orologio non è in funzione. Non è garantito che impulsi più brevi generino un reset. Quando il segnale applicato raggiunge la soglia di ripristino Voltage – VRST – sul suo fronte positivo, il contatore di ritardo avvia l'MCU dopo che il periodo di Timeout è scaduto.
Figura 8-4. Ripristino esterno durante il funzionamento
Rilevamento di Brown-out
ATtiny25/45/85 dispone di un circuito BOD (On-chip Brown-out Detection) per il monitoraggio del livello VCC durante il funzionamento confrontandolo con un livello di trigger fisso. Il livello di trigger per il BOD può essere selezionato dai fusibili BODLEVEL. Il livello di trigger ha un'isteresi per garantire il rilevamento del brown-out senza picchi. L'isteresi sul livello di rilevamento deve essere interpretata come VBOT+ = VBOT + VHYST/2 e VBOT- = VBOT – VHYST/2.
Quando il BOD è abilitato e VCC scende a un valore inferiore al livello di trigger (VBOT-in Figura 8-5), viene immediatamente attivato il Brown-out Reset. Quando VCC aumenta al di sopra del livello di trigger (VBOT+ in Figura 8-5), il contatore di ritardo avvia l'MCU allo scadere del periodo di timeout tTOUT.
Il circuito BOD rileverà solo un calo di VCC se il voltage rimane al di sotto del livello di trigger più a lungo di tBOD dato "Caratteristiche del sistema e del ripristino" a pagina 165.
Ripristino watchdog
Quando il Watchdog scade, genererà un breve impulso di ripristino della durata di un ciclo CK. Sul fronte di discesa di questo impulso, il timer di ritardo inizia a contare il periodo di timeout tTOUT. Fare riferimento a "Watchdog Timer" a pagina 42 per i dettagli sul funzionamento del Watchdog Timer.
Voltage Segnali di abilitazione riferimento e tempo di avvio
il volumetagIl riferimento ha un tempo di avvio che può influenzare il modo in cui dovrebbe essere utilizzato. Il tempo di avvio è dato in "Caratteristiche del sistema e del ripristino" a pagina 165. Per risparmiare energia, il riferimento non è sempre attivato. Il riferimento è attivo nelle seguenti situazioni:
Quando il BOD è abilitato (programmando i bit fusibile BODLEVEL [2: 0]).
Quando il riferimento bandgap è collegato al comparatore analogico (impostando il bit ACBG in ACSR).
Quando l'ADC è abilitato.
Pertanto, quando il BOD non è abilitato, dopo aver impostato il bit ACBG o abilitato l'ADC, l'utente deve sempre consentire l'avvio del riferimento prima che venga utilizzata l'uscita dal comparatore analogico o dall'ADC. Per ridurre il consumo di energia in modalità di spegnimento, l'utente può evitare le tre condizioni sopra per assicurarsi che il riferimento sia spento prima di entrare in modalità di spegnimento.
Timer di controllo
Il Watchdog Timer è sincronizzato da un oscillatore su chip che funziona a 128 kHz. Controllando il prescaler Watchdog Timer, l'intervallo di ripristino watchdog può essere regolato come mostrato in Tabella 8-3 a pagina 46. L'istruzione WDR - Watchdog Reset - reimposta il Watchdog Timer. Anche il timer watchdog viene resettato quando è disabilitato e quando si verifica un reset del chip. È possibile selezionare dieci diversi periodi del ciclo di clock per determinare il periodo di ripristino. Se il periodo di ripristino scade senza un altro ripristino watchdog, ATtiny25 / 45/85 si ripristina ed esegue dal vettore di ripristino. Per i dettagli sui tempi del ripristino del watchdog, fare riferimento a Tabella 8-3 a pagina 46.
Il Watchdog Timer può anche essere configurato per generare un interrupt invece di un reset. Questo può essere molto utile quando si utilizza Watchdog per riattivarsi dallo spegnimento.
Per evitare la disattivazione involontaria del Watchdog o la modifica involontaria del periodo di time-out, due diversi livelli di sicurezza vengono selezionati dal fusibile WDTON come mostrato in Tabella 8-1 Fare riferimento a "Sequenze temporizzate per cambiare la configurazione rappresentazione del Watchdog Timer "a pagina 43 per maggiori dettagli.
Tabella 8-1. Configurazione WDT in funzione delle impostazioni dei fusibili di WDTON
WDTON | Livello di sicurezza | Stato iniziale WDT | Come disabilitare WDT | Come modificare il timeout |
Non programmato | 1 | Disabilitato | Sequenza temporizzata | Nessuna limitazione |
Programmato | 2 | Abilitato | Sempre abilitato | Sequenza temporizzata |
Figura 8-7. Timer cane da guardia
Sequenze temporizzate per la modifica della configurazione del timer watchdog
La sequenza per modificare la configurazione differisce leggermente tra i due livelli di sicurezza. Procedure separate sono descritte per ogni livello.
Livello di sicurezza 1: in questa modalità, il Watchdog Timer è inizialmente disabilitato, ma può essere abilitato scrivendo il bit WDE su uno senza alcuna restrizione. È necessaria una sequenza temporizzata quando si disabilita un Watchdog Timer abilitato. Per disabilitare un Watchdog Timer abilitato, è necessario seguire la seguente procedura:
Nella stessa operazione, scrivere uno logico in WDCE e WDE. Uno logico deve essere scritto in WDE indipendentemente dal valore precedente del bit WDE.
Entro i successivi quattro cicli di clock, nella stessa operazione, scrivere i bit WDE e WDP come desiderato, ma con il bit WDCE azzerato.
Livello di sicurezza 2: in questa modalità, il Watchdog Timer è sempre abilitato e il bit WDE sarà sempre letto come uno. È necessaria una sequenza temporizzata quando si modifica il periodo di timeout watchdog. Per modificare il Watchdog Time-out è necessario seguire la seguente procedura:
Nella stessa operazione, scriverne uno logico in WDCE e WDE. Anche se il WDE è sempre impostato, il WDE deve essere scritto su uno per avviare la sequenza temporizzata.
Entro i successivi quattro cicli di clock, nella stessa operazione, scrivere i bit WDP come desiderato, ma con il bit WDCE azzerato. Il valore scritto nel bit WDE è irrilevante.
Codice Example
Il seguente codice esample mostra un assembly e una funzione C per disattivare il WDT. L'example presuppone che gli interrupt siano controllati (ad esempio, disabilitandoli globalmente) in modo che non si verifichino interrupt durante l'esecuzione di queste funzioni.
Codice assemblaggio Example(1) |
WDT_off:
sdr ; Cancella WDRF in MCUSR ldi r16, (0< fuori MCUSR, r16 ; Scrivi uno logico in WDCE e WDE ; Mantieni la vecchia impostazione del prescaler per evitare un ripristino involontario del watchdog in r16, WDTCR ori r16, (1< fuori WDTCR, r16 ; Disattiva WDT ldi r16, (0< fuori WDTCR, r16 ritirare |
Codice C Example(1) |
void WDT_off(void)
{ _WDR (); /* Cancella WDRF in MCUSR */ MCUSR = 0x00 /* Scrive uno logico in WDCE e WDE */ WDTCR |= (1< / * Disattiva WDT * / WDTCR = 0x00; } |
Nota: 1. Vedi “Codice Example” a pagina 6.
Descrizione registro
MCUSR - Registro di stato MCU
Il registro di stato dell'MCU fornisce informazioni su quale sorgente di ripristino ha causato un ripristino dell'MCU.
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 | – | – | – | – | WDRF | BORF | EST | PORFO | MCUSR |
Leggere/scrivere | R | R | R | R | R/N | R/N | R/N | R/N |
Valore iniziale 0 0 0 0 Vedere la descrizione dei bit
Bit 7: 4 - Ris: Bit riservati
Questi bit sono bit riservati nell'ATtiny25 / 45/85 e saranno sempre letti come zero.
Bit 3 - WDRF: flag di ripristino watchdog
Questo bit viene impostato se si verifica un ripristino del watchdog. Il bit viene resettato da un Power-on Reset o scrivendo uno zero logico nel flag.
Bit 2 - BORF: Flag di ripristino brown-out
Questo bit viene impostato se si verifica un ripristino brown-out. Il bit viene resettato da un Power-on Reset o scrivendo uno zero logico nel flag.
Bit 1 - EXTRF: Flag di ripristino esterno
Questo bit viene impostato se si verifica un ripristino esterno. Il bit viene resettato da un Power-on Reset o scrivendo uno zero logico nel flag.
Bit 0 - PORF: Flag di ripristino all'accensione
Questo bit viene impostato se si verifica un ripristino all'accensione. Il bit viene resettato solo scrivendo uno zero logico nel flag.
Per utilizzare i flag di ripristino per identificare una condizione di ripristino, l'utente deve leggere e quindi ripristinare l'MCUSR il prima possibile nel programma. Se il registro viene cancellato prima che si verifichi un altro ripristino, è possibile trovare l'origine del ripristino esaminando i flag di ripristino.
WDTCR - Watchdog Timer Control Register
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x21 | WDIF | WDI | WDP3 | WDCE | WDE | WDP2 | WDP1 | WDP0 | WDTCR |
Leggere/scrivere | R/N | R/N | R/N | R/N | R/N | R/N | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
Bit 7 - WDIF: Flag di interruzione del timeout del watchdog
Questo bit viene impostato quando si verifica un timeout nel timer watchdog e il timer watchdog è configurato per l'interrupt. WDIF viene cancellato dall'hardware durante l'esecuzione del vettore di gestione degli interrupt corrispondente. In alternativa, WDIF viene cancellato scrivendone uno logico nel flag. Quando sono impostati i bit I in SREG e WDIE, viene eseguito l'interrupt di timeout del watchdog.
Bit 6 - WDIE: abilitazione interrupt timeout watchdog
Quando questo bit viene scritto su uno, WDE viene azzerato e viene impostato il bit I nel registro di stato, viene abilitato l'interrupt di timeout del watchdog. In questa modalità viene eseguito il corrispondente interrupt invece di un reset se si verifica un timeout nel Watchdog Timer.
Se è impostato WDE, WDIE viene automaticamente cancellato dall'hardware quando si verifica un timeout. Ciò è utile per mantenere la sicurezza Watchdog Reset durante l'utilizzo dell'interrupt. Dopo che il bit WDIE è stato cancellato, il timeout successivo genererà un ripristino. Per evitare il ripristino del watchdog, è necessario impostare WDIE dopo ogni interruzione.
Tabella 8-2. Configurazione del timer watchdog
WDE | WDI | Stato del timer watchdog | Azione in caso di timeout |
0 | 0 | Fermato | Nessuno |
0 | 1 | Corsa | Interrompere |
1 | 0 | Corsa | Reset |
1 | 1 | Corsa | Interrompere |
Bit 4 - WDCE: Watchdog Change Enable
Questo bit deve essere impostato quando il bit WDE viene scritto sullo zero logico. In caso contrario, il Watchdog non verrà disabilitato. Una volta scritto su uno, l'hardware cancellerà questo bit dopo quattro cicli di clock. Fare riferimento alla descrizione del bit WDE per una procedura di disabilitazione Watchdog. Questo bit deve essere impostato anche quando si cambiano i bit del prescaler. Vedere “Sequenze temporizzate per modificare la configurazione del timer watchdog "a pagina 43.
Bit 3 - WDE: Watchdog Enable
Quando il WDE viene scritto in uno logico, il Watchdog Timer è abilitato e se il WDE viene scritto in uno logico, la funzione Watchdog Timer è disabilitata. WDE può essere cancellato solo se il bit WDCE ha il livello logico uno. Per disabilitare un Watchdog Timer abilitato, è necessario seguire la seguente procedura:
Nella stessa operazione, scrivere uno logico in WDCE e WDE. Uno logico deve essere scritto in WDE anche se è impostato su uno prima dell'inizio dell'operazione di disabilitazione.
Entro i successivi quattro cicli di clock, scrivere uno 0 logico in WDE. Questo disabilita il Watchdog.
Nel livello di sicurezza 2 non è possibile disabilitare il Watchdog Timer, anche con l'algoritmo sopra descritto. Vedere "Sequenze temporizzate per la modifica della configurazione del timer watchdog" a pagina 43.
Nel livello di sicurezza 1, WDE viene sovrascritto da WDRF in MCUSR. Vedere "MCUSR - Registro di stato MCU" a pagina 44 per la descrizione di WDRF. Ciò significa che WDE è sempre impostato quando è impostato WDRF. Per cancellare WDE, è necessario cancellare WDRF prima di disabilitare Watchdog con la procedura sopra descritta. Questa funzione garantisce più ripristini durante le condizioni che causano il guasto e un avvio sicuro dopo il guasto.
Nota: se il timer watchdog non verrà utilizzato nell'applicazione, è importante eseguire una procedura di disabilitazione watchdog durante l'inizializzazione del dispositivo. Se il Watchdog viene accidentalmente abilitato, ad esample da un puntatore fuori controllo o da una condizione di brown-out, il dispositivo verrà ripristinato, il che a sua volta porterà a un nuovo ripristino del watchdog. Per evitare questa situazione, il software applicativo dovrebbe sempre cancellare il flag WDRF e il bit di controllo WDE nella routine di inizializzazione.
Bit 5, 2: 0 - WDP [3: 0]: Watchdog Timer Prescaler 3, 2, 1 e 0
I bit WDP [3: 0] determinano il prescaling del timer watchdog quando il timer watchdog è abilitato. I diversi valori di prescaling e i rispettivi periodi di timeout corrispondenti vengono visualizzati in Tabella 8-3.
Tabella 8-3. Selezione prescala timer watchdog
WDP3 | WDP2 | WDP1 | WDP0 | Numero di cicli dell'oscillatore WDT | Timeout tipico a VCC = 5.0 V |
0 | 0 | 0 | 0 | Cicli 2K (2048) | 16 millisecondi |
0 | 0 | 0 | 1 | Cicli 4K (4096) | 32 millisecondi |
0 | 0 | 1 | 0 | Cicli 8K (8192) | 64 millisecondi |
0 | 0 | 1 | 1 | Cicli 16K (16384) | Anno 0.125 |
0 | 1 | 0 | 0 | Cicli 32K (32764) | Anno 0.25 |
0 | 1 | 0 | 1 | Cicli 64K (65536) | Anno 0.5 |
0 | 1 | 1 | 0 | Cicli 128K (131072) | Anno 1.0 |
0 | 1 | 1 | 1 | Cicli 256K (262144) | Anno 2.0 |
1 | 0 | 0 | 0 | Cicli 512K (524288) | Anno 4.0 |
1 | 0 | 0 | 1 | Cicli 1024K (1048576) | Anno 8.0 |
Tabella 8-3. Watchdog Timer Prescale Select (continua)
WDP3 | WDP2 | WDP1 | WDP0 | Numero di cicli dell'oscillatore WDT | Timeout tipico a VCC = 5.0 V |
1 | 0 | 1 | 0 | Prenotato(1) | |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 0 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
Nota: 1. Se selezionata, verrà utilizzata una delle impostazioni valide inferiori a 0b1010.
interrupt
Questa sezione descrive le specifiche della gestione degli interrupt come eseguita in ATtiny25 / 45/85. Per una spiegazione generale della gestione delle interruzioni dell'AVR, fare riferimento a "Gestione del ripristino e dell'interruzione" a pagina 12.
Interrompi i vettori in ATtiny25 / 45/85
I vettori di interrupt di ATtiny25 / 45/85 sono descritti in Tabella 9-1sotto.
Tabella 9-1. Ripristina e interrompi i vettori
Vettore n. | Indirizzo del programma | Fonte | Definizione di interruzione |
1 | 0x0000 | RESET | Pin esterno, reset all'accensione, reset brown-out, reset watchdog |
2 | 0x0001 | INT0 | Richiesta di interrupt esterno 0 |
3 | 0x0002 | PCINT0 | Richiesta di interruzione modifica pin 0 |
4 | 0x0003 | TIMER1_COMPA | Confronto timer / contatore1 Corrispondenza A |
5 | 0x0004 | TIMER1_OVF | Overflow timer / contatore1 |
6 | 0x0005 | TIMER0_OVF | Overflow timer / contatore0 |
7 | 0x0006 | EE_RDY | EEPROM pronto |
8 | 0x0007 | ANA_COMP | Comparatore analogico |
9 | 0x0008 | ADC | Conversione ADC completata |
10 | 0x0009 | TIMER1_COMP | Corrispondenza confronto timer / contatore1 B |
11 | 0x000Un | TIMER0_COMPA | Confronto timer / contatore0 Corrispondenza A |
12 | 0x000B | TIMER0_COMP | Corrispondenza confronto timer / contatore0 B |
13 | 0x000C | Giorno di riposo | Timeout watchdog |
14 | 0x000D | USI_INIZIO | INIZIO USI |
15 | 0x000E | USI_OVF | Straripamento dell'USI |
Se il programma non abilita mai una sorgente di interrupt, i vettori di interrupt non vengono utilizzati e il codice del programma regolare può essere posizionato in queste posizioni.
Una configurazione tipica e generale per gli indirizzi del vettore di interrupt in ATtiny25/45/85 è mostrata nel programma exampqui sotto.
Codice assemblaggio Example | ||
.org0x0000 | ; Imposta indirizzo del prossimo | dichiarazione |
RESETTARE la riga | ; Indirizzo 0x0000 | |
rjmp INT0_ISR | ; Indirizzo 0x0001 | |
rjmpPCINT0_ISR | ; Indirizzo 0x0002 | |
rjmp TIM1_COMPA_ISR | ; Indirizzo 0x0003 | |
rjmp TIM1_OVF_ISR | ; Indirizzo 0x0004 | |
rjmp TIM0_OVF_ISR | ; Indirizzo 0x0005 | |
rjmp EE_RDY_ISR | ; Indirizzo 0x0006 | |
rjmp ANA_COMP_ISR | ; Indirizzo 0x0007 | |
rjmp ADC_ISR | ; Indirizzo 0x0008 | |
rjmp TIM1_COMPB_ISR | ; Indirizzo 0x0009 | |
rjmp TIM0_COMPA_ISR | ; Indirizzo 0x000A | |
rjmp TIM0_COMPB_ISR | ; Indirizzo 0x000B | |
rjmpWDT_ISR | ; Indirizzo 0x000C | |
rjmp USI_START_ISR | ; Indirizzo 0x000D | |
rjmp USI_OVF_ISR | ; Indirizzo 0x000E | |
RIPRISTINA: | ; Inizio del programma principale | |
; Indirizzo 0x000F | ||
… |
Nota: vedere “Codice Example” a pagina 6.
Interrupt esterni
Gli interrupt esterni vengono attivati dal pin INT0 o da uno qualsiasi dei pin PCINT [5: 0]. Si osservi che, se abilitato, gli interrupt si attiveranno anche se i pin INT0 o PCINT [5: 0] sono configurati come uscite. Questa funzione fornisce un modo per generare un interrupt software. Interruzioni di cambio pin PCI si attiverà se uno qualsiasi dei pin PCINT [5: 0] abilitato si alterna. Il registro PCMSK controlla quali pin contribuiscono agli interrupt di cambio pin. Gli interrupt di cambio pin su PCINT [5: 0] vengono rilevati in modo asincrono. Ciò implica che queste interruzioni possono essere utilizzate per riattivare la parte anche da modalità di sospensione diverse dalla modalità di inattività.
Gli interrupt INT0 possono essere attivati da un fronte di salita o discesa o da un livello basso. Questo è impostato come indicato nelle specifiche per il registro di controllo MCU - MCUCR. Quando l'interrupt INT0 è abilitato ed è configurato come trigger a livello, l'interrupt si attiverà fintanto che il pin viene tenuto basso. Si noti che il riconoscimento degli interrupt del fronte di discesa o di salita su INT0 richiede la presenza di un clock I / O, descritto in "Sistemi di clock e loro distribuzione" su pagina 23.
Interruzione di basso livello
Un interrupt di basso livello su INT0 viene rilevato in modo asincrono. Ciò implica che questa interruzione può essere utilizzata per riattivare la parte anche da modalità di sospensione diverse dalla modalità di inattività. L'orologio I / O viene interrotto in tutte le modalità di sospensione eccetto in modalità di inattività.
Si noti che se un'interruzione attivata dal livello viene utilizzata per il risveglio dallo spegnimento, il livello richiesto deve essere mantenuto abbastanza a lungo da consentire all'MCU di completare il risveglio per attivare l'interruzione del livello. Se il livello scompare prima della fine del tempo di avvio, l'MCU si riattiverà comunque, ma non verrà generato alcun interrupt. Il tempo di avvio è definito dai fusibili SUT e CKSEL come descritto in "Orologio di sistema e opzioni dell'orologio" a pagina 23.
Se il livello basso sul pin di interrupt viene rimosso prima che il dispositivo si sia riattivato, l'esecuzione del programma non verrà deviata alla routine di servizio di interrupt ma continuerà dall'istruzione che segue il comando SLEEP.
Temporizzazione interruzione modifica pin
un exampil le di temporizzazione di un interrupt di cambio pin è mostrato in Figura 9-1.
Descrizione registro
MCUCR - Registro di controllo MCU
Il registro di controllo interrupt esterno A contiene bit di controllo per il controllo del rilevamento degli interrupt.
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | CORPI | PUD | SE | SM1 | SM0 | CORPO | ISC01 | ISC00 | MCUCR |
Leggere/scrivere | R | R/N | R/N | R/N | R/N | R | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 1: 0 - ISC0 [1: 0]: Controllo rilevamento interrupt 0 Bit 1 e Bit 0
L'interrupt esterno 0 viene attivato dal pin esterno INT0 se sono impostati il flag SREG I e la maschera di interrupt corrispondente. Il livello e i bordi sul pin INT0 esterno che attivano l'interrupt sono definiti in Tabella 9-2. Il valore sul pin INT0 è sampled prima di rilevare i bordi. Se si seleziona un'interruzione fronte o interruttore, gli impulsi che durano più a lungo di un periodo di clock genereranno un'interruzione. Non è garantito che impulsi più brevi generino un interrupt. Se è selezionato un interrupt di livello basso, il livello basso deve essere mantenuto fino al completamento dell'istruzione attualmente in esecuzione per generare un interrupt.
Tabella 9-2. Interrompere il controllo del rilevamento 0
ISC01 | ISC00 | Descrizione |
0 | 0 | Il livello basso di INT0 genera una richiesta di interrupt. |
0 | 1 | Qualsiasi modifica logica su INT0 genera una richiesta di interruzione. |
1 | 0 | Il fronte di discesa di INT0 genera una richiesta di interrupt. |
1 | 1 | Il fronte di salita di INT0 genera una richiesta di interrupt. |
GIMSK - Registro maschera interruzione generale
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3B | – | INT0 | PCIE | – | – | – | – | – | GIMSK |
Leggere/scrivere | R | R/N | R/N | R | R | R | R | R | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7, 4: 0 - Ris: bit riservati
Questi bit sono bit riservati nell'ATtiny25 / 45/85 e saranno sempre letti come zero.
Bit 6 - INT0: richiesta di interrupt esterno 0 abilitata
Quando il bit INT0 è impostato (uno) e il bit I nel registro di stato (SREG) è impostato (uno), l'interrupt del pin esterno è abilitato. I bit 0/1 di controllo rilevamento interrupt 0/01 (ISC00 e ISC0) nel registro di controllo MCU (MCUCR) definiscono se l'interrupt esterno viene attivato al fronte di salita e / o discesa del pin INT0 o al livello rilevato. L'attività sul pin provocherà una richiesta di interrupt anche se INT0 è configurato come uscita. L'interrupt corrispondente della richiesta di interrupt esterno 0 viene eseguito dal vettore di interrupt INTXNUMX.
Bit 5 - PCIE: abilitazione interrupt cambio pin
Quando il bit PCIE è impostato (uno) e il bit I nel registro di stato (SREG) è impostato (uno), l'interrupt di cambio pin è abilitato. Qualsiasi modifica su qualsiasi pin PCINT [5: 0] abilitato causerà un interrupt. L'interrupt corrispondente della richiesta di interrupt di modifica del pin viene eseguito dal vettore di interrupt PCI. I pin PCINT [5: 0] sono abilitati individualmente dal registro PCMSK0.
GIFR - Registro flag di interrupt generale
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3Un | – | INTF0 | PCIF | – | – | – | – | – | GIFR |
Leggere/scrivere | R | R/N | R/N | R | R | R | R | R | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7, 4: 0 - Ris: bit riservati
Questi bit sono bit riservati nell'ATtiny25 / 45/85 e saranno sempre letti come zero.
Bit 6 - INTF0: Flag di interrupt esterno 0
Quando un fronte o una modifica logica sul pin INT0 attiva una richiesta di interrupt, INTF0 diventa impostato (uno). Se il bit I in SREG e il bit INT0 in GIMSK sono impostati (uno), l'MCU salterà al corrispondente vettore di interrupt. Il flag viene cancellato quando viene eseguita la routine di interrupt. In alternativa, il flag può essere cancellato scrivendovi uno logico. Questo flag viene sempre cancellato quando INT0 è configurato come interrupt di livello.
Bit 5 - PCIF: flag di interruzione modifica pin
Quando una modifica della logica su qualsiasi pin PCINT [5: 0] attiva una richiesta di interrupt, PCIF diventa impostato (uno). Se il bit I in SREG e il bit PCIE in GIMSK sono impostati (uno), l'MCU salterà al corrispondente vettore di interrupt. Il flag viene cancellato quando viene eseguita la routine di interrupt. In alternativa, il flag può essere cancellato scrivendovi uno logico.
PCMSK - Registro cambio maschera pin
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x15 | – | – | PCINT5 | PCINT4 | PCINT3 | PCINT2 | PCINT1 | PCINT0 | PCMSK |
Leggere/scrivere | R | R | R/N | R/N | R/N | R/N | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7: 6 - Ris: Bit riservati
Questi bit sono bit riservati nell'ATtiny25 / 45/85 e saranno sempre letti come zero.
Bit 5: 0 - PCINT [5: 0]: maschera di abilitazione modifica pin 5: 0
Ogni bit PCINT [5: 0] seleziona se l'interrupt di cambio pin è abilitato sul pin I / O corrispondente. Se è impostato PCINT [5: 0] e il bit PCIE in GIMSK è impostato, l'interrupt di cambio pin è abilitato sul pin I / O corrispondente. Se PCINT [5: 0] è azzerato, l'interrupt di cambio pin sul pin I / O corrispondente è disabilitato.
Porte I/O
Introduzione
Tutte le porte AVR hanno una vera funzionalità di lettura-modifica-scrittura se utilizzate come porte I/O digitali generali. Ciò significa che la direzione di un pin della porta può essere modificata senza cambiare involontariamente la direzione di qualsiasi altro pin con le istruzioni SBI e CBI. Lo stesso vale per la modifica del valore dell'azionamento (se configurato come uscita) o l'abilitazione/disabilitazione delle resistenze di pull-up (se configurata come ingresso). Ogni buffer di uscita ha caratteristiche di unità simmetriche con capacità sia di sink che di source elevate. Il pin driver è abbastanza potente da pilotare direttamente i display a LED. Tutti i pin delle porte hanno resistori di pull-up selezionabili individualmente con un volume di alimentazionetage resistenza invariante. Tutti i pin I/O hanno diodi di protezione sia per VCC che per Ground come indicato in Figura 10-1Fare riferimento a "Caratteristiche elettriche" a pagina 161 per un elenco completo dei parametri.
Figura 10-1. Schema equivalente pin I/O
Tutti i registri e i riferimenti di bit in questa sezione sono scritti in forma generale. Una "x" minuscola rappresenta la lettera di numerazione per la porta e una "n" minuscola rappresenta il numero di bit. Tuttavia, quando si utilizza il registro o le definizioni di bit in un programma, è necessario utilizzare la forma precisa. Ad esempioample, PORTB3 per il bit n. 3 nella porta B, qui documentata generalmente come PORTxn. I registri di I/O fisici e le posizioni dei bit sono elencati in "Registra descrizione" su pagina 64.
Tre posizioni degli indirizzi di memoria I / O sono allocate per ciascuna porta, una per il registro dati - PORTx, il registro di direzione dati - DDRx e i pin di ingresso della porta - PINx. La posizione I / O dei pin di ingresso della porta è di sola lettura, mentre il registro dei dati e il registro della direzione dei dati sono in lettura / scrittura. Tuttavia, scrivendone uno logico su un bit nel registro PINx, si otterrà una commutazione nel bit corrispondente nel registro dati. Inoltre, il bit Pull-up Disable - PUD in MCUCR disabilita la funzione pull-up per tutti i pin in tutte le porte quando impostato.
L'utilizzo della porta I / O come I / O digitale generale è descritto in "Porte come I / O digitale generale" a pagina 53. La maggior parte dei pin delle porte è multiplexata con funzioni alternative per le funzioni periferiche del dispositivo. Il modo in cui ciascuna funzione alternativa interferisce con il pin della porta è descritto in "Funzioni della porta alternativa" a pagina 57. Fare riferimento alle sezioni dei singoli moduli per una descrizione completa delle funzioni alternative.
Si noti che l'abilitazione della funzione alternativa di alcuni dei pin della porta non influisce sull'uso degli altri pin nella porta come I / O digitale generale.
Porte come I / O digitale generale
Le porte sono porte I / O bidirezionali con pull-up interni opzionali. Figura 10-2 mostra una descrizione funzionale di un pin della porta I / O, qui chiamato genericamente Pxn.
Figura 10-2. I/O digitali generali(1)
Configurazione del Pin
Ciascun pin della porta è costituito da tre bit di registro: DDxn, PORTxn e PINxn. Come mostrato in "Registra descrizione" su pagina 64, si accede ai bit DDxn all'indirizzo I / O DDRx, ai bit PORTxn all'indirizzo I / O PORTx e ai bit PINxn all'indirizzo I / O PINx.
Il bit DDxn nel registro DDRx seleziona la direzione di questo pin. Se DDxn è uno logico, Pxn è configurato come pin di uscita. Se DDxn è scritto con zero logico, Pxn è configurato come pin di ingresso.
Se PORTxn è uno logico quando il pin è configurato come pin di ingresso, viene attivata la resistenza di pull-up. Per disattivare la resistenza di pull-up, PORTxn deve essere scritto come zero logico o il pin deve essere configurato come pin di uscita. I pin della porta vengono dichiarati in tre quando la condizione di ripristino diventa attiva, anche se nessun orologio è in esecuzione.
Se PORTxn è scritto logico uno quando il pin è configurato come un pin di uscita, il pin della porta è guidato alto (uno). Se PORTxn è scritto come zero logico quando il pin è configurato come pin di uscita, il pin della porta è impostato su un valore basso (zero).
Commutazione del Pin
Scrivendo uno logico in PINxn si alterna il valore di PORTxn, indipendentemente dal valore di DDRxn. Si noti che l'istruzione SBI può essere utilizzata per alternare un singolo bit in una porta.
Commutazione tra ingresso e uscita
Quando si passa dal tri-state ({DDxn, PORTxn} = 0b00) all'output high ({DDxn, PORTxn} = 0b11), uno stato intermedio con pull-up abilitato {DDxn, PORTxn} = 0b01) o output low ({DDxn, PORTxn} = 0b10) deve verificarsi. Normalmente, lo stato pull-up abilitato è del tutto accettabile, in quanto un ambiente ad alta impedenza non noterà la differenza tra un forte driver alto e un pull-up. In caso contrario, è possibile impostare il bit PUD nel registro MCUCR per disabilitare tutti i pull-up in tutte le porte.
Il passaggio tra input con pull-up e output basso genera lo stesso problema. L'utente deve utilizzare lo stato triplo ({DDxn, PORTxn} = 0b00) o lo stato alto dell'uscita ({DDxn, PORTxn} = 0b10) come passaggio intermedio.
Tabella 10-1 riassume i segnali di controllo per il valore del pin.
Tabella 10-1. Configurazioni pin porta
GGxn | PORTXn | PUD
(nel MCUCR) |
Entrata/uscita | Trazione | Commento |
0 | 0 | X | Ingresso | NO | Tri-stato (Hi-Z) |
0 | 1 | 0 | Ingresso | SÌ | Pxn genererà corrente se ext. tirato basso. |
0 | 1 | 1 | Ingresso | NO | Tri-stato (Hi-Z) |
1 | 0 | X | Produzione | NO | Uscita bassa (Sink) |
1 | 1 | X | Produzione | NO | Uscita alta (sorgente) |
Lettura del valore del pin
Indipendentemente dall'impostazione del bit di direzione dei dati DDxn, il pin della porta può essere letto tramite il bit di registro PINxn. Come mostrato in Figura 10-2, il bit di registro PINxn e il latch precedente costituiscono un sincronizzatore. Questo è necessario per evitare la metastabilità se il pin fisico cambia valore vicino al limite del clock interno, ma introduce anche un ritardo. Figura 10-3 mostra un diagramma di temporizzazione della sincronizzazione durante la lettura di un valore pin applicato esternamente. I ritardi di propagazione massimo e minimo sono indicati rispettivamente con tpd,max e tpd,min.
Considera il periodo di clock che inizia poco dopo il primo fronte di discesa dell'orologio di sistema. Il latch è chiuso quando il clock è basso e diventa trasparente quando il clock è alto, come indicato dalla regione ombreggiata del segnale "SYNC LATCH". Il valore del segnale viene bloccato quando l'orologio di sistema diventa basso. Viene sincronizzato nel registro PINxn al successivo fronte di clock positivo. Come indicato dalle due frecce tpd, max e tpd, min, una singola transizione del segnale sul pin verrà ritardata tra ½ e 1½ periodo di clock di sistema a seconda del tempo dell'asserzione.
Quando si rilegge un valore pin assegnato dal software, è necessario inserire un'istruzione nop come indicato in Figura 10-4. L'istruzione out imposta il segnale "SYNC LATCH" sul fronte positivo del clock. In questo caso, il ritardo tpd attraverso il sincronizzatore è un periodo di clock di sistema.
Il seguente codice esample mostra come impostare i pin 0 e 1 della porta B in alto, 2 e 3 in basso e definire i pin della porta da 4 a 5 come input con un pull-up assegnato al pin della porta 4. I valori dei pin risultanti vengono riletti di nuovo, ma come discusso in precedenza, è inclusa un'istruzione nop per poter rileggere il valore recentemente assegnato ad alcuni pin.
Codice assemblaggio Example(1) |
…
; Definisci i pull-up e imposta gli output alti ; Definire le direzioni per i pin delle porte ldi r16,(1<<PB4)|(1<<PB1)|(1<<PB0) ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0) fuori PORTB,r16 fuori DDRB,r17 ; Inserisci nop per la sincronizzazione nooo ; Leggi i pin delle porte in r16,PINB … |
Nota: per il programma assembly, vengono utilizzati due registri temporanei per ridurre al minimo il tempo dai pull-up impostati sui pin 0, 1 e 4, fino a quando i bit di direzione non vengono impostati correttamente, definendo i bit 2 e 3 come bassi e ridefinendo i bit 0 e 1 come forti guidatori alti.
Codice C Example |
carattere senza segno i;
… /* Definisce i pull-up e imposta gli output alti */ /* Definisce le direzioni per i pin delle porte */ PORTB = (1< DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* Inserisci nop per la sincronizzazione*/ _NOP (); /* Legge i pin della porta */ i = PINB; … |
Abilitazione ingresso digitale e modalità di sospensione
Come mostrato in Figura 10-2, il segnale di ingresso digitale può essere clampmesso a terra all'ingresso dello schmitt-trigger. Il segnale indicato con SLEEP nella figura è impostato dal controller MCU Sleep in modalità Power-down per evitare un elevato consumo energetico se alcuni segnali di ingresso sono lasciati fluttuanti o hanno un livello di segnale analogico vicino a VCC/2.
SLEEP viene sovrascritto per i pin della porta abilitati come pin di interrupt esterni. Se la richiesta di interrupt esterno non è abilitata, SLEEP è attivo anche per questi pin. SLEEP è anche sovrascritto da varie altre funzioni alternative come descritto in "Funzioni della porta alternativa" a pagina 57.
Se un livello logico alto ("uno") è presente su un pin di interrupt esterno asincrono configurato come "Interrupt on Rising Edge, Falling Edge o Any Logic Change on Pin" mentre l'interrupt esterno non è abilitato, il flag di interrupt esterno corrispondente verrà essere impostato alla ripresa dalla suddetta modalità Sleep, in quanto il clamping in queste modalità di sospensione produce la modifica logica richiesta.
Pin non collegati
Se alcuni pin non sono utilizzati, si consiglia di assicurarsi che questi pin abbiano un livello definito. Anche se la maggior parte degli ingressi digitali sono disabilitati nelle modalità deep sleep come descritto sopra, gli ingressi flottanti dovrebbero essere evitati per ridurre il consumo di corrente in tutte le altre modalità in cui gli ingressi digitali sono abilitati (Reset, modalità attiva e modalità Idle).
Il metodo più semplice per garantire un livello definito di un pin inutilizzato è abilitare il pull-up interno. In questo caso il pull-up sarà disabilitato durante il reset. Se è importante un basso consumo energetico durante il ripristino, si consiglia di utilizzare un pull-up o un pull-down esterno. Si sconsiglia di collegare i pin inutilizzati direttamente a VCC o GND, poiché ciò potrebbe causare correnti eccessive se il pin viene configurato accidentalmente come uscita.
Funzioni della porta alternativa
La maggior parte dei pin delle porte ha funzioni alternative oltre ad essere I / O digitali generali. Figura 10-5 mostra come i segnali di controllo dei pin della porta dal file semplificato Figura 10-2 può essere sovrascritto da funzioni alternative. I segnali di override potrebbero non essere presenti in tutti i pin della porta, ma la figura serve come descrizione generica applicabile a tutti i pin della porta nella famiglia di microcontrollori AVR.
Tabella 10-2. Descrizione generica dei segnali di override per le funzioni alternative
Nome del segnale | Nome e cognome | Descrizione |
PUO | Abilita override pull-up | Se questo segnale è impostato, l'abilitazione pull-up è controllata dal segnale PUOV. Se questo segnale viene cancellato, il pull-up viene abilitato quando
{DDxn, PORTxn, PUD} = 0b010. |
PUOV | Valore di sostituzione pull-up | Se PUOE è impostato, il pull-up viene abilitato / disabilitato quando PUOV viene impostato / cancellato, indipendentemente dall'impostazione dei bit DDxn, PORTxn e PUD Register. |
DDOE | Abilita sovrascrittura direzione dati | Se questo segnale è impostato, l'uscita Driver Enable è controllata dal segnale DDOV. Se questo segnale viene cancellato, il driver di uscita viene abilitato dal bit DDxn Register. |
DDOV | Valore di sostituzione della direzione dei dati | Se è impostato DDOE, il driver di uscita viene abilitato / disabilitato quando DDOV viene impostato / cancellato, indipendentemente dall'impostazione del bit del registro DDxn. |
PVOE | Abilita override valore porta | Se questo segnale è impostato e il driver di uscita è abilitato, il valore della porta è controllato dal segnale PVOV. Se PVOE è azzerato e il driver di uscita è abilitato, il valore della porta è controllato dal bit di registro PORTxn. |
PVV | Valore di porta sovrascrivere il valore | Se è impostato PVOE, il valore della porta è impostato su PVOV, indipendentemente dall'impostazione del bit di registro PORTxn. |
PTO | Abilita override commutazione porta | Se è impostato PTOE, il bit di registro PORTxn è invertito. |
DIOE | Abilita ingresso digitale Abilita override | Se questo bit è impostato, l'abilitazione dell'ingresso digitale è controllata dal segnale DIEOV. Se questo segnale viene cancellato, l'abilitazione dell'ingresso digitale è determinata dallo stato dell'MCU (modalità normale, modalità di sospensione). |
DIEOV | Valore di sostituzione abilitazione ingresso digitale | Se DIEOE è impostato, l'ingresso digitale è abilitato / disabilitato quando DIEOV è impostato / cancellato, indipendentemente dallo stato della MCU (modalità normale, modalità sleep). |
DI | Input digitale | Questo è l'ingresso digitale per alternare le funzioni. Nella figura, il segnale è collegato all'uscita dello schmitt-trigger ma prima del sincronizzatore. A meno che l'ingresso digitale non venga utilizzato come sorgente di clock, il modulo con la funzione alternativa utilizzerà il proprio sincronizzatore. |
Tutto in uno | Ingresso / uscita analogica | Questo è l'ingresso / uscita analogico a / da funzioni alternative. Il segnale è collegato direttamente al pad e può essere utilizzato in modo bidirezionale. |
Le seguenti sottosezioni descrivono brevemente le funzioni alternative per ciascuna porta e mettono in relazione i segnali di priorità alla funzione alternativa. Fare riferimento alla descrizione della funzione alternativa per ulteriori dettagli.
Funzioni alternative della porta B
I pin della porta B con funzione alternativa sono mostrati in Tabella 10-3.
Tabella 10-3. Funzioni alternative dei pin della porta B
Perno porta | Funzione alternativa |
PB5 | ![]() RESET: reimposta il pin dW: debugWIRE I / O ADC0: canale di ingresso ADC 0 PCINT5: interruzione cambio pin, sorgente 5 |
PB4 | XTAL2: uscita oscillatore a cristallo CLKO: uscita clock di sistema ADC2: canale di ingresso ADC 2
OC1B: Timer / Counter1 Compare Match B Output PCINT4: Pin Change Interrupt 0, Source 4 |
PB3 | XTAL1: ingresso oscillatore a cristallo CLKI: ingresso clock esterno ADC3: canale 3 ingresso ADC
OC1B: Complementary Timer / Counter1 Compare Match B Output PCINT3: Pin Change Interrupt 0, Source 3 |
PB2 | SCK: ingresso orologio seriale ADC1: canale di ingresso ADC 1
T0: Timer / Counter0 Clock Source USCK: USI Clock (Three Wire Mode) SCL: USI Clock (Two Wire Mode) INT0: External Interrupt 0 Input PCINT2: Pin Change Interrupt 0, Source 2 |
PB1 | MISO: ingresso dati master SPI / uscita dati slave AIN1: comparatore analogico, ingresso negativo OC0B: uscita confronto timer / contatore0 corrispondenza B OC1A: uscita confronto timer / contatore1 corrispondenza A DO: uscita dati USI (modalità a tre fili) PCINT1: interrupt cambio pin 0, sorgente 1 |
PB0 | MOSI :: SPI Uscita dati master / Ingresso dati slave AIN0: comparatore analogico, ingresso positivo
OC0A: timer/contatore0 Confronta corrispondenza A uscita OC1A: Complementary Timer / Counter1 Compare Match A Output A DI: USI Data Input (Three Wire Mode) SDA: USI Data Input (Two Wire Mode) AREF: External Analog Reference PCINT0: Pin Change Interrupt 0, Source 0 |
Porta B, bit 5 - RESET / dW / ADC0 / PCINT5
RESET: l'ingresso di reset esterno è attivo basso e abilitato non programmando ("1") il fusibile RSTDISBL. Il pullup viene attivato e il driver di uscita e l'ingresso digitale vengono disattivati quando il pin viene utilizzato come pin RESET.
dW: quando il fusibile debugWIRE Enable (DWEN) è programmato e i bit di blocco non sono programmati, il sistema debugWIRE all'interno del dispositivo di destinazione viene attivato. Il pin della porta RESET è configurato come un pin I / O bidirezionale con cavo AND (open-drain) con pull-up abilitato e diventa il gateway di comunicazione tra il target e l'emulatore.
ADC0: convertitore da analogico a digitale, canale 0.
PCINT5: sorgente interrupt cambio pin 5.
Porta B, Bit 4 - XTAL2 / CLKO / ADC2 / OC1B / PCINT4
XTAL2: pin dell'oscillatore del chip clock 2. Utilizzato come pin del clock per tutte le sorgenti di clock del chip eccetto l'oscillatore RC calibrabile interno e il clock esterno. Quando viene utilizzato come pin dell'orologio, il pin non può essere utilizzato come pin I / O. Quando si utilizza un oscillatore RC interno calibrabile o un clock esterno come sorgenti di clock del chip, PB4 funge da pin di I / O ordinario.
CLKO: L'orologio di sistema diviso può essere emesso sul pin PB4. L'orologio di sistema diviso verrà emesso se il fusibile CKOUT è programmato, indipendentemente dalle impostazioni PORTB4 e DDB4. Verrà emesso anche durante il ripristino.
ADC2: convertitore da analogico a digitale, canale 2.
OC1B: Output Compare Match output: Il pin PB4 può servire come uscita esterna per Timer / Counter1 Compare Match B quando configurato come uscita (DDB4 set). Il pin OC1B è anche il pin di uscita per la funzione timer della modalità PWM.
PCINT4: sorgente interrupt cambio pin 4.
Porta B, Bit 3 - XTAL1 / CLKI / ADC3 / OC1B / PCINT3
XTAL1: pin dell'oscillatore del chip clock 1. Utilizzato per tutte le sorgenti di clock del chip tranne l'oscillatore RC calibrabile interno. Quando viene utilizzato come pin dell'orologio, il pin non può essere utilizzato come pin I / O.
CLKI: Ingresso di clock da una sorgente di clock esterna, vedere "Orologio esterno" a pagina 26.
ADC3: convertitore da analogico a digitale, canale 3.
OC1B: Uscita di confronto dell'uscita invertita Uscita: il pin PB3 può servire come uscita esterna per la corrispondenza di confronto B del timer / contatore1 quando configurato come uscita (set DDB3). Il pin OC1B è anche il pin di uscita invertito per la funzione timer della modalità PWM.
PCINT3: sorgente interrupt cambio pin 3.
Porta B, Bit 2 - SCK / ADC1 / T0 / USCK / SCL / INT0 / PCINT2
SCK: uscita Master Clock, pin di ingresso Slave Clock per canale SPI. Quando l'SPI è abilitato come Slave, questo pin è configurato come ingresso indipendentemente dall'impostazione di DDB2. Quando l'SPI è abilitato come Master, la direzione dei dati di questo pin è controllata da DDPB2. Quando il pin è forzato dall'SPI come ingresso, il pull-up può ancora essere controllato dal bit PORTB2.
ADC1: convertitore da analogico a digitale, canale 1.
T0: sorgente contatore Timer / Counter0.
USCK: orologio con interfaccia seriale universale in modalità a tre fili.
SCL: orologio seriale in modalità a due fili per la modalità a due fili USI.
INT0: sorgente interrupt esterno 0.
PCINT2: sorgente interrupt cambio pin 2.
Porta B, Bit 1 - MISO / AIN1 / OC0B / OC1A / DO / PCINT1
MISO: ingresso dati master, pin di uscita dati slave per canale SPI. Quando l'SPI è abilitato come Master, questo pin è configurato come ingresso indipendentemente dall'impostazione di DDB1. Quando l'SPI è abilitato come Slave, la direzione dei dati di questo pin è controllata da DDB1. Quando il pin è forzato dall'SPI come input, il pull-up può ancora essere controllato dal bit PORTB1.
AIN1: ingresso negativo comparatore analogico. Configurare il pin della porta come ingresso con il pull-up interno disattivato per evitare che la funzione della porta digitale interferisca con la funzione del comparatore analogico.
OC0B: Output Compare Match output. Il pin PB1 può fungere da uscita esterna per la corrispondenza di confronto Timer / Counter0 B. Il pin PB1 deve essere configurato come un'uscita (DDB1 impostato (uno)) per svolgere questa funzione. Il pin OC0B è anche il pin di uscita per la funzione timer della modalità PWM.
OC1A: Uscita Match Compare Output: Il pin PB1 può servire come uscita esterna per Timer / Counter1 Compare Match B quando configurato come uscita (DDB1 set). Il pin OC1A è anche il pin di uscita per la funzione timer della modalità PWM.
DO: Uscita dati interfaccia seriale universale modalità a tre fili. Modalità a tre fili L'output dei dati ha la precedenza sul valore PORTB1 e viene pilotato sulla porta quando il bit di direzione dei dati DDB1 è impostato (uno). PORTB1 abilita ancora il pull-up, se la direzione è inserita e PORTB1 è impostato (uno).
PCINT1: sorgente interrupt cambio pin 1.
Porta B, Bit 0 - MOSI / AIN0 / OC0A / OC1A / DI / SDA / AREF / PCINT0
MOSI: uscita dati master SPI, ingresso dati slave per canale SPI. Quando l'SPI è abilitato come Slave, questo pin è configurato come ingresso indipendentemente dall'impostazione di DDB0. Quando l'SPI è abilitato come Master, la direzione dei dati di questo pin è controllata da DDB0. Quando il pin è forzato dall'SPI come input, il pull-up può ancora essere controllato dal bit PORTB0.
AIN0: ingresso positivo del comparatore analogico. Configurare il pin della porta come ingresso con il pull-up interno disattivato per evitare che la funzione della porta digitale interferisca con la funzione del comparatore analogico.
OC0A: Output Compare Match output. Il pin PB0 può fungere da uscita esterna per la corrispondenza di confronto timer / contatore0 A quando configurato come uscita (DDB0 impostato (uno)). Il pin OC0A è anche il pin di uscita per la funzione timer della modalità PWM.
OC1A: Uscita corrispondenza confronto uscita invertita: il pin PB0 può fungere da uscita esterna per la corrispondenza confronto timer / contatore1 B quando configurato come uscita (set DDB0). Il pin OC1A è anche il pin di uscita invertito per la funzione timer della modalità PWM.
SDA: dati dell'interfaccia seriale in modalità a due fili.
AREF: Riferimento analogico esterno per ADC. Il pullup e il driver di uscita sono disabilitati su PB0 quando il pin viene utilizzato come riferimento esterno o Volume internotage Riferimento con condensatore esterno al pin AREF.
DI: ingresso dati in modalità USI a tre fili. La modalità USI a tre fili non sovrascrive le normali funzioni della porta, quindi il pin deve essere configurato come ingresso per la funzione DI.
PCINT0: sorgente interrupt cambio pin 0.
Tabella 10-4 E Tabella 10-5 mettere in relazione le funzioni alternative della porta B con i segnali prioritari mostrati in Figura 10-5 su pagina 58.
Tabella 10-4. Segnali di override per funzioni alternative in PB[5:3]
Nome del segnale | PB5 / RESET / ADC0 / PCINT5 | PB4/ADC2/XTAL2/ OC1B/PCINT4 | PB3/ADC3/XTAL1/ OC1B/PCINT3 |
PUO | ![]() |
0 | 0 |
PUOV | 1 | 0 | 0 |
DDOE | RSTDISBL(1) • DWEN(1) | 0 | 0 |
DDOV | debugWire Trasmissione | 0 | 0 |
PVOE | 0 | Abilita OC1B | ![]() Abilita OC1B |
PVV | 0 | OC1B | OC1B |
PTO | 0 | 0 | 0 |
DIOE | ![]() RSTDISBL(1) + (PCINT5 • PCIE + ADC0D) |
PCINT4 • PCIE + ADC2D | PCINT3 • PCIE + ADC3D |
DIEOV | ADC0D | ADC2D | ADC3D |
DI | Ingresso PCINT5 | Ingresso PCINT4 | Ingresso PCINT3 |
Tutto in uno | Ingresso RESET, Ingresso ADC0 | Ingresso ADC2 | Ingresso ADC3 |
Nota: quando il Fusibile è “0” (Programmato).
Tabella 10-5. Segnali di override per funzioni alternative in PB[2:0]
Nome del segnale | PB2/SCK/ADC1/T0/ USCK/SCL/INT0/PCINT2 | PB1/MISO/DO/AIN1/ OC1A/OC0B/PCINT1 | PB0/MOSI/DI/SDA/AIN0/AREF/OC1A/OC0A/
PCINT0 |
PUO | 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 + PORTAB0) • DDB0 |
PVOE | USI_DUE_FILI • DDB2 | OC0B Abilita + OC1A Abilita + USI_THREE_WIRE | ![]() OC0A Abilita + OC1A Abilita + (USI_TWO_WIRE DDB0) |
PVV | 0 | OC0B + OC1A + DO | ![]() OC0A + OC1A |
PTO | USITC | 0 | 0 |
DIOE | PCINT2 • PCIE + ADC1D + USISIE | PCINT1 • PCIE + AIN1D | PCINT0 • PCIE + AIN0D + USISIE |
DIEOV | ADC1D | AIN1D | AIN0D |
DI | T0 / USCK / SCL / INT0 /
Ingresso PCINT2 |
Ingresso PCINT1 | Ingresso DI / SDA / PCINT0 |
Tutto in uno | Ingresso ADC1 | Ingresso negativo comparatore analogico | Ingresso positivo comparatore analogico |
Descrizione registro
MCUCR - Registro di controllo MCU
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | CORPI | PUD | SE | SM1 | SM0 | CORPO | ISC01 | ISC00 | MCUCR |
Leggere/scrivere | R | R/N | R/N | R/N | R/N | R | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 6 - PUD: pull-up disabilitato
Quando questo bit viene scritto su uno, i pull-up nelle porte I / O sono disabilitati anche se i registri DDxn e PORTxn sono configurati per abilitare i pull-up ({DDxn, PORTxn} = 0b01). Vedere "Configurazione del PIN" a pagina 54 per maggiori dettagli su questa funzione.
PORTB - Registro dati della porta B.
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x18 | – | – | PORTAB5 | PORTAB4 | PORTAB3 | PORTAB2 | PORTAB1 | PORTAB0 | PORTO |
Leggere/scrivere | R | R | R/N | R/N | R/N | R/N | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
DDRB - Registro di direzione dati porta B.
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x17 | – | – | DDB5 | DDB4 | DDB3 | DDB2 | DDB1 | DDB0 | DDRB |
Leggere/scrivere | R | R | R/N | R/N | R/N | R/N | R/N | R/N | |
Valore iniziale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PINB - Indirizzo pin di ingresso porta B.
Morso | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x16 | – | – | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 | PIL |
Leggere/scrivere | R | R | R/N | R/N | R/N | R/N | R/N | R/N | |
Valore iniziale | 0 | 0 | N / A | N / A | N / A | N / A | N / A | N / A |
Timer / contatore 8 a 0 bit con PWM
Caratteristiche
Due unità di confronto delle uscite indipendenti
Registri di confronto delle uscite con doppio buffer
Azzera timer durante confronto partita (ricaricamento automatico)
Modulatore di larghezza di impulso (PWM) a correzione di fase senza glitch
Periodo PWM variabile
Generatore di frequenza
Tre sorgenti di interrupt indipendenti (TOV0, OCF0A e OCF0B)
Sopraview
Timer / Counter0 è un modulo Timer / Counter a 8 bit per uso generico, con due unità di confronto uscite indipendenti e con supporto PWM. Consente tempi di esecuzione del programma accurati (gestione degli eventi) e generazione di onde.
Uno schema a blocchi semplificato del timer / contatore a 8 bit è mostrato in Figura 11-1. Per il posizionamento effettivo dei pin I / O, fare riferimento a "Pinout ATtiny25 / 45/85" a pagina 2. I registri di I / O accessibili dalla CPU, inclusi i bit di I / O e i pin di I / O, sono mostrati in grassetto. Il registro I / O specifico del dispositivo e le posizioni dei bit sono elencati nel file "Descrizione registro" a pagina 77.
I registri Timer/Counter (TCNT0) e Output Compare Registers (OCR0A e OCR0B) sono registri a 8 bit. I segnali di richiesta di interrupt (abbreviati in Int.Req. nella figura) sono tutti visibili nel Timer Interrupt Flag Register (TIFR). Tutti gli interrupt sono mascherati individualmente con il Timer Interrupt Mask Register (TIMSK). TIFR e TIMSK non sono mostrati nella figura.
Il timer/contatore può essere sincronizzato internamente, tramite il prescaler o da una sorgente di clock esterna sul pin T0. Il blocco logico Clock Select controlla la sorgente di clock e il fronte che il Timer/Counter utilizza per incrementare (o decrementare) il suo valore. Il timer/contatore è inattivo quando non è selezionata alcuna sorgente di clock. L'uscita dalla logica di selezione dell'orologio viene definita orologio del timer (clkT0).
I registri di confronto delle uscite con doppio buffer (OCR0A e OCR0B) vengono sempre confrontati con il valore del timer / contatore. Il risultato del confronto può essere utilizzato dal generatore di forme d'onda per generare un'uscita PWM o a frequenza variabile sui pin di confronto dell'uscita (OC0A e OC0B). Vedere "Unità di confronto delle uscite" a pagina 69. per dettagli. L'evento Compare Match imposterà anche il flag di confronto (OCF0A o OCF0B) che può essere utilizzato per generare una richiesta di interrupt di confronto output.
Definizioni
Molti registri e riferimenti di bit in questa sezione sono scritti in forma generale. Una "n" minuscola sostituisce il numero di timer / contatore, in questo caso 0. Una "x" minuscola sostituisce il modulo di confronto delle uscite, in questo caso il modulo di confronto A o B. Tuttavia, quando si utilizza il registro o il bit definisce in un programma, deve essere usata la forma precisa, cioè TCNT0 per accedere al valore del contatore Timer / Counter0 e così via.
Le definizioni in Tabella 11-1 sono anche ampiamente utilizzati in tutto il documento.
Tabella 11-1. Definizioni
Costante | Descrizione |
METTER IL FONDO A | Il contatore raggiunge BOTTOM quando diventa 0x00 |
Massimo | Il contatore raggiunge il suo valore MAX quando diventa 0xFF (decimale 255) |
SUPERIORE | Il contatore raggiunge il TOP quando diventa uguale al valore più alto nella sequenza di conteggio. Il valore TOP può essere assegnato al valore fisso 0xFF (MAX) o al valore memorizzato nel registro OCR0A. L'assegnazione dipende dalla modalità di funzionamento |
Prescaler timer / contatore e sorgenti orologio
Il timer / contatore può essere sincronizzato da una sorgente di clock interna o esterna. La sorgente del clock viene selezionata dalla logica di selezione dell'orologio controllata dai bit di selezione dell'orologio (c) situati nel registro di controllo del timer / contatore0 (TCCR0B).
Sorgente di clock interna con Prescaler
Timer/Counter0 può essere sincronizzato direttamente dall'orologio di sistema (impostando CS0[2:0] = 1). Ciò fornisce il funzionamento più veloce, con una frequenza di clock massima del timer/contatore uguale alla frequenza di clock del sistema (fCLK_I/O). In alternativa, uno dei quattro tap del prescaler può essere utilizzato come sorgente di clock. Il clock prescalato ha una frequenza di entrambi
Ripristino prescrittore
Il prescaler è free running, cioè opera indipendentemente dalla logica di Clock Select di Timer/Contatore0. Poiché il prescaler non è influenzato dalla selezione dell'orologio del timer/contatore, lo stato del prescaler avrà implicazioni per le situazioni in cui viene utilizzato un orologio prescalato. un exampil le di un artefatto di prescaling è quando il timer/contatore è abilitato e sincronizzato dal prescaler (6 > CS0[2:0] > 1). Il numero di cicli di clock di sistema da quando il timer è abilitato al primo conteggio può essere compreso tra 1 e N+1 cicli di clock di sistema, dove N è uguale al divisore di prescaler (8, 64, 256 o 1024).
È possibile utilizzare il ripristino del prescaler per sincronizzare il timer / contatore all'esecuzione del programma.
Sorgente di clock esterna
Una sorgente di clock esterna applicata al pin T0 può essere utilizzata come timer/counter clock (clkT0). Il pin T0 è sampguidato una volta ogni ciclo di clock di sistema dalla logica di sincronizzazione dei pin. Il sincronizzato (sampled) il segnale viene quindi passato
attraverso il rilevatore di bordi. Figura 11-2 mostra uno schema a blocchi funzionale equivalente della logica di sincronizzazione T0 e del rilevatore di fronti. I registri sono sincronizzati sul fronte positivo del clock di sistema interno (clkI/O). Il fermo è trasparente nel periodo alto dell'orologio di sistema interno.
Il rilevatore di fronti genera un impulso clkT0 per ogni fronte positivo (CS0[2:0] = 7) o negativo (CS0[2:0] = 6) che rileva.
I registri OCR0x hanno un doppio buffer quando si utilizza una delle modalità Pulse Width Modulation (PWM). Per le modalità di funzionamento normale e Clear Timer on Compare (CTC), il doppio buffering è disabilitato. Il doppio buffer sincronizza l'aggiornamento dei registri di confronto OCR0x all'inizio o alla fine della sequenza di conteggio. La sincronizzazione impedisce il verificarsi di impulsi PWM di lunghezza dispari e non simmetrici, rendendo così l'uscita senza problemi.
L'accesso al registro OCR0x può sembrare complesso, ma non è così. Quando il doppio buffering è abilitato, la CPU ha accesso al registro del buffer OCR0x, e se il doppio buffering è disabilitato la CPU accederà direttamente all'OCR0x.
Forza confronto output
Nelle modalità di generazione della forma d'onda non PWM, l'uscita di corrispondenza del comparatore può essere forzata scrivendone uno nel bit Force Output Compare (FOC0x). Forzare la corrispondenza del confronto non imposterà il flag OCF0x o ricaricherà / azzererà il timer, ma il pin OC0x verrà aggiornato come se si fosse verificata una vera corrispondenza del confronto (le impostazioni dei bit COM0x [1: 0] definiscono se il pin OC0x è impostato, cancellato o alternato).
Confronta Match Blocking per TCNT0 Write
Tutte le operazioni di scrittura della CPU nel registro TCNT0 bloccheranno qualsiasi confronto di confronto che si verifica nel successivo ciclo di clock del timer, anche quando il timer viene arrestato. Questa funzione consente di inizializzare OCR0x allo stesso valore di TCNT0 senza attivare un interrupt quando è abilitato il timer / contatore.
Utilizzo dell'Unità di confronto delle uscite
Poiché la scrittura di TCNT0 in qualsiasi modalità operativa bloccherà tutte le corrispondenze di confronto per un ciclo di clock del timer, ci sono dei rischi quando si modifica TCNT0 quando si utilizza il modulo di confronto delle uscite, indipendentemente dal fatto che il timer / contatore sia in esecuzione o meno. Se il valore scritto in TCNT0 è uguale al valore OCR0x, la corrispondenza del confronto verrà persa, determinando una generazione di forma d'onda errata. Allo stesso modo, non scrivere il valore TCNT0 uguale a BOTTOM quando il contatore esegue il conteggio indietro.
La configurazione dell'OC0x deve essere eseguita prima di impostare il registro di direzione dei dati per l'uscita del pin della porta. Il modo più semplice per impostare il valore OC0x è utilizzare i bit stroboscopici Force Output Compare (FOC0x) in modalità Normale. I registri OC0x mantengono i propri valori anche quando si cambia tra le modalità di generazione della forma d'onda.
Tenere presente che i bit COM0x [1: 0] non vengono memorizzati nel doppio buffer insieme al valore di confronto. La modifica dei bit COM0x [1: 0] avrà effetto immediato.
Confronta unità di output della corrispondenza
I bit della modalità Compare Output (COM0x [1: 0]) hanno due funzioni. Il generatore di forme d'onda utilizza i bit COM0x [1: 0] per definire lo stato Output Compare (OC0x) al successivo confronto Match Match. Inoltre, i bit COM0x [1: 0] controllano la sorgente di uscita del pin OC0x. Figura 11-6 mostra uno schema semplificato della logica influenzata dall'impostazione del bit COM0x [1: 0]. I registri I / O, i bit I / O e i pin I / O nella figura sono mostrati in grassetto. Vengono visualizzate solo le parti dei registri di controllo delle porte I / O generali (DDR e PORT) che sono influenzate dai bit COM0x [1: 0]. Quando si fa riferimento allo stato OC0x, il riferimento è per il registro OC0x interno, non per il pin OC0x. Se si verifica un ripristino del sistema, il registro OC0x viene ripristinato su "0".
Quando OC0A / OC0B è collegato al pin I / O, la funzione dei bit COM0A [1: 0] / COM0B [1: 0] dipende dall'impostazione del bit WGM0 [2: 0]. Tabella 11-2 mostra la funzionalità bit COM0x [1: 0] quando i bit WGM0 [2: 0] sono impostati su una modalità normale o CTC (non PWM).
Tabella 11-2. Confronta la modalità di uscita, la modalità non PWM
COM0A1 COM0B1 | COM0A0 COM0B0 | Descrizione |
0 | 0 | Normale funzionamento della porta, OC0A / OC0B scollegato. |
0 | 1 | Attiva OC0A / OC0B su Confronta corrispondenza |
1 | 0 | Cancella OC0A / OC0B su Compare Match |
1 | 1 | Imposta OC0A / OC0B su Confronta corrispondenza |
Tabella 11-3 mostra la funzionalità bit COM0x [1: 0] quando i bit WGM0 [2: 0] sono impostati sulla modalità PWM veloce.
Tabella 11-3. Confronta la modalità di uscita, la modalità PWM veloce(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Descrizione |
0 | 0 | Normale funzionamento della porta, OC0A / OC0B scollegato. |
0 | 1 | Prenotato |
1 | 0 | Cancella OC0A / OC0B su Compare Match, imposta OC0A / OC0B su BOTTOM (modalità non invertente) |
1 | 1 | Imposta OC0A / OC0B su Compare Match, cancella OC0A / OC0B in BOTTOM (modalità di inversione) |
Nota: un caso speciale si verifica quando OCR0A o OCR0B è uguale a TOP ed è impostato COM0A1/COM0B1. In questo caso, la corrispondenza di confronto viene ignorata, ma il set o il clear viene eseguito in BOTTOM. Vedere "Modalità PWM veloce" a pagina 73 per maggiori dettagli.
Tabella 11-4 mostra la funzionalità del bit COM0x [1: 0] quando i bit WGM0 [2: 0] sono impostati sulla modalità PWM corretta per la fase.
Tabella 11-4. Confronta la modalità di uscita, la modalità PWM a correzione di fase(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Descrizione |
0 | 0 | Normale funzionamento della porta, OC0A / OC0B scollegato. |
0 | 1 | Prenotato |
1 | 0 | Cancella OC0A / OC0B su Confronta Match durante il conteggio. Impostare OC0A / OC0B su Confronta corrispondenza durante il conteggio indietro. |
1 | 1 | Impostare OC0A / OC0B su Confronta corrispondenza durante il conteggio. Cancella OC0A / OC0B su Confronta Match durante il conteggio indietro. |
Nota: 1. Un caso speciale si verifica quando OCR0A o OCR0B è uguale a TOP ed è impostato COM0A1/COM0B1. In questo caso, il Compare Match viene ignorato, ma il set o il clear viene eseguito in TOP. Vedere "Modalità PWM con correzione di fase" a pagina 74 per maggiori dettagli.
Bit 3: 2 - Ris: Bit riservati
Questi bit sono bit riservati nell'ATtiny25 / 45/85 e saranno sempre letti come zero.
Bit 1: 0 - WGM0 [1: 0]: modalità di generazione della forma d'onda
Combinati con il bit WGM02 trovato nel registro TCCR0B, questi bit controllano la sequenza di conteggio del contatore, la sorgente del valore massimo (TOP) del contatore e il tipo di generazione della forma d'onda da utilizzare, vedere Tabella 11-5. Le modalità di funzionamento supportate dall'unità Timer / Counter sono: modalità normale (contatore), modalità Clear Timer on Compare Match (CTC) e due tipi di modalità Pulse Width Modulation (PWM) (vedere "Modalità di funzionamento" a pagina 71).
Tabella 11-5. Bit della modalità di generazione della forma d'onda Descrizione
Modalità | GMG 02 | GMG 01 | GMG 00 | Modalità di funzionamento timer / contatore | SUPERIORE | Aggiornamento di OCRx a | Flag TOV impostato su |
0 | 0 | 0 | 0 | Normale | 0xFF | Immediato | Massimo(1) |
1 | 0 | 0 | 1 | PWM, correzione di fase | 0xFF | SUPERIORE | METTER IL FONDO A(2) |
2 | 0 | 1 | 0 | CTC | OCRA | Immediato | Massimo(1) |
3 | 0 | 1 | 1 | PWM veloce | 0xFF | METTER IL FONDO A(2) | Massimo(1) |
4 | 1 | 0 | 0 | Prenotato | – | – | – |
5 | 1 | 0 | 1 | PWM, correzione di fase | OCRA | SUPERIORE | METTER IL FONDO A(2) |
6 | 1 | 1 | 0 | Prenotato | – | – | – |
7 | 1 | 1 | 1 | PWM veloce | OCRA | METTER IL FONDO A(2) | SUPERIORE |
Bit 7 - FOC0A: Force Output Compare A
Il bit FOC0A è attivo solo quando i bit WGM specificano una modalità non PWM.
Tuttavia, per garantire la compatibilità con i dispositivi futuri, questo bit deve essere impostato su zero quando TCCR0B viene scritto quando si opera in modalità PWM. Quando si scrive uno logico nel bit FOC0A, viene forzato un confronto immediato del confronto sull'unità di generazione della forma d'onda. L'uscita OC0A viene modificata in base all'impostazione dei bit COM0A [1: 0]. Notare che il bit FOC0A è implementato come strobo. Pertanto è il valore presente nei bit COM0A [1: 0] che determina l'effetto del confronto forzato.
Uno strobo FOC0A non genererà alcun interrupt, né cancellerà il timer in modalità CTC utilizzando OCR0A come TOP. Il bit FOC0A viene sempre letto come zero.
Bit 6 - FOC0B: Force Output Compare B
Il bit FOC0B è attivo solo quando i bit WGM specificano una modalità non PWM.
Tuttavia, per garantire la compatibilità con i dispositivi futuri, questo bit deve essere impostato su zero quando TCCR0B viene scritto quando si opera in modalità PWM. Quando si scrive uno logico nel bit FOC0B, viene forzato un confronto immediato del confronto sull'unità di generazione della forma d'onda. L'uscita OC0B viene modificata in base all'impostazione dei bit COM0B [1: 0]. Notare che il bit FOC0B è implementato come strobo. Pertanto è il valore presente nei bit COM0B [1: 0] che determina l'effetto del confronto forzato.
Uno strobo FOC0B non genererà alcun interrupt, né cancellerà il timer in modalità CTC utilizzando OCR0B come TOP.
Il bit FOC0B viene sempre letto come zero.
Bit 5: 4 - Ris: Bit riservati
Questi bit sono bit riservati nell'ATtiny25 / 45/85 e saranno sempre letti come zero.
Bit 3 - WGM02: modalità di generazione della forma d'onda
Vedere la descrizione in "TCCR0A - Registro di controllo timer / contatore A" a pagina 77.
Bit 2: 0 - CS0 [2: 0]: selezione orologio
I tre bit di selezione dell'orologio selezionano la sorgente dell'orologio che deve essere utilizzata dal timer / contatore.
Tabella 11-6. Bit di selezione dell'orologio Descrizione
CS02 | CS01 | CS00 | Descrizione |
0 | 0 | 0 | Nessuna sorgente di clock (timer / contatore fermi) |
0 | 0 | 1 | clkI/O/(Nessuna prescalatura) |
0 | 1 | 0 | clkI/O/8 (dal prescaler) |
0 | 1 | 1 | clkI/O/64 (dal prescaler) |
1 | 0 | 0 | clkI/O/256 (dal prescaler) |
1 | 0 | 1 | clkI/O/1024 (dal prescaler) |
1 | 1 | 0 | Sorgente di clock esterna sul pin T0. Orologio sul fronte di caduta. |
1 | 1 | 1 | Sorgente di clock esterna sul pin T0. Orologio sul fronte di salita. |
Se vengono utilizzate modalità pin esterne per Timer / Counter0, le transizioni sul pin T0 eseguiranno il clock del contatore anche se il pin è configurato come uscita. Questa funzione consente il controllo software del conteggio.
Contare e confrontare le unità
Il funzionamento generale del Timer / Contatore1 è descritto nella modalità asincrona e il funzionamento nel modo sincrono è menzionato solo se ci sono differenze tra queste due modalità. Figura 12-2 mostra lo schema a blocchi del registro di sincronizzazione Timer / Contatore 1 ei ritardi di sincronizzazione tra i registri. Notare che tutti i dettagli di clock gating non sono mostrati nella figura. I valori del registro Timer / Counter1 passano attraverso i registri di sincronizzazione interni, che causano il ritardo di sincronizzazione dell'ingresso, prima di influenzare il funzionamento del contatore. I registri TCCR1, GTCCR, OCR1A, OCR1B e OCR1C possono essere riletti subito dopo la scrittura del registro. I valori di rilettura sono ritardati per il registro e i flag (OCF1A, OCF1B e TOV1) Timer / Contatore1 (TCNT1), a causa della sincronizzazione di ingresso e uscita.
Il timer / contatore1 offre un'elevata risoluzione e un utilizzo ad alta precisione con le minori opportunità di prescaling. Può anche supportare due modulatori di larghezza di impulso a 8 bit accurati e ad alta velocità che utilizzano velocità di clock fino a 64 MHz (o 32 MHz in modalità a bassa velocità). In questa modalità, Timer / Counter1 e i registri di confronto delle uscite fungono da PWM indipendenti doppi con uscite non invertite e invertite non sovrapposte. Fare riferimento a pagina 86 per una descrizione dettagliata di questa funzione. Allo stesso modo, le elevate opportunità di prescaling rendono questa unità utile per funzioni a velocità inferiore o funzioni di temporizzazione esatte con azioni poco frequenti.
Figura 12-2. Diagramma a blocchi del registro di sincronizzazione del timer/contatore 1.
Timer / Counter1 e il prescaler consentono di eseguire la CPU da qualsiasi sorgente di clock mentre il prescaler opera sul veloce clock PCK a 64 MHz (o 32 MHz in modalità a bassa velocità) in modalità asincrona.
Notare che la frequenza di clock del sistema deve essere inferiore a un terzo della frequenza PCK. Il meccanismo di sincronizzazione del Timer / Counter1 asincrono necessita di almeno due fronti del PCK quando il clock di sistema è alto. Se la frequenza dell'orologio di sistema è troppo alta, c'è il rischio che i dati o i valori di controllo vadano persi.
Il seguente Figura 12-3 mostra lo schema a blocchi per Timer / Counter1.
Tabella 12-1. Modalità di confronto Selezionare in modalità PWM
COM1x1 | COM1x0 | Effetto sui pin di confronto dell'output |
0 | 0 | OC1x non connesso. OC1x non connesso. |
0 | 1 | OC1x cancellato durante il confronto. Impostato quandoTCNT1 = $ 00. OC1x impostato sulla corrispondenza di confronto. Cancellato quando TCNT1 = $ 00. |
1 | 0 | OC1x cancellato durante il confronto. Impostato quando TCNT1 = $ 00. OC1x non connesso. |
1 | 1 | OC1x Impostato sulla corrispondenza di confronto. Cancellato quando TCNT1 = $ 00. OC1x non connesso. |
Caratteristiche dell'ADC
Tabella 21-8. Caratteristiche ADC, canali single-ended. TA = da -40°C a +85°C
Simbolo | Parametro | Condizione | Minimo | Tipo | Massimo | Unità |
Risoluzione | 10 | Pezzi | ||||
Precisione assoluta (inclusi errori INL, DNL e quantizzazione, guadagno e offset) | VREF = 4V, VCC = 4V,
Orologio ADC = 200 kHz |
2 | LSB | |||
VREF = 4V, VCC = 4V,
Orologio ADC = 1 MHz |
3 | LSB | ||||
VREF = 4V, VCC = 4V,
Orologio ADC = 200 kHz Modalità di riduzione del rumore |
1.5 | LSB | ||||
VREF = 4V, VCC = 4V,
Orologio ADC = 1 MHz Modalità di riduzione del rumore |
2.5 | LSB | ||||
Non linearità integrale (INL) (precisione dopo offset e calibrazione del guadagno) | VREF = 4V, VCC = 4V,
Orologio ADC = 200 kHz |
1 | LSB | |||
Non linearità differenziale (DNL) | VREF = 4V, VCC = 4V,
Orologio ADC = 200 kHz |
0.5 | LSB | |||
Guadagna errore | VREF = 4V, VCC = 4V,
Orologio ADC = 200 kHz |
2.5 | LSB | |||
Errore di offset | VREF = 4V, VCC = 4V,
Orologio ADC = 200 kHz |
1.5 | LSB | |||
Tempo di conversione | Conversione in esecuzione gratuita | 14 | 280 | ms | ||
Frequenza dell'orologio | 50 | 1000 | kHz | |||
Numero di telaio | Ingresso volumetage | Terra | VREF | V | ||
Larghezza di banda in ingresso | 38.4 | kHz | ||||
RIF. | Volume di riferimento esternotage | 2.0 | VCC | V | ||
Vint | Volume internotage Riferimento | 1.0 | 1.1 | 1.2 | V | |
Riferimento interno 2.56 V. (1) | VCC > 3.0 V | 2.3 | 2.56 | 2.8 | V | |
RIF | 32 | kΩ | ||||
PIOVERE | Resistenza ingresso analogico | 100 | MΩ | |||
Uscita ADC | 0 | 1023 | LSB |
Nota: 1. I valori sono solo linee guida.
Tabella 21-9. Caratteristiche ADC, canali differenziali (modalità unipolare). TA = da -40°C a +85°C
Simbolo | Parametro | Condizione | Minimo | Tipo | Massimo | Unità |
Risoluzione | Guadagno = 1x | 10 | Pezzi | |||
Guadagno = 20x | 10 | Pezzi | ||||
Precisione assoluta (inclusi INL, DNL e
Quantizzazione, guadagno e errori di offset) |
Guadagno = 1x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
10.0 | LSB | |||
Guadagno = 20x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
20.0 | LSB | ||||
Non linearità integrale (INL) (precisione dopo offset e calibrazione del guadagno) | Guadagno = 1x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
4.0 | LSB | |||
Guadagno = 20x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
10.0 | LSB | ||||
Guadagna errore | Guadagno = 1x | 10.0 | LSB | |||
Guadagno = 20x | 15.0 | LSB | ||||
Errore di offset | Guadagno = 1x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
3.0 | LSB | |||
Guadagno = 20x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
4.0 | LSB | ||||
Tempo di conversione | Conversione in esecuzione gratuita | 70 | 280 | ms | ||
Frequenza dell'orologio | 50 | 200 | kHz | |||
Numero di telaio | Ingresso volumetage | Terra | VCC | V | ||
VDIFF | Differenziale di ingresso Voltage | VREF/Guadagno | V | |||
Larghezza di banda in ingresso | 4 | kHz | ||||
RIF. | Volume di riferimento esternotage | 2.0 | VCC – 1.0 | V | ||
Vint | Volume internotage Riferimento | 1.0 | 1.1 | 1.2 | V | |
Riferimento interno 2.56 V. (1) | VCC > 3.0 V | 2.3 | 2.56 | 2.8 | V | |
RIF | Resistenza di ingresso di riferimento | 32 | kΩ | |||
PIOVERE | Resistenza ingresso analogico | 100 | MΩ | |||
Uscita conversione ADC | 0 | 1023 | LSB |
Nota: i valori sono solo linee guida.
Tabella 21-10. Caratteristiche ADC, canali differenziali (modalità bipolare). TA = da -40°C a +85°C
Simbolo | Parametro | Condizione | Minimo | Tipo | Massimo | Unità |
Risoluzione | Guadagno = 1x | 10 | Pezzi | |||
Guadagno = 20x | 10 | Pezzi | ||||
Precisione assoluta (inclusi INL, DNL e
Quantizzazione, guadagno e errori di offset) |
Guadagno = 1x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
8.0 | LSB | |||
Guadagno = 20x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
8.0 | LSB | ||||
Non linearità integrale (INL) (precisione dopo offset e calibrazione del guadagno) | Guadagno = 1x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
4.0 | LSB | |||
Guadagno = 20x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
5.0 | LSB | ||||
Guadagna errore | Guadagno = 1x | 4.0 | LSB | |||
Guadagno = 20x | 5.0 | LSB | ||||
Errore di offset | Guadagno = 1x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
3.0 | LSB | |||
Guadagno = 20x
VREF = 4V, VCC = 5V Orologio ADC = 50-200 kHz |
4.0 | LSB | ||||
Tempo di conversione | Conversione in esecuzione gratuita | 70 | 280 | ms | ||
Frequenza dell'orologio | 50 | 200 | kHz | |||
Numero di telaio | Ingresso volumetage | Terra | VCC | V | ||
VDIFF | Differenziale di ingresso Voltage | VREF/Guadagno | V | |||
Larghezza di banda in ingresso | 4 | kHz | ||||
RIF. | Volume di riferimento esternotage | 2.0 | VCC – 1.0 | V | ||
Vint | Volume internotage Riferimento | 1.0 | 1.1 | 1.2 | V | |
Riferimento interno 2.56 V. (1) | VCC > 3.0 V | 2.3 | 2.56 | 2.8 | V | |
RIF | Resistenza di ingresso di riferimento | 32 | kΩ | |||
PIOVERE | Resistenza ingresso analogico | 100 | MΩ | |||
Uscita conversione ADC | -512 | 511 | LSB |
Riepilogo del set di istruzioni
Mnemonici | Operandi | Descrizione | Operazione | Bandiere | #Orologi |
ISTRUZIONI ARITMETICHE E LOGICHE | |||||
AGGIUNGERE | Rd, Rr | Aggiungi due registri | Rd ← Rd + Rr | Z, C, N, V, H | 1 |
ADC | Rd, Rr | Aggiungi con Trasportare due registri | Rd ← Rd + Rr + C | Z, C, N, V, H | 1 |
ADIW | Rdl, K | Aggiungi immediato a Word | Tdh:Rdl ← Tdh:Rdl + K | Z, C, N, V, S | 2 |
SUB | Rd, Rr | Sottrai due registri | Rd ← Rd – Rr | Z, C, N, V, H | 1 |
SUBITO | Rd, K | Sottrai costante dal registro | Td ← Td – K | Z, C, N, V, H | 1 |
SBC | Rd, Rr | Sottrai con Riporta due registri | Rd ← Rd – Rr – C | Z, C, N, V, H | 1 |
SBCI | Rd, K | Sottrarre con Carry Constant da Reg. | Mid ← Mis – Re – Do | Z, C, N, V, H | 1 |
SBIW | Rdl, K | Sottrai immediato da Word | Rdh:Rdl ← Rdh:Rdl – K | Z, C, N, V, S | 2 |
E | Rd, Rr | Registri AND logici | Rd ← Rd ∙ Rr | Z, N, V | 1 |
EIO | Rd, K | Registro AND logico e costante | Rd ← Rd ∙ K | Z, N, V | 1 |
OR | Rd, Rr | Registri OR logici | Rd ← Rd v Rr | Z, N, V | 1 |
ORI | Rd, K | Registro OR logico e costante | Rd ← Rd v K | Z, N, V | 1 |
EOR | Rd, Rr | Registri OR esclusivi | Rd ← Rd ⊕ Rr | Z, N, V | 1 |
COM | Rd | Il proprio complemento | Rd ← 0xFF − Rd | Z, C, N, V | 1 |
NEG | Rd | Complemento a due | Rd ← 0x00 − Rd | Z, C, N, V, H | 1 |
SBR | Rd, K | Imposta bit nel registro | Rd ← Rd v K | Z, N, V | 1 |
CBR | Rd, K | Cancella bit nel registro | Rd ← Rd ∙ (0xFF – K) | Z, N, V | 1 |
INC | Rd | Incremento | Rd ← Rd + 1 | Z, N, V | 1 |
DIC. | Rd | diminuzione | Rd ← Rd − 1 | Z, N, V | 1 |
TST | Rd | Prova per zero o meno | Rd ← Rd ∙ Rd | Z, N, V | 1 |
CLR | Rd | Cancella registro | Rd ← Rd ⊕ Rd | Z, N, V | 1 |
SERBATOIO | Rd | Imposta registro | Rd ← 0xFF | Nessuno | 1 |
ISTRUZIONI PER LA FILIALE | |||||
RJMP | k | Salto relativo | PC ← PC + k + 1 | Nessuno | 2 |
IJMP | Salto indiretto a (Z) | PC ← Z | Nessuno | 2 | |
RALL | k | Richiamo della subroutine relativa | PC ← PC + k + 1 | Nessuno | 3 |
CHIAMO | Chiamata indiretta a (Z) | PC ← Z | Nessuno | 3 | |
RITIRARE | Ritorno subroutine | PC ← STILE | Nessuno | 4 | |
RETI | Interrompi ritorno | PC ← STILE | I | 4 | |
CPSE | Rd, Rr | Confronta, salta se uguale | se (Rd = Rr) PC ← PC + 2 o 3 | Nessuno | 1/2/3 |
CP | Rd, Rr | Confrontare | Rd - Rr | Z, N, V, C, H | 1 |
PCC | Rd, Rr | Confronta con Carry | Rd - Rr - C | Z, N, V, C, H | 1 |
CPI | Rd, K | Confronta Registrati con Immediato | Rd-K | Z, N, V, C, H | 1 |
SBRC | Rrr, b | Salta se il bit nel registro è stato cancellato | se (Rr(b)=0) PC ← PC + 2 o 3 | Nessuno | 1/2/3 |
SBR | Rrr, b | Salta se il bit nel registro è impostato | se (Rr(b)=1) PC ← PC + 2 o 3 | Nessuno | 1/2/3 |
SBI | p, b | Salta se il bit nel registro I / O è azzerato | se (P(b)=0) PC ← PC + 2 o 3 | Nessuno | 1/2/3 |
SBI | p, b | Salta se il bit nel registro I / O è impostato | se (P(b)=1) PC ← PC + 2 o 3 | Nessuno | 1/2/3 |
BRBS | s, k | Ramo se flag di stato impostato | se (SREG(s) = 1) allora PC←PC+k + 1 | Nessuno | 1/2 |
BRBC | s, k | Ramo se il flag di stato è deselezionato | se (SREG(s) = 0) allora PC←PC+k + 1 | Nessuno | 1/2 |
BREQ | k | Ramo se uguale | se (Z = 1) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRN | k | Branch se non uguale | se (Z = 0) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRCS | k | Ramo se porta insieme | se (C = 1) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRCC | k | Ramo se il trasporto è stato cancellato | se (C = 0) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRSH | k | Ramo se uguale o superiore | se (C = 0) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRLO | k | Ramo se inferiore | se (C = 1) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRM | k | Ramo se meno | se (N = 1) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRPL | k | Ramo se Plus | se (N = 0) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRGE | k | Ramo se maggiore o uguale, firmato | se (N ⊕ V= 0) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRLT | k | Ramo se inferiore a zero, firmato | se (N ⊕ V= 1) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRHS | k | Ramo se è impostata la bandierina per metà trasporto | se (H = 1) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRHC | k | Ramo se la bandiera Half Carry è stata deselezionata | se (H = 0) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRTS | k | Ramo se flag T impostato | se (T = 1) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRTC | k | Ramo se flag T deselezionato | se (T = 0) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRVS | k | Ramo se il flag di overflow è impostato | se (V = 1) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRVC | k | Ramo se il flag di overflow è cancellato | se (V = 0) allora PC ← PC + k + 1 | Nessuno | 1/2 |
BRIE | k | Ramo se interrupt abilitato | se ( I = 1) allora PC ← PC + k + 1 | Nessuno | 1/2 |
SPOSA | k | Ramo se interruzione disabilitata | se ( I = 0) allora PC ← PC + k + 1 | Nessuno | 1/2 |
ISTRUZIONI PER BIT E BIT-TEST | |||||
SBI | P, b | Imposta bit nel registro I / O | I/O(P,b) ← 1 | Nessuno | 2 |
CBI | P, b | Cancella bit nel registro I / O | I/O(P,b) ← 0 | Nessuno | 2 |
LSL | Rd | Spostamento logico a sinistra | Rd(n+1) ← Rd(n), Rd(0) ← 0 | Z, C, N, V | 1 |
LSR | Rd | Spostamento logico a destra | Rd(n) ← Rd(n+1), Rd(7) ← 0 | Z, C, N, V | 1 |
ROL | Rd | Ruota a sinistra attraverso il trasporto | Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) | Z, C, N, V | 1 |
ROR | Rd | Ruota a destra attraverso il trasporto | Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) | Z, C, N, V | 1 |
ASR | Rd | Spostamento aritmetico a destra | Rd(n) ← Rd(n+1), n=0..6 | Z, C, N, V | 1 |
Mnemonici | Operandi | Descrizione | Operazione | Bandiere | #Orologi |
SCAMBIO | Rd | Scambia stuzzichini | Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) | Nessuno | 1 |
BSET | s | Flag impostato | SREG(i) ← 1 | SREG | 1 |
BCR (Breve Rinascita) | s | Cancella bandiera | SREG(i) ← 0 | SREG | 1 |
Ora legale | Rrr, b | Memorizza bit da Register a T | T ← Rr(b) | T | 1 |
BLD | Rd, b | Caricamento bit da T a registro | Rd(b) ← T | Nessuno | 1 |
SEC | Imposta il trasporto | DO ← 1 | C | 1 | |
CLC | Cancella Carry | DO ← 0 | C | 1 | |
SEN | Imposta flag negativo | N ← 1 | N | 1 | |
CLN | Cancella flag negativo | N ← 0 | N | 1 | |
Zona Economica Speciale | Imposta Zero Flag | Z ← 1 | Z | 1 | |
CLZ | Cancella flag zero | Z ← 0 | Z | 1 | |
Sei tu | Abilitazione interruzione globale | Io ← 1 | I | 1 | |
Interfaccia a riga di comando | Disabilita interrupt globale | Io ← 0 | I | 1 | |
SES | Imposta flag di prova firmato | S ← 1 | S | 1 | |
CLS | Flag di prova firmato chiaro | S ← 0 | S | 1 | |
SEV | Imposta l'overflow del complemento a due. | V ← 1 | V | 1 | |
CLV | Clear Twos Complemento Overflow | V ← 0 | V | 1 | |
IMPOSTATO | Imposta T in SREG | T ← 1 | T | 1 | |
CLT | Cancella T in SREG | T ← 0 | T | 1 | |
SEH | Impostare Half Carry Flag in SREG | H ← 1 | H | 1 | |
CLH | Cancella Half Carry Flag in SREG | H ← 0 | H | 1 | |
ISTRUZIONI PER IL TRASFERIMENTO DEI DATI | |||||
Movimento | Rd, Rr | Spostarsi tra i registri | Rd ← Rr | Nessuno | 1 |
MOV | Rd, Rr | Copia registro parola | Rd+1:Rd ← Rr+1:Rr | Nessuno | 1 |
LDI | Rd, K | Carica immediata | Rd ← K | Nessuno | 1 |
LD | Rd, X | Carica indiretta | Rd ← (X) | Nessuno | 2 |
LD | Rd, X + | Carica indiretta e post-inc. | Rd ← (X), X ← X + 1 | Nessuno | 2 |
LD | Rd, - X | Carica indiretta e pre-dec. | X ← X – 1, Rd ← (X) | Nessuno | 2 |
LD | Rd, Sì | Carica indiretta | Rd ← (Y) | Nessuno | 2 |
LD | Rd, Y + | Carica indiretta e post-inc. | Rd ← (Y), Y ← Y + 1 | Nessuno | 2 |
LD | Rd, - Y | Carica indiretta e pre-dec. | Y ← Y – 1, Rd ← (Y) | Nessuno | 2 |
LDD | Rd, Y + q | Carico indiretto con spostamento | Rd ← (Y + q) | Nessuno | 2 |
LD | Rd, Z | Carica indiretta | Rd ← (Z) | Nessuno | 2 |
LD | Rd, Z + | Carica indiretta e post-inc. | Rd ← (Z), Z ← Z+1 | Nessuno | 2 |
LD | Rd, -Z | Carica indiretta e pre-dec. | Z ← Z – 1, Rd ← (Z) | Nessuno | 2 |
LDD | Rd, Z + q | Carico indiretto con spostamento | Rd ← (Z + q) | Nessuno | 2 |
LDS | Rd, k | Carica direttamente da SRAM | Rd ← (k) | Nessuno | 2 |
ST | X, R | Store indiretto | (X) ← Rr | Nessuno | 2 |
ST | X +, Rr | Store Indirect e Post-Inc. | (X) ← Rr, X ← X + 1 | Nessuno | 2 |
ST | - X, Rr | Store indiretto e pre-dic. | X ← X – 1, (X) ← Rr | Nessuno | 2 |
ST | Sì, Rr | Store indiretto | (Y) ← Rr | Nessuno | 2 |
ST | Y +, Rr | Store Indirect e Post-Inc. | (Y) ← Rr, Y ← Y + 1 | Nessuno | 2 |
ST | - Y, Rr | Store indiretto e pre-dic. | Y ← Y – 1, (Y) ← Rr | Nessuno | 2 |
Malattia sessualmente trasmissibile | Y + q, Rr | Immagazzinamento indiretto con spostamento | (Y + q) ← Rr | Nessuno | 2 |
ST | Z, Rr | Store indiretto | (Z) ← Rr | Nessuno | 2 |
ST | Z +, Rr | Store Indirect e Post-Inc. | (Z) ← Rr, Z ← Z + 1 | Nessuno | 2 |
ST | -Z, Rr | Store indiretto e pre-dic. | Z ← Z – 1, (Z) ← Rr | Nessuno | 2 |
Malattia sessualmente trasmissibile | Z + q, Rr | Immagazzinamento indiretto con spostamento | (Z + q) ← Rr | Nessuno | 2 |
Servizio Clienti | k, rr | Memorizza direttamente su SRAM | (k) ← Rr | Nessuno | 2 |
LPM | Carica la memoria del programma | R0 ← (Z) | Nessuno | 3 | |
LPM | Rd, Z | Carica la memoria del programma | Rd ← (Z) | Nessuno | 3 |
LPM | Rd, Z + | Carica la memoria del programma e Post-Inc | Rd ← (Z), Z ← Z+1 | Nessuno | 3 |
SPM | Memorizza la memoria del programma | (z) ← R1:R0 | Nessuno | ||
IN | Rd, p | In porto | Rd ← P | Nessuno | 1 |
FUORI | P, Rr | Fuori porto | P ← Rr | Nessuno | 1 |
SPINGERE | Rr | Spingere il registro sullo stack | PILE ← Rr | Nessuno | 2 |
POP | Rd | Registro pop dallo stack | Rd ← PILE | Nessuno | 2 |
ISTRUZIONI DI CONTROLLO MCU | |||||
NOP | Nessuna operazione | Nessuno | 1 | ||
SONNO | Sonno | (vedi descrizione specifica per la funzione Sleep) | Nessuno | 1 | |
WDR | Ripristino watchdog | (vedi descrizione specifica per WDR / Timer) | Nessuno | 1 | |
ROTTURA | Rottura |
Velocità (MHz) (1) | Volume di fornituratage(V) | Intervallo di temperatura | Pacchetto (2) | Codice di ordinazione (3) |
10 | 1.8 – 5.5 | Industriale
(Da -40 ° C a + 85 ° C) (4) |
8P3 | A Tiny45V-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 | Industriale
(Da -40 ° C a + 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. Per velocità rispetto al volume di alimentazionetage, vedere la sezione 21.3 "Velocità" a pagina 163.
Tutti gli imballaggi sono privi di Pb, alogenuri e completamente ecologici e sono conformi alla direttiva europea per la restrizione delle sostanze pericolose (RoHS).
Indicatori di codice
H: finitura piombo NiPdAu
U: latta opaca
R: nastro e bobina
Questi dispositivi possono essere forniti anche sotto forma di wafer. Contattare l'ufficio vendite Atmel locale per informazioni dettagliate sugli ordini e quantità minime.
errore di stampa
Errata ATtiny25
La lettera di revisione in questa sezione si riferisce alla revisione del dispositivo ATtiny25.
Rev D - F
Nessun errata noto.
Rev B - C
La lettura della EEPROM potrebbe non riuscire a basso volume di alimentazionetage / frequenza di clock bassa
La lettura della EEPROM potrebbe non riuscire a basso volume di alimentazionetage / frequenza di clock bassa
Tentativo di leggere EEPROM a basse frequenze di clock e/o basso volume di alimentazionetage può causare dati non validi.
Risoluzione dei problemi / soluzione alternativa
Non utilizzare la EEPROM quando la frequenza di clock è inferiore a 1 MHz e fornire voltage è inferiore a 2V. Se la frequenza operativa non può essere aumentata oltre 1 MHz, fornire voltage dovrebbe essere superiore a 2V. Allo stesso modo, se l'offerta voltage non può essere aumentato oltre 2 V, quindi la frequenza operativa deve essere superiore a 1 MHz.
Questa caratteristica è nota per essere dipendente dalla temperatura ma non è stata caratterizzata. Le linee guida sono fornite solo per la temperatura ambiente.
Reverendo A
Non sampguidato.
Errata ATtiny45
La lettera di revisione in questa sezione si riferisce alla revisione del dispositivo ATtiny45.
Rev F - G
Nessun errata noto
Rev D - E
La lettura della EEPROM potrebbe non riuscire a basso volume di alimentazionetage / frequenza di clock bassa
La lettura della EEPROM potrebbe non riuscire a basso volume di alimentazionetage / frequenza di clock bassa
Tentativo di leggere EEPROM a basse frequenze di clock e/o basso volume di alimentazionetage può causare dati non validi.
Risoluzione dei problemi / soluzione alternativa
Non utilizzare la EEPROM quando la frequenza di clock è inferiore a 1 MHz e fornire voltage è inferiore a 2V. Se la frequenza operativa non può essere aumentata oltre 1 MHz, fornire voltage dovrebbe essere superiore a 2V. Allo stesso modo, se l'offerta voltage non può essere aumentato oltre 2 V, quindi la frequenza operativa deve essere superiore a 1 MHz.
Questa caratteristica è nota per essere dipendente dalla temperatura ma non è stata caratterizzata. Le linee guida sono fornite solo per la temperatura ambiente.
Rev B - C
PLL non si blocca
La EEPROM letta dal codice dell'applicazione non funziona in Lock Bit Mode 3
La lettura della EEPROM potrebbe non riuscire a basso volume di alimentazionetage / frequenza di clock bassa
La generazione dell'uscita PWM del contatore del timer 1 su OC1B-XOC1B non funziona correttamente
PLL non si blocca
Quando a frequenze inferiori a 6.0 MHz, il PLL non si bloccherà
Risoluzione dei problemi / soluzione alternativa
Quando si utilizza il PLL, eseguire a 6.0 MHz o superiore.
La EEPROM letta dal codice dell'applicazione non funziona in Lock Bit Mode 3
Quando i bit di blocco memoria LB2 e LB1 sono programmati in modalità 3, la lettura della EEPROM non funziona dal codice dell'applicazione.
Risoluzione dei problemi / aggirare
Non impostare Lock Bit Protection Mode 3 quando il codice dell'applicazione deve essere letto dalla EEPROM.
La lettura della EEPROM potrebbe non riuscire a basso volume di alimentazionetage / frequenza di clock bassa
Tentativo di leggere EEPROM a basse frequenze di clock e/o basso volume di alimentazionetage può causare dati non validi.
Risoluzione dei problemi / soluzione alternativa
Non utilizzare la EEPROM quando la frequenza di clock è inferiore a 1 MHz e fornire voltage è inferiore a 2V. Se la frequenza operativa non può essere aumentata oltre 1 MHz, fornire voltage dovrebbe essere superiore a 2V. Allo stesso modo, se l'offerta voltage non può essere aumentato oltre 2 V, quindi la frequenza operativa deve essere superiore a 1 MHz.
Questa caratteristica è nota per essere dipendente dalla temperatura ma non è stata caratterizzata. Le linee guida sono fornite solo per la temperatura ambiente.
La generazione dell'uscita PWM del contatore del timer 1 su OC1B - XOC1B non funziona correttamente
L'uscita PWM del contatore del timer1 OC1B-XOC1B non funziona correttamente. Solo nel caso in cui i bit di controllo, COM1B1 e COM1B0 siano nella stessa modalità rispettivamente di COM1A1 e COM1A0, l'uscita OC1B-XOC1B funziona correttamente.
Risoluzione dei problemi / aggirare
L'unica soluzione è utilizzare la stessa impostazione di controllo sui bit di controllo COM1A [1: 0] e COM1B [1: 0], vedere la tabella 14-4 nella scheda tecnica. Il problema è stato risolto per Tiny45 rev D.
Reverendo A
Consumo energetico troppo elevato
DebugWIRE perde la comunicazione quando si accede a interrupt
PLL non si blocca
La EEPROM letta dal codice dell'applicazione non funziona in Lock Bit Mode 3
La lettura della EEPROM potrebbe non riuscire a basso volume di alimentazionetage / frequenza di clock bassa
Consumo energetico troppo elevato
Tre situazioni porteranno a un consumo energetico troppo elevato. Questi sono:
Un clock esterno viene selezionato dai fusibili, ma la PORTA I / O è ancora abilitata come uscita.
La EEPROM viene letta prima di passare allo spegnimento.
VCC è di 4.5 volt o superiore.
Dichiarazione di non responsabilità: le informazioni contenute in questo documento sono fornite in relazione ai prodotti Atmel. Nessuna licenza, esplicita o implicita, per preclusione o altro, a qualsiasi diritto di proprietà intellettuale è concessa dal presente documento o in relazione alla vendita di prodotti Atmel. AD ECCEZIONE DI QUANTO STABILITO NEI TERMINI E CONDIZIONI DI VENDITA ATMEL SITUATI SU ATMEL WEBSITE, ATMEL NON SI ASSUME ALCUNA RESPONSABILITÀ E NEGA QUALSIASI GARANZIA ESPLICITA, IMPLICITA O LEGALE RELATIVA AI SUOI PRODOTTI INCLUSE, MA NON LIMITATE A, GARANZIE IMPLICITE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE O NON VIOLAZIONE. IN NESSUN CASO ATMEL SARÀ RESPONSABILE PER QUALSIASI DANNO DIRETTO, INDIRETTO, CONSEQUENZIALE, PUNITIVO, SPECIALE O ACCIDENTALE (INCLUSI, SENZA LIMITAZIONI, DANNI PER PERDITE E PROFITTI, INTERRUZIONE DI ATTIVITÀ O PERDITA DI INFORMAZIONI) DERIVANTI DALL'UTILIZZO O DALL'INCAPACITÀ D'USO QUESTO DOCUMENTO, ANCHE QUALORA ATMEL SIA STATA INFORMATA DELLA POSSIBILITÀ DI TALI DANNI.
Atmel non rilascia alcuna dichiarazione o garanzia in merito all'accuratezza o alla completezza dei contenuti di questo documento e si riserva il diritto di apportare modifiche alle specifiche e alle descrizioni dei prodotti in qualsiasi momento senza preavviso. Atmel non si impegna ad aggiornare le informazioni qui contenute. Se non diversamente specificato, i prodotti Atmel non sono adatti e non devono essere utilizzati in applicazioni automobilistiche. I prodotti Atmel non sono destinati, autorizzati o garantiti per l'uso come componenti in applicazioni destinate a supportare o sostenere la vita.