Atmel 8-bit AVR Microcontroller mei 2/4/8K bytes yn-systeem programmearbere Flash
Features
- High Performance, Low Power AVR® 8-Bit Microcontroller
- Avansearre RISC-arsjitektuer
- 120 Krêftige ynstruksjes - Measte útfiering fan ien kloksyklus
- 32 x 8 Wurkregisters foar algemiene doelen
- Folslein statyske operaasje
- Net-fluchtich programma- en gegevensherinneringen
- 2/4 / 8K Bytes yn-systeem programmearber programma-ûnthâldflits
- Endurance: 10,000 Skriuw-/wissyklusen
- 128/256/512 Bytes Yn-systeem programmearbere EEPROM
- Endurance: 100,000 Skriuw-/wissyklusen
- 128/256/512 Bytes Yntern SRAM
- Programmearingsslot foar selsprogrammearjend Flashprogramma en EEPROM Data Security
Perifeare funksjes
- 8-bit timer / teller mei prescaler en twa PWM-kanalen
- 8-bit hege snelheid timer / teller mei aparte prescaler
- 2 PWM-útfier mei hege frekwinsje mei aparte útfier fergelykje registers
- Programmierbere Dead Time Generator
- USI - Universele seriële ynterface mei starttoetsdetektor
- 10-bit ADC
4 single einige kanalen
2 Differinsjoneel ADC-kanaelparen mei programmearbere winst (1x, 20x)
Temperatuermjitting
Programmierbere Watchdog-timer mei aparte oscillator op chip
Analoge fergeliking op chip
Spesjale funksjes foar mikrokontroller
debugWIRE Untbrekkingssysteem op chip
Yn-systeem programmearber fia SPI-poarte
Eksterne en ynterne ûnderbrekkingsboarnen
Idle mei lege macht, ADC-lûdsreduksje, en Power-down-modus
Ferbettere Power-on Reset Circuit
Programmearber Brown-out Detection Circuit
Ynterne kalibreare oscillator
I / O en pakketten
Seis programmearbere I / O-rigels
8-pin PDIP, 8-pin SOIC, 20-pad QFN / MLF, en 8-pin TSSOP (allinich ATtiny45 / V)
Operaasje Voltage
- 1.8 - 5.5V foar ATtiny25V / 45V / 85V
- 2.7 - 5.5V foar ATtiny25 / 45/85
Speed Grade
- ATtiny25V / 45V / 85V: 0 - 4 MHz @ 1.8 - 5.5V, 0 - 10 MHz @ 2.7 - 5.5V
- ATtiny25 / 45/85: 0 - 10 MHz @ 2.7 - 5.5 V, 0 - 20 MHz @ 4.5 - 5.5 V
Yndustriële temperatuerberik
Low Power Consumption
Aktive modus:
1 MHz, 1.8 V: 300 µA
Power-down modus:
Konfiguraasjes pinje
Pinout ATtiny25 / 45/85
Pin Beskriuwings
VCC: Supply voltage.
GND: Grûn.
Poarte B (PB5: PB0): Poarte B is in 6-bit bi-directional I / O haven mei ynterne pull-up wjerstannen (selektearre foar eltse bit). De útfierbuffers fan Port B hawwe symmetryske rydkarakteristiken mei sawol hege sink- as boarnemooglikheden. As yngongen sille Port B-pins dy't ekstern leech wurde lutsen, stroom boarne as de pull-up wjerstannen binne aktivearre. De poarte B-pins wurde trije-statearre as in reset-betingst aktyf wurdt, sels as de klok net rint.
Port B betsjinnet ek de funksjes fan ferskate spesjale funksjes fan 'e ATtiny25 / 45/85 lykas neamd
Op ATtiny25 wurde de programmearbere I / O-poarten PB3 en PB4 (pins 2 en 3) útwiksele yn ATtiny15 Kompatibiliteitsmodus foar stipe fan 'e efterkompatibiliteit mei ATtiny15.
RESET: Ynput weromsette. In leech nivo op dizze pin foar langer dan de minimale puls lingte sil generearje in reset, sels as de klok net rint en mits de reset pin is net útskeakele. De minimale pulslingte wurdt jûn yn Tabel 21-4 op side 165, Koartere pulsen wurde net garandearre om in reset te generearjen.
De reset-pin kin ek brûkt wurde as (swak) I / O-pin.
Oerview
De ATtiny25 / 45/85 is in CMOS 8-bit microcontroller mei lege macht, basearre op de AVR-ferbettere RISC-arsjitektuer. Troch krêftige ynstruksjes út te fieren yn ien kloksyklus berikt de ATtiny25 / 45/85 trochstreamen dy't 1 MIPS per MHz benaderje, wêrtroch de systeemûntwerper it enerzjyferbrûk kin optimalisearje versus de ferwurkingssnelheid.
Blokdiagram
De AVR-kearn kombineart in rike ynstruksjet set mei 32 wurkregisters foar algemiene doelen. Alle 32 registers binne direkt ferbûn mei de Arithmetic Logic Unit (ALU), wêrtroch twa unôfhinklike registers kinne wurde tagonklik makke yn ien ynstruksje útfierd yn ien kloksyklus. De resultearende arsjitektuer is effisjinter mei koade by it realisearjen fan trochgongen oant tsien kear rapper dan konvinsjonele CISC-mikrokontrollers.
De ATtiny25 / 45/85 biedt de folgjende funksjes: 2/4 / 8K bytes fan yn-systeem programmearbere flits, 128/256/512 bytes EEPROM, 128/256/256 bytes SRAM, 6 algemiene doel I / O-rigels, 32 algemien doelwurkregisters, ien 8-bit timer / teller mei fergelykingsmodi, ien 8-bit hege snelheid timer / teller, universele seriële ynterface, ynterne en eksterne ynterrupsjes, in 4-kanaals, 10-bit ADC, in programmearbere watchdog-timer mei ynterne Oscillator, en trije seleksjoneel enerzjybesparringsmodi. Idle-modus stopt de CPU wylst it SRAM, Timer / Counter, ADC, Analog Comparator, en Interrupt-systeem trochgean mei funksjonearjen. Power-down mode bewarret de registerynhâld, en skeakelt alle chipfunksjes út oant de folgjende ûnderbrekking as hardware weromsette. ADC-lûdsreduksjemodus stopet de CPU en alle I / O-modules útsein ADC, om it skeakelûzjen by ADC-konverzjes te minimalisearjen.
It apparaat wurdt makke mei de net-fluchtige ûnthâldtechnology mei hege tichtheid fan Atmel. De ISP Flash op 'e chip lit it programma-ûnthâld yn-systeem opnij programmearje fia in seriële SPI-interface, troch in konvinsjonele net-fluchtige ûnthâldprogrammeur of troch in On-chip-bootkoade dy't rint op' e AVR-kearn.
De ATtiny25 / 45/85 AVR wurdt stipe mei in folsleine suite fan programma- en systeemûntwikkelingstools ynklusyf: C-pilers, makroassemblers, programmadebugger / simulatoren en evaluaasjekits.
Oer Resources
In wiidweidige set fan ûntwikkelingshulpmiddels, tapassingsnota's en datasheets binne te downloaden op http://www.atmel.com/avr.
Koade Examples
Dizze dokumintaasje befettet ienfâldige koade examples dy't koart litte sjen hoe ferskate dielen fan it apparaat te brûken. Dizze koade eksamples oannimme dat de diel spesifike koptekst file is opnommen foar kompilaasje. Wês bewust dat net alle C -kompilearferkeapers bitdefinysjes befetsje yn 'e koptekst files en ûnderbrekkingshanneling yn C is kompilerôfhinklik. Befêstigje asjebleaft mei de C -kompilaasjedokumintaasje foar mear details.
Foar I / O-registers yn 'e útwreide I / O-kaart moatte "IN", "OUT", "SBIS", "SBIC", "CBI", en "SBI" ynstruksjes wurde ferfongen troch ynstruksjes dy't tagong jouwe ta útwreide I / O. Typysk betsjuttet dit "LDS" en "STS" yn kombinaasje mei "SBRS", "SBRC", "SBR", en "CBR". Tink derom dat net alle AVR-apparaten in útwreide I / O-kaart befetsje.
Kapasitive Touch Sensing
Atmel QTouch Library biedt in ienfâldige te brûken oplossing foar oanraakgefoelige ynterfaces op Atmel AVR-mikrokontrollers. De QTouch Library omfettet stipe foar QTouch® en QMatrix® oanwinstmetoaden.
Touch-sensing wurdt maklik oan elke applikaasje tafoege troch de QTouch Library te keppeljen en de Application Programming Interface (API) fan 'e bibleteek te brûken om de touchkanalen en sensoren te definiearjen. De applikaasje ropt dan de API op om kanaalynformaasje te heljen en de steat fan 'e oanreitsensor te bepalen.
De QTouch -bibleteek is fergees en kin wurde downloade fan 'e Atmel website. Foar mear ynformaasje en details oer ymplemintaasje, ferwize nei de QTouch Library User Guide - ek te krijen by de Atmel website.
Gegevensbehâld
Betrouwbaarheidsresultaten fan kwalifikaasje litte sjen dat it projektprojektgegevens foar retentearjen fan gegevens folle minder is dan 1 PPM oer 20 jier by 85 ° C of 100 jier by 25 ° C.
AVR CPU Kearn
Ynlieding
Dizze paragraaf besprekt de AVR-kearnarsjitektuer yn 't algemien. De wichtichste funksje fan 'e CPU-kearn is it garandearjen fan korrekte programma-útfiering. De CPU moat dêrom tagong krije ta oantinkens, berekkeningen útfiere, peripherale apparaten kontrolearje, en ynterrupsjes behannelje.
Architectural Overview
Om prestaasjes en parallelisme te maksimalisearjen, brûkt de AVR in Harvard-arsjitektuer - mei aparte oantinkens en bussen foar programma en gegevens. Ynstruksjes yn it programma-ûnthâld wurde útfierd mei in pipelining op ien nivo. Wylst ien ynstruksje wurdt útfierd, wurdt de folgjende ynstruksje foarôf helle út it Programgeheugen. Mei dit konsept kinne ynstruksjes yn elke kloksyklus wurde útfierd. It programma-ûnthâld is yn-systeem opnij programmearje Flash-ûnthâld.
It rappe tagongsregister File befettet 32 x 8-bit algemiene doel wurkjende registers mei in inkele klok syklus tagong tiid. Dit makket it mooglik ien-syklus Arithmetic Logic Unit (ALU) operaasje. Yn in typyske ALU-operaasje wurde twa operanden út it register útfierd File, de operaasje wurdt útfierd, en it resultaat wurdt werom opslein yn it register File- yn ien kloksyklus.
Seis fan 'e 32 registers kinne brûkt wurde as trije 16-bit yndirekte adresregistraasjewizers foar Data Space-adresing - sadat effisjinte adresberekkeningen mooglik binne. Ien fan dizze adreswizers kin ek brûkt wurde as adreswizer foar opsykje tabellen yn Flash Program-ûnthâld. Dizze tafoege funksjeregisters binne it 16-bit X-, Y- en Z-register, letter beskreaun yn dizze paragraaf.
De ALU stipet rekken- en logyske operaasjes tusken registers as tusken in konstant en in register. Single-register-operaasjes kinne ek wurde útfierd yn 'e ALU. Nei in rekkenrekken wurdt it Statusregister bywurke om ynformaasje oer it resultaat fan 'e operaasje te reflektearjen.
Programmafloed wurdt fersoarge troch kondysjonele en sûnder betingsten ynstruksjes foar sprong en oprop, yn steat direkt de heule adresromte oan te pakken. De measte AVR-ynstruksjes hawwe ien 16-bit wurdformaat, mar d'r binne ek 32-bit ynstruksjes.
By ynterrupsjes en subroutine-petearen wurdt it retoeradres Program Counter (PC) opslein op 'e Stack. De Stack wurdt effektyf tawiisd yn 'e algemiene gegevens SRAM, en sadwaande wurdt de Stackgrutte allinich beheind troch de totale SRAM-grutte en it gebrûk fan' e SRAM. Alle brûkersprogramma's moatte de SP inisjalisearje yn 'e Reset-routine (foardat sub-routines of ynterrupsjes wurde útfierd). De Stack Pointer (SP) is tagonklik foar lêzen / skriuwen yn 'e I / O-romte. De gegevens SRAM kinne maklik tagonklik wurde fia de fiif ferskillende adressearingsmodi dy't wurde stipe yn 'e AVR-arsjitektuer.
De ûnthâldspaasjes yn 'e AVR-arsjitektuer binne allegear lineêre en reguliere ûnthâldkaarten.
In fleksibele interruptmodule hat syn kontrôleregisters yn 'e I / O-romte mei in ekstra Global Interrupt Enable bit yn it Statusregister. Alle ynterrumpten hawwe in aparte Interrupt Vector yn 'e tabel Interrupt Vector. De ynterrumpten hawwe prioriteit yn oerienstimming mei har posysje Interrupt Vector. Hoe leger it Interrupt Vector-adres, hoe heger de prioriteit.
De I/O -ûnthâldromte befettet 64 adressen foar perifeare CPU -funksjes as kontrôleregisters, SPI, en oare I/O -funksjes. It I/O-ûnthâld kin direkt tagonklik wurde, as as de Data Space-lokaasjes folgje dy fan 'e registraasje File, 0x20 - 0x5F.
ALU - Aritmetyske logikaenheid
De hege prestaasjes AVR ALU wurket yn direkte ferbining mei alle 32 wurkregisters foar algemiene doelen. Binnen ien kloksyklus wurde rekenkundige operaasjes útfierd tusken registers foar algemiene doelen as tusken in register en in direkte. De ALU-operaasjes binne ferdield yn trije haadkategoryen - rekkenjen, logyske en bitfunksjes. Guon ymplementaasjes fan 'e arsjitektuer leverje ek in krêftige multiplier dy't sawol ûndertekene / net-ûndertekene fermannichfâldiging as fraksjonele opmaak stipet. Sjoch de seksje "Ynstruksjeset" foar in detaillearre beskriuwing.
Statusregister
It Statusregister befettet ynformaasje oer it resultaat fan 'e koartlyn útfierde rekkenynstruksje. Dizze ynformaasje kin brûkt wurde foar it feroarjen fan programmafloed om betingste operaasjes út te fieren. Tink derom dat it Statusregister wurdt bywurke nei alle ALU-operaasjes, lykas oantsjutte yn 'e Ynstruksjetreferinsje. Dit sil yn in protte gefallen de needsaak ferwiderje foar it brûken fan de spesjale ynstruksjes foar fergeliking, wat resulteart yn rappere en kompakter koade.
It Statusregister wurdt net automatysk opslein by it ynfieren fan in ûnderbrekkingsroutine en hersteld as weromkomt fan in ûnderbrekking. Dit moat wurde behannele troch software.
SREG - AVR-statusregister
It AVR-statusregister - SREG - wurdt definieare as:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3f | I | T | H | S | V | N | Z | C | SREG |
Lês / Skriuw | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 - I: Global Interrupt Enable
De bit Global Interrupt Enable moat ynsteld wurde om de interrupts te aktivearjen. De yndividuele kontrôle foar ûnderbrek ynskeakelje wurdt dan útfierd yn aparte kontrôleregisters. As it Global Interrupt Enable Register wurdt wiske, dan wurdt gjin fan 'e interrupts ynskeakele ûnôfhinklik fan' e yndividuele ynstellingen foar interrupt ynskeakelje. De I-bit wurdt wiske troch hardware nei't in ûnderbrekking is bard, en wurdt ynsteld troch de RETI-ynstruksje om folgjende ynterrupsjes yn te skeakeljen. De I-bit kin ek wurde ynsteld en wiske troch de applikaasje mei de SEI- en CLI-ynstruksjes, lykas beskreaun yn 'e ynstruksje-setferwizing.
Bit 6 - T: Bitkopie-opslach
De ynstruksjes foar Bitkopie BLD (Bit LoaD) en BST (Bit STore) brûke de T-bit as boarne as bestimming foar it opereare bit. In bytsje fan in register yn it register File kin yn T wurde kopieare troch de BST -ynstruksje, en in bytsje yn T kin in bytsje wurde kopieare yn in register yn it register File troch de BLD ynstruksje.
Bit 5 - H: Half Carry Flag
De Half Carry Flag H wiist op in Half Carry yn guon rekkenrekken. Half Carry is nuttich yn BCD-rekkenjen. Sjoch de "Ynstruksje ynstelle beskriuwing" foar detaillearre ynformaasje.
Bit 4 – S: Sign Bit, S = N ⊕ V
De S-bit is altyd in eksklusyf of tusken de Negative Flagge N en de Twow's Complement Overflow Flag V. Sjoch de "Omskriuwing foar ynstruksjeset" foar detaillearre ynformaasje.
Bit 3 - V: Twa's Complement Overflow Flag
The Two's Complement Overflow Flag V stipet twa's komplementearitmetyk. Sjoch de "Ynstruksje ynstelle beskriuwing" foar detaillearre ynformaasje.
Bit 2 - N: Negative flagge
De Negative Flagge N jout in negatyf resultaat oan yn in rekken- of logyske operaasje. Sjoch de "Ynstruksje ynstelle beskriuwing" foar detaillearre ynformaasje.
Bit 1 - Z: Nul flagge
De Zero Flag Z jout in nulresultaat oan yn in rekken- of logyske operaasje. Sjoch de "Ynstruksje ynstelle beskriuwing" foar detaillearre ynformaasje.
Bit 0 - C: Flagge drage
De Carry Flag C jout oan in carry yn in rekken- of logyske operaasje. Sjoch de "Ynstruksje ynstelle beskriuwing" foar detaillearre ynformaasje.
Register foar algemien doel File
It Register File is optimalisearre foar de AVR Enhanced RISC ynstruksjeset. Om de fereaske prestaasjes en fleksibiliteit te berikken, wurde de folgjende ynput-/útfierskema's stipe troch it register File:
Ien 8-bit útfier-operand en ien 8-bit resultaatynfier
Twa 8-bit útfier-operands en ien 8-bit resultaatynfier
Twa 8-bit útfier-operands en ien 16-bit resultaatynfier
Ien 16-bit útfier-operand en ien 16-bit resultaatynfier
figuer 4-2 toant de struktuer fan 'e 32 wurkregisters foar algemiene doelen yn' e CPU.
Lykas werjûn yn figuer 4-2, elk register wurdt ek in gegevensgeheugenadres tawiisd, dat se direkt yn kaart bringt yn 'e earste 32 lokaasjes fan' e brûkersdataromte. Hoewol net fysyk ymplementearre as SRAM-lokaasjes, biedt dizze ûnthâldorganisaasje grutte fleksibiliteit by tagong fan 'e registers, om't de X-, Y- en Z-pointer-registers kinne wurde ynsteld foar it yndeksearjen fan elk register yn' e file.De measte ynstruksjes operearje op it Register File hawwe direkte tagong ta alle registers, en de measten dêrfan binne inkelde syklusynstruksjes.
It X-register, Y-register, en Z-register
De registers R26..R31 hawwe wat tafoege funksjes oan har algemiene gebrûk. Dizze registers binne 16-bit adreswizers foar yndirekt adresjen fan de gegevensromte. De trije yndirekte adresregisters X, Y, en Z wurde definieare lykas beskreaun yn figuer 4-3.
Yn 'e ferskillende adressearingsmodi hawwe dizze adresregisters funksjes as fêste ferpleatsing, automatyske ferheging en automatyske ferleging (sjoch de ynstruksje set referinsje foar details).
Stack Pointer
De Stack wurdt foaral brûkt foar it opslaan fan tydlike gegevens, foar it opslaan fan lokale fariabelen en foar it opslaan fan weromadressen nei ynterrupsjes en subroutine-petearen. It Stack Pointer Register wiist altyd nei de top fan 'e Stack. Tink derom dat de Stack wurdt ymplementearre as groeit fan hegere ûnthâld lokaasjes nei legere ûnthâld lokaasjes. Dit betsjuttet dat in Stack PUSH-kommando de Stack Pointer fermindert.
De Stack Pointer wiist op it gegevens SRAM Stack gebiet wêr't de Subroutine en Interrupt Stacks lizze. Dizze Stack-romte yn 'e SRAM-gegevens moat wurde definieare troch it programma foardat der subroutine-oproppen wurde útfierd of ynterrupsjes wurde ynskeakele. De Stack Pointer moat wurde ynsteld op punt boppe 0x60. De Stack Pointer wurdt deklementeare troch ien as gegevens op 'e Stack wurde skood mei de PUSH-ynstruksje, en it wurdt deklementeare troch twa as it retoeradres op' e Stack wurdt skood mei subroutine-oprop of ûnderbrekking. De Stack Pointer wurdt ferhege troch ien as gegevens fan 'e Stack mei de POP-ynstruksje wurde opsprongen, en it wurdt troch twa ferhege as gegevens wurde út' e Stack springt mei werom fan subroutine RET of werom fan interrupt RETI.
De AVR Stack Pointer wurdt ymplementeare as twa 8-bit registers yn 'e I / O-romte. It oantal bits dat eins wurdt brûkt is ôfhinklik fan ymplemintaasje. Tink derom dat de gegevensromte yn guon ymplementaasjes fan 'e AVR-arsjitektuer sa lyts is dat allinich SPL nedich is. Yn dit gefal sil it SPH-register net oanwêzich wêze.
SPH en SPL - Stack Pointer Register
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
0x3e | SP15 | SP14 | SP13 | SP12 | SP11 | SP10 | SP9 | SP8 | SPH |
0x3 d | SP7 | SP6 | SP5 | SP4 | SP3 | SP2 | SP1 | SP0 | SPL |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
Lês / Skriuw | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Lês / Skriuw | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Inisjele wearde | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | |
Inisjele wearde | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND |
Ynstruksje-útfieringstiming
Dizze paragraaf beskriuwt de algemiene tagong timing konsepten foar ynstruksje útfiering. De AVR CPU wurdt dreaun troch de CPU klok clkCPU, direkt oanmakke út de selektearre klok boarne foar de chip. Gjin ynterne klokdieling wurdt brûkt.
figuer 4-4 toant de parallelle ynstruksjeheljen en ynstruksjeútfieringen ynskeakele troch de Harvard -arsjitektuer en it rappe tagongsregister File konsept. Dit is it basale pipeline-konsept om oant 1 MIPS per MHz te krijen mei de byhearrende unike resultaten foar funksjes per kosten, funksjes per klokken, en funksjes per machtseenheid.
figuer 4-5. Single Cycle ALU Operaasje
Handling weromsette en ûnderbrekke
De AVR leveret ferskate ûnderskate boarnen. Dizze ynterrupsjes en de aparte weromsette fektor hawwe elk in aparte programmafektor yn 'e programma-ûnthâldromte. Alle ynterrupten wurde yndividuele ynskeakele bitsen tawiisd dy't logysk ien moatte wurde skreaun tegearre mei de Global Interrupt Enable bit yn it Statusregister om de ûnderbrekking yn te skeakeljen.
De leechste adressen yn 'e romte foar programma-ûnthâld binne standert definieare as de Reset- en Interrupt-vectoren. De folsleine list mei fektoaren is te sjen yn "Underbrekt" op side 48, De list bepaalt ek de prioriteitsnivo's fan 'e ferskillende ynterrumpen. Hoe leger it adres hoe heger is it prioriteitsnivo. RESET hat de heechste prioriteit, en de folgjende is INT0 - it eksterne ynterrupt fersyk 0.
As in ûnderbrekking optreedt, wurdt de Global Interrupt Enable I-bit wiske en wurde alle interrupts útskeakele. De brûkerssoftware kin logika ien skriuwe nei de I-bit om nêst ynterrupten yn te skeakeljen. Alle ynskeakele ynterrupsjes kinne dan de hjoeddeiske ûnderbrekkingsroutine ûnderbrekke. De I-bit wurdt automatysk ynsteld as in Return from Interrupt-ynstruksje - RETI - wurdt útfierd.
D'r binne yn prinsipe twa soarten ûnderbrekken. It earste type wurdt aktivearre troch in barren dat de Interrupt Flag stelt. Foar dizze ynterrupsjes wurdt de Program Counter fektulearre oan 'e eigentlike Interrupt Vector om de ynterrupt-ôfhanneling routine út te fieren, en hardware wisket de oerienkommende Interrupt Flag. Underbrekke flaggen kinne ek wiske wurde troch in logyske ien te skriuwen nei de te wiskjen bitposysje (s) fan 'e flagge. As in ûnderbrekkingstastân foarkomt wylst it byhearrende ûnderbrek-ynskakele bit wurdt wiske, dan wurdt de Underbrekingsflagge ynsteld en ûnthâlden oant de ûnderbrekking is ynskeakele, of de flagge wurdt wiske troch software. Lykwols, as ien of mear ûnderbrekkingsbetingsten foarkomme wylst de Global Interrupt Enable bit wurdt wiske, dan wurde de oerienkommende Interrupt Flagge (s) ynsteld en ûnthâlde oant de Global Interrupt Enable bit is ynsteld, en sil dan wurde útfierd op folchoarder fan prioriteit.
It twadde type ûnderbrekkings sil aktivearje salang't de ûnderbrekkende tastân oanwêzich is. Dizze ynterrupten hawwe net needsaaklik Interrupt Flags. As de ûnderbrekkingstastân ferdwynt foardat de ûnderbrekking is ynskeakele, sil de ûnderbrekking net wurde aktivearre.
As de AVR útgiet fan in ûnderbrekking, sil hy altyd weromgean nei it haadprogramma en noch ien ynstruksje útfiere foardat in ôfwachtsende ûnderbrekking wurdt betsjinne.
Tink derom dat it Statusregister net automatysk wurdt opslein by it ynfieren fan in ûnderbrekkingsroutine, noch wersteld as weromkomt fan in ûnderbrekkingsroutine. Dit moat wurde behannele troch software.
By it brûken fan de CLI -ynstruksje om ûnderbrekkingen út te skeakeljen, wurde de ûnderbrekingen fuortendaliks útskeakele. Gjin ûnderbrekking sil wurde útfierd nei de CLI -ynstruksje, sels as it tagelyk foarkomt mei de CLI -ynstruksje. De folgjende eksample lit sjen hoe dit kin wurde brûkt om ûnderbrekkingen te foarkommen tidens de tydlike EEPROM -skriuwfolging.
Montagekoade Example |
yn r16, SREG; winkel SREG wearde
cli haadwurd ; útskeakelje interrupts tidens timed folchoarder sbi EECR, EEMPE ; start EEPROM skriuwen sbi EECR, EEPE út SREG, r16; SREG-wearde weromsette (I-bit) |
C Koade Example |
char cSREG;
cSREG = SREG; /* bewarje SREG wearde */ /* ûnderbrekten útskeakelje tidens timed sekwinsje */ _CLI (); EECR |= (1< EECR | = (1 < SREG = cSREG; /* SREG-wearde weromsette (I-bit) */ |
By it brûken fan de SEI-ynstruksje om ûnderbrekkingen yn te skeakeljen, sil de ynstruksje folgjende SEI wurde útfierd foar alle ûnderbrekkende ûnderbrekkingen, lykas werjûn yn dizze eksample.
Montagekoade Example |
sei haadwurd ; set Global Interrupt ynskeakelje
sliep; gean yn sliep, wachtsjend op ûnderbrekking ; opmerking: sil sliepe ynfiere foar hokker yn behanneling ; interrupt (s) |
C Koade Example |
_SEI(); /* set Global Interrupt ynskeakelje */
_SLIEP(); /* sliep yn, wachtsje op ûnderbrekking */ / * opmerking: sil sliepe ynfiere foar eventuele ûnderbrekking (en) * / |
Underbrekke responstiid
De antwurd foar ûnderbrekking fan útfiering foar alle ynskeakele AVR-ynterrupsjes is minimaal fjouwer kloksyklusen. Nei fjouwer klokcycli wurdt it Program Vector-adres útfierd foar de eigentlike ynterrutthanteringsroutine. Tidens dizze perioade fan 'e klokklok wurdt de Program Counter op' e Stack skood. De fektor is normaal in sprong nei de ûnderbrekkingsroutine, en dizze sprong nimt trije kloksyklusen. As in ûnderbrekking optreedt by de útfiering fan in ynstruksje mei meardere syklusen, dan wurdt dizze ynstruksje foltôge foardat de ûnderbrekking wurdt betsjinne. As in ûnderbrekking optreedt as de MCU yn sliepmodus is, wurdt de antwurdtiid foar ûnderbrekking fan útfiering ferhege mei fjouwer kloksyklusen. Dizze ferheging komt neist de opstarttiid fan 'e selekteare sliepmodus.
In weromkear fan in ûnderbrekkende hannelroutine duorret fjouwer kloksyklusen. Tidens dizze fjouwer kloksyklusen wurdt de Program Counter (twa bytes) weromkaam fan 'e Stack, de Stack Pointer wurdt mei twa ferhege, en de I-bit yn SREG wurdt ynsteld.
AVR-oantinkens
Dizze paragraaf beskriuwt de ferskate oantinkens yn 'e ATtiny25 / 45/85. De AVR-arsjitektuer hat twa haad ûnthâldspaasjes, it Data-ûnthâld en de Program-memory-romte. Derneist hat de ATtiny25 / 45/85 in EEPROM-ûnthâld foar gegevensopslach. Alle trije ûnthâldspaasjes binne lineêr en regelmjittich.
Re-programmearber Flash-ûnthâld yn it systeem
De ATtiny25 / 45/85 befettet 2/4 / 8K bytes On-chip herprogrammearber flitsgeheugen yn it systeem foar programma-opslach. Om't alle AVR-ynstruksjes 16 of 32 bits breed binne, is de Flash organisearre as 1024/2048/4096 x 16.
It Flash-ûnthâld hat in úthâldingsfermogen fan op syn minst 10,000 skriuw- / wiskcycles. De ATtiny25 / 45/85 Program Counter (PC) is 10/11/12 bits breed, en adressearret dêrmei de 1024/2048/4096 Program-ûnthâldlokaasjes. “Unthâldprogramma- ming ”op side 147 befettet in detaillearre beskriuwing oer it downloaden fan seriële Flash-gegevens mei de SPI-pins.
Konstante tabellen kinne wurde tawiisd binnen de heule romte foar adresadres foar programma-ûnthâld (sjoch de ynstruksje beskriuwing LPM - Programma-ûnthâld laden).
figuer 5-1. Programma Memory Map
SRAM Gegevens ûnthâld
figuer 5-2 lit sjen hoe't it ATtiny25 / 45/85 SRAM-ûnthâld is organisearre.
De legere 224/352/607 Lokaasjes foar gegevensgeheugen adressearje sawol it register File, it I/O -ûnthâld en de ynterne gegevens SRAM. De earste 32 lokaasjes sprekke it Register oan File, de folgjende 64 lokaasjes it standert I/O -ûnthâld, en de lêste 128/256/512 lokaasjes sprekke de ynterne gegevens SRAM oan.
De fiif ferskillende adresmodi foar de dekking foar gegevensgeheugen: Direkt, yndirekt mei ferpleatsing, yndirekt, yndirekt mei foarôfgeand, en yndirekt mei post-ynkrement. Yn it register File, registers R26 oant R31 hawwe de yndirekte adressearjende oanwizerregisters.
De direkte adressearring berikt de folsleine gegevensromte.
De modus Indirekte mei ferpleatsing berikt 63 adreslokaasjes fanút it basisadres dat wurdt jûn troch it Y- of Z- register.
By it brûken fan yndirekte adressearingsmodi registrearje mei automatyske foar- en postynkrement wurde de adresregisters X, Y en Z dekrementeare of ferhege.
De 32 wurkregisters foar algemien doel, 64 I/O -registers, en de 128/256/512 bytes fan ynterne gegevens SRAM yn 'e ATtiny25/45/85 binne allegear tagonklik fia al dizze adresmodi. It register File wurdt beskreaun yn "Gen- eral Doel Register File”Op side 10.
figuer 5-2. Data Memory Map
Data Unthâld Tagong Times
Dizze paragraaf beskriuwt de algemiene tagong timing konsepten foar ynterne ûnthâld tagong. De ynterne gegevens SRAM tagong wurdt útfierd yn twa clkCPU syklusen lykas beskreaun yn figuer 5-3.
figuer 5-3. On-chip Data SRAM Access Cycles EEPROM Data Unthâld
De ATtiny25 / 45/85 befettet 128/256/512 bytes gegevens EEPROM-ûnthâld. It is organisearre as in aparte gegevensromte, wêryn inkele bytes kinne wurde lêzen en skreaun. De EEPROM hat in úthâldingsfermogen fan teminsten 100,000 skriuw- / wiskcycles. De tagong tusken de EEPROM en de CPU wurdt yn it folgjende beskreaun, mei spesifikaasje fan de EEPROM-adresregisters, it EEPROM-gegevensregister en it EEPROM-kontrôleregister. Foar details sjoch "Serial ynladen" op side 151.
EEPROM Lese- / skriuwtoegang
De EEPROM-tagongsregisters binne tagonklik yn 'e I / O-romte.
De skriuwtiid foar skriuwen foar de EEPROM wurdt ynjûn Tabel 5-1 op side 21. In self-timing funksje, lykwols, lit de brûker software detektearje wannear't de folgjende byte kin wurde skreaun. As de brûkerskoade ynstruksjes befettet dy't de EEPROM skriuwe, moatte guon foarsoarchsmaatregels wurde nommen. Yn swier filtere macht foarrieden, VCC is nei alle gedachten opstean of falle stadich op
Power-up/down. Dit soarget dat it apparaat foar in skoftke op in volum rinttage leger as oantsjutte as minimum foar de brûkte klokfrekwinsje. Sjen "Foarkommen fan EEPROM-korrupsje" op side 19 foar details oer hoe't jo problemen yn dizze situaasjes kinne foarkomme.
Om ûnbedoelde EEPROM-skriuwen te foarkommen, moat in spesifike skriuwproseduere wurde folge. Ferwize nei “Atoom Byte-programmearring ”op side 17 en "Split Byte Programming" op side 17 foar details hjiroer.
As de EEPROM wurdt lêzen, wurdt de CPU stillein foar fjouwer kloksyklusen foardat de folgjende ynstruksje wurdt útfierd. As de EEPROM wurdt skreaun, wurdt de CPU stillein foar twa kloksyklusen foardat de folgjende ynstruksje wurdt útfierd.
Atomic Byte Programming
Atomic Byte Programming brûke is de ienfâldichste modus. By it skriuwen fan in byte nei de EEPROM, moat de brûker it adres yn it EEAR-register skriuwe en gegevens yn it EEDR-register. As de EEPMn-bits nul binne, sil it skriuwen fan EEPE (binnen fjouwer cycles nei't EEMPE is skreaun) de hanneling wiskje / skriuwe aktivearje. Sawol de wisk- as skriuwsyklus wurde yn ien operaasje dien en de totale programmearringstiid wurdt ynjûn Tabel 5-1 op side 21, It EEPE-bit bliuwt ynsteld oant de hanneling foar wiskjen en skriuwen is foltôge. Wylst it apparaat dwaande is mei programmearjen, is it net mooglik om oare EEPROM-operaasjes te dwaan.
Split Byte Programming
It is mooglik om de wisk- en skriuwsyklus te splitsen yn twa ferskillende operaasjes. Dit kin handich wêze as it systeem foar in beheinde perioade koarte tagongstiid fereasket (typysk as de stroomfoarsjenning voltage falt). Om advys te nimmen- tage fan dizze metoade is it fereaske dat de te skriuwen lokaasjes binne wiske foar de skriuwoperaasje. Mar om't de operaasjes foar wiskjen en skriuwen wurde splitst, is it mooglik de operaasjes te wiskjen as it systeem it mooglik makket tiidkrityske operaasjes (typysk nei opstarten).
Wiskje
Om in byte te wiskjen, moat it adres wurde skreaun nei EEAR. As de EEPMn-bits 0b01 binne, sil it skriuwen fan 'e EEPE (binnen fjouwer cycles nei't EEMPE is skreaun) allinich de hanneling wiskje (programmearingstiid wurdt jûn yn Tabel 5-1 oer side 21). It EEPE-bit bliuwt ynsteld oant de hanneling is wiske. Wylst it apparaat dwaande is mei programmearjen, is it net mooglik om oare EEPROM-operaasjes te dwaan.
Skriuwe
Om in lokaasje te skriuwen, moat de brûker it adres yn EEAR skriuwe en de gegevens yn EEDR. As de EEPMn-bits 0b10 binne, sil it skriuwen fan 'e EEPE (binnen fjouwer cycles nei't EEMPE is skreaun) allinich de skriuwbewurking aktivearje (programmearingstiid wurdt Tabel 5-1 op side 21). It EEPE-bit bliuwt ynsteld oant de skriuwbewurking is foltôge. As de te skriuwen lokaasje net is wiske foar skriuwen, moatte de gegevens dy't opslein wurde beskôge wurde as ferlern. Wylst it apparaat dwaande is mei programmearjen, is it net mooglik om oare EEPROM-operaasjes te dwaan.
De kalibreare oscillator wurdt brûkt om tagong te krijen ta de EEPROM. Soargje derfoar dat de oscillatorfrekwinsje binnen de easken is beskreaun yn "OSCCAL - Oscillator-kalibraasjeregister" op side 31.
De folgjende koade examples litte ien gearkomste en ien C -funksje sjen foar wiskje, skriuwe, of atomysk skriuwen fan 'e EEPROM. De eksamples oannimme dat ûnderbrekkingen wurde regele (bgl. troch wrâldwide ûnderbrekkingen út te skeakeljen) sadat d'r gjin ûnderbrekkingen sille foarkomme by it útfieren fan dizze funksjes.
Montagekoade Example |
EEPROM_skriuw:
; Wachtsje op foltôgjen fan eardere skriuwen sbic EECR, EEPE rjmp EEPROM_write ; Programmearingsmodus ynstelle ldi r16, (0<<EEPM1)|(0<<EEPM0) út EECR, r16 ; Stel adres yn (r18: r17) yn adresregister út EEARH, r18 út EEARL, r17 ; Skriuw gegevens (r19) nei gegevensregister út EEDR, r19 ; Skriuw logyske ien nei EEMPE sbi EECR,EEMPE ; Begjin eeprom skriuwen troch EEPE yn te stellen sbi EECR, EEPE ret |
C Koade Example |
void EEPROM_write (net ûndertekene char ucAddress, net ûndertekene char ucData)
{ /* Wachtsje op it foltôgjen fan it foarige skriuwen */ while(EECR & (1< ; /* Programmeermodus ynstelle */ EEGR = (0 < / * Adres- en gegevensregisters ynstelle * / EEAR = ucAddress; EEDR = ucData; /* Skriuw logysk ien nei EEMPE */ EECR | = (1 < / * Begjin eeprom skriuwen troch EEPE yn te stellen * / EECR | = (1 < } |
De folgjende koade eksamples toane montage en C -funksjes foar it lêzen fan de EEPROM. De eksamples oannimme dat ûnderbrekkingen wurde regele sadat d'r gjin ûnderbrekkingen sille foarkomme tidens de útfiering fan dizze funksjes.
Montagekoade Example |
EEPROM_read:
; Wachtsje op foltôgjen fan eardere skriuwen sbic EECR, EEPE rjmp EEPROM_read ; Stel adres yn (r18: r17) yn adresregister út EEARH, r18 út EEARL, r17 ; Start eeprom lêzen troch EERE te skriuwen sbi EECR,EERE ; Lês gegevens út gegevensregister yn r16,EEDR ret |
C Koade Example |
net ûndertekene char EEPROM_read (net ûndertekene char ucAddress)
{ / * Wachtsje op foltôgjen fan eardere skriuwen * / wylst (EECR & (1 < ; / * Adresregister ynstelle * / EEAR = ucAddress; /* Begjin eeprom lêzen troch EERE te skriuwen */ EECR | = (1 < / * Gegevens weromjaan fan gegevensregister * / werom EEDR; } |
Foarkommen fan EEPROM-korrupsje
Yn perioaden fan lege VCC kinne de EEPROM-gegevens beskeadige wurde om't it oanbod voltage is te leech foar de CPU en de EEPROM om goed te wurkjen. Dizze problemen binne deselde as foar boerdnivo -systemen dy't EEPROM brûke, en deselde ûntwerpoplossingen moatte wurde tapast.
In korrupsje fan EEPROM -gegevens kin wurde feroarsake troch twa situaasjes as de voltage is te leech. Earst fereasket in reguliere skriuwfolchoarder nei de EEPROM in minimale voltage om korrekt te wurkjen. Ten twadde kin de CPU sels ynstruksjes ferkeard útfiere, as it oanbod voltage is te leech.
EEPROM-gegevenskorrupsje kin maklik wurde foarkommen troch dizze ûntwerpoanbefelling te folgjen:
Hâld de AVR RESET aktyf (leech) yn perioaden fan net genôch stroomfoarsjenning voltage. Dit kin wurde dien troch de ynterne Brown-out Detector (BOD) yn te skeakeljen. As it detectienivo fan 'e ynterne BOD net oerienkomt mei de
nedich detection nivo, in eksterne lege VCC reset beskerming circuit kin brûkt wurde. As in reset optreedt wylst in skriuwoperaasje oan 'e gong is, sil de skriuwoperaasje foltôge wurde op betingst dat de stroomfoarsjenning voltage is genôch.
I / O-ûnthâld
De definysje fan 'e I / O-romte fan' e ATtiny25 / 45/85 wurdt werjûn yn "Gearfetting registrearje" op side 200.
Alle ATtiny25 / 45/85 I / O's en perifeare apparaten wurde yn 'e I / O-romte pleatst. Alle I / O-lokaasjes kinne wurde tagonklik makke troch de LD / LDS / LDD- en ST / STS / STD-ynstruksjes, en gegevens oerbringe tusken de 32 wurkregisters foar algemiene doelen en de I / O-romte. I / O-registers binnen it adresberik 0x00 - 0x1F binne direkt bit-tagonklik mei de SBI- en CBI-ynstruksjes. Yn dizze registers kin de wearde fan inkele bits wurde kontroleare troch de SBIS- en SBIC-ynstruksjes te brûken. Ferwize nei de seksje ynstruksje foar mear details. As jo de I / O-spesifike kommando's IN en OUT brûke, moatte de I / O-adressen 0x00 - 0x3F brûkt wurde. By it adressearjen fan I / O-registers as gegevensromte mei LD- en ST-ynstruksjes, moat 0x20 wurde tafoege oan dizze adressen.
Foar kompatibiliteit mei takomstige apparaten moatte reservearre bits wurde skreaun op nul as tagong wurdt. Reserveare I / O-ûnthâldadressen moatte nea wurde skreaun.
Guon fan 'e statusflaggen wurde wiske troch in logyske ien oan te skriuwen. Tink derom dat de CBI- en SBI-ynstruksjes allinich wurkje op 'e oantsjutte bit, en kinne dêrom brûkt wurde op registers dy't sokke Statusflaggen befetsje. De CBI- en SBI-ynstruksjes wurkje allinich mei registers 0x00 oant 0x1F.
De I / O- en peripherale kontrôleregisters wurde útlein yn lettere seksjes.
Registrearje beskriuwing
EEARH - EEPROM-adresregister
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1f | – | – | – | – | – | – | – | EEAR8 | EARRE |
Lês / Skriuw | R | R | R | R | R | R | R | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | X/0 |
Bits 7: 1 - Res: Reserveare bits
Dizze bits binne reservearre foar takomstich gebrûk en sille altyd as nul lêze.
Bits 0 - EEAR8: EEPROM-adres
Dit is de meast wichtige EEPROM-adresbit fan ATtiny85. Yn apparaten mei minder EEPROM, dus ATtiny25 / ATtiny45, is dit bit reservearre en sil altyd nul lêze. De begjinwearde fan it EEPROM-adresregister (EEAR) is net definieare en in goede wearde moat dêrom wurde skreaun foardat de EEPROM tagong is.
EEARL - EEPROM-adresregister
Bit
0x1e | EEAR7 | EEAR6 | EEAR5 | EEAR4 | EEAR3 | EEAR2 | EEAR1 | EEAR0 | EEARL |
Efter- / skriuwen | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Inisjele wearde | X | X | X | X | X | X | X | X |
Bit 7 - EEAR7: EEPROM-adres
Dit is de meast wichtige EEPROM-adresbit fan ATtiny45. Yn apparaten mei minder EEPROM, dus ATtiny25, is dit bit reservearre en sil altyd nul lêze. De begjinwearde fan it EEPROM-adresregister (EEAR) is net definieare en in juste wearde moat dêrom wurde skreaun foardat de EEPROM tagong is.
Bits 6: 0 - EEAR [6: 0]: EEPROM-adres
Dit binne de (lege) bits fan it EEPROM-adresregister. De EEPROM-gegevensbytes wurde lineêr oanpakt yn it berik 0… (128/256 / 512-1). De begjinwearde fan EEAR is undefined en in juste wearde moat dêrom wurde skreaun foardat de EEPROM tagong kin krije.
EEDR - EEPROM-gegevensregister
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1 d | EEDR7 | EEDR6 | EEDR5 | EEDR4 | EEDR3 | EEDR2 | EEDR1 | EEDR0 | EEDR |
Lês / Skriuw | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Foar de EEPROM-skriuwbewurking befettet it EEDR-register de gegevens dy't nei de EEPROM moatte wurde skreaun yn it adres dat wurdt jûn troch it EEAR-register. Foar de EEPROM-lêsoperaasje befettet de EEDR de gegevens dy't út 'e lêze binne
EEPROM op it adres jûn troch EEAR.
5.5.4 EEGR - EEPROM-kontrôleregister |
|||||||||
Bit 7 6 5 | 4 | 3 | 2 | 1 | 0 | ||||
0x1 c – | – | EEPM1 | EEPM0 | EERIE | EEMPE | EEPE | EERE | EEGR | |
Lês / Skriuw R R R / W | R/W | R/W | R/W | R/W | R/W | ||||
Begjinwearde 0 0 X | X | 0 | 0 | X | 0 |
Bit 7 - Res: reservearre bit
Dit bit is reservearre foar takomstich gebrûk en sil altyd lêze as 0 yn ATtiny25 / 45/85. Foar kompatibiliteit mei takomstige AVR-apparaten, skriuw dit bit altyd oant nul. Nei it lêzen maskerje jo dit bit út.
Bit 6 - Res: reservearre bit
Dit bit is reservearre yn 'e ATtiny25 / 45/85 en sil altyd as nul lêze.
Bits 5: 4 - EEPM [1: 0]: EEPROM Programming Mode Bits
De EEPROM Programming mode bits-ynstelling definieart hokker programmearaksje dy't sil wurde aktivearre by it skriuwen fan EEPE. It is mooglik om gegevens yn ien atoombewerking te programmearjen (de âlde wearde wiskje en de nije wearde te programmearjen) of de operaasjes Erase en Write te splitsen yn twa ferskillende operaasjes. De programmearringstiden foar de ferskate modi wurde werjûn yn Tabel 5-1, Wylst EEPE is ynsteld, sil alle skriuwen nei EEPMn wurde negeare. Under reset wurde de EEPMn-bits werombrocht nei 0b00, útsein as de EEPROM drok is mei programmearjen.
Tabel 5-1. EEPROM Mode Bits
EEPM1 | EEPM0 | Programmingstiid | Operaasje |
0 | 0 | 3.4 ms | Wiskje en skriuwe yn ien operaasje (Atomyske operaasje) |
0 | 1 | 1.8 ms | Allinich wiskje |
1 | 0 | 1.8 ms | Skriuw allinich |
1 | 1 | – | Reservearre foar takomstich gebrûk |
Bit 3 - EERIE: EEPROM Ready Interrupt ynskeakelje
EERIE oan ien skriuwe makket de EEPROM Ready Interrupt mooglik as de I-bit yn SREG is ynsteld. It skriuwen fan EERIE oant nul útskeakelt de ûnderbrekking. De EEPROM Ready Interrupt genereart in konstante interrupt as Net-fluchtich ûnthâld klear is foar programmearjen.
Bit 2 - EEMPE: Masterprogramma EEPROM ynskeakelje
It EEMPE-bit bepaalt oft it skriuwen fan EEPE nei ien effekt hat as net.
As EEMPE is ynsteld, sil it ynstellen fan EEPE binnen fjouwer kloksyklusen de EEPROM programmearje op it selekteare adres. As EEMPE nul is, sil it ynstellen fan EEPE gjin effekt hawwe. As EEMPE nei ien is skreaun troch software, wist hardware it bit nei nul nei fjouwer kloksyklusen.
Bit 1 - EEPE: EEPROM-programma ynskeakelje
It EEPROM-programma ynskeakelje sinjaal EEPE is it programmear-ynskeakelje-sinjaal nei de EEPROM. As EEPE wurdt skreaun, sil de EEPROM wurde programmearre neffens de EEPMn bits ynstelling. It EEMPE-bit moat nei ien wurde skreaun foardat in logyske wurdt skreaun oan EEPE, oars fynt gjin EEPROM-skriuwen plak. As de skriuwtiid is ferrûn, wurdt it EEPE-bit wiske troch hardware. As EEPE is ynsteld, wurdt de CPU twa cycles stillein foardat de folgjende ynstruksje wurdt útfierd.
Bit 0 - EERE: EEPROM Lês ynskeakelje
It EEPROM Read Enable Signal - EERE - is de lêzen strobe foar de EEPROM. As it juste adres is ynsteld yn it EEAR-register, moat it EERE-bit nei ien wurde skreaun om it lêzen fan EEPROM te aktivearjen. De EEPROM-lêzen tagong nimt ien ynstruksje, en de frege gegevens binne direkt beskikber. As de EEPROM wurdt lêzen, wurdt de CPU foar fjouwer cycles stillein foardat de folgjende ynstruksje wurdt útfierd. De brûker moat de EEPE-bit befreegje foardat de lêsbewerking begjint. As in skriuwbewurking dwaande is, is it net mooglik om de EEPROM te lêzen, noch it EEAR-register te feroarjen.
Systeemklok en klokopsjes
Clock Systems en har ferdieling
CPU-klok
De CPU -klok wurdt trochstjoerd nei dielen fan it systeem dat giet oer de wurking fan 'e AVR -kearn. Examples fan sokke modules binne it Algemien Doelregister File, it Statusregister en it Gegevensgeheugen mei de Stack Pointer. It stopjen fan de CPU -klok remmet de kearn by it útfieren fan algemiene operaasjes en berekkeningen.
I / O klok - clkI / O
De I / O-klok wurdt brûkt troch de mearderheid fan 'e I / O-modules, lykas Timer / Counter. De I / O-klok wurdt ek brûkt troch de module External Interrupt, mar tink derom dat guon eksterne interrupts wurde ûntdutsen troch asynchrone logika, wêrtroch sokke interrupts kinne wurde ûntdutsen, sels as de I / O-klok wurdt stillein.
Flitsklok - clkFLASH
De Flash-klok regelt de wurking fan 'e Flash-ynterface. De Flash-klok is normaal tagelyk aktyf mei de CPU-klok.
ADC Clock - clkADC
De ADC is foarsjoen fan in tawijd klokdomein. Hjirmei kinne jo de CPU- en I / O-klokken stopje om lûd te generearjen generearre troch digitale skeakelingen. Dit jout krekter ADC-konversaasjeresultaten.
Ynterne PLL foar snelle perifeare klokgeneraasje - clkPCK
De ynterne PLL yn ATtiny25 / 45/85 genereart in klokfrekwinsje dy't 8x wurdt fermannichfâldige fan in boarneynfier. Standert brûkt de PLL de útfier fan 'e ynterne, 8.0 MHz RC oscillator as boarne. As alternatyf, as bit LSM fan PLLCSR is ynsteld, sil PLL de útfier fan 'e RC-oscillator brûke dield troch twa. Sa is de útfier fan 'e PLL, de rappe perifeare klok 64 MHz. De snelle perifeare klok, of in dêrfoar prescaled klok, kin wurde selekteare as de klokboarne foar Timer / Counter1 of as in systeemklok. Sjen figuer 6-2. De frekwinsje fan 'e snelle perifeare klok wurdt dield troch twa as LSM fan PLLCSR is ynsteld, wat resulteart yn in klokfrekwinsje fan 32 MHz. Tink derom dat LSM net ynsteld wurde kin as PLLCLK wurdt brûkt as systeemklok.
figuer 6-2. PCK Clocking System.
De PLL is op 'e RC-oscillator beskoattele en it oanpassen fan' e RC-oscillator fia OSCCAL-register sil de snelle perifere klok tagelyk oanpasse. Sels as de RC-oscillator lykwols nei in hegere frekwinsje wurdt nommen dan 8 MHz, sil de snelle perifere klokfrekwinsje sêdzje op 85 MHz (minste gefal) en bliuwt oscillerend op 'e maksimale frekwinsje. It moat wurde opmurken dat de PLL yn dit gefal net langer is beskoattele mei de RC oscillatorklok. Dêrom is it oan te rieden de OSCCAL-oanpassingen net te nimmen nei in hegere frekwinsje dan 8 MHz om de PLL yn it juste wurkbereik te hâlden.
De ynterne PLL is ynskeakele as:
De PLLE-bit yn it register PLLCSR is ynsteld.
De CKSEL-lont is programmearre op '0001'.
De CKSEL-lont is programmearre op '0011'.
De PLLCSR bit PLOCK wurdt ynsteld as PLL is beskoattele. Sawol ynterne RC-oscillator as PLL wurde útskeakele yn macht-down en stand-by sliepmodi.
Ynterne PLL yn ATtiny15 Kompatibiliteitsmodus
Sûnt ATtiny25 / 45/85 is in migraasjeapparaat foar ATtiny15-brûkers, is d'r in ATtiny15-kompatibiliteitsmodus foar efterkompatibiliteit. De kompatibiliteitmodus ATtiny15 wurdt selekteare troch programmearjen fan de CKSEL-fusjes op '0011'.
Yn 'e ATtiny15-kompatibiliteitsmodus wurdt de frekwinsje fan' e ynterne RC-oscillator kalibreare nei 6.4 MHz en wurdt de fermannigingsfaktor fan 'e PLL op 4x ynsteld. Sjen figuer 6-3, Mei dizze oanpassingen is it kloksysteem kompatibel mei ATtiny15 en de resultearjende rappe perifere klok hat in frekwinsje fan 25.6 MHz (itselde as yn ATtiny15).
figuer 6-3. PCK-kloksysteem yn ATtiny15-kompatibiliteitsmodus.
Clock Boarnen
It apparaat hat de folgjende opsjes foar klokboarne, te selektearjen troch Flash Fuse bits lykas hjirûnder werjûn. De klok fan 'e selekteare boarne wurdt ynfierd nei de AVR-klokgenerator, en trochstjoerd nei de passende modules.
Tabel 6-1. Opsjes foar apparaatklokken Selektearje
Apparaat klokje opsje | CKSEL[3:0](1) |
Eksterne klok (sjen side 26) | 0000 |
Hege Frekwinsje PLL Klok (sjen side 26) | 0001 |
Kalibreare ynterne oscillator (sjen side 27) | 0010(2) |
Kalibreare ynterne oscillator (sjen side 27) | 0011(3) |
Ynterne 128 kHz oscillator (sjen side 28) | 0100 |
Lytse frekwinsje kristaloscillator (sjen side 29) | 0110 |
Kristaloscillator / keramyske resonator (sjen side 29) | 1000 – 1111 |
Reservearre | 0101, 0111 |
Foar alle fuses betsjuttet "1" net-programmearre, wylst "0" programmearre betsjut.
It apparaat wurdt ferstjoerd mei dizze opsje selekteare.
Dit sil ATtiny15 Kompatibilitaasjemodus selektearje, wêrby't systeemklok wurdt dield troch fjouwer, wat resulteart yn in 1.6 MHz klokfrekwinsje. Foar mear ynformaasje, sjoch "Kalibreare ynterne oscillator" op side 27.
De ferskate karren foar elke klokopsje wurde jûn yn 'e folgjende seksjes. As de CPU wekker wurdt fanút Power-down, wurdt de selekteare klokboarne brûkt om de opstart te tiid, en soarget foar stabile oscillatorbedriuw foardat de útfiering fan ynstruksje begjint. As de CPU begjint mei reset, is d'r in ekstra fertraging wêrtroch de krêft in stabyl nivo berikt foardat de normale operaasje begjint. De Watchdog Oscillator wurdt brûkt foar it timing fan dit realtime diel fan 'e opstarttiid. It oantal WDT-oscillatorsyklusen brûkt foar elke time-out wurdt werjûn yn Tabel 6-2.
Tabel 6-2. Oantal Watchdog Oscillator Cycles
Typ Time-out | Oantal Cycles |
4 ms | 512 |
64 ms | 8K (8,192) |
Eksterne klok
Om it apparaat te bestjoeren fan in eksterne klokboarne, moat CLKI wurde bestjoerd lykas werjûn yn figuer 6-4, Om it apparaat op in eksterne klok út te fieren, moatte de CKSEL Fuses wurde programmearre op "00".
figuer 6-4. Eksterne klok Drive konfiguraasje
As dizze klokboarne wurdt selekteare, wurde opstarttiiden bepaald troch de SUT-fuses lykas werjûn yn Tabel 6-3.
Tabel 6-3. Opstarttiden foar de seleksje fan eksterne klok
SUT[1:0] | Starttiid fanút Power-down | Oanfoljende fertraging fan weromsette | Oanrikkemandearre gebrûk |
00 | 6 kkk | 14CK | BOD ynskeakele |
01 | 6 kkk | 14CK + 4 ms | Fluch opkommende krêft |
10 | 6 kkk | 14CK + 64 ms | Stadich opkommende macht |
11 | Reservearre |
By it tapassen fan in eksterne klok is it ferplicht hommelse feroaringen yn 'e tapaste klokfrekwinsje te foarkommen om stabile wurking fan' e MCU te garandearjen. In fariaasje yn frekwinsje fan mear as 2% fan de iene kloksyklus nei de oare kin liede ta ûnfoarspelber gedrach. It is ferplichte om te soargjen dat de MCU yn Reset wurdt hâlden by sokke feroarings yn 'e klokfrekwinsje.
Tink derom dat de Systeemklok foarferkeap kin brûkt wurde om wizigingen fan runtime fan 'e ynterne klokfrekwinsje út te fieren, wylst noch stabile wurking garandeart. Ferwize nei "Systeemklok prescaler" op side 31 foar details.
Hege Frekwinsje PLL Klok
D'r is in ynterne PLL dy't nominaal 64 MHz kloksnelheid leveret beskoattele oan de RC Oscillator foar it gebrûk fan de Peripherale Timer / Counter1 en foar de boarne fan 'e systeemklok. As jo selektearje as systeemklokboarne, wurdt de CKSEL troch 'programmearjen' nei '0001' dield troch fjouwer lykas werjûn yn Tabel 6-4.
Tabel 6-4. Hege frekwinsje PLL Clock Operating Modes
CKSEL[3:0] | Nominale Frekwinsje |
0001 | 16 MHz |
As dizze klokboarne is selekteare, wurde opstarttiiden bepaald troch de SUT-fuses lykas werjûn yn Tabel 6-5.
Tabel 6-5. Opstarttiden foar de PLL-klok mei hege frekwinsje
SUT[1:0] | Starttiid fanút Power Down | Oanfoljende fertraging fan opnij ynskeakelje (VCC = 5.0V) | Oanrikkemandearre gebrûk |
00 | 14CK + 1K (1024) CK + 4 ms | 4 ms | BOD ynskeakele |
Tabel 6-5. Opstarttiden foar de PLL-klok mei hege frekwinsje
SUT[1:0] | Starttiid fanút Power Down | Oanfoljende fertraging fan opnij ynskeakelje (VCC = 5.0V) | Oanrikkemandearre gebrûk |
01 | 14CK + 16K (16384) CK + 4 ms | 4 ms | Fluch opkommende krêft |
10 | 14CK + 1K (1024) CK + 64 ms | 4 ms | Stadich opkommende macht |
11 | 14CK + 16K (16384) CK + 64 ms | 4 ms | Stadich opkommende macht |
Kalibreare ynterne oscillator
Standert leveret de Internal RC Oscillator in sawat 8.0 MHz klok. Hoewol voltage en temperatuerôfhinklik, kin dizze klok heul presys wurde kalibreare troch de brûker. Sjen “Kalibreare ynterne RC oscillatorakku- racy ”op side 164 en "Ynterne oscillatorsnelheid" op side 192 foar mear details. It apparaat wurdt ferstjoerd mei de CKDIV8 Fuse programmeare. Sjen "Systeemklok prescaler" op side 31 foar mear details.
Dizze klok kin wurde selekteare as de systeemklok troch de CKSEL-fuses te programmearjen lykas werjûn yn Tabel 6-6 op side
27, As selekteare sil it wurkje mei gjin eksterne komponinten. By reset laden hardware de foarprogrammeare kalibraasjewearde yn it OSCCAL-register en kalibreert dêrmei de RC Oscillator automatysk. De krektens fan dizze kalibraasje wurdt werjûn as Fabriek kalibraasje yn Tabel 21-2 op side 164.
Troch it OSCCAL-register te feroarjen fan SW, sjoch "OSCCAL - Oscillator-kalibraasjeregister" op side 31, is it mooglik om in hegere kalibraasje-krektens te krijen dan troch de fabriekskalibraasje te brûken. De krektens fan dizze kalibraasje wurdt werjûn as Meidogger kalibraasje yn Tabel 21-2 op side 164.
As dizze oscillator wurdt brûkt as de chipklok, sil de Watchdog Oscillator noch wurde brûkt foar de Watchdog Timer en foar de Reset Time-out. Sjoch de paragraaf foar mear ynformaasje oer de foarprogrammeare kalibraasjewearde “Kal- bration Bytes ”op side 150.
De ynterne oscillator kin ek ynsteld wurde om in 6.4 MHz klok te leverjen troch CKSEL-fuses te skriuwen nei "0011", lykas werjûn yn Tabel 6-6 ûnder. Dizze ynstelling wurdt oantsjutten as ATtiny15 Kompatibiliteitsmodus en is bedoeld om in kalibreare klokboarne te leverjen op 6.4 MHz, lykas yn ATtiny15. Yn ATtiny15-kompatibiliteitsmodus brûkt de PLL de ynterne oscillator dy't rint op 6.4 MHz om in 25.6 MHz perifeare kloksignaal te generearjen foar Timer / Teller1 (sjoch “8-bit Timer / Counter1 yn ATtiny15 Mode ”op side 95). Tink derom dat yn dizze modus fan wurking it 6.4 MHz kloksinjaal altyd wurdt dield troch fjouwer, en biedt in 1.6 MHz systeemklok.
Tabel 6-6. Ynterne Kalibrearre RC Oscillator Operating Modes
CKSEL[3:0] | Nominale Frekwinsje |
0010(1) | 8.0 MHz |
0011(2) | 6.4 MHz |
It apparaat wurdt ferstjoerd mei dizze opsje selekteare.
Dizze ynstelling sil ATtiny15 Kompatibilitaasjemodus selektearje, wêrby't systeemklok wurdt dield troch fjouwer, wat resulteart yn in 1.6 MHz klokfrekwinsje.
As de kalibreare ynterne oscillator fan 8 MHz is selekteare as klokboarne, wurde de opstarttiden bepaald troch de SUT Fuses lykas werjûn yn Tabel 6-7 ûnder.
Tabel 6-7. Start-up Times foar ynterne Kalibrearre RC Oscillator Clock
SUT[1:0] | Starttiid fanút Power-down | Oanfoljende fertraging fan reset (VCC = 5.0V) | Oanrikkemandearre gebrûk |
00 | 6 kkk | 14CK(1) | BOD ynskeakele |
01 | 6 kkk | 14CK + 4 ms | Fluch opkommende krêft |
10(2) | 6 kkk | 14CK + 64 ms | Stadich opkommende macht |
11 | Reservearre |
1. As de RSTDISBL-fuse is programmearre, sil dizze opstarttiid wurde ferhege nei 14CK + 4 ms om te soargjen dat de programmearmodus kin wurde ynfierd.
2. It apparaat wurdt ferstjoerd mei dizze opsje selekteare.
Yn ATtiny15 Kompatibiliteitsmodus wurde opsteltiden bepaald troch SUT-fuses lykas werjûn yn Tabel 6-8 ûnder.
Tabel 6-8. Opstarttiden foar ynterne kalibreare RC-oscillatorklok (yn ATtiny15-modus)
SUT[1:0] | Starttiid fanút Power-down | Oanfoljende fertraging fan reset (VCC = 5.0V) | Oanrikkemandearre gebrûk |
00 | 6 kkk | 14CK + 64 ms | |
01 | 6 kkk | 14CK + 64 ms | |
10 | 6 kkk | 14CK + 4 ms | |
11 | 1 kkk | 14CK(1) |
Opmerking: As de RSTDISBL-fuse programmearre is, sil dizze opstarttiid ferhege wurde nei 14CK + 4 ms om te garandearjen dat de programmearringmodus ynfierd wurde kin.
Gearfetsjend is mear ynformaasje oer ATtiny15-kompatibiliteitsmodus te finen yn seksjes "Poarte B (PB5: PB0)" oan side 2, "Ynterne PLL yn ATtiny15-kompatibiliteitsmodus" op side 24, "8-bit Timer / Counter1 yn ATtiny15 Mode" oan side 95, "Beheiningen fan debugWIRE" op side 140, "Kalibraasjebytes" op side 150 en yn tabel "Klok Prescaler Selektearje ”op side 33.
Ynterne 128 kHz oscillator
De ynterne oscillator fan 128 kHz is in oscillator mei leech krêft dy't in klok fan 128 kHz leveret. De frekwinsje is nominaal by 3V en 25 °C. Dizze klok kin selektearre wurde as de systeemklok troch de CKSEL Fuses te programmearjen op "0100".
As dizze klokboarne wurdt selekteare, wurde opstarttiiden bepaald troch de SUT-fuses lykas werjûn yn Tabel 6-9.
Tabel 6-9. Opstarttiden foar de 128 kHz ynterne oscillator
SUT[1:0] | Starttiid fanút Power-down | Oanfoljende fertraging fan weromsette | Oanrikkemandearre gebrûk |
00 | 6 kkk | 14CK(1) | BOD ynskeakele |
01 | 6 kkk | 14CK + 4 ms | Fluch opkommende krêft |
10 | 6 kkk | 14CK + 64 ms | Stadich opkommende macht |
11 | Reservearre |
Opmerking: As de RSTDISBL-fuse programmearre is, sil dizze opstarttiid ferhege wurde nei 14CK + 4 ms om te garandearjen dat de programmearringmodus ynfierd wurde kin.
Lytse frekwinsje kristaloscillator
Om in 32.768 kHz horloazjekristal te brûken as klokboarne foar it apparaat, moat de Krystoscillator mei lege frekwinsje wurde selekteare troch CKSEL-fusjes yn te stellen op '0110'. It kristal moat wurde ferbûn lykas werjûn yn figuer 6-5, Foar in finen geskikte laadkapasitânsje foar in 32.768 kHz krysal, kinne jo kontakt opnimme mei de datasheet fan de fabrikant.
As dizze oscillator wurdt selekteare, wurde opstarttiiden bepaald troch de SUT-fuses lykas werjûn yn Tabel 6-10.
Tabel 6-10. Start-up Times foar de Low Frequency Crystal Oscillator Clock Selection
SUT[1:0] | Starttiid fanút Power Down | Oanfoljende fertraging fan reset (VCC = 5.0V) | Oanrikkemandearre gebrûk |
00 | 1K (1024) CK(1) | 4 ms | Fluch opkommende krêft as BOD ynskeakele |
01 | 1K (1024) CK(1) | 64 ms | Stadich opkommende macht |
10 | 32K (32768) CK | 64 ms | Stabile frekwinsje by opstarten |
11 | Reservearre |
Opmerking: Dizze opsjes moatte allinich brûkt wurde as frekwinsjestabiliteit by it opstarten net wichtich is.
De Crystal-oscillator mei lege frekwinsje biedt in ynterne laakkapasitânsje, sjoch Tabel 6-11 by elke TOSC-pin.
Tabel 6-11. Kapasiteit fan Low-Frequency Crystal Oscillator
Apparaat | 32 kHz Osc. Type | Dop (Xtal1 / Tosc1) | Dop (Xtal2 / Tosc2) |
ATtiny25 / 45/85 | Systeem Osc. | 16 pf | 6 pf |
Kristaloscillator / keramyske resonator
XTAL1 en XTAL2 binne respektivelik ynput en útfier fan in omkearde amplifier dy't kin wurde konfigureare foar gebrûk as in On-chip Oscillator, lykas werjûn yn figuer 6-5, Of in kwartskristal as in keramyske resonator kin brûkt wurde.
C1 en C2 moatte altyd gelyk wêze foar sawol kristallen as resonators. De optimale wearde fan 'e capacitors hinget ôf fan it kristal of resonator yn gebrûk, de hoemannichte stray capacitance, en de elektromagnetyske lûd fan 'e omjouwing. Guon earste rjochtlinen foar it kiezen fan kondensatoren foar gebrûk mei kristallen wurde jûn yn Tabel 6-12 ûnder. Foar keramyske resonators moatte de kondensatorwearden wurde jûn troch de fabrikant.
Tabel 6-12. Crystal Oscillator Operating Modes
CKSEL[3:1] | Frekwinsje Berik (MHz) | Oanrekommandearre berik foar kondensatoren C1 en C2 foar gebrûk mei kristallen (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 |
Opmerkingen: Dizze opsje moat net brûkt wurde mei kristallen, allinich mei keramyske resonators.
De oscillator kin wurkje yn trije ferskillende modi, elk optimalisearre foar in spesifyk frekwinsjebereik. De bestjoeringsmodus wurdt selekteare troch de fuses CKSEL [3: 1] lykas werjûn yn Tabel 6-12.
De CKSEL0 Fuse tegearre mei de SUT [1: 0] Fuses selektearje de opstarttiden lykas werjûn yn Tabel 6-13.
Tabel 6-13. Start-up Times foar de seleksje fan Crystal Oscillator Clock
CKSEL0 | SUT[1:0] | Starttiid fanút Power-down | Oanfoljende fertraging fan weromsette | Oanrikkemandearre gebrûk |
0 | 00 | 258 kkk(1) | 14CK + 4 ms | Keramyske resonator, rap opkommende krêft |
0 | 01 | 258 kkk(1) | 14CK + 64 ms | Keramyske resonator, stadichoan opkommende krêft |
0 | 10 | 1K (1024) CK(2) | 14CK | Keramyske resonator, BOD ynskeakele |
0 | 11 | 1K (1024) CK(2) | 14CK + 4 ms | Keramyske resonator, rap opkommende krêft |
1 | 00 | 1K (1024) CK(2) | 14CK + 64 ms | Keramyske resonator, stadichoan opkommende krêft |
1 | 01 | 16K (16384) CK | 14CK | Crystal Oscillator, BOD ynskeakele |
1 | 10 | 16K (16384) CK | 14CK + 4 ms | Crystal Oscillator, rapper opkommende krêft |
1 | 11 | 16K (16384) CK | 14CK + 64 ms | Crystal Oscillator, stadichoan opkommende krêft |
Notysjes
Dizze opsjes moatte allinich brûkt wurde as se net tichtby de maksimale frekwinsje fan it apparaat wurkje, en allinich as frekwinsjestabiliteit by opstarten net wichtich is foar de applikaasje. Dizze opsjes binne net geskikt foar kristallen.
Dizze opsjes binne bedoeld foar gebrûk mei keramyske resonators en sille soargje foar frekwinsjestabiliteit by opstarten. Se kinne ek brûkt wurde mei kristallen as se net tichtby de maksimale frekwinsje fan it apparaat wurkje, en as frekwinsjestabiliteit by opstarten net wichtich is foar de tapassing.
Standert klok boarne
It apparaat wurdt ferstjoerd mei CKSEL = "0010", SUT = "10", en CKDIV8 programmearre. De standert klokboarne-ynstelling is dêrom de Ynterne RC-oscillator dy't draait op 8 MHz mei langste opstarttiid en in inisjele systeeklok prescaling fan 8, wat resulteart yn 1.0 MHz systeemklok. Dizze standertynstelling soarget derfoar dat alle brûkers har winske klokboarnynstelling kinne meitsje mei in In-System as High-voltage Programmeur.
Systeem Clock Prescaler
De systeemklok ATtiny25 / 45/85 kin dield wurde troch de yn te stellen "CLKPR - Clock Prescale Register" op side 32. Dizze funksje kin brûkt wurde om enerzjyferbrûk te ferminderjen as de eask foar ferwurkingskrêft leech is. Dit kin brûkt wurde mei alle klok boarne opsjes, en it sil beynfloedzje de klok frekwinsje fan de CPU en alle syngroane perifeare apparaten. clkI/O, clkADC, clkCPU en clkFLASH wurde dield troch in faktor lykas werjûn yn Tabel 6-15 op side 33.
Switching Tiid
As jo wikselje tusken ynstellings foar prescaler, soarget de System Clock Prescaler derfoar dat der gjin flaters foarkomme yn it kloksysteem en dat gjin tuskenfrekwinsje heger is dan noch de klokfrekwinsje dy't oerienkomt mei de foarige ynstelling, noch de klokfrekwinsje dy't oerienkomt mei de nije ynstelling.
De rippelteller dy't de prescaler ymplementeart rint op 'e frekwinsje fan' e ûndielde klok, dy't rapper kin wêze dan de klokfrekwinsje fan 'e CPU. Hjirtroch is it net mooglik de steat fan 'e prescaler te bepalen - sels as it lêsber wie, en kin de krekte tiid dy't it nimt om fan de iene klokdieling nei de oare te wikseljen net krekt wurde foarsjoen.
Fanôf it momint dat de CLKPS-wearden wurde skreaun, duorret it tusken T1 + T2 en T1 + 2 * T2 foardat de nije klokfrekwinsje aktyf is. Yn dit ynterval wurde 2 aktive klokrânen produsearre. Hjir is T1 de foarige klokperioade, en T2 is de perioade dy't oerienkomt mei de nije prescaler-ynstelling.
Klokútfierbuffer
It apparaat kin de systeemklok op 'e CLKO-pin útfiere (as net brûkt as XTAL2-pin). Om de útfier mooglik te meitsjen, moat de CKOUT Fuse wurde programmearre. Dizze modus is geskikt as de chipklok wurdt brûkt om oare sirkwy's op it systeem te riden. Tink derom dat de klok net sil wurde útfierd by reset en dat de normale wurking fan 'e I / O-pin wurdt oerskreaun as de lont is programmeare. Ynterne RC oscillator, WDT oscillator, PLL en eksterne klok (CLKI) kinne wurde selekteare as de klok wurdt útfierd op CLKO. Kristaloscillators (XTAL1, XTAL2) kinne net brûkt wurde foar klokútfier op CLKO. As de System Clock Prescaler wurdt brûkt, dan is it de ferdielde systeemklok dy't wurdt útfierd.
Registrearje beskriuwing
OSCCAL - Oscillator kalibraasje register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x31 | CAL7 | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | OSCCAL |
Lês / Skriuw | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
Bits 7: 0 - CAL [7: 0]: Oscillatorkalibraasjewearde
It oscillatorkalibraasjeregister wurdt brûkt om de kalibreare ynterne RC oscillator te trimmen om prosesfarianten fan 'e oscillatorfrekwinsje te ferwiderjen. In foarprogrammeare kalibraasjewearde wurdt automatysk skreaun nei dit register by chipreset, wêrtroch de Fabriek kalibreare frekwinsje is lykas oantsjutte yn Tabel 21-2 op side 164, De tapassingsoftware kin dit register skriuwe om de oscillatorfrekwinsje te feroarjen. De oscillator kin wurde kalibreare nei frekwinsjes lykas oantsjutte yn Tabel 21-2 op side 164, Kalibraasje bûten dat berik is net garandearre.
Tink derom dat dizze oscillator wurdt brûkt om EEPROM- en Flash-tagongsrjochten te skriuwen, en dizze skriuwtiden wurde dêrtroch beynfloede. As de EEPROM as Flash binne skreaun, kalibearje net nei mear dan 8.8 MHz. Oars kin it EEPROM- as Flash-skriuwen mislearje.
It CAL7-bit bepaalt it wurkbereik foar de oscillator. It ynstellen fan dit bit op 0 jout it leechste frekwinsjebereik, it ynstellen fan dit bit op 1 jout it heechste frekwinsjebereik. De twa frekwinsjeregels binne oerlaapjend, mei oare wurden, in ynstelling fan OSCCAL = 0x7F jout in hegere frekwinsje dan OSCCAL = 0x80.
De CAL [6: 0] bits wurde brûkt om de frekwinsje ôf te stimmen binnen it selekteare berik. In ynstelling fan 0x00 jout de leechste frekwinsje yn dat berik, en in ynstelling fan 0x7F jout de heechste frekwinsje yn it berik.
Om stabile wurking fan 'e MCU te garandearjen, moat de kalibraasjewearde yn lyts feroare wurde. In fariaasje yn frekwinsje fan mear as 2% fan de iene syklus nei de oare kin liede ta unfoarspelber gedrach. Feroaringen yn OSCCAL moatte net mear wêze dan 0x20 foar elke kalibraasje. It is ferplichte om te soargjen dat de MCU yn Reset wurdt hâlden by sokke feroarings yn 'e klokfrekwinsje
Tabel 6-14. Ynterne RC Oscillator Frequency Range
OSCCAL Wearde | Typyske leechste frekwinsje mei respekt foar nominale frekwinsje | Typyske Heechste Frekwinsje mei respekt foar nominale frekwinsje |
0x00 | 50% | 100% |
0x3f | 75% | 150% |
0x7f | 100% | 200% |
CLKPR - Prescale-register foar klok
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x26 | CLKPCE | – | – | – | CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | CLKPR |
Lês / Skriuw | R/W | R | R | R | R/W | R/W | R/W | R/W |
Begjinwearde 0 0 0 0 Sjoch Bitbeskriuwing
Bit 7 - CLKPCE: Clock Prescaler Change ynskeakelje
It CLKPCE-bit moat nei logika ien wurde skreaun om feroaring fan de CLKPS-bits yn te skeakeljen. It CLKPCE-bit wurdt allinich bywurke as de oare bits yn CLKPR tagelyk op nul wurde skreaun. CLKPCE wurdt wiske troch hardware fjouwer syklussen neidat it is skreaun of as de CLKPS bits wurde skreaun. It opnij skriuwen fan it CLKPCE-bit binnen dizze time-outperioade ferlinget de time-outperioade noch, en wisket it CLKPCE-bit net.
Bits 6: 4 - Res: Reserveare bits
Dizze bits binne reserveare bits yn 'e ATtiny25 / 45/85 en sille altyd as nul lêze.
Bits 3: 0 - CLKPS [3: 0]: Clock Prescaler Selektearje bits 3 - 0
Dizze bits definiearje de ferdielingsfaktor tusken de selekteare klokboarne en de ynterne systeemklok. Dizze bits kinne runtime wurde skreaun om de klokfrekwinsje te fariearjen oan 'e easken fan tapassing. As de skieding de yngong fan 'e haadklok dielt nei de MCU, wurdt de snelheid fan alle syngroane peripheren redukt as in divisjefaktor wurdt brûkt. De ferdielingsfaktoaren wurde jûn yn Tabel 6-15.
Om unbedoelde feroaringen fan klokfrekwinsje te foarkommen, moat in spesjale skriuwproseduere wurde folge om de CLKPS-bits te feroarjen:
Skriuw de Clock Prescaler Change Enable (CLKPCE) bit nei ien en alle oare bits yn CLKPR op nul.
Skriuw binnen de fjouwer cycles de winske wearde nei CLKPS by it skriuwen fan in nul nei CLKPCE.
Interrupts moatte wurde útskeakele by feroaring fan prescaler-ynstelling om te soargjen dat de skriuwproseduere net wurdt ûnderbrutsen.
De CKDIV8 Fuse bepaalt de begjinwearde fan 'e CLKPS-bits. As CKDIV8 net programmearre is, wurde de CLKPS-bits weromset nei "0000". As CKDIV8 is programmearre, wurde CLKPS bits weromsette nei "0011", it jaan fan in divyzje faktor fan acht by it opstarten. Dizze funksje moat brûkt wurde as de selekteare klokboarne in hegere frekwinsje hat dan de maksimale frekwinsje fan it apparaat by de hjoeddeiske bedriuwsbetingsten. Tink derom dat elke wearde kin wurde skreaun nei de CLKPS-bits nettsjinsteande de CKDIV8 Fuse-ynstelling. De applikaasje software moat soargje dat in foldwaande divyzje faktor is
keazen as de selekteare klokboarne in hegere frekwinsje hat dan de maksimale frekwinsje fan it apparaat by de hjoeddeistige bedriuwsbetingsten. It apparaat wurdt ferstjoerd mei de CKDIV8 Fuse programmeare.
Tabel 6-15. Klok Prescaler Selektearje
CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | Klok Division Faktor |
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 | Reservearre |
1 | 0 | 1 | 0 | Reservearre |
1 | 0 | 1 | 1 | Reservearre |
1 | 1 | 0 | 0 | Reservearre |
1 | 1 | 0 | 1 | Reservearre |
1 | 1 | 1 | 0 | Reservearre |
1 | 1 | 1 | 1 | Reservearre |
Opmerking: De foarskaler is útskeakele yn ATtiny15-kompatibiliteitsmodus en noch skriuwen nei CLKPR, noch programmearjen fan de CKDIV8-fuse hat gjin effekt op 'e systeemklok (dy't altyd 1.6 MHz sil wêze).
Power Management en Sleep Modes
De hege prestaasjes en de liedende koade-effisjinsje makket de AVR-mikrokontrollers in ideale kar foar applikaasjes mei lege macht. Derneist kinne sliepmodi de applikaasje ynskeakelje om net brûkte modules yn 'e MCU ôf te sluten, en dêrtroch enerzjy te besparjen. De AVR biedt ferskate sliepmodi wêrtroch de brûker it enerzjyferbrûk kin oanpasse oan 'e easken fan' e applikaasje.
Sliepmodi
Ofbylding 6-1 op side 23 presinteart de ferskillende kloksystemen en har ferdieling yn ATtiny25 / 45/85. De figuer is nuttich by it selektearjen fan in passende sliepmodus. Tabel 7-1 toant de ferskillende sliepmodi en har wekkerboarnen.
Tabel 7-1. Aktive klokdomeinen en wekkerboarnen yn 'e ferskate sliepmodi
Aktive klokdomeinen | Ossillators | Wake-up Boarnen | ||||||||||
Sliepmodus | clkCPU | clkFLASH | clkIO | clkADC | clkPCK | Haadklokboarne ynskeakele | INT0 en Pin Change | SPM / EEPROM
Klear |
USI Start Betingst |
ADC | Oare I/O | Wachthûn Ûnderbrekke |
Idle | X | X | X | X | X | X | X | X | X | X | ||
ADC-lûdsreduksje | X | X | X(1) | X | X | X | X | |||||
Stroomsteuring | X(1) | X | X |
Opmerking: Foar INT0, allinich nivo-ûnderbrekking.
Om ien fan 'e trije sliepmodi yn te gean, moat it SE-bit yn MCUCR wurde skreaun nei logika ien en moat in SLEEP-ynstruksje wurde útfierd. De SM [1: 0] bits yn it MCUCR Register selektearje hokker sliepmodus (Idle, ADC Noise Reduction of Power-down) wurdt aktivearre troch de SLEEP-ynstruksje. Sjen Tabel 7-2 foar in gearfetting.
As in ynskeakele ûnderbrekking optreedt wylst de MCU yn in sliepmodus is, wurdt de MCU wekker. De MCU wurdt dan stoppe foar fjouwer syklusen neist de opstarttiid, fiert de ûnderbrekkingsroutine út en hervat de útfiering fan 'e ynstruksje nei SLEEP. De ynhâld fan it register File en SRAM binne net feroare as it apparaat wekker wurdt fan sliep. As in reset foarkomt yn 'e sliepmodus, wurdt de MCU wekker en wurdt útfierd út' e Reset Vector.
Tink derom: dat as in nivo-triggered ûnderbrekking wurdt brûkt foar wekker, it feroare nivo moat in skoft holden wurde om de MCU wekker te meitsjen (en foar de MCU om de ûnderbrekkingstsjinstroutine yn te gean). Sjen "Eksterne ûnderbrekt" op side 49 foar details.
Ynaktive modus
As de SM[1:0] bits wurde skreaun nei 00, makket de SLEEP-ynstruksje de MCU yn 'e Idle-modus, stopet de CPU, mar lit Analog Comparator, ADC, USI, Timer / Counter, Watchdog, en it interruptsysteem trochgean mei operearje- ite. Dizze sliepmodus stopet yn prinsipe clkCPU en clkFLASH, wylst de oare klokken rinne kinne.
Idle-modus stelt de MCU yn steat om wekker te wurden fan ynterne aktivearren lykas ek ynterne lykas de Timer Overflow. As wake-up fan 'e Analog Comparator interrupt net nedich is, kin de Analog Comparator útskeakele wurde troch it ACD-bit yn te setten "ACSR - Analog fergelikingskontrôle en statusregister" op side 120, Dit sil it enerzjyferbrûk yn 'e Idle-modus ferminderje. As de ADC is ynskeakele, begjint in konverzje automatysk as dizze modus wurdt ynfierd.
ADC-lûdsreduksjemodus
As de SM[1:0] bits wurde skreaun nei 01, makket de SLEEP-ynstruksje de MCU yn 'e ADC Noise Reduction-modus, stopet de CPU, mar lit de ADC, de eksterne interrupts, en de Watchdog trochgean mei operearjen (as ynskeakele). Dizze sliepmodus stopet clkI/O, clkCPU en clkFLASH, wylst de oare klokken rinne kinne.
Dit ferbetteret de lûdsomjouwing foar de ADC, wêrtroch hegere resolúsje-mjittingen mooglik binne. As de ADC is ynskeakele, begjint in konverzje automatysk as dizze modus wurdt ynfierd. Los fan 'e ADC Conversion Complete interrupt, allinich in eksterne reset, in Watchdog Reset, in Brown-out Reset, in SPM / EEPROM ready interrupt, in eksterne nivo-interrupt op INT0 of in pin-feroaring interrupt kinne de MCU wekker meitsje fan ADC Noise Reduction wize.
Power-down modus
As de SM [1: 0] bits wurde skreaun nei 10, makket de SLEEP-ynstruksje de MCU yn 'e Power-down mode. Yn dizze modus wurdt de oscillator stoppe, wylst de eksterne ûnderbrekt, de opsporing fan tastân fan 'e USI-start en de Watchdog funksjonearje trochgean (as ynskeakele). Allinich in eksterne reset, in Reset fan 'e Watchdog, in Brown-out Reset, ûnderbrekking fan' e USI-starttoestân, in eksterne ûnderbrekking fan it nivo op INT0 of in pin-feroaringsûnderbrekking kin de MCU wekker meitsje. Dizze sliepmodus stopt alle generearre klokken, wêrtroch allinich operaasje fan asynchrone modules mooglik is.
Software BOD Utskeakelje
As de Brown-out Detector (BOD) is ynskeakele troch BODLEVEL fuses (sjoch Tabel 20-4 op side 148), kontrolearret de BOD aktyf it oanbod voltage tidens in sliepperioade. Op guon apparaten is it mooglik enerzjy te besparjen troch de BOD út te skeakeljen troch software yn 'e sliepmodus Power-Down. It enerzjyferbrûk yn 'e sliepmodus sil dan op itselde nivo wêze as wannear BOD wrâldwiid útskeakele is troch lontsjes.
As BOD is útskeakele troch software, wurdt de BOD-funksje fuortdaliks útskeakele nei it ynfieren fan 'e sliepmodus. By wekker út sliep wurdt BOD automatysk wer ynskeakele. Dit soarget foar feilige operaasje yn it gefal dat it VCC-nivo sakke is yn 'e sliepperioade.
As de BOD is útskeakele, sil de opwekkingstiid fan 'e sliepmodus itselde wêze as dy foar wekker wurden fan RESET. De brûker moat de wekketiden mei de hân ynstelle, sadat de referinsje fan 'e bandgap tiid hat om te begjinnen en de BOD goed wurket foardat de MCU koade trochgiet mei útfieren. Sjoch SUT [1: 0] en CKSEL [3: 0] fuse bits yn tabel "Fuse lege byte" op side 149
BOD útskeakelje wurdt kontroleare troch it BODS (BOD Sleep) bit fan MCU Control Register, sjoch “MCUCR - MCU-kontrôle Registrearje ”op side 37, As jo dit bit nei ien skriuwe, draait BOD út yn Power-Down, wylst it skriuwen fan nul de BOD aktyf hâldt. De standertynstelling is nul, dus BOD aktyf.
Skriuwen nei de BODS-bit wurdt kontroleare troch in tiidreeks en in ynskakele bit, sjoch “MCUCR - MCU Control Regis- ter ”op side 37.
Beheinings
BOD útskeakelje funksjonaliteit is allinich yn 'e folgjende apparaten ymplementeare:
ATtiny25, revyzje E, en nijer
ATtiny45, revyzje D, en nijer
ATtiny85, revyzje C, en nijer
Ferzjes binne markearre op it apparaatpakket en kinne as folgjend wurde fûn:
Underkant fan pakketten 8P3 en 8S2
Boppekant fan pakket 20M1
Krêftreduksjeregister
It Power Reduction Register (PRR), sjoch "PRR - Register foar enerzjyreduksje" op side 38, biedt in metoade om it enerzjyferbrûk te ferminderjen troch de klok te stopjen nei yndividuele peripheren. De hjoeddeistige steat fan it perifeare is beferzen en de I / O-registers kinne net lêzen of skreaun wurde. Boarnen brûkt troch it perifeare by it stopjen fan 'e klok sille beset bliuwe, dêrom moat it perifeare yn' e measte gefallen útskeakele wurde foardat de klok stopt. In module wekker meitsje, dat wurdt dien troch it bit yn PRR te wiskjen, set de module yn deselde steat as foarôfsluten.
Moduleafsluting kin brûkt wurde yn 'e stilstânmodus en aktive modus om it totale enerzjyferbrûk signifikant te ferminderjen. Yn alle oare sliepmodi is de klok al stoppe. Sjen "Oanfierstream fan I / O-modules" op side 177 foar bvamples.
Minimalisearje enerzjyferbrûk
D'r binne ferskate problemen te besjen as jo besykje it enerzjyferbrûk yn in AVR-kontroleare systeem te minimalisearjen. Yn 't algemien moatte sliepmodi safolle mooglik wurde brûkt, en de sliepmodus moat wurde selekteare sadat sa min mooglik funksjes fan' e apparaten wurkje. Alle funksjes dy't net nedich binne moatte útskeakele wurde. Benammen de folgjende modules kinne spesjaal omtinken nedich wêze as jo besykje it leechst mooglike enerzjyferbrûk te berikken.
Analog nei digitaal omrekkener
As aktivearre, sil de ADC ynskeakele wurde yn alle sliepmodi. Om macht te besparjen, moat de ADC útskeakele wurde foardat jo in sliepmodus ynfiere. As de ADC is útskeakele en opnij oan, sil de folgjende konverzje in útwreide konverzje wêze. Ferwize nei "Analooch nei digitale omrekkener" op side 122 foar details oer ADC-operaasje.
Analoge fergeliking
By it ynfieren fan de ynaktive modus moat de Analog Comparator útskeakele wêze as net brûkt. As jo de modus ADC Noise Reduction yngeane, soe de Analog Comparator moatte wurde útskeakele. Yn 'e oare sliepmodi is de Analog Comparator automatysk útskeakele. As de Analog Comparator lykwols is ynsteld om it Internal Voltage Referinsje as ynfier, de Analog Comparator soe moatte wurde útskeakele yn alle sliepmodi. Oars, it Internal Voltage Referinsje sil ynskeakele wêze, ûnôfhinklik fan sliepmodus. Ferwize nei "Analoge komparator" op side 119 foar details oer hoe't jo de Analoge Comparator ynstelle kinne.
Brown-out detektor
As de Brown-out Detector net nedich is yn 'e applikaasje, dan moat dizze module útskeakele wurde. As de Brown-out Detector is ynskeakele troch de BODLEVEL Fuses, dan sil dizze ynskeakele wurde yn alle sliepmodi, en konsumearje dus altyd stroom. Yn 'e djippere sliepmodi sil dit signifikant bydrage oan it totale hjoeddeistige konsumpsje. Sjen "Brown-out Detec- tion ”op side 41 en "Software BOD útskeakelje" op side 35 foar details oer hoe't jo de Brown-out Detector ynstelle kinne.
Ynterne Voltage Referinsje
Ynterne Voltage Referinsje sil wurde ynskeakele as nedich troch de Brown-out Detection, de Analog Comparator of de ADC. As dizze modules útskeakele binne lykas beskreaun yn 'e seksjes hjirboppe, sil it ynterne voltage referinsje sil útskeakele wêze en it sil gjin macht ferbrûke. As it opnij is ynskeakele, moat de brûker de referinsje tastean te begjinnen foardat de útfier wurdt brûkt. As de referinsje yn sliepmodus wurdt hâlden, kin de útfier direkt wurde brûkt. Ferwize nei "Ynterne Voltage Referinsje ”op side 42 foar details oer de opstarttiid.
Watchdog Timer
As de Watchdog Timer net nedich is yn 'e applikaasje, dan moat dizze module útskeakele wurde. As de Watchdog Timer is ynskeakele, sil dizze ynskeakele wurde yn alle sliepmodi, en konsumearje dêrom altyd stroom. Yn 'e djippere sliepmodi sil dit signifikant bydrage oan it totale hjoeddeistige konsumpsje. Ferwize nei "Wachthûntimer" op side 42 foar details oer hoe't jo de Watchdog Timer ynstelle kinne.
Port Pins
By it ynfieren fan in sliepmodus moatte alle havenpinnen konfigureare wurde om minimale macht te brûken. It wichtichste is dan om te soargjen dat gjin pins resistive loads ride. Yn sliepmodi wêr't sawol de I/O-klok (clkI/O) as de ADC-klok (clkADC) wurde stoppe, wurde de ynfierbuffers fan it apparaat útskeakele. Dit soarget derfoar dat gjin macht wurdt konsumearre
troch de ynfierlogika as net nedich. Yn guon gefallen is de ynfierlogika nedich foar it opspoaren fan wekker-omstannichheden, en
it sil dan wurde ynskeakele. Ferwize nei de seksje "Digitale ynfier ynskeakelje en sliepmodi" op side 57 foar details oer hokker pins binne ynskeakele. As de ynfierbuffer is ynskeakele en it ynfiersinjaal bliuwt driuwend of hat in analooch sinjaalnivo tichtby VCC / 2, sil de ynfierbuffer oermjittige macht brûke.
Foar analoge ynfierpinnen moat de digitale ynfierbuffer altyd útskeakele wurde. In analoog sinjaal nivo tichtby VCC / 2 op in ynfier pin kin feroarsaakje wichtige stroom sels yn aktive modus. Digitale ynfierbuffers kinne wurde útskeakele troch te skriuwen nei it Digital Input Disable Register (DIDR0). Ferwize nei "DIDR0 - Registrearje 0 foar digitale ynput útskeakelje" op side 121 foar details.
Registrearje beskriuwing
MCUCR - MCU-kontrôleregister
It MCU-kontrôleregister befettet kontrolbits foar enerzjybehear.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUD | SE | SM1 | SM0 | BODSE | ISC01 | ISC00 | MCUCR |
Lês / Skriuw | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 - BODS: BOD Sleep
BOD útskeakelje funksjonaliteit is allinich yn guon apparaten te krijen. Sjen "Beheiningen" op side 36.
Om BOD yn 'e sliep út te skeakeljen (sjoch Tabel 7-1 op side 34) it BODS-bit moat wurde skreaun nei logyske. Dit wurdt regele troch in tiidreeks en it ynskeakelje bit, BODSE yn MCUCR. Earst moatte sawol BODS as BODSE op ien wurde ynsteld. Twad, binnen fjouwer kloksyklusen moatte BODS op ien wurde ynsteld en BODSE op nul. It BODS-bit is trije klokcycli aktyf neidat it is ynsteld. In sliepeynstruksje moat wurde útfierd wylst BODS aktyf is om de BOD foar de werklike sliepmodus út te setten. It BODS-bit wurdt automatysk wiske nei trije kloksyklusen.
Yn apparaten wêr't Sleeping BOD net is ymplementeare is dit bit net brûkt en sil it altyd nul lêze.
Bit 5 - SE: Sliepe ynskeakelje
It SE-bit moat skreaun wurde nei logyske ien om de MCU yn 'e sliepmodus te meitsjen as de SLEEP-ynstruksje wurdt útfierd. Om foar te kommen dat de MCU yn 'e sliepmodus komt, útsein as it it doel fan 'e programmeur is, wurdt it oanrikkemandearre om de Sleep Enable (SE) bit nei ien te skriuwen krekt foar de útfiering fan 'e SLEEP-ynstruksje en it fuortdaliks nei it wekkerjen wiskje.
Bits 4: 3 - SM [1: 0]: Sliepmodus Selektearje bits 1 en 0
Dizze bits selektearje tusken de trije beskikbere sliepmodi lykas werjûn yn Tabel 7-2.
Tabel 7-2. Sleep Mode Selektearje
SM1 | SM0 | Sliepmodus |
0 | 0 | Idle |
0 | 1 | ADC-lûdsreduksje |
1 | 0 | Stroomsteuring |
1 | 1 | Reservearre |
Bit 2 - BODSE: BOD Sliepe ynskeakelje
BOD útskeakelje funksjonaliteit is allinich yn guon apparaten te krijen. Sjen "Beheiningen" op side 36.
De BODSE-bit makket it ynstellen fan BODS-kontrôlebit mooglik, lykas útlein yn BODS-beskriuwing. BOD útskeakelje wurdt regele troch in opmurken folchoarder.
Dit bit is net brûkt yn apparaten wêr't software BOD útskeakelje is net ymplementearre en sil yn dizze apparaten as nul lêzen wurde.
PRR - Register foar machtreduksje
It Power Reduction Register biedt in metoade om it enerzjyferbrûk te ferminderjen troch perifeare kloksignalen útskeakelje te litten.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x20 | – | – | – | – | PRIM1 | PRIM0 | PRUSI | PRADC | PRR |
Lês / Skriuw | R | R | R | R | R/W | R/W | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7: 4 - Res: Reserveare bits
Dizze bits binne reserveare bits yn 'e ATtiny25 / 45/85 en sille altyd as nul lêze.
Bit 3 - PRTIM1: Power Reduction Timer / Counter1
It skriuwen fan in logyske ien foar dit bit slút de module Timer / Counter1 út. As de Timer / Teller1 is ynskeakele, sil de operaasje trochgean lykas foar de ôfsluting.
Bit 2 - PRTIM0: Power Reduction Timer / Counter0
It skriuwen fan in logyske ien foar dit bit slút de module Timer / Counter0 út. As de Timer / Teller0 is ynskeakele, sil de operaasje trochgean lykas foar de ôfsluting.
Bit 1 - PRUSI: Power Reduction USI
It skriuwen fan in logyske ien foar dit bit slút de USI troch de klok nei de module te stopjen. As de USI opnij wekker wurdt, moat de USI opnij initialisearre wurde om in goede wurking te garandearjen.
Bit 0 - PRADC: Power Reduction ADC
In logyske skriuwe foar dit bit slút de ADC ôf. De ADC moat útskeakele wurde foardat it stillein wurdt. Tink derom dat de ADC-klok ek wurdt brûkt troch guon dielen fan 'e analoge komparator, wat betsjut dat de analoge komparator net kin wurde brûkt as dit bit heech is.
Systeembehear en weromsette
Reset de AVR
Under reset wurde alle I / O-registers ynsteld op har begjinwearden, en it programma begjint mei útfieren fan 'e Reset Vector. De ynstruksje pleatst by de Reset Vector moat in RJMP - Relative Jump - ynstruksje wêze foar de reset-ôfhanneling. As it programma noait in ynterruptboarne ynskeakelt, wurde de Interrupt Vectors net brûkt, en kin reguliere programmakoade op dizze lokaasjes wurde pleatst. It sirkwy diagram yn figuer 8-1 lit de reset logika sjen. Elektryske parameters fan 'e reset-skeakelingen wurde ynjûn "Systeem- en weromsette-skaaimerken" op side 165.
figuer 8-1 Reset Logic
De I / O-poarten fan 'e AVR wurde fuortendaliks weromset nei har earste steat as in reset-boarne aktyf wurdt. Dit freget gjin klokboarne om te draaien.
Neidat alle reset-boarnen ynaktyf binne gien, wurdt in fertragingsteller oproppen, dy't de ynterne reset strekt. Hjirmei kin de krêft in stabyl nivo berikke foardat normale operaasje begjint. De tiid-outperioade fan 'e fertragingsteller wurdt definieare troch de brûker fia de SUT- en CKSEL-fuses. De ferskillende seleksjes foar de fertragingsperioade wurde presintearre yn "Klok Boarnen ”op side 25.
Boarnen opnij ynstelle
De ATtiny25 / 45/85 hat fjouwer boarnen fan reset:
Power-on Reset. De MCU wurdt reset as de oanbod voltage is ûnder de Power-on Reset-drompel (VPOT).
Eksterne weromsette. De MCU wurdt reset as in leech nivo op 'e RESET-pin langer is dan de minimale polslange.
Resolúsje fan watchdog. De MCU wurdt reset as de perioade fan 'e Watchdog Timer ôfrint en de Watchdog is ynskeakele.
Brown-out Reset. De MCU wurdt reset as de oanbod voltage VCC is ûnder de Brown-out Reset-drompel (VBOT) en de Brown-out-detektor is ynskeakele.
Power-on Reset
In Power-on Reset (POR) puls wurdt generearre troch in On-chip detectie-circuit. It opspoaringsnivo is definieare yn “Syts- tem en Resette skaaimerken ”op side 165. De POR wurdt aktivearre as VCC ûnder it deteksjenivo is. It POR-sirkwy kin brûkt wurde om de Start-up Reset te triggerjen, en ek om in mislearring yn leveringsvolum te detektearjentage.
In Power-on Reset (POR) circuit soarget derfoar dat it apparaat wurdt reset fan Power-on. De drompel foar opstarten berikke berikke voltage ropt de fertraging teller, dy't bepaalt hoe lang it apparaat wurdt hâlden yn RESET nei VCC opkomst. It RESET-sinjaal wurdt wer aktivearre, sûnder fertraging, as VCC ôfnimt ûnder it deteksjenivo.
figuer 8-2. MCU Start-up, RESET Tied to VCC
INTERNE RESET
figuer 8-3. MCU Start-up, RESET Extended External
Eksterne weromsette
In eksterne reset wurdt generearre troch in leech nivo op 'e RESET-pin as ynskeakele. Weromsette pulses langer dan de minimale pulsbreedte (sjoch "Systeem- en weromsette-skaaimerken" op side 165) sil in reset generearje, sels as de klok net rint. Koartere pulsen wurde net garandearre om in reset te generearjen. As it tapaste sinjaal de Reset Threshold Voltage - VRST - op syn positive râne, de fertraging teller begjint de MCU neidat de Time-out perioade is ferrûn.
figuer 8-4. Eksterne reset tidens operaasje
Brown-out Detection
ATtiny25/45/85 hat in On-chip Brown-out Detection (BOD) circuit foar it kontrolearjen fan it VCC-nivo tidens operaasje troch it te fergelykjen mei in fêst triggernivo. It triggernivo foar de BOD kin wurde selektearre troch de BODLEVEL Fuses. It triggernivo hat in hysteresis om spikefrije Brown-out Detection te garandearjen. De hysteresis op it deteksjenivo moat ynterpretearre wurde as VBOT + = VBOT + VHYST / 2 en VBOT- = VBOT - VHYST / 2.
As de BOD ynskeakele is, en VCC nimt ôf nei in wearde ûnder it triggernivo (VBOT- in figuer 8-5), de Brown-out Reset wurdt fuortendaliks aktivearre. As VCC ferheget boppe it triggernivo (VBOT + yn figuer 8-5), begjint de fertragingsteller de MCU nei't de Time-outperioade tTOUT ferrûn is.
It BOD-sirkwy sil allinich in drip yn VCC detektearje as de voltage bliuwt ûnder it triggernivo langer dan tBOD opjûn "Systeem- en weromsette-skaaimerken" op side 165.
Resolúsje fan watchdog
As de Watchdog time-out, sil it in koarte resetpuls generearje fan ien CK-syklusdoer. Op 'e fallende râne fan dizze puls begjint de fertragingstimer de Time-outperioade tTOUT te tellen. Ferwize nei "Wachthûntimer" op side 42 foar details oer wurking fan 'e Watchdog Timer.
Voltage Referinsje Signalen en opstarttiid ynskeakelje
De voltagDe referinsje hat in opstarttiid dy't ynfloed kin hawwe op 'e manier wêrop it moat wurde brûkt. De opstarttiid wurdt ynjûn "Systeem- en weromsette-skaaimerken" op side 165, Om macht te besparjen is de referinsje net altyd ynskeakele. De referinsje is oan yn 'e folgjende situaasjes:
As de BOD is ynskeakele (troch programmearjen fan de BODLEVEL [2: 0] Fuse Bits).
As de bandgapreferinsje is ferbûn mei de Analog Comparator (troch it ACBG-bit yn ACSR yn te stellen).
As de ADC is ynskeakele.
Sadwaande, as de BOD net is ynskeakele, moat de brûker, nei it ynstellen fan it ACBG-bit of it ynskeakeljen fan de ADC, altyd de referinsje starte moatte foardat de útfier fan 'e Analoge Comparator of ADC wurdt brûkt. Om it stroomferbrûk yn 'e Power-down-modus te ferminderjen, kin de brûker de trije boppesteande betingsten foarkomme om te soargjen dat de referinsje is útskeakele foardat hy yn' e Power-down-modus giet.
Watchdog Timer
De Watchdog Timer is klok fan in On-chip Oscillator dy't draait op 128 kHz. Troch de Watchdog Timer prescaler te kontrolearjen, kin it ynterval fan Watchdog Reset oanpast wurde lykas werjûn yn Tabel 8-3 op side 46, De WDR - Reset watchdog - ynstruksje set de Watchdog-timer werom. De Watchdog Timer wurdt ek opnij ynsteld as it is útskeakele en as in chipreset foarkomt. Tsien ferskillende kloksyklusperioaden kinne wurde selekteare om de resetperioade te bepalen. As de resetperioade ôfrint sûnder in oare Watchdog Reset, wurdt de ATtiny25 / 45/85 reset en útfiert fanút de Reset Vector. Foar timinggegevens oer de Reset fan 'e Watchdog, ferwize nei Tabel 8-3 op side 46.
De Watchdog Timer kin ek konfigureare wurde om in ûnderbrekking te generearjen ynstee fan in reset. Dit kin tige nuttich wêze as jo de Watchdog brûke om wekker te wurden fanút Power-down.
Om ûnbedoeld útskeakeljen fan 'e Watchdog of unbedoelde feroaring fan' e time-outperioade te foarkommen, wurde twa ferskillende feiligensnivo's selekteare troch de lont WDTON lykas werjûn yn Tabel 8-1 Ferwize nei “Tiidreeksen foar feroarjen fan de kon- figuraasje fan 'e Watchdog Timer ”op side 43 foar details.
Tabel 8-1. WDT-konfiguraasje as funksje fan 'e fuse-ynstellingen fan WDTON
WDTON | Safety Level | WDT earste steat | Hoe kinne jo de WDT útskeakelje | Hoe feroarje jo time-out |
Net programmeare | 1 | Utskeakele | Tiid folchoarder | Gjin beheiningen |
Programmearre | 2 | Ynskeakele | Altyd ynskeakele | Tiid folchoarder |
figuer 8-7. Watchdog Timer
Tiidreeksen foar feroarjen fan de konfiguraasje fan 'e Watchdog Timer
De folchoarder foar it feroarjen fan konfiguraasje ferskilt in bytsje tusken de twa feiligensnivo's. Aparte prosedueres wurde beskreaun foar elk nivo.
Feiligensnivo 1: Yn dizze modus is de Watchdog Timer yn earste ynstânsje útskeakele, mar kin ynskeakele wurde troch it WDE-bit nei ien te skriuwen sûnder beheining. In timed folchoarder is nedich by it útskeakeljen fan in ynskeakele Watchdog Timer. Om in ynskeakele Watchdog Timer út te skeakeljen, moat de folgjende proseduere wurde folge:
Yn deselde operaasje skriuw in logyske ien nei WDCE en WDE. In logika moat nei WDE wurde skreaun, nettsjinsteande de foarige wearde fan it WDE-bit.
Binnen de folgjende fjouwer kloksyklusjes, yn deselde operaasje, skriuw de WDE- en WDP-bits as winske, mar mei de WDCE-bit wiske.
Feiligensnivo 2: Yn dizze modus is de Watchdog Timer altyd ynskeakele, en it WDE-bit sil altyd lêze as ien. In timed folchoarder is nedich by it feroarjen fan de Watchdog Time-out perioade. Om de Watchdog Time-out te feroarjen, moat de folgjende proseduere wurde folge:
Yn deselde operaasje skriuw in logyske ien nei WDCE en WDE. Alhoewol de WDE altyd is ynsteld, moat de WDE nei ien wurde skreaun om de tydlike folchoarder te begjinnen.
Binnen de folgjende fjouwer kloksyklussen, yn deselde operaasje, skriuw de WDP-bits as winske, mar mei de WDCE-bit wiske. De wearde skreaun oan it WDE-bit is net relevant.
Koade Example
De folgjende koade example toant ien gearkomste en ien C -funksje foar it útsetten fan 'e WDT. De eksample giet derfan út dat ûnderbrekkings wurde regele (bgl. troch wrâldwide ûnderbrekkingen út te skeakeljen) sadat d'r gjin ûnderbrekkingen sille foarkomme by it útfieren fan dizze funksjes.
Montagekoade Example(1) |
WDT_off:
wdr ; WDRF wiskje yn MCUSR ldi r16, (0< út MCUSR, r16 ; Skriuw logyske ien nei WDCE en WDE ; Hâld âlde prescaler-ynstelling om ûnbedoeld Reset fan Watchdog te foarkommen yn r16, WDTCR ori r16, (1< út WDTCR, r16 ; WDT útsette ldi r16, (0< út WDTCR, r16 ret |
C Koade Example(1) |
void WDT_off (void)
{ _WDR (); /* Wiskje WDRF yn MCUSR */ MCUSR = 0x00 /* Skriuw logyske ien nei WDCE en WDE */ WDTCR |= (1< / * WDT * / WDTCR = 0x00 útsette; } |
Opmerking: 1. Sjoch "Koade Examples ”op side 6.
Registrearje beskriuwing
MCUSR - MCU-statusregister
It MCU-statusregister biedt ynformaasje oer hokker resetboarne in MCU-reset feroarsake hat.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 | – | – | – | – | WDRF | BORF | EXTRF | PORF | MCUSR |
Lês / Skriuw | R | R | R | R | R/W | R/W | R/W | R/W |
Begjinwearde 0 0 0 0 Sjoch Bitbeskriuwing
Bits 7: 4 - Res: Reserveare bits
Dizze bits binne reserveare bits yn 'e ATtiny25 / 45/85 en sille altyd as nul lêze.
Bit 3 - WDRF: Watchdog werstelle flagge
Dit bit wurdt ynsteld as in Reset fan Watchdog optreedt. It bit wurdt opnij ynsteld troch in Reset by opstarten, of troch in logyske nul oan 'e flagge te skriuwen.
Bit 2 - BORF: Brown-out weromsette flagge
Dit bit wurdt ynsteld as in Brown-out Reset optreedt. It bit wurdt opnij ynsteld troch in Reset by opstarten, of troch in logyske nul oan 'e flagge te skriuwen.
Bit 1 - EXTRF: Eksterne weromsette flagge
Dit bit wurdt ynsteld as in eksterne reset foarkomt. It bit wurdt opnij ynsteld troch in Reset by opstarten, of troch in logyske nul oan 'e flagge te skriuwen.
Bit 0 - PORF: Power-on Reset Flag
Dit bit wurdt ynsteld as in Reset opstart. It bit wurdt allinich reset troch in logyske nul oan 'e flagge te skriuwen.
Om gebrûk te meitsjen fan 'e Reset Flags om in reset-betingst te identifisearjen, moat de brûker de MCUSR sa betiid mooglik yn it programma lêze en opnij ynstelle. As it register wurdt wiske foardat in oare reset plakfynt, kin de boarne fan 'e reset wurde fûn troch de Reset Flags te ûndersiikjen.
WDTCR - Watchdog Timer Control Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x21 | WDIF | WDIE | WDP3 | WDCE | WDE | WDP2 | WDP1 | WDP0 | WDTCR |
Lês / Skriuw | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
Bit 7 - WDIF: Watchdog Timeout Interrupt Flag
Dit bit wurdt ynsteld as in time-out optreedt yn 'e Watchdog Timer en de Watchdog Timer is ynsteld foar ûnderbrekking. WDIF wurdt wiske troch hardware by it útfieren fan 'e oerienkommende ûnderbrekkingsfektor. As alternatyf wurdt WDIF wiske troch in logyske ien te skriuwen oan 'e flagge. As de I-bit yn SREG en WDIE binne ynsteld, wurdt de Watchdog Time-out Interrupt útfierd.
Bit 6 - WDIE: Watchdog Timeout Interrupt ynskeakelje
As dit bit nei ien wurdt skreaun, wurdt WDE wiske, en de I-bit yn it Statusregister is ynsteld, is de Watchdog Time-out Interrupt ynskeakele. Yn dizze modus wurdt de oerienkommende ûnderbrekking útfierd ynstee fan in reset as in time-out yn 'e Watchdog Timer optreedt.
As WDE is ynsteld, wurdt WDIE automatysk troch hardware wiske as in time-out optreedt. Dit is nuttich om de befeiliging fan 'e Watchdog Reset te hâlden by it brûken fan' e ûnderbrekking. Neidat it WDIE-bit wiske is, sil de folgjende time-out in reset generearje. Om it Reset fan 'e Watchdog te foarkommen, moat WDIE ynsteld wurde nei elke ûnderbrekking.
Tabel 8-2. Watchdog Timer konfiguraasje
WDE | WDIE | Watchdog Timer State | Aksje op Time-out |
0 | 0 | Ophâlden | Gjin |
0 | 1 | Te rinnen | Ûnderbrekke |
1 | 0 | Te rinnen | Weromsette |
1 | 1 | Te rinnen | Ûnderbrekke |
Bit 4 - WDCE: Watchdog Change ynskeakelje
Dit bit moat wurde ynsteld as it WDE-bit wurdt skreaun op logyske nul. Oars wurdt de Watchdog net útskeakele. Ienris nei ien skreaun, sil hardware dit bit wiskje nei fjouwer kloksyklusen. Ferwize nei de beskriuwing fan it WDE-bit foar in útskeakelje proseduere fan Watchdog. Dit bit moat ek ynsteld wurde as jo de prescaler bits feroarje. Sjen “Tiidreeksen foar it feroarjen fan de konfiguraasje fan 'e Watchdog Timer "op side 43.
Bit 3 - WDE: Watchdog ynskeakelje
As de WDE wurdt skreaun nei logyske ien, is de Watchdog Timer ynskeakele, en as de WDE wurdt skreaun nei logyske nul, is de Watchdog Timer-funksje útskeakele. WDE kin allinich wiske wurde as it WDCE-bit logysk nivo ien hat. Om in ynskeakele Watchdog Timer te ûntsiferje, moat de folgjende proseduere wurde folge:
Skriuw yn deselde operaasje in logyske ien nei WDCE en WDE. In logika moat nei WDE wurde skreaun, hoewol it op ien is ynsteld foardat de útskeakeling begjint.
Skriuw in logika 0 nei WDE binnen de folgjende fjouwer kloksyklusen. Dit skeakelt de Watchdog út.
Op feiligensnivo 2 is it net mooglik om de Watchdog Timer út te skeakeljen, sels net mei it hjirboppe beskreaune algoritme. Sjen "Tiidreeksen foar feroarjen fan de konfiguraasje fan 'e Watchdog-timer" op side 43.
Op feiligensnivo 1 wurdt WDE oerskreaun troch WDRF yn MCUSR. Sjen "MCUSR - MCU-statusregister" op side 44 foar beskriuwing fan WDRF. Dit betsjut dat WDE altyd is ynsteld as WDRF is ynsteld. Om WDE te wiskjen, moat WDRF wiske wurde foardat de Watchdog útskeakele wurdt mei de hjirboppe beskreaune proseduere. Dizze funksje soarget foar meardere reset ûnder omstannichheden dy't falen feroarsaakje, en in feilige opstart nei it falen.
Opmerking: As de watchdog-timer net sil wurde brûkt yn 'e applikaasje, is it wichtich om te gean troch in watchdog-útskeakelingsproseduere yn' e inisjalisaasje fan it apparaat. As de Watchdog per ûngelok ynskeakele is, bygelyksample troch in runaway pointer of brown-out condition, sil it apparaat wurde reset, wat op syn beurt sil liede ta in nije watchdog-reset. Om dizze situaasje te foarkommen, moat de tapassingsoftware altyd de WDRF -flagge en it WDE -kontrolebit wiskje yn 'e inisjalisaasjerutine.
Bits 5, 2: 0 - WDP [3: 0]: Watchdog Timer Prescaler 3, 2, 1 en 0
De WDP [3: 0] bits bepale de prescaling fan Watchdog Timer as de Watchdog Timer is ynskeakele. De ferskillende prescaling wearden en har oerienkommende Timeout Perioden wurde werjûn yn Tabel 8-3.
Tabel 8-3. Watchdog Timer Prescale Selektearje
WDP3 | WDP2 | WDP1 | WDP0 | Oantal WDT oscillatorsyklusen | Typyske Time-out by VCC = 5.0V |
0 | 0 | 0 | 0 | 2K (2048) fytst | 16 ms |
0 | 0 | 0 | 1 | 4K (4096) fytst | 32 ms |
0 | 0 | 1 | 0 | 8K (8192) fytst | 64 ms |
0 | 0 | 1 | 1 | 16K (16384) fytst | 0.125 s |
0 | 1 | 0 | 0 | 32K (32764) fytst | 0.25 s |
0 | 1 | 0 | 1 | 64K (65536) fytst | 0.5 s |
0 | 1 | 1 | 0 | 128K (131072) fytst | 1.0 s |
0 | 1 | 1 | 1 | 256K (262144) fytst | 2.0 s |
1 | 0 | 0 | 0 | 512K (524288) fytst | 4.0 s |
1 | 0 | 0 | 1 | 1024K (1048576) fytst | 8.0 s |
Tabel 8-3. Watchdog Timer Prescale Select (ferfolch)
WDP3 | WDP2 | WDP1 | WDP0 | Oantal WDT oscillatorsyklusen | Typyske Time-out by VCC = 5.0V |
1 | 0 | 1 | 0 | Reservearre(1) | |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 0 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
Opmerking: 1. As selekteare, sil ien fan 'e jildige ynstellings ûnder 0b1010 brûkt wurde.
Underbrekt
Dizze paragraaf beskriuwt de spesifikaasjes fan 'e ynterruptbehanneling lykas útfierd yn ATtiny25 / 45/85. Foar in algemiene ferklearring fan 'e AVR-ynterruptbehanneling, ferwize nei "Handling opnij ynstelle en ûnderbrekke" op side 12.
Underbrekken fektoaren yn ATtiny25 / 45/85
De ûnderbrekkende fektoren fan ATtiny25 / 45/85 wurde beskreaun yn Tabel 9-1ûnder.
Tabel 9-1. Weromsette en ûnderbrekke Vectors
Fektor nr. | Programma-adres | Boarne | Underbrekke definysje |
1 | 0x0000 | RESETTE | Eksterne pin, Reset ynskakelje, Reset brown-out, Reset watchdog |
2 | 0x0001 | INT0 | Ekstern ynterrupt fersyk 0 |
3 | 0x0002 | PCINT0 | Pin Feroarje ûnderbrekke fersyk 0 |
4 | 0x0003 | TIMER1_COMPA | Timer / teller1 Fergelykje wedstriid A |
5 | 0x0004 | TIMER1_OVF | Timer / Counter1 oerstreaming |
6 | 0x0005 | TIMER0_OVF | Timer / Counter0 oerstreaming |
7 | 0x0006 | EE_RDY | EEPROM Klear |
8 | 0x0007 | ANA_COMP | Analoge fergeliking |
9 | 0x0008 | ADC | ADC-konverzje foltôge |
10 | 0x0009 | TIMER1_COMPB | Timer / teller1 Fergelykje wedstriid B |
11 | 0x000A | TIMER0_COMPA | Timer / teller0 Fergelykje wedstriid A |
12 | 0x000B | TIMER0_COMPB | Timer / teller0 Fergelykje wedstriid B |
13 | 0x000 c | WDT | Watchdog Time-out |
14 | 0x000 d | USI_START | USI START |
15 | 0x000e | USI_OVF | USI oerstreaming |
As it programma noait in ynterruptboarne ynskeakelt, wurde de Interrupt Vectors net brûkt, en kin reguliere programmakoade op dizze lokaasjes wurde pleatst.
In typyske en algemiene opset foar ûnderbrekingsvektoradressen yn ATtiny25/45/85 wurdt werjûn yn it programma example ûnder.
Montagekoade Example | ||
.org 0x0000 | ; Stel adres fan folgjende yn | ferklearring |
rjmp RESET | ; Adres 0x0000 | |
rjmp INT0_ISR | ; Adres 0x0001 | |
rjmp PCINT0_ISR | ; Adres 0x0002 | |
rjmp TIM1_COMPA_ISR | ; Adres 0x0003 | |
rjmp TIM1_OVF_ISR | ; Adres 0x0004 | |
rjmp TIM0_OVF_ISR | ; Adres 0x0005 | |
rjmp EE_RDY_ISR | ; Adres 0x0006 | |
rjmp ANA_COMP_ISR | ; Adres 0x0007 | |
rjmp ADC_ISR | ; Adres 0x0008 | |
rjmp TIM1_COMPB_ISR | ; Adres 0x0009 | |
rjmp TIM0_COMPA_ISR | ; Adres 0x000A | |
rjmp TIM0_COMPB_ISR | ; Adres 0x000B | |
rjmp WDT_ISR | ; Adres 0x000C | |
rjmp USI_START_ISR | ; Adres 0x000D | |
rjmp USI_OVF_ISR | ; Adres 0x000E | |
RESETTE: | ; Haadprogramma start | |
; Adres 0x000F | ||
… |
Opmerking: sjoch "Koade Examples ”op side 6.
Eksterne ynterrupsjes
De eksterne ynterrupsjes wurde aktivearre troch de INT0-pin as ien fan 'e PCINT [5: 0] -pins. Tink derom dat, as ynskakele, de ynterrupsjes sille aktivearje, sels as de pins fan INT0 as PCINT [5: 0] binne konfigureare as útgongen. Dizze funksje biedt in manier om in software-ûnderbrekking te generearjen. Pin-feroaring ûnderbrekt PCI sil aktivearje as in ynskeakele PCINT [5: 0] pin ynskeakelt. It PCMSK-register kontroleart hokker pins bydrage oan de ynterrupsjes fan 'e pinwiziging. Pin-feroaringsûnderbrekken op PCINT [5: 0] wurde asynchroon ûntdutsen. Dit hâldt yn dat dizze ûnderbrekkingen kinne wurde brûkt foar it wekker fan it diel ek fan oare sliepmodi dan de idle-modus.
De INT0-ynterrumpten kinne wurde aktivearre troch in fallende as opkommende râne as in leech nivo. Dit is ynsteld lykas oanjûn yn 'e spesifikaasje foar it MCU Control Register - MCUCR. As de INT0-ûnderbrekking is ynskeakele en is ynsteld as aktivearre nivo, sil de ûnderbrekking aktivearje salang't de pin leech wurdt hâlden. Tink derom dat erkenning fan fallende of opkommende râne ûnderbrekt op INT0 de oanwêzigens fan in I / O-klok fereasket, beskreaun yn "Clock Systems en har ferdieling" op side 23.
Underbrekken mei leech nivo
In ûnderbrekking op leech nivo op INT0 wurdt asynchroan ûntdutsen. Dit hâldt yn dat dizze ûnderbrekking kin brûkt wurde foar it wekker fan it diel ek fan oare sliepmodi dan 'idle-modus. De I / O-klok is stillein yn alle sliepmodi, útsein de idle-modus.
Tink derom dat as in nivo-triggered ûnderbrekking wurdt brûkt foar wekker fan Power-down, it fereaske nivo moat lang genôch hâlden wurde foar de MCU om de wekker te foltôgjen om de nivo-ûnderbrekking te triggerjen. As it nivo ferdwynt foar it ein fan 'e opstarttiid, sil de MCU noch wekker wurde, mar gjin ûnderbrekking wurdt generearre. De opstarttiid wurdt definieare troch de SUT- en CKSEL-fuses lykas beskreaun yn "Systeemklok en klokopsjes" op side 23.
As it lege nivo op 'e ûnderbrekkingspinne wurdt fuortsmiten foardat it apparaat wekker is, sil de útfiering fan it programma net omlaat wurde nei de ûnderbrekkende tsjinstroutine, mar trochgean fan' e ynstruksje nei it kommando SLEEP.
Pin Feroarje interrupt timing
In eksample fan timing fan in pin feroarje interrupt wurdt werjûn yn figuer 9-1.
Registrearje beskriuwing
MCUCR - MCU-kontrôleregister
It External Interrupt Control Register A befettet control bits foar interrupt sense control.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUD | SE | SM1 | SM0 | BODSE | ISC01 | ISC00 | MCUCR |
Lês / Skriuw | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 1: 0 - ISC0 [1: 0]: Sense Control 0 Bit 1 en Bit 0 ûnderbrekke
De eksterne ynterfal 0 wurdt aktivearre troch de eksterne pin INT0 as de SREG I-flagge en it oerienkommende ynterrupmasker binne ynsteld. It nivo en de rânen op 'e eksterne INT0-pin dy't de ûnderbrekking aktivearje binne definieare yn Tabel 9-2. De wearde op 'e INT0 -pin is sampliede foardat rânen wurde detekteare. As râne- of wikselûnderbrek is selekteare, generearje pulsen dy't langer duorje dan ien klokperioade in ûnderbrekking. Koartere pulsen wurde net garandearre om in ûnderbrekking te generearjen. As ûnderbrekking foar leech nivo is selektearre, moat it lege nivo wurde hâlden oant de foltôging fan 'e op it stuit útfierende ynstruksje om in ûnderbrekking te generearjen.
Tabel 9-2. Underbrekke 0 Sense Control
ISC01 | ISC00 | Beskriuwing |
0 | 0 | It lege nivo fan INT0 genereart in interrupt-fersyk. |
0 | 1 | Elke logyske feroaring op INT0 genereart in ûnderbrekkingsoanfraach. |
1 | 0 | De fallende râne fan INT0 genereart in ynterrupt fersyk. |
1 | 1 | De opkommende râne fan INT0 genereart in ynterrupt fersyk. |
GIMSK - Algemien ûnderbrekmaskerregister
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3B | – | INT0 | PCIe | – | – | – | – | – | GIMSK |
Lês / Skriuw | R | R/W | R/W | R | R | R | R | R | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7, 4: 0 - Res: Reserveare bits
Dizze bits binne reserveare bits yn 'e ATtiny25 / 45/85 en sille altyd as nul lêze.
Bit 6 - INT0: Eksterne ynterrupt fersyk 0 ynskeakelje
As it INT0-bit is ynsteld (ien) en de I-bit yn it Statusregister (SREG) is ynsteld (ien), wurdt de eksterne pinûnderbrekking ynskeakele. De Interrupt Sense Control0 bits 1/0 (ISC01 en ISC00) yn it MCU Control Register (MCUCR) definiearje oft de eksterne interrupt wurdt aktiveare op opkommende en / of fallende râne fan 'e INT0-pin of nivo dat wurdt waarnommen. Aktiviteit op 'e pin soarget foar in ûnderbrekke fersyk, sels as INT0 is konfigurearre as útfier. De korrespondearjende ûnderbrekking fan Ekstern Interrupt Request 0 wurdt útfierd fanút de INT0 Interrupt Vector.
Bit 5 - PCIE: Pin Change Interrupt ynskeakelje
As de PCIE-bit is ynsteld (ien) en de I-bit yn it Statusregister (SREG) is ynsteld (ien), is ûnderbrekking fan pinferoaring ynskeakele. Elke feroaring op elke ynskeakele PCINT [5: 0] pin sil in ûnderbrekking feroarsaakje. De oerienkommende ûnderbrekking fan Pin Change Interrupt Request wurdt útfierd fanút de PCI Interrupt Vector. PCINT [5: 0] pins wurde yndividueel ynskeakele troch it PCMSK0 Register.
GIFR - Algemien Interrupt Flag Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3A | – | INTF0 | PCIF | – | – | – | – | – | GIFR |
Lês / Skriuw | R | R/W | R/W | R | R | R | R | R | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7, 4: 0 - Res: Reserveare bits
Dizze bits binne reserveare bits yn 'e ATtiny25 / 45/85 en sille altyd as nul lêze.
Bit 6 - INTF0: Eksterne ynterruptflagge 0
As in râne of logyske feroaring op 'e INT0-pin in interrupt-fersyk aktiveart, wurdt INTF0 ynsteld (ien). As de I-bit yn SREG en de INT0-bit yn GIMSK binne ynsteld (ien), springt de MCU nei de oerienkommende Interrupt Vector. De flagge wurdt wiske as de ûnderbrekroutine wurdt útfierd. As alternatyf kin de flagge wurde wiske troch in logyske ien derop te skriuwen. Dizze flagge wurdt altyd wiske as INT0 is ynsteld as nivo-ûnderbrekking.
Bit 5 - PCIF: Pin Change Interrupt Flag
As in logyske feroaring op elke PCINT [5: 0] pin in interrupt-fersyk aktiveart, wurdt PCIF ynsteld (ien). As de I-bit yn SREG en de PCIE-bit yn GIMSK binne ynsteld (ien), springt de MCU nei de oerienkommende Interrupt Vector. De flagge wurdt wiske as de ûnderbrekroutine wurdt útfierd. As alternatyf kin de flagge wurde wiske troch in logyske ien derop te skriuwen.
PCMSK - Maskeregister foar pin feroarje
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x15 | – | – | PCINT5 | PCINT4 | PCINT3 | PCINT2 | PCINT1 | PCINT0 | PCMSK |
Lês / Skriuw | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7: 6 - Res: Reserveare bits
Dizze bits binne reserveare bits yn 'e ATtiny25 / 45/85 en sille altyd as nul lêze.
Bits 5: 0 - PCINT [5: 0]: Pin feroarje ynskeakelje masker 5: 0
Elke PCINT [5: 0] -bit selekteart of pin-feroaringsûnderbrekking is ynskeakele op 'e oerienkommende I / O-pin. As PCINT [5: 0] is ynsteld en it PCIE-bit yn GIMSK is ynsteld, wurdt ûnderbrekking fan pinwiziging ynskeakele op 'e oerienkommende I / O-pin. As PCINT [5: 0] is wiske, is pin-feroaringsûnderbrekking op 'e oerienkommende I / O-pin útskeakele.
I/O havens
Ynlieding
Alle AVR-poarten hawwe wirklike Read-Modify-Write-funksjonaliteit as se wurde brûkt as algemiene digitale I/O-poarten. Dit betsjuttet dat de rjochting fan ien poarte -pin kin wurde feroare sûnder de richting fan in oare pin ûnbedoeld te feroarjen mei de SBI- en CBI -ynstruksjes. Itselde jildt by feroarjen fan stasjonwearde (as konfigureare as útfier) of ynskeakelje/útskeakelje fan pull-up wjerstannen (as konfigureare as ynfier). Elke útfierbuffer hat symmetryske oandriuwkeigenskippen mei sawol hege sink as boarne mooglikheid. De pin -bestjoerder is sterk genôch om LED -displays direkt te riden. Alle poartepinnen hawwe yndividueel selekteare pull-up wjerstannen mei in oanbod-voltage invariant ferset. Alle I / O pins hawwe beskerming diodes oan sawol VCC en Ground lykas oanjûn yn figuer 10-1. Ferwize nei "Elektryske skaaimerken" op side 161 foar in folsleine list fan parameters.
figuer 10-1. I / O Pin lykweardich Schematic
Alle registers en bitferwizings yn dizze seksje binne skreaun yn algemiene foarm. In lytse letter "x" stiet foar de nûmerletter foar de poarte, en in lytse "n" stiet foar it bitnûmer. By it brûken fan it register as bit definiearret yn in programma, moat de krekte foarm lykwols wurde brûkt. Foar eksample, PORTB3 foar bit nr. 3 yn Port B, hjir algemien dokuminteare as PORTxn. De fysike I/O -registers en bitlokaasjes wurde neamd yn "Registrearje beskriuwing" op side 64.
Trije lokaasjes foar I / O-geheugenadres wurde tawiisd foar elke poarte, elk ien foar it Data Register - PORTx, Data Direction Register - DDRx, en de Port Input Pins - PINx. De I / O-lokaasje fan poarteynfierpinnen is allinich lêzen, wylst it Data Register en it Data Direction Register wurde lêzen / skriuwen. It skriuwen fan in logika ien oant in bytsje yn 'e PINx-registraasje sil lykwols resultearje yn in wikselje yn it oerienkommende bit yn it Gegevensregister. Derneist skeakelt de Pull-up Disable - PUD-bit yn MCUCR de pull-up-funksje út foar alle pins yn alle havens as dizze ynsteld is.
It brûken fan de I / O-poarte as General Digital I / O wurdt beskreaun yn "Havens as algemiene digitale I / O" op side 53, De measte poartepins binne multiplexeare mei alternatyf funksjes foar de perifere funksjes op it apparaat. Hoe't elke alternative funksje ynteresseart mei de havenpin wurdt beskreaun yn "Alternative havenfunksjes" op side 57, Ferwize nei de seksjes fan 'e yndividuele module foar in folsleine beskriuwing fan' e alternative funksjes.
Tink derom dat it ynskeakeljen fan de alternative funksje fan guon fan 'e poartepins gjin ynfloed hat op it gebrûk fan' e oare pinnen yn 'e poarte as algemiene digitale I / O.
Havens as Algemiene Digital I / O
De havens binne bi-directionele I / O-havens mei opsjoneel ynterne pull-ups. figuer 10-2 lit in funksjoneel beskriuwing sjen fan ien I / O-poarte-pin, hjir algemien neamd Pxn.
figuer 10-2. Algemiene Digitale I/O(1)
De pin ynstelle
Elke poarte-pin bestiet út trije registerbits: DDxn, PORTxn, en PINxn. Lykas werjûn yn "Registrearje beskriuwing" op side 64, binne de DDxn-bits tagong ta it DDRx I / O-adres, de PORTxn-bits by it PORTx I / O-adres, en de PINxn-bits by it PINx I / O-adres.
It DDxn-bit yn it DDRx-register selekteart de rjochting fan dizze pin. As DDxn ien is skreaun logika, wurdt Pxn konfigurearre as in útfierpinne. As DDxn logysk nul is skreaun, wurdt Pxn konfigurearre as in ynfierpinne.
As PORTxn ien logyske wurdt skreaun as de pin is ynsteld as in ynfier pin, wurdt de pull-up wjerstân aktivearre. Om de pull-up-wjerstân út te skeakeljen, moat PORTxn logysk nul wurde skreaun of moat de pin wurde ynsteld as útfierpin. De poartepins wurde trijesprutsen as reset-betingst aktyf wurdt, sels as der gjin klokken rinne.
As PORTxn ien logika is skreaun as de pin is ynsteld as in útfierpin, dan wurdt de poartepen heech dreaun (ien). As PORTxn logysk nul wurdt skreaun as de pin is ynsteld as in útfierpin, wurdt de poarte-pin leech dreaun (nul).
De pin wikselje
In logika skriuwe nei PINxn skeakelt de wearde fan PORTxn yn, ûnôfhinklik fan 'e wearde fan DDRxn. Tink derom dat de SBI-ynstruksje kin wurde brûkt om ien inkeld bit yn in haven te wikseljen.
Wikselje tusken ynput en útfier
By it wikseljen tusken tri-state ({DDxn, PORTxn} = 0b00) en útfier heech ({DDxn, PORTxn} = 0b11), in tuskenstân mei ofwol pull-up ynskeakele {DDxn, PORTxn} = 0b01) of útfier leech ({DDxn, PORTxn} = 0b10) moat foarkomme. Normaal, de pull-up ynskeakele steat is folslein akseptabel, as in hege-impedant omjouwing sil net fernimme it ferskil tusken in sterke hege bestjoerder en in pull-up. As dit net it gefal is, kin it PUD-bit yn it MCUCR-register ynsteld wurde om alle pull-ups yn alle havens út te skeakeljen.
Wikselje tusken ynput mei pull-up en output low genereart itselde probleem. De brûker moat of de tri-state ({DDxn, PORTxn} = 0b00) as de útfier hege steat ({DDxn, PORTxn} = 0b10) brûke as in tuskenstap.
Tabel 10-1 fettet de kontrôlesignalen foar de pinwearde gear.
Tabel 10-1. Port Pin konfiguraasjes
DDxn | PORTxn | PUD
(yn MCUCR) |
I/O | Pull-up | Kommentaar |
0 | 0 | X | Ynfier | Nee | Tri-state (Hi-Z) |
0 | 1 | 0 | Ynfier | Ja | Pxn sil hjoeddeistige boarne as ekst. leech lutsen. |
0 | 1 | 1 | Ynfier | Nee | Tri-state (Hi-Z) |
1 | 0 | X | Utfier | Nee | Utfier leech (sink) |
1 | 1 | X | Utfier | Nee | Utfier heech (Boarne) |
De pinwearde lêze
Unôfhinklik fan 'e ynstelling fan Data Direction bit DDxn, kin de poarte pin wurde lêzen troch de PINxn Register bit. Lykas werjûn yn figuer 10-2, it PINxn Register bit en de foargeande klink foarmje in syngronisator. Dit is nedich om metastabiliteit te foarkommen as de fysike pin wearde feroaret by de râne fan 'e ynterne klok, mar it yntroduseart ek in fertraging. figuer 10-3 toant in timing diagram fan de syngronisaasje by it lêzen fan in ekstern tapaste pin wearde. De maksimale en minimale fuortplantingsfertragingen wurde respektivelik oantsjutten tpd, max en tpd, min.
Tink oan de klokperioade dy't begjint koart nei de earste fallende râne fan 'e systeemklok. De klink is sletten as de klok leech is, en giet trochsichtich as de klok heech is, lykas oanjûn troch de skaden regio fan it "SYNC LATCH" sinjaal. De sinjaalwearde wurdt sluten as de systeemklok leech is. It wurdt yn it PINxn-register klokt by de folgjende positive râne. Lykas oanjûn troch de twa pylken tpd, max en tpd, min, sil in inkelde sinjaaloergong op 'e pin fertrage tusken ½ en 1½ systeemklokperioade ôfhinklik fan' e tiid fan bewearing.
By it weromlêzen fan in troch de software tawiisde pinwearde, moat in no-ynstruksje wurde ynfoege lykas oanjûn yn figuer 10-4, De ynstruksje set de "SYNC LATCH" sinjaal yn oan 'e positive râne fan' e klok. Yn dit gefal is de fertraging tpd troch de syngronisator ien systeemklokperioade.
De folgjende koade example lit sjen hoe te setten haven B pins 0 en 1 heech, 2 en 3 low, en definiearje de haven pins út 4 oan 5 as ynfier mei in pull-up tawiisd oan haven pin 4. De resultearjende pin wearden wurde lêzen werom wer, mar lykas earder besprutsen, is in nop-ynstruksje opnommen om de wearde dy't koartlyn oan guon fan 'e pins is tawiisd werom te lêzen.
Montagekoade Example(1) |
…
; Definiearje pull-ups en set útgongen heech ; Define rjochtings foar haven pins ldi r16,(1<<PB4)|(1<<PB1)|(1<<PB0) ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0) út PORTB,r16 út DDRB,r17 ; Nop ynfoegje foar syngronisaasje nop ; Lês haven pins yn r16,pinb … |
Opmerking: Foar it assemblageprogramma wurde twa tydlike registers brûkt om de tiid te minimalisearjen fanôf pull-ups wurde ynsteld op pins 0, 1 en 4, oant de rjochtingsbits goed ynsteld binne, bit 2 en 3 definiearje as leech en opnij definiearje bits 0 en 1 as sterke hege bestjoerders.
C Koade Example |
net ûndertekene char i;
… /* Definiearje pull-ups en set útgongen heech */ /* Definiearje rjochtings foar poartepinnen */ PORTB = (1< DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* Nop ynfoegje foar syngronisaasje*/ _NOP (); /* Lês poarte pins */ i = PINB; … |
Digitale yngong ynskeakelje en sliepmodi
Lykas werjûn yn figuer 10-2, kin it digitale ynfier sinjaal clamped nei grûn by de yngong fan 'e schmitt-trigger. It sinjaal oanjûn SLEEP yn 'e figuer, wurdt ynsteld troch de MCU Sleep Controller yn Power-down modus om hege enerzjyferbrûk te foarkommen as guon ynfiersinjalen driuwend bliuwe, of hawwe in analoog sinjaalnivo tichtby VCC/2.
SLEEP wurdt oerskreaun foar portpins ynskeakele as eksterne interruptpins. As it eksterne ynterruptoanfraach net ynskeakele is, is SLEEP ek aktyf foar dizze pins. SLEEP wurdt ek oerskreaun troch ferskate oare alternative funksjes lykas beskreaun yn "Alternative havenfunksjes" op side 57.
As in logysk heech nivo ("ien") oanwêzich is op in asynchrone eksterne ûnderbrekkingspin konfigurearre as "Interrupt on Rising Edge, Falling Edge, of Any Logic Change on Pin" wylst de eksterne ûnderbrekking net ynskeakele is, sil de korrespondearjende eksterne ûnderbrekkingsflagge wurde ynsteld by it hervatten fan 'e boppeneamde Sliepmodus, lykas de clamping yn dizze sliepmodus produsearret de frege logyske feroaring.
Net ferbûn pins
As guon pins net brûkt wurde, wurdt it oanrikkemandearre om te soargjen dat dizze pins in definieare nivo hawwe. Sels hoewol de measte digitale yngongen binne útskeakele yn 'e djippe sliepmodi lykas hjirboppe beskreaun, moatte driuwende yngongen foarkommen wurde om it hjoeddeistige konsumpsje te ferminderjen yn alle oare modi wêr't de digitale yngongen binne ynskeakele (Reset, Aktive modus en Idle-modus).
De ienfâldichste metoade om te garandearjen in definiearre nivo fan in net brûkte pin, is te skeakeljen de ynterne pull-up. Yn dit gefal sil de pull-up wurde útskeakele by reset. As leech enerzjyferbrûk by reset wichtich is, is it oan te rieden om in eksterne pull-up of pulldown te brûken. It is net oan te rieden om net brûkte pins direkt te ferbinen mei VCC of GND, om't dit oermjittige streamingen kin feroarsaakje as de pin by ûngelok konfigurearre is as in útfier.
Alternative havenfunksjes
De measte havenpinnen hawwe alternatyf funksjes neist dat se algemiene digitale I / O's binne. figuer 10-5 lit sjen hoe't de haven pin kontrôle sinjalen fan 'e ferienfâldige figuer 10-2 kin wurde oerskreaun troch alternative funksjes. De oergeande sinjalen binne miskien net oanwêzich yn alle havenpinnen, mar de figuer tsjinnet as in generike beskriuwing fan tapassing op alle havenpinnen yn 'e AVR-mikrokontrollerfamylje.
Tabel 10-2. Generic beskriuwing fan oerskriuwen sinjalen foar alternative funksjes
Sinjaal Namme | Folsleine namme | Beskriuwing |
PUOE | Pull-up oerskriuwe ynskeakelje | As dit sinjaal is ynsteld, wurdt de ynskeakelje ynskeakele troch it PUOV-sinjaal. As dit sinjaal wist, is de pull-up ynskeakele wannear
{DDxn, PORTxn, PUD} = 0b010. |
PUOV | Pull-up oerskriuwe wearde | As PUOE is ynsteld, wurdt de pull-up ynskeakele / útskeakele as PUOV wurdt ynsteld / wiske, ûnôfhinklik fan 'e ynstelling fan' e DDxn-, PORTxn- en PUD-registerbits. |
DDOE | Gegevensrjochting oerskriuwe ynskeakelje | As dit sinjaal is ynsteld, wurdt de Output Driver Enable kontroleare troch it DDOV-sinjaal. As dit sinjaal wiske wurdt, wurdt de útfierstjoerder ynskeakele troch de DDxn Registerbit. |
DDOV | Gegevensrjochting oerskriuwe wearde | As DDOE is ynsteld, wurdt de útfierstjoerder ynskeakele / útskeakele as DDOV wurdt ynsteld / wiske, ûnôfhinklik fan 'e ynstelling fan' e DDxn Registerbit. |
PVOE | Portwearde oerskriuwe ynskeakelje | As dit sinjaal is ynsteld en de Utfierstjoerprogramma is ynskeakele, wurdt de portwearde regele troch it PVOV-sinjaal. As PVOE is wiske, en de útfierstjoerder is ynskeakele, wurdt de Portwearde regele troch de PORTxn Registerbit. |
PVOV | Portwearde oerskriuwe wearde | As PVOE is ynsteld, wurdt de poartewearde ynsteld op PVOV, ûnôfhinklik fan 'e ynstelling fan' e PORTxn Registerbit. |
PTOE | Port Toggle Oerskriuwe ynskeakelje | As PTOE is ynsteld, wurdt it PORTxn Register bit omkeard. |
DIEOE | Digitale yngong ynskeakelje Oerskriuwe ynskeakelje | As dit bit is ynsteld, wurdt de Digital Input Enable kontroleare troch it DIEOV-sinjaal. As dit sinjaal wist, wurdt de Digital Input Enable bepaald troch MCU-steat (Normale modus, sliepmodus). |
DIEOV | Digitale yngong ynskeakelje oerskriuwe wearde | As DIEOE is ynsteld, wurdt de digitale ynput ynskeakele / útskeakele as DIEOV wurdt ynsteld / wiske, ûnôfhinklik fan 'e MCU-steat (Normale modus, sliepmodus). |
DI | Digitale ynput | Dit is de digitale ynput foar ôfwikseljende funksjes. Yn 'e figuer is it sinjaal ferbûn mei de útfier fan' e schmitt-trigger, mar foar de syngronisator. Behalven as de digitale ynput wurdt brûkt as klokboarne, sil de module mei de alternative funksje syn eigen syngronisator brûke. |
AIO | Analoge ynput / útfier | Dit is de analoge ynput / útfier nei / fan alternatyf funksjes. It sinjaal is direkt ferbûn mei it pad, en kin bi- rjochting brûkt wurde. |
De folgjende ûnderdielen beskriuwe koart de alternative funksjes foar elke poarte, en relatearje de oergeande sinjalen mei de alternative funksje. Ferwize nei de beskriuwing fan alternative funksjes foar fierdere details.
Alternative funksjes fan haven B
Port B-pins mei alternative funksje wurde werjûn yn Tabel 10-3.
Tabel 10-3. Port B Pins Alternate funksjes
Port Pin | Alternatyf funksje |
PB5 | ![]() RESET: Pin weromsette dW: debugWIRE I / O ADC0: ADC-ynfierkanaal 0 PCINT5: Pin Change Interrupt, Boarne 5 |
PB4 | XTAL2: Crystal Oscillator-útfier CLKO: Systeemklokútfier ADC2: ADC-ynfierkanaal 2
OC1B: Timer / teller1 Ferlykje wedstriid B-útfier PCINT4: Pin feroarje ûnderbrekke 0, boarne 4 |
PB3 | XTAL1: Crystal Oscillator-ynfier CLKI: Eksterne klokynfier ADC3: ADC-ynfierkanaal 3
OC1B: Oanfoljende timer / teller1 Fergelykje wedstriid B-útfier PCINT3: pin feroarje ûnderbrekke 0, boarne 3 |
PB2 | SCK: Serial Clock Input ADC1: ADC Input Channel 1
T0: Timer / teller 0 Klokboarne USCK: USI-klok (Triedriedmodus) SCL: USI-klok (Twadraadmodus) INT0: Eksterne ûnderbrekking 0 Input PCINT2: pin feroarje ûnderbrekke 0, boarne 2 |
PB1 | MISO: SPI Master Data Input / Slave Data Output AIN1: Analoge Comparator, Negative Input OC0B: Timer / Counter0 Fergelykje Match B Output OC1A: Timer / Counter1 Fergelykje Match A Output DO: USI Data Output (Trije triedmodus) PCINT1: Pin Change Interrupt 0, Boarne 1 |
PB0 | MOSI :: SPI-mastergegevensútfier / slave-gegevensynfier AIN0: analoge komparator, positive ynput
OC0A: Timer / Counter0 Ferlykje Match A útfier OC1A: Oanfoljende timer / teller1 Fergelykje oerienkomst A útfier DI: USI-gegevensynfier (Triedriedmodus) SDA: USI Data Input (Twa triedmodus) AREF: Eksterne analoge referinsje PCINT0: Pin Change Interrupt 0, Source 0 |
Poarte B, bit 5 - RESET / dW / ADC0 / PCINT5
RESET: Ynput foar eksterne reset is aktyf leech en ynskeakele troch de RSTDISBL Fuse ("1") net te programmearjen. Pullup is aktivearre en útfierstjoerder en digitale ynput wurde útskeakele as de pin wurdt brûkt as RESET-pin.
dW: As de debugWIRE ynskeakelje (DWEN) Fuse is programmeare en Lock bits binne net programmeare, wurdt it debugWIRE-systeem binnen it doelapparaat aktivearre. De RESET-poarte-pin is ynsteld as in wire-AND (iepen-drain) bi-directionele I / O-pin mei pull-up ynskeakele en wurdt de kommunikaasjepoarte tusken doel en emulator.
ADC0: Analog nei digitaal omrekkener, kanaal 0.
PCINT5: Pin feroarje Underbrekke boarne 5.
Poarte B, bit 4 - XTAL2 / CLKO / ADC2 / OC1B / PCINT4
XTAL2: Chip Clock Oscillator pin 2. Wurdt brûkt as klokstift foar alle chipklokboarnen, útsein ynterne kalibreerbere RC Oscillator en eksterne klok. As it wurdt brûkt as in klokstift, kin de pin net brûkt wurde as in I / O-pin. By it brûken fan ynterne kalibreerbere RC-oscillator as eksterne klok as chipklokboarnen, tsjinnet PB4 as in gewoane I / O-pin.
CLKO: De ferdielde systeemklok kin wurde útfierd op 'e pin PB4. De ferdielde systeemklok wurdt útfierd as de CKOUT Fuse is programmeare, ûnôfhinklik fan 'e PORTB4- en DDB4-ynstellings. It sil ek wurde útfierd by reset.
ADC2: Analog nei digitaal omrekkener, kanaal 2.
OC1B: Utfier fergelykje oerienkomstútfier: De PB4-pin kin tsjinje as eksterne útfier foar de Timer / teller1 Ferlykje oerienkomst B as konfigurearre as útfier (DDB4-set). De OC1B-pin is ek de útfier-pin foar de PWM-modus timerfunksje.
PCINT4: Pin feroarje Underbrekke boarne 4.
Poarte B, bit 3 - XTAL1 / CLKI / ADC3 / OC1B / PCINT3
XTAL1: Chip Clock Oscillator pin 1. Wurdt brûkt foar alle chipklokboarnen, útsein ynterne kalibrearjende RC oscillator. As it wurdt brûkt as in klokstift, kin de pin net brûkt wurde as in I / O-pin.
CLKI: Klokynfier fan in eksterne klokboarne, sjoch "Eksterne klok" op side 26.
ADC3: Analog nei digitaal omrekkener, kanaal 3.
OC1B: Inverted Output Compare Match output: De PB3-pin kin tsjinje as in eksterne output foar de Timer / Counter1 Compare Match B as konfigurearre as in output (DDB3-set). De OC1B-pin is ek de omkearde útfier-pin foar de timerfunksje fan 'e PWM-modus.
PCINT3: Pin feroarje Underbrekke boarne 3.
Poarte B, bit 2 - SCK / ADC1 / T0 / USCK / SCL / INT0 / PCINT2
SCK: Master Clock útfier, Slave Clock input pin foar SPI kanaal. As de SPI as slaaf is ynskeakele, wurdt dizze pin konfigureare as in yngong, ûnôfhinklik fan de ynstelling fan DDB2. As de SPI is ynskeakele as Master, wurdt de gegevensrjochting fan dizze pin regele troch DDPB2. As de pin wurdt twongen troch de SPI om in ynput te wêzen, kin de pull-up noch wurde kontroleare troch de PORTB2-bit.
ADC1: Analog nei digitaal omrekkener, kanaal 1.
T0: Timer / Counter0 counter boarne.
USCK: Triedriedige modus Universele seriële ynterface klok.
SCL: Twa-draads modus Seriële klok foar USI Twa-draads modus.
INT0: Eksterne ynterrupt boarne 0.
PCINT2: Pin feroarje Underbrekke boarne 2.
Poarte B, bit 1 - MISO / AIN1 / OC0B / OC1A / DO / PCINT1
MISO: Master data ynfier, Slave Data útfier pin foar SPI kanaal. As de SPI is ynskeakele as Master, is dizze pin konfigureare as in ynput, ûnôfhinklik fan 'e ynstelling fan DDB1. As de SPI as slaaf is ynskeakele, wurdt de gegevensrjochting fan dizze pin regele troch DDB1. As de pin wurdt twongen troch de SPI om in ynput te wêzen, kin de pull-up noch wurde kontroleare troch de PORTB1-bit.
AIN1: Analoge fergeliking negative ynput. Konfigurearje de poartepin as ynput mei de ynterne pull-up útskeakele om te foarkommen dat de digitale poartefunksje de funksje fan 'e Analoge Comparator bemuoit.
OC0B: Utfier Ferlykje Wedstrydútfier. De PB1-pin kin as eksterne útfier tsjinje foar de Timer / Teller0 Fergelykje oerienkomst B. De PB1-pin moat wurde konfigurearre as útfier (DDB1-set (ien)) om dizze funksje te tsjinjen. De OC0B-pin is ek de útfierpin foar de PWM-modus timerfunksje.
OC1A: Utfier fergelykje oerienkomstútfier: De PB1-pin kin tsjinje as eksterne útfier foar de Timer / teller1 Ferlykje oerienkomst B as konfigurearre as útfier (DDB1-set). De OC1A-pin is ek de útfierpin foar de timerfunksje fan 'e PWM-modus.
DO: Triedriedmodus Universele seriële ynterface Gegevensútfier. Trijetriedige modus Gegevensútfier oerskriuwt de PORTB1-wearde en wurdt nei de haven stjoerd as gegevensrjochtingsbit DDB1 is ynsteld (ien). PORTB1 makket it opheljen noch mooglik, as de rjochting wurdt ynfierd en PORTB1 is ynsteld (ien).
PCINT1: Pin feroarje Underbrekke boarne 1.
Poarte B, bit 0 - MOSI / AIN0 / OC0A / OC1A / DI / SDA / AREF / PCINT0
MOSI: SPI Master Data útfier, Slave Data input foar SPI kanaal. As de SPI as slaaf is ynskeakele, wurdt dizze pin konfigureare as in ynput, ûnôfhinklik fan 'e ynstelling fan DDB0. As de SPI is ynskeakele as master, wurdt de gegevensrjochting fan dizze pin regele troch DDB0. As de pin wurdt twongen troch de SPI om in ynput te wêzen, kin de pull-up noch wurde kontroleare troch de PORTB0-bit.
AIN0: Analoge fergeliking Positive yngong. Konfigurearje de poarte-pin as ynput mei de ynterne pull-up útskeakele om te foarkommen dat de digitale poartefunksje de funksje fan 'e Analoge Comparator ynterfereart.
OC0A: Utfier Fergelykje oerienkomstútfier. De PB0-pin kin tsjinje as eksterne útfier foar de Timer / Teller0 Fergelykje Wedstriid A as konfigurearre as útfier (DDB0-set (ien)). De OC0A-pin is ek de útfierpin foar de PWM-modus timerfunksje.
OC1A: Inverted Output Compare Match output: De PB0-pin kin tsjinje as eksterne útfier foar de Timer / Counter1 Compare Match B as konfigurearre as in output (DDB0-set). De OC1A-pin is ek de omkearde útfierpin foar de PWM-modus timerfunksje.
SDA: Twa triedmodus Seriële ynterface-gegevens.
AREF: Eksterne analoge referinsje foar ADC. Pullup- en útfierstjoerprogramma binne útskeakele op PB0 as de pin wurdt brûkt as in eksterne referinsje as Internal Voltage Referinsje mei eksterne kondensator by de AREF -pin.
DI: Gegevensynfier yn USI Trijedraadmodus. USI Trijedraadmodus oerskriuwt normale portfunksjes net, dus pin moat wurde ynsteld as ynput foar DI-funksje.
PCINT0: Pin feroarje Underbrekke boarne 0.
Tabel 10-4 en Tabel 10-5 relatearje de alternative funksjes fan Port B mei de oermachtige sinjalen werjûn yn Ofbylding 10-5 oer side 58.
Tabel 10-4. Sinjalen oerskriuwe foar alternative funksjes yn PB[5:3]
Sinjaal Namme | PB5 / RESET / ADC0 / PCINT5 | PB4/ADC2/XTAL2/ OC1B/PCINT4 | PB3/ADC3/XTAL1/ OC1B/PCINT3 |
PUOE | ![]() |
0 | 0 |
PUOV | 1 | 0 | 0 |
DDOE | RSTDISBL(1) • DWEN(1) | 0 | 0 |
DDOV | debugWire ferstjoere | 0 | 0 |
PVOE | 0 | OC1B ynskeakelje | ![]() OC1B ynskeakelje |
PVOV | 0 | OC1B | OC1B |
PTOE | 0 | 0 | 0 |
DIEOE | ![]() RSTDISBL(1) + (PCINT5 • PCIE + ADC0D) |
PCINT4 • PCIE + ADC2D | PCINT3 • PCIE + ADC3D |
DIEOV | ADC0D | ADC2D | ADC3D |
DI | PCINT5 Ynfier | PCINT4 Ynfier | PCINT3 Ynfier |
AIO | RESET ynput, ADC0 ynfier | ADC2 Ynfier | ADC3 Ynfier |
Opmerking: as de fuse "0" is (Programmearre).
Tabel 10-5. Sinjalen oerskriuwe foar alternative funksjes yn PB[2:0]
Sinjaal Namme | PB2/SCK/ADC1/T0/ USCK/SCL/INT0/PCINT2 | PB1/MISO/DO/AIN1/ OC1A/OC0B/PCINT1 | PB0/MOSI/DI/SDA/AIN0/AR EF/OC1A/OC0A/
PCINT0 |
PUOE | USI_TWO_WIRE | 0 | USI_TWO_WIRE |
PUOV | 0 | 0 | 0 |
DDOE | USI_TWO_WIRE | 0 | USI_TWO_WIRE |
DDOV | (USI_SCL_HOLD + PORTB2) • DDB2 | 0 | ![]() ![]() (SDA + PORTB0) • DDB0 |
PVOE | USI_TWO_WIRE • DDB2 | OC0B ynskeakelje + OC1A ynskeakelje + USI_THREE_WIRE | ![]() OC0A ynskeakelje + OC1A ynskeakelje + (USI_TWO_WIRE DDB0) |
PVOV | 0 | OC0B + OC1A + DO | ![]() OC0A + OC1A |
PTOE | USITC | 0 | 0 |
DIEOE | PCINT2 • PCIE + ADC1D + USISIE | PCINT1 • PCIE + AIN1D | PCINT0 • PCIE + AIN0D + USISIE |
DIEOV | ADC1D | AIN1D | AIN0D |
DI | T0 / USCK / SCL / INT0 /
PCINT2 Ynfier |
PCINT1 Ynfier | DI / SDA / PCINT0 Ynfier |
AIO | ADC1 Ynfier | Analoge komparator negative ynput | Analoge komparator Posityf ynfier |
Registrearje beskriuwing
MCUCR - MCU-kontrôleregister
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUD | SE | SM1 | SM0 | BODSE | ISC01 | ISC00 | MCUCR |
Lês / Skriuw | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 6 - PUD: Pull-up útskeakelje
As dit bit nei ien wurdt skreaun, wurde de pull-ups yn 'e I / O-poarten útskeakele, sels as de DDxn- en PORTxn-registers binne konfigureare om de pull-ups yn te skeakeljen ({DDxn, PORTxn} = 0b01). Sjen "De pin ynstelle" op side 54 foar mear details oer dizze funksje.
PORTB - Gegevensregister haven
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x18 | – | – | PORTB5 | PORTB4 | PORTB3 | PORTB2 | PORTB1 | PORTB0 | PORTB |
Lês / Skriuw | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
DDRB - Port B Data Direction Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x17 | – | – | DDB5 | DDB4 | DDB3 | DDB2 | DDB1 | DDB0 | DDRB |
Lês / Skriuw | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Inisjele wearde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PINB - Poarte B Input Pins Adres
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x16 | – | – | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 | PINB |
Lês / Skriuw | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Inisjele wearde | 0 | 0 | N/A | N/A | N/A | N/A | N/A | N/A |
8-bit Timer / Counter0 mei PWM
Features
Twa unôfhinklike útfier fergelykje ienheden
Dûbelbuffere útfier fergelykje registers
Timer wiskje by fergelykje oerienkomst (automatysk opnij laden)
Glitchfrije, faze korrekte pulsbreedte modulator (PWM)
Fariabele PWM-perioade
Frekwinsjegenerator
Trije ûnôfhinklike ûnderbrekkingsboarnen (TOV0, OCF0A, en OCF0B)
Oerview
Timer / Counter0 is in 8-bit Timer / Counter-module foar algemien doel, mei twa ûnôfhinklike ienheden foar útfierferlykjen, en mei PWM-stipe. It makket in krekte timing foar programma-útfiering (barrenbehear) en golfgeneraasje mooglik.
In ferienfâldige blokdiagram fan 'e 8-bit Timer / teller wurdt werjûn yn figuer 11-1, Foar de eigentlike pleatsing fan I / O-pins, ferwize nei "Pinout ATtiny25 / 45/85" op side 2, CPU-tagonklike I / O-registers, ynklusyf I / O-bits en I / O-pins, wurde fet sjen litten. It apparaat-spesifike I / O-register en bitlokaasjes wurde neamd yn 'e "Registrearje beskriuwing" op side 77.
De registers foar timer/teller (TCNT0) en útfierfergeliking (OCR0A en OCR0B) binne 8-bit registers. Interrupt fersyk (ôfkoarte ta Int.Req. yn de figuer) sinjalen binne allegear sichtber yn de Timer Interrupt Flag Register (TIFR). Alle ûnderbrekkings wurde yndividueel maskere mei it Timer Interrupt Mask Register (TIMSK). TIFR en TIMSK wurde net werjûn yn de figuer.
De timer / teller kin yntern wurde klokt, fia de foarskaler, of troch in eksterne klokboarne op 'e T0-pin. It logyske blok Clock Select kontrolearret hokker klokboarne en râne de timer / teller brûkt om syn wearde te ferheegjen (of te ferleegjen). De timer/teller is ynaktyf as gjin klokboarne selektearre is. De útfier fan 'e klok selektearje logika wurdt oantsjutten as de timerklok (clkT0).
De dûbele buffere Output Compare Registers (OCR0A en OCR0B) wurdt altyd fergelike mei de Timer / Counter-wearde. It resultaat fan 'e ferliking kin brûkt wurde troch de Waveform Generator om in PWM- of fariabele frekwinsjeproduksje te generearjen op' e Utfier fergelykje-pins (OC0A en OC0B). Sjoch "Ienheid ferlykje útfier" op side 69. foar details. It evenemint Compare Match sil ek de Compare Flag (OCF0A of OCF0B) ynstelle dy't kin wurde brûkt om in ynterpretaasjefersyk foar Output Compare te generearjen.
Definysjes
In soad register- en bitferwizings yn dizze seksje wurde yn algemiene foarm skreaun. In lytse letters "n" ferfangt it timer / tellernûmer, yn dit gefal 0. In lytse letters "x" ferfangt de útfier-ferlykjende ienheid, yn dit gefal fergelykje ienheid A of fergelykje ienheid B. As jo lykwols it register of bit brûke definieart yn in programma moat de krekte foarm wurde brûkt, dus TCNT0 foar tagong ta tellerwearde Timer / Counter0 ensafuorthinne.
De definysjes yn Tabel 11-1 wurde ek wiidweidich brûkt yn it dokumint.
Tabel 11-1. Definysjes
Konstant | Beskriuwing |
BOAIEM | De teller berikt BOTTOM as it 0x00 wurdt |
MAX | De teller berikt syn MAXimum as it 0xFF wurdt (desimaal 255) |
TOP | De teller berikt de TOP as it gelyk wurdt oan de heechste wearde yn 'e tellenfolchoarder. De TOP-wearde kin wurde tawiisd as de fêste wearde 0xFF (MAX) as de wearde opslein yn it OCR0A-register. De opdracht is ôfhinklik fan 'e modus fan operaasje |
Timer / teller prescaler en klok boarnen
De timer / teller kin wurde klokt troch in ynterne as in eksterne klokboarne. De klokboarne wurdt selekteare troch de Clock Select-logika dy't wurdt regele troch de Clock Select (c) bits yn it Timer / Counter0 Control Register (TCCR0B).
Ynterne klokboarne mei prescaler
Timer / Counter0 kin wurde clocked direkt troch de systeem klok (troch it ynstellen fan de CS0 [2:0] = 1). Dit soarget foar de fluchste operaasje, mei in maksimum timer / counter klok frekwinsje gelyk oan systeem klok frekwinsje (fCLK_I / O). As alternatyf kin ien fan fjouwer kranen fan 'e foarskaler brûkt wurde as klokboarne. De foarskalearre klok hat in frekwinsje fan beide
Prescaler weromsette
De prescaler is fergees te rinnen, dat wol sizze dat it ûnôfhinklik wurket fan 'e logika fan Clock Select fan Timer/Counter0. Om't de prescaler net wurdt beynfloede troch de seleksje fan 'e timer/teller, sil de steat fan' e prescaler gefolgen hawwe foar situaasjes wêr't in foarskale klok wurdt brûkt. Ien eksample fan in foarskalingsartefak is as de timer/teller is ynskeakele en klokt troch de prescaler (6> CS0 [2: 0]> 1). It oantal systeemsyklus -syklusen fanôf it momint dat de timer is ynskeakele oant de earste telling optreedt kin wêze fan 1 oant N+1 systeemtoksyklusen, wêr't N gelyk is oan de prescaler -divisor (8, 64, 256, of 1024).
It is mooglik de Prescaler Reset te brûken foar it syngronisearjen fan de Timer / Counter nei de útfiering fan it programma.
Eksterne klokboarne
In eksterne klok boarne tapast op de T0 pin kin brûkt wurde as timer / counter klok (clkT0). De T0 pin is samplied ienris elke systeemsokssyklus troch de logynchronisaasje fan pin. De syngronisearre (sampled) sinjaal wurdt dan trochjûn
troch de rânedetektor. figuer 11-2 toant in funksjoneel lykweardich blokdiagram fan de T0-syngronisaasje en rânedetektorlogika. De registers wurde klokt oan 'e positive râne fan' e ynterne systeemklok (clkI / O). De latch is transparant yn 'e hege perioade fan' e ynterne systeemklok.
De rânedetektor genereart ien clkT0-puls foar elke positive (CS0[2:0] = 7) of negative (CS0[2:0] = 6) râne dy't it detektearret.
De OCR0x-registers wurde dûbeld buffere by it brûken fan ien fan 'e modus Pulsbreedte modulaasje (PWM). Foar de normale en Clear Timer on Compare (CTC) modus fan operaasje is de dûbele buffering útskeakele. De dûbele buffering syngroniseart de fernijing fan de OCR0x Compare Registers nei boppe of ûnder oan 'e tellenfolchoarder. De syngronisaasje foarkomt it foarkommen fan ûnevenlange, net-symmetryske PWM-pulsen, wêrtroch de útfier glitchfrij wurdt.
De OCR0x Register tagong kin kompleks lykje, mar dit is net sa. As de dûbele buffering ynskeakele is, hat de CPU tagong ta it OCR0x-bufferregister, en as dûbele buffering útskeakele is, sil de CPU direkt tagong krije ta de OCR0x.
Force Utfier fergelykje
Yn moden foar generearjen fan PWM-golffoarmen kin de wedstriidútfier fan 'e komparator wurde twongen troch ien te skriuwen nei de Force Output Compare (FOC0x) bit. Twingende fergelykjende oerienkomst sil de OCF0x-flagge net ynstelle of de timer opnij lade / wiskje, mar de OC0x-pin wurdt bywurke as soe in echte Compare Match west hawwe (de ynstellings fan COM0x [1: 0] bits bepale oft de OC0x-pin is ynsteld, wiske of ynskeakele).
Fergelykje Match Blocking troch TCNT0 Skriuw
Alle CPU-skriuwbedriuwen nei it TCNT0-register sille alle Compare Match blokkearje dy't foarkomme yn 'e folgjende timerklokzyklus, sels as de timer wurdt stoppe. Mei dizze funksje kin OCR0x inisjalisearre wurde nei deselde wearde as TCNT0 sûnder in ûnderbrekking te aktivearjen as de klok Timer / teller ynskeakele is.
Mei help fan 'e útfierferlykjende ienheid
Sûnt it skriuwen fan TCNT0 yn elke modus fan operaasje sil alle Compare Matches blokkearje foar ien timerkloksyklus, binne d'r risiko's belutsen by it wizigjen fan TCNT0 by it brûken fan de Output Compare Unit, ûnôfhinklik fan oft de Timer / Teller draait of net. As de wearde skreaun oan TCNT0 is gelyk oan de OCR0x-wearde, sil de fergelykjende oerienkomst wurde mist, wat resulteart yn ferkearde golffoarminggeneraasje. Lykwols skriuwe de TCNT0-wearde net gelyk oan BOTTOM as de teller telt.
De opset fan 'e OC0x moat wurde útfierd foardat it Data Direction Register ynsteld wurdt foar de útfier fan' e pinnepin. De maklikste manier om de OC0x-wearde yn te stellen is it brûken fan 'e Force-útfier-fergeliking (FOC0x) strobebits yn' e normale modus. De OC0x-registers hâlde har wearden sels as se wizigje tusken Waveform Generation-modi.
Hâld der rekken mei dat de COM0x [1: 0] bits net dûbel wurde buffered tegearre mei de ferlykjende wearde. It feroarjen fan de COM0x [1: 0] bits sil fuortendaliks yngean.
Fergelykje Match Output Unit
De bits ferlykje útfiermodus (COM0x [1: 0]) hawwe twa funksjes. De Waveform Generator brûkt de COM0x [1: 0] bits foar it definiearjen fan de steat Utgongsfergelyk (OC0x) by de folgjende Compare Match. Ek kontrolearje de COM0x [1: 0] bits de OC0x pinútfierboarne. figuer 11-6 lit in ferienfâldige skema sjen fan 'e logika dy't beynfloede is troch de ynstelling COM0x [1: 0]. De I / O-registers, I / O-bits, en I / O-pins yn 'e figuer binne fet. Allinich de dielen fan 'e algemiene I / O Port Control Registers (DDR en PORT) dy't wurde beynfloede troch de COM0x [1: 0] bits wurde werjûn. As jo ferwize nei de OC0x-steat, is de referinsje foar it ynterne OC0x-register, net de OC0x-pin. As in systeem reset foarkomt, wurdt it OC0x-register opnij ynsteld op "0".
As OC0A / OC0B ferbûn is mei de I / O-pin, hinget de funksje fan 'e COM0A [1: 0] / COM0B [1: 0] bits ôf fan' e WGM0 [2: 0] bit ynstelling. Tabel 11-2 toant de COM0x [1: 0] bitfunksjonaliteit as de WGM0 [2: 0] bits binne ynsteld op in normale of CTC-modus (net-PWM).
Tabel 11-2. Ferlykje Output Mode, non-PWM Mode
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskriuwing |
0 | 0 | Normale havenoperaasje, OC0A / OC0B loskeppele. |
0 | 1 | Wikselje OC0A / OC0B op Compare Match |
1 | 0 | Wiskje OC0A / OC0B oer fergelykje oerienkomst |
1 | 1 | Stel OC0A / OC0B yn op Fergelykje oerienkomst |
Tabel 11-3 toant de COM0x [1: 0] bitfunksjonaliteit as de WGM0 [2: 0] bits binne ynsteld op snelle PWM-modus.
Tabel 11-3. Fergelykje útfiermodus, rappe PWM-modus(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskriuwing |
0 | 0 | Normale havenoperaasje, OC0A / OC0B loskeppele. |
0 | 1 | Reservearre |
1 | 0 | Clear OC0A / OC0B op Compare Match, set OC0A / OC0B op BOTTOM (modus net omkearend) |
1 | 1 | Set OC0A / OC0B op Compare Match, wiskje OC0A / OC0B by BOTTOM (omkearmodus) |
Opmerking: In spesjaal gefal komt foar as OCR0A of OCR0B lyk oan TOP is en COM0A1/COM0B1 is ynsteld. Yn dit gefal wurdt de fergelikingswedstriid negearre, mar de set of dúdlik wurdt dien op BOTTOM. Sjen "Fast PWM Mode" op side 73 foar mear details.
Tabel 11-4 toant de COM0x [1: 0] bitfunksjonaliteit as de WGM0 [2: 0] bits binne ynsteld op faze korrekte PWM-modus.
Tabel 11-4. Ferlykje Output Mode, Fase Correct PWM Mode(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskriuwing |
0 | 0 | Normale havenoperaasje, OC0A / OC0B loskeppele. |
0 | 1 | Reservearre |
1 | 0 | Wiskje OC0A / OC0B by fergelykje oerienkomst by optellen. Stel OC0A / OC0B yn op Ferlykje oerienkomst by del-tellen. |
1 | 1 | Stel OC0A / OC0B yn op Ferlykje oerienkomst by optellen. Wiskje OC0A / OC0B op Compare Match by del-tellen. |
Opmerking: 1. In spesjaal gefal bart as OCR0A of OCR0B is lyk oan TOP en COM0A1/COM0B1 is ynsteld. Yn dit gefal wurdt de Compare Match negearre, mar de set of clear wurdt dien op TOP. Sjen "Faze korrekte PWM-modus" op side 74 foar mear details.
Bits 3: 2 - Res: Reserveare bits
Dizze bits binne reserveare bits yn 'e ATtiny25 / 45/85 en sille altyd as nul lêze.
Bits 1: 0 - WGM0 [1: 0]: Waveform Generation Mode
Yn kombinaasje mei it WGM02-bit fûn yn it TCCR0B-register, kontrolearje dizze bits de telsekwinsje fan 'e teller, de boarne foar maksimale (TOP) tellerwearde, en hokker type golffoarmgeneraasje te brûken wurdt, sjoch Tabel 11-5, Bedriuwsmodi stipe troch de Timer / Counter-ienheid binne: Normale modus (teller), Clear Timer by fergelykjen (CTC) -modus, en twa soarten pulsmodulaasjemodusjes (PWM) -modi (sjoch "Bedriuwsmodi" op side 71).
Tabel 11-5. Waveform Generation Mode Bit Beskriuwing
Wize | WGM 02 | WGM 01 | WGM 00 | Timer / teller modus fan operaasje | TOP | Update fan OCRx by | TOV Flagge ynsteld op |
0 | 0 | 0 | 0 | Normaal | 0xff | Daliks | MAX(1) |
1 | 0 | 0 | 1 | PWM, faze korrekt | 0xff | TOP | BOAIEM(2) |
2 | 0 | 1 | 0 | CTC | OCRA | Daliks | MAX(1) |
3 | 0 | 1 | 1 | Snelle PWM | 0xff | BOAIEM(2) | MAX(1) |
4 | 1 | 0 | 0 | Reservearre | – | – | – |
5 | 1 | 0 | 1 | PWM, faze korrekt | OCRA | TOP | BOAIEM(2) |
6 | 1 | 1 | 0 | Reservearre | – | – | – |
7 | 1 | 1 | 1 | Snelle PWM | OCRA | BOAIEM(2) | TOP |
Bit 7 - FOC0A: Fergelykje mei krêftútfier A
It FOC0A-bit is allinich aktyf as de WGM-bits in net-PWM-modus oantsjutte.
Om lykwols te garandearjen fan kompatibiliteit mei takomstige apparaten, moat dit bit op nul wurde ynsteld as TCCR0B wurdt skreaun by it operearjen yn PWM-modus. By it skriuwen fan in logyske oan it FOC0A-bit wurdt in direkte Compare Match twongen op 'e Waveform Generation-ienheid. De OC0A-útfier wurdt feroare neffens de ynstelling fan COM0A [1: 0] bits. Tink derom dat it FOC0A-bit wurdt ymplementeare as in strobe. Dêrom is it de wearde oanwêzich yn 'e bits fan COM0A [1: 0] dy't it effekt bepaalt fan' e twongen fergeliking.
In FOC0A-strobe genereart gjin ûnderbrekking, en sil de timer noch net wiskje yn CTC-modus mei OCR0A as TOP. It FOC0A-bit wurdt altyd lêzen as nul.
Bit 6 - FOC0B: Ferlykje krêftútfier B
It FOC0B-bit is allinich aktyf as de WGM-bits in net-PWM-modus oantsjutte.
Om lykwols te garandearjen fan kompatibiliteit mei takomstige apparaten, moat dit bit op nul wurde ynsteld as TCCR0B wurdt skreaun by it operearjen yn PWM-modus. By it skriuwen fan in logyske oan it FOC0B-bit wurdt in direkte Compare Match twongen op 'e Waveform Generation-ienheid. De OC0B-útfier wurdt feroare neffens de ynstelling fan COM0B [1: 0] bits. Tink derom dat it FOC0B-bit wurdt ymplementeare as in strobe. Dêrom is it de wearde oanwêzich yn 'e COM0B [1: 0] bits dy't it effekt bepaalt fan' e twongen fergeliking.
In FOC0B-strobe genereart gjin ûnderbrekking, en sil de timer noch net wiskje yn CTC-modus mei OCR0B as TOP.
It FOC0B-bit wurdt altyd lêzen as nul.
Bits 5: 4 - Res: Reserveare bits
Dizze bits binne reserveare bits yn 'e ATtiny25 / 45/85 en sille altyd as nul lêze.
Bit 3 - WGM02: Waveform Generation Mode
Sjoch de beskriuwing yn 'e “TCCR0A - Timer / Counter Control Register A” op side 77.
Bits 2: 0 - CS0 [2: 0]: Klok selektearje
De trije klok selektearje bits selektearje de klokboarne om te brûken troch de Timer / Teller.
Tabel 11-6. Klok Selektearje Bit Beskriuwing
CS02 | CS01 | CS00 | Beskriuwing |
0 | 0 | 0 | Gjin klokboarne (Timer / teller stoppe) |
0 | 0 | 1 | clkI/O/(Gjin foarskalearring) |
0 | 1 | 0 | clkI/O/8 (fan foarskaler) |
0 | 1 | 1 | clkI/O/64 (fan foarskaler) |
1 | 0 | 0 | clkI/O/256 (fan foarskaler) |
1 | 0 | 1 | clkI/O/1024 (fan foarskaler) |
1 | 1 | 0 | Eksterne klokboarne op T0-pin. Klok op fallende râne. |
1 | 1 | 1 | Eksterne klokboarne op T0-pin. Klok op opkommende râne. |
As eksterne pinmodi wurde brûkt foar de Timer / Counter0, sille oergongen op 'e T0-pin de teller klokje, sels as de pin is konfigureare as útfier. Dizze funksje makket software kontrôle fan it tellen.
Ienheden tellerje en fergelykje
De algemiene operaasje Timer / Counter1 wurdt beskreaun yn 'e asynchrone modus en de operaasje yn' e syngroanmodus wurdt allinich neamd as d'r ferskillen binne tusken dizze twa modi. figuer 12-2 lit sjen Timer / Counter 1 syngronisaasjeregister blokdiagram en syngronisaasje fertraging tusken registers. Tink derom dat alle details oer klokken net yn 'e figuer werjûn wurde. De Timer / Counter1-registerwearden geane troch de ynterne syngronisaasjeregisters, dy't de fertraging fan de ynfier-syngronisaasje feroarsaakje, foardat se ynfloed hawwe op de telleroperaasje. De registers TCCR1, GTCCR, OCR1A, OCR1B, en OCR1C kinne direkt weromlêzen wurde nei it skriuwen fan it register. De weromlêzen wearden wurde fertrage foar it Timer / Counter1 (TCNT1) register en flaggen (OCF1A, OCF1B, en TOV1), fanwegen de syngronisaasje fan 'e ynfier en útfier.
De Timer / Counter1 hat in hege resolúsje en in hege justysjegebrûk mei de legere prescaling-kânsen. It kin ek twa krekte, hege snelheid, 8-bit Pulse Width Modulators stypje mei kloksnelheden oant 64 MHz (of 32 MHz yn Low Speed Mode). Yn dizze modus tsjinje Timer / teller1 en de útfierferlykjende registers as dûbele stand-alone PWM's mei net-oerlaapjende net-omkearde en omkearde útgongen. Ferwize nei side 86 foar in detaillearre beskriuwing oer dizze funksje. Likegoed meitsje de kânsen foar hege prescaling dizze ienheid nuttich foar funksjes mei legere snelheid as krekte timingfunksjes mei seldsume aksjes.
figuer 12-2. Timer / Teller 1 Syngronisaasje Register Block Diagram.
Timer / teller1 en de prescaler kinne de CPU útfiere fan elke klokboarne, wylst de prescaler wurket op 'e rappe 64 MHz (of 32 MHz yn Low Speed Mode) PCK-klok yn' e asynchrone modus.
Tink derom dat de systeemklokfrekwinsje leger moat wêze dan ien tredde fan 'e PCK-frekwinsje. It syngronisaasjemeganisme fan 'e asynchrone Timer / Counter1 hat teminsten twa rânen fan' e PCK nedich as de systeemklok heech is. As de frekwinsje fan 'e systeemklok te heech is, is it in risiko dat gegevens of kontrôle wearden ferlern gean.
De folgjende figuer 12-3 lit it blokdiagram foar Timer / Counter1 sjen.
Tabel 12-1. Fergelykje Mode Selektearje yn PWM Mode
KOM1x1 | KOM1x0 | Effekt op útfier fergelykje pins |
0 | 0 | OC1x net ferbûn. OC1x net ferbûn. |
0 | 1 | OC1x wiske op fergelykjen fan wedstriid. Set wannear't TCNT1 = $ 00. OC1x ynsteld op fergelykjen fan wedstriid. Wist as TCNT1 = $ 00. |
1 | 0 | OC1x wiske op fergelykjen fan wedstriid. Set as TCNT1 = $ 00. OC1x net ferbûn. |
1 | 1 | OC1x Set op fergelykjen fan wedstriid. Wist as TCNT1 = $ 00. OC1x net ferbûn. |
ADC Skaaimerken
Tabel 21-8. ADC-skaaimerken, kanalen mei ien einige. TA = -40°C oant +85°C
Symboal | Parameter | Betingst | Min | Typ | Max | Units |
Resolúsje | 10 | Bits | ||||
Absolute krektens (Ynklusyf INL-, DNL- en kwantisearrings-, winst- en offsetfouten) | VREF = 4V, VCC = 4V,
ADC klok = 200 kHz |
2 | LSB | |||
VREF = 4V, VCC = 4V,
ADC klok = 1 MHz |
3 | LSB | ||||
VREF = 4V, VCC = 4V,
ADC klok = 200 kHz Ruisreduksjemodus |
1.5 | LSB | ||||
VREF = 4V, VCC = 4V,
ADC klok = 1 MHz Ruisreduksjemodus |
2.5 | LSB | ||||
Yntegraal net-linigens (INL) (Krektens nei kompensaasje en kalibraasje fan winst) | VREF = 4V, VCC = 4V,
ADC klok = 200 kHz |
1 | LSB | |||
Differinsjoneel net-linigens (DNL) | VREF = 4V, VCC = 4V,
ADC klok = 200 kHz |
0.5 | LSB | |||
Fout flater | VREF = 4V, VCC = 4V,
ADC klok = 200 kHz |
2.5 | LSB | |||
Offsetflater | VREF = 4V, VCC = 4V,
ADC klok = 200 kHz |
1.5 | LSB | |||
Konverzje Tiid | Fergees konversaasje rint | 14 | 280 | µs | ||
Klokfrekwinsje | 50 | 1000 | kHz | |||
VIN | Ynfier Voltage | GND | VREF | V | ||
Ynput bânbreedte | 38.4 | kHz | ||||
AREF | Eksterne referinsje Voltage | 2.0 | VCC | V | ||
VINT | Ynterne Voltage Referinsje | 1.0 | 1.1 | 1.2 | V | |
Ynterne 2.56V Referinsje (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | 32 | kΩ | ||||
REIN | Analoge ynputwjerstân | 100 | MΩ | |||
ADC Utfier | 0 | 1023 | LSB |
Opmerking: 1. Wearden binne allinich rjochtlinen.
Tabel 21-9. ADC-skaaimerken, differinsjaal kanalen (unipolêre modus). TA = -40°C oant +85°C
Symboal | Parameter | Betingst | Min | Typ | Max | Units |
Resolúsje | Winst = 1x | 10 | Bits | |||
Winst = 20x | 10 | Bits | ||||
Absolute krektens (Ynklusyf INL, DNL, en
Kwantisaasje-, winst- en offsetfouten) |
Winst = 1x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
10.0 | LSB | |||
Winst = 20x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
20.0 | LSB | ||||
Yntegraal net-linigens (INL) (Nauwkeurigens nei offset- en winstkalibraasje) | Winst = 1x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
4.0 | LSB | |||
Winst = 20x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
10.0 | LSB | ||||
Fout flater | Winst = 1x | 10.0 | LSB | |||
Winst = 20x | 15.0 | LSB | ||||
Offsetflater | Winst = 1x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
3.0 | LSB | |||
Winst = 20x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
4.0 | LSB | ||||
Konverzje Tiid | Fergees konversaasje rint | 70 | 280 | µs | ||
Klokfrekwinsje | 50 | 200 | kHz | |||
VIN | Ynfier Voltage | GND | VCC | V | ||
VDIFF | Input Differinsjaal Voltage | VREF / Winst | V | |||
Ynput bânbreedte | 4 | kHz | ||||
AREF | Eksterne referinsje Voltage | 2.0 | VCC - 1.0 | V | ||
VINT | Ynterne Voltage Referinsje | 1.0 | 1.1 | 1.2 | V | |
Ynterne 2.56V Referinsje (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | Referinsje Input Ferset | 32 | kΩ | |||
REIN | Analoge ynputwjerstân | 100 | MΩ | |||
ADC Konverzje Utfier | 0 | 1023 | LSB |
Opmerking: Wearden binne allinich rjochtlinen.
Tabel 21-10. ADC-skaaimerken, differinsjaal kanalen (bipolêre modus). TA = -40°C oant +85°C
Symboal | Parameter | Betingst | Min | Typ | Max | Units |
Resolúsje | Winst = 1x | 10 | Bits | |||
Winst = 20x | 10 | Bits | ||||
Absolute krektens (Ynklusyf INL, DNL, en
Kwantisaasje-, winst- en offsetfouten) |
Winst = 1x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
8.0 | LSB | |||
Winst = 20x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
8.0 | LSB | ||||
Yntegraal net-linigens (INL) (Nauwkeurigens nei offset- en winstkalibraasje) | Winst = 1x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
4.0 | LSB | |||
Winst = 20x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
5.0 | LSB | ||||
Fout flater | Winst = 1x | 4.0 | LSB | |||
Winst = 20x | 5.0 | LSB | ||||
Offsetflater | Winst = 1x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
3.0 | LSB | |||
Winst = 20x
VREF = 4V, VCC = 5V ADC klok = 50 - 200 kHz |
4.0 | LSB | ||||
Konverzje Tiid | Fergees konversaasje rint | 70 | 280 | µs | ||
Klokfrekwinsje | 50 | 200 | kHz | |||
VIN | Ynfier Voltage | GND | VCC | V | ||
VDIFF | Input Differinsjaal Voltage | VREF / Winst | V | |||
Ynput bânbreedte | 4 | kHz | ||||
AREF | Eksterne referinsje Voltage | 2.0 | VCC - 1.0 | V | ||
VINT | Ynterne Voltage Referinsje | 1.0 | 1.1 | 1.2 | V | |
Ynterne 2.56V Referinsje (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | Referinsje Input Ferset | 32 | kΩ | |||
REIN | Analoge ynputwjerstân | 100 | MΩ | |||
ADC Konverzje Utfier | -512 | 511 | LSB |
Ynstruksje Set Gearfetting
Mnemonics | Operanders | Beskriuwing | Operaasje | Flaggen | #Klokken |
ARITMETISKE EN LOGISKE YNSTRUKSJES | |||||
ADD | Rd, Rr | Twa registers tafoegje | Rd ← Rd + Rr | Z, C, N, V, H | 1 |
ADC | Rd, Rr | Tafoegje mei Carry twa registers | Rd ← Rd + Rr + C | Z, C, N, V, H | 1 |
ADIW | Rdl, K | Foegje fuortendaliks ta oan Word | Rdh:Rdl ← Rdh:Rdl + K | Z, C, N, V, S | 2 |
SUB | Rd, Rr | Lûk twa registers ôf | Rd ← Rd – Rr | Z, C, N, V, H | 1 |
IK GIET OP | Rd, K. | Lûk Constant ôf fan Register | Rd ← Rd – K | Z, C, N, V, H | 1 |
SBC | Rd, Rr | Lûk ôf mei twa registers | Rd ← Rd – Rr – C | Z, C, N, V, H | 1 |
SBCI | Rd, K. | Lûke mei Carry Constant fan Reg. | Rd ← Rd – K – C | Z, C, N, V, H | 1 |
SBIW | Rdl, K | Lûk fuortendaliks fan Word ôf | Rdh:Rdl ← Rdh:Rdl – K | Z, C, N, V, S | 2 |
EN | Rd, Rr | Logyske EN registers | Rd ← Rd ∙ Rr | Z, N, V. | 1 |
ANDI | Rd, K. | Logysk EN Registrearje en konstant | Rd ← Rd ∙ K | Z, N, V. | 1 |
OR | Rd, Rr | Logyske OR registers | Rd ← Rd v Rr | Z, N, V. | 1 |
ORI | Rd, K. | Logysk OF Registrearje en konstant | Rd ← Rd v K | Z, N, V. | 1 |
EOR | Rd, Rr | Eksklusyf OR registers | Rd ← Rd ⊕ Rr | Z, N, V. | 1 |
COM | Rd | Ien fan oanfolling | Rd ← 0xFF − Rd | Z, C, N, V. | 1 |
NEG | Rd | Twa's komplement | Rd ← 0x00 − Rd | Z, C, N, V, H | 1 |
SBR | Rd, K | Set bit (en) yn registrearje | Rd ← Rd v K | Z, N, V. | 1 |
CBR | Rd, K | Clear Bit (s) yn Register | Rd ← Rd ∙ (0xFF – K) | Z, N, V. | 1 |
INC | Rd | Ferheging | Rd ← Rd + 1 | Z, N, V. | 1 |
DEC | Rd | Ferklearring | Rd ← Rd − 1 | Z, N, V. | 1 |
TST | Rd | Test foar nul as minus | Rd ← Rd ∙ Rd | Z, N, V. | 1 |
CLR | Rd | Register wiskje | Rd ← Rd ⊕ Rd | Z, N, V. | 1 |
SER | Rd | Registrearje ynstelle | Rd ← 0xFF | Gjin | 1 |
TAKYNSTRUKSJES | |||||
RJMP | k | Relative sprong | PC ← PC + k + 1 | Gjin | 2 |
IJMP | Yndirekte Gean nei (Z) | PC ← Z | Gjin | 2 | |
RCALL | k | Relative subroutine-oprop | PC ← PC + k + 1 | Gjin | 3 |
ICALL | Yndirekte oprop nei (Z) | PC ← Z | Gjin | 3 | |
RET | Subroutine Return | PC ← STACK | Gjin | 4 | |
RETI | Underbrekke Return | PC ← STACK | I | 4 | |
CPSE | Rd, Rr | Fergelykje, oerslaan as gelyk | as (Rd = Rr) PC ← PC + 2 of 3 | Gjin | 1/2/3 |
CP | Rd, Rr | Ferlykje | Rd - Rr | Z, N, V, C, H | 1 |
CPC | Rd, Rr | Fergelykje mei Carry | Rd - Rr - C | Z, N, V, C, H | 1 |
CPI | Rd, K | Fergelykje registrearje mei fuortendaliks | Rd - K | Z, N, V, C, H | 1 |
SBRC | rr, b | Oerslaan as bit yn register wiske | as (Rr(b)=0) PC ← PC + 2 of 3 | Gjin | 1/2/3 |
SBRS | rr, b | Oerslaan as bit yn register is ynsteld | as (Rr(b)=1) PC ← PC + 2 of 3 | Gjin | 1/2/3 |
SBIC | P, b | Oerslaan as bit yn I / O-register wiske | as (P(b)=0) PC ← PC + 2 of 3 | Gjin | 1/2/3 |
SBIS | P, b | Oerslaan as bit yn I / O-register is ynsteld | as (P(b)=1) PC ← PC + 2 of 3 | Gjin | 1/2/3 |
BRBS | s, k | Tûke as Status Flagge ynsteld | as (SREG(s) = 1) dan PC←PC+k + 1 | Gjin | 1/2 |
BRBC | s, k | Tak as statusflagge wiske | as (SREG(s) = 0) dan PC←PC+k + 1 | Gjin | 1/2 |
BREQ | k | Branch as Equal | as (Z = 1) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRNE | k | Branch as Net gelyk | as (Z = 0) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRCS | k | Tûke as Carry Set | as (C = 1) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRCC | k | Tûke as Carry Cleared | as (C = 0) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRSH | k | Tak as itselde as heger | as (C = 0) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRLO | k | Tak as leger | as (C = 1) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRMI | k | Tak as Minus | as (N = 1) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRPL | k | Tak as Plus | as (N = 0) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRGE | k | Tak as grutter as gelyk, ûndertekene | as (N ⊕ V= 0) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRLT | k | Tak as minder dan nul, Undertekene | as (N ⊕ V= 1) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRHS | k | Tûke as Half Carry Flag Set | as (H = 1) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRHC | k | Tûke as Half Carry Flag wiske | as (H = 0) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRTS | k | Tûke as T Flagge set | as (T = 1) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRTC | k | Tûke as T Flagge wiske | as (T = 0) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRVS | k | Tûke as Overflow Flag is ynsteld | as (V = 1) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRVC | k | Tûke as oerstreamingsflagge wiske is | as (V = 0) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRIE | k | Tûke as ûnderbrekke ynskeakele | as (I = 1) dan PC ← PC + k + 1 | Gjin | 1/2 |
BRID | k | Tûke as ûnderbrekken útskeakele is | as (I = 0) dan PC ← PC + k + 1 | Gjin | 1/2 |
BIT EN BIT-TEST ynstruksjes | |||||
SBI | P, b | Bit ynstelle yn I / O-register | I/O(P,b) ← 1 | Gjin | 2 |
CBI | P, b | Bit wiskje yn I / O-register | I/O(P,b) ← 0 | Gjin | 2 |
LSL | Rd | Logyske ferskowing lofts | Rd(n+1) ← Rd(n), Rd(0) ← 0 | Z, C, N, V. | 1 |
LSR | Rd | Logyske Shift Rjochts | Rd(n) ← Rd(n+1), Rd(7) ← 0 | Z, C, N, V. | 1 |
ROL | Rd | Lofts troch draaie draaie | Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) | Z, C, N, V. | 1 |
ROR | Rd | Rjochts troch draaie | Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) | Z, C, N, V. | 1 |
ASR | Rd | Rekenkundige ferskowing rjochts | Rd(n) ← Rd(n+1), n=0..6 | Z, C, N, V. | 1 |
Mnemonics | Operanders | Beskriuwing | Operaasje | Flaggen | #Klokken |
SWAP | Rd | Ruilje Nibbles | Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) | Gjin | 1 |
BSET | s | Flagge set | SREG(s) ← 1 | SREG (s) | 1 |
BCLR | s | Flagge dúdlik | SREG(s) ← 0 | SREG (s) | 1 |
BST | rr, b | Bitwinkel fan registrearje nei T | T ← Rr(b) | T | 1 |
BLD | Rd, b | Bitlading fan T nei Register | Rd(b) ← T | Gjin | 1 |
SEC | Set Carry yn | C ← 1 | C | 1 | |
CLC | Clear Carry | C ← 0 | C | 1 | |
SEN | Stel negative flagge yn | N ← 1 | N | 1 | |
CLN | Wiskje negative flagge | N ← 0 | N | 1 | |
SEZ | Stel nul flagge yn | Z ← 1 | Z | 1 | |
CLZ | Nul flagge wiskje | Z ← 0 | Z | 1 | |
SEI | Global Interrupt ynskeakelje | ik ← 1 | I | 1 | |
CLI | Global Interrupt Utskeakelje | ik ← 0 | I | 1 | |
SES | Stel ûndertekene testflagge yn | S ← 1 | S | 1 | |
CLS | Wiskje ûndertekene testflagge | S ← 0 | S | 1 | |
SEV | Twos oanfoljende oerstreaming ynstelle. | V ← 1 | V | 1 | |
CLV | Wiskje Twos Oanfoljende oerstreaming | V ← 0 | V | 1 | |
SET | Set T yn SREG | T ← 1 | T | 1 | |
CLT | Wiskje T yn SREG | T ← 0 | T | 1 | |
SEH | Set Half Carry Flag yn SREG | H ← 1 | H | 1 | |
CLH | Wiskje Half Carry Flag yn SREG | H ← 0 | H | 1 | |
YNSTRUKSJES FAN DATA OVERFERDING | |||||
MOV | Rd, Rr | Ferhuze tusken registers | Rd ← Rr | Gjin | 1 |
MOVW | Rd, Rr | Registrearje wurd kopiearje | Rd+1:Rd ← Rr+1:Rr | Gjin | 1 |
LDI | Rd, K. | Laad direkt | Rd ← K | Gjin | 1 |
LD | Rd, X | Yndirekt lade | Rd ← (X) | Gjin | 2 |
LD | Rd, X + | Laad yndirekt en Post-Inc. | Rd ← (X), X ← X + 1 | Gjin | 2 |
LD | Rd, - X | Yndirekt lade en foar des. | X ← X – 1, Rd ← (X) | Gjin | 2 |
LD | Rde, Y | Yndirekt lade | Rd ← (Y) | Gjin | 2 |
LD | Rd, Y + | Laad yndirekt en Post-Inc. | Rd ← (Y), Y ← Y + 1 | Gjin | 2 |
LD | Rd, - Y | Yndirekt lade en foar des. | Y ← Y – 1, Rd ← (Y) | Gjin | 2 |
LDD | Rd, Y + q | Laad yndirekt mei ferpleatsing | Rd ← (Y + q) | Gjin | 2 |
LD | Rd, Z | Yndirekt lade | Rd ← (Z) | Gjin | 2 |
LD | Rd, Z + | Laad yndirekt en Post-Inc. | Rd ← (Z), Z ← Z+1 | Gjin | 2 |
LD | Rd, -Z | Yndirekt lade en foar des. | Z ← Z – 1, Rd ← (Z) | Gjin | 2 |
LDD | Rd, Z + q | Laad yndirekt mei ferpleatsing | Rd ← (Z + q) | Gjin | 2 |
LDS | Rd, k | Laad direkt fan SRAM | Rd ← (k) | Gjin | 2 |
ST | X, RJ | Indirekte winkel | (X) ← Rr | Gjin | 2 |
ST | X +, Rr | Indirekte winkel en post-inc. | (X) ← Rr, X ← X + 1 | Gjin | 2 |
ST | - X, Rr | Bewarje yndirekt en foarôfgeand oan des. | X ← X – 1, (X) ← Rr | Gjin | 2 |
ST | Jo, Rr | Indirekte winkel | (Y) ← Rr | Gjin | 2 |
ST | Y +, Rr | Indirekte winkel en post-inc. | (Y) ← Rr, Y ← Y + 1 | Gjin | 2 |
ST | - Y, Rr | Bewarje yndirekt en foarôfgeand oan des. | Y ← Y – 1, (Y) ← Rr | Gjin | 2 |
STD | Y + q, Rr | Bewarje yndirekt mei ferpleatsing | (Y + q) ← Rr | Gjin | 2 |
ST | Z, RJ | Indirekte winkel | (Z) ← Rr | Gjin | 2 |
ST | Z +, Rr | Indirekte winkel en post-inc. | (Z) ← Rr, Z ← Z + 1 | Gjin | 2 |
ST | -Z, RJ | Bewarje yndirekt en foarôfgeand oan des. | Z ← Z – 1, (Z) ← Rr | Gjin | 2 |
STD | Z + q, Rr | Bewarje yndirekt mei ferpleatsing | (Z + q) ← Rr | Gjin | 2 |
STS | k, rju | Bewarje direkt nei SRAM | (k) ← Rr | Gjin | 2 |
LPM | Laad programma ûnthâld | R0 ← (Z) | Gjin | 3 | |
LPM | Rd, Z | Laad programma ûnthâld | Rd ← (Z) | Gjin | 3 |
LPM | Rd, Z + | Laad programma-ûnthâld en Post-Inc | Rd ← (Z), Z ← Z+1 | Gjin | 3 |
SPM | Bewarje programma ûnthâld | (z) ← R1:R0 | Gjin | ||
IN | Rd, P. | Yn haven | Rd ← P | Gjin | 1 |
ÚT | P, RJ | Ut haven | P ← Rr | Gjin | 1 |
TRIUWE | Rr | Push registrearje op stapel | STACK ← Rr | Gjin | 2 |
POP | Rd | Popregister fan stapel | Rd ← STACK | Gjin | 2 |
MCU CONTROL YNSTRUKSJES | |||||
NOP | Gjin operaasje | Gjin | 1 | ||
SLIEP | Sliep | (sjoch spesifike beskriuwing foar sliepfunksje) | Gjin | 1 | |
WDR | Resolúsje fan watchdog | (sjoch spesifike beskriuwing foar WDR / timer) | Gjin | 1 | |
BREKKE | Brekke |
Faasje (MHz) (1) | Supply Voltage (V) | Temperatuerberik | Pakket (2) | Bestelkoade (3) |
10 | 1.8 – 5.5 | Yndustrieel
(-40 ° C oant + 85 ° C) (4) |
8P3 | ATtiny45V-10PU |
8S2 | ATtiny45V-10SU ATtiny45V-10SUR ATtiny45V-10SH ATtiny45V-10SHR | |||
8X | ATtiny45V-10XU ATtiny45V-10XUR | |||
20M1 | ATtiny45V-10MU ATtiny45V-10MUR | |||
20 | 2.7 – 5.5 | Yndustrieel
(-40 ° C oant + 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 |
Notysjes: 1. Foar snelheid tsjin oanbod voltage, sjo seksje 21.3 "Faasje" op side 163.
Alle pakketten binne Pb-frij, halide-frij en folslein grien en se foldogge oan de Jeropeeske rjochtline foar beheining fan gefaarlike stoffen (RoHS).
Koade yndikatoaren
H: NiPdAu lead finish
U: mat tin
R: tape & reel
Dizze apparaten kinne ek wurde levere yn waferfoarm. Nim dan kontakt op mei jo lokale Atmel-ferkeapkantoar foar detaillearre bestellingsynformaasje en minimale hoemannichten.
Erratum
Errata ATtiny25
De revisjebrief yn dizze paragraaf ferwiist nei de revyzje fan it ATtiny25-apparaat.
Rev D - F
Gjin bekende errata.
Rev B - C.
EEPROM lêzen kin mislearje by lege oanbod voltage / lege klokfrekwinsje
EEPROM lêzen kin mislearje by lege oanbod voltage / lege klokfrekwinsje
Besykje EEPROM te lêzen op lege klokfrekwinsjes en/as lege oanbod voltage kin resultearje yn ûnjildige gegevens.
Probleem Fix / oplossing
Brûk de EEPROM net as de klokfrekwinsje ûnder 1MHz is en oanbod voltage is ûnder 2V. As bestjoeringsfrekwinsje net boppe 1MHz kin wurde ferhege, leverje dan foltage moat mear dan 2V wêze. Lykwols, as oanbod voltage kin net boppe 2V wurde ferhege, dan moat de bestjoeringsfrekwinsje mear dan 1MHz wêze.
Bekend is dat dizze funksje temperatuerôfhinklik is, mar it is net karakterisearre. Rjochtlinen wurde allinich jûn foar keamertemperatuer.
Rev A
Net sampliede.
Errata ATtiny45
De revisjebrief yn dizze paragraaf ferwiist nei de revyzje fan it ATtiny45-apparaat.
Rev F - G
Gjin bekende errata
Rev D - E
EEPROM lêzen kin mislearje by lege oanbod voltage / lege klokfrekwinsje
EEPROM lêzen kin mislearje by lege oanbod voltage / lege klokfrekwinsje
Besykje EEPROM te lêzen op lege klokfrekwinsjes en/as lege oanbod voltage kin resultearje yn ûnjildige gegevens.
Probleem Fix / oplossing
Brûk de EEPROM net as de klokfrekwinsje ûnder 1MHz is en oanbod voltage is ûnder 2V. As bestjoeringsfrekwinsje net boppe 1MHz kin wurde ferhege, leverje dan foltage moat mear dan 2V wêze. Lykwols, as oanbod voltage kin net boppe 2V wurde ferhege, dan moat de bestjoeringsfrekwinsje mear dan 1MHz wêze.
Bekend is dat dizze funksje temperatuerôfhinklik is, mar it is net karakterisearre. Rjochtlinen wurde allinich jûn foar keamertemperatuer.
Rev B - C.
PLL net op slot
EEPROM lêzen fan tapassingskoade wurket net yn Lock Bit Mode 3
EEPROM lêzen kin mislearje by lege oanbod voltage / lege klokfrekwinsje
Timerteller 1 PWM-útfiergeneraasje op OC1B- XOC1B wurket net goed
PLL net op slot
As op frekwinsjes ûnder 6.0 MHz, sil de PLL net beskoattelje
Probleemoplossing / oplossing
As jo de PLL brûke, rinne op 6.0 MHz of heger.
EEPROM lêzen fan tapassingskoade wurket net yn Lock Bit Mode 3
As de Memory Lock Bits LB2 en LB1 binne programmeare yn modus 3, wurket EEPROM lêzen net fanút de tapassingskoade.
Probleem Fix / Wurkje om
Stel Lock Mode Protection Mode 3 net yn as de tapassingskoade fan EEPROM lêze moat.
EEPROM lêzen kin mislearje by lege oanbod voltage / lege klokfrekwinsje
Besykje EEPROM te lêzen op lege klokfrekwinsjes en/as lege oanbod voltage kin resultearje yn ûnjildige gegevens.
Probleem Fix / oplossing
Brûk de EEPROM net as de klokfrekwinsje ûnder 1MHz is en oanbod voltage is ûnder 2V. As bestjoeringsfrekwinsje net boppe 1MHz kin wurde ferhege, leverje dan foltage moat mear dan 2V wêze. Lykwols, as oanbod voltage kin net boppe 2V wurde ferhege, dan moat de bestjoeringsfrekwinsje mear dan 1MHz wêze.
Bekend is dat dizze funksje temperatuerôfhinklik is, mar it is net karakterisearre. Rjochtlinen wurde allinich jûn foar keamertemperatuer.
Timerteller 1 PWM-útfiergeneraasje op OC1B - XOC1B wurket net goed
Timerteller1 PWM-útfier OC1B-XOC1B wurket net goed. Allinich yn 't gefal as de kontrôlebits, COM1B1 en COM1B0 yn deselde modus binne as respektivelik COM1A1 en COM1A0, wurket de útfiering OC1B-XOC1B goed.
Probleem Fix / Wurkje om
De ienige oplossing is om deselde kontrôle-ynstelling te brûken op COM1A [1: 0] en COM1B [1: 0] bestjoeringsbits, sjoch tabel 14- 4 yn it gegevensblêd. It probleem is oplost foar Tiny45 rev D.
Rev A
Te heech enerzjyferbrûk fan macht
DebugWIRE ferliest kommunikaasje as ien stap yn interrupts
PLL net op slot
EEPROM lêzen fan tapassingskoade wurket net yn Lock Bit Mode 3
EEPROM lêzen kin mislearje by lege oanbod voltage / lege klokfrekwinsje
Te heech enerzjyferbrûk fan macht
Trije situaasjes sille liede ta in te hege stroomûnderbrekking. Dit binne:
In eksterne klok wurdt selekteare troch fuses, mar de I / O PORT is noch ynskeakele as útfier.
De EEPROM wurdt lêzen foardat it ynskeakeljen wurdt.
VCC is 4.5 volt of heger.
Disclaimer: De ynformaasje yn dit dokumint wurdt levere yn ferbân mei Atmel produkten. Gjin lisinsje, útdruklik of ymplisearre, troch estoppel of oars, oan in yntellektueel eigendomsrjocht wurdt ferliend troch dit dokumint of yn ferbân mei de ferkeap fan Atmel-produkten. UITSONDER SYN YN DE ATMEL-BEDINGINGEN EN BEDINGINGEN FAN DE FERKESJES LÊS OP DE ATMEL. WEBSITE, ATMEL NEEMT GEEN AANSPRAKELIJKHEID AAN EN DISCLAIMS ELKE EXPRESSE, YMPLIYTE OF STATUTORY GARANTY AT SY PRODUCTEN INKLUDERER, MAAR NET BEPERKTE TOT, DE YMPLIYTE GARANTIE FAN FERHANDELBAARHEID FOAR PARTICULERING FOAR PARTICULERING FOAR PARTICULERING. YN GEEN GEVAL SIL ATMEL AANSPRAKELIJK Wêze FOAR ELKE DIREKTE, YNDIREKT, GEVOLGLIKE, STRAFFENDE, SPESIALE OF ynsidintele skea (Ynklusyf, SONDER BEPERKING, SKADE FOAR FERLIES EN WINST, BUSINESS ONDERBREKING, OF YNFORMAASJE FAN GEBRUK FAN GEBRUK) DIT DOKUMENT, SELFS AS ATMEL RAAD GIET IS FAN DE MOOGLIKHEID FAN SOKE SKADES.
Atmel makket gjin foarstellingen of garânsjes oangeande de krektens of folsleinens fan 'e ynhâld fan dit dokumint en behâldt it rjocht foar om op elk momint wizigingen te meitsjen oan spesifikaasjes en produktbeskriuwingen sûnder notice. Atmel makket gjin tasizzing om de ynformaasje hjiryn te aktualisearjen. Behalven as spesifyk oars bepaald, binne Atmel-produkten net geskikt foar, en sille net brûkt wurde yn, automotive-applikaasjes. Atmel-produkten binne net bedoeld, autorisearre of garandearre foar gebrûk as komponinten yn applikaasjes dy't bedoeld binne om it libben te stypjen of te ûnderhâlden.