Atmel 8-bitars AVR-mikrokontroller med 2/4/8K bytes programmerbar blixt i systemet
Drag
- Högpresterande, lågeffekt AVR® 8-bitars mikrokontroller
- Avancerad RISC-arkitektur
- 120 Kraftfulla instruktioner – De flesta enkla klockcykler
- 32 x 8 arbetsregister för allmänna ändamål
- Helt statisk drift
- Icke-flyktiga program och dataminnen
- 2/4/8K byte av programmerbart programminne i systemet
- Uthållighet: 10,000 XNUMX skriv-/raderingscykler
- 128/256/512 byte programmerbar EEPROM i systemet
- Uthållighet: 100,000 XNUMX skriv-/raderingscykler
- 128/256/512 byte internt SRAM
- Programmeringslås för självprogrammerande Flash-program och EEPROM Data Security
Perifera funktioner
- 8-bitars timer/räknare med Prescaler och två PWM-kanaler
- 8-bitars höghastighetstimer/räknare med separat förskalare
- 2 högfrekventa PWM-utgångar med separata utgångsjämförelseregister
- Programmerbar dödtidsgenerator
- USI – Universal Serial Interface with Start Condition Detector
- 10-bitars ADC
4 enstaka kanaler
2 differentiella ADC-kanalpar med programmerbar förstärkning (1x, 20x)
Temperaturmätning
Programmerbar Watchdog Timer med Separat On-chip Oscillator
Analog komparator på chip
Speciella mikrokontrollerfunktioner
debugWIRE Felsökningssystem på chip
Programmerbar i systemet via SPI-port
Externa och interna avbrottskällor
Lågströmstomgång, ADC-brusreducering och avstängningslägen
Förbättrad återställningskrets vid start
Programmerbar Brown-out-detektionskrets
Intern kalibrerad oscillator
I/O och paket
Sex programmerbara I/O-linjer
8-stifts PDIP, 8-stifts SOIC, 20-polig QFN/MLF och 8-stifts TSSOP (endast ATtiny45/V)
Operation Voltage
– 1.8 – 5.5V för ATtiny25V/45V/85V
– 2.7 – 5.5V för ATtiny25/45/85
Hastighetsgrad
– 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
Industriellt temperaturområde
Låg strömförbrukning
Aktivt läge:
1 MHz, 1.8 V: 300 µA
Avstängningsläge:
Fästkonfigurationer
Pinout ATtiny25/45/85
Pin Beskrivningar
VCC: Supply voltage.
GND: Mark.
Port B (PB5:PB0): Port B är en 6-bitars dubbelriktad I/O-port med interna pull-up resistorer (valda för varje bit). Port B-utgångsbuffertarna har symmetriska drivegenskaper med både hög sänk- och källkapacitet. Som ingångar kommer port B-stift som externt dras lågt att ge ström om pull-up-motstånden är aktiverade. Port B-stiften är tri-staterade när ett återställningstillstånd blir aktivt, även om klockan inte går.
Port B betjänar också funktionerna för olika specialfunktioner hos ATtiny25/45/85 enligt listan
På ATtiny25 byts de programmerbara I/O-portarna PB3 och PB4 (stift 2 och 3) ut i ATtiny15-kompatibilitetsläge för att stödja bakåtkompatibiliteten med ATtiny15.
RESET: Återställ ingång. En låg nivå på detta stift under längre tid än den minsta pulslängden kommer att generera en återställning, även om klockan inte går och förutsatt att återställningsstiftet inte har avaktiverats. Minsta pulslängd anges Tabell 21-4 på sidan 165. Kortare pulser är inte garanterade att generera en återställning.
Återställningsstiftet kan även användas som ett (svagt) I/O-stift.
Överview
ATtiny25/45/85 är en lågeffekts CMOS 8-bitars mikrokontroller baserad på AVR-förbättrade RISC-arkitektur. Genom att exekvera kraftfulla instruktioner i en enda klockcykel, uppnår ATtiny25/45/85 en genomströmning som närmar sig 1 MIPS per MHz, vilket gör att systemdesignern kan optimera strömförbrukning kontra bearbetningshastighet.
Blockdiagram
AVR-kärnan kombinerar en rik instruktionsuppsättning med 32 arbetsregister för allmänna ändamål. Alla 32 register är direkt anslutna till den aritmetiska logiska enheten (ALU), vilket gör att två oberoende register kan nås i en enda instruktion som exekveras i en klockcykel. Den resulterande arkitekturen är mer kodeffektiv samtidigt som den uppnår genomströmningar upp till tio gånger snabbare än konventionella CISC-mikrokontroller.
ATtiny25/45/85 har följande funktioner: 2/4/8K byte av programmerbar flash i systemet, 128/256/512 byte EEPROM, 128/256/256 byte SRAM, 6 allmänna I/O-linjer, 32 allmänna funktionsregister, en 8-bitars timer/räknare med jämförelselägen, en 8-bitars höghastighetstimer/räknare, universellt seriellt gränssnitt, interna och externa avbrott, en 4-kanals, 10-bitars ADC, en programmerbar Watchdog-timer med intern Oscillator och tre mjukvaruvalbara energisparlägen. Inaktivt läge stoppar CPU:n samtidigt som SRAM, Timer/Counter, ADC, Analog Comparator och Interrupt-systemet kan fortsätta att fungera. Avstängningsläge sparar registerinnehållet och inaktiverar alla chipfunktioner tills nästa avbrott eller hårdvaruåterställning. ADC-brusreduceringsläget stoppar CPU:n och alla I/O-moduler utom ADC, för att minimera omkopplingsbrus under ADC-konverteringar.
Enheten är tillverkad med Atmels icke-flyktiga minnesteknologi med hög densitet. On-chip ISP Flash gör att programminnet kan omprogrammeras i systemet via ett SPI seriellt gränssnitt, av en konventionell icke-flyktigt minnesprogrammerare eller av en On-chip startkod som körs på AVR-kärnan.
ATtiny25/45/85 AVR stöds med en komplett uppsättning program- och systemutvecklingsverktyg inklusive: C-kompilatorer, makrosammansättare, programfelsökning/simulatorer och utvärderingskit.
Om resurser
En omfattande uppsättning utvecklingsverktyg, programanteckningar och datablad finns tillgängliga för nedladdning på http://www.atmel.com/avr.
Kod Examples
Denna dokumentation innehåller enkel kod exampfiler som kort visar hur man använder olika delar av enheten. Dessa koder examples antar att den delspecifika rubriken file ingår före sammanställning. Var medveten om att inte alla C-kompilatorleverantörer inkluderar bitdefinitioner i rubriken files och avbrottshantering i C är kompilatorberoende. Vänligen bekräfta med C-kompilatordokumentationen för mer information.
För I/O-register som finns i den utökade I/O-kartan måste instruktionerna "IN", "OUT", "SBIS", "SBIC", "CBI" och "SBI" ersättas med instruktioner som tillåter åtkomst till utökat I /O. Vanligtvis betyder detta "LDS" och "STS" i kombination med "SBRS", "SBRC", "SBR" och "CBR". Observera att inte alla AVR-enheter har en utökad I/O-karta.
Kapacitiv beröringsavkänning
Atmel QTouch Library tillhandahåller en enkel att använda lösning för beröringskänsliga gränssnitt på Atmel AVR mikrokontroller. QTouch Library innehåller stöd för QTouch® och QMatrix® förvärvsmetoder.
Touch sensing läggs enkelt till i alla applikationer genom att länka QTouch Library och använda bibliotekets applikationsprogrammeringsgränssnitt (API) för att definiera pekkanaler och sensorer. Applikationen anropar sedan API för att hämta kanalinformation och bestämma peksensorns tillstånd.
QTouch Library är gratis och kan laddas ner från Atmel webwebbplats. För mer information och detaljer om implementering, se QTouch Library User Guide – även tillgänglig från Atmel webplats.
Datalagring
Tillförlitlighetskvalificeringsresultat visar att den beräknade datalagringsfelfrekvensen är mycket mindre än 1 PPM under 20 år vid 85°C eller 100 år vid 25°C.
AVR CPU-kärna
Introduktion
Det här avsnittet diskuterar AVR-kärnarkitekturen i allmänhet. Huvudfunktionen hos CPU-kärnan är att säkerställa korrekt programexekvering. CPU:n måste därför kunna komma åt minnen, utföra beräkningar, styra kringutrustning och hantera avbrott.
Arkitektonisk överview
För att maximera prestanda och parallellitet använder AVR en Harvard-arkitektur – med separata minnen och bussar för program och data. Instruktioner i programminnet exekveras med en pipelining på en nivå. Medan en instruktion exekveras, hämtas nästa instruktion från programminnet. Detta koncept gör det möjligt att utföra instruktioner i varje klockcykel. Programminnet är ett omprogrammerbart flashminne i systemet.
Snabbåtkomstregistret File innehåller 32 x 8-bitars arbetsregister för allmänna ändamål med en åtkomsttid för en enda klockcykel. Detta tillåter en-cykels Arithmetic Logic Unit (ALU) drift. I en typisk ALU-operation matas två operander ut från registret File, operationen utförs och resultatet lagras tillbaka i registret File– i en klockcykel.
Sex av de 32 registren kan användas som tre 16-bitars indirekta adressregisterpekare för datautrymmesadressering – vilket möjliggör effektiva adressberäkningar. En av dessa adresspekare kan också användas som adresspekare för att slå upp tabeller i Flash Program-minne. Dessa tillagda funktionsregister är 16-bitars X-, Y- och Z-registret, som beskrivs senare i detta avsnitt.
ALU stöder aritmetiska och logiska operationer mellan register eller mellan en konstant och ett register. Enkelregisteroperationer kan också utföras i ALU. Efter en aritmetisk operation uppdateras statusregistret för att återspegla information om resultatet av operationen.
Programflödet tillhandahålls av villkorliga och ovillkorliga hopp- och anropsinstruktioner, som direkt kan adressera hela adressutrymmet. De flesta AVR-instruktioner har ett enda 16-bitars ordformat, men det finns också 32-bitars instruktioner.
Under avbrott och subrutinsamtal lagras returadressen Programräknare (PC) i stacken. Stacken allokeras effektivt i det allmänna data-SRAM:et, och följaktligen begränsas stapelstorleken endast av den totala SRAM-storleken och användningen av SRAM. Alla användarprogram måste initialisera SP i återställningsrutinen (innan underrutiner eller avbrott exekveras). Stack Pointer (SP) är läs-/skrivåtkomlig i I/O-utrymmet. Data SRAM kan lätt nås genom de fem olika adresseringslägen som stöds i AVR-arkitekturen.
Minnesutrymmena i AVR-arkitekturen är alla linjära och vanliga minneskartor.
En flexibel avbrottsmodul har sina kontrollregister i I/O-utrymmet med en extra Global Interrupt Enable-bit i statusregistret. Alla avbrott har en separat Interrupt Vector i tabellen Interrupt Vector. Avbrotten har prioritet i enlighet med deras avbrottsvektorposition. Ju lägre Interrupt Vector-adress, desto högre prioritet.
I/O-minnesutrymmet innehåller 64 adresser för CPU-perifera funktioner som kontrollregister, SPI och andra I/O-funktioner. I/O-minnet kan nås direkt, eller som datautrymmesplatser som följer registrets File, 0x20 – 0x5F.
ALU – Arithmetic Logic Unit
Den högpresterande AVR ALU fungerar i direkt anslutning till alla de 32 allmänna arbetsregistren. Inom en enda klockcykel exekveras aritmetiska operationer mellan register för allmänna ändamål eller mellan ett register och en omedelbar. ALU-operationerna är indelade i tre huvudkategorier – aritmetiska, logiska och bitfunktioner. Vissa implementeringar av arkitekturen ger också en kraftfull multiplikator som stöder både signerad/osignerad multiplikation och bråkformat. Se avsnittet "Instruktionsuppsättning" för en detaljerad beskrivning.
Statusregister
Statusregistret innehåller information om resultatet av den senast utförda räkneinstruktionen. Denna information kan användas för att ändra programflödet för att utföra villkorade operationer. Observera att statusregistret uppdateras efter alla ALU-operationer, som specificerats i instruktionsuppsättningsreferensen. Detta kommer i många fall att ta bort behovet av att använda de dedikerade jämförelseinstruktionerna, vilket resulterar i snabbare och mer kompakt kod.
Statusregistret lagras inte automatiskt när man går in i en avbrottsrutin och återställs när man återvänder från ett avbrott. Detta måste hanteras av mjukvara.
SREG – AVR Status Register
AVR Status Register – SREG – definieras som:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3F | I | T | H | S | V | N | Z | C | SREG |
Läs/skriv | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 – I: Global Interrupt Enable
Biten Global Interrupt Enable måste ställas in för att avbrotten ska aktiveras. Den individuella avbrottsaktiveringsstyrningen utförs sedan i separata styrregister. Om det globala registret för aktivering av avbrott rensas, aktiveras inget av avbrotten oberoende av de individuella avbrottsaktiveringsinställningarna. I-biten rensas av hårdvara efter att ett avbrott har inträffat, och sätts av RETI-instruktionen för att möjliggöra efterföljande avbrott. I-biten kan också ställas in och nollställas av applikationen med SEI- och CLI-instruktionerna, som beskrivs i instruktionsuppsättningsreferensen.
Bit 6 – T: Bit Copy Storage
Bitkopieringsinstruktionerna BLD (Bit LoaD) och BST (Bit STore) använder T-biten som källa eller destination för den opererade biten. Lite från ett register i Registret File kan kopieras till T med BST-instruktionen, och en bit i T kan kopieras till en bit i ett register i registret File enligt BLD-instruktionen.
Bit 5 – H: Half Carry Flag
Half Carry Flag H indikerar en Half Carry i vissa aritmetiska operationer. Half Carry är användbart i BCD-aritmetik. Se "Beskrivning av instruktionsuppsättningen" för detaljerad information.
Bit 4 – S: Teckenbit, S = N ⊕ V
S-biten är alltid en exklusiv eller mellan den negativa flaggan N och de tvås komplementöverflödesflagga V. Se "Beskrivning av instruktionsuppsättningen" för detaljerad information.
Bit 3 – V: Two's Complement Overflow Flag
Two's Complement Overflow Flag V stöder tvås komplementarithmetik. Se "Beskrivning av instruktionsuppsättningen" för detaljerad information.
Bit 2 – N: Negativ flagga
Den negativa flaggan N indikerar ett negativt resultat i en aritmetisk eller logisk operation. Se "Beskrivning av instruktionsuppsättningen" för detaljerad information.
Bit 1 – Z: Nollflagga
Nollflaggan Z indikerar ett nollresultat i en aritmetisk eller logisk operation. Se "Beskrivning av instruktionsuppsättningen" för detaljerad information.
Bit 0 – C: Bär flagga
Bärflaggan C indikerar en bärare i en aritmetisk eller logisk operation. Se "Beskrivning av instruktionsuppsättningen" för detaljerad information.
Register för allmänna ändamål File
Registret File är optimerad för AVR Enhanced RISC-instruktionsuppsättningen. För att uppnå erforderlig prestanda och flexibilitet stöds följande input/output-scheman av registret File:
En 8-bitars utgångsoperand och en 8-bitars resultatingång
Två 8-bitars utgångsoperander och en 8-bitars resultatingång
Två 8-bitars utgångsoperander och en 16-bitars resultatingång
En 16-bitars utgångsoperand och en 16-bitars resultatingång
Bild 4-2 visar strukturen för de 32 allmänna arbetsregistren i CPU:n.
Som visas i Bild 4-2Varje register tilldelas också en dataminnesadress, som mappar dem direkt till de första 32 platserna i användardatautrymmet. Även om den inte är fysiskt implementerad som SRAM-platser, ger denna minnesorganisation stor flexibilitet i åtkomst till registren, eftersom X-, Y- och Z-pekarregistren kan ställas in för att indexera alla register i file.De flesta instruktioner som finns i registret File har direkt tillgång till alla register, och de flesta av dem är encykelinstruktioner.
X-registret, Y-registret och Z-registret
Registren R26..R31 har några tilläggsfunktioner till deras allmänna användning. Dessa register är 16-bitars adresspekare för indirekt adressering av datautrymmet. De tre indirekta adressregistren X, Y och Z definieras enligt beskrivningen i Bild 4-3.
I de olika adresseringslägena har dessa adressregister funktioner som fast förskjutning, automatisk ökning och automatisk minskning (se instruktionsuppsättningens referens för detaljer).
Stackpekare
Stacken används huvudsakligen för att lagra temporär data, för att lagra lokala variabler och för att lagra returadresser efter avbrott och subrutinsamtal. Stack Pointer Register pekar alltid mot toppen av stapeln. Observera att Stacken är implementerad som växande från högre minnesplatser till lägre minnesplatser. Detta innebär att ett Stack PUSH-kommando minskar Stack Pointer.
Stackpekaren pekar på data-SRAM-stapelområdet där subrutin- och avbrottstackarna finns. Detta stackutrymme i data-SRAM måste definieras av programmet innan några subrutinanrop exekveras eller avbrott aktiveras. Stackpekaren måste vara inställd på att peka över 0x60. Stackpekaren minskas med ett när data skjuts in på Stacken med PUSH-instruktionen, och den minskas med två när returadressen skjuts in i Stacken med subrutinanrop eller avbrott. Stackpekaren inkrementeras med ett när data hoppas från Stacken med POP-instruktionen, och den ökas med två när data hoppas från Stacken med retur från subrutinen RET eller retur från avbrott RETI.
AVR Stack Pointer är implementerad som två 8-bitars register i I/O-utrymmet. Antalet bitar som faktiskt används är implementeringsberoende. Observera att datautrymmet i vissa implementeringar av AVR-arkitekturen är så litet att endast SPL behövs. I detta fall kommer SPH-registret inte att finnas.
SPH och SPL — Stack Pointer Register
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | |
0x3E | SP15 | SP14 | SP13 | SP12 | SP11 | SP10 | SP9 | SP8 | SPH |
0x3D | SP7 | SP6 | SP5 | SP4 | SP3 | SP2 | SP1 | SP0 | SPL |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
Läs/skriv | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Läs/skriv | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Initialt värde | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | |
Initialt värde | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND |
Timing av instruktionsutförande
Det här avsnittet beskriver de allmänna åtkomsttidskoncepten för instruktionsexekvering. AVR-processorn drivs av CPU-klockan clkCPU, direkt genererad från den valda klockkällan för chippet. Ingen intern klockdelning används.
Bild 4-4 visar parallellinstruktionshämtningar och instruktionskörningar som aktiveras av Harvard-arkitekturen och snabbåtkomstregistret File begrepp. Detta är det grundläggande pipelining-konceptet för att erhålla upp till 1 MIPS per MHz med motsvarande unika resultat för funktioner per kostnad, funktioner per klockor och funktioner per kraftenhet.
Bild 4-5. Encykel ALU-drift
Återställ och avbryt hantering
AVR tillhandahåller flera olika avbrottskällor. Dessa avbrott och den separata återställningsvektorn har var och en separat programvektor i programminnesutrymmet. Alla avbrott tilldelas individuella aktiveringsbitar som måste skrivas logik ett tillsammans med Global Interrupt Enable-biten i Statusregistret för att avbrottet ska kunna aktiveras.
De lägsta adresserna i programminnesutrymmet är som standard definierade som återställnings- och avbrottsvektorerna. Den fullständiga listan över vektorer visas i "Avbrott" på sidan 48. Listan bestämmer också prioritetsnivåerna för de olika avbrotten. Ju lägre adress desto högre är prioritetsnivån. RESET har högsta prioritet, och nästa är INT0 – External Interrupt Request 0.
När ett avbrott inträffar rensas Global Interrupt Enable I-biten och alla avbrott avaktiveras. Användarprogramvaran kan skriva logik ett till I-biten för att möjliggöra kapslade avbrott. Alla aktiverade avbrott kan sedan avbryta den aktuella avbrottsrutinen. I-biten ställs in automatiskt när en Return from Interrupt-instruktion – RETI – exekveras.
Det finns i princip två typer av avbrott. Den första typen utlöses av en händelse som sätter avbrottsflaggan. För dessa avbrott vektoreras programräknaren till den faktiska avbrottsvektorn för att exekvera avbrottshanteringsrutinen, och hårdvaran rensar motsvarande avbrottsflagga. Avbrottsflaggor kan också rensas genom att skriva en logisk etta till flaggbitpositionen/-erna som ska rensas. Om ett avbrottstillstånd inträffar medan motsvarande avbrottsaktiveringsbit rensas, kommer avbrottsflaggan att ställas in och komma ihåg tills avbrottet aktiveras, eller flaggan rensas av mjukvara. På liknande sätt, om ett eller flera avbrottstillstånd inträffar medan den globala avbrottsaktiveringsbiten nollställs, kommer motsvarande avbrottsflagga att ställas in och komma ihåg tills den globala avbrottsaktiveringsbiten är inställd, och kommer sedan att exekveras i prioritetsordning.
Den andra typen av avbrott kommer att utlösas så länge avbrottstillståndet är närvarande. Dessa avbrott har inte nödvändigtvis avbrottsflaggor. Om avbrottsvillkoret försvinner innan avbrottet är aktiverat, kommer avbrottet inte att utlösas.
När AVR lämnar ett avbrott, kommer den alltid att återgå till huvudprogrammet och utföra ytterligare en instruktion innan något väntande avbrott serveras.
Observera att statusregistret inte lagras automatiskt när man går in i en avbrottsrutin och inte heller återställs när man återvänder från en avbrottsrutin. Detta måste hanteras av mjukvara.
När du använder CLI-instruktionen för att inaktivera avbrott, kommer avbrotten att omedelbart inaktiveras. Inget avbrott kommer att utföras efter CLI-instruktionen, även om det sker samtidigt med CLI-instruktionen. Följande example visar hur detta kan användas för att undvika avbrott under den tidsinställda EEPROM-skrivsekvensen.
Monteringskod Example |
i r16, SREG; lagra SREG-värde
cli ; inaktivera avbrott under tidsinställd sekvens sbi EECR, EEMPE ; starta EEPROM-skrivning sbi EECR, EEPE ut SREG, r16; återställa SREG-värde (I-bit) |
C-kod Example |
char cSREG;
cSREG = SREG; /* lagra SREG-värde */ /* inaktivera avbrott under tidsinställd sekvens */ _CLI(); EECR |= (1< EECR |= (1< SREG = cSREG; /* återställ SREG-värde (I-bit) */ |
När du använder SEI-instruktionen för att aktivera avbrott, kommer instruktionen efter SEI att utföras före eventuella väntande avbrott, som visas i detta ex.ample.
Monteringskod Example |
sei ; ställ in Global Interrupt Enable
sova; gå in i sömnen och väntar på avbrott ; notera: går in i viloläge innan någon väntande ; avbryta(n) |
C-kod Example |
_SEI(); /* set Global Interrupt Enable */
_SÖMN(); /* gå in i viloläge, väntar på avbrott */ /* notera: går in i viloläge före eventuella väntande avbrott */ |
Avbryt svarstid
Avbrottsexekveringssvaret för alla aktiverade AVR-avbrott är minst fyra klockcykler. Efter fyra klockcykler exekveras programvektoradressen för den faktiska avbrottshanteringsrutinen. Under denna period med fyra klockcykler skjuts programräknaren upp på stapeln. Vektorn är normalt ett hopp till avbrottsrutinen, och detta hopp tar tre klockcykler. Om ett avbrott inträffar under exekvering av en flercykelinstruktion, fullbordas denna instruktion innan avbrottet serveras. Om ett avbrott inträffar när MCU:n är i viloläge, ökas svarstiden för avbrottsexekveringen med fyra klockcykler. Denna ökning kommer utöver starttiden från det valda viloläget.
En retur från en avbrottshanteringsrutin tar fyra klockcykler. Under dessa fyra klockcykler skjuts programräknaren (två byte) tillbaka från stapeln, stackpekaren inkrementeras med två och I-biten i SREG sätts.
AVR minnen
Det här avsnittet beskriver de olika minnena i ATtiny25/45/85. AVR-arkitekturen har två huvudsakliga minnesutrymmen, dataminnet och programminnesutrymmet. Dessutom har ATtiny25/45/85 ett EEPROM-minne för datalagring. Alla tre minnesutrymmen är linjära och regelbundna.
Omprogrammerbart flashprogramminne i systemet
ATtiny25/45/85 innehåller 2/4/8K byte On-chip In-System omprogrammerbart flashminne för programlagring. Eftersom alla AVR-instruktioner är 16 eller 32 bitar breda är Flash organiserad som 1024/2048/4096 x 16.
Flash-minnet har en uthållighet på minst 10,000 25 skriv/raderingscykler. ATtiny45/85/10 Program Counter (PC) är 11/12/1024 bitar bred och adresserar således 2048/4096/XNUMX Program minnesplatser. "Minnesprogram- ming” på sidan 147 innehåller en detaljerad beskrivning av seriell nedladdning av Flash-data med SPI-stiften.
Konstanta tabeller kan allokeras inom hela programminnets adressutrymme (se instruktionsbeskrivningen för LPM – Ladda programminne).
Bild 5-1. Program minneskarta
SRAM-dataminne
Bild 5-2 visar hur ATtiny25/45/85 SRAM-minnet är organiserat.
De nedre 224/352/607 dataminnesplatserna adresserar både registret File, I/O-minnet och den interna data-SRAM. De första 32 platserna adresserar registret File, de nästa 64 platserna standard I/O-minnet, och de sista 128/256/512 platserna adresserar den interna data-SRAM.
De fem olika adresseringslägena för dataminnet täcker: Direkt, Indirekt med förskjutning, Indirekt, Indirekt med Pre-dekrement och Indirekt med Post-inkrement. I registret File, registren R26 till R31 har de indirekta adresseringspekarregistren.
Den direkta adresseringen når hela datautrymmet.
Moden Indirekt med förskjutning når 63 adressplatser från basadressen som ges av Y- eller Z-registret.
När man använder registerindirekta adresseringsmoder med automatisk förminskning och efterökning, minskas eller inkrementeras adressregistren X, Y och Z.
De 32 generella arbetsregistren, 64 I/O-register och 128/256/512 bytes intern data SRAM i ATtiny25/45/85 är alla tillgängliga via alla dessa adresseringslägen. Registret File beskrivs i "Gen- eral Ändamålsregister File”På sidan 10.
Bild 5-2. Dataminneskarta
Tillgång till dataminne Tider
Det här avsnittet beskriver de allmänna åtkomsttidskoncepten för internminnesåtkomst. Den interna data SRAM-åtkomsten utförs i två clkCPU-cykler som beskrivs i Bild 5-3.
Bild 5-3. On-chip Data SRAM Access Cycles EEPROM-dataminne
ATtiny25/45/85 innehåller 128/256/512 byte data EEPROM-minne. Det är organiserat som ett separat datautrymme, där enstaka byte kan läsas och skrivas. EEPROM har en uthållighet på minst 100,000 XNUMX skriv/raderingscykler. Åtkomsten mellan EEPROM och CPU beskrivs i det följande och specificerar EEPROM-adressregistren, EEPROM-dataregistret och EEPROM-kontrollregistret. För detaljer se "Seriell nedladdning" på sidan 151.
EEPROM läs-/skrivåtkomst
EEPROM-åtkomstregistren är tillgängliga i I/O-utrymmet.
Skrivåtkomsttiderna för EEPROM anges Tabell 5-1 på sidan 21. En självtimingsfunktion låter dock användarprogramvaran upptäcka när nästa byte kan skrivas. Om användarkoden innehåller instruktioner som skriver EEPROM, måste vissa försiktighetsåtgärder vidtas. I kraftigt filtrerade nätaggregat kommer VCC sannolikt att stiga eller falla långsamt
Ström upp/ned. Detta gör att enheten under en viss tidsperiod går på volymtage lägre än vad som anges som minimum för den använda klockfrekvensen. Ser "Förhindra EEPROM-korruption" på sidan 19 för detaljer om hur du undviker problem i dessa situationer.
För att förhindra oavsiktliga EEPROM-skrivningar måste en specifik skrivprocedur följas. Hänvisa till "Atom Byteprogrammering” på sidan 17 och "Split-byte-programmering" på sidan 17 för detaljer om detta.
När EEPROM läses stoppas CPU:n under fyra klockcykler innan nästa instruktion exekveras. När EEPROM skrivs, stoppas CPU:n under två klockcykler innan nästa instruktion exekveras.
Atomic Byte Programmering
Att använda Atomic Byte Programmering är det enklaste läget. När du skriver en byte till EEPROM, måste användaren skriva in adressen i EEAR-registret och data i EEDR-registret. Om EEPMn-bitarna är noll, kommer skrivning av EEPE (inom fyra cykler efter att EEMPE har skrivits) att utlösa raderings-/skrivoperationen. Både raderings- och skrivcykeln görs i en operation och den totala programmeringstiden anges Tabell 5-1 på sidan 21. EEPE-biten förblir inställd tills raderings- och skrivoperationerna är klara. Medan enheten är upptagen med programmering är det inte möjligt att göra några andra EEPROM-operationer.
Split Byte Programmering
Det är möjligt att dela raderings- och skrivcykeln i två olika operationer. Detta kan vara användbart om systemet kräver kort åtkomsttid under en begränsad tidsperiod (vanligtvis om strömförsörjningen voltage faller). För att ta fördel tagI denna metod krävs det att platserna som ska skrivas har raderats före skrivoperationen. Men eftersom raderings- och skrivoperationerna är uppdelade, är det möjligt att utföra raderingsoperationerna när systemet tillåter tidskritiska operationer (vanligtvis efter uppstart).
Radera
För att radera en byte måste adressen skrivas till EEAR. Om EEPMn-bitarna är 0b01, kommer skrivning av EEPE (inom fyra cykler efter att EEMPE har skrivits) att utlösa endast raderingsoperationen (programmeringstiden anges i Tabell 5-1 på sid 21). EEPE-biten förblir inställd tills raderingsoperationen är klar. Medan enheten är upptagen med programmering är det inte möjligt att göra några andra EEPROM-operationer.
Skriva
För att skriva en plats måste användaren skriva adressen i EEAR och data i EEDR. Om EEPMn-bitarna är 0b10, kommer skrivning av EEPE (inom fyra cykler efter att EEMPE har skrivits) att utlösa endast skrivoperationen (programmeringstiden anges i Tabell 5-1 på sidan 21). EEPE-biten förblir inställd tills skrivoperationen är klar. Om platsen som ska skrivas inte har raderats före skrivning, måste data som lagras betraktas som förlorad. Medan enheten är upptagen med programmering är det inte möjligt att göra några andra EEPROM-operationer.
Den kalibrerade oscillatorn används för att tajma EEPROM-åtkomsterna. Se till att oscillatorfrekvensen ligger inom de krav som beskrivs i "OSCCAL – Oscillatorkalibreringsregister" på sidan 31.
Följande kod exampfiler visar en sammansättning och en C-funktion för radering, skrivning eller atomskrivning av EEPROM. Exetamples antar att avbrott kontrolleras (t.ex. genom att inaktivera avbrott globalt) så att inga avbrott kommer att inträffa under exekvering av dessa funktioner.
Monteringskod Example |
EEPROM_skriv:
; Vänta på att föregående skrivning är klar sbic EECR,EEPE rjmp EEPROM_write ; Ställ in programmeringsläge ldi r16, (0<<EEPM1)|(0<<EEPM0) ut EECR, r16 ; Ställ in adress (r18:r17) i adressregistret ut EEARH, r18 ut EEARL, r17 ; Skriv data (r19) till dataregistret ut EEDR, r19 ; Skriv logiskt till EEMPE sbi EECR,EEMPE ; Starta eeprom-skrivning genom att ställa in EEPE sbi EECR,EEPE röta |
C-kod Example |
void EEPROM_write(osignerad char ucAddress, osignerad char ucData)
{ /* Vänta på att föregående skrivning har slutförts */ while(EECR & (1< ; /* Ställ in programmeringsläge */ EECR = (0< /* Ställ in adress- och dataregister */ EEAR = ucAddress; EEDR = ucData; /* Skriv logisk etta till EEMPE */ EECR |= (1< /* Starta eeprom-skrivning genom att ställa in EEPE */ EECR |= (1< } |
Nästa kod examples visar assembly och C-funktioner för att läsa EEPROM. Exetamples antar att avbrott styrs så att inga avbrott kommer att inträffa under exekvering av dessa funktioner.
Monteringskod Example |
EEPROM_read:
; Vänta på att föregående skrivning är klar sbic EECR,EEPE rjmp EEPROM_read ; Ställ in adress (r18:r17) i adressregistret ut EEARH, r18 ut EEARL, r17 ; Börja eeprom-läsningen genom att skriva EERE sbi EECR,EERE ; Läs data från dataregister i r16,EEDR röta |
C-kod Example |
osignerad char EEPROM_read(osignerad char ucAddress)
{ /* Vänta på att föregående skrivning är klar */ while(EECR & (1< ; /* Ställ in adressregistret */ EEAR = ucAddress; /* Börja eeprom-läsning genom att skriva EERE */ EECR |= (1< /* Returnera data från dataregister */ returnera EEDR; } |
Förhindrar EEPROM-korruption
Under perioder med låg VCC kan EEPROM-data skadas eftersom matningsvolymentage är för låg för att CPU och EEPROM ska fungera korrekt. Dessa problem är desamma som för system på kortnivå som använder EEPROM, och samma designlösningar bör tillämpas.
En EEPROM-datakorruption kan orsakas av två situationer när voltage är för lågt. För det första kräver en vanlig skrivsekvens till EEPROM en minimivolymtage att fungera korrekt. För det andra kan processorn själv utföra instruktioner felaktigt, om leverans voltage är för lågt.
EEPROM-datakorruption kan enkelt undvikas genom att följa denna designrekommendation:
Håll AVR RESET aktiv (låg) under perioder med otillräcklig strömförsörjning voltage. Detta kan göras genom att aktivera den interna Brown-out Detector (BOD). Om detektionsnivån för den interna BOD inte matchar
nödvändig detekteringsnivå kan en extern låg VCC återställningsskyddskrets användas. Om en återställning sker medan en skrivoperation pågår, kommer skrivoperationen att slutföras förutsatt att strömförsörjningen voltage är tillräckligt.
I/O-minne
I/O-utrymmesdefinitionen för ATtiny25/45/85 visas i "Registersammanfattning" på sidan 200.
Alla ATtiny25/45/85 I/O och kringutrustning är placerade i I/O-utrymmet. Alla I/O-platser kan nås av instruktionerna LD/LDS/LDD och ST/STS/STD, som överför data mellan de 32 allmänna arbetsregistren och I/O-utrymmet. I/O-register inom adressområdet 0x00 – 0x1F är direkt bittillgängliga med hjälp av SBI- och CBI-instruktionerna. I dessa register kan värdet på enstaka bitar kontrolleras genom att använda SBIS- och SBIC-instruktionerna. Se avsnittet med instruktionsuppsättningen för mer information. När de I/O-specifika kommandona IN och OUT används, måste I/O-adresserna 0x00 – 0x3F användas. Vid adressering av I/O-register som datautrymme med LD- och ST-instruktioner måste 0x20 läggas till dessa adresser.
För kompatibilitet med framtida enheter bör reserverade bitar skrivas till noll om de används. Reserverade I/O-minnesadresser ska aldrig skrivas.
Vissa av statusflaggorna rensas genom att skriva en logisk till dem. Observera att CBI- och SBI-instruktionerna endast kommer att fungera på den specificerade biten och kan därför användas på register som innehåller sådana statusflaggor. CBI- och SBI-instruktionerna fungerar endast med register 0x00 till 0x1F.
I/O- och kringutrustningskontrollregistren förklaras i senare avsnitt.
Registerbeskrivning
EEARH – EEPROM-adressregister
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1F | – | – | – | – | – | – | – | EEAR8 | EEARH |
Läs/skriv | R | R | R | R | R | R | R | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | X/0 |
Bitar 7:1 – Upplösning: Reserverade bitar
Dessa bitar är reserverade för framtida användning och kommer alltid att läsas som noll.
Bits 0 – EEAR8: EEPROM-adress
Detta är den viktigaste EEPROM-adressbiten i ATtiny85. I enheter med mindre EEPROM, dvs ATtiny25/ATtiny45, är denna bit reserverad och kommer alltid att läsa noll. Det initiala värdet för EEPROM Address Register (EEAR) är odefinierat och ett korrekt värde måste därför skrivas innan EEPROM nås.
EEARL – EEPROM-adressregister
Bit
0x1E | EEAR7 | EEAR6 | EEAR5 | EEAR4 | EEAR3 | EEAR2 | EEAR1 | EEAR0 | EARL |
Bak/Skriv | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Initialt värde | X | X | X | X | X | X | X | X |
Bit 7 – EEAR7: EEPROM-adress
Detta är den viktigaste EEPROM-adressbiten i ATtiny45. I enheter med mindre EEPROM, dvs ATtiny25, är denna bit reserverad och kommer alltid att läsa noll. Det initiala värdet för EEPROM-adressregistret (EEAR) är odefinierat och ett korrekt värde måste därför skrivas innan EEPROM:et nås.
Bitar 6:0 – EEAR[6:0]: EEPROM-adress
Dessa är de (låga) bitarna i EEPROM-adressregistret. EEPROM-databytena adresseras linjärt i området 0...(128/256/512-1). Det initiala värdet för EEAR är odefinierat och ett korrekt värde måste därför skrivas innan EEPROM kan nås.
EEDR – EEPROM Data Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1D | EEDR7 | EEDR6 | EEDR5 | EEDR4 | EEDR3 | EEDR2 | EEDR1 | EEDR0 | EEDR |
Läs/skriv | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
För EEPROM-skrivoperationen innehåller EEDR-registret de data som ska skrivas till EEPROM i adressen som ges av EEAR-registret. För EEPROM-läsoperationen innehåller EEDR data som läses ut från
EEPROM på adressen som anges av EEAR.
5.5.4 EECR – EEPROM-kontrollregister |
|||||||||
Bit 7 6 5 | 4 | 3 | 2 | 1 | 0 | ||||
0x1C – | – | EEPM1 | EEPM0 | KUSLIG | EEMPE | EEPE | EERE | EECR | |
Läs/skriv R R R/W | R/W | R/W | R/W | R/W | R/W | ||||
Initialt värde 0 0 X | X | 0 | 0 | X | 0 |
Bit 7 – Res: Reserverad bit
Denna bit är reserverad för framtida användning och kommer alltid att läsas som 0 i ATtiny25/45/85. För kompatibilitet med framtida AVR-enheter, skriv alltid denna bit till noll. Efter att ha läst, maskera den här biten.
Bit 6 – Res: Reserverad bit
Denna bit är reserverad i ATtiny25/45/85 och kommer alltid att läsas som noll.
Bitar 5:4 – EEPM[1:0]: Bitar för EEPROM-programmeringsläge
Bitinställningen för EEPROM-programmeringsläge definierar vilken programmeringsåtgärd som kommer att utlösas när EEPE skrivs. Det är möjligt att programmera data i en atomoperation (radera det gamla värdet och programmera det nya värdet) eller att dela raderings- och skrivoperationerna i två olika operationer. Programmeringstiderna för de olika lägena visas i Tabell 5-1. Medan EEPE är inställt kommer all skrivning till EEPMn att ignoreras. Under återställning kommer EEPMn-bitarna att återställas till 0b00 om inte EEPROM är upptagen med programmering.
Tabell 5-1. EEPROM-lägesbitar
EEPM1 | EEPM0 | Programmeringstid | Drift |
0 | 0 | 3.4 ms | Radera och skriv i en operation (Atomic Operation) |
0 | 1 | 1.8 ms | Endast radera |
1 | 0 | 1.8 ms | Skriv bara |
1 | 1 | – | Reserverad för framtida bruk |
Bit 3 – EEIE: EEPROM Ready Interrupt Enable
Att skriva EERIE till en aktiverar EEPROM Ready Interrupt om I-biten i SREG är inställd. Att skriva EERIE till noll inaktiverar avbrottet. EEPROM Ready Interrupt genererar ett konstant avbrott när det icke-flyktiga minnet är redo för programmering.
Bit 2 – EEMPE: Aktivering av EEPROM Master Program
EEMPE-biten bestämmer om skrivning av EEPE till en kommer att ha effekt eller inte.
När EEMPE är inställt, kommer inställning av EEPE inom fyra klockcykler att programmera EEPROM till den valda adressen. Om EEMPE är noll har inställningen av EEPE ingen effekt. När EEMPE har skrivits till en av mjukvara rensar hårdvaran biten till noll efter fyra klockcykler.
Bit 1 – EEPE: EEPROM-programaktivering
EEPROM-programaktiveringssignalen EEPE är programmeringsaktiveringssignalen till EEPROM. När EEPE skrivs kommer EEPROM att programmeras enligt inställningen för EEPMn-bitar. EEMPE-biten måste skrivas till en innan en logisk en skrivs till EEPE, annars sker ingen EEPROM-skrivning. När skrivåtkomsttiden har gått rensas EEPE-biten av hårdvaran. När EEPE har ställts in, stoppas CPU:n i två cykler innan nästa instruktion exekveras.
Bit 0 – EERE: EEPROM Read Enable
EEPROM Read Enable Signal – EERE – är lässtroben till EEPROM. När rätt adress är inställd i EEAR-registret måste EERE-biten skrivas till en för att trigga EEPROM-läsningen. EEPROM-läsåtkomsten kräver en instruktion och den begärda informationen är tillgänglig omedelbart. När EEPROM läses stoppas CPU:n i fyra cykler innan nästa instruktion exekveras. Användaren bör polla EEPE-biten innan läsoperationen påbörjas. Om en skrivoperation pågår är det varken möjligt att läsa EEPROM eller ändra EEAR-registret.
Systemklocka och klockalternativ
Klocksystem och deras distribution
CPU-klocka
CPU-klockan dirigeras till delar av systemet som rör driften av AVR-kärnan. Exampdelar av sådana moduler är registret för allmänna ändamål File, statusregistret och dataminnet som håller stackpekaren. Att stoppa CPU-klockan hindrar kärnan från att utföra allmänna operationer och beräkningar.
I/O-klocka – clI/O
I/O-klockan används av majoriteten av I/O-modulerna, som timer/räknare. I/O-klockan används också av External Interrupt-modulen, men observera att vissa externa avbrott detekteras av asynkron logik, vilket gör att sådana avbrott kan detekteras även om I/O-klockan stoppas.
Blixtklocka – clkFLASH
Flash-klockan styr driften av Flash-gränssnittet. Flash-klockan är vanligtvis aktiv samtidigt med CPU-klockan.
ADC-klocka – clkADC
ADC:n är försedd med en dedikerad klockdomän. Detta gör det möjligt att stoppa CPU- och I/O-klockorna för att minska brus som genereras av digitala kretsar. Detta ger mer exakta ADC-konverteringsresultat.
Intern PLL för snabb generering av perifer klocka – clkPCK
Den interna PLL:en i ATtiny25/45/85 genererar en klockfrekvens som multipliceras 8x från en källingång. Som standard använder PLL utgången från den interna 8.0 MHz RC-oscillatorn som källa. Alternativt, om biten LSM för PLLCSR är inställd kommer PLL:n att använda utsignalen från RC-oscillatorn dividerat med två. Sålunda är utsignalen från PLL, den snabba perifera klockan 64 MHz. Den snabba perifera klockan, eller en klocka som är förskalad från den, kan väljas som klockkälla för Timer/Counter1 eller som systemklocka. Ser Bild 6-2. Frekvensen för den snabba perifera klockan delas med två när LSM för PLLCSR är inställd, vilket resulterar i en klockfrekvens på 32 MHz. Observera att LSM inte kan ställas in om PLLCLK används som systemklocka.
Bild 6-2. PCK klocksystem.
PLL är låst på RC-oscillatorn och justering av RC-oscillatorn via OSCCAL-registret kommer att justera den snabba perifera klockan samtidigt. Men även om RC-oscillatorn tas till en högre frekvens än 8 MHz, mättas den snabba perifera klockfrekvensen vid 85 MHz (värsta fall) och förblir oscillerande vid maximal frekvens. Det bör noteras att PLL i detta fall inte längre är låst med RC-oscillatorklockan. Därför rekommenderas det att inte ta OSCCAL-justeringarna till en högre frekvens än 8 MHz för att hålla PLL i rätt arbetsområde.
Den interna PLL är aktiverad när:
PLLE-biten i registret PLLCSR är satt.
CKSEL-säkringen är programmerad till '0001'.
CKSEL-säkringen är programmerad till '0011'.
PLLCSR-biten PLOCK sätts när PLL är låst. Både den interna RC-oscillatorn och PLL är avstängda i vilolägen för avstängning och viloläge.
Intern PLL i ATtiny15-kompatibilitetsläge
Eftersom ATtiny25/45/85 är en migreringsenhet för ATtiny15-användare finns det ett ATtiny15-kompatibilitetsläge för bakåtkompatibilitet. ATtiny15-kompatibilitetsläget väljs genom att programmera CKSEL-säkringarna till '0011'.
I ATtiny15-kompatibilitetsläget är frekvensen för den interna RC-oscillatorn kalibrerad ner till 6.4 MHz och multiplikationsfaktorn för PLL är inställd på 4x. Ser Bild 6-3. Med dessa justeringar är klockningssystemet ATtiny15-kompatibelt och den resulterande snabba perifera klockan har en frekvens på 25.6 MHz (samma som i ATtiny15).
Bild 6-3. PCK-klocksystem i ATtiny15-kompatibilitetsläge.
Klockkällor
Enheten har följande alternativ för klockkälla, valbara med Flash Fuse-bitar som visas nedan. Klockan från den valda källan matas in till AVR-klockgeneratorn och dirigeras till lämpliga moduler.
Tabell 6-1. Alternativ för enhetsklockning Välj
Alternativ för enhetsklockning | CKSEL[3:0](1) |
Extern klocka (se sid 26) | 0000 |
Högfrekvent PLL-klocka (se sid 26) | 0001 |
Kalibrerad intern oscillator (se sid 27) | 0010(2) |
Kalibrerad intern oscillator (se sid 27) | 0011(3) |
Intern 128 kHz oscillator (se sid 28) | 0100 |
Lågfrekvent kristalloscillator (se sid 29) | 0110 |
Kristalloscillator/keramisk resonator (se sid 29) | 1000 – 1111 XNUMX |
Reserverad | 0101, 0111 |
För alla säkringar betyder "1" oprogrammerad medan "0" betyder programmerad.
Enheten levereras med detta alternativ valt.
Detta kommer att välja ATtiny15-kompatibilitetsläge, där systemklockan delas med fyra, vilket resulterar i en 1.6 MHz klockfrekvens. För mer information, se "Kalibrerad intern oscillator" på sidan 27.
De olika valen för varje klockningsalternativ ges i följande avsnitt. När CPU:n vaknar från Power-down, används den valda klockkällan för att tajma uppstarten, vilket säkerställer stabil Oscillatordrift innan instruktionsexekveringen startar. När processorn startar från återställning finns det en ytterligare fördröjning som gör att strömmen når en stabil nivå innan normal drift påbörjas. Watchdog Oscillator används för att tajma denna realtidsdel av starttiden. Antalet WDT-oscillatorcykler som används för varje timeout visas i Tabell 6-2.
Tabell 6-2. Antal Watchdog Oscillatorcykler
Typ Time-out | Antal cykler |
4 ms | 512 |
64 ms | 8K (8,192 XNUMX) |
Extern klocka
För att driva enheten från en extern klockkälla, bör CLKI drivas som visas i Bild 6-4. För att köra enheten på en extern klocka måste CKSEL-säkringarna programmeras till "00".
Bild 6-4. Extern klockenhetskonfiguration
När denna klockkälla är vald, bestäms starttiderna av SUT-säkringarna som visas i Tabell 6-3.
Tabell 6-3. Starttider för val av extern klocka
SUT[1:0] | Starttid från avstängning | Ytterligare fördröjning från återställning | Rekommenderad användning |
00 | 6 CK | 14CK | BOD aktiverad |
01 | 6 CK | 14CK + 4 ms | Snabbt stigande kraft |
10 | 6 CK | 14CK + 64 ms | Långsamt stigande kraft |
11 | Reserverad |
När en extern klocka appliceras måste plötsliga förändringar i den applicerade klockfrekvensen undvikas för att säkerställa stabil drift av MCU. En variation i frekvens på mer än 2 % från en klockcykel till nästa kan leda till oförutsägbart beteende. Det krävs för att säkerställa att MCU:n hålls i återställning under sådana ändringar i klockfrekvensen.
Observera att System Clock Presale kan användas för att implementera körtidsändringar av den interna klockfrekvensen samtidigt som stabil drift säkerställs. Hänvisa till "System Clock Prescaler" på sidan 31 för detaljer.
Högfrekvent PLL-klocka
Det finns en intern PLL som ger nominellt 64 MHz klockfrekvens låst till RC-oscillatorn för användning av Perifer Timer/Counter1 och för systemklockkällan. När vald som en systemklockkälla, genom att programmera CKSEL-säkringarna till '0001', delas den med fyra som visas i Tabell 6-4.
Tabell 6-4. Driftlägen för högfrekvent PLL-klocka
CKSEL[3:0] | Nominell frekvens |
0001 | 16 MHz |
När denna klockkälla är vald, bestäms starttiderna av SUT-säkringarna som visas i Tabell 6-5.
Tabell 6-5. Starttider för högfrekvent PLL-klocka
SUT[1:0] | Starttid från avstängning | Ytterligare fördröjning från återställning vid start (VCC = 5.0 V) | Rekommenderad användning |
00 | 14CK + 1K (1024) CK + 4 ms | 4 ms | BOD aktiverad |
Tabell 6-5. Starttider för högfrekvent PLL-klocka
SUT[1:0] | Starttid från avstängning | Ytterligare fördröjning från återställning vid start (VCC = 5.0 V) | Rekommenderad användning |
01 | 14CK + 16K (16384) CK + 4 ms | 4 ms | Snabbt stigande kraft |
10 | 14CK + 1K (1024) CK + 64 ms | 4 ms | Långsamt stigande kraft |
11 | 14CK + 16K (16384) CK + 64 ms | 4 ms | Långsamt stigande kraft |
Kalibrerad intern oscillator
Som standard ger den interna RC-oscillatorn en ungefärlig 8.0 MHz klocka. Även om voltage och temperaturberoende kan denna klocka kalibreras mycket noggrant av användaren. Ser "Kalibrerad intern RC-oscillatoracku- racy” på sidan 164 och "Intern oscillatorhastighet" på sidan 192 för mer detaljer. Enheten levereras med CKDIV8-säkringen programmerad. Ser "System Clock Prescaler" på sidan 31 för mer information.
Denna klocka kan väljas som systemklocka genom att programmera CKSEL-säkringarna som visas i Tabell 6-6 på sidan
27. Om det väljs kommer det att fungera utan externa komponenter. Under återställning laddar hårdvaran det förprogrammerade kalibreringsvärdet till OSCCAL-registret och kalibrerar därigenom automatiskt RC-oscillatorn. Noggrannheten för denna kalibrering visas som Fabrikskalibrering in Tabell 21-2 på sidan 164.
Genom att ändra OSCCAL-registret från SW, se "OSCCAL – Oscillatorkalibreringsregister" på sidan 31, är det möjligt att få en högre kalibreringsnoggrannhet än genom att använda fabrikskalibreringen. Noggrannheten för denna kalibrering visas som Användarkalibrering in Tabell 21-2 på sidan 164.
När denna oscillator används som chipklocka, kommer Watchdog Oscillator fortfarande att användas för Watchdog-timern och för återställningstiden. För mer information om det förprogrammerade kalibreringsvärdet, se avsnittet "Cali- brationsbytes” på sidan 150.
Den interna oscillatorn kan också ställas in för att ge en 6.4 MHz klocka genom att skriva CKSEL-säkringar till "0011", som visas i Tabell 6-6 Nedan. Denna inställning kallas för ATtiny15-kompatibilitetsläge och är avsedd att tillhandahålla en kalibrerad klockkälla vid 6.4 MHz, som i ATtiny15. I ATtiny15-kompatibilitetsläget använder PLL den interna oscillatorn som körs på 6.4 MHz för att generera en 25.6 MHz perifer klocksignal för Timer/Counter1 (se "8-bitars timer/räknare 1 in ATtiny15 Mode” på sidan 95). Observera att i detta driftläge delas klocksignalen på 6.4 MHz alltid med fyra, vilket ger en 1.6 MHz systemklocka.
Tabell 6-6. Internt kalibrerade RC-oscillatordriftlägen
CKSEL[3:0] | Nominell frekvens |
0010(1) | 8.0 MHz |
0011(2) | 6.4 MHz |
Enheten levereras med detta alternativ valt.
Den här inställningen väljer ATtiny15-kompatibilitetsläge, där systemklockan delas med fyra, vilket resulterar i en klockfrekvens på 1.6 MHz.
När den kalibrerade 8 MHz interna oscillatorn väljs som klockkälla bestäms starttiderna av SUT-säkringarna som visas i Tabell 6-7 nedan.
Tabell 6-7. Starttider för intern kalibrerad RC-oscillatorklocka
SUT[1:0] | Starttid från avstängning | Ytterligare fördröjning från återställning (VCC = 5.0V) | Rekommenderad användning |
00 | 6 CK | 14CK(1) | BOD aktiverad |
01 | 6 CK | 14CK + 4 ms | Snabbt stigande kraft |
10(2) | 6 CK | 14CK + 64 ms | Långsamt stigande kraft |
11 | Reserverad |
1. Om RSTDISBL-säkringen är programmerad, kommer denna starttid att ökas till 14CK + 4 ms för att säkerställa att programmeringsläget kan aktiveras.
2. Enheten levereras med detta alternativ valt.
I ATtiny15-kompatibilitetsläget bestäms starttiderna av SUT-säkringar som visas i Tabell 6-8 nedan.
Tabell 6-8. Starttider för intern kalibrerad RC-oscillatorklocka (i ATtiny15-läge)
SUT[1:0] | Starttid från avstängning | Ytterligare fördröjning från återställning (VCC = 5.0V) | Rekommenderad användning |
00 | 6 CK | 14CK + 64 ms | |
01 | 6 CK | 14CK + 64 ms | |
10 | 6 CK | 14CK + 4 ms | |
11 | 1 CK | 14CK(1) |
Obs: Om RSTDISBL-säkringen är programmerad, kommer denna starttid att ökas till 14CK + 4 ms för att säkerställa att programmeringsläget kan aktiveras.
Sammanfattningsvis kan mer information om ATtiny15-kompatibilitetsläge hittas i avsnitten "Port B (PB5:PB0)" på sid 2, "Intern PLL i ATtiny15-kompatibilitetsläge" på sidan 24, "8-bitars timer/räknare1 i ATtiny15-läge" på sid 95, "Begränsningar för debugWIRE" på sidan 140, "Kalibreringsbytes" på sidan 150 och i tabell "Clock Prescaler Välj” på sidan 33.
Intern 128 kHz oscillator
Den interna oscillatorn på 128 kHz är en lågeffektoscillator som ger en klocka på 128 kHz. Frekvensen är nominell vid 3V och 25°C. Denna klocka kan väljas som systemklocka genom att programmera CKSEL-säkringarna till "0100".
När denna klockkälla är vald, bestäms starttiderna av SUT-säkringarna som visas i Tabell 6-9.
Tabell 6-9. Starttider för 128 kHz intern oscillator
SUT[1:0] | Starttid från avstängning | Ytterligare fördröjning från återställning | Rekommenderad användning |
00 | 6 CK | 14CK(1) | BOD aktiverad |
01 | 6 CK | 14CK + 4 ms | Snabbt stigande kraft |
10 | 6 CK | 14CK + 64 ms | Långsamt stigande kraft |
11 | Reserverad |
Obs: Om RSTDISBL-säkringen är programmerad kommer denna starttid att ökas till 14CK + 4 ms för att säkerställa att programmeringsläget kan aktiveras.
Lågfrekvent kristalloscillator
För att använda en 32.768 kHz klockkristall som klockkälla för enheten, måste lågfrekvent kristalloscillator väljas genom att ställa in CKSEL-säkringar på '0110'. Kristallen ska anslutas som visas i Bild 6-5. För att hitta lämplig belastningskapacitans för en 32.768 kHz kristall, se tillverkarens datablad.
När denna oscillator väljs, bestäms starttiderna av SUT-säkringarna som visas i Tabell 6-10.
Tabell 6-10. Starttider för val av lågfrekvent kristalloscillatorklocka
SUT[1:0] | Starttid från avstängning | Ytterligare fördröjning från återställning (VCC = 5.0V) | Rekommenderad användning |
00 | 1K (1024) CK(1) | 4 ms | Snabb stigande effekt eller BOD aktiverad |
01 | 1K (1024) CK(1) | 64 ms | Långsamt stigande kraft |
10 | 32K (32768) CK | 64 ms | Stabil frekvens vid uppstart |
11 | Reserverad |
Obs: Dessa alternativ bör endast användas om frekvensstabilitet vid uppstart inte är viktigt.
Den lågfrekventa kristalloscillatorn ger en intern belastningskapacitans, se Tabell 6-11 vid varje TOSC-stift.
Tabell 6-11. Kapacitans för lågfrekvent kristalloscillator
Anordning | 32 kHz Osc. Typ | Cap (Xtal1/Tosc1) | Cap (Xtal2/Tosc2) |
ATtiny25/45/85 | System Osc. | 16 pF | 6 pF |
Kristalloscillator/keramisk resonator
XTAL1 och XTAL2 är in- respektive utmatning av en invertering ampLifier som kan konfigureras för användning som en On-chip Oscillator, som visas i Bild 6-5. Antingen en kvartskristall eller en keramisk resonator kan användas.
C1 och C2 ska alltid vara lika för både kristaller och resonatorer. Det optimala värdet på kondensatorerna beror på kristallen eller resonatorn som används, mängden strökapacitans och det elektromagnetiska bruset i omgivningen. Några initiala riktlinjer för att välja kondensatorer för användning med kristaller ges i Tabell 6-12 Nedan. För keramiska resonatorer bör de kondensatorvärden som anges av tillverkaren användas.
Tabell 6-12. Crystal Oscillator Driftlägen
CKSEL[3:1] | Frekvensområde (MHz) | Rekommenderat område för kondensatorer C1 och C2 för användning med kristaller (pF) |
100(1) | 0.4 – 0.9 XNUMX | – |
101 | 0.9 – 3.0 XNUMX | 12 – 22 XNUMX |
110 | 3.0 – 8.0 XNUMX | 12 – 22 XNUMX |
111 | 8.0 – | 12 – 22 XNUMX |
Anmärkningar: Det här alternativet bör inte användas med kristaller, endast med keramiska resonatorer.
Oscillatorn kan arbeta i tre olika lägen, var och en optimerad för ett specifikt frekvensområde. Driftläget väljs av säkringarna CKSEL[3:1] som visas i Tabell 6-12.
CKSEL0-säkringen tillsammans med SUT[1:0]-säkringarna väljer starttider som visas i Tabell 6-13.
Tabell 6-13. Starttider för valet av Crystal Oscillator Clock
CKSEL0 | SUT[1:0] | Starttid från avstängning | Ytterligare fördröjning från återställning | Rekommenderad användning |
0 | 00 | 258 CK(1) | 14CK + 4 ms | Keramisk resonator, snabbt stigande kraft |
0 | 01 | 258 CK(1) | 14CK + 64 ms | Keramisk resonator, långsamt stigande effekt |
0 | 10 | 1K (1024) CK(2) | 14CK | Keramisk resonator, BOD aktiverad |
0 | 11 | 1K (1024)CK(2) | 14CK + 4 ms | Keramisk resonator, snabbt stigande kraft |
1 | 00 | 1K (1024)CK(2) | 14CK + 64 ms | Keramisk resonator, långsamt stigande effekt |
1 | 01 | 16K (16384) CK | 14CK | Crystal Oscillator, BOD aktiverad |
1 | 10 | 16K (16384) CK | 14CK + 4 ms | Kristalloscillator, snabb stigande kraft |
1 | 11 | 16K (16384) CK | 14CK + 64 ms | Kristalloscillator, långsamt stigande kraft |
Anteckningar
Dessa alternativ bör endast användas när den inte arbetar nära enhetens maximala frekvens, och endast om frekvensstabilitet vid uppstart inte är viktigt för applikationen. Dessa alternativ är inte lämpliga för kristaller.
Dessa alternativ är avsedda för användning med keramiska resonatorer och kommer att säkerställa frekvensstabilitet vid uppstart. De kan också användas med kristaller när de inte arbetar nära enhetens maximala frekvens, och om frekvensstabilitet vid uppstart inte är viktigt för applikationen.
Standardklockkälla
Enheten levereras med CKSEL = "0010", SUT = "10" och CKDIV8 programmerad. Standardinställningen för klockkällan är därför den interna RC-oscillatorn som körs på 8 MHz med längsta starttid och en initial förskalning av systemklockan på 8, vilket resulterar i 1.0 MHz systemklocka. Denna standardinställning säkerställer att alla användare kan göra sin önskade klockkälla med hjälp av en In-System eller High-voltage Programmerare.
System Clock Prescaler
ATtiny25/45/85 systemklockan kan delas genom att ställa in "CLKPR – Clock Prescale Register" på sidan 32. Denna funktion kan användas för att minska strömförbrukningen när kravet på processorkraft är lågt. Detta kan användas med alla alternativ för klockkälla, och det kommer att påverka klockfrekvensen för CPU:n och alla synkrona kringutrustningar. clkI/O, clkADC, clkCPU och clkFLASH divideras med en faktor som visas i Tabell 6-15 på sidan 33.
Bytestid
När du växlar mellan förskalningsinställningar ser System Clock Prescaler till att inga fel uppstår i klocksystemet och att ingen mellanfrekvens är högre än varken den klockfrekvens som motsvarar den tidigare inställningen eller den klockfrekvens som motsvarar den nya inställningen.
Rippelräknaren som implementerar förskalaren körs på frekvensen för den odelade klockan, vilket kan vara snabbare än CPU:ns klockfrekvens. Därför är det inte möjligt att bestämma förskalarens tillstånd – även om den vore läsbar, och den exakta tiden det tar att växla från en klockdivision till en annan kan inte exakt förutsägas.
Från det att CLKPS-värdena skrivs tar det mellan T1 + T2 och T1 + 2*T2 innan den nya klockfrekvensen är aktiv. I detta intervall produceras 2 aktiva klockkanter. Här är T1 den föregående klockperioden och T2 är den period som motsvarar den nya förskalningsinställningen.
Klockutgångsbuffert
Enheten kan mata ut systemklockan på CLKO-stiftet (när det inte används som XTAL2-stift). För att aktivera utgången måste CKOUT-säkringen programmeras. Detta läge är lämpligt när chipklockan används för att driva andra kretsar i systemet. Observera att klockan inte kommer att matas ut under återställning och att den normala driften av I/O-stiftet kommer att åsidosättas när säkringen programmeras. Intern RC Oscillator, WDT Oscillator, PLL och extern klocka (CLKI) kan väljas när klockan matas ut på CLKO. Kristalloscillatorer (XTAL1, XTAL2) kan inte användas för klockutgång på CLKO. Om System Clock Prescaler används är det den delade systemklockan som matas ut.
Registerbeskrivning
OSCCAL – Oscillatorkalibreringsregister
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x31 | CAL7 | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | OSCCAL |
Läs/skriv | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
Bitar 7:0 – CAL[7:0]: Oscillatorkalibreringsvärde
Oscillatorkalibreringsregistret används för att trimma den kalibrerade interna RC-oscillatorn för att ta bort processvariationer från oscillatorfrekvensen. Ett förprogrammerat kalibreringsvärde skrivs automatiskt till detta register under chipåterställning, vilket ger den fabrikskalibrerade frekvensen som specificeras i Tabell 21-2 på sidan 164. Programvaran kan skriva detta register för att ändra oscillatorfrekvensen. Oscillatorn kan kalibreras till frekvenser som specificeras i Tabell 21-2 på sidan 164. Kalibrering utanför detta intervall kan inte garanteras.
Observera att denna oscillator används för att tidsstyra EEPROM- och Flash-skrivåtkomster, och dessa skrivtider kommer att påverkas i enlighet därmed. Om EEPROM eller Flash är skrivet, kalibrera inte till mer än 8.8 MHz. Annars kan EEPROM eller Flash-skrivning misslyckas.
CAL7-biten bestämmer operationsområdet för oscillatorn. Att sätta denna bit till 0 ger det lägsta frekvensområdet, om denna bit ställs till 1 ger det högsta frekvensområdet. De två frekvensområdena överlappar varandra, med andra ord ger en inställning på OSCCAL = 0x7F en högre frekvens än OSCCAL = 0x80.
CAL[6:0]-bitarna används för att ställa in frekvensen inom det valda området. En inställning på 0x00 ger den lägsta frekvensen i området, och en inställning på 0x7F ger den högsta frekvensen i området.
För att säkerställa en stabil drift av MCU:n bör kalibreringsvärdet ändras till liten. En variation i frekvens på mer än 2 % från en cykel till nästa kan leda till oförutsägbart beteende. Ändringar i OSCCAL bör inte överstiga 0x20 för varje kalibrering. Det krävs för att säkerställa att MCU:n hålls i återställning under sådana ändringar i klockfrekvensen
Tabell 6-14. Internt RC Oscillator frekvensområde
OSCCAL-värde | Typisk lägsta frekvens med avseende på nominell frekvens | Typisk högsta frekvens med avseende på nominell frekvens |
0x00 | 50 % | 100 % |
0x3F | 75 % | 150 % |
0x7F | 100 % | 200 % |
CLKPR – Clock Prescale Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x26 | CLKPCE | – | – | – | CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | CLKPR |
Läs/skriv | R/W | R | R | R | R/W | R/W | R/W | R/W |
Initialt värde 0 0 0 0 Se bitbeskrivning
Bit 7 – CLKPCE: Clock Prescaler Change Aktivera
CLKPCE-biten måste skrivas till logik ett för att möjliggöra ändring av CLKPS-bitarna. CLKPCE-biten uppdateras endast när de andra bitarna i CLKPR samtidigt skrivs till noll. CLKPCE rensas av hårdvaran fyra cykler efter att den har skrivits eller när CLKPS-bitarna skrivs. Att skriva om CLKPCE-biten inom denna timeout-period förlänger varken timeout-perioden eller rensar CLKPCE-biten.
Bitar 6:4 – Upplösning: Reserverade bitar
Dessa bitar är reserverade bitar i ATtiny25/45/85 och kommer alltid att läsas som noll.
Bits 3:0 – CLKPS[3:0]: Clock Prescaler Select Bits 3 – 0
Dessa bitar definierar divisionsfaktorn mellan den valda klockkällan och den interna systemklockan. Dessa bitar kan skrivas under körtid för att variera klockfrekvensen för att passa applikationskraven. När delaren delar masterklockinsignalen till MCU:n reduceras hastigheten för alla synkrona perifera enheter när en divisionsfaktor används. Delningsfaktorerna anges i Tabell 6-15.
För att undvika oavsiktliga förändringar av klockfrekvensen måste en speciell skrivprocedur följas för att ändra CLKPS-bitarna:
Skriv CLKPCE-biten (Clock Prescaler Change Enable) till en och alla andra bitar i CLKPR till noll.
Skriv det önskade värdet till CLKPS inom fyra cykler medan du skriver en nolla till CLKPCE.
Avbrott måste inaktiveras när du ändrar förskalningsinställning för att säkerställa att skrivproceduren inte avbryts.
CKDIV8-säkringen bestämmer initialvärdet för CLKPS-bitarna. Om CKDIV8 är oprogrammerad kommer CLKPS-bitarna att återställas till "0000". Om CKDIV8 är programmerad återställs CLKPS-bitar till "0011", vilket ger en divisionsfaktor på åtta vid uppstart. Denna funktion bör användas om den valda klockkällan har en högre frekvens än enhetens maximala frekvens vid nuvarande driftsförhållanden. Observera att vilket värde som helst kan skrivas till CLKPS-bitarna oavsett CKDIV8-säkringsinställningen. Programvaran måste säkerställa att en tillräcklig delningsfaktor är
väljs om den valda klockkällan har en högre frekvens än enhetens maximala frekvens vid nuvarande driftsförhållanden. Enheten levereras med CKDIV8-säkringen programmerad.
Tabell 6-15. Clock Prescaler Välj
CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | Klockdelningsfaktor |
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 | Reserverad |
1 | 0 | 1 | 0 | Reserverad |
1 | 0 | 1 | 1 | Reserverad |
1 | 1 | 0 | 0 | Reserverad |
1 | 1 | 0 | 1 | Reserverad |
1 | 1 | 1 | 0 | Reserverad |
1 | 1 | 1 | 1 | Reserverad |
Obs: Förskalaren är inaktiverad i ATtiny15-kompatibilitetsläge och varken skrivning till CLKPR eller programmering av CKDIV8-säkringen har någon effekt på systemklockan (som alltid kommer att vara 1.6 MHz).
Strömhantering och vilolägen
Den höga prestanda och branschledande kodeffektivitet gör AVR-mikrokontroller till ett idealiskt val för lågeffektapplikationer. Dessutom gör vilolägen det möjligt för applikationen att stänga av oanvända moduler i MCU, vilket sparar ström. AVR tillhandahåller olika vilolägen som tillåter användaren att skräddarsy strömförbrukningen efter applikationens krav.
Vilolägen
Bild 6-1 på sidan 23 presenterar de olika klocksystemen och deras distribution i ATtiny25/45/85. Figuren är till hjälp för att välja ett lämpligt viloläge. Tabell 7-1 visar de olika vilolägena och deras väckningskällor.
Tabell 7-1. Aktiva klockdomäner och väckningskällor i de olika vilolägena
Aktiva klockdomäner | Oscillatorer | Wake-up källor | ||||||||||
Viloläge | clkCPU | clkFLASH | clkIO | clkADC | clkPCK | Huvudklockkälla aktiverad | INT0 och Pin Change | SPM/EEPROM
Redo |
USI startvillkor |
ADC | Övriga I/O | Vakthund Avbryta |
På tomgång | X | X | X | X | X | X | X | X | X | X | ||
ADC-brusreducering | X | X | X(1) | X | X | X | X | |||||
Strömavbrott | X(1) | X | X |
Obs: För INT0, endast nivåavbrott.
För att gå in i något av de tre vilolägena måste SE-biten i MCUCR skrivas till logik ett och en SLEEP-instruktion måste exekveras. SM[1:0]-bitarna i MCUCR-registret väljer vilket viloläge (Idle, ADC Noise Reduction eller Power-down) som ska aktiveras av SLEEP-instruktionen. Ser Tabell 7-2 för en sammanfattning.
Om ett aktiverat avbrott inträffar medan MCU:n är i viloläge, vaknar MCU:n. MCU:n stoppas sedan under fyra cykler utöver starttiden, exekverar avbrottsrutinen och återupptar exekveringen från instruktionen efter SLEEP. Innehållet i registret File och SRAM är oförändrade när enheten vaknar från viloläge. Om en återställning sker under viloläge, vaknar MCU:n och körs från återställningsvektorn.
Notera: att om ett nivåutlöst avbrott används för väckning måste den ändrade nivån hållas kvar en tid för att aktivera MCU (och för att MCU ska gå in i avbrottsservicerutinen). Ser "Externa avbrott" på sidan 49 för detaljer.
Viloläge
När SM[1:0]-bitarna skrivs till 00, gör SLEEP-instruktionen att MCU:n går in i viloläge, vilket stoppar CPU:n men låter Analog Comparator, ADC, USI, Timer/Counter, Watchdog och avbrottssystemet fortsätta att fungera. äta. Detta viloläge stoppar i princip clkCPU och clkFLASH, samtidigt som de andra klockorna kan köras.
Idle-läge gör det möjligt för MCU:n att vakna från externt utlösta avbrott såväl som interna sådana som Timer Overflow. Om väckning från Analog Comparator-avbrottet inte krävs, kan Analog Comparator stängas av genom att ställa in ACD-biten i "ACSR – Analog Comparator Control and Status Register" på sidan 120. Detta kommer att minska strömförbrukningen i viloläge. Om ADC är aktiverad startar en konvertering automatiskt när detta läge ställs in.
ADC-brusreduceringsläge
När SM[1:0]-bitarna skrivs till 01, gör SLEEP-instruktionen att MCU:n går in i ADC-brusreduceringsläge, stoppar CPU:n men tillåter ADC, de externa avbrotten och Watchdog att fortsätta arbeta (om aktiverat). Detta viloläge stoppar clkI/O, clkCPU och clkFLASH, samtidigt som de andra klockorna kan köras.
Detta förbättrar brusmiljön för ADC, vilket möjliggör mätningar med högre upplösning. Om ADC är aktiverad startar en konvertering automatiskt när detta läge ställs in. Förutom ADC Conversion Complete-avbrottet, kan endast en extern återställning, en Watchdog-återställning, en Brown-out-återställning, ett SPM/EEPROM-färdigt avbrott, ett externt nivåavbrott på INT0 eller ett stiftbytesavbrott väcka MCU:n från ADC-brusreducering läge.
Avstängningsläge
När SM[1:0]-bitarna skrivs till 10, gör SLEEP-instruktionen att MCU:n går in i avstängningsläge. I detta läge stoppas oscillatorn, medan de externa avbrotten, USI starttillståndsdetektering och Watchdog fortsätter att fungera (om aktiverad). Endast en extern återställning, en Watchdog-återställning, en Brown-out-återställning, USI-starttillståndsavbrott, ett externt nivåavbrott på INT0 eller ett stiftbytesavbrott kan väcka MCU:n. Detta viloläge stoppar alla genererade klockor och tillåter endast drift av asynkrona moduler.
Programvara BOD Inaktivera
När Brown-out-detektorn (BOD) är aktiverad av BODLEVEL-säkringar (se Tabell 20-4 på sidan 148), övervakar BOD aktivt tillförseln voltage under en sömnperiod. I vissa enheter är det möjligt att spara ström genom att inaktivera BOD med programvara i avstängt viloläge. Energiförbrukningen i viloläget kommer då att vara på samma nivå som när BOD är globalt inaktiverat av säkringar.
Om BOD är inaktiverat av programvaran, stängs BOD-funktionen av omedelbart efter att ha gått in i viloläget. Vid uppvaknande från viloläge aktiveras BOD automatiskt igen. Detta säkerställer säker drift om VCC-nivån har sjunkit under viloperioden.
När BOD har inaktiverats kommer väckningstiden från viloläge att vara densamma som för väckning från RESET. Användaren måste manuellt konfigurera väckningstiderna så att bandgapsreferensen hinner starta och BOD fungerar korrekt innan MCU:n fortsätter exekvera koden. Se SUT[1:0] och CKSEL[3:0] säkringsbitar i tabellen "Fuse Low Byte" på sidan 149
BOD-inaktivering styrs av BODS (BOD Sleep)-biten i MCU Control Register, se "MCUCR – MCU-kontroll Registrera dig” på sidan 37. Att skriva denna bit till en stänger av BOD i Power-Down, medan att skriva en nolla håller BOD aktiv. Standardinställningen är noll, dvs BOD aktiv.
Skrivning till BODS-biten styrs av en tidsinställd sekvens och en aktiveringsbit, se "MCUCR – MCU Control Regis- ter” på sidan 37.
Begränsningar
Funktionen BOD-inaktivering har endast implementerats i följande enheter:
ATtiny25, revision E och nyare
ATtiny45, revision D och nyare
ATtiny85, revision C och nyare
Revisioner är markerade på enhetens förpackning och kan lokaliseras enligt följande:
Undersidan av paket 8P3 och 8S2
Ovansidan av paket 20M1
Power Reduction Register
Power Reduction Register (PRR), se "PRR – Power Reduction Register" på sidan 38, tillhandahåller en metod för att minska strömförbrukningen genom att stoppa klockan till enskilda kringutrustning. Det aktuella tillståndet för kringutrustningen är fruset och I/O-registren kan inte läsas eller skrivas. Resurser som används av kringutrustningen när du stoppar klockan kommer att förbli upptagna, därför bör kringutrustningen i de flesta fall inaktiveras innan du stoppar klockan. Att väcka en modul, vilket görs genom att rensa biten i PRR, sätter modulen i samma tillstånd som före avstängning.
Modulavstängning kan användas i viloläge och aktivt läge för att avsevärt minska den totala strömförbrukningen. I alla andra vilolägen är klockan redan stoppad. Ser "Försörjningsström för I/O-moduler" på sidan 177 till exempelamples.
Minimera strömförbrukningen
Det finns flera frågor att tänka på när man försöker minimera strömförbrukningen i ett AVR-styrt system. I allmänhet bör vilolägen användas så mycket som möjligt, och viloläget bör väljas så att så få som möjligt av enhetens funktioner fungerar. Alla funktioner som inte behövs bör inaktiveras. I synnerhet kan följande moduler behöva särskild hänsyn när man försöker uppnå lägsta möjliga strömförbrukning.
Analog till digital omvandlare
Om den är aktiverad kommer ADC:n att aktiveras i alla vilolägen. För att spara ström bör ADC inaktiveras innan du går in i viloläge. När ADC stängs av och på igen kommer nästa konvertering att vara en utökad konvertering. Hänvisa till "Analog till digital omvandlare" på sidan 122 för detaljer om ADC-drift.
Analog komparator
När du går in i viloläge bör den analoga komparatorn inaktiveras om den inte används. När du går in i ADC-brusreduceringsläget ska den analoga komparatorn inaktiveras. I de andra vilolägena inaktiveras den analoga komparatorn automatiskt. Men om den analoga komparatorn är inställd för att använda Internal Voltage Med hänvisning som ingång bör den analoga komparatorn vara inaktiverad i alla vilolägen. Annars har Internal Voltage Referens kommer att aktiveras, oberoende av viloläge. Hänvisa till "Analog komparator" på sidan 119 för detaljer om hur du konfigurerar Analog Comparator.
Brown-out detektor
Om Brown-out-detektorn inte behövs i applikationen ska denna modul stängas av. Om Brown-out-detektorn är aktiverad av BODLEVEL-säkringarna, kommer den att aktiveras i alla vilolägen och förbrukar därför alltid ström. I de djupare vilolägena kommer detta att bidra väsentligt till den totala strömförbrukningen. Ser "Brun-out detek- tion” på sidan 41 och "Software BOD Disable" på sidan 35 för detaljer om hur man konfigurerar Brown-out-detektorn.
Intern voltage Referens
The Internal Voltage Referens kommer att aktiveras när det behövs av Brown-out-detektionen, den analoga komparatorn eller ADC:n. Om dessa moduler är inaktiverade enligt beskrivningen i avsnitten ovan, kommer den interna voltagReferensen kommer att inaktiveras och den kommer inte att förbruka ström. När den slås på igen måste användaren tillåta referensen att starta innan utgången används. Om referensen hålls på i viloläge kan utgången användas omedelbart. Hänvisa till "Intern voltage Referens” på sidan 42 för detaljer om uppstartstiden.
Watchdog Timer
Om Watchdog Timer inte behövs i applikationen bör denna modul stängas av. Om Watchdog-timern är aktiverad kommer den att aktiveras i alla vilolägen och förbrukar därför alltid ström. I de djupare vilolägena kommer detta att bidra väsentligt till den totala strömförbrukningen. Hänvisa till "Watchdog Timer" på sidan 42 för detaljer om hur du konfigurerar Watchdog Timer.
Portstift
När du går in i ett viloläge bör alla portstift konfigureras för att använda minimal effekt. Det viktigaste är då att se till att inga stift driver resistiva belastningar. I vilolägen där både I/O-klockan (clkI/O) och ADC-klockan (clkADC) är stoppade, kommer enhetens ingångsbuffertar att inaktiveras. Detta säkerställer att ingen ström förbrukas
av ingångslogiken när den inte behövs. I vissa fall behövs ingångslogiken för att detektera väckningsförhållanden, och
den kommer då att aktiveras. Se avsnittet "Aktivering av digital ingång och vilolägen" på sidan 57 för detaljer om vilka stift som är aktiverade. Om ingångsbufferten är aktiverad och ingångssignalen lämnas flytande eller har en analog signalnivå nära VCC/2, kommer ingångsbufferten att använda för mycket effekt.
För analoga ingångsstift bör den digitala ingångsbufferten alltid vara inaktiverad. En analog signalnivå nära VCC/2 på ett ingångsstift kan orsaka betydande ström även i aktivt läge. Digitala ingångsbuffertar kan inaktiveras genom att skriva till Digital Input Disable Register (DIDR0). Hänvisa till “DIDR0 – Digital Input Disable Register 0” på sidan 121 för detaljer.
Registerbeskrivning
MCUCR – MCU Control Register
MCU-styrregistret innehåller styrbitar för energihantering.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUDDING | SE | SM1 | SM0 | BODSE | ISC01 | ISC00 | MCUCR |
Läs/skriv | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 – BODS: BOD Sleep
BOD-inaktiveringsfunktionen är endast tillgänglig på vissa enheter. Ser "Begränsningar" på sidan 36.
För att inaktivera BOD under sömn (se Tabell 7-1 på sidan 34) BODS-biten måste skrivas till logik ett. Detta styrs av en tidsinställd sekvens och aktiveringsbiten, BODSE i MCUCR. Först måste både BODS och BODSE ställas in på ett. För det andra, inom fyra klockcykler måste BODS sättas till ett och BODSE måste sättas till noll. BODS-biten är aktiv tre klockcykler efter att den har ställts in. En viloinstruktion måste utföras medan BODS är aktiv för att stänga av BOD för det faktiska viloläget. BODS-biten rensas automatiskt efter tre klockcykler.
I enheter där Sleeping BOD inte har implementerats är denna bit oanvänd och kommer alltid att läsa noll.
Bit 5 – SE: Sleep Enable
SE-biten måste skrivas till logik ett för att få MCU:n att gå in i viloläge när SLEEP-instruktionen exekveras. För att undvika att MCU:n går in i viloläge såvida det inte är programmerarens syfte, rekommenderas det att skriva in Sleep Enable (SE) biten till en precis innan exekveringen av SLEEP-instruktionen och att rensa den omedelbart efter uppvaknandet.
Bits 4:3 – SM[1:0]: Viloläge Välj bitar 1 och 0
Dessa bitar väljer mellan de tre tillgängliga vilolägena som visas i Tabell 7-2.
Tabell 7-2. Viloläge Välj
SM1 | SM0 | Viloläge |
0 | 0 | På tomgång |
0 | 1 | ADC-brusreducering |
1 | 0 | Strömavbrott |
1 | 1 | Reserverad |
Bit 2 – BODSE: BOD Sleep Enable
BOD-inaktiveringsfunktionen är endast tillgänglig på vissa enheter. Ser "Begränsningar" på sidan 36.
BODSE-biten möjliggör inställning av BODS-kontrollbit, som förklaras i BODS-bitbeskrivningen. BOD inaktivering styrs av en tidsinställd sekvens.
Denna bit används inte på enheter där programvarans BOD-inaktivering inte har implementerats och kommer att läsas som noll i dessa enheter.
PRR – Power Reduction Register
Power Reduction Register tillhandahåller en metod för att minska strömförbrukningen genom att tillåta att perifera klocksignaler inaktiveras.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x20 | – | – | – | – | PRTIM1 | PRTIM0 | PRUSI | PRADC | PRR |
Läs/skriv | R | R | R | R | R/W | R/W | R/W | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bitar 7:4 – Upplösning: Reserverade bitar
Dessa bitar är reserverade bitar i ATtiny25/45/85 och kommer alltid att läsas som noll.
Bit 3 – PRTIM1: Power Reduction Timer/Counter1
Att skriva en logisk etta till denna bit stänger av Timer/Counter1-modulen. När Timer/Räknare1 är aktiverad fortsätter driften som innan avstängningen.
Bit 2 – PRTIM0: Power Reduction Timer/Counter0
Att skriva en logisk etta till denna bit stänger av Timer/Counter0-modulen. När Timer/Räknare0 är aktiverad fortsätter driften som innan avstängningen.
Bit 1 – PRUSI: Power Reduction USI
Att skriva en logisk etta till denna bit stänger av USI genom att stoppa klockan till modulen. När USI väcks igen, bör USI återinitieras för att säkerställa korrekt funktion.
Bit 0 – PRADC: Power Reduction ADC
Att skriva en logisk etta till denna bit stänger av ADC. ADC:n måste inaktiveras innan den stängs av. Observera att ADC-klockan även används av vissa delar av den analoga komparatorn, vilket innebär att den analoga komparatorn inte kan användas när denna bit är hög.
Systemkontroll och återställning
Återställa AVR
Under återställning ställs alla I/O-register in på sina initiala värden och programmet startar exekvering från återställningsvektorn. Instruktionen som placeras vid återställningsvektorn måste vara en RJMP – Relativt hopp – instruktion till återställningshanteringsrutinen. Om programmet aldrig aktiverar en avbrottskälla, används inte avbrottsvektorerna, och vanlig programkod kan placeras på dessa platser. Kopplingsschemat i Bild 8-1 visar återställningslogiken. Elektriska parametrar för återställningskretsen anges "System- och återställningsegenskaper" på sidan 165.
Bild 8-1 Återställ logik
I/O-portarna på AVR återställs omedelbart till deras initiala tillstånd när en återställningskälla blir aktiv. Detta kräver inte att någon klockkälla är igång.
Efter att alla återställningskällor har blivit inaktiva, anropas en fördröjningsräknare, vilket förlänger den interna återställningen. Detta gör att effekten når en stabil nivå innan normal drift startar. Time-outperioden för fördröjningsräknaren definieras av användaren genom SUT- och CKSEL-säkringarna. De olika valen för fördröjningsperioden presenteras i "Klocka Källor” på sidan 25.
Återställ källor
ATtiny25/45/85 har fyra återställningskällor:
Startåterställning. MCU:n återställs när matningsvolymentage är under VPOT-tröskeln (Power-on Reset).
Extern återställning. MCU:n återställs när en låg nivå finns på RESET-stiftet längre än den minsta pulslängden.
Watchdog Reset. MCU:n återställs när Watchdog Timer-perioden löper ut och Watchdog är aktiverad.
Brown-out återställning. MCU:n återställs när matningsvolymentage VCC är under Brown-out Reset-tröskeln (VBOT) och Brown-out-detektorn är aktiverad.
Startåterställning
En Power-on Reset (POR)-puls genereras av en On-chip-detekteringskrets. Detektionsnivån definieras i "Sys- tem och återställningsegenskaper” på sidan 165. POR aktiveras när VCC är under detektionsnivån. POR-kretsen kan användas för att trigga startåterställningen, såväl som för att upptäcka ett fel i matningsvolymentage.
En Power-on Reset (POR)-krets säkerställer att enheten återställs från Power-on. Att nå tröskelvärdet för startåterställning voltage anropar fördröjningsräknaren, som bestämmer hur länge enheten hålls i RESET efter VCC-höjning. RESET-signalen aktiveras igen, utan någon fördröjning, när VCC sjunker under detektionsnivån.
Bild 8-2. MCU-start, ÅTERSTÄLL Kopplad till VCC
INTERN ÅTERSTÄLLNING
Bild 8-3. MCU Start-up, RESET Extended Extended
Extern återställning
En extern återställning genereras av en låg nivå på RESET-stiftet om det är aktiverat. Återställ pulser längre än den minsta pulsbredden (se "System- och återställningsegenskaper" på sidan 165) kommer att generera en återställning, även om klockan inte går. Kortare pulser är inte garanterade att generera en återställning. När den applicerade signalen når Reset Threshold Voltage – VRST – på sin positiva kant startar fördröjningsräknaren MCU:n efter att Time-out-perioden har löpt ut.
Bild 8-4. Extern återställning under drift
Brown-out Detektion
ATtiny25/45/85 har en On-chip Brown-out Detection (BOD)-krets för att övervaka VCC-nivån under drift genom att jämföra den med en fast triggernivå. Triggernivån för BOD kan väljas av BODLEVEL säkringarna. Triggernivån har en hysteres för att säkerställa spikfri Brown-out-detektion. Hysteresen på detektionsnivån ska tolkas som VBOT+ = VBOT + VHYST/2 och VBOT- = VBOT – VHYST/2.
När BOD är aktiverad och VCC minskar till ett värde under triggernivån (VBOT-in) Bild 8-5), aktiveras Brown-out-återställningen omedelbart. När VCC ökar över triggernivån (VBOT+ in Bild 8-5), startar fördröjningsräknaren MCU:n efter att Timeout-perioden tTOUT har löpt ut.
BOD-kretsen kommer endast att upptäcka ett fall i VCC om voltage förblir under triggernivån längre än tBOD som anges "System- och återställningsegenskaper" på sidan 165.
Watchdog Reset
När Watchdog-tiden går ut kommer den att generera en kort återställningspuls på en CK-cykel. På den fallande flanken av denna puls börjar fördröjningstimern räkna Timeout-perioden tTOUT. Hänvisa till "Watchdog Timer" på sidan 42 för detaljer om hur Watchdog-timern fungerar.
Voltage Referens Aktivera signaler och starttid
VoltagReferensen har en starttid som kan påverka hur den ska användas. Starttiden anges "System- och återställningsegenskaper" på sidan 165. För att spara ström är referensen inte alltid påslagen. Referensen är på under följande situationer:
När BOD är aktiverad (genom att programmera BODLEVEL[2:0] säkringsbitarna).
När bandgapsreferensen är ansluten till den analoga komparatorn (genom att ställa in ACBG-biten i ACSR).
När ADC är aktiverad.
När BOD inte är aktiverad, efter att ha ställt in ACBG-biten eller aktiverat ADC, måste användaren alltid tillåta referensen att starta innan utgången från den analoga komparatorn eller ADC används. För att minska strömförbrukningen i avstängningsläge kan användaren undvika de tre villkoren ovan för att säkerställa att referensen är avstängd innan den går in i avstängningsläge.
Watchdog Timer
Watchdog Timern klockas från en On-chip Oscillator som körs på 128 kHz. Genom att styra Watchdog Timer-förskalaren kan Watchdog-återställningsintervallet justeras som visas i Tabell 8-3 på sidan 46. WDR – Watchdog Reset – instruktionen återställer Watchdog Timer. Watchdog-timern återställs också när den är inaktiverad och när en Chip Reset inträffar. Tio olika klockcykelperioder kan väljas för att bestämma återställningsperioden. Om återställningsperioden går ut utan en annan Watchdog-återställning, återställs ATtiny25/45/85 och körs från återställningsvektorn. För tidsinformation om Watchdog Reset, se Tabell 8-3 på sidan 46.
Watchdog-timern kan också konfigureras för att generera ett avbrott istället för en återställning. Detta kan vara till stor hjälp när du använder Watchdog för att vakna från Power-down.
För att förhindra oavsiktlig inaktivering av Watchdog eller oavsiktlig ändring av timeoutperiod, väljs två olika säkerhetsnivåer av säkringen WDTON som visas i Tabell 8-1 Referera till "Tidsanpassade sekvenser för att ändra kon- figuration av Watchdog Timer” på sidan 43 för detaljer.
Tabell 8-1. WDT-konfiguration som en funktion av säkringsinställningarna för WDTON
WDTON | Säkerhetsnivå | WDT Initial State | Hur man inaktiverar WDT | Hur man ändrar timeout |
Oprogrammerad | 1 | Inaktiverad | Tidsinställd sekvens | Inga begränsningar |
Programmerad | 2 | Aktiverad | Alltid aktiverad | Tidsinställd sekvens |
Bild 8-7. Watchdog Timer
Tidsinställda sekvenser för att ändra konfigurationen av Watchdog-timern
Sekvensen för att ändra konfigurationen skiljer sig något mellan de två säkerhetsnivåerna. Separata procedurer beskrivs för varje nivå.
Säkerhetsnivå 1: I det här läget är Watchdog-timern initialt inaktiverad, men kan aktiveras genom att skriva WDE-biten till en utan några begränsningar. En tidsinställd sekvens behövs när du inaktiverar en aktiverad Watchdog Timer. För att inaktivera en aktiverad Watchdog Timer måste följande procedur följas:
I samma operation, skriv en logisk etta till WDCE och WDE. En logisk etta måste skrivas till WDE oavsett det tidigare värdet på WDE-biten.
Inom de följande fyra klockcyklerna, i samma operation, skriv WDE- och WDP-bitarna som önskat, men med WDCE-biten nollställd.
Säkerhetsnivå 2: I detta läge är Watchdog-timern alltid aktiverad och WDE-biten kommer alltid att läsas som en. En tidsinställd sekvens behövs när du ändrar Watchdog Timeout-perioden. För att ändra Watchdog Timeout måste följande procedur följas:
I samma operation, skriv en logisk etta till WDCE och WDE. Även om WDE alltid är inställd, måste WDE skrivas till en för att starta den tidsinställda sekvensen.
Inom de kommande fyra klockcyklerna, i samma operation, skriv WDP-bitarna som önskat, men med WDCE-biten nollställd. Värdet som skrivs till WDE-biten är irrelevant.
Kod Example
Följande kod example visar en sammansättning och en C-funktion för att stänga av WDT. Exetample antar att avbrott kontrolleras (t.ex. genom att inaktivera avbrott globalt) så att inga avbrott kommer att inträffa under exekvering av dessa funktioner.
Monteringskod Example(1) |
WDT_off:
wdr ; Rensa WDRF i MCUSR ldi r16, (0< ut MCUSR, r16 ; Skriv logisk en till WDCE och WDE ; Behåll den gamla förskalningsinställningen för att förhindra oavsiktlig Watchdog Reset i r16, WDTCR ori r16, (1< ut WDTCR, r16 ; Stäng av WDT ldi r16, (0< ut WDTCR, r16 röta |
C-kod Example(1) |
void WDT_off(void)
{ _WDR(); /* Rensa WDRF i MCUSR */ MCUSR = 0x00 /* Skriv logisk etta till WDCE och WDE */ WDTCR |= (1< /* Stäng av WDT */ WDTCR = 0x00; } |
Obs: 1. Se "Kod Examples” på sidan 6.
Registerbeskrivning
MCUSR – MCU Status Register
MCU-statusregistret ger information om vilken återställningskälla som orsakade en MCU-återställning.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 | – | – | – | – | WDRF | BORF | EXTRF | PORF | MCUSR |
Läs/skriv | R | R | R | R | R/W | R/W | R/W | R/W |
Initialt värde 0 0 0 0 Se bitbeskrivning
Bitar 7:4 – Upplösning: Reserverade bitar
Dessa bitar är reserverade bitar i ATtiny25/45/85 och kommer alltid att läsas som noll.
Bit 3 – WDRF: Watchdog Reset Flag
Denna bit ställs in om en Watchdog Reset inträffar. Biten återställs genom en Power-on Reset, eller genom att skriva en logisk nolla till flaggan.
Bit 2 – BORF: Brown-out Reset Flag
Denna bit ställs in om en Brown-out Reset inträffar. Biten återställs genom en Power-on Reset, eller genom att skriva en logisk nolla till flaggan.
Bit 1 – EXTRF: Extern återställningsflagga
Denna bit ställs in om en extern återställning inträffar. Biten återställs genom en Power-on Reset, eller genom att skriva en logisk nolla till flaggan.
Bit 0 – PORF: Flagga för återställning vid start
Denna bit ställs in om en Power-on Reset inträffar. Biten återställs endast genom att skriva en logisk nolla till flaggan.
För att använda återställningsflaggorna för att identifiera ett återställningstillstånd bör användaren läsa och sedan återställa MCUSR så tidigt som möjligt i programmet. Om registret rensas innan en ny återställning sker, kan källan till återställningen hittas genom att undersöka återställningsflaggorna.
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/skriv | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
Bit 7 – WDIF: Watchdog Timeout Interrupt Flag
Denna bit ställs in när en timeout inträffar i Watchdog-timern och Watchdog-timern är konfigurerad för avbrott. WDIF rensas av hårdvaran när motsvarande avbrottshanteringsvektor utförs. Alternativt rensas WDIF genom att skriva en logisk etta till flaggan. När I-biten i SREG och WDIE är inställda, exekveras Watchdog Timeout Interrupt.
Bit 6 – WDIE: Watchdog Timeout Interrupt Enable
När denna bit skrivs till en, rensas WDE och I-biten i statusregistret sätts, är Watchdog Timeout Interrupt aktiverat. I detta läge utförs motsvarande avbrott istället för en återställning om en timeout i Watchdog-timern inträffar.
Om WDE är inställt rensas WDIE automatiskt av hårdvaran när en timeout inträffar. Detta är användbart för att behålla Watchdog Reset-säkerheten när du använder avbrottet. Efter att WDIE-biten har raderats kommer nästa time-out att generera en återställning. För att undvika Watchdog Reset måste WDIE ställas in efter varje avbrott.
Tabell 8-2. Watchdog Timer-konfiguration
WDE | WDIE | Watchdog Timer State | Åtgärd vid Time-out |
0 | 0 | Slutade | Ingen |
0 | 1 | Spring | Avbryta |
1 | 0 | Spring | Återställa |
1 | 1 | Spring | Avbryta |
Bit 4 – WDCE: Watchdog Change Enable
Denna bit måste ställas in när WDE-biten skrivs till logisk noll. Annars kommer Watchdog inte att inaktiveras. När den har skrivits till en, kommer hårdvaran att rensa denna bit efter fyra klockcykler. Se beskrivningen av WDE-biten för en Watchdog-inaktiveringsprocedur. Denna bit måste också ställas in vid ändring av förskalningsbitarna. Ser "Tidsstyrda sekvenser för att ändra konfigurationen av Watchdog-timern” på sidan 43.
Bit 3 – WDE: Watchdog Enable
När WDE skrivs till logisk etta är Watchdog Timer aktiverad, och om WDE skrivs till logisk noll är Watchdog Timer-funktionen inaktiverad. WDE kan bara rensas om WDCE-biten har logisk nivå ett. För att inaktivera en aktiverad Watchdog Timer måste följande procedur följas:
I samma operation, skriv en logisk etta till WDCE och WDE. En logisk etta måste skrivas till WDE även om den är inställd på ett innan avaktiveringsoperationen startar.
Skriv en logisk 0 till WDE inom de kommande fyra klockcyklerna. Detta inaktiverar Watchdog.
I säkerhetsnivå 2 är det inte möjligt att inaktivera Watchdog Timer, även med den algoritm som beskrivs ovan. Ser "Tidssekvenser för att ändra konfigurationen av Watchdog-timern" på sidan 43.
I säkerhetsnivå 1 åsidosätts WDE av WDRF i MCUSR. Ser "MCUSR – MCU Status Register" på sidan 44 för beskrivning av WDRF. Detta innebär att WDE alltid är inställt när WDRF är inställt. För att rensa WDE måste WDRF rensas innan du inaktiverar Watchdog med proceduren som beskrivs ovan. Denna funktion säkerställer flera återställningar under förhållanden som orsakar fel och en säker uppstart efter felet.
Obs: Om watchdog-timern inte kommer att användas i applikationen är det viktigt att gå igenom en watchdog-inaktiveringsprocedur vid initieringen av enheten. Om Watchdog av misstag aktiveras, t.exampVid en skenande pekare eller ett brunt tillstånd kommer enheten att återställas, vilket i sin tur kommer att leda till en ny övervakningsåterställning. För att undvika denna situation bör applikationsmjukvaran alltid rensa WDRF-flaggan och WDE-kontrollbiten i initialiseringsrutinen.
Bits 5, 2:0 – WDP[3:0]: Watchdog Timer Prescaler 3, 2, 1 och 0
WDP[3:0]-bitarna bestämmer förskalningen av Watchdog-timern när Watchdog-timern är aktiverad. De olika förskalningsvärdena och deras motsvarande tidsgränser visas i Tabell 8-3.
Tabell 8-3. Watchdog Timer Prescale Välj
WDP3 | WDP2 | WDP1 | WDP0 | Antal WDT-oscillatorcykler | Typisk timeout vid VCC = 5.0V |
0 | 0 | 0 | 0 | 2K (2048) cykler | 16 ms |
0 | 0 | 0 | 1 | 4K (4096) cykler | 32 ms |
0 | 0 | 1 | 0 | 8K (8192) cykler | 64 ms |
0 | 0 | 1 | 1 | 16K (16384) cykler | 0.125 s |
0 | 1 | 0 | 0 | 32K (32764) cykler | 0.25 s |
0 | 1 | 0 | 1 | 64K (65536) cykler | 0.5 s |
0 | 1 | 1 | 0 | 128K (131072) cykler | 1.0 s |
0 | 1 | 1 | 1 | 256K (262144) cykler | 2.0 s |
1 | 0 | 0 | 0 | 512K (524288) cykler | 4.0 s |
1 | 0 | 0 | 1 | 1024K (1048576) cykler | 8.0 s |
Tabell 8-3. Watchdog Timer Prescale Select (fortsättning)
WDP3 | WDP2 | WDP1 | WDP0 | Antal WDT-oscillatorcykler | Typisk timeout vid VCC = 5.0V |
1 | 0 | 1 | 0 | Reserverad(1) | |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 0 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
Obs: 1. Om valt, kommer en av de giltiga inställningarna under 0b1010 att användas.
avbrott
Det här avsnittet beskriver detaljerna för avbrottshanteringen som utförs i ATtiny25/45/85. För en allmän förklaring av AVR-avbrottshantering, se "Återställ och avbryt hantering" på sidan 12.
Avbryt vektorer i ATtiny25/45/85
Avbrottsvektorerna för ATtiny25/45/85 beskrivs i Tabell 9-1nedan.
Tabell 9-1. Återställ och avbryt vektorer
Vektor nr. | Programadress | Källa | Avbrottsdefinition |
1 | 0x0000 | ÅTERSTÄLLA | Externt stift, Power-on Reset, Brown-out Reset, Watchdog Reset |
2 | 0x0001 | INT0 | Extern avbrottsbegäran 0 |
3 | 0x0002 | PCINT0 | Pin Change Interrupt Request 0 |
4 | 0x0003 | TIMER1_COMPA | Timer/Räknare1 Jämför Match A |
5 | 0x0004 | TIMER1_OVF | Timer/Räknare1 Spill |
6 | 0x0005 | TIMER0_OVF | Timer/Räknare0 Spill |
7 | 0x0006 | EE_RDY | EEPROM redo |
8 | 0x0007 | ANA_COMP | Analog komparator |
9 | 0x0008 | ADC | ADC-konvertering klar |
10 | 0x0009 | TIMER1_COMPB | Timer/Räknare1 Jämför Match B |
11 | 0x000A | TIMER0_COMPA | Timer/Räknare0 Jämför Match A |
12 | 0x000B | TIMER0_COMPB | Timer/Räknare0 Jämför Match B |
13 | 0x000C | WDT | Watchdog Time-out |
14 | 0x000D | USI_START | USI START |
15 | 0x000E | USI_OVF | USI Overflow |
Om programmet aldrig aktiverar en avbrottskälla, används inte avbrottsvektorerna, och vanlig programkod kan placeras på dessa platser.
En typisk och generell inställning för avbrottsvektoradresser i ATtiny25/45/85 visas i programmet example nedan.
Monteringskod Example | ||
.org 0x0000 | ;Ange adress för nästa | påstående |
rjmp ÅTERSTÄLL | ; Adress 0x0000 | |
rjmp INT0_ISR | ; Adress 0x0001 | |
rjmp PCINT0_ISR | ; Adress 0x0002 | |
rjmp TIM1_COMPA_ISR | ; Adress 0x0003 | |
rjmp TIM1_OVF_ISR | ; Adress 0x0004 | |
rjmp TIM0_OVF_ISR | ; Adress 0x0005 | |
rjmp EE_RDY_ISR | ; Adress 0x0006 | |
rjmp ANA_COMP_ISR | ; Adress 0x0007 | |
rjmp ADC_ISR | ; Adress 0x0008 | |
rjmp TIM1_COMPB_ISR | ; Adress 0x0009 | |
rjmp TIM0_COMPA_ISR | ; Adress 0x000A | |
rjmp TIM0_COMPB_ISR | ; Adress 0x000B | |
rjmp WDT_ISR | ; Adress 0x000C | |
rjmp USI_START_ISR | ; Adress 0x000D | |
rjmp USI_OVF_ISR | ; Adress 0x000E | |
ÅTERSTÄLLA: | ; Huvudprogram start | |
; Adress 0x000F | ||
… |
Obs: Se "Kod Examples” på sidan 6.
Externa avbrott
De externa avbrotten utlöses av INT0-stiftet eller något av PCINT[5:0]-stiften. Observera att, om de är aktiverade, kommer avbrotten att utlösas även om INT0- eller PCINT[5:0]-stiften är konfigurerade som utgångar. Denna funktion tillhandahåller ett sätt att generera ett programavbrott. Pin change interrupts PCI utlöses om någon aktiverad PCINT[5:0] pin växlar. PCMSK-registret kontrollerar vilka stift som bidrar till stiftbytesavbrotten. Stiftbytesavbrott på PCINT[5:0] detekteras asynkront. Detta innebär att dessa avbrott kan användas för att väcka delen även från andra vilolägen än viloläge.
INT0-avbrotten kan triggas av en fallande eller stigande kant eller en låg nivå. Detta ställs in enligt specifikationen för MCU Control Register – MCUCR. När INT0-avbrottet är aktiverat och är konfigurerat som nivåutlöst, kommer avbrottet att utlösas så länge som stiftet hålls lågt. Observera att igenkänning av fallande eller stigande flankavbrott på INT0 kräver närvaron av en I/O-klocka, beskriven i "Klocksystem och deras distribution" på sid 23.
Lågnivåavbrott
Ett lågnivåavbrott på INT0 detekteras asynkront. Detta innebär att detta avbrott kan användas för att väcka delen även från andra vilolägen än viloläge. I/O-klockan stoppas i alla vilolägen utom viloläge.
Observera att om ett nivåutlöst avbrott används för väckning från Powerdown, måste den erforderliga nivån hållas tillräckligt länge för att MCU:n ska slutföra väckningen för att trigga nivåavbrottet. Om nivån försvinner före slutet av uppstartstiden kommer MCU fortfarande att vakna, men inget avbrott kommer att genereras. Starttiden definieras av SUT- och CKSEL-säkringarna enligt beskrivningen i "Systemklocka och klockalternativ" på sidan 23.
Om den låga nivån på avbrottsstiftet tas bort innan enheten har vaknat kommer programexekveringen inte att omdirigeras till avbrottsservicerutinen utan fortsätta från instruktionen efter SLEEP-kommandot.
Pin Change Interrupt Timing
Ett examplinjen för tidpunkten för ett stiftbytesavbrott visas i Bild 9-1.
Registerbeskrivning
MCUCR – MCU Control Register
Det externa avbrottsstyrregistret A innehåller styrbitar för styrning av avbrottsavkänning.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUDDING | SE | SM1 | SM0 | BODSE | ISC01 | ISC00 | MCUCR |
Läs/skriv | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bitar 1:0 – ISC0[1:0]: Interrupt Sense Control 0 Bit 1 och Bit 0
Det externa avbrottet 0 aktiveras av det externa stiftet INT0 om SREG I-flaggan och motsvarande avbrottsmask är inställda. Nivån och kanterna på det externa INT0-stiftet som aktiverar avbrottet definieras i Tabell 9-2. Värdet på INT0-stiftet är sampled innan kanter detekteras. Om flank- eller växlingsavbrott väljs kommer pulser som varar längre än en klockperiod att generera ett avbrott. Kortare pulser är inte garanterade att generera ett avbrott. Om lågnivåavbrott väljs, måste lågnivån hållas tills den för närvarande exekverande instruktionen slutförs för att generera ett avbrott.
Tabell 9-2. Avbryt 0 Sense Control
ISC01 | ISC00 | Beskrivning |
0 | 0 | Den låga nivån på INT0 genererar en avbrottsbegäran. |
0 | 1 | Varje logisk ändring på INT0 genererar en avbrottsbegäran. |
1 | 0 | Den fallande kanten av INT0 genererar en avbrottsbegäran. |
1 | 1 | Den stigande kanten av INT0 genererar en avbrottsbegäran. |
GIMSK – General Interrupt Mask Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3B | – | INT0 | PCIE | – | – | – | – | – | GIMSK |
Läs/skriv | R | R/W | R/W | R | R | R | R | R | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bitar 7, 4:0 – Upplösning: Reserverade bitar
Dessa bitar är reserverade bitar i ATtiny25/45/85 och kommer alltid att läsas som noll.
Bit 6 – INT0: Extern avbrottsbegäran 0 Aktivera
När INT0-biten är inställd (ett) och I-biten i statusregistret (SREG) är inställd (ett), är det externa stiftavbrottet aktiverat. Interrupt Sense Control0-bitarna 1/0 (ISC01 och ISC00) i MCU Control Register (MCUCR) definierar huruvida det externa avbrottet aktiveras vid stigande och/eller fallande flank på INT0-stiftet eller nivåavkänning. Aktivitet på stiftet kommer att orsaka en avbrottsbegäran även om INT0 är konfigurerad som en utgång. Motsvarande avbrott för Extern avbrottsbegäran 0 exekveras från INT0-avbrottsvektorn.
Bit 5 – PCIE: Aktivera stiftändringsavbrott
När PCIE-biten är inställd (ett) och I-biten i statusregistret (SREG) är inställd (ett), är stiftbytesavbrott aktiverat. Varje ändring på ett aktiverat PCINT[5:0]-stift kommer att orsaka ett avbrott. Motsvarande avbrott för Pin Change Interrupt Request exekveras från PCI Interrupt Vector. PCINT[5:0]-stiften aktiveras individuellt av PCMSK0-registret.
GIFR – General Interrupt Flag Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3A | – | INTF0 | PCIF | – | – | – | – | – | GIFR |
Läs/skriv | R | R/W | R/W | R | R | R | R | R | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bitar 7, 4:0 – Upplösning: Reserverade bitar
Dessa bitar är reserverade bitar i ATtiny25/45/85 och kommer alltid att läsas som noll.
Bit 6 – INTF0: Extern avbrottsflagga 0
När en kant- eller logikändring på INT0-stiftet utlöser en avbrottsbegäran, sätts INTF0 in (ett). Om I-biten i SREG och INT0-biten i GIMSK är satta (ett), kommer MCU:n att hoppa till motsvarande avbrottsvektor. Flaggan rensas när avbrottsrutinen exekveras. Alternativt kan flaggan rensas genom att skriva en logisk en till den. Denna flagga rensas alltid när INT0 är konfigurerad som ett nivåavbrott.
Bit 5 – PCIF: Pin Change Interrupt Flag
När en logisk ändring på något PCINT[5:0]-stift utlöser en avbrottsbegäran, ställs PCIF in (ett). Om I-biten i SREG och PCIE-biten i GIMSK är inställda (ett), kommer MCU:n att hoppa till motsvarande avbrottsvektor. Flaggan rensas när avbrottsrutinen exekveras. Alternativt kan flaggan rensas genom att skriva en logisk en till den.
PCMSK – Pin Change Mask Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x15 | – | – | PCINT5 | PCINT4 | PCINT3 | PCINT2 | PCINT1 | PCINT0 | PCMSK |
Läs/skriv | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bitar 7:6 – Upplösning: Reserverade bitar
Dessa bitar är reserverade bitar i ATtiny25/45/85 och kommer alltid att läsas som noll.
Bits 5:0 – PCINT[5:0]: Pin Change Enable Mask 5:0
Varje PCINT[5:0]-bit väljer om stiftbytesavbrott är aktiverat på motsvarande I/O-stift. Om PCINT[5:0] är inställd och PCIE-biten i GIMSK är inställd, är stiftbytesavbrott aktiverat på motsvarande I/O-stift. Om PCINT[5:0] raderas, avaktiveras stiftbytesavbrott på motsvarande I/O-stift.
I/O-portar
Introduktion
Alla AVR-portar har äkta Read-Modify-Write-funktioner när de används som allmänna digitala I/O-portar. Detta innebär att riktningen för en portstift kan ändras utan att oavsiktligt ändra riktningen på något annat stift med SBI- och CBI-instruktionerna. Detsamma gäller vid ändring av frekvensomriktarvärde (om konfigurerad som utgång) eller aktivering/inaktivering av pull-up-motstånd (om konfigurerad som ingång). Varje utgångsbuffert har symmetriska drivegenskaper med både hög sänk- och källkapacitet. Stiftdrivrutinen är tillräckligt stark för att driva LED-displayer direkt. Alla portstift har individuellt valbara pull-up-motstånd med en matningsvolymtage oföränderligt motstånd. Alla I/O-stift har skyddsdioder till både VCC och jord som indikeras i Bild 10-1. Referera till "Elektriska egenskaper" på sidan 161 för en komplett lista över parametrar.
Bild 10-1. I/O-stiftekvivalent schematisk
Alla register och bitreferenser i detta avsnitt är skrivna i allmän form. Ett litet "x" representerar sifferbokstaven för porten och ett litet "n" representerar bitnumret. Men när man använder registret eller bitdefinitionerna i ett program måste den exakta formen användas. Till exempelample, PORTB3 för bit nr. 3 i Port B, här allmänt dokumenterad som PORTxn. De fysiska I/O-registren och bitplatserna listas i "Registrera beskrivning" på sid 64.
Tre I/O-minnesadressplatser tilldelas för varje port, en vardera för dataregistret – PORTx, datariktningsregistret – DDRx och portingångsstiften – PINx. I/O-platsen för portingångsstift är skrivskyddad, medan dataregistret och datariktningsregistret läser/skrivs. Men att skriva en logisk ett till en bit i PINx-registret kommer att resultera i en växling i motsvarande bit i dataregistret. Dessutom inaktiverar Pull-up Disable – PUD-biten i MCUCR pull-up-funktionen för alla stift i alla portar när den är inställd.
Att använda I/O-porten som General Digital I/O beskrivs i "Portar som allmän digital I/O" på sidan 53. De flesta portstiften är multiplexerade med alternativa funktioner för enhetens kringutrustning. Hur varje alternativ funktion interfererar med portstiftet beskrivs i "Alternativa portfunktioner" på sidan 57. Se de enskilda modulavsnitten för en fullständig beskrivning av de alternativa funktionerna.
Observera att aktivering av den alternativa funktionen för några av portstiften inte påverkar användningen av de andra stiften i porten som allmän digital I/O.
Portar som allmän digital I/O
Portarna är dubbelriktade I/O-portar med valfria interna pull-ups. Bild 10-2 visar en funktionsbeskrivning av ett I/O-portstift, här allmänt kallat Pxn.
Bild 10-2. Allmän digital I/O(1)
Konfigurera stiftet
Varje portstift består av tre registerbitar: DDxn, PORTxn och PINxn. Som visas i "Registrera beskrivning" på sid 64, DDxn-bitarna nås vid DDRx I/O-adressen, PORTxn-bitarna vid PORTx I/O-adressen och PINxn-bitarna vid PINx I/O-adressen.
DDxn-biten i DDRx-registret väljer riktningen för detta stift. Om DDxn är skriven logisk ett, konfigureras Pxn som ett utgångsstift. Om DDxn skrivs logisk noll, konfigureras Pxn som ett ingångsstift.
Om PORTxn skrivs logisk ett när stiftet är konfigurerat som ett ingångsstift, aktiveras pull-up-motståndet. För att stänga av pull-up-motståndet måste PORTxn skrivas logisk noll eller så måste stiftet konfigureras som ett utgångsstift. Portstiften är tri-staterade när återställningstillståndet blir aktivt, även om inga klockor körs.
Om PORTxn skrivs logisk ett när stiftet är konfigurerat som ett utgångsstift, drivs portstiftet högt (ett). Om PORTxn skrivs logisk noll när stiftet är konfigurerat som ett utgångsstift, drivs portstiftet lågt (noll).
Växla stiftet
Att skriva en logisk etta till PINxn växlar värdet på PORTxn, oberoende av värdet på DDRxn. Observera att SBI-instruktionen kan användas för att växla en enskild bit i en port.
Växla mellan ingång och utgång
Vid växling mellan tri-state ({DDxn, PORTxn} = 0b00) och output high ({DDxn, PORTxn} = 0b11), ett mellanläge med antingen pull-up aktiverad {DDxn, PORTxn} = 0b01) eller utgång låg ({DDxn, PORTxn} = 0b10) måste förekomma. Normalt är det pull-up-aktiverade tillståndet fullt acceptabelt, eftersom en högimpedant miljö inte kommer att märka skillnaden mellan en stark hög driver och en pull-up. Om detta inte är fallet kan PUD-biten i MCUCR-registret ställas in för att inaktivera alla pull-ups i alla portar.
Att växla mellan input med pull-up och output low genererar samma problem. Användaren måste använda antingen tri-state ({DDxn, PORTxn} = 0b00) eller output high state ({DDxn, PORTxn} = 0b10) som ett mellansteg.
Tabell 10-1 sammanfattar styrsignalerna för stiftvärdet.
Tabell 10-1. Port Pin-konfigurationer
DDxn | PORTxn | PUDDING
(i MCUCR) |
I/O | Uppdrag | Kommentar |
0 | 0 | X | Input | Inga | Tre-tillstånd (Hi-Z) |
0 | 1 | 0 | Input | Ja | Pxn kommer att källström om ext. drog lågt. |
0 | 1 | 1 | Input | Inga | Tre-tillstånd (Hi-Z) |
1 | 0 | X | Produktion | Inga | Utgång låg (sink) |
1 | 1 | X | Produktion | Inga | Utgång hög (källa) |
Läser PIN-värdet
Oberoende av inställningen av datariktningsbiten DDxn, kan portstiftet läsas genom PINxn-registerbiten. Som visas i Bild 10-2, utgör PINxn-registerbiten och den föregående låskretsen en synkroniserare. Detta behövs för att undvika metastabilitet om det fysiska stiftet ändrar värde nära kanten på den interna klockan, men det introducerar också en fördröjning. Bild 10-3 visar ett tidsdiagram över synkroniseringen vid avläsning av ett externt applicerat stiftvärde. De maximala och minsta utbredningsfördröjningarna betecknas tpd,max och tpd,min respektive.
Tänk på att klockperioden börjar strax efter den första fallande flanken på systemklockan. Spärren är stängd när klockan är låg och blir transparent när klockan är hög, vilket indikeras av den skuggade delen av "SYNC LATCH"-signalen. Signalvärdet är låst när systemklockan blir låg. Den klockas in i PINxn-registret vid den efterföljande positiva klockflanken. Som indikeras av de två pilarna tpd,max och tpd,min, kommer en enda signalövergång på stiftet att fördröjas mellan ½ och 1½ systemklockperiod beroende på tiden för påståendet.
När du läser tillbaka ett mjukvarutilldelat pinvärde måste en nop-instruktion infogas enligt anvisningarna i Bild 10-4. Ut-instruktionen ställer in "SYNC LATCH"-signalen vid den positiva kanten av klockan. I detta fall är fördröjningen tpd genom synkroniseraren en systemklockperiod.
Följande kod example visar hur man ställer in port B-stift 0 och 1 högt, 2 och 3 lågt, och definierar portstiften från 4 till 5 som indata med en pull-up tilldelad till port stift 4. De resulterande stiftvärdena läses tillbaka igen, men som tidigare diskuterats ingår en nop-instruktion för att kunna läsa tillbaka värdet som nyligen tilldelats några av stiften.
Monteringskod Example(1) |
…
; Definiera pull-ups och ställ in utgångarna höga ; Definiera riktningar för portstift ldi r16,(1<<PB4)|(1<<PB1)|(1<<PB0) ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0) ut PORTB,r16 ut DDRB,r17 ; Sätt in nop för synkronisering nej ; Läs portstift i r16, PINB … |
Obs: För monteringsprogrammet används två temporära register för att minimera tiden från det att pull-ups ställs in på stift 0, 1 och 4, tills riktningsbitarna är korrekt inställda, vilket definierar bit 2 och 3 som låga och omdefinierar bitar 0 och 1 som starka höga förare.
C-kod Example |
osignerad char i;
… /* Definiera pull-ups och sätt utgångar högt */ /* Definiera riktningar för portstift */ PORTB = (1< DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* Infoga nop för synkronisering*/ _NOP(); /* Läs portstift */ i = PINB; … |
Digital ingångsaktivering och vilolägen
Som visas i Bild 10-2, den digitala insignalen kan vara clamped till jord vid ingången av schmitt-triggern. Signalen betecknad SLEEP i figuren ställs in av MCU Sleep Controller i Power-down-läge för att undvika hög strömförbrukning om vissa insignaler lämnas flytande, eller har en analog signalnivå nära VCC/2.
SLEEP åsidosätts för portstift aktiverade som externa avbrottsstift. Om den externa avbrottsbegäran inte är aktiverad är SLEEP aktiv även för dessa stift. SLEEP åsidosätts också av olika andra alternativa funktioner som beskrivs i "Alternativa portfunktioner" på sidan 57.
Om en logisk hög nivå ("ett") finns på ett asynkront externt avbrottsstift konfigurerat som "Avbrott vid stigande kant, fallande kant eller någon logisk förändring på stift" medan det externa avbrottet inte är aktiverat, kommer motsvarande externa avbrottsflagga att ställas in när du återupptar från ovan nämnda viloläge, eftersom clamping i dessa vilolägen producerar den begärda logiska förändringen.
Oanslutna stift
Om några stift är oanvända, rekommenderas det att se till att dessa stift har en definierad nivå. Även om de flesta av de digitala ingångarna är inaktiverade i de djupa vilolägena enligt beskrivningen ovan, bör flytande ingångar undvikas för att minska strömförbrukningen i alla andra lägen där de digitala ingångarna är aktiverade (återställning, aktivt läge och viloläge).
Den enklaste metoden för att säkerställa en definierad nivå av ett oanvänt stift är att möjliggöra den interna uppdragningen. I detta fall kommer pull-up att inaktiveras under återställning. Om låg strömförbrukning under återställning är viktigt, rekommenderas att använda en extern pull-up eller pulldown. Att ansluta oanvända stift direkt till VCC eller GND rekommenderas inte, eftersom detta kan orsaka för höga strömmar om stiftet av misstag konfigureras som en utgång.
Alternativa portfunktioner
De flesta portstift har alternativa funktioner förutom att vara allmänna digitala I/O. Bild 10-5 visar hur portstiftets styrsignaler från den förenklade Bild 10-2 kan åsidosättas av alternativa funktioner. De överordnade signalerna kanske inte finns i alla portstift, men figuren fungerar som en allmän beskrivning som gäller alla portstift i AVR-mikrokontrollerfamiljen.
Tabell 10-2. Generisk beskrivning av överordnade signaler för alternativa funktioner
Signalnamn | Fullständigt namn | Beskrivning |
PUOE | Aktivera Pull-up Override | Om denna signal är inställd, styrs pull-up-aktiveringen av PUOV-signalen. Om denna signal rensas, aktiveras pull-up när
{DDxn, PORTxn, PUD} = 0b010. |
PUOV | Pull-up åsidosättande värde | Om PUOE är inställt, aktiveras/inaktiveras pull-up när PUOV ställs in/rensas, oavsett inställningen av DDxn-, PORTxn- och PUD-registerbitarna. |
DDOE | Åsidosätt datariktning aktivera | Om denna signal är inställd styrs utgångsdrivrutinaktiveringen av DDOV-signalen. Om denna signal rensas, aktiveras utgångsdrivrutinen av DDxn-registerbiten. |
DDOV | Datariktningsöverskridande värde | Om DDOE är inställt, aktiveras/inaktiveras utgångsdrivrutinen när DDOV ställs in/rensas, oavsett inställningen av DDxn-registerbiten. |
PVOE | Port Value Override Aktivera | Om denna signal är inställd och utgångsdrivrutinen är aktiverad, styrs portvärdet av PVOV-signalen. Om PVOE rensas och utgångsdrivrutinen är aktiverad, styrs portvärdet av PORTxn-registerbiten. |
PVOV | Port Value Override Value | Om PVOE är inställt, sätts portvärdet till PVOV, oavsett inställningen av PORTxn-registerbiten. |
PTOE | Port Toggle Override Aktivera | Om PTOE är inställt, inverteras PORTxn-registerbiten. |
DIEOE | Digital Input Enable Åsidosätt aktivera | Om denna bit är inställd, styrs Digital Input Enable av DIEOV-signalen. Om denna signal rensas, bestäms Digital Input Enable av MCU-tillståndet (normalt läge, viloläge). |
DIEOV | Digital Input Enable Override Value | Om DIEOE är inställt, aktiveras/inaktiveras den digitala ingången när DIEOV ställs in/rensas, oavsett MCU-tillståndet (normalt läge, viloläge). |
DI | Digital ingång | Detta är den digitala ingången för alternativa funktioner. I figuren är signalen ansluten till utgången på schmitt-triggern men före synkronisatorn. Om inte den digitala ingången används som en klockkälla, kommer modulen med alternativ funktion att använda sin egen synkroniserare. |
AIO | Analog ingång/utgång | Detta är den analoga ingången/utgången till/från alternativa funktioner. Signalen ansluts direkt till plattan och kan användas dubbelriktat. |
Följande underavsnitt beskriver kort de alternativa funktionerna för varje port och relaterar de överordnade signalerna till den alternativa funktionen. Se den alternativa funktionsbeskrivningen för ytterligare detaljer.
Alternativa funktioner för port B
Port B-stiften med alternativ funktion visas i Tabell 10-3.
Tabell 10-3. Port B-stift Alternativa funktioner
Port Pin | Alternativ funktion |
PB5 | ![]() ÅTERSTÄLL: Återställ stift dW: debugWIRE I/O ADC0: ADC-ingångskanal 0 PCINT5: Pin Change Interrupt, källa 5 |
PB4 | XTAL2: Kristalloscillatorutgång CLKO: Systemklockutgång ADC2: ADC-ingångskanal 2
OC1B: Timer/Räknare1 Jämför Match B-utgång PCINT4: Pin Change Interrupt 0, Source 4 |
PB3 | XTAL1: Kristalloscillatoringång CLKI: Extern klockingång ADC3: ADC-ingångskanal 3
OC1B: Komplementär timer/räknare1 Jämför Match B-utgång PCINT3: Pin Change Interrupt 0, Source 3 |
PB2 | SCK: Seriell klockingång ADC1: ADC-ingångskanal 1
T0: Timer/Räknare0 Klockkälla USCK: USI-klocka (Tre-trådsläge) SCL: USI-klocka (Tvåtrådsläge) INT0: Externt avbrott 0 Ingång PCINT2: Pin Change Interrupt 0, Källa 2 |
PB1 | MISO: SPI Master Data Input / Slave Data Output AIN1: Analog Comparator, Negativ Input OC0B: Timer/Counter0 Jämför Match B Output OC1A: Timer/Counter1 Jämför Match A Output DO: USI Data Output (tretrådsläge) PCINT1:Pin Change Interrupt 0, Källa 1 |
PB0 | MOSI:: SPI Master Data Output / Slave Data Input AIN0: Analog komparator, positiv ingång
OC0A: Timer/Counter0 Jämför Match A-utgång OC1A: Komplementär timer/räknare1 Jämför Matcha A-utgång DI: USI-dataingång (tretrådsläge) SDA: USI-dataingång (tvåtrådsläge) AREF: Extern analog referens PCINT0: Pin Change Interrupt 0, Source 0 |
Port B, Bit 5 – RESET/dW/ADC0/PCINT5
RESET: Extern återställningsingång är aktiv låg och aktiverad genom att avprogrammera (“1”) RSTDISBL-säkringen. Pullup aktiveras och utgångsdrivrutin och digital ingång avaktiveras när stiftet används som RESET-stift.
dW: När debugWIRE Enable (DWEN) säkringen är programmerad och låsbitarna är oprogrammerade, aktiveras debugWIRE-systemet i målenheten. ÅTERSTÄLLNINGsportstiftet är konfigurerat som ett wire-AND (open-drain) dubbelriktat I/O-stift med pull-up aktiverat och blir kommunikationsporten mellan mål och emulator.
ADC0: Analog till digital omvandlare, kanal 0.
PCINT5: Pin Change Interrupt källa 5.
Port B, Bit 4 – XTAL2/CLKO/ADC2/OC1B/PCINT4
XTAL2: Chip Clock Oscillator stift 2. Används som klockstift för alla chip klockkällor förutom intern kalibrerbar RC Oscillator och extern klocka. När det används som klockstift kan stiftet inte användas som I/O-stift. När du använder intern kalibrerbar RC-oscillator eller extern klocka som chip-klockkällor, fungerar PB4 som ett vanligt I/O-stift.
CLKO: Den delade systemklockan kan matas ut på stiftet PB4. Den delade systemklockan kommer att matas ut om CKOUT-säkringen är programmerad, oavsett inställningarna för PORTB4 och DDB4. Den kommer också att matas ut under återställning.
ADC2: Analog till digital omvandlare, kanal 2.
OC1B: Output Compare Match-utgång: PB4-stiftet kan fungera som en extern utgång för Timer/Counter1 Compare Match B när den är konfigurerad som en utgång (DDB4-uppsättning). OC1B-stiftet är också utgångsstiftet för PWM-lägestimerfunktionen.
PCINT4: Pin Change Interrupt källa 4.
Port B, Bit 3 – XTAL1/CLKI/ADC3/OC1B/PCINT3
XTAL1: Chip Clock Oscillator stift 1. Används för alla chipklockkällor förutom intern kalibrerbar RC-oscillator. När det används som klockstift kan stiftet inte användas som I/O-stift.
CLKI: Klockingång från en extern klockkälla, se "Extern klocka" på sidan 26.
ADC3: Analog till digital omvandlare, kanal 3.
OC1B: Inverterad utgång Jämför Match-utgång: PB3-stiftet kan fungera som en extern utgång för Timer/Counter1 Jämför Match B när den är konfigurerad som en utgång (DDB3-uppsättning). OC1B-stiftet är också det inverterade utgångsstiftet för PWM-lägestimerfunktionen.
PCINT3: Pin Change Interrupt källa 3.
Port B, bit 2 – SCK/ADC1/T0/USCK/SCL/INT0/PCINT2
SCK: Master Clock-utgång, Slave Clock-ingångsstift för SPI-kanal. När SPI:n är aktiverad som en slav, konfigureras detta stift som en ingång oavsett inställningen för DDB2. När SPI:n är aktiverad som en master styrs datariktningen för detta stift av DDPB2. När stiftet tvingas av SPI att vara en ingång, kan pull-up fortfarande styras av PORTB2-biten.
ADC1: Analog till digital omvandlare, kanal 1.
T0: Timer/Räknare0 räknarekälla.
USCK: Universal Serial Interface Clock med tre trådar.
SCL: Tvåtrådsläge Serial Clock för USI Tvåtrådsläge.
INT0: Extern avbrottskälla 0.
PCINT2: Pin Change Interrupt källa 2.
Port B, Bit 1 – MISO/AIN1/OC0B/OC1A/DO/PCINT1
MISO: Master Data input, Slave Data output pin för SPI kanal. När SPI är aktiverad som en master, konfigureras denna pin som en ingång oavsett inställningen för DDB1. När SPI är aktiverad som en slav styrs datariktningen för denna pin av DDB1. När stiftet tvingas av SPI att vara en ingång kan pull-up fortfarande styras av PORTB1-biten.
AIN1: Analog komparator negativ ingång. Konfigurera portstiftet som ingång med den interna pull-upen avstängd för att undvika att den digitala portfunktionen stör funktionen hos den analoga komparatorn.
OC0B: Output Compare Match output. PB1-stiftet kan fungera som en extern utgång för Timer/Counter0 Jämför Match B. PB1-stiftet måste konfigureras som en utgång (DDB1-uppsättning (ett)) för att tjäna denna funktion. OC0B-stiftet är också utgångsstiftet för PWM-lägestimerfunktionen.
OC1A: Output Compare Match-utgång: PB1-stiftet kan fungera som en extern utgång för Timer/Counter1 Compare Match B när den är konfigurerad som en utgång (DDB1-uppsättning). OC1A-stiftet är också utgångsstiftet för PWM-lägestimerfunktionen.
GÖR: Tretrådsläge Universal Serial Interface Datautgång. Tretrådsläge Datautgång åsidosätter PORTB1-värdet och den drivs till porten när datariktningsbiten DDB1 är inställd (ett). PORTB1 aktiverar fortfarande pull-up, om riktningen anges och PORTB1 är inställd (ett).
PCINT1: Pin Change Interrupt källa 1.
Port B, bit 0 – MOSI/AIN0/OC0A/OC1A/DI/SDA/AREF/PCINT0
MOSI: SPI-masterdatautgång, slavdataingång för SPI-kanal. När SPI:n är aktiverad som en slav, konfigureras detta stift som en ingång oavsett inställningen för DDB0. När SPI är aktiverad som en master styrs datariktningen för detta stift av DDB0. När stiftet tvingas av SPI att vara en ingång, kan pull-up fortfarande styras av PORTB0-biten.
AIN0: Analog komparator positiv ingång. Konfigurera portstiftet som ingång med den interna pull-upen avstängd för att undvika att den digitala portfunktionen stör funktionen hos den analoga komparatorn.
OC0A: Output Compare Match output. PB0-stiftet kan fungera som en extern utgång för Timer/Counter0 Compare Match A när den är konfigurerad som en utgång (DDB0-uppsättning (ett)). OC0A-stiftet är också utgångsstiftet för PWM-lägestimerfunktionen.
OC1A: Inverterad utgång Jämför Matchning: PB0-stiftet kan fungera som en extern utgång för Timer/Counter1 Jämför Match B när den är konfigurerad som en utgång (DDB0-uppsättning). OC1A-stiftet är också det inverterade utgångsstiftet för PWM-lägestimerfunktionen.
SDA: Serial Interface Data i tvåtrådsläge.
AREF: Extern analog referens för ADC. Pullup- och utgångsdrivrutinen är inaktiverade på PB0 när stiftet används som en extern referens eller Internal Voltage Referens med extern kondensator vid AREF-stiftet.
DI: Dataingång i USI tretrådsläge. USI Tretrådsläge åsidosätter inte normala portfunktioner, så stift måste konfigureras som en ingång för DI-funktion.
PCINT0: Pin Change Interrupt källa 0.
Tabell 10-4 och Tabell 10-5 relatera de alternativa funktionerna för Port B till de överordnade signalerna som visas i Bild 10-5 på sid 58.
Tabell 10-4. Åsidosättande av signaler för alternativa funktioner i PB[5:3]
Signalnamn | PB5/RESET/ADC0/PCINT5 | PB4/ADC2/XTAL2/ OC1B/PCINT4 | PB3/ADC3/XTAL1/ OC1B/PCINT3 |
PUOE | ![]() |
0 | 0 |
PUOV | 1 | 0 | 0 |
DDOE | RSTDISBL(1) • DWEN(1) | 0 | 0 |
DDOV | debugWire Transmit | 0 | 0 |
PVOE | 0 | OC1B Aktivera | ![]() OC1B Aktivera |
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-ingång | PCINT4-ingång | PCINT3-ingång |
AIO | RESET-ingång, ADC0-ingång | ADC2-ingång | ADC3-ingång |
Obs: när säkringen är "0" (programmerad).
Tabell 10-5. Åsidosättande av signaler för alternativa funktioner i PB[2:0]
Signalnamn | 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 Enable + OC1A Enable + USI_THREE_WIRE | ![]() OC0A Enable + OC1A Enable + (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-ingång |
PCINT1-ingång | DI/SDA/PCINT0-ingång |
AIO | ADC1-ingång | Analog komparator negativ ingång | Analog komparator positiv ingång |
Registerbeskrivning
MCUCR – MCU Control Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUDDING | SE | SM1 | SM0 | BODSE | ISC01 | ISC00 | MCUCR |
Läs/skriv | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 6 – PUD: Pull-up Disable
När denna bit skrivs till en, avaktiveras pull-ups i I/O-portarna även om DDxn- och PORTxn-registren är konfigurerade för att aktivera pull-ups ({DDxn, PORTxn} = 0b01). Ser "Konfigurera stiftet" på sidan 54 för mer information om den här funktionen.
PORTB – Port B Data Register
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x18 | – | – | PORTB5 | PORTB4 | PORTB3 | PORTB2 | PORTB1 | PORTB0 | PORTB |
Läs/skriv | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Initialt värde | 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/skriv | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Initialt värde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PINB – Port B Input Pins Adress
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x16 | – | – | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 | PINB |
Läs/skriv | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Initialt värde | 0 | 0 | N/A | N/A | N/A | N/A | N/A | N/A |
8-bitars timer/räknare0 med PWM
Drag
Två oberoende utgångsjämförelser
Jämför register med dubbelbuffrad utgång
Rensa timer vid Compare Match (Auto Reload)
Felfri, faskorrigerad pulsbreddsmodulator (PWM)
Variabel PWM-period
Frekvensgenerator
Tre oberoende avbrottskällor (TOV0, OCF0A och OCF0B)
Överview
Timer/Counter0 är en allmän 8-bitars timer/räknare-modul, med två oberoende utgångsjämförelser och med PWM-stöd. Det tillåter exakt programkörningstid (händelsehantering) och våggenerering.
Ett förenklat blockschema över 8-bitars timer/räknare visas i Bild 11-1. För den faktiska placeringen av I/O-stift, se "Pinout ATtiny25/45/85" på sidan 2. CPU-tillgängliga I/O-register, inklusive I/O-bitar och I/O-stift, visas i fet stil. Det enhetsspecifika I/O-registret och bitplatserna listas i "Registrera beskrivning" på sidan 77.
Timer/Counter (TCNT0) och Output Compare Register (OCR0A och OCR0B) är 8-bitars register. Avbrottsbegäran (förkortat till Int.Req. i figuren) signaler är alla synliga i Timer Interrupt Flag Register (TIFR). Alla avbrott är individuellt maskerade med Timer Interrupt Mask Register (TIMSK). TIFR och TIMSK visas inte i figuren.
Timern/räknaren kan klockas internt, via förskalaren eller av en extern klockkälla på T0-stiftet. Klockvalslogikblocket styr vilken klockkälla och flank som timern/räknaren använder för att öka (eller minska) dess värde. Timern/räknaren är inaktiv när ingen klockkälla är vald. Utsignalen från klockvalslogiken kallas timerklockan (clkT0).
De dubbelbuffrade utgångsjämförelseregistren (OCR0A och OCR0B) jämförs alltid med Timer/Counter-värdet. Resultatet av jämförelsen kan användas av Waveform Generator för att generera en PWM eller variabel frekvensutgång på Output Compare-stiften (OC0A och OC0B). Se "Output Compare Unit" på sidan 69. för detaljer. Compare Match-händelsen kommer också att ställa in Compare Flag (OCF0A eller OCF0B) som kan användas för att generera en Output Compare-avbrottsbegäran.
Definitioner
Många register- och bitreferenser i detta avsnitt är skrivna i allmän form. Ett litet "n" ersätter timer-/räknarens nummer, i det här fallet 0. Ett gement "x" ersätter Output Compare Unit, i det här fallet Compare Unit A eller Compare Unit B. Men när du använder registret eller biten definierar i ett program måste den exakta formen användas, dvs TCNT0 för att komma åt Timer/Counter0-räknarvärdet och så vidare.
Definitionerna i Tabell 11-1 används också flitigt i hela dokumentet.
Tabell 11-1. Definitioner
Konstant | Beskrivning |
BOTTEN | Räknaren når BOTTOM när den blir 0x00 |
MAX | Räknaren når sitt MAXimum när den blir 0xFF (decimal 255) |
BÄSTA | Räknaren når TOPPEN när den blir lika med det högsta värdet i räknesekvensen. TOP-värdet kan tilldelas det fasta värdet 0xFF (MAX) eller värdet som lagras i OCR0A-registret. Tilldelningen beror på driftsättet |
Timer/Counter Prescaler och klockkällor
Timern/räknaren kan klockas av en intern eller extern klockkälla. Klockkällan väljs av klockvalslogiken som styrs av klockvalsbitarna (c) som är belägna i timer/räknare O-styrregistret (TCCROB).
Intern klockkälla med Prescaler
Timer/Counter0 kan klockas direkt av systemklockan (genom att ställa in CS0[2:0] = 1). Detta ger den snabbaste operationen, med en maximal timer/räknarklockfrekvens som är lika med systemets klockfrekvens (fCLK_I/O). Alternativt kan en av fyra uttag från förskalaren användas som en klockkälla. Den förskalade klockan har en frekvens på antingen
Prescaler Reset
Prescalern är fritt igång, dvs den fungerar oberoende av klockvalslogiken för Timer/Counter0. Eftersom förskalaren inte påverkas av timern/räknarens klocka, kommer tillståndet för förskalaren att få konsekvenser för situationer där en förskalad klocka används. Ett example av en förskalningsartefakt är när timern/räknaren är aktiverad och klockad av förskalaren (6 > CS0[2:0] > 1). Antalet systemklockcykler från det att timern är aktiverad tills den första räkningen inträffar kan vara från 1 till N+1 systemklockcykler, där N är lika med förskalningsdelaren (8, 64, 256 eller 1024).
Det är möjligt att använda Prescaler Reset för att synkronisera timern/räknaren till programkörning.
Extern klockkälla
En extern klockkälla applicerad på T0-stiftet kan användas som timer/räknare (clkT0). T0-stiftet är sampleds en gång varje systemklockcykel av stiftsynkroniseringslogiken. Den synkroniserade (sampled) signalen skickas sedan
genom kantdetektorn. Bild 11-2 visar ett funktionellt ekvivalent blockschema över TO-synkroniseringen och kantdetektorlogiken. Registren klockas vid den positiva kanten av den interna systemklockan (clkI/O). Spärren är transparent i den interna systemklockans höga period.
Kantdetektorn genererar en clkT0-puls för varje positiv (CS0[2:0] = 7) eller negativ (CS0[2:0] = 6) flank som den detekterar.
OCR0x-registren är dubbelbuffrade när någon av pulsbreddsmodulationslägena (PWM) används. För de normala driftlägena och Clear Timer on Compare (CTC) är dubbelbuffringen inaktiverad. Den dubbla buffringen synkroniserar uppdateringen av OCR0x Compare Register till antingen toppen eller botten av räknesekvensen. Synkroniseringen förhindrar uppkomsten av udda långa, icke-symmetriska PWM-pulser, vilket gör utgången glitchfri.
OCR0x-registeråtkomsten kan verka komplicerad, men så är inte fallet. När dubbelbuffring är aktiverad har CPU:n åtkomst till OCR0x-buffertregistret, och om dubbelbuffring är inaktiverad kommer CPU:n direkt åt OCR0x.
Tvinga utgångsjämförelse
I icke-PWM-vågformsgenereringslägen kan matchningsutgången från komparatorn tvingas fram genom att skriva en etta till Force Output Compare-biten (FOC0x). Framtvingande av Compare Match kommer inte att ställa in OCF0x-flaggan eller ladda om/rensa timern, men OC0x-stiftet kommer att uppdateras som om en riktig Compare Match hade inträffat (COM0x[1:0]-bitarnas inställningar definierar om OC0x-stiftet är satt, nollställt eller växlade).
Jämför Match Blocking av TCNT0 Write
Alla CPU-skrivoperationer till TCNT0-registret kommer att blockera alla jämförelsematchningar som inträffar i nästa timerklockcykel, även när timern är stoppad. Denna funktion gör att OCR0x kan initieras till samma värde som TCNT0 utan att utlösa ett avbrott när timern/räknarklockan är aktiverad.
Använda utgångsjämförelseenheten
Eftersom skrivning av TCNT0 i vilket funktionsläge som helst kommer att blockera alla jämför matchningar för en klockcykel med timer, finns det risker med att ändra TCNT0 när du använder utgångsjämförelseenheten, oberoende av om timern/räknaren är igång eller inte. Om värdet som skrivits till TCNT0 är lika med OCR0x-värdet, kommer Compare Match att missas, vilket resulterar i felaktig vågformsgenerering. På samma sätt, skriv inte TCNT0-värdet lika med BOTTOM när räknaren räknar ner.
Installationen av OC0x bör utföras innan du ställer in datariktningsregistret för portstiftet till utmatning. Det enklaste sättet att ställa in OC0x-värdet är att använda Strobbitarna Force Output Compare (FOC0x) i normalt läge. OC0x-registren behåller sina värden även när de växlar mellan vågformsgenereringslägen.
Var medveten om att COM0x[1:0]-bitarna inte är dubbelbuffrade tillsammans med jämförelsevärdet. Ändring av COM0x[1:0]-bitarna träder i kraft omedelbart.
Jämför Match Output Unit
Bitarna för jämförelse utdata (COM0x[1:0]) har två funktioner. Vågformsgeneratorn använder COM0x[1:0]-bitarna för att definiera tillståndet Output Compare (OC0x) vid nästa Compare Match. Dessutom styr COM0x[1:0]-bitarna OC0x-stiftutgångskällan. Bild 11-6 visar ett förenklat schema över logiken som påverkas av COM0x[1:0]-bitinställningen. I/O-registren, I/O-bitarna och I/O-stiften i figuren visas i fet stil. Endast de delar av de allmänna I/O-portkontrollregistren (DDR och PORT) som påverkas av COM0x[1:0]-bitarna visas. När man hänvisar till OC0x-tillståndet är referensen för det interna OC0x-registret, inte OC0x-stiftet. Om en systemåterställning inträffar, återställs OC0x-registret till "0".
När OC0A/OC0B är ansluten till I/O-stiftet, beror funktionen för COM0A[1:0]/COM0B[1:0]-bitarna på WGM0[2:0]-bitinställningen. Tabell 11-2 visar COM0x[1:0]-bitfunktionen när WGM0[2:0]-bitarna är inställda på normalt eller CTC-läge (icke-PWM).
Tabell 11-2. Jämför utgångsläge, icke-PWM-läge
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskrivning |
0 | 0 | Normal portdrift, OC0A/OC0B frånkopplad. |
0 | 1 | Växla OC0A/OC0B på Compare Match |
1 | 0 | Rensa OC0A/OC0B på Compare Match |
1 | 1 | Ställ in OC0A/OC0B på Compare Match |
Tabell 11-3 visar COM0x[1:0]-bitfunktionen när WGM0[2:0]-bitarna är inställda på snabbt PWM-läge.
Tabell 11-3. Jämför Output Mode, Fast PWM Mode(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskrivning |
0 | 0 | Normal portdrift, OC0A/OC0B frånkopplad. |
0 | 1 | Reserverad |
1 | 0 | Rensa OC0A/OC0B på Compare Match, ställ in OC0A/OC0B på BOTTOM (icke-inverterande läge) |
1 | 1 | Ställ in OC0A/OC0B på Compare Match, rensa OC0A/OC0B längst ner (inverterande läge) |
Obs: Ett specialfall inträffar när OCR0A eller OCR0B är lika med TOP och COM0A1/COM0B1 är inställd. I det här fallet ignoreras jämförelsematchningen, men inställningen eller rensningen görs NEDERST. Ser "Snabbt PWM-läge" på sidan 73 för mer information.
Tabell 11-4 visar COM0x[1:0]-bitfunktionen när WGM0[2:0]-bitarna är inställda på faskorrekt PWM-läge.
Tabell 11-4. Jämför Output Mode, Phase Correct PWM Mode(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskrivning |
0 | 0 | Normal portdrift, OC0A/OC0B frånkopplad. |
0 | 1 | Reserverad |
1 | 0 | Rensa OC0A/OC0B på Compare Match vid uppräkning. Ställ in OC0A/OC0B på Compare Match vid nedräkning. |
1 | 1 | Ställ in OC0A/OC0B på Compare Match vid uppräkning. Rensa OC0A/OC0B på Compare Match vid nedräkning. |
Obs: 1. Ett specialfall inträffar när OCR0A eller OCR0B är lika med TOP och COM0A1/COM0B1 är inställd. I detta fall ignoreras Jämför matchningen, men inställningen eller rensningen görs på TOPP. Ser "Faskorrigering PWM-läge" på sidan 74 för mer information.
Bitar 3:2 – Upplösning: Reserverade bitar
Dessa bitar är reserverade bitar i ATtiny25/45/85 och kommer alltid att läsas som noll.
Bitar 1:0 – WGM0[1:0]: Vågformsgenereringsläge
I kombination med WGM02-biten som finns i TCCR0B-registret styr dessa bitar räknarens räknesekvens, källan för maximalt (TOP) räknarvärde och vilken typ av vågformsgenerering som ska användas, se Tabell 11-5. Driftlägen som stöds av Timer/Räknare-enheten är: Normalläge (räknare), Clear Timer on Compare Match (CTC) läge och två typer av Pulse Width Modulation (PWM) lägen (se "Användningssätt" på sidan 71).
Tabell 11-5. Waveform Generation Mode Bit Beskrivning
Läge | WGM 02 | WGM 01 | WGM 00 | Timer/räknare Driftläge | BÄSTA | Uppdatering av OCRx kl | TOV-flagga på |
0 | 0 | 0 | 0 | Normal | 0xFF | Omedelbar | MAX(1) |
1 | 0 | 0 | 1 | PWM, Faskorrigerad | 0xFF | BÄSTA | BOTTEN(2) |
2 | 0 | 1 | 0 | CTC | OCRA | Omedelbar | MAX(1) |
3 | 0 | 1 | 1 | Snabb PWM | 0xFF | BOTTEN(2) | MAX(1) |
4 | 1 | 0 | 0 | Reserverad | – | – | – |
5 | 1 | 0 | 1 | PWM, Faskorrigerad | OCRA | BÄSTA | BOTTEN(2) |
6 | 1 | 1 | 0 | Reserverad | – | – | – |
7 | 1 | 1 | 1 | Snabb PWM | OCRA | BOTTEN(2) | BÄSTA |
Bit 7 – FOC0A: Force Output Compare A
FOC0A-biten är endast aktiv när WGM-bitarna anger ett icke-PWM-läge.
Men för att säkerställa kompatibilitet med framtida enheter måste denna bit ställas in på noll när TCCR0B skrivs när man arbetar i PWM-läge. När du skriver en logisk etta till FOC0A-biten, tvingas en omedelbar Compare Match på vågformsgenereringsenheten. OC0A-utgången ändras enligt dess COM0A[1:0]-bitars inställning. Observera att FOC0A-biten är implementerad som en strobe. Därför är det värdet som finns i COM0A[1:0]-bitarna som bestämmer effekten av den påtvingade jämförelsen.
En FOC0A-blixt kommer inte att generera något avbrott, inte heller kommer den att rensa timern i CTC-läge med OCR0A som TOP. FOC0A-biten läses alltid som noll.
Bit 6 – FOC0B: Force Output Compare B
FOC0B-biten är endast aktiv när WGM-bitarna anger ett icke-PWM-läge.
Men för att säkerställa kompatibilitet med framtida enheter måste denna bit ställas in på noll när TCCR0B skrivs när man arbetar i PWM-läge. När du skriver en logisk etta till FOC0B-biten, tvingas en omedelbar Compare Match på vågformsgenereringsenheten. OC0B-utgången ändras enligt dess COM0B[1:0]-bitars inställning. Observera att FOC0B-biten är implementerad som en strobe. Därför är det värdet som finns i COM0B[1:0]-bitarna som bestämmer effekten av den påtvingade jämförelsen.
En FOC0B-blixt kommer inte att generera något avbrott, inte heller kommer den att rensa timern i CTC-läge med OCR0B som TOP.
FOC0B-biten läses alltid som noll.
Bitar 5:4 – Upplösning: Reserverade bitar
Dessa bitar är reserverade bitar i ATtiny25/45/85 och kommer alltid att läsas som noll.
Bit 3 – WGM02: Vågformsgenereringsläge
Se beskrivningen i “TCCR0A – Timer/Räknarkontrollregister A” på sidan 77.
Bitar 2:0 – CS0[2:0]: Val av klocka
De tre klockvalsbitarna väljer klockkällan som ska användas av timern/räknaren.
Tabell 11-6. Klocka Välj Bit Beskrivning
CS02 | CS01 | CS00 | Beskrivning |
0 | 0 | 0 | Ingen klockkälla (timer/räknare stoppad) |
0 | 0 | 1 | clkI/O/(Ingen förskalning) |
0 | 1 | 0 | clkI/O/8 (från förskalare) |
0 | 1 | 1 | clkI/O/64 (från förskalare) |
1 | 0 | 0 | clkI/O/256 (från förskalare) |
1 | 0 | 1 | clkI/O/1024 (från förskalare) |
1 | 1 | 0 | Extern klockkälla på T0-stift. Klocka på fallande kant. |
1 | 1 | 1 | Extern klockkälla på T0-stift. Klocka på stigande kant. |
Om externa stiftlägen används för Timer/Counter0, kommer övergångar på T0-stiftet att klocka räknaren även om stiftet är konfigurerat som en utgång. Denna funktion tillåter mjukvarukontroll av räkningen.
Räkna och jämför enheter
Timer/Räknare1 allmänna funktion beskrivs i asynkront läge och operationen i synkront läge nämns endast om det finns skillnader mellan dessa två lägen. Bild 12-2 visar Timer/Räknare 1 synkroniseringsregisterblockdiagram och synkroniseringsfördröjningar mellan registren. Observera att alla detaljer om klockporten inte visas i figuren. Registervärdena för Timer/Counter1 går igenom de interna synkroniseringsregistren, som orsakar ingångssynkroniseringsfördröjningen, innan de påverkar räknarfunktionen. Registren TCCR1, GTCCR, OCR1A, OCR1B och OCR1C kan läsas tillbaka direkt efter att registret skrivits. Återläsningsvärdena är fördröjda för Timer/Counter1 (TCNT1) registret och flaggor (OCF1A, OCF1B och TOV1), på grund av ingångs- och utgångssynkroniseringen.
Timer/Counter1 har en hög upplösning och en hög precisionsanvändning med lägre förskalningsmöjligheter. Den kan också stödja två exakta, höghastighets, 8-bitars pulsbreddsmodulatorer som använder klockhastigheter upp till 64 MHz (eller 32 MHz i låghastighetsläge). I detta läge fungerar Timer/Counter1 och utgångsjämförelseregistren som dubbla fristående PWM:er med icke-överlappande icke-inverterade och inverterade utgångar. Hänvisa till sid 86 för en detaljerad beskrivning av denna funktion. På samma sätt gör de höga förskalningsmöjligheterna denna enhet användbar för lägre hastighetsfunktioner eller exakta tidsfunktioner med sällsynta åtgärder.
Bild 12-2. Timer/Räknare 1 Synkroniseringsregister Blockdiagram.
Timer/Counter1 och förskalaren tillåter körning av CPU från valfri klockkälla medan förskalaren arbetar på den snabba 64 MHz (eller 32 MHz i låghastighetsläge) PCK-klockan i asynkront läge.
Observera att systemets klockfrekvens måste vara lägre än en tredjedel av PCK-frekvensen. Synkroniseringsmekanismen för den asynkrona timern/räknaren1 behöver minst två kanter av PCK när systemklockan är hög. Om frekvensen på systemklockan är för hög är det en risk att data eller styrvärden går förlorade.
Följande Bild 12-3 visar blockschemat för Timer/Räknare1.
Tabell 12-1. Jämför läge Välj i PWM-läge
COM1x1 | COM1x0 | Effekt på utdata Jämför stift |
0 | 0 | OC1x inte ansluten. OC1x inte ansluten. |
0 | 1 | OC1x rensades vid jämför match. Ställ in när TCNT1 = $00. OC1x inställd på jämför match. Raderas när TCNT1 = $00. |
1 | 0 | OC1x rensades vid jämför match. Ställ in när TCNT1 = $00. OC1x inte ansluten. |
1 | 1 | OC1x Ställ in på jämför match. Raderas när TCNT1= $00. OC1x inte ansluten. |
ADC-egenskaper
Tabell 21-8. ADC-egenskaper, Single Ended Channels. TA = -40°C till +85°C
Symbol | Parameter | Skick | Min | Typ | Max | Enheter |
Upplösning | 10 | Bits | ||||
Absolut noggrannhet (inklusive INL, DNL och kvantiserings-, förstärknings- och offsetfel) | VREF = 4V, VCC = 4V,
ADC-klocka = 200 kHz |
2 | LSB | |||
VREF = 4V, VCC = 4V,
ADC-klocka = 1 MHz |
3 | LSB | ||||
VREF = 4V, VCC = 4V,
ADC-klocka = 200 kHz Bullerreduceringsläge |
1.5 | LSB | ||||
VREF = 4V, VCC = 4V,
ADC-klocka = 1 MHz Bullerreduceringsläge |
2.5 | LSB | ||||
Integral icke-linjäritet (INL) (noggrannhet efter offset och förstärkningskalibrering) | VREF = 4V, VCC = 4V,
ADC-klocka = 200 kHz |
1 | LSB | |||
Differentiell icke-linjäritet (DNL) | VREF = 4V, VCC = 4V,
ADC-klocka = 200 kHz |
0.5 | LSB | |||
Få fel | VREF = 4V, VCC = 4V,
ADC-klocka = 200 kHz |
2.5 | LSB | |||
Förskjutningsfel | VREF = 4V, VCC = 4V,
ADC-klocka = 200 kHz |
1.5 | LSB | |||
Konverteringstid | Gratis pågående konvertering | 14 | 280 | µs | ||
Klockfrekvens | 50 | 1000 | kHz | |||
VIN | Ingång Voltage | GND | VREF | V | ||
Ingångsbandbredd | 38.4 | kHz | ||||
AREF | Extern referens Voltage | 2.0 | VCC | V | ||
VINT | Intern voltage Referens | 1.0 | 1.1 | 1.2 | V | |
Intern 2.56V referens (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | 32 | kΩ | ||||
REGN | Analogt ingångsmotstånd | 100 | MΩ | |||
ADC-utgång | 0 | 1023 | LSB |
Obs: 1. Värden är endast riktlinjer.
Tabell 21-9. ADC-egenskaper, differentiella kanaler (unipolärt läge). TA = -40°C till +85°C
Symbol | Parameter | Skick | Min | Typ | Max | Enheter |
Upplösning | Vinst = 1x | 10 | Bits | |||
Vinst = 20x | 10 | Bits | ||||
Absolut noggrannhet (inklusive INL, DNL och
Kvantiserings-, förstärknings- och offsetfel) |
Vinst = 1x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
10.0 | LSB | |||
Vinst = 20x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
20.0 | LSB | ||||
Integral icke-linjäritet (INL) (noggrannhet efter offset- och förstärkningskalibrering) | Vinst = 1x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
4.0 | LSB | |||
Vinst = 20x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
10.0 | LSB | ||||
Få fel | Vinst = 1x | 10.0 | LSB | |||
Vinst = 20x | 15.0 | LSB | ||||
Förskjutningsfel | Vinst = 1x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
3.0 | LSB | |||
Vinst = 20x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
4.0 | LSB | ||||
Konverteringstid | Gratis pågående konvertering | 70 | 280 | µs | ||
Klockfrekvens | 50 | 200 | kHz | |||
VIN | Ingång Voltage | GND | VCC | V | ||
VDIFF | Ingångsdifferential Voltage | VREF/vinst | V | |||
Ingångsbandbredd | 4 | kHz | ||||
AREF | Extern referens Voltage | 2.0 | VCC – 1.0 | V | ||
VINT | Intern voltage Referens | 1.0 | 1.1 | 1.2 | V | |
Intern 2.56V referens (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | Referens ingångsmotstånd | 32 | kΩ | |||
REGN | Analogt ingångsmotstånd | 100 | MΩ | |||
ADC-konverteringsutgång | 0 | 1023 | LSB |
Obs: Värden är endast riktlinjer.
Tabell 21-10. ADC-egenskaper, differentialkanaler (bipolärt läge). TA = -40°C till +85°C
Symbol | Parameter | Skick | Min | Typ | Max | Enheter |
Upplösning | Vinst = 1x | 10 | Bits | |||
Vinst = 20x | 10 | Bits | ||||
Absolut noggrannhet (inklusive INL, DNL och
Kvantiserings-, förstärknings- och offsetfel) |
Vinst = 1x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
8.0 | LSB | |||
Vinst = 20x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
8.0 | LSB | ||||
Integral icke-linjäritet (INL) (noggrannhet efter offset- och förstärkningskalibrering) | Vinst = 1x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
4.0 | LSB | |||
Vinst = 20x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
5.0 | LSB | ||||
Få fel | Vinst = 1x | 4.0 | LSB | |||
Vinst = 20x | 5.0 | LSB | ||||
Förskjutningsfel | Vinst = 1x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
3.0 | LSB | |||
Vinst = 20x
VREF = 4V, VCC = 5V ADC-klocka = 50 – 200 kHz |
4.0 | LSB | ||||
Konverteringstid | Gratis pågående konvertering | 70 | 280 | µs | ||
Klockfrekvens | 50 | 200 | kHz | |||
VIN | Ingång Voltage | GND | VCC | V | ||
VDIFF | Ingångsdifferential Voltage | VREF/vinst | V | |||
Ingångsbandbredd | 4 | kHz | ||||
AREF | Extern referens Voltage | 2.0 | VCC – 1.0 | V | ||
VINT | Intern voltage Referens | 1.0 | 1.1 | 1.2 | V | |
Intern 2.56V referens (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | Referens ingångsmotstånd | 32 | kΩ | |||
REGN | Analogt ingångsmotstånd | 100 | MΩ | |||
ADC-konverteringsutgång | -512 | 511 | LSB |
Sammanfattning av instruktionsuppsättningen
Mnemonics | Operander | Beskrivning | Drift | Flaggor | #Klockor |
ARITMETIK OCH LOGIKINSTRUKTIONER | |||||
TILLÄGGA | Rd, Rr | Lägg till två register | Rd ← Rd + Rr | Z, C, N, V, H | 1 |
ADC | Rd, Rr | Lägg till med Carry two Register | Rd ← Rd + Rr + C | Z, C, N, V, H | 1 |
ADIW | Rdl,K | Lägg till Immediate till Word | Rdh:Rdl ← Rdh:Rdl + K | Z, C, N, V, S | 2 |
SUB | Rd, Rr | Subtrahera två register | Rd ← Rd – Rr | Z, C, N, V, H | 1 |
SUBI | Rd, K | Subtrahera konstant från registret | Rd ← Rd – K | Z, C, N, V, H | 1 |
SBC | Rd, Rr | Subtrahera med Bär två register | Rd ← Rd – Rr – C | Z, C, N, V, H | 1 |
SBCI | Rd, K | Subtrahera med bärkonstant från Reg. | Rd ← Rd – K – C | Z, C, N, V, H | 1 |
SBIW | Rdl,K | Subtrahera Omedelbar från Word | Rdh:Rdl ← Rdh:Rdl – K | Z, C, N, V, S | 2 |
OCH | Rd, Rr | Logiska OCH-register | Rd ← Rd ∙ Rr | Z,N,V | 1 |
ANDI | Rd, K | Logisk OCH Register och Konstant | Rd ← Rd ∙ K | Z,N,V | 1 |
OR | Rd, Rr | Logiska ELLER-register | Rd ← Rd v Rr | Z,N,V | 1 |
ORI | Rd, K | Logiskt ELLER Register och konstant | Rd ← Rd v K | Z,N,V | 1 |
EOR | Rd, Rr | Exklusiva ELLER-register | Rd ← Rd ⊕ Rr | Z,N,V | 1 |
COM | Rd | Ens komplement | Rd ← 0xFF − Rd | Z,C,N,V | 1 |
NEG | Rd | Tvås komplement | Rd ← 0x00 − Rd | Z, C, N, V, H | 1 |
SBR | Rd,K | Ställ in bit(ar) i registret | Rd ← Rd v K | Z,N,V | 1 |
CBR | Rd,K | Rensa bit(ar) i registret | Rd ← Rd ∙ (0xFF – K) | Z,N,V | 1 |
INC | Rd | Ökning | Rd ← Rd + 1 | Z,N,V | 1 |
DEC | Rd | Minskning | Rd ← Rd − 1 | Z,N,V | 1 |
TST | Rd | Testa för noll eller minus | Rd ← Rd ∙ Rd | Z,N,V | 1 |
CLR | Rd | Rensa register | Rd ← Rd ⊕ Rd | Z,N,V | 1 |
SER | Rd | Ställ in register | Rd ← 0xFF | Ingen | 1 |
GREENINSTRUKTIONER | |||||
RJMP | k | Relativt hopp | PC ← PC + k + 1 | Ingen | 2 |
IJMP | Indirekt hoppa till (Z) | PC ← Z | Ingen | 2 | |
RINGA | k | Relativt subrutinsamtal | PC ← PC + k + 1 | Ingen | 3 |
ICALL | Indirekt samtal till (Z) | PC ← Z | Ingen | 3 | |
RÖTA | Subrutin Return | PC ← STAPEL | Ingen | 4 | |
NÄTVERK | Avbryt retur | PC ← STAPEL | I | 4 | |
CPSE | Rd, Rr | Jämför, Hoppa över om lika | om (Rd = Rr) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
CP | Rd, Rr | Jämföra | Rd − Rr | Z, N, V, C, H | 1 |
CPC | Rd, Rr | Jämför med Carry | Rd − Rr − C | Z, N, V, C, H | 1 |
KPI | Rd,K | Jämför Register med Immediate | Rd − K | Z, N, V, C, H | 1 |
SBRC | Rr, b | Hoppa över om bit i registret rensades | om (Rr(b)=0) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
SBRS | Rr, b | Hoppa över om bit i registret är inställt | om (Rr(b)=1) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
SBIC | P, b | Hoppa över om bit i I/O-registret rensades | om (P(b)=0) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
SBIS | P, b | Hoppa över om Bit i I/O-register är inställt | om (P(b)=1) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
BRBS | s, k | Filial om statusflagga är inställd | om (SREG(s) = 1) så PC←PC+k + 1 | Ingen | 1/2 |
BRBC | s, k | Filial om statusflaggan rensas | om (SREG(s) = 0) så PC←PC+k + 1 | Ingen | 1/2 |
BREQ | k | Filial om lika | om (Z = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRNE | k | Filial om inte lika | om (Z = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRCS | k | Gren om bärset | om (C = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRCC | k | Filial om Carry Cleared | om (C = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRSH | k | Gren om samma eller högre | om (C = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRLO | k | Gren om lägre | om (C = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRMI | k | Filial om Minus | om (N = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRPL | k | Filial om Plus | om (N = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRGE | k | Filial om större eller lika, signerad | om (N ⊕ V= 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRLT | k | Filial om mindre än noll, signerad | om (N ⊕ V= 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRHS | k | Gren om Half Carry Flag Set | om (H = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRHC | k | Filial om Half Carry Flag rensas | om (H = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRTS | k | Gren om T Flag Set | om (T = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRTC | k | Gren om T-flaggan rensas | om (T = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRVS | k | Förgrena sig om överflödesflaggan är inställd | om (V = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRVC | k | Förgrena sig om överflödesflaggan rensas | om (V = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
KORT | k | Filial om avbrott är aktiverat | om (I = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRID | k | Filial om avbrott är inaktiverat | om (I = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BIT OCH BIT-TESTINSTRUKTIONER | |||||
SBI | P,b | Ställ in bit i I/O-registret | I/O(P,b) ← 1 | Ingen | 2 |
CBI | P,b | Rensa bit i I/O-registret | I/O(P,b) ← 0 | Ingen | 2 |
LSL | Rd | Logisk växling åt vänster | Rd(n+1) ← Rd(n), Rd(0) ← 0 | Z,C,N,V | 1 |
LSR | Rd | Logisk växling åt höger | Rd(n) ← Rd(n+1), Rd(7) ← 0 | Z,C,N,V | 1 |
ROLL | Rd | Vrid åt vänster genom bär | Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) | Z,C,N,V | 1 |
ROR | Rd | Rotera rätt genom bäraren | Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) | Z,C,N,V | 1 |
ASR | Rd | Aritmetiskt skift åt höger | Rd(n) ← Rd(n+1), n=0..6 | Z,C,N,V | 1 |
Mnemonics | Operander | Beskrivning | Drift | Flaggor | #Klockor |
BYTA | Rd | Byt Nibbles | Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) | Ingen | 1 |
BSET | s | Flagga Set | SREG(er) ← 1 | SREG(s) | 1 |
BCLR | s | Flagga klar | SREG(er) ← 0 | SREG(s) | 1 |
BST | Rr, b | Bit Store från Register till T | T ← Rr(b) | T | 1 |
BLD | Rd, b | Bitlast från T till Register | Rd(b) ← T | Ingen | 1 |
SEC | Ställ in Carry | C ← 1 | C | 1 | |
CLC | Clear Carry | C ← 0 | C | 1 | |
SEN | Ställ in negativ flagga | N ← 1 | N | 1 | |
CLN | Rensa negativ flagga | N ← 0 | N | 1 | |
SEZ | Ställ in nollflagga | Z ← 1 | Z | 1 | |
CLZ | Rensa nollflaggan | Z ← 0 | Z | 1 | |
SEI | Aktivera globalt avbrott | Jag ← 1 | I | 1 | |
CLI | Global Interrupt Inaktivera | Jag ← 0 | I | 1 | |
SES | Ställ in undertecknad testflagga | S ← 1 | S | 1 | |
CLS | Rensa signerad testflagga | S ← 0 | S | 1 | |
SEV | Set Twos Complement Overflow. | V ← 1 | V | 1 | |
CLV | Clear Twos Complement Overflow | V ← 0 | V | 1 | |
UPPSÄTTNING | Ställ in T i SREG | T ← 1 | T | 1 | |
CLT | Rensa T i SREG | T ← 0 | T | 1 | |
SER | Ställ in Half Carry Flag i SREG | H ← 1 | H | 1 | |
CLH | Rensa Half Carry Flag i SREG | H ← 0 | H | 1 | |
INSTRUKTIONER FÖR DATAÖVERFÖRING | |||||
MOV | Rd, Rr | Flytta mellan register | Rd ← Rr | Ingen | 1 |
MOVW | Rd, Rr | Kopiera Register Word | Rd+1:Rd ← Rr+1:Rr | Ingen | 1 |
LDI | Rd, K | Ladda omedelbart | Rd ← K | Ingen | 1 |
LD | Rd, X | Ladda indirekt | Rd ← (X) | Ingen | 2 |
LD | Rd, X+ | Ladda indirekt och Post-Inc. | Rd ← (X), X ← X + 1 | Ingen | 2 |
LD | Rd, – X | Ladda indirekt och före dec. | X ← X – 1, Rd ← (X) | Ingen | 2 |
LD | Rd, Y | Ladda indirekt | Rd ← (Y) | Ingen | 2 |
LD | Rd, Y+ | Ladda indirekt och Post-Inc. | Rd ← (Y), Y ← Y + 1 | Ingen | 2 |
LD | Rd, – Y | Ladda indirekt och före dec. | Y ← Y – 1, Rd ← (Y) | Ingen | 2 |
LDD | Rd,Y+q | Belastning indirekt med förskjutning | Rd ← (Y + q) | Ingen | 2 |
LD | Rd, Z | Ladda indirekt | Rd ← (Z) | Ingen | 2 |
LD | Rd, Z+ | Ladda indirekt och Post-Inc. | Rd ← (Z), Z ← Z+1 | Ingen | 2 |
LD | Rd, -Z | Ladda indirekt och före dec. | Z ← Z – 1, Rd ← (Z) | Ingen | 2 |
LDD | Rd, Z+q | Belastning indirekt med förskjutning | Rd ← (Z + q) | Ingen | 2 |
LDS | Rd, k | Ladda direkt från SRAM | Rd ← (k) | Ingen | 2 |
ST | X, Rr | Butik Indirekt | (X) ← Rr | Ingen | 2 |
ST | X+, Rr | Store Indirect och Post-Inc. | (X) ← Rr, X ← X + 1 | Ingen | 2 |
ST | – X, Rr | Butik Indirekt och Pre-Dec. | X ← X – 1, (X) ← Rr | Ingen | 2 |
ST | Y, Rr | Butik Indirekt | (Y) ← Rr | Ingen | 2 |
ST | Y+, Rr | Store Indirect och Post-Inc. | (Y) ← Rr, Y ← Y + 1 | Ingen | 2 |
ST | – Y, Rr | Butik Indirekt och Pre-Dec. | Y ← Y – 1, (Y) ← Rr | Ingen | 2 |
STD | Y+q,Rr | Förvara indirekt med förskjutning | (Y + q) ← Rr | Ingen | 2 |
ST | Z, Rr | Butik Indirekt | (Z) ← Rr | Ingen | 2 |
ST | Z+, Rr | Store Indirect och Post-Inc. | (Z) ← Rr, Z ← Z + 1 | Ingen | 2 |
ST | -Z, Rr | Butik Indirekt och Pre-Dec. | Z ← Z – 1, (Z) ← Rr | Ingen | 2 |
STD | Z+q,Rr | Förvara indirekt med förskjutning | (Z + q) ← Rr | Ingen | 2 |
STS | k, Rr | Lagra direkt till SRAM | (k) ← Rr | Ingen | 2 |
LPM | Ladda programminne | R0 ← (Z) | Ingen | 3 | |
LPM | Rd, Z | Ladda programminne | Rd ← (Z) | Ingen | 3 |
LPM | Rd, Z+ | Ladda programminne och Post-Inc | Rd ← (Z), Z ← Z+1 | Ingen | 3 |
SPM | Lagra programminne | (z) ← R1:R0 | Ingen | ||
IN | Rd, P | I hamn | Rd ← P | Ingen | 1 |
UT | P, Rr | Ut hamn | P ← Rr | Ingen | 1 |
TRYCK | Rr | Tryck på Registrera på Stack | STACK ← Rr | Ingen | 2 |
POP | Rd | Popregister från Stack | Rd ← STACK | Ingen | 2 |
MCU KONTROLLINSTRUKTIONER | |||||
NEJ | Ingen operation | Ingen | 1 | ||
SOVA | Sova | (se specifik beskrivning för vilofunktion) | Ingen | 1 | |
WDR | Watchdog Reset | (se specifik beskrivning för WDR/Timer) | Ingen | 1 | |
BRYTA | Bryta |
Hastighet (MHz) (1) | Supply Voltage (V) | Temperaturområde | Paket (2) | Beställningskod (3) |
10 | 1.8 – 5.5 XNUMX | Industriell
(-40°C till +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 XNUMX | Industriell
(-40°C till +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 |
Anmärkningar: 1. För hastighet vs. matning voltage, se avsnitt 21.3 "Hastighet" på sidan 163.
Alla förpackningar är Pb-fria, halogenidfria och helt gröna och de uppfyller det europeiska direktivet för begränsning av farliga ämnen (RoHS).
Kodindikatorer
H: NiPdAu blyfinish
U: matt plåt
R: tejp & rulle
Dessa anordningar kan även levereras i waferform. Kontakta ditt lokala Atmel-försäljningskontor för detaljerad beställningsinformation och minimikvantiteter.
tryckfel
Errata ATtiny25
Revisionsbrevet i detta avsnitt hänvisar till revisionen av ATtiny25-enheten.
Rev D – F
Inga kända fel.
Rev B – C
EEPROM-läsning kan misslyckas vid låg volymtage / låg klockfrekvens
EEPROM-läsning kan misslyckas vid låg volymtage / låg klockfrekvens
Försöker läsa EEPROM vid låga klockfrekvenser och/eller låg volymtage kan resultera i ogiltiga data.
Problemlösning/lösning
Använd inte EEPROM när klockfrekvensen är under 1MHz och matningsvolymentage är under 2V. Om driftfrekvensen inte kan höjas över 1MHz, mata voltage bör vara mer än 2V. På samma sätt, om leverans voltage kan inte höjas över 2V, då bör driftsfrekvensen vara mer än 1MHz.
Denna egenskap är känd för att vara temperaturberoende men den har inte karakteriserats. Riktlinjer ges endast för rumstemperatur.
Rev A
Inte samplidit.
Errata ATtiny45
Revisionsbrevet i detta avsnitt hänvisar till revisionen av ATtiny45-enheten.
Rev F – G
Inga kända fel
Rev D – E
EEPROM-läsning kan misslyckas vid låg volymtage / låg klockfrekvens
EEPROM-läsning kan misslyckas vid låg volymtage / låg klockfrekvens
Försöker läsa EEPROM vid låga klockfrekvenser och/eller låg volymtage kan resultera i ogiltiga data.
Problemlösning/lösning
Använd inte EEPROM när klockfrekvensen är under 1MHz och matningsvolymentage är under 2V. Om driftfrekvensen inte kan höjas över 1MHz, mata voltage bör vara mer än 2V. På samma sätt, om leverans voltage kan inte höjas över 2V, då bör driftsfrekvensen vara mer än 1MHz.
Denna egenskap är känd för att vara temperaturberoende men den har inte karakteriserats. Riktlinjer ges endast för rumstemperatur.
Rev B – C
PLL låser inte
EEPROM-läsning från applikationskod fungerar inte i låsbitläge 3
EEPROM-läsning kan misslyckas vid låg volymtage / låg klockfrekvens
Timer Counter 1 PWM-utgångsgenerering på OC1B-XOC1B fungerar inte korrekt
PLL låser inte
Vid frekvenser under 6.0 MHz låses inte PLL
Problemlösning / Lösning
När du använder PLL, kör på 6.0 MHz eller högre.
EEPROM-läsning från applikationskod fungerar inte i låsbitläge 3
När minneslåsbitarna LB2 och LB1 är programmerade till läge 3, fungerar inte EEPROM-läsning från applikationskoden.
Problem Fixa/Omgå
Ställ inte in Lock Bit Protection Mode 3 när programkoden behöver läsas från EEPROM.
EEPROM-läsning kan misslyckas vid låg volymtage / låg klockfrekvens
Försöker läsa EEPROM vid låga klockfrekvenser och/eller låg volymtage kan resultera i ogiltiga data.
Problemlösning/lösning
Använd inte EEPROM när klockfrekvensen är under 1MHz och matningsvolymentage är under 2V. Om driftfrekvensen inte kan höjas över 1MHz, mata voltage bör vara mer än 2V. På samma sätt, om leverans voltage kan inte höjas över 2V, då bör driftsfrekvensen vara mer än 1MHz.
Denna egenskap är känd för att vara temperaturberoende men den har inte karakteriserats. Riktlinjer ges endast för rumstemperatur.
Timer Counter 1 PWM-utgångsgenerering på OC1B – XOC1B fungerar inte korrekt
Timer Counter1 PWM-utgång OC1B-XOC1B fungerar inte korrekt. Endast i de fall då styrbitarna COM1B1 och COM1B0 är i samma läge som COM1A1 respektive COM1A0, fungerar OC1B-XOC1B-utgången korrekt.
Problem Fixa/Omgå
Den enda lösningen är att använda samma kontrollinställning på COM1A[1:0] och COM1B[1:0] kontrollbitar, se tabell 14-4 i databladet. Problemet har åtgärdats för Tiny45 rev D.
Rev A
För hög strömförbrukning vid strömavbrott
DebugWIRE tappar kommunikationen när man kliver in i avbrott
PLL låser inte
EEPROM-läsning från applikationskod fungerar inte i låsbitläge 3
EEPROM-läsning kan misslyckas vid låg volymtage / låg klockfrekvens
För hög strömförbrukning vid strömavbrott
Tre situationer kommer att leda till en för hög strömförbrukning vid strömavbrott. Dessa är:
En extern klocka väljs av säkringar, men I/O-PORTEN är fortfarande aktiverad som en utgång.
EEPROM läses innan strömmen slås av.
VCC är 4.5 volt eller högre.
Friskrivningsklausul: Informationen i detta dokument tillhandahålls i samband med Atmel-produkter. Ingen licens, uttrycklig eller underförstådd, genom estoppel eller på annat sätt, till någon immateriell rättighet beviljas av detta dokument eller i samband med försäljningen av Atmel-produkter. UTOM SOM FRÅGES I ATMELS VILLKOR OCH FÖRSÄLJNINGSVILLKOR SOM FINNS PÅ ATMEL WEBWEBBPLATS, ATMEL PÅTAR SIG INGET ANSVAR OCH FRÅSÄR SIG NÅGON UTTRYCKLIGA, UNDERFÖRSTÅDDA ELLER LAGSTÄLLDA GARANTIER RELATANDE TILL DESS PRODUKTER INKLUSIVE, MEN INTE BEGRÄNSAT TILL, DEN UNDERFÖRSTÅDDA GARANTIEN FÖR SÄLJBARHET, ELLER LÄMPLIGHET. ATMEL SKA UNDER INGA OMSTÄNDIGHETER VARA ANSVARIGT FÖR NÅGON DIREKT, INDIREKTA, FÖLJDSKADOR, STRAFSKADOR, SÄRSKILDA ELLER OAVSIKTLIGA SKADOR (INKLUSIVE, UTAN BEGRÄNSNING, SKADOR FÖR FÖRLUST OCH VINST, AFFÄRSAVBROTT, ELLER FÖRLUST AV ANVÄNDNING ELLER FÖRLUST AV ANVÄNDNING) DETTA DOKUMENT, ÄVEN OM ATMEL HAR INFORMERATS OM MÖJLIGHETEN FÖR SÅDANA SKADA.
Atmel lämnar inga utfästelser eller garantier med avseende på riktigheten eller fullständigheten av innehållet i detta dokument och förbehåller sig rätten att göra ändringar i specifikationer och produktbeskrivningar när som helst utan föregående meddelande. Atmel förbinder sig inte att uppdatera informationen häri. Om inte annat specifikt anges är Atmels produkter inte lämpliga för, och ska inte användas i, fordonstillämpningar. Atmels produkter är inte avsedda, auktoriserade eller garanterade för användning som komponenter i applikationer som är avsedda att stödja eller upprätthålla liv.