Atmel 8-bit AVR-mikrocontroller med 2/4/8K bytes programmerbar flash i systemet
Funktioner
- Højtydende, laveffekt AVR® 8-bit mikrocontroller
- Avanceret RISC-arkitektur
- 120 kraftfulde instruktioner – mest enkelt ur-cyklusudførelse
- 32 x 8 generelle arbejdsregistre
- Fuldstændig statisk drift
- Ikke-flygtige program- og datahukommelser
- 2/4/8K bytes af programmerbar programhukommelse i systemet
- Udholdenhed: 10,000 skrive/slet-cyklusser
- 128/256/512 bytes programmerbar EEPROM i systemet
- Udholdenhed: 100,000 skrive/slet-cyklusser
- 128/256/512 bytes intern SRAM
- Programmeringslås til selvprogrammering af Flash-program og EEPROM-datasikkerhed
Perifere funktioner
- 8-bit timer/tæller med Prescaler og to PWM-kanaler
- 8-bit højhastighedstimer/tæller med separat forskaler
- 2 højfrekvente PWM-udgange med separate output-sammenligningsregistre
- Programmerbar dødtidsgenerator
- USI – Universal Serial Interface med Start Condition Detector
- 10-bit ADC
4 enkelt afsluttede kanaler
2 differentielle ADC-kanalpar med programmerbar forstærkning (1x, 20x)
Temperaturmåling
Programmerbar Watchdog Timer med separat On-chip Oscillator
On-chip analog komparator
Specielle mikrocontrollerfunktioner
debugWIRE On-chip Debug System
Programmerbar i systemet via SPI-port
Eksterne og interne afbrydelseskilder
Lavt strømforbrug i tomgang, ADC-støjreduktion og nedlukningstilstande
Forbedret Power-on Reset Circuit
Programmerbart Brown-out detektionskredsløb
Intern kalibreret oscillator
I/O og pakker
Seks programmerbare I/O-linjer
8-benet PDIP, 8-benet SOIC, 20-polet QFN/MLF og 8-benet TSSOP (kun ATtiny45/V)
Operation Voltage
– 1.8 – 5.5 V for ATtiny25V/45V/85V
– 2.7 – 5.5V til ATtiny25/45/85
Hastighedsklasse
– 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
Industrielt temperaturområde
Lavt strømforbrug
Aktiv tilstand:
1 MHz, 1.8 V: 300 µA
Sluk-tilstand:
Pin-konfigurationer
Pinout ATtiny25/45/85
Pin beskrivelser
VCC: Supply voltage.
GND: Jord.
Port B (PB5:PB0): Port B er en 6-bit tovejs I/O-port med interne pull-up-modstande (valgt for hver bit). Port B-udgangsbufferne har symmetriske drevkarakteristika med både høj synke- og kildekapacitet. Som input vil Port B-ben, der eksternt trækkes lavt, give strøm, hvis pull-up-modstandene aktiveres. Port B-benene er tredelt, når en nulstillingstilstand bliver aktiv, selvom uret ikke kører.
Port B tjener også funktionerne af forskellige specielle funktioner i ATtiny25/45/85 som anført
På ATtiny25 udveksles de programmerbare I/O-porte PB3 og PB4 (ben 2 og 3) i ATtiny15-kompatibilitetstilstand for at understøtte bagudkompatibiliteten med ATtiny15.
NULSTIL: Nulstil input. Et lavt niveau på denne ben i længere tid end minimumspulslængden vil generere en nulstilling, selvom uret ikke kører, og forudsat at nulstillingsbenet ikke er blevet deaktiveret. Den mindste pulslængde er angivet Tabel 21-4 på side 165. Kortere impulser er ikke garanteret at generere en nulstilling.
Reset-stiften kan også bruges som en (svag) I/O-pin.
Overview
ATtiny25/45/85 er en laveffekt CMOS 8-bit mikrocontroller baseret på AVR forbedret RISC arkitektur. Ved at udføre kraftfulde instruktioner i en enkelt clock-cyklus opnår ATtiny25/45/85 gennemløb, der nærmer sig 1 MIPS pr. MHz, hvilket giver systemdesigneren mulighed for at optimere strømforbruget i forhold til behandlingshastigheden.
Blokdiagram
AVR-kernen kombinerer et rigt instruktionssæt med 32 almindelige arbejdsregistre. Alle 32 registre er direkte forbundet til den aritmetiske logiske enhed (ALU), hvilket gør det muligt at få adgang til to uafhængige registre i én enkelt instruktion, der udføres i én clock-cyklus. Den resulterende arkitektur er mere kodeeffektiv, samtidig med at den opnår gennemløb op til ti gange hurtigere end konventionelle CISC-mikrocontrollere.
ATtiny25/45/85 har følgende funktioner: 2/4/8K bytes programmerbar flash i systemet, 128/256/512 bytes EEPROM, 128/256/256 bytes SRAM, 6 generelle I/O-linjer, 32 generelle funktionsregistre, en 8-bit timer/tæller med sammenligningstilstande, en 8-bit højhastighedstimer/tæller, Universal Serial Interface, Interne og Eksterne Interrupts, en 4-kanals, 10-bit ADC, en programmerbar Watchdog Timer med intern Oscillator og tre softwarevalgbare strømsparetilstande. Inaktiv tilstand stopper CPU'en, mens SRAM, Timer/Tæller, ADC, Analog Comparator og Interrupt-systemet fortsætter med at fungere. Sluk-tilstand gemmer registerindholdet og deaktiverer alle chipfunktioner indtil næste afbrydelse eller hardwarenulstilling. ADC Noise Reduction-tilstand stopper CPU'en og alle I/O-moduler undtagen ADC, for at minimere koblingsstøj under ADC-konverteringer.
Enheden er fremstillet ved hjælp af Atmels højdensitets ikke-flygtige hukommelsesteknologi. On-chip ISP Flash gør det muligt at omprogrammere programhukommelsen i systemet via et SPI seriel interface, af en konventionel ikke-flygtig hukommelsesprogrammør eller af en On-chip boot-kode, der kører på AVR-kernen.
ATtiny25/45/85 AVR understøttes med en komplet pakke af program- og systemudviklingsværktøjer, herunder: C-kompilatorer, makro-samlere, programdebugger/simulatorer og evalueringssæt.
Om ressourcer
Et omfattende sæt udviklingsværktøjer, applikationsnotater og datablade er tilgængelige til download på http://www.atmel.com/avr.
Kode Eksamples
Denne dokumentation indeholder simpel kode f.eksampfiler, der kort viser, hvordan man bruger forskellige dele af enheden. Disse koder examples antage, at den del specifikke header file er inkluderet før kompilering. Vær opmærksom på, at ikke alle C-kompilerleverandører inkluderer bitdefinitioner i headeren files og afbrydelseshåndtering i C er compiler afhængig. Bekræft venligst med C-kompilerdokumentationen for flere detaljer.
For I/O-registre placeret i det udvidede I/O-kort skal instruktionerne "IN", "UD", "SBIS", "SBIC", "CBI" og "SBI" erstattes med instruktioner, der giver adgang til udvidet I /O. Typisk betyder dette "LDS" og "STS" kombineret med "SBRS", "SBRC", "SBR" og "CBR". Bemærk, at ikke alle AVR-enheder har et udvidet I/O-kort.
Kapacitiv berøringsføling
Atmel QTouch Library giver en brugervenlig løsning til berøringsfølsomme grænseflader på Atmel AVR mikrokontrollere. QTouch-biblioteket inkluderer understøttelse af QTouch®- og QMatrix®-opsamlingsmetoder.
Berøringsføling føjes nemt til enhver applikation ved at forbinde QTouch-biblioteket og bruge bibliotekets Application Programming Interface (API) til at definere berøringskanalerne og sensorerne. Applikationen kalder derefter API'et for at hente kanaloplysninger og bestemme berøringssensorens tilstand.
QTouch Library er gratis og kan downloades fra Atmel webwebsted. For mere information og detaljer om implementering henvises til QTouch Library User Guide – også tilgængelig fra Atmel webwebsted.
Dataopbevaring
Pålidelighedskvalifikationsresultater viser, at den forventede fejlrate for dataopbevaring er meget mindre end 1 PPM over 20 år ved 85°C eller 100 år ved 25°C.
AVR CPU kerne
Indledning
Dette afsnit diskuterer AVR-kernearkitekturen generelt. CPU-kernens hovedfunktion er at sikre korrekt programafvikling. CPU'en skal derfor kunne få adgang til hukommelser, udføre beregninger, styre periferiudstyr og håndtere afbrydelser.
Arkitektonisk overview
For at maksimere ydeevne og parallelitet bruger AVR en Harvard-arkitektur – med separate hukommelser og busser til program og data. Instruktioner i programhukommelsen udføres med en enkelt niveau pipelining. Mens en instruktion udføres, hentes den næste instruktion fra programhukommelsen. Dette koncept gør det muligt at udføre instruktioner i hver clock-cyklus. Programhukommelsen er omprogrammerbar Flash-hukommelse i systemet.
Registret med hurtig adgang File indeholder 32 x 8-bit generelle arbejdsregistre med en enkelt clock-cyklus adgangstid. Dette tillader en-cyklus Arithmetic Logic Unit (ALU) drift. I en typisk ALU-operation udlæses to operander fra registret File, handlingen udføres, og resultatet gemmes tilbage i registret File– i én urcyklus.
Seks af de 32 registre kan bruges som tre 16-bit indirekte adresseregisterpointere til datarumsadressering – hvilket muliggør effektive adresseberegninger. En af disse adressemarkører kan også bruges som adressemarkører til at slå tabeller op i Flash-programhukommelsen. Disse tilføjede funktionsregistre er 16-bit X-, Y- og Z-registret, beskrevet senere i dette afsnit.
ALU'en understøtter aritmetiske og logiske operationer mellem registre eller mellem en konstant og et register. Enkeltregisteroperationer kan også udføres i ALU. Efter en aritmetisk operation opdateres statusregistret for at afspejle information om resultatet af operationen.
Programflow leveres af betingede og ubetingede hop- og opkaldsinstruktioner, der direkte kan adressere hele adresserummet. De fleste AVR-instruktioner har et enkelt 16-bit ordformat, men der er også 32-bit instruktioner.
Under afbrydelser og subrutineopkald gemmes returadressens programtæller (PC) på stakken. Stakken er effektivt allokeret i den generelle data-SRAM, og følgelig er stak-størrelsen kun begrænset af den samlede SRAM-størrelse og brugen af SRAM. Alle brugerprogrammer skal initialisere SP'en i Reset-rutinen (før underrutiner eller afbrydelser udføres). Stack Pointer (SP) er læse/skrive tilgængelig i I/O-rummet. Data-SRAM kan nemt tilgås gennem de fem forskellige adresseringstilstande, der understøttes i AVR-arkitekturen.
Hukommelsespladserne i AVR-arkitekturen er alle lineære og almindelige hukommelseskort.
Et fleksibelt afbrydelsesmodul har sine kontrolregistre i I/O-rummet med en ekstra Global Interrupt Enable-bit i statusregistret. Alle interrupts har en separat Interrupt Vector i Interrupt Vector tabellen. Interruptene har prioritet i overensstemmelse med deres Interrupt Vector-position. Jo lavere Interrupt Vector-adressen er, desto højere prioritet.
I/O-hukommelsespladsen indeholder 64 adresser til CPU-perifere funktioner som kontrolregistre, SPI og andre I/O-funktioner. I/O-hukommelsen kan tilgås direkte eller som Data Space-placeringerne efter Registrets File, 0x20 – 0x5F.
ALU – Arithmetic Logic Unit
Den højtydende AVR ALU fungerer i direkte forbindelse med alle de 32 generelle arbejdsregistre. Inden for en enkelt clock-cyklus udføres aritmetiske operationer mellem registre til generelle formål eller mellem et register og en umiddelbar. ALU-operationerne er opdelt i tre hovedkategorier - aritmetiske, logiske og bit-funktioner. Nogle implementeringer af arkitekturen giver også en kraftfuld multiplikator, der understøtter både signeret/usigneret multiplikation og brøkformat. Se afsnittet "Instruktionssæt" for en detaljeret beskrivelse.
Statusregister
Statusregistret indeholder information om resultatet af den senest udførte regneinstruktion. Denne information kan bruges til at ændre programflow for at udføre betingede operationer. Bemærk, at statusregistret opdateres efter alle ALU-operationer, som specificeret i instruktionssætreferencen. Dette vil i mange tilfælde fjerne behovet for at bruge de dedikerede sammenligningsinstruktioner, hvilket resulterer i hurtigere og mere kompakt kode.
Statusregistret gemmes ikke automatisk, når du går ind i en afbrydelsesrutine og gendannes, når du vender tilbage fra en afbrydelse. Dette skal håndteres af software.
SREG – AVR Status Register
AVR Status Register – SREG – er defineret 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 | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 – I: Aktiver global afbrydelse
Global Interrupt Enable-bit skal indstilles, for at interrupts kan aktiveres. Den individuelle afbrydelsesaktiveringsstyring udføres derefter i separate styreregistre. Hvis det globale afbrydelsesaktiveringsregister er ryddet, er ingen af afbrydelserne aktiveret uafhængigt af de individuelle afbrydelsesaktiveringsindstillinger. I-bitten ryddes af hardware, efter at der er opstået en afbrydelse, og indstilles af RETI-instruktionen til at aktivere efterfølgende afbrydelser. I-bitten kan også indstilles og slettes af applikationen med SEI- og CLI-instruktionerne, som beskrevet i instruktionssættets reference.
Bit 6 – T: Bit Copy Storage
Bit Copy-instruktionerne BLD (Bit LoaD) og BST (Bit STore) bruger T-bitten som kilde eller destination for den opererede bit. Lidt fra et register i Registret File kan kopieres til T ved BST-instruktionen, og en bit i T kan kopieres ind i en bit i et register i registret File efter BLD-instruktionen.
Bit 5 – H: Half Carry Flag
Half Carry Flag H angiver en Half Carry i nogle aritmetiske operationer. Half Carry er nyttig i BCD-aritmetik. Se "Beskrivelse af instruktionssæt" for detaljerede oplysninger.
Bit 4 – S: Sign Bit, S = N ⊕ V
S-bitten er altid en eksklusiv eller mellem det negative flag N og de to komplementoverløbsflag V. Se "Instruktionssætbeskrivelsen" for detaljeret information.
Bit 3 – V: Two's Complement Overflow Flag
The Two's Complement Overflow Flag V understøtter to's komplementaritmetik. Se "Beskrivelse af instruktionssæt" for detaljerede oplysninger.
Bit 2 – N: Negativt flag
Det negative flag N angiver et negativt resultat i en aritmetisk eller logisk operation. Se "Beskrivelse af instruktionssæt" for detaljerede oplysninger.
Bit 1 – Z: Zero Flag
Zero Flag Z angiver et nulresultat i en aritmetisk eller logisk operation. Se "Beskrivelse af instruktionssæt" for detaljerede oplysninger.
Bit 0 – C: Bær flag
Bæreflaget C angiver en bære i en aritmetisk eller logisk operation. Se "Beskrivelse af instruktionssæt" for detaljerede oplysninger.
Register til almindelige formål File
Registeret File er optimeret til AVR Enhanced RISC instruktionssættet. For at opnå den krævede ydeevne og fleksibilitet er følgende input/output-ordninger understøttet af registret File:
En 8-bit udgangsoperand og en 8-bit resultatinput
To 8-bit udgangsoperander og en 8-bit resultatinput
To 8-bit udgangsoperander og en 16-bit resultatinput
En 16-bit udgangsoperand og en 16-bit resultatinput
Figur 4-2 viser strukturen af de 32 generelle arbejdsregistre i CPU'en.
Som vist i Figur 4-2, tildeles hvert register også en datahukommelsesadresse, der kortlægger dem direkte til de første 32 placeringer af brugerdatarummet. Selvom den ikke er fysisk implementeret som SRAM-lokationer, giver denne hukommelsesorganisation stor fleksibilitet i adgangen til registrene, da X-, Y- og Z-pointer-registrene kan indstilles til at indeksere ethvert register i file.De fleste instruktioner, der fungerer på registret File har direkte adgang til alle registre, og de fleste af dem er enkeltcyklusinstruktioner.
X-register, Y-register og Z-register
Registrene R26..R31 har nogle tilføjede funktioner til deres generelle brug. Disse registre er 16-bit adressepointere til indirekte adressering af datarummet. De tre indirekte adresseregistre X, Y og Z er defineret som beskrevet i Figur 4-3.
I de forskellige adresseringstilstande har disse adresseregistre funktioner som fast forskydning, automatisk stigning og automatisk formindskelse (se instruktionssættets reference for detaljer).
Stack Pointer
Stakken bruges hovedsageligt til lagring af midlertidige data, til lagring af lokale variabler og til lagring af returadresser efter afbrydelser og subrutineopkald. Stack Pointer Registeret peger altid mod toppen af stakken. Bemærk, at stakken er implementeret som voksende fra højere hukommelsesplaceringer til lavere hukommelsesplaceringer. Dette indebærer, at en stak PUSH-kommando reducerer stakmarkøren.
Stack-markøren peger på data-SRAM-stakken, hvor underrutine- og afbrydelsesstakkene er placeret. Denne stakplads i data-SRAM skal defineres af programmet, før subrutineopkald udføres eller afbrydelser aktiveres. Stack Pointer skal indstilles til at pege over 0x60. Stakmarkøren formindskes med én, når data skubbes ind på stakken med PUSH-instruktionen, og den nedsættes med to, når returadressen skubbes ind på stakken med subrutineopkald eller afbrydelse. Stack Pointeren øges med én, når data poppes fra stakken med POP-instruktionen, og den øges med to når data poppes fra stakken med retur fra subrutine RET eller retur fra interrupt RETI.
AVR Stack Pointer er implementeret som to 8-bit registre i I/O-rummet. Antallet af bits, der faktisk anvendes, er implementeringsafhængig. Bemærk, at datapladsen i nogle implementeringer af AVR-arkitekturen er så lille, at der kun er brug for SPL. I dette tilfælde vil SPH-registret ikke være til stede.
SPH og 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 | |
Startværdi | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | |
Startværdi | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND |
Timing af instruktionsudførelse
Dette afsnit beskriver de generelle adgangstidskoncepter for instruktionsudførelse. AVR CPU'en drives af CPU clock clkCPU, der genereres direkte fra den valgte clock kilde til chippen. Der anvendes ingen intern uropdeling.
Figur 4-4 viser parallelle instruktionshentninger og instruktionsudførelser aktiveret af Harvard-arkitekturen og hurtigadgangsregistret File begreb. Dette er det grundlæggende pipelining-koncept for at opnå op til 1 MIPS pr. MHz med de tilsvarende unikke resultater for funktioner pr. pris, funktioner pr. ure og funktioner pr. strømenhed.
Figur 4-5. Enkeltcyklus ALU-drift
Nulstil og afbryd håndtering
AVR'en har flere forskellige afbrydelseskilder. Disse afbrydelser og den separate Reset Vector har hver en separat programvektor i programhukommelsespladsen. Alle interrupts tildeles individuelle aktiveringsbits, som skal skrives logisk et sammen med Global Interrupt Enable-bitten i Statusregisteret for at aktivere afbrydelsen.
De laveste adresser i Programhukommelsespladsen er som standard defineret som Reset- og Interrupt-vektorerne. Den komplette liste over vektorer er vist i "Afbrydelser" på side 48. Listen bestemmer også prioritetsniveauerne for de forskellige interrupts. Jo lavere adresse, jo højere er prioritetsniveauet. RESET har højeste prioritet, og næste er INT0 – den eksterne afbrydelsesanmodning 0.
Når der opstår en afbrydelse, slettes Global Interrupt Enable I-bit, og alle interrupts deaktiveres. Brugersoftwaren kan skrive logik et til I-bitten for at aktivere indlejrede interrupts. Alle aktiverede interrupts kan derefter afbryde den aktuelle interrupt-rutine. I-bitten indstilles automatisk, når en Return from Interrupt-instruktion – RETI – udføres.
Der er grundlæggende to typer af afbrydelser. Den første type udløses af en hændelse, der sætter interruptflaget. For disse afbrydelser vektoreres programtælleren til den faktiske afbrydelsesvektor for at udføre afbrydelseshåndteringsrutinen, og hardwaren rydder det tilsvarende interruptflag. Interrupt Flags kan også ryddes ved at skrive et logisk et til flagbitpositionen/-erne, der skal ryddes. Hvis der opstår en afbrydelsestilstand, mens den tilsvarende afbrydelsesaktiveringsbit er slettet, vil interruptflaget blive sat og husket, indtil afbrydelsen er aktiveret, eller flaget slettes af software. Tilsvarende, hvis en eller flere afbrydelsestilstande opstår, mens den globale afbrydelsesaktiveringsbit er slettet, vil det eller de tilsvarende afbrydelsesflag blive sat og husket, indtil den globale afbrydelsesaktiveringsbit er indstillet, og vil derefter blive udført i prioriteret rækkefølge.
Den anden type af afbrydelser vil udløse, så længe afbrydelsestilstanden er til stede. Disse interrupts har ikke nødvendigvis interruptflag. Hvis afbrydelsestilstanden forsvinder, før afbrydelsen er aktiveret, vil afbrydelsen ikke blive udløst.
Når AVR afslutter en afbrydelse, vil den altid vende tilbage til hovedprogrammet og udføre en instruktion mere, før en afventende afbrydelse serveres.
Bemærk, at statusregistret ikke gemmes automatisk, når du går ind i en afbrydelsesrutine, og gendannes heller ikke, når du vender tilbage fra en afbrydelsesrutine. Dette skal håndteres af software.
Når du bruger CLI-instruktionen til at deaktivere interrupts, deaktiveres afbrydelserne øjeblikkeligt. Der vil ikke blive udført nogen afbrydelse efter CLI-instruktionen, selvom den sker samtidigt med CLI-instruktionen. Følgende example viser, hvordan dette kan bruges til at undgå afbrydelser under den tidsindstillede EEPROM-skrivesekvens.
Monteringskode Example |
i r16, SREG; gemme SREG-værdi
cli ; deaktiver afbrydelser under tidsindstillet sekvens sbi EECR, EEMPE ; start EEPROM-skrivning sbi EECR, EEPE ud SREG, r16; gendan SREG-værdi (I-bit) |
C-kode Eksample |
char cSREG;
cSREG = SREG; /* gem SREG-værdi */ /* deaktiver interrupts under tidsindstillet sekvens */ _CLI(); EECR |= (1< EECR |= (1< SREG = cSREG; /* gendan SREG-værdi (I-bit) */ |
Når du bruger SEI-instruktionen til at aktivere interrupts, vil instruktionen efter SEI blive udført før eventuelle afventende interrupts, som vist i dette eks.ample.
Monteringskode Example |
sei ; sæt Global Interrupt Enable
sove; gå ind i søvn og venter på afbrydelse ; bemærk: vil gå i dvale før nogen afventende ; afbryde(r) |
C-kode Eksample |
_SEI(); /* sæt Global Interrupt Aktiver */
_SOVE(); /* gå i dvale, venter på afbrydelse */ /* bemærk: går i dvale før eventuelle afventende afbrydelser */ |
Afbryd responstid
Afbrydelsesudførelsessvaret for alle de aktiverede AVR-afbrydelser er minimum fire clock-cyklusser. Efter fire clock-cyklusser udføres programvektoradressen for den faktiske afbrydelseshåndteringsrutine. I løbet af denne fire clock-cyklusperiode skubbes programtælleren ind på stakken. Vektoren er normalt et spring til interrupt-rutinen, og dette spring tager tre clock-cyklusser. Hvis der opstår et afbrydelse under udførelse af en flercyklusinstruktion, fuldføres denne instruktion, før afbrydelsen serveres. Hvis der opstår en afbrydelse, når MCU'en er i dvaletilstand, øges reaktionstiden for afbrydelsesudførelsen med fire clock-cyklusser. Denne stigning kommer i tillæg til opstartstiden fra den valgte dvaletilstand.
En tilbagevenden fra en afbrydelseshåndteringsrutine tager fire clock-cyklusser. I løbet af disse fire clock-cyklusser bliver programtælleren (to bytes) trukket tilbage fra stakken, stakmarkøren øges med to, og I-bitten i SREG indstilles.
AVR erindringer
Dette afsnit beskriver de forskellige hukommelser i ATtiny25/45/85. AVR-arkitekturen har to hovedhukommelsespladser, datahukommelsen og programhukommelsespladsen. Derudover har ATtiny25/45/85 en EEPROM-hukommelse til datalagring. Alle tre hukommelsespladser er lineære og regelmæssige.
Omprogrammerbar Flash-programhukommelse i systemet
ATtiny25/45/85 indeholder 2/4/8K bytes On-chip In-System omprogrammerbar Flash-hukommelse til programlagring. Da alle AVR-instruktioner er 16 eller 32 bit brede, er Flash organiseret som 1024/2048/4096 x 16.
Flash-hukommelsen har en udholdenhed på mindst 10,000 skrive/slette-cyklusser. ATtiny25/45/85 Program Counter (PC) er 10/11/12 bit bred og adresserer således 1024/2048/4096 Program hukommelsesplaceringer. "Hukommelsesprogram- ming" på side 147 indeholder en detaljeret beskrivelse af seriel download af Flash-data ved hjælp af SPI-stifterne.
Konstante tabeller kan allokeres inden for hele programhukommelsesadresserummet (se LPM – Load Program memory instruktionsbeskrivelsen).
Figur 5-1. Programhukommelseskort
SRAM-datahukommelse
Figur 5-2 viser, hvordan ATtiny25/45/85 SRAM-hukommelsen er organiseret.
De nederste 224/352/607 datahukommelsesplaceringer adresserer både registret File, I/O-hukommelsen og den interne data-SRAM. De første 32 steder adresserer registret File, de næste 64 placeringer standard I/O hukommelsen, og de sidste 128/256/512 placeringer adresserer den interne data SRAM.
De fem forskellige adresseringstilstande for datahukommelsen dækker: Direkte, Indirekte med forskydning, Indirekte, Indirekte med Pre-dekrement og Indirekte med Post-increment. I registret File, registre R26 til R31 har de indirekte adresseringsmarkørregistre.
Den direkte adressering når hele datarummet.
Indirekte med forskydning-tilstand når 63 adresseplaceringer fra basisadressen givet af Y- eller Z-registret.
Ved brug af registerindirekte adresseringstilstande med automatisk for- og efterforøgelse, formindskes eller øges adresseregistrene X, Y og Z.
De 32 generelle arbejdsregistre, 64 I/O-registre og de 128/256/512 bytes af interne data-SRAM i ATtiny25/45/85 er alle tilgængelige via alle disse adresseringstilstande. Registeret File er beskrevet i "Gen- eral Formålsregister File”På side 10.
Figur 5-2. Datahukommelseskort
Datahukommelsesadgang Tider
Dette afsnit beskriver de generelle adgangstidskoncepter for intern hukommelsesadgang. Den interne SRAM-adgang til data udføres i to clkCPU-cyklusser som beskrevet i Figur 5-3.
Figur 5-3. On-chip Data SRAM Access Cycles EEPROM-datahukommelse
ATtiny25/45/85 indeholder 128/256/512 bytes data EEPROM-hukommelse. Det er organiseret som et separat datarum, hvor enkelte bytes kan læses og skrives. EEPROM'en har en udholdenhed på mindst 100,000 skrive/slette-cyklusser. Adgangen mellem EEPROM'en og CPU'en er beskrevet i det følgende med specificering af EEPROM-adresseregistrene, EEPROM-dataregistret og EEPROM-kontrolregistret. For detaljer se "Seriel downloading" på side 151.
EEPROM læse/skriveadgang
EEPROM-adgangsregistrene er tilgængelige i I/O-rummet.
Skriveadgangstider for EEPROM er angivet Tabel 5-1 på side 21. En selvtidsindstillingsfunktion lader brugersoftwaren registrere, hvornår den næste byte kan skrives. Hvis brugerkoden indeholder instruktioner, der skriver EEPROM'en, skal der tages nogle forholdsregler. I stærkt filtrerede strømforsyninger vil VCC sandsynligvis stige eller falde langsomt
Tænd/sluk. Dette får enheden til at køre på en voltage lavere end angivet som minimum for den anvendte clockfrekvens. Se "Forebyggelse af EEPROM-korruption" på side 19 for detaljer om, hvordan man undgår problemer i disse situationer.
For at forhindre utilsigtet EEPROM-skrivning skal en specifik skriveprocedure følges. Der henvises til "Atomar Byteprogrammering" på side 17 og "Split-byte-programmering" på side 17 for detaljer om dette.
Når EEPROM'en læses, standses CPU'en i fire clock-cyklusser, før den næste instruktion udføres. Når EEPROM'en er skrevet, standses CPU'en i to clock-cyklusser, før den næste instruktion udføres.
Atomic byte programmering
Brug af Atomic Byte-programmering er den enkleste tilstand. Når du skriver en byte til EEPROM'en, skal brugeren skrive adressen ind i EEAR-registret og data i EEDR-registret. Hvis EEPMn-bittene er nul, vil skrivning af EEPE (inden for fire cyklusser efter, at EEMPE er skrevet) udløse slette-/skriveoperationen. Både slette- og skrivecyklussen udføres i én operation, og den samlede programmeringstid er angivet Tabel 5-1 på side 21. EEPE-bitten forbliver indstillet, indtil slette- og skriveoperationerne er afsluttet. Mens enheden er optaget af programmering, er det ikke muligt at udføre andre EEPROM-handlinger.
Split byte programmering
Det er muligt at opdele slette- og skrivecyklussen i to forskellige operationer. Dette kan være nyttigt, hvis systemet kræver kort adgangstid i en begrænset periode (typisk hvis strømforsyningen voltage falder). For at drage fordel tagI denne metode kræves det, at de steder, der skal skrives, er blevet slettet før skriveoperationen. Men da slette- og skriveoperationerne er opdelt, er det muligt at udføre sletteoperationerne, når systemet tillader at udføre tidskritiske operationer (typisk efter opstart).
Slette
For at slette en byte skal adressen skrives til EEAR. Hvis EEPMn bits er 0b01, vil skrivning af EEPE (inden for fire cyklusser efter EEMPE er skrevet) kun udløse sletteoperationen (programmeringstiden er angivet i Tabel 5-1 på side 21). EEPE-bitten forbliver indstillet, indtil sletningen er fuldført. Mens enheden er optaget af programmering, er det ikke muligt at udføre andre EEPROM-handlinger.
Skrive
For at skrive en lokation skal brugeren skrive adressen i EEAR og dataene i EEDR. Hvis EEPMn bits er 0b10, vil skrivning af EEPE (inden for fire cyklusser efter EEMPE er skrevet) kun udløse skriveoperationen (programmeringstiden er angivet i Tabel 5-1 på side 21). EEPE-bitten forbliver indstillet, indtil skriveoperationen er fuldført. Hvis det sted, der skal skrives, ikke er blevet slettet før skrivning, skal de data, der lagres, betragtes som tabt. Mens enheden er optaget af programmering, er det ikke muligt at udføre andre EEPROM-handlinger.
Den kalibrerede oscillator bruges til at time EEPROM-adgange. Sørg for, at oscillatorfrekvensen er inden for kravene beskrevet i "OSCCAL – Oscillatorkalibreringsregister" på side 31.
Følgende kode examples viser én samling og én C-funktion til sletning, skrivning eller atomskrivning af EEPROM. Eksamples antager, at interrupts styres (f.eks. ved at deaktivere interrupts globalt), så der ikke vil forekomme nogen interrupts under udførelsen af disse funktioner.
Monteringskode Example |
EEPROM_skriv:
; Vent på færdiggørelse af forrige skrivning sbic EECR,EEPE rjmp EEPROM_write ; Indstil programmeringstilstand ldi r16, (0<<EEPM1)|(0<<EEPM0) ud EECR, r16 ; Indstil adresse (r18:r17) i adresseregister ud EEARH, r18 ud EEARL, r17 ; Skriv data (r19) til dataregister ud EEDR, r19 ; Skriv logisk en til EEMPE sbi EECR,EEMPE ; Start eeprom-skrivning ved at indstille EEPE sbi EECR,EEPE ret |
C-kode Eksample |
void EEPROM_write(usigneret char ucAddress, usigneret char ucData)
{ /* Vent på færdiggørelse af forrige skrivning */ while(EECR & (1< ; /* Indstil programmeringstilstand */ EECR = (0< /* Opsæt adresse- og dataregistre */ EEAR = ucAddress; EEDR = ucData; /* Skriv logisk en til EEMPE */ EECR |= (1< /* Start eeprom-skrivning ved at indstille EEPE */ EECR |= (1< } |
Den næste kode examples viser assembly og C-funktioner til læsning af EEPROM. Eksamples antager, at interrupts er kontrolleret, så der ikke vil forekomme nogen interrupts under udførelsen af disse funktioner.
Monteringskode Example |
EEPROM_read:
; Vent på færdiggørelse af forrige skrivning sbic EECR,EEPE rjmp EEPROM_read ; Indstil adresse (r18:r17) i adresseregister ud EEARH, r18 ud EEARL, r17 ; Start eeprom-læsning ved at skrive EERE sbi EECR,EERE ; Læs data fra dataregister i r16,EEDR ret |
C-kode Eksample |
usigneret tegn EEPROM_read (usigneret tegn ucAddress)
{ /* Vent på færdiggørelse af forrige skrivning */ while(EECR & (1< ; /* Opsæt adresseregister */ EEAR = ucAddress; /* Start eeprom-læsning ved at skrive EERE */ EECR |= (1< /* Returner data fra dataregister */ retur EEDR; } |
Forebyggelse af EEPROM-korruption
I perioder med lav VCC kan EEPROM-data blive beskadiget, fordi forsyningen voltage er for lav til, at CPU'en og EEPROM'en fungerer korrekt. Disse problemer er de samme som for systemer på tavleniveau, der bruger EEPROM, og de samme designløsninger bør anvendes.
En EEPROM-datakorruption kan være forårsaget af to situationer, hvor voltage er for lavt. For det første kræver en regulær skrivesekvens til EEPROM'en et minimum voltage for at fungere korrekt. For det andet kan CPU'en selv udføre instruktioner forkert, hvis forsyningen voltage er for lavt.
EEPROM-datakorruption kan nemt undgås ved at følge denne designanbefaling:
Hold AVR RESET aktiv (lav) i perioder med utilstrækkelig strømforsyning voltage. Dette kan gøres ved at aktivere den interne Brown-out Detector (BOD). Hvis detektionsniveauet for den interne BOD ikke svarer til
nødvendigt detektionsniveau, kan et eksternt lavt VCC-nulstillingsbeskyttelseskredsløb bruges. Hvis der sker en nulstilling, mens en skriveoperation er i gang, vil skriveoperationen blive afsluttet, forudsat at strømforsyningen voltage er tilstrækkeligt.
I/O-hukommelse
I/O-rumsdefinitionen af ATtiny25/45/85 er vist i "Registrer oversigt" på side 200.
Alle ATtiny25/45/85 I/O'er og perifere enheder er placeret i I/O-rummet. Alle I/O-lokationer kan tilgås af LD/LDS/LDD- og ST/STS/STD-instruktionerne, der overfører data mellem de 32 generelle arbejdsregistre og I/O-rummet. I/O-registre inden for adresseområdet 0x00 – 0x1F er direkte bit-tilgængelige ved hjælp af SBI- og CBI-instruktionerne. I disse registre kan værdien af enkeltbits kontrolleres ved at bruge SBIS- og SBIC-instruktionerne. Se afsnittet med instruktionssættet for flere detaljer. Ved brug af de I/O-specifikke kommandoer IN og OUT, skal I/O-adresserne 0x00 – 0x3F bruges. Ved adressering af I/O registre som datarum vha. LD- og ST-instruktioner skal 0x20 tilføjes til disse adresser.
For kompatibilitet med fremtidige enheder skal reserverede bits skrives til nul, hvis de tilgås. Reserverede I/O-hukommelsesadresser bør aldrig skrives.
Nogle af statusflag ryddes ved at skrive et logisk til dem. Bemærk, at CBI- og SBI-instruktionerne kun vil fungere på den angivne bit, og derfor kan bruges på registre, der indeholder sådanne statusflag. CBI- og SBI-instruktionerne fungerer kun med registre 0x00 til 0x1F.
I/O- og periferikontrolregistrene er forklaret i senere afsnit.
Registerbeskrivelse
EEARH – EEPROM adresseregister
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1F | – | – | – | – | – | – | – | EEAR8 | EARH |
Læs/skriv | R | R | R | R | R | R | R | R/W | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | X/0 |
Bits 7:1 – Res: Reserverede bits
Disse bits er reserveret til fremtidig brug og vil altid læses som nul.
Bits 0 – EEAR8: EEPROM-adresse
Dette er den mest betydningsfulde EEPROM-adressebit i ATtiny85. I enheder med mindre EEPROM, dvs. ATtiny25/ATtiny45, er denne bit reserveret og vil altid læse nul. Startværdien af EEPROM Address Register (EEAR) er udefineret, og der skal derfor skrives en korrekt værdi, før EEPROM'en tilgås.
EEARL – EEPROM-adresseregister
Bit
0x1E | EEAR7 | EEAR6 | EEAR5 | EEAR4 | EEAR3 | EEAR2 | EEAR1 | EEAR0 | EARL |
Bagside/Skriv | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Startværdi | X | X | X | X | X | X | X | X |
Bit 7 – EEAR7: EEPROM-adresse
Dette er den mest betydningsfulde EEPROM-adressebit i ATtiny45. I enheder med mindre EEPROM, dvs. ATtiny25, er denne bit reserveret og vil altid læse nul. Startværdien af EEPROM-adresseregistret (EEAR) er udefineret, og der skal derfor skrives en korrekt værdi, før der tilgås EEPROM.
Bits 6:0 – EEAR[6:0]: EEPROM-adresse
Disse er (lave) bits af EEPROM-adresseregistret. EEPROM-databytes adresseres lineært i området 0...(128/256/512-1). Startværdien af EEAR er udefineret, og der skal derfor skrives en korrekt værdi, før EEPROM'en kan tilgå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 | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
For EEPROM-skriveoperationen indeholder EEDR-registret de data, der skal skrives til EEPROM'en på den adresse, der er angivet af EEAR-registret. For EEPROM-læseoperationen indeholder EEDR de data, der udlæses fra
EEPROM på adressen oplyst af EEAR.
5.5.4 EECR – EEPROM kontrolregister |
|||||||||
Bit 7 6 5 | 4 | 3 | 2 | 1 | 0 | ||||
0x1C – | – | EEPM1 | EEPM0 | Uhyggeligt | EEMPE | EEPE | EERE | EECR | |
Læs/skriv R R R/W | R/W | R/W | R/W | R/W | R/W | ||||
Startværdi 0 0 X | X | 0 | 0 | X | 0 |
Bit 7 – Res: Reserveret bit
Denne bit er reserveret til fremtidig brug og vil altid læses som 0 i ATtiny25/45/85. For kompatibilitet med fremtidige AVR-enheder skal du altid skrive denne bit til nul. Efter at have læst, masker denne smule.
Bit 6 – Res: Reserveret bit
Denne bit er reserveret i ATtiny25/45/85 og vil altid læses som nul.
Bits 5:4 – EEPM[1:0]: Bits til EEPROM-programmeringstilstand
EEPROM-programmeringstilstandens bit-indstilling definerer, hvilken programmeringshandling, der vil blive udløst, når EEPE skrives. Det er muligt at programmere data i én atomoperation (slette den gamle værdi og programmere den nye værdi) eller at opdele slette- og skriveoperationerne i to forskellige operationer. Programmeringstiderne for de forskellige tilstande er vist i Tabel 5-1. Mens EEPE er indstillet, vil enhver skrivning til EEPMn blive ignoreret. Under nulstillingen vil EEPMn-bittene blive nulstillet til 0b00, medmindre EEPROM'en er optaget af programmering.
Tabel 5-1. EEPROM Mode Bits
EEPM1 | EEPM0 | Programmeringstid | Operation |
0 | 0 | 3.4 ms | Slet og skriv i én operation (Atomic Operation) |
0 | 1 | 1.8 ms | Slet kun |
1 | 0 | 1.8 ms | Skriv kun |
1 | 1 | – | Reserveret til fremtidig brug |
Bit 3 – EERIE: EEPROM Ready Interrupt Enable
At skrive EERIE til en aktiverer EEPROM Ready Interrupt, hvis I-bit i SREG er indstillet. Hvis du skriver EERIE til nul, deaktiveres afbrydelsen. EEPROM Ready Interrupt genererer en konstant interrupt, når ikke-flygtig hukommelse er klar til programmering.
Bit 2 – EEMPE: Aktiver EEPROM Master Program
EEMPE-bitten bestemmer, om skrivning af EEPE til en vil have effekt eller ej.
Når EEMPE er indstillet, vil indstilling af EEPE inden for fire clock-cyklusser programmere EEPROM'en på den valgte adresse. Hvis EEMPE er nul, har indstillingen af EEPE ingen effekt. Når EEMPE er blevet skrevet til en af softwaren, nulstiller hardware bit'et til nul efter fire clock-cyklusser.
Bit 1 – EEPE: Aktiver EEPROM-program
EEPROM-programaktiveringssignalet EEPE er programmeringsaktiveringssignalet til EEPROM'en. Når EEPE er skrevet, vil EEPROM'en blive programmeret i henhold til indstillingen for EEPMn bits. EEMPE-bitten skal skrives til én, før en logisk én skrives til EEPE, ellers finder ingen EEPROM-skrivning sted. Når skriveadgangstiden er udløbet, ryddes EEPE-bitten af hardware. Når EEPE er indstillet, standses CPU'en i to cyklusser, før den næste instruktion udføres.
Bit 0 – EERE: EEPROM Read Enable
EEPROM Read Enable Signal – EERE – er læsestrobe til EEPROM. Når den korrekte adresse er sat op i EEAR-registret, skal EERE-bitten skrives til en for at udløse EEPROM-læsningen. EEPROM læseadgangen tager én instruktion, og de anmodede data er tilgængelige med det samme. Når EEPROM'en læses, standses CPU'en i fire cyklusser, før den næste instruktion udføres. Brugeren bør polle EEPE-bitten, før læseoperationen påbegyndes. Hvis en skriveoperation er i gang, er det hverken muligt at læse EEPROM'en eller at ændre EEAR-registret.
Systemur og urindstillinger
Ursystemer og deres distribution
CPU-ur
CPU-uret dirigeres til dele af systemet, der vedrører driften af AVR-kernen. Eksampdele af sådanne moduler er det generelle register File, statusregistret og datahukommelsen, der holder stakmarkøren. Standsning af CPU-uret forhindrer kernen i at udføre generelle operationer og beregninger.
I/O-ur – clI/O
I/O-uret bruges af størstedelen af I/O-modulerne, såsom timer/tæller. I/O-uret bruges også af det eksterne afbrydelsesmodul, men bemærk, at nogle eksterne afbrydelser detekteres af asynkron logik, hvilket gør det muligt at detektere sådanne afbrydelser, selvom I/O-uret er standset.
Flash-ur – clkFLASH
Flash-uret styrer driften af Flash-grænsefladen. Flash-uret er normalt aktivt samtidig med CPU-uret.
ADC ur – clkADC
ADC'en er forsynet med et dedikeret urdomæne. Dette gør det muligt at standse CPU- og I/O-urene for at reducere støj genereret af digitale kredsløb. Dette giver mere nøjagtige ADC-konverteringsresultater.
Intern PLL til hurtig generering af perifert ur – clkPCK
Den interne PLL i ATtiny25/45/85 genererer en klokfrekvens, der er 8x ganget fra en kildeindgang. Som standard bruger PLL outputtet fra den interne 8.0 MHz RC-oscillator som kilde. Alternativt, hvis bit LSM af PLLCSR er indstillet, vil PLL bruge outputtet fra RC-oscillatoren divideret med to. Udgangssignalet fra PLL'en, det hurtige perifere ur, er således 64 MHz. Det hurtige perifere ur, eller et ur forudskaleret derfra, kan vælges som urkilde for Timer/Counter1 eller som et systemur. Se Figur 6-2. Frekvensen af det hurtige perifere ur divideres med to, når LSM af PLLCSR er indstillet, hvilket resulterer i en clockfrekvens på 32 MHz. Bemærk, at LSM ikke kan indstilles, hvis PLLCLK bruges som systemur.
Figur 6-2. PCK ursystem.
PLL'en er låst på RC-oscillatoren, og justering af RC-oscillatoren via OSCCAL-registret vil justere det hurtige perifere ur på samme tid. Men selvom RC-oscillatoren tages til en højere frekvens end 8 MHz, mættes den hurtige perifere clock-frekvens ved 85 MHz (worst case) og forbliver oscillerende ved den maksimale frekvens. Det skal bemærkes, at PLL'en i dette tilfælde ikke længere er låst med RC-oscillator-uret. Derfor anbefales det ikke at tage OSCCAL-justeringerne til en højere frekvens end 8 MHz for at holde PLL i det korrekte driftsområde.
Den interne PLL er aktiveret, når:
PLLE-bitten i registeret PLLCSR er indstillet.
CKSEL-sikringen er programmeret til '0001'.
CKSEL-sikringen er programmeret til '0011'.
PLLCSR bit PLOCK indstilles, når PLL er låst. Både intern RC-oscillator og PLL er slukket i power down og stand-by dvaletilstand.
Intern PLL i ATtiny15-kompatibilitetstilstand
Da ATtiny25/45/85 er en migreringsenhed til ATtiny15-brugere, er der en ATtiny15-kompatibilitetstilstand til bagudkompatibilitet. ATtiny15-kompatibilitetstilstanden vælges ved at programmere CKSEL-sikringerne til '0011'.
I ATtiny15-kompatibilitetstilstanden er frekvensen af den interne RC-oscillator kalibreret ned til 6.4 MHz, og multiplikationsfaktoren for PLL er sat til 4x. Se Figur 6-3. Med disse justeringer er clocking-systemet ATtiny15-kompatibelt, og det resulterende hurtige perifere ur har en frekvens på 25.6 MHz (samme som i ATtiny15).
Figur 6-3. PCK-ursystem i ATtiny15-kompatibilitetstilstand.
Urkilder
Enheden har følgende urkildeindstillinger, der kan vælges med Flash Fuse-bits som vist nedenfor. Uret fra den valgte kilde indlæses til AVR-clockgeneratoren og dirigeres til de relevante moduler.
Tabel 6-1. Indstillinger for enhedsur Vælg
Mulighed for enhedsur | CKSEL[3:0](1) |
Eksternt ur (se side 26) | 0000 |
Højfrekvent PLL-ur (se side 26) | 0001 |
Kalibreret intern oscillator (se side 27) | 0010(2) |
Kalibreret intern oscillator (se side 27) | 0011(3) |
Intern 128 kHz Oscillator (se side 28) | 0100 |
Lavfrekvent krystaloscillator (se side 29) | 0110 |
Krystaloscillator/keramisk resonator (se side 29) | 1000 – 1111 |
Reserveret | 0101, 0111 |
For alle sikringer betyder "1" uprogrammeret, mens "0" betyder programmeret.
Enheden leveres med denne indstilling valgt.
Dette vil vælge ATtiny15 Compatibility Mode, hvor systemuret divideres med fire, hvilket resulterer i en 1.6 MHz klokfrekvens. For mere information, se "Kalibreret intern oscillator" på side 27.
De forskellige valgmuligheder for hver clock-indstilling er angivet i de følgende afsnit. Når CPU'en vågner fra Power-down, bruges den valgte clock-kilde til at time opstarten, hvilket sikrer stabil Oscillator-drift, før instruktionsudførelsen starter. Når CPU'en starter fra nulstilling, er der en ekstra forsinkelse, der tillader strømmen at nå et stabilt niveau, før normal drift påbegyndes. Watchdog Oscillator bruges til at tidsindstille denne del af opstartstiden i realtid. Antallet af WDT-oscillatorcyklusser, der bruges for hver time-out, vises i Tabel 6-2.
Tabel 6-2. Antal Watchdog Oscillator-cyklusser
Typ Time-out | Antal cyklusser |
4 ms | 512 |
64 ms | 8K (8,192) |
Eksternt ur
For at drive enheden fra en ekstern urkilde skal CLKI køres som vist i Figur 6-4. For at køre enheden på et eksternt ur, skal CKSEL-sikringerne programmeres til "00".
Figur 6-4. Konfiguration af eksternt urdrev
Når denne urkilde er valgt, bestemmes opstartstiderne af SUT-sikringerne som vist i Tabel 6-3.
Tabel 6-3. Opstartstider for det eksterne urvalg
SUT[1:0] | Opstartstid fra nedlukning | Yderligere forsinkelse fra nulstilling | Anbefalet brug |
00 | 6 CK | 14CK | BOD aktiveret |
01 | 6 CK | 14CK + 4 ms | Hurtigt stigende kraft |
10 | 6 CK | 14CK + 64 ms | Langsomt stigende magt |
11 | Reserveret |
Når du anvender et eksternt ur, er det nødvendigt at undgå pludselige ændringer i den anvendte clock-frekvens for at sikre stabil drift af MCU'en. En variation i frekvens på mere end 2 % fra den ene urcyklus til den næste kan føre til uforudsigelig adfærd. Det er påkrævet at sikre, at MCU'en holdes i Reset under sådanne ændringer i klokfrekvensen.
Bemærk, at System Clock Presale kan bruges til at implementere runtime-ændringer af den interne clock-frekvens og samtidig sikre stabil drift. Der henvises til "System Clock Prescaler" på side 31 for detaljer.
Højfrekvent PLL-ur
Der er en intern PLL, der giver nominelt 64 MHz klokfrekvens låst til RC-oscillatoren til brug af den perifere timer/tæller1 og for systemurkilden. Når den er valgt som en systemurkilde, ved at programmere CKSEL-sikringerne til '0001', divideres den med fire som vist i Tabel 6-4.
Tabel 6-4. Driftstilstande for højfrekvent PLL-ur
CKSEL[3:0] | Nominel frekvens |
0001 | 16 MHz |
Når denne urkilde er valgt, bestemmes opstartstiderne af SUT-sikringerne som vist i Tabel 6-5.
Tabel 6-5. Opstartstider for det højfrekvente PLL-ur
SUT[1:0] | Opstartstid fra Power Down | Yderligere forsinkelse fra Power-On Reset (VCC = 5.0V) | Anbefalet brug |
00 | 14CK + 1K (1024) CK + 4 ms | 4 ms | BOD aktiveret |
Tabel 6-5. Opstartstider for det højfrekvente PLL-ur
SUT[1:0] | Opstartstid fra Power Down | Yderligere forsinkelse fra Power-On Reset (VCC = 5.0V) | Anbefalet brug |
01 | 14CK + 16K (16384) CK + 4 ms | 4 ms | Hurtigt stigende kraft |
10 | 14CK + 1K (1024) CK + 64 ms | 4 ms | Langsomt stigende magt |
11 | 14CK + 16K (16384) CK + 64 ms | 4 ms | Langsomt stigende magt |
Kalibreret intern oscillator
Som standard giver den interne RC-oscillator et ur på cirka 8.0 MHz. Skønt voltage og temperaturafhængig, kan dette ur kalibreres meget nøjagtigt af brugeren. Se "Kalibreret intern RC-oscillator-akku- racy” på side 164 og "Intern oscillatorhastighed" på side 192 for flere detaljer. Enheden leveres med CKDIV8-sikringen programmeret. Se "System Clock Prescaler" på side 31 for flere detaljer.
Dette ur kan vælges som systemur ved at programmere CKSEL-sikringerne som vist i Tabel 6-6 på side
27. Hvis valgt, vil den fungere uden eksterne komponenter. Under nulstilling indlæser hardware den forprogrammerede kalibreringsværdi i OSCCAL-registret og kalibrerer derved automatisk RC-oscillatoren. Nøjagtigheden af denne kalibrering vises som Fabrikskalibrering i Tabel 21-2 på side 164.
Ved at ændre OSCCAL-registret fra SW, se "OSCCAL – Oscillatorkalibreringsregister" på side 31, er det muligt at få en højere kalibreringsnøjagtighed end ved at bruge fabrikskalibreringen. Nøjagtigheden af denne kalibrering vises som Brugerkalibrering i Tabel 21-2 på side 164.
Når denne Oscillator bruges som chip-ur, vil Watchdog Oscillator stadig blive brugt til Watchdog-timeren og til Reset-timeout. For mere information om den forprogrammerede kalibreringsværdi, se afsnittet "Cali- bration Bytes" på side 150.
Den interne oscillator kan også indstilles til at give et 6.4 MHz ur ved at skrive CKSEL-sikringer til "0011", som vist i Tabel 6-6 under. Denne indstilling omtales som ATtiny15-kompatibilitetstilstand og er beregnet til at give en kalibreret clock-kilde ved 6.4 MHz, som i ATtiny15. I ATtiny15-kompatibilitetstilstand bruger PLL den interne oscillator, der kører ved 6.4 MHz til at generere et 25.6 MHz perifert clock-signal for Timer/Counter1 (se "8-bit timer/tæller 1 tommer ATtiny15 Mode" på side 95). Bemærk, at i denne driftstilstand er 6.4 MHz-ursignalet altid divideret med fire, hvilket giver et 1.6 MHz-systemur.
Tabel 6-6. Intern kalibreret RC Oscillator driftstilstande
CKSEL[3:0] | Nominel frekvens |
0010(1) | 8.0 MHz |
0011(2) | 6.4 MHz |
Enheden leveres med denne indstilling valgt.
Denne indstilling vil vælge ATtiny15-kompatibilitetstilstand, hvor systemuret divideres med fire, hvilket resulterer i en 1.6 MHz klokfrekvens.
Når den kalibrerede 8 MHz interne oscillator er valgt som klokkilde, bestemmes opstartstiderne af SUT-sikringerne som vist i Tabel 6-7 under.
Tabel 6-7. Opstartstider for internt kalibreret RC-oscillatorur
SUT[1:0] | Opstartstid fra nedlukning | Yderligere forsinkelse fra nulstilling (VCC = 5.0 V) | Anbefalet brug |
00 | 6 CK | 14CK(1) | BOD aktiveret |
01 | 6 CK | 14CK + 4 ms | Hurtigt stigende kraft |
10(2) | 6 CK | 14CK + 64 ms | Langsomt stigende magt |
11 | Reserveret |
1. Hvis RSTDISBL-sikringen er programmeret, øges denne opstartstid til 14CK + 4 ms for at sikre, at programmeringstilstanden kan aktiveres.
2. Enheden leveres med denne indstilling valgt.
I ATtiny15-kompatibilitetstilstand bestemmes opstartstiderne af SUT-sikringer som vist i Tabel 6-8 under.
Tabel 6-8. Opstartstider for internt kalibreret RC-oscillatorur (i ATtiny15-tilstand)
SUT[1:0] | Opstartstid fra nedlukning | Yderligere forsinkelse fra nulstilling (VCC = 5.0 V) | Anbefalet brug |
00 | 6 CK | 14CK + 64 ms | |
01 | 6 CK | 14CK + 64 ms | |
10 | 6 CK | 14CK + 4 ms | |
11 | 1 CK | 14CK(1) |
Bemærk: Hvis RSTDISBL-sikringen er programmeret, øges denne opstartstid til 14CK + 4 ms for at sikre, at programmeringstilstanden kan aktiveres.
Sammenfattende kan du finde flere oplysninger om ATtiny15-kompatibilitetstilstand i afsnittene "Port B (PB5:PB0)" tændt side 2, "Intern PLL i ATtiny15-kompatibilitetstilstand" på side 24, "8-bit timer/tæller1 i ATtiny15-tilstand" tændt side 95, "Begrænsninger af debugWIRE" på side 140, "Kalibreringsbytes" på side 150 og i tabel "Clock Prescaler Vælg" på side 33.
Intern 128 kHz Oscillator
Den interne 128 kHz oscillator er en laveffektoscillator, der giver et ur på 128 kHz. Frekvensen er nominel ved 3V og 25°C. Dette ur kan vælges som systemur ved at programmere CKSEL-sikringerne til "0100".
Når denne urkilde er valgt, bestemmes opstartstiderne af SUT-sikringerne som vist i Tabel 6-9.
Tabel 6-9. Opstartstider for den interne 128 kHz-oscillator
SUT[1:0] | Opstartstid fra nedlukning | Yderligere forsinkelse fra nulstilling | Anbefalet brug |
00 | 6 CK | 14CK(1) | BOD aktiveret |
01 | 6 CK | 14CK + 4 ms | Hurtigt stigende kraft |
10 | 6 CK | 14CK + 64 ms | Langsomt stigende magt |
11 | Reserveret |
Bemærk: Hvis RSTDISBL-sikringen er programmeret, øges denne opstartstid til 14CK + 4 ms for at sikre, at programmeringstilstanden kan aktiveres.
Lavfrekvent krystaloscillator
For at bruge en 32.768 kHz urkrystal som urkilde for enheden, skal lavfrekvent krystaloscillator vælges ved at indstille CKSEL-sikringer til '0110'. Krystallen skal tilsluttes som vist i Figur 6-5. For at finde passende belastningskapacitans til en 32.768 kHz krysal, se venligst producentens datablad.
Når denne oscillator er valgt, bestemmes opstartstiderne af SUT-sikringerne som vist i Tabel 6-10.
Tabel 6-10. Opstartstider for lavfrekvent krystaloscillator-urvalg
SUT[1:0] | Opstartstid fra Power Down | Yderligere forsinkelse fra nulstilling (VCC = 5.0 V) | Anbefalet brug |
00 | 1K (1024) CK(1) | 4 ms | Hurtigt stigende effekt eller BOD aktiveret |
01 | 1K (1024) CK(1) | 64 ms | Langsomt stigende magt |
10 | 32K (32768) CK | 64 ms | Stabil frekvens ved opstart |
11 | Reserveret |
Bemærk: Disse muligheder bør kun bruges, hvis frekvensstabilitet ved opstart ikke er vigtig.
Lavfrekvent krystaloscillator giver en intern belastningskapacitans, se Tabel 6-11 ved hver TOSC pin.
Tabel 6-11. Kapacitans af lavfrekvent krystaloscillator
Enhed | 32 kHz Osc. Type | Cap (Xtal1/Tosc1) | Cap (Xtal2/Tosc2) |
ATtiny25/45/85 | System Osc. | 16 pF | 6 pF |
Krystaloscillator/keramisk resonator
XTAL1 og XTAL2 er henholdsvis input og output af en invertering ampLifier, som kan konfigureres til brug som en On-chip Oscillator, som vist i Figur 6-5. Enten en kvartskrystal eller en keramisk resonator kan bruges.
C1 og C2 skal altid være ens for både krystaller og resonatorer. Den optimale værdi af kondensatorerne afhænger af krystallen eller resonatoren, der er i brug, mængden af afvigende kapacitans og den elektromagnetiske støj i miljøet. Nogle indledende retningslinjer for valg af kondensatorer til brug med krystaller er givet i Tabel 6-12 under. For keramiske resonatorer skal de kondensatorværdier, der er angivet af producenten, anvendes.
Tabel 6-12. Crystal Oscillator driftstilstande
CKSEL[3:1] | Frekvensområde (MHz) | Anbefalet område for kondensatorer C1 og C2 til brug med krystaller (pF) |
100(1) | 0.4 – 0.9 | – |
101 | 0.9 – 3.0 | 12 – 22 |
110 | 3.0 – 8.0 | 12 – 22 |
111 | 8.0 – | 12 – 22 |
Bemærkninger: Denne mulighed bør ikke bruges med krystaller, kun med keramiske resonatorer.
Oscillatoren kan fungere i tre forskellige tilstande, hver optimeret til et specifikt frekvensområde. Driftstilstanden vælges af sikringerne CKSEL[3:1] som vist i Tabel 6-12.
CKSEL0-sikringen sammen med SUT[1:0]-sikringerne vælger opstartstiderne som vist i Tabel 6-13.
Tabel 6-13. Opstartstider for valg af krystaloscillatorur
CKSEL0 | SUT[1:0] | Opstartstid fra nedlukning | Yderligere forsinkelse fra nulstilling | Anbefalet brug |
0 | 00 | 258 CK(1) | 14CK + 4 ms | Keramisk resonator, hurtigt stigende kraft |
0 | 01 | 258 CK(1) | 14CK + 64 ms | Keramisk resonator, langsomt stigende effekt |
0 | 10 | 1K (1024) CK(2) | 14CK | Keramisk resonator, BOD aktiveret |
0 | 11 | 1K (1024)CK(2) | 14CK + 4 ms | Keramisk resonator, hurtigt stigende kraft |
1 | 00 | 1K (1024)CK(2) | 14CK + 64 ms | Keramisk resonator, langsomt stigende effekt |
1 | 01 | 16K (16384) CK | 14CK | Krystaloscillator, BOD aktiveret |
1 | 10 | 16K (16384) CK | 14CK + 4 ms | Krystaloscillator, hurtigt stigende kraft |
1 | 11 | 16K (16384) CK | 14CK + 64 ms | Krystaloscillator, langsomt stigende kraft |
Noter
Disse muligheder bør kun bruges, når den ikke arbejder tæt på enhedens maksimale frekvens, og kun hvis frekvensstabilitet ved opstart ikke er vigtig for applikationen. Disse muligheder er ikke egnede til krystaller.
Disse muligheder er beregnet til brug med keramiske resonatorer og vil sikre frekvensstabilitet ved opstart. De kan også bruges med krystaller, når de ikke arbejder tæt på enhedens maksimale frekvens, og hvis frekvensstabilitet ved opstart ikke er vigtig for applikationen.
Standard urkilde
Enheden leveres med CKSEL = "0010", SUT = "10" og CKDIV8 programmeret. Standardindstillingen for urkilden er derfor den interne RC-oscillator, der kører ved 8 MHz med længst opstartstid og en indledende systemur-forskalering på 8, hvilket resulterer i 1.0 MHz systemur. Denne standardindstilling sikrer, at alle brugere kan foretage deres ønskede urkildeindstilling ved hjælp af en In-System eller High-voltage Programmer.
System Clock Prescaler
ATtiny25/45/85 systemuret kan opdeles ved at indstille "CLKPR – Clock Prescale Register" på side 32. Denne funktion kan bruges til at reducere strømforbruget, når kravet til processorkraft er lavt. Dette kan bruges med alle urkildeindstillinger, og det vil påvirke clockfrekvensen for CPU'en og alle synkrone perifere enheder. clkI/O, clkADC, clkCPU og clkFLASH divideres med en faktor som vist i Tabel 6-15 på side 33.
Skiftetid
Når der skiftes mellem prescaler-indstillinger, sikrer System Clock Prescaler, at der ikke opstår fejl i ursystemet, og at ingen mellemfrekvens er højere end hverken clock-frekvensen svarende til den tidligere indstilling, eller clock-frekvensen svarende til den nye indstilling.
Rippletælleren, der implementerer forskaleren, kører med frekvensen af det udelte ur, som kan være hurtigere end CPU'ens clock-frekvens. Det er derfor ikke muligt at bestemme tilstanden af forskaleren - selv om den var læsbar, og den nøjagtige tid, det tager at skifte fra en urinddeling til en anden, kan ikke forudsiges nøjagtigt.
Fra det tidspunkt, CLKPS-værdierne skrives, går der mellem T1 + T2 og T1 + 2*T2, før den nye klokfrekvens er aktiv. I dette interval produceres 2 aktive urkanter. Her er T1 den forrige urperiode, og T2 er den periode, der svarer til den nye prescaler-indstilling.
Ur udgangsbuffer
Enheden kan udsende systemuret på CLKO-benet (når det ikke bruges som XTAL2-ben). For at aktivere udgangen skal CKOUT-sikringen programmeres. Denne tilstand er velegnet, når chip-uret bruges til at drive andre kredsløb på systemet. Bemærk, at uret ikke udsendes under nulstilling, og at den normale drift af I/O-pinden vil blive tilsidesat, når sikringen er programmeret. Intern RC-oscillator, WDT-oscillator, PLL og eksternt ur (CLKI) kan vælges, når uret udsendes på CLKO. Krystaloscillatorer (XTAL1, XTAL2) kan ikke bruges til clockoutput på CLKO. Hvis System Clock Prescaler bruges, er det det opdelte systemur, der udlæses.
Registerbeskrivelse
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 |
Bits 7:0 – CAL[7:0]: Oscillatorkalibreringsværdi
Oscillatorkalibreringsregistret bruges til at trimme den kalibrerede interne RC-oscillator for at fjerne procesvariationer fra oscillatorfrekvensen. En forprogrammeret kalibreringsværdi skrives automatisk til dette register under chipnulstilling, hvilket giver den fabrikskalibrerede frekvens som specificeret i Tabel 21-2 på side 164. Applikationssoftwaren kan skrive dette register for at ændre oscillatorfrekvensen. Oscillatoren kan kalibreres til frekvenser som specificeret i Tabel 21-2 på side 164. Kalibrering uden for dette område er ikke garanteret.
Bemærk, at denne oscillator bruges til at time EEPROM- og Flash-skriveadgange, og disse skrivetider vil blive påvirket i overensstemmelse hermed. Hvis EEPROM eller Flash er skrevet, må du ikke kalibrere til mere end 8.8 MHz. Ellers kan EEPROM eller Flash-skrivning mislykkes.
CAL7-bitten bestemmer operationsområdet for oscillatoren. Indstilling af denne bit til 0 giver det laveste frekvensområde, indstilling af denne bit til 1 giver det højeste frekvensområde. De to frekvensområder overlapper hinanden, med andre ord giver en indstilling på OSCCAL = 0x7F en højere frekvens end OSCCAL = 0x80.
CAL[6:0]-bittene bruges til at indstille frekvensen inden for det valgte område. En indstilling på 0x00 giver den laveste frekvens i området, og en indstilling på 0x7F giver den højeste frekvens i området.
For at sikre stabil drift af MCU'en bør kalibreringsværdien ændres i lille. En variation i hyppigheden på mere end 2 % fra den ene cyklus til den næste kan føre til uforudsigelig adfærd. Ændringer i OSCCAL bør ikke overstige 0x20 for hver kalibrering. Det er påkrævet at sikre, at MCU'en holdes i Reset under sådanne ændringer i klokfrekvensen
Tabel 6-14. Intern RC Oscillator frekvensområde
OSCCAL værdi | Typisk laveste frekvens med hensyn til nominel frekvens | Typisk højeste frekvens med hensyn til nominel 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 |
Startværdi 0 0 0 0 Se bitbeskrivelse
Bit 7 – CLKPCE: Clock Prescaler Change Aktiver
CLKPCE-bitten skal skrives til logisk et for at muliggøre ændring af CLKPS-bittene. CLKPCE-bitten opdateres kun, når de andre bits i CLKPR samtidig skrives til nul. CLKPCE ryddes af hardware fire cyklusser efter det er skrevet, eller når CLKPS-bittene er skrevet. Omskrivning af CLKPCE-bitten inden for denne time-out-periode forlænger hverken time-out-perioden eller sletter CLKPCE-bitten.
Bits 6:4 – Res: Reserverede bits
Disse bits er reserverede bits i ATtiny25/45/85 og vil altid læses som nul.
Bits 3:0 – CLKPS[3:0]: Ur Prescaler Select Bits 3 – 0
Disse bits definerer divisionsfaktoren mellem den valgte klokkilde og det interne systemur. Disse bits kan skrives run-time for at variere clock-frekvensen for at passe til applikationskravene. Da divideren deler master-clock-inputtet til MCU'en, reduceres hastigheden af alle synkrone perifere enheder, når der anvendes en divisionsfaktor. Divisionsfaktorerne er angivet i Tabel 6-15.
For at undgå utilsigtede ændringer af klokfrekvensen skal en speciel skriveprocedure følges for at ændre CLKPS-bittene:
Skriv CLKPCE-bit (Clock Prescaler Change Enable) til en og alle andre bit i CLKPR til nul.
Inden for fire cyklusser skal du skrive den ønskede værdi til CLKPS, mens du skriver et nul til CLKPCE.
Afbrydelser skal deaktiveres, når du ændrer prescaler-indstillingen for at sikre, at skriveproceduren ikke afbrydes.
CKDIV8-sikringen bestemmer startværdien af CLKPS-bittene. Hvis CKDIV8 er uprogrammeret, nulstilles CLKPS-bittene til "0000". Hvis CKDIV8 er programmeret, nulstilles CLKPS bits til "0011", hvilket giver en divisionsfaktor på otte ved opstart. Denne funktion skal bruges, hvis den valgte urkilde har en højere frekvens end enhedens maksimale frekvens under de nuværende driftsforhold. Bemærk, at enhver værdi kan skrives til CLKPS-bittene uanset CKDIV8-sikringsindstillingen. Applikationssoftwaren skal sikre, at en tilstrækkelig divisionsfaktor er
valgt, hvis den valgte urkilde har en højere frekvens end enhedens maksimale frekvens under de nuværende driftsforhold. Enheden leveres med CKDIV8-sikringen programmeret.
Tabel 6-15. Ur Prescaler Vælg
CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | Uropdelingsfaktor |
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 | Reserveret |
1 | 0 | 1 | 0 | Reserveret |
1 | 0 | 1 | 1 | Reserveret |
1 | 1 | 0 | 0 | Reserveret |
1 | 1 | 0 | 1 | Reserveret |
1 | 1 | 1 | 0 | Reserveret |
1 | 1 | 1 | 1 | Reserveret |
Bemærk: Forskaleren er deaktiveret i ATtiny15-kompatibilitetstilstand, og hverken skrivning til CLKPR eller programmering af CKDIV8-sikringen har nogen effekt på systemuret (som altid vil være 1.6 MHz).
Strømstyring og dvaletilstande
Den høje ydeevne og brancheførende kodeeffektivitet gør AVR-mikrocontrollerne til et ideelt valg til laveffektapplikationer. Derudover gør dvaletilstande det muligt for applikationen at lukke ubrugte moduler ned i MCU'en og derved spare strøm. AVR giver forskellige dvaletilstande, så brugeren kan skræddersy strømforbruget til applikationens krav.
Dvaletilstand
Figur 6-1 på side 23 præsenterer de forskellige ursystemer og deres distribution i ATtiny25/45/85. Figuren er nyttig til at vælge en passende dvaletilstand. Tabel 7-1 viser de forskellige dvaletilstande og deres vågnekilder.
Tabel 7-1. Aktive ur-domæner og wake-up-kilder i de forskellige dvaletilstande
Aktive ur-domæner | Oscillatorer | Wake-up kilder | ||||||||||
Dvaletilstand | clkCPU | clkFLASH | clkIO | clkADC | clkPCK | Hovedurkilde aktiveret | INT0 og Pin Change | SPM/EEPROM
Parat |
USI Starttilstand |
ADC | Andet I/O | Vagthund Afbryde |
Ledig | X | X | X | X | X | X | X | X | X | X | ||
ADC-støjreduktion | X | X | X(1) | X | X | X | X | |||||
Sluk | X(1) | X | X |
Bemærk: For INT0, kun niveauafbrydelse.
For at gå ind i en af de tre dvaletilstande skal SE-bitten i MCUCR skrives til logisk 1, og en SLEEP-instruktion skal udføres. SM[0:XNUMX]-bittene i MCUCR-registret vælger, hvilken dvaletilstand (Idle, ADC Noise Reduction eller Power-down) vil blive aktiveret af SLEEP-instruktionen. Se Tabel 7-2 for et resumé.
Hvis der opstår en aktiveret afbrydelse, mens MCU'en er i dvaletilstand, vågner MCU'en. MCU'en standses derefter i fire cyklusser ud over opstartstiden, udfører afbrydelsesrutinen og genoptager udførelsen fra instruktionen efter SLEEP. Indholdet af registret File og SRAM er uændrede, når enheden vågner fra dvale. Hvis der opstår en nulstilling under dvaletilstand, vågner MCU'en og udføres fra nulstillingsvektoren.
Bemærk: at hvis en niveauudløst afbrydelse bruges til vækning, skal det ændrede niveau holdes i nogen tid for at vække MCU'en (og for at MCU'en kan gå ind i afbrydelsesservicerutinen). Se "Eksterne afbrydelser" på side 49 for detaljer.
Inaktiv tilstand
Når SM[1:0]-bits skrives til 00, får SLEEP-instruktionen MCU'en til at gå i inaktiv tilstand, hvilket stopper CPU'en, men tillader Analog Comparator, ADC, USI, Timer/Counter, Watchdog og afbrydelsessystemet at fortsætte med at fungere. spisning. Denne dvaletilstand stopper dybest set clkCPU og clkFLASH, mens den tillader de andre ure at køre.
Inaktiv tilstand gør det muligt for MCU'en at vågne op fra eksterne udløste afbrydelser såvel som interne som Timer Overflow. Hvis vækning fra Analog Comparator-afbrydelsen ikke er påkrævet, kan Analog Comparator slukkes ved at indstille ACD-bitten i "ACSR – Analog Comparator Control and Status Register" på side 120. Dette vil reducere strømforbruget i inaktiv tilstand. Hvis ADC'en er aktiveret, starter en konvertering automatisk, når denne tilstand aktiveres.
ADC-støjreduktionstilstand
Når SM[1:0]-bittene skrives til 01, får SLEEP-instruktionen MCU'en til at gå i ADC-støjreduktionstilstand, hvilket stopper CPU'en, men tillader ADC'en, de eksterne interrupts og Watchdog'en at fortsætte med at fungere (hvis aktiveret). Denne dvaletilstand standser clkI/O, clkCPU og clkFLASH, mens de lader de andre ure køre.
Dette forbedrer støjmiljøet for ADC, hvilket muliggør målinger med højere opløsning. Hvis ADC'en er aktiveret, starter en konvertering automatisk, når denne tilstand aktiveres. Bortset fra ADC Conversion Complete-afbrydelsen, er det kun en ekstern nulstilling, en vagthund-nulstilling, en brun-out-nulstilling, en SPM/EEPROM klar afbrydelse, en ekstern niveauafbrydelse på INT0 eller en pinskifte-afbrydelse, der kan vække MCU'en fra ADC-støjreduktion mode.
Sluk-tilstand
Når SM[1:0]-bits skrives til 10, får SLEEP-instruktionen MCU'en til at gå i Power-down-tilstand. I denne tilstand stoppes oscillatoren, mens den eksterne interrupts, USI-starttilstandsdetektionen og Watchdog fortsætter med at fungere (hvis aktiveret). Kun en ekstern nulstilling, en vagthund-nulstilling, en brun-out-nulstilling, USI-starttilstandsafbrydelse, en ekstern niveauafbrydelse på INT0 eller en pinskifteafbrydelse kan vække MCU'en. Denne dvaletilstand standser alle genererede ure, hvilket kun tillader drift af asynkrone moduler.
Software BOD deaktiver
Når Brown-out-detektoren (BOD) er aktiveret af BODLEVEL-sikringer (se Tabel 20-4 på side 148), BOD overvåger aktivt forsyningen voltage i en søvnperiode. I nogle enheder er det muligt at spare strøm ved at deaktivere BOD med software i Power-Down dvaletilstand. Strømforbruget i dvaletilstanden vil så være på samme niveau, som når BOD er globalt deaktiveret af sikringer.
Hvis BOD er deaktiveret af software, deaktiveres BOD-funktionen umiddelbart efter at have gået i dvaletilstand. Ved opvågning fra dvale aktiveres BOD automatisk igen. Dette sikrer sikker drift i tilfælde af, at VCC-niveauet er faldet under dvaleperioden.
Når BOD er blevet deaktiveret, vil opvågningstiden fra dvaletilstand være den samme som for opvågning fra RESET. Brugeren skal manuelt konfigurere opvågningstider, således at båndgap-referencen har tid til at starte, og BOD'en fungerer korrekt, før MCU'en fortsætter med at udføre kode. Se SUT[1:0] og CKSEL[3:0] sikringsbit i tabellen "Sikring lav byte" på side 149
BOD-deaktivering styres af BODS (BOD Sleep) bit i MCU Control Register, se “MCUCR – MCU kontrol Tilmeld dig” på side 37. Hvis du skriver denne bit til én, deaktiveres BOD i Power-Down, mens skrivning af et nul holder BOD aktiv. Standardindstillingen er nul, dvs. BOD aktiv.
Skrivning til BODS-bitten styres af en tidsindstillet sekvens og en aktiveringsbit, se "MCUCR – MCU Control Regis- ter” på side 37.
Begrænsninger
BOD-deaktiveringsfunktionalitet er kun implementeret på følgende enheder:
ATtiny25, revision E og nyere
ATtiny45, revision D og nyere
ATtiny85, revision C og nyere
Revisioner er markeret på enhedspakken og kan placeres som følger:
Undersiden af pakke 8P3 og 8S2
Oversiden af pakke 20M1
Strømreduktionsregister
Power Reduction Register (PRR), se "PRR – Power Reduction Register" på side 38, giver en metode til at reducere strømforbruget ved at stoppe uret til individuelle perifere enheder. Periferudstyrets aktuelle tilstand er fastfrosset, og I/O-registrene kan ikke læses eller skrives. Ressourcer, der bruges af den perifere enhed, når uret stoppes, vil forblive optaget, derfor bør den perifere enhed i de fleste tilfælde deaktiveres, før uret stoppes. Opvågning af et modul, hvilket sker ved at rydde bit i PRR, sætter modulet i samme tilstand som før nedlukning.
Modulnedlukning kan bruges i inaktiv tilstand og aktiv tilstand for at reducere det samlede strømforbrug markant. I alle andre dvaletilstande er uret allerede stoppet. Se "Forsyningsstrøm for I/O-moduler" på side 177 f.eksamples.
Minimering af strømforbrug
Der er flere problemer at overveje, når man forsøger at minimere strømforbruget i et AVR-styret system. Generelt bør dvaletilstande bruges så meget som muligt, og dvaletilstand skal vælges, så færrest muligt af enhedens funktioner fungerer. Alle funktioner, der ikke er nødvendige, bør deaktiveres. Især de følgende moduler kan kræve særlig overvejelse, når de forsøger at opnå det lavest mulige strømforbrug.
Analog til digital konverter
Hvis aktiveret, vil ADC'en være aktiveret i alle dvaletilstande. For at spare strøm skal ADC'en deaktiveres, før den går i dvaletilstand. Når ADC'en slukkes og tændes igen, vil den næste konvertering være en udvidet konvertering. Der henvises til "Analog til digital konverter" på side 122 for detaljer om ADC-drift.
Analog komparator
Når den går i inaktiv tilstand, skal den analoge komparator være deaktiveret, hvis den ikke bruges. Når du går ind i ADC Noise Reduction-tilstand, skal den analoge komparator være deaktiveret. I de andre dvaletilstande er den analoge komparator automatisk deaktiveret. Men hvis den analoge komparator er sat op til at bruge Internal Voltage Som input skal den analoge komparator være deaktiveret i alle dvaletilstande. Ellers er Internal Voltage Reference vil være aktiveret, uafhængigt af dvaletilstand. Der henvises til "Analog komparator" på side 119 for detaljer om, hvordan man konfigurerer Analog Comparator.
Brun-out detektor
Hvis Brown-out-detektoren ikke er nødvendig i applikationen, skal dette modul slukkes. Hvis Brown-out-detektoren er aktiveret af BODLEVEL-sikringerne, vil den være aktiveret i alle dvaletilstande og forbruger derfor altid strøm. I de dybere dvaletilstande vil dette bidrage væsentligt til det samlede strømforbrug. Se "Brun-out detek- tion” på side 41 og "Software BOD Disable" på side 35 for detaljer om, hvordan brun-out-detektoren konfigureres.
Intern voltage Reference
The Internal Voltage Reference vil blive aktiveret, når det er nødvendigt af Brown-out Detection, Analog Comparator eller ADC. Hvis disse moduler er deaktiveret som beskrevet i afsnittene ovenfor, vil den interne voltagReferencen vil blive deaktiveret, og den bruger ikke strøm. Når den er tændt igen, skal brugeren tillade referencen at starte op, før udgangen bruges. Hvis referencen holdes tændt i dvaletilstand, kan udgangen bruges med det samme. Der henvises til "Intern Voltage Reference” på side 42 for detaljer om opstartstidspunktet.
Watchdog timer
Hvis Watchdog Timer ikke er nødvendig i applikationen, skal dette modul være slukket. Hvis Watchdog Timer er aktiveret, vil den være aktiveret i alle dvaletilstande og derfor altid forbruge strøm. I de dybere dvaletilstande vil dette bidrage væsentligt til det samlede strømforbrug. Der henvises til "Watchdog Timer" på side 42 for detaljer om, hvordan man konfigurerer Watchdog-timeren.
Port Pins
Når du går ind i en dvaletilstand, skal alle portben konfigureres til at bruge minimum strøm. Det vigtigste er så at sikre, at ingen stifter driver resistive belastninger. I dvaletilstande, hvor både I/O-uret (clkI/O) og ADC-uret (clkADC) er stoppet, vil enhedens inputbuffere blive deaktiveret. Dette sikrer, at der ikke forbruges strøm
ved inputlogikken, når det ikke er nødvendigt. I nogle tilfælde er inputlogikken nødvendig for at detektere opvågningstilstande, og
den vil så blive aktiveret. Se afsnittet "Aktivering af digital input og dvaletilstand" på side 57 for detaljer om, hvilke ben der er aktiveret. Hvis inputbufferen er aktiveret, og inputsignalet efterlades flydende eller har et analogt signalniveau tæt på VCC/2, vil inputbufferen bruge for meget strøm.
For analoge inputben bør den digitale inputbuffer altid være deaktiveret. Et analogt signalniveau tæt på VCC/2 på en indgangspin kan forårsage betydelig strøm selv i aktiv tilstand. Digitale inputbuffere kan deaktiveres ved at skrive til Digital Input Disable Register (DIDR0). Der henvises til "DIDR0 – Digital Input Disable Register 0" på side 121 for detaljer.
Registerbeskrivelse
MCUCR – MCU kontrolregister
MCU-kontrolregisteret indeholder kontrolbits til strømstyring.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUD | SE | SM1 | SM0 | BODSE | ISC01 | ISC00 | MCUCR |
Læs/skriv | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 – BODS: BOD Sleep
BOD-deaktiveringsfunktionalitet er kun tilgængelig på nogle enheder. Se “Begrænsninger” på side 36.
For at deaktivere BOD under søvn (se Tabel 7-1 på side 34) BODS-bitten skal skrives til logisk 1. Dette styres af en tidsindstillet sekvens og aktiveringsbitten, BODSE i MCUCR. Først skal både BODS og BODSE indstilles til én. For det andet, inden for fire clock-cyklusser, skal BODS indstilles til én, og BODSE skal indstilles til nul. BODS-bitten er aktiv tre clock-cyklusser efter den er indstillet. En søvninstruktion skal udføres, mens BODS er aktiv for at slå BOD fra for den faktiske dvaletilstand. BODS-bitten slettes automatisk efter tre clock-cyklusser.
I enheder, hvor Sleeping BOD ikke er implementeret, er denne bit ubrugt og vil altid læse nul.
Bit 5 – SE: Sleep Aktiver
SE-bitten skal skrives til logisk 1 for at få MCU'en til at gå i dvaletilstand, når SLEEP-instruktionen udføres. For at undgå, at MCU'en går i dvaletilstand, medmindre det er programmørens formål, anbefales det at skrive Sleep Enable (SE) bit til en lige før udførelsen af SLEEP-instruktionen og at rydde den umiddelbart efter opvågning.
Bit 4:3 – SM[1:0]: Dvaletilstand Vælg bit 1 og 0
Disse bits vælger mellem de tre tilgængelige dvaletilstande som vist i Tabel 7-2.
Tabel 7-2. Dvaletilstand Vælg
SM1 | SM0 | Dvaletilstand |
0 | 0 | Ledig |
0 | 1 | ADC-støjreduktion |
1 | 0 | Sluk |
1 | 1 | Reserveret |
Bit 2 – BODSE: BOD Sleep Aktiver
BOD-deaktiveringsfunktionalitet er kun tilgængelig på nogle enheder. Se “Begrænsninger” på side 36.
BODSE-bitten muliggør indstilling af BODS-kontrolbit, som forklaret i BODS-bitbeskrivelsen. BOD deaktivering styres af en tidsindstillet sekvens.
Denne bit er ubrugt i enheder, hvor software BOD-deaktivering ikke er blevet implementeret og vil læses som nul i disse enheder.
PRR – Power Reduction Register
Strømreduktionsregistret giver en metode til at reducere strømforbruget ved at tillade, at perifere clock-signaler deaktiveres.
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 | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7:4 – Res: Reserverede bits
Disse bits er reserverede bits i ATtiny25/45/85 og vil altid læses som nul.
Bit 3 – PRTIM1: Strømreduktionstimer/tæller1
Hvis du skriver en logisk en til denne bit, lukkes Timer/Counter1-modulet ned. Når Timer/Tæller1 er aktiveret, vil driften fortsætte som før nedlukningen.
Bit 2 – PRTIM0: Strømreduktionstimer/tæller0
Hvis du skriver en logisk en til denne bit, lukkes Timer/Counter0-modulet ned. Når Timer/Tæller0 er aktiveret, vil driften fortsætte som før nedlukningen.
Bit 1 – PRUSI: Power Reduction USI
At skrive en logisk en til denne bit lukker USI ved at stoppe uret til modulet. Når USI vækkes igen, skal USI'en initialiseres igen for at sikre korrekt drift.
Bit 0 – PRADC: Power Reduction ADC
Hvis du skriver en logisk en til denne bit, lukkes ADC'en ned. ADC'en skal deaktiveres, før den lukkes ned. Bemærk, at ADC-uret også bruges af nogle dele af den analoge komparator, hvilket betyder, at den analoge komparator ikke kan bruges, når denne bit er høj.
Systemkontrol og nulstilling
Nulstilling af AVR
Under nulstilling indstilles alle I/O-registre til deres begyndelsesværdier, og programmet starter afviklingen fra nulstilvektoren. Instruktionen placeret ved Reset Vector skal være en RJMP – Relative Jump – instruktion til nulstillingshåndteringsrutinen. Hvis programmet aldrig aktiverer en afbrydelseskilde, bruges interruptvektorerne ikke, og almindelig programkode kan placeres på disse steder. Kredsløbsdiagrammet i Figur 8-1 viser nulstillingslogikken. Elektriske parametre for nulstillingskredsløbet er angivet "System- og nulstillingskarakteristika" på side 165.
Figur 8-1 Nulstil logik
I/O-portene på AVR nulstilles straks til deres oprindelige tilstand, når en nulstillingskilde bliver aktiv. Dette kræver ikke, at nogen urkilde kører.
Efter at alle nulstillingskilder er blevet inaktive, fremkaldes en forsinkelsestæller, der strækker den interne nulstilling. Dette gør det muligt for strømmen at nå et stabilt niveau, før normal drift starter. Timeout-perioden for forsinkelsestælleren defineres af brugeren gennem SUT- og CKSEL-sikringerne. De forskellige valg for forsinkelsesperioden er præsenteret i "Ur Kilder” på side 25.
Nulstil kilder
ATtiny25/45/85 har fire kilder til nulstilling:
Start nulstilling. MCU'en nulstilles, når forsyningen voltage er under Power-on Reset Threshold (VPOT).
Ekstern nulstilling. MCU'en nulstilles, når der er et lavt niveau på RESET-stiften i længere tid end minimumsimpulslængden.
Nulstil vagthund. MCU'en nulstilles, når Watchdog Timer-perioden udløber, og Watchdog er aktiveret.
Brown-out nulstilling. MCU'en nulstilles, når forsyningen voltage VCC er under Brown-out Reset-tærsklen (VBOT), og Brown-out-detektoren er aktiveret.
Nulstilling ved opstart
En Power-on Reset (POR)-impuls genereres af et On-chip-detekteringskredsløb. Detektionsniveauet er defineret i "Sys- temperatur- og nulstillingskarakteristika" på side 165. POR aktiveres, når VCC er under detektionsniveauet. POR-kredsløbet kan bruges til at udløse Start-up Reset, samt til at detektere en fejl i forsyningsvolumentage.
Et Power-on Reset (POR)-kredsløb sikrer, at enheden nulstilles fra Power-on. At nå tærskelværdien for nulstilling ved start voltage aktiverer forsinkelsestælleren, som bestemmer, hvor længe enheden holdes i RESET efter VCC-stigning. RESET-signalet aktiveres igen uden nogen forsinkelse, når VCC falder til under detektionsniveauet.
Figur 8-2. MCU opstart, NULSTIL bundet til VCC
INTERN NULSTIL
Figur 8-3. MCU opstart, NULSTIL Udvidet eksternt
Ekstern nulstilling
En ekstern nulstilling genereres af et lavt niveau på RESET-stiften, hvis den er aktiveret. Nulstil pulser længere end minimum pulsbredde (se "System- og nulstillingskarakteristika" på side 165) vil generere en nulstilling, selvom uret ikke kører. Kortere impulser er ikke garanteret at generere en nulstilling. Når det påførte signal når Reset Threshold Voltage – VRST – på sin positive kant starter forsinkelsestælleren MCU'en, efter at Timeout-perioden er udløbet.
Figur 8-4. Ekstern nulstilling under drift
Brown-out detektion
ATtiny25/45/85 har et On-chip Brown-out Detection (BOD) kredsløb til overvågning af VCC-niveauet under drift ved at sammenligne det med et fast triggerniveau. Triggerniveauet for BOD kan vælges af BODLEVEL-sikringerne. Triggerniveauet har en hysterese for at sikre spidsfri Brown-out-detektion. Hysteresen på detektionsniveauet skal fortolkes som VBOT+ = VBOT + VHYST/2 og VBOT- = VBOT – VHYST/2.
Når BOD er aktiveret, og VCC falder til en værdi under triggerniveauet (VBOT-in) Figur 8-5), aktiveres Brown-out Reset øjeblikkeligt. Når VCC stiger over triggerniveauet (VBOT+ in Figur 8-5), starter forsinkelsestælleren MCU'en efter Timeout-perioden tTOUT er udløbet.
BOD-kredsløbet vil kun detektere et fald i VCC, hvis voltage forbliver under triggerniveauet i længere tid end tBOD givet ind "System- og nulstillingskarakteristika" på side 165.
Nulstil vagthund
Når Watchdog'en timeout, vil den generere en kort nulstillingsimpuls af en CK-cyklusvarighed. På den faldende kant af denne puls begynder forsinkelsestimeren at tælle Timeout-perioden tTOUT. Der henvises til "Watchdog Timer" på side 42 for detaljer om betjening af Watchdog-timeren.
Voltage Reference Aktiver signaler og opstartstid
VoltagReferencen har en opstartstid, som kan påvirke den måde, den skal bruges på. Opstartstiden er angivet "System- og nulstillingskarakteristika" på side 165. For at spare strøm er referencen ikke altid tændt. Referencen er tændt i følgende situationer:
Når BOD er aktiveret (ved at programmere BODLEVEL[2:0] sikringsbits).
Når båndgap-referencen er forbundet til den analoge komparator (ved at indstille ACBG-bitten i ACSR).
Når ADC'en er aktiveret.
Når BOD'en ikke er aktiveret, skal brugeren efter indstilling af ACBG-bit eller aktivering af ADC altid tillade referencen at starte op, før outputtet fra den analoge komparator eller ADC'en bruges. For at reducere strømforbruget i Power-down-tilstand kan brugeren undgå de tre ovenstående forhold for at sikre, at referencen er slukket, før han går ind i Power-down-tilstand.
Watchdog timer
Watchdog Timeren er clocket fra en On-chip Oscillator, som kører ved 128 kHz. Ved at styre Watchdog Timer-prescaleren kan Watchdog-nulstillingsintervallet justeres som vist i Tabel 8-3 på side 46. WDR – Watchdog Reset – instruktionen nulstiller Watchdog Timeren. Watchdog-timeren nulstilles også, når den er deaktiveret, og når en chipnulstilling forekommer. Ti forskellige urcyklusperioder kan vælges for at bestemme nulstillingsperioden. Hvis nulstillingsperioden udløber uden en anden Watchdog-nulstilling, nulstilles ATtiny25/45/85 og udføres fra nulstillingsvektoren. For timing detaljer om Watchdog Reset, se Tabel 8-3 på side 46.
Watchdog-timeren kan også konfigureres til at generere en afbrydelse i stedet for en nulstilling. Dette kan være meget nyttigt, når du bruger Watchdog til at vågne op fra Power-down.
For at forhindre utilsigtet deaktivering af Watchdog eller utilsigtet ændring af timeout-periode, vælges to forskellige sikkerhedsniveauer af sikringen WDTON som vist i Tabel 8-1 Der henvises til "Tidsindstillede sekvenser til ændring af kon- figuration af Watchdog Timer" på side 43 for detaljer.
Tabel 8-1. WDT-konfiguration som en funktion af sikringsindstillingerne for WDTON
WDTON | Sikkerhedsniveau | WDT udgangstilstand | Sådan deaktiveres WDT | Sådan ændres timeout |
Uprogrammeret | 1 | Handicappet | Tidsbestemt sekvens | Ingen begrænsninger |
Programmeret | 2 | Aktiveret | Altid aktiveret | Tidsbestemt sekvens |
Figur 8-7. Watchdog timer
Tidsindstillede sekvenser til ændring af konfigurationen af Watchdog-timeren
Sekvensen for ændring af konfigurationen afviger en smule mellem de to sikkerhedsniveauer. Separate procedurer er beskrevet for hvert niveau.
Sikkerhedsniveau 1: I denne tilstand er Watchdog-timeren oprindeligt deaktiveret, men kan aktiveres ved at skrive WDE-bitten til en uden nogen begrænsning. En tidsindstillet sekvens er nødvendig, når en aktiveret Watchdog Timer deaktiveres. For at deaktivere en aktiveret Watchdog Timer skal følgende procedure følges:
I samme operation skal du skrive en logisk en til WDCE og WDE. En logisk en skal skrives til WDE uanset den tidligere værdi af WDE-bitten.
Inden for de næste fire clock-cyklusser, i samme operation, skriv WDE- og WDP-bittene som ønsket, men med WDCE-bitten slettet.
Sikkerhedsniveau 2: I denne tilstand er Watchdog-timeren altid aktiveret, og WDE-bitten vil altid læses som én. En tidsindstillet sekvens er nødvendig, når du ændrer Watchdog Timeout-perioden. For at ændre Watchdog-timeout skal følgende procedure følges:
I samme operation skal du skrive en logisk til WDCE og WDE. Selvom WDE altid er indstillet, skal WDE skrives til en for at starte den tidsindstillede sekvens.
Inden for de næste fire clock-cyklusser, i samme operation, skriv WDP-bittene som ønsket, men med WDCE-bitten slettet. Værdien skrevet til WDE-bitten er irrelevant.
Kode Eksample
Følgende kode example viser en samling og en C-funktion til at slukke for WDT. Eksample antager, at interrupts styres (f.eks. ved at deaktivere interrupts globalt), så der ikke vil forekomme nogen interrupts under udførelsen af disse funktioner.
Monteringskode Example(1) |
WDT_off:
wdr ; Ryd WDRF i MCUSR ldi r16, (0< ud MCUSR, r16 ; Skriv logisk en til WDCE og WDE ; Behold den gamle prescaler-indstilling for at forhindre utilsigtet Watchdog-nulstilling i r16, WDTCR ori r16, (1< ud WDTCR, r16 ; Sluk WDT ldi r16, (0< ud WDTCR, r16 ret |
C-kode Eksample(1) |
void WDT_off(void)
{ _WDR(); /* Ryd WDRF i MCUSR */ MCUSR = 0x00 /* Skriv logisk et til WDCE og WDE */ WDTCR |= (1< /* Slå WDT fra */ WDTCR = 0x00; } |
Bemærk: 1. Se "Kodeeksamples" på side 6.
Registerbeskrivelse
MCUSR – MCU Status Register
MCU-statusregistret giver information om, hvilken nulstillingskilde der forårsagede en MCU-nulstilling.
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 |
Startværdi 0 0 0 0 Se bitbeskrivelse
Bits 7:4 – Res: Reserverede bits
Disse bits er reserverede bits i ATtiny25/45/85 og vil altid læses som nul.
Bit 3 – WDRF: Watchdog Reset Flag
Denne bit indstilles, hvis der opstår en Watchdog-nulstilling. Bitten nulstilles ved en Power-on Reset eller ved at skrive et logisk nul til flaget.
Bit 2 – BORF: Brown-out Reset Flag
Denne bit indstilles, hvis en brun-out-nulstilling forekommer. Bitten nulstilles ved en Power-on Reset eller ved at skrive et logisk nul til flaget.
Bit 1 – EXTRF: Eksternt nulstillingsflag
Denne bit indstilles, hvis der opstår en ekstern nulstilling. Bitten nulstilles ved en Power-on Reset eller ved at skrive et logisk nul til flaget.
Bit 0 – PORF: Flag til nulstilling ved start
Denne bit indstilles, hvis der opstår en Power-on Reset. Bitten nulstilles kun ved at skrive et logisk nul til flaget.
For at gøre brug af Reset Flags til at identificere en nulstillingstilstand, skal brugeren læse og derefter nulstille MCUSR'en så tidligt som muligt i programmet. Hvis registret ryddes, før en anden nulstilling finder sted, kan kilden til nulstillingen findes ved at undersøge nulstillingsflag.
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 | |
Startværdi | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
Bit 7 – WDIF: Watchdog Timeout Interrupt Flag
Denne bit indstilles, når der opstår en time-out i Watchdog-timeren, og Watchdog-timeren er konfigureret til afbrydelse. WDIF ryddes af hardware, når den tilsvarende interrupt-håndteringsvektor udføres. Alternativt ryddes WDIF ved at skrive en logisk et til flaget. Når I-bit i SREG og WDIE er indstillet, udføres Watchdog Timeout Interrupt.
Bit 6 – WDIE: Watchdog Timeout Interrupt Aktiver
Når denne bit er skrevet til en, slettes WDE, og I-bitten i statusregistret er indstillet, er Watchdog Timeout Interrupt aktiveret. I denne tilstand udføres den tilsvarende afbrydelse i stedet for en nulstilling, hvis der opstår en timeout i Watchdog-timeren.
Hvis WDE er indstillet, ryddes WDIE automatisk af hardware, når der opstår en time-out. Dette er nyttigt for at bevare Watchdog Reset-sikkerheden, mens du bruger afbrydelsen. Efter at WDIE-bitten er ryddet, vil den næste time-out generere en nulstilling. For at undgå Watchdog Reset skal WDIE indstilles efter hver afbrydelse.
Tabel 8-2. Watchdog Timer-konfiguration
WDE | WDIE | Watchdog Timer State | Handling ved time-out |
0 | 0 | Stoppet | Ingen |
0 | 1 | Løb | Afbryde |
1 | 0 | Løb | Nulstil |
1 | 1 | Løb | Afbryde |
Bit 4 – WDCE: Watchdog Change Enable
Denne bit skal indstilles, når WDE-bitten skrives til logisk nul. Ellers vil Watchdog ikke blive deaktiveret. Når først skrevet til en, vil hardware rydde denne bit efter fire clock-cyklusser. Se beskrivelsen af WDE-bitten for en Watchdog-deaktiveringsprocedure. Denne bit skal også indstilles ved ændring af prescaler bits. Se "Tidsindstillede sekvenser til ændring af konfigurationen af Watchdog-timeren” på side 43.
Bit 3 – WDE: Watchdog Enable
Når WDE er skrevet til logisk 1, er Watchdog Timer aktiveret, og hvis WDE skrives til logisk nul, er Watchdog Timer-funktionen deaktiveret. WDE kan kun ryddes, hvis WDCE-bitten har logisk niveau et. For at deaktivere en aktiveret Watchdog Timer skal følgende procedure følges:
I samme operation skal du skrive en logisk en til WDCE og WDE. En logisk en skal skrives til WDE, selvom den er sat til en, før deaktiveringsoperationen starter.
Inden for de næste fire clock-cyklusser skal du skrive et logisk 0 til WDE. Dette deaktiverer Watchdog.
I sikkerhedsniveau 2 er det ikke muligt at deaktivere Watchdog Timer, selv med algoritmen beskrevet ovenfor. Se "Tidsindstillede sekvenser til ændring af konfigurationen af Watchdog-timeren" på side 43.
I sikkerhedsniveau 1 tilsidesættes WDE af WDRF i MCUSR. Se "MCUSR – MCU Status Register" på side 44 for beskrivelse af WDRF. Det betyder, at WDE altid er indstillet, når WDRF er indstillet. For at rydde WDE skal WDRF ryddes, før du deaktiverer Watchdog med proceduren beskrevet ovenfor. Denne funktion sikrer flere nulstillinger under forhold, der forårsager fejl, og en sikker opstart efter fejlen.
Bemærk: Hvis watchdog-timeren ikke skal bruges i applikationen, er det vigtigt at gennemgå en watchdog-deaktiveringsprocedure i initialiseringen af enheden. Hvis Watchdog ved et uheld er aktiveret, f.eksampved en løbsk pointer eller brun-out-tilstand, nulstilles enheden, hvilket igen vil føre til en ny vagthund-nulstilling. For at undgå denne situation bør applikationssoftwaren altid rydde WDRF-flaget og WDE-kontrolbitten i initialiseringsrutinen.
Bits 5, 2:0 – WDP[3:0]: Watchdog Timer Prescaler 3, 2, 1 og 0
WDP[3:0]-bits bestemmer Watchdog Timer-forskallingen, når Watchdog Timer er aktiveret. De forskellige forskaleringsværdier og deres tilsvarende timeoutperioder er vist i Tabel 8-3.
Tabel 8-3. Watchdog Timer Prescale Vælg
WDP3 | WDP2 | WDP1 | WDP0 | Antal WDT-oscillatorcyklusser | Typisk timeout ved VCC = 5.0V |
0 | 0 | 0 | 0 | 2K (2048) cyklusser | 16 ms |
0 | 0 | 0 | 1 | 4K (4096) cyklusser | 32 ms |
0 | 0 | 1 | 0 | 8K (8192) cyklusser | 64 ms |
0 | 0 | 1 | 1 | 16K (16384) cyklusser | 0.125 s |
0 | 1 | 0 | 0 | 32K (32764) cyklusser | 0.25 s |
0 | 1 | 0 | 1 | 64K (65536) cyklusser | 0.5 s |
0 | 1 | 1 | 0 | 128K (131072) cyklusser | 1.0 s |
0 | 1 | 1 | 1 | 256K (262144) cyklusser | 2.0 s |
1 | 0 | 0 | 0 | 512K (524288) cyklusser | 4.0 s |
1 | 0 | 0 | 1 | 1024K (1048576) cyklusser | 8.0 s |
Tabel 8-3. Watchdog Timer Prescale Select (fortsat)
WDP3 | WDP2 | WDP1 | WDP0 | Antal WDT-oscillatorcyklusser | Typisk timeout ved VCC = 5.0V |
1 | 0 | 1 | 0 | Reserveret(1) | |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 0 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
Bemærk: 1. Hvis valgt, vil en af de gyldige indstillinger under 0b1010 blive brugt.
afbryder
Dette afsnit beskriver detaljerne for afbrydelseshåndteringen som udført i ATtiny25/45/85. For en generel forklaring af AVR-afbrydelseshåndteringen, se "Nulstil og afbryd håndtering" på side 12.
Afbryd vektorer i ATtiny25/45/85
Interrupt-vektorerne for ATtiny25/45/85 er beskrevet i Tabel 9-1under.
Tabel 9-1. Nulstil og afbryd vektorer
Vektor nr. | Program adresse | Kilde | Afbryde definition |
1 | 0x0000 | NULSTIL | Ekstern pin, Power-on Reset, Brown-out Reset, Watchdog Reset |
2 | 0x0001 | INT0 | Ekstern afbrydelsesanmodning 0 |
3 | 0x0002 | PCINT0 | Pin Change Interrupt Request 0 |
4 | 0x0003 | TIMER1_COMPA | Timer/tæller1 Sammenlign Match A |
5 | 0x0004 | TIMER1_OVF | Timer/tæller1 Overløb |
6 | 0x0005 | TIMER0_OVF | Timer/tæller0 Overløb |
7 | 0x0006 | EE_RDY | EEPROM klar |
8 | 0x0007 | ANA_COMP | Analog komparator |
9 | 0x0008 | ADC | ADC-konvertering fuldført |
10 | 0x0009 | TIMER1_COMPB | Timer/Tæller1 Sammenlign Match B |
11 | 0x000A | TIMER0_COMPA | Timer/tæller0 Sammenlign Match A |
12 | 0x000B | TIMER0_COMPB | Timer/Tæller0 Sammenlign Match B |
13 | 0x000C | WDT | Watchdog Time-out |
14 | 0x000D | USI_START | USI START |
15 | 0x000E | USI_OVF | USI Overflow |
Hvis programmet aldrig aktiverer en afbrydelseskilde, bruges interruptvektorerne ikke, og almindelig programkode kan placeres på disse steder.
En typisk og generel opsætning for interrupt vektoradresser i ATtiny25/45/85 er vist i programmet ex.ample nedenfor.
Monteringskode Example | ||
.org 0x0000 | ;Indstil adressen på næste | erklæring |
rjmp NULSTIL | ; Adresse 0x0000 | |
rjmp INT0_ISR | ; Adresse 0x0001 | |
rjmp PCINT0_ISR | ; Adresse 0x0002 | |
rjmp TIM1_COMPA_ISR | ; Adresse 0x0003 | |
rjmp TIM1_OVF_ISR | ; Adresse 0x0004 | |
rjmp TIM0_OVF_ISR | ; Adresse 0x0005 | |
rjmp EE_RDY_ISR | ; Adresse 0x0006 | |
rjmp ANA_COMP_ISR | ; Adresse 0x0007 | |
rjmp ADC_ISR | ; Adresse 0x0008 | |
rjmp TIM1_COMPB_ISR | ; Adresse 0x0009 | |
rjmp TIM0_COMPA_ISR | ; Adresse 0x000A | |
rjmp TIM0_COMPB_ISR | ; Adresse 0x000B | |
rjmp WDT_ISR | ; Adresse 0x000C | |
rjmp USI_START_ISR | ; Adresse 0x000D | |
rjmp USI_OVF_ISR | ; Adresse 0x000E | |
NULSTIL: | ; Hovedprogram start | |
; Adresse 0x000F | ||
… |
Bemærk: Se "Kodeeksamples" på side 6.
Eksterne afbrydelser
De eksterne afbrydelser udløses af INT0-stiften eller en af PCINT[5:0]-benene. Bemærk, at afbrydelserne, hvis de er aktiveret, udløses, selvom INT0- eller PCINT[5:0]-benene er konfigureret som udgange. Denne funktion giver mulighed for at generere en softwareafbrydelse. Pin change interrupts PCI vil udløse, hvis en aktiveret PCINT[5:0] pin skifter. PCMSK Registeret kontrollerer, hvilke ben der bidrager til pinskifteafbrydelser. Pin change interrupts på PCINT[5:0] detekteres asynkront. Dette indebærer, at disse afbrydelser kan bruges til at vække delen også fra andre dvaletilstande end inaktive tilstande.
INT0-afbrydelserne kan udløses af en faldende eller stigende kant eller et lavt niveau. Dette er sat op som angivet i specifikationen for MCU Control Register – MCUCR. Når INT0-afbrydelsen er aktiveret og er konfigureret som niveauudløst, udløses afbrydelsen, så længe stiften holdes lav. Bemærk, at genkendelse af faldende eller stigende kantafbrydelser på INT0 kræver tilstedeværelsen af et I/O-ur, beskrevet i "Ursystemer og deres distribution" tændt side 23.
Lavt niveau afbrydelse
Et lavt niveau afbrydelse på INT0 detekteres asynkront. Dette indebærer, at denne afbrydelse kan bruges til at vække delen også fra andre dvaletilstande end inaktive tilstande. I/O-uret er standset i alle dvaletilstande undtagen inaktiv tilstand.
Bemærk, at hvis en niveauudløst afbrydelse bruges til opvågning fra Power-down, skal det påkrævede niveau holdes længe nok til, at MCU'en kan fuldføre opvågningen for at udløse niveauafbrydelsen. Hvis niveauet forsvinder inden slutningen af opstartstiden, vil MCU'en stadig vågne op, men der vil ikke blive genereret nogen afbrydelse. Opstartstiden er defineret af SUT- og CKSEL-sikringerne som beskrevet i "Systemur og urindstillinger" på side 23.
Hvis det lave niveau på afbrydelsesstiften fjernes, før enheden er vågnet, vil programafviklingen ikke blive omdirigeret til afbrydelsesservicerutinen, men fortsætte fra instruktionen efter SLEEP-kommandoen.
Pin Change Interrupt Timing
En eksample af timing af et pinskifteafbrydelse er vist i Figur 9-1.
Registerbeskrivelse
MCUCR – MCU kontrolregister
Det eksterne afbrydelseskontrolregister A indeholder kontrolbits til afbrydelsesfølingsstyring.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUD | SE | SM1 | SM0 | BODSE | ISC01 | ISC00 | MCUCR |
Læs/skriv | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 1:0 – ISC0[1:0]: Interrupt Sense Control 0 Bit 1 og Bit 0
Den eksterne afbrydelse 0 aktiveres af den eksterne pin INT0, hvis SREG I-flaget og den tilsvarende afbrydelsesmaske er indstillet. Niveauet og kanterne på den eksterne INT0-stift, der aktiverer afbrydelsen, er defineret i Tabel 9-2. Værdien på INT0-stiften er sampled før detektering af kanter. Hvis kant- eller skifteafbrydelse er valgt, vil impulser, der varer længere end én urperiode, generere en afbrydelse. Kortere impulser er ikke garanteret at generere en afbrydelse. Hvis lavt niveau afbrydelse er valgt, skal det lave niveau holdes indtil færdiggørelsen af den aktuelt eksekverende instruktion for at generere en afbrydelse.
Tabel 9-2. Afbrydelse 0 Sense Control
ISC01 | ISC00 | Beskrivelse |
0 | 0 | Det lave niveau af INT0 genererer en afbrydelsesanmodning. |
0 | 1 | Enhver logisk ændring på INT0 genererer en afbrydelsesanmodning. |
1 | 0 | Den faldende kant af INT0 genererer en afbrydelsesanmodning. |
1 | 1 | Den stigende kant af INT0 genererer en afbrydelsesanmodning. |
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 | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7, 4:0 – Res: Reserverede bits
Disse bits er reserverede bits i ATtiny25/45/85 og vil altid læses som nul.
Bit 6 – INT0: Ekstern afbrydelsesanmodning 0 Aktiver
Når INT0-bitten er indstillet (én) og I-bitten i statusregistret (SREG) er indstillet (én), er den eksterne pin-afbrydelse aktiveret. Interrupt Sense Control0-bits 1/0 (ISC01 og ISC00) i MCU Control Register (MCUCR) definerer, om den eksterne interrupt aktiveres ved stigende og/eller faldende kant af INT0-stiften eller niveauregistreret. Aktivitet på stiften vil forårsage en afbrydelsesanmodning, selvom INT0 er konfigureret som en udgang. Den tilsvarende afbrydelse af ekstern afbrydelsesanmodning 0 udføres fra INT0-afbrydelsesvektoren.
Bit 5 – PCIE: Pin Change Interrupt Enable
Når PCIE-bitten er indstillet (én) og I-bitten i statusregistret (SREG) er indstillet (én), er pin change interrupt aktiveret. Enhver ændring på en aktiveret PCINT[5:0]-pin vil forårsage en afbrydelse. Den tilsvarende afbrydelse af Pin Change Interrupt Request udføres fra PCI Interrupt Vector. PCINT[5:0]-ben aktiveres individuelt af 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 | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7, 4:0 – Res: Reserverede bits
Disse bits er reserverede bits i ATtiny25/45/85 og vil altid læses som nul.
Bit 6 – INTF0: Eksternt afbrydelsesflag 0
Når en kant- eller logikændring på INT0-stiften udløser en afbrydelsesanmodning, bliver INTF0 indstillet (én). Hvis I-bitten i SREG og INT0-bitten i GIMSK er indstillet (én), vil MCU'en hoppe til den tilsvarende interrupt-vektor. Flaget slettes, når afbrydelsesrutinen udføres. Alternativt kan flaget slettes ved at skrive et logisk til det. Dette flag slettes altid, når INT0 er konfigureret som en niveauafbrydelse.
Bit 5 – PCIF: Pin Change Interrupt Flag
Når en logisk ændring på en PCINT[5:0]-pin udløser en afbrydelsesanmodning, bliver PCIF indstillet (én). Hvis I-bitten i SREG og PCIE-bitten i GIMSK er indstillet (en), vil MCU'en hoppe til den tilsvarende interrupt-vektor. Flaget slettes, når afbrydelsesrutinen udføres. Alternativt kan flaget slettes ved at skrive et logisk til det.
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 | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7:6 – Res: Reserverede bits
Disse bits er reserverede bits i ATtiny25/45/85 og vil altid læses som nul.
Bits 5:0 – PCINT[5:0]: Pin Change Enable Mask 5:0
Hver PCINT[5:0] bit vælger, om pin change interrupt er aktiveret på den tilsvarende I/O pin. Hvis PCINT[5:0] er indstillet, og PCIE-bitten i GIMSK er indstillet, er pin change interrupt aktiveret på den tilsvarende I/O pin. Hvis PCINT[5:0] er ryddet, deaktiveres pin change interrupt på den tilsvarende I/O pin.
I/O-porte
Indledning
Alle AVR-porte har ægte Read-Modify-Write-funktionalitet, når de bruges som generelle digitale I/O-porte. Dette betyder, at retningen af en portstift kan ændres uden utilsigtet at ændre retningen på en anden pin med SBI- og CBI-instruktionerne. Det samme gælder ved ændring af drevværdi (hvis konfigureret som output) eller aktivering/deaktivering af pull-up modstande (hvis konfigureret som input). Hver outputbuffer har symmetriske drevkarakteristika med både høj synke- og kildekapacitet. Pin-driveren er stærk nok til at drive LED-skærme direkte. Alle portstifter har individuelt valgbare pull-up modstande med en forsyningsvoltage invariant modstand. Alle I/O-ben har beskyttelsesdioder til både VCC og Jord som angivet i Figur 10-1. Der henvises til "Elektriske egenskaber" på side 161 for en komplet liste over parametre.
Figur 10-1. I/O Pin Equivalent Schematic
Alle registre og bitreferencer i dette afsnit er skrevet i generel form. Et lille "x" repræsenterer nummereringsbogstavet for porten, og et lille "n" repræsenterer bitnummeret. Men når man bruger registeret eller bit definerer i et program, skal den præcise form bruges. F.eksample, PORTB3 for bit nr. 3 i Port B, her generelt dokumenteret som PORTxn. De fysiske I/O-registre og bitplaceringer er angivet i "Registrer beskrivelse" på side 64.
Tre I/O-hukommelsesadresseplaceringer er tildelt for hver port, en hver for dataregisteret – PORTx, dataretningsregisteret – DDRx og portinput-pindene – PINx. Port Input Pins I/O-placeringen er skrivebeskyttet, mens dataregistret og dataretningsregistret læses/skrives. Men at skrive en logisk et til en bit i PINx-registret, vil resultere i en skifte i den tilsvarende bit i dataregistret. Derudover deaktiverer Pull-up Disable – PUD-bit i MCUCR pull-up-funktionen for alle ben i alle porte, når den er indstillet.
Brug af I/O-porten som General Digital I/O er beskrevet i "Porte som almindelig digital I/O" på side 53. De fleste portben er multiplekset med alternative funktioner til de perifere funktioner på enheden. Hvordan hver alternativ funktion interfererer med portstiften er beskrevet i "Alternative portfunktioner" på side 57. Se de enkelte modulsektioner for en fuldstændig beskrivelse af de alternative funktioner.
Bemærk, at aktivering af den alternative funktion for nogle af portbenene ikke påvirker brugen af de andre ben i porten som almindelig digital I/O.
Porte som generel digital I/O
Portene er tovejs I/O-porte med valgfri interne pull-ups. Figur 10-2 viser en funktionsbeskrivelse af én I/O-port pin, her generisk kaldet Pxn.
Figur 10-2. Generelt Digital I/O(1)
Konfiguration af pin
Hver portpin består af tre registerbits: DDxn, PORTxn og PINxn. Som vist i "Registrer beskrivelse" på side 64, tilgås DDxn-bittene ved DDRx I/O-adressen, PORTxn-bittene ved PORTx I/O-adressen og PINxn-bittene ved PINx I/O-adressen.
DDxn-bitten i DDRx-registret vælger retningen for denne pin. Hvis DDxn er skrevet logisk et, er Pxn konfigureret som en output-pin. Hvis DDxn er skrevet logisk nul, er Pxn konfigureret som en input-pin.
Hvis PORTxn er skrevet logisk 1, når stiften er konfigureret som en input-pin, aktiveres pull-up-modstanden. For at slå pull-up-modstanden fra, skal PORTxn skrives logisk nul, eller stiften skal konfigureres som en udgangsstift. Portbenene er tredelte, når nulstillingstilstanden bliver aktiv, selvom ingen ure kører.
Hvis PORTxn er skrevet logisk 1, når stiften er konfigureret som en udgangspin, bliver portstiften drevet høj (én). Hvis PORTxn skrives logisk nul, når stiften er konfigureret som en udgangspin, bliver portstiften drevet lav (nul).
Skift af pin
Hvis du skriver en logisk en til PINxn, skiftes værdien af PORTxn, uafhængig af værdien af DDRxn. Bemærk, at SBI-instruktionen kan bruges til at skifte en enkelt bit i en port.
Skift mellem input og output
Når der skiftes mellem tri-state ({DDxn, PORTxn} = 0b00) og output høj ({DDxn, PORTxn} = 0b11), en mellemtilstand med enten pull-up aktiveret {DDxn, PORTxn} = 0b01) eller output lav ({DDxn, PORTxn} = 0b10) skal forekomme. Normalt er pull-up-aktiveret tilstand fuldt acceptabel, da et højimpedant miljø ikke vil bemærke forskellen mellem en stærk høj driver og en pull-up. Hvis dette ikke er tilfældet, kan PUD-bitten i MCUCR-registret indstilles til at deaktivere alle pull-ups i alle porte.
Skift mellem input med pull-up og output low genererer det samme problem. Brugeren skal bruge enten tri-state ({DDxn, PORTxn} = 0b00) eller output high state ({DDxn, PORTxn} = 0b10) som et mellemtrin.
Tabel 10-1 opsummerer styresignalerne for pinværdien.
Tabel 10-1. Port Pin-konfigurationer
DDxn | PORTxn | PUD
(i MCUCR) |
I/O | Træk op | Kommentar |
0 | 0 | X | Input | Ingen | Tri-state (Hi-Z) |
0 | 1 | 0 | Input | Ja | Pxn vil kildestrøm, hvis ext. trukket lavt. |
0 | 1 | 1 | Input | Ingen | Tri-state (Hi-Z) |
1 | 0 | X | Produktion | Ingen | Udgang lav (vask) |
1 | 1 | X | Produktion | Ingen | Output høj (kilde) |
Læsning af pinværdien
Uafhængigt af indstillingen af dataretningsbit DDxn kan portstiften læses gennem PINxn-registerbitten. Som vist i Figur 10-2, udgør PINxn-registerbitten og den foregående låsemekanisme en synkronisering. Dette er nødvendigt for at undgå metastabilitet, hvis den fysiske pin ændrer værdi nær kanten af det interne ur, men det introducerer også en forsinkelse. Figur 10-3 viser et timingdiagram over synkroniseringen ved læsning af en eksternt anvendt pinværdi. De maksimale og minimale udbredelsesforsinkelser er angivet henholdsvis tpd,max og tpd,min.
Overvej, at urperioden starter kort efter den første faldende kant af systemuret. Låsen er lukket, når uret er lavt, og bliver gennemsigtigt, når uret er højt, som angivet af det skraverede område af "SYNC LATCH"-signalet. Signalværdien er låst, når systemuret bliver lavt. Den klokkes ind i PINxn-registret ved den efterfølgende positive urkant. Som angivet af de to pile tpd,max og tpd,min, vil en enkelt signalovergang på stiften blive forsinket mellem ½ og 1½ systemurperiode afhængigt af påstandstidspunktet.
Ved tilbagelæsning af en softwaretildelt pinværdi, skal der indsættes en nop-instruktion som angivet i Figur 10-4. Ud-instruktionen indstiller "SYNC LATCH"-signalet ved den positive kant af uret. I dette tilfælde er forsinkelsen tpd gennem synkroniseringen en systemurperiode.
Følgende kode example viser, hvordan man indstiller port B ben 0 og 1 høj, 2 og 3 lav, og definerer port ben fra 4 til 5 som input med en pull-up tildelt port pin 4. De resulterende pin værdier læses tilbage igen, men som tidligere diskuteret, er en nop-instruktion inkluderet for at kunne læse den værdi tilbage, der for nylig er tildelt nogle af stifterne.
Monteringskode Example(1) |
…
; Definer pull-ups og sæt output højt ; Definer retninger for portstifter ldi r16,(1<<PB4)|(1<<PB1)|(1<<PB0) ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0) ud PORTB,r16 ud DDRB,r17 ; Indsæt nop for synkronisering nej ; Læs portstifter i r16, PINB … |
Bemærk: Til monteringsprogrammet bruges to midlertidige registre til at minimere tiden fra pull-ups er sat på ben 0, 1 og 4, indtil retningsbittene er korrekt indstillet, hvilket definerer bit 2 og 3 som lav og redefinerer bit 0 og 1 som stærke høje drivere.
C-kode Eksample |
usigneret char i;
… /* Definer pull-ups og sæt output højt */ /* Definer retninger for portstifter */ PORTB = (1< DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* Indsæt nop for synkronisering*/ _NOP(); /* Læs portstifter */ i = PINB; … |
Digital Input Enable og Sleep Modes
Som vist i Figur 10-2, kan det digitale indgangssignal være clamped til jord ved indgangen af schmitt-triggeren. Signalet, der er angivet SLEEP i figuren, indstilles af MCU Sleep Controller i Power-down-tilstand for at undgå højt strømforbrug, hvis nogle inputsignaler efterlades flydende, eller har et analogt signalniveau tæt på VCC/2.
SLEEP tilsidesættes for portben, der er aktiveret som eksterne afbrydelsesben. Hvis den eksterne afbrydelsesanmodning ikke er aktiveret, er SLEEP også aktiv for disse ben. SLEEP er også tilsidesat af forskellige andre alternative funktioner som beskrevet i "Alternative portfunktioner" på side 57.
Hvis et logisk højt niveau ("én") er til stede på en asynkron ekstern afbrydelsesstift konfigureret som "Afbrydelse ved stigende kant, faldende kant eller enhver logisk ændring på ben", mens den eksterne afbrydelse ikke er aktiveret, vil det tilsvarende eksterne afbrydelsesflag indstilles, når du genoptager fra ovennævnte dvaletilstand, da clamping i disse dvaletilstande frembringer den ønskede logiske ændring.
Uforbundne stifter
Hvis nogle stifter er ubrugte, anbefales det at sikre, at disse stifter har et defineret niveau. Selvom de fleste af de digitale indgange er deaktiveret i de dybe dvaletilstande som beskrevet ovenfor, bør flydende indgange undgås for at reducere strømforbruget i alle andre tilstande, hvor de digitale indgange er aktiveret (Nulstil, Aktiv tilstand og Inaktiv tilstand).
Den enkleste metode til at sikre et defineret niveau af en ubrugt stift er at aktivere den interne pull-up. I dette tilfælde vil pull-up'en blive deaktiveret under nulstillingen. Hvis lavt strømforbrug under nulstilling er vigtigt, anbefales det at bruge en ekstern pull-up eller pulldown. Det anbefales ikke at tilslutte ubrugte ben direkte til VCC eller GND, da dette kan forårsage for store strømme, hvis pinden ved et uheld konfigureres som en udgang.
Alternative portfunktioner
De fleste portben har alternative funktioner ud over at være generelle digitale I/O'er. Figur 10-5 viser, hvordan portpin-styringen signalerer fra den forenklede Figur 10-2 kan tilsidesættes af alternative funktioner. De overordnede signaler er muligvis ikke til stede i alle portben, men figuren tjener som en generisk beskrivelse, der gælder for alle portben i AVR-mikrocontrollerfamilien.
Tabel 10-2. Generisk beskrivelse af tilsidesættende signaler for alternative funktioner
Signal navn | Fuldt navn | Beskrivelse |
PUOE | Pull-up Tilsidesæt Aktiver | Hvis dette signal er indstillet, styres pull-up-aktiveringen af PUOV-signalet. Hvis dette signal slettes, aktiveres pull-up, når
{DDxn, PORTxn, PUD} = 0b010. |
PUOV | Pull-up tilsidesættelsesværdi | Hvis PUOE er indstillet, aktiveres/deaktiveres pull-up'en, når PUOV indstilles/ryddes, uanset indstillingen af DDxn-, PORTxn- og PUD-registerbittene. |
DDOE | Aktiver tilsidesættelse af dataretning | Hvis dette signal er indstillet, styres Output Driver Enable af DDOV-signalet. Hvis dette signal slettes, aktiveres Output-driveren af DDxn Register-bitten. |
DDOV | Værdi for tilsidesættelse af dataretning | Hvis DDOE er indstillet, aktiveres/deaktiveres outputdriveren, når DDOV indstilles/ryddes, uanset indstillingen af DDxn-registerbitten. |
PVOE | Aktiver tilsidesættelse af portværdi | Hvis dette signal er indstillet, og udgangsdriveren er aktiveret, styres portværdien af PVOV-signalet. Hvis PVOE ryddes, og outputdriveren er aktiveret, styres portværdien af PORTxn-registerbitten. |
PVOV | Port Value Override Værdi | Hvis PVOE er indstillet, sættes portværdien til PVOV, uanset indstillingen af PORTxn Registerbit. |
PTOE | Port Toggle Tilsidesæt Aktiver | Hvis PTOE er indstillet, inverteres PORTxn-registerbitten. |
DIEOE | Digital Input Aktiver Tilsidesæt Aktiver | Hvis denne bit er indstillet, styres Digital Input Enable af DIEOV-signalet. Hvis dette signal slettes, bestemmes Digital Input Enable af MCU-tilstand (normal tilstand, dvaletilstand). |
DIEOV | Digital Input Enable Override Value | Hvis DIEOE er indstillet, aktiveres/deaktiveres den digitale indgang, når DIEOV indstilles/ryddes, uanset MCU-tilstanden (normal tilstand, dvaletilstand). |
DI | Digital indgang | Dette er den digitale indgang til alternative funktioner. På figuren er signalet forbundet til udgangen af schmitt-triggeren, men før synkronisatoren. Medmindre den digitale indgang bruges som en urkilde, vil modulet med den alternative funktion bruge sin egen synkronisering. |
AIO | Analog indgang / udgang | Dette er den analoge input/output til/fra alternative funktioner. Signalet er forbundet direkte til pad, og kan bruges tovejs. |
De følgende underafsnit beskriver kort de alternative funktioner for hver port og relaterer de overordnede signaler til den alternative funktion. Se den alternative funktionsbeskrivelse for yderligere detaljer.
Alternative funktioner af port B
Port B-stifterne med alternativ funktion er vist i Tabel 10-3.
Tabel 10-3. Port B-stifter Alternative funktioner
Port Pin | Alternativ funktion |
PB5 | ![]() NULSTIL: Nulstil pin dW: debugWIRE I/O ADC0: ADC-inputkanal 0 PCINT5: Pin Change Interrupt, Kilde 5 |
PB4 | XTAL2: Krystaloscillatorudgang CLKO: Systemurudgang ADC2: ADC-indgangskanal 2
OC1B: Timer/tæller1 Sammenlign Match B Output PCINT4: Pin Change Interrupt 0, Kilde 4 |
PB3 | XTAL1: Krystaloscillatorindgang CLKI: Eksternt urindgang ADC3: ADC-indgangskanal 3
OC1B: Komplementær timer/tæller1 Sammenlign Match B Output PCINT3: Pin Change Interrupt 0, Kilde 3 |
PB2 | SCK: Seriel urindgang ADC1: ADC-indgangskanal 1
T0: Timer/tæller0 Urkilde USCK: USI-ur (Tre-leder-tilstand) SCL: USI-ur (Two-Wire Mode) INT0: Ekstern afbrydelse 0 Indgang PCINT2: Pin Change Interrupt 0, Kilde 2 |
PB1 | MISO: SPI Master Data Input / Slave Data Output AIN1: Analog komparator, negativ indgang OC0B: Timer/Tæller0 Sammenlign Match B Output OC1A: Timer/Tæller1 Sammenlign Match A Output DO: USI Data Output (Tre Ledningstilstand) PCINT1:Pin Change Interrupt 0, Kilde 1 |
PB0 | MOSI:: SPI Master Data Output / Slave Data Input AIN0: Analog komparator, positiv input
OC0A: Timer/Tæller0 Sammenlign Match A output OC1A: Komplementær timer/tæller1 Sammenlign Match A-output DI: USI-datainput (Tre-trådstilstand) SDA: USI-datainput (to-ledningstilstand) AREF: Ekstern analog reference PCINT0: Pin Change Interrupt 0, Source 0 |
Port B, bit 5 – RESET/dW/ADC0/PCINT5
NULSTIL: Ekstern nulstillingsindgang er aktiv lav og aktiveret ved at afprogrammere (“1”) RSTDISBL-sikringen. Pullup aktiveres, og udgangsdriver og digital indgang deaktiveres, når stiften bruges som RESET-stift.
dW: Når debugWIRE Enable (DWEN)-sikringen er programmeret, og låsebits er uprogrammerede, aktiveres debugWIRE-systemet i målenheden. RESET-portstiften er konfigureret som en wire-AND (open-drain) tovejs I/O-pin med pull-up aktiveret og bliver kommunikationsporten mellem mål og emulator.
ADC0: Analog til digital konverter, kanal 0.
PCINT5: Pin Change Interrupt-kilde 5.
Port B, Bit 4 – XTAL2/CLKO/ADC2/OC1B/PCINT4
XTAL2: Chip Clock Oscillator pin 2. Bruges som clock pin til alle chip clock kilder undtagen intern kalibrerbar RC Oscillator og ekstern ur. Når den bruges som en ur-pin, kan den ikke bruges som en I/O-pin. Ved brug af intern kalibrerbar RC-oscillator eller eksternt ur som chip-urkilder, fungerer PB4 som en almindelig I/O-pin.
CLKO: Det delte systemur kan udsendes på pin PB4. Det opdelte systemur udsendes, hvis CKOUT-sikringen er programmeret, uanset PORTB4- og DDB4-indstillingerne. Den udsendes også under nulstillingen.
ADC2: Analog til digital konverter, kanal 2.
OC1B: Output Sammenlign Match-output: PB4-stiften kan tjene som en ekstern udgang for Timer/Counter1 Compare Match B, når den er konfigureret som en output (DDB4-sæt). OC1B-stiften er også udgangsbenet til PWM-tilstandstimerfunktionen.
PCINT4: Pin Change Interrupt-kilde 4.
Port B, Bit 3 – XTAL1/CLKI/ADC3/OC1B/PCINT3
XTAL1: Chip Clock Oscillator pin 1. Anvendes til alle chip clock kilder undtagen intern kalibrerbar RC oscillator. Når den bruges som en ur-pin, kan den ikke bruges som en I/O-pin.
CLKI: Urinput fra en ekstern urkilde, se "Eksternt ur" på side 26.
ADC3: Analog til digital konverter, kanal 3.
OC1B: Inverteret Output Sammenlign Match-output: PB3-stiften kan tjene som en ekstern udgang for Timer/Counter1 Sammenlign Match B, når den er konfigureret som en output (DDB3-sæt). OC1B-stiften er også den omvendte udgangsstift til PWM-tilstandstimerfunktionen.
PCINT3: Pin Change Interrupt-kilde 3.
Port B, bit 2 – SCK/ADC1/T0/USCK/SCL/INT0/PCINT2
SCK: Master Clock output, Slave Clock input pin til SPI kanal. Når SPI'en er aktiveret som en slave, er denne pin konfigureret som en input uanset indstillingen af DDB2. Når SPI'en er aktiveret som en Master, styres denne pins dataretning af DDPB2. Når stiften tvinges af SPI'en til at være et input, kan pull-up'en stadig styres af PORTB2-bitten.
ADC1: Analog til digital konverter, kanal 1.
T0: Timer/Tæller0 tællerkilde.
USCK: Universal Serial Interface-ur med tre ledere.
SCL: To-tråds mode seriel ur til USI To-leder mode.
INT0: Ekstern afbrydelseskilde 0.
PCINT2: Pin Change Interrupt-kilde 2.
Port B, bit 1 – MISO/AIN1/OC0B/OC1A/DO/PCINT1
MISO: Master Data input, Slave Data output pin til SPI kanal. Når SPI'en er aktiveret som en Master, er denne pin konfigureret som en input uanset indstillingen af DDB1. Når SPI'en er aktiveret som en slave, styres denne pins dataretning af DDB1. Når stiften tvinges af SPI'en til at være et input, kan pull-up'en stadig styres af PORTB1 bit.
AIN1: Analog komparator negativ input. Konfigurer portstiften som input med den interne pull-up slukket for at undgå, at den digitale portfunktion forstyrrer funktionen af den analoge komparator.
OC0B: Output Sammenlign Match output. PB1-stiften kan tjene som en ekstern udgang for Timer/Tæller0 Sammenlign Match B. PB1-stiften skal konfigureres som en udgang (DDB1 sæt (én)) for at betjene denne funktion. OC0B-stiften er også udgangsbenet for PWM-tilstands timerfunktionen.
OC1A: Output Compare Match-output: PB1-stiften kan tjene som en ekstern udgang for Timer/Counter1 Compare Match B, når den er konfigureret som en output (DDB1-sæt). OC1A-stiften er også udgangsbenet til PWM-tilstands timerfunktionen.
GØR: Tretrådstilstand Universal Serial Interface Dataoutput. Tretrådstilstand Dataoutput tilsidesætter PORTB1-værdien, og den drives til porten, når dataretningsbit DDB1 er indstillet (én). PORTB1 aktiverer stadig pull-up, hvis retningen er indtastet og PORTB1 er indstillet (én).
PCINT1: Pin Change Interrupt-kilde 1.
Port B, bit 0 – MOSI/AIN0/OC0A/OC1A/DI/SDA/AREF/PCINT0
MOSI: SPI Master Data output, Slave Data input til SPI kanal. Når SPI'en er aktiveret som en slave, er denne pin konfigureret som en input uanset indstillingen af DDB0. Når SPI'en er aktiveret som en Master, styres denne pins dataretning af DDB0. Når stiften tvinges af SPI'en til at være et input, kan pull-up'en stadig styres af PORTB0-bitten.
AIN0: Analog komparator positiv input. Konfigurer portstiften som input med den interne pull-up slukket for at undgå, at den digitale portfunktion forstyrrer funktionen af den analoge komparator.
OC0A: Output Sammenlign Match output. PB0-stiften kan tjene som en ekstern udgang for Timer/Counter0 Compare Match A, når den er konfigureret som en output (DDB0 sæt (én)). OC0A-stiften er også udgangsstiften til PWM-tilstandstimerfunktionen.
OC1A: Inverteret output Sammenlign Match-output: PB0-stiften kan tjene som en ekstern udgang for Timer/Counter1 Compare Match B, når den er konfigureret som en output (DDB0-sæt). OC1A-stiften er også den omvendte udgangsstift til PWM-tilstandstimerfunktionen.
SDA: To-wire mode seriel interface data.
AREF: Ekstern analog reference for ADC. Pullup og output driver er deaktiveret på PB0, når stiften bruges som en ekstern reference eller Internal Voltage Reference med ekstern kondensator ved AREF-stiften.
DI: Datainput i USI-trådstilstand. USI Three-wire mode tilsidesætter ikke normale portfunktioner, så pin skal konfigureres som input til DI-funktion.
PCINT0: Pin Change Interrupt-kilde 0.
Tabel 10-4 og Tabel 10-5 relatere de alternative funktioner af Port B til de overordnede signaler vist i Figur 10-5 på side 58.
Tabel 10-4. Tilsidesættende signaler for alternative funktioner i PB[5:3]
Signal navn | PB5/NULSTIL/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 Aktiver | ![]() OC1B Aktiver |
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-indgang | PCINT4-indgang | PCINT3-indgang |
AIO | RESET-indgang, ADC0-indgang | ADC2 indgang | ADC3 indgang |
Bemærk: når sikringen er "0" (programmeret).
Tabel 10-5. Tilsidesættende signaler for alternative funktioner i PB[2:0]
Signal navn | 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-indgang |
PCINT1-indgang | DI/SDA/PCINT0 Indgang |
AIO | ADC1 indgang | Analog komparator negativ input | Analog komparator positiv input |
Registerbeskrivelse
MCUCR – MCU kontrolregister
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUD | SE | SM1 | SM0 | BODSE | ISC01 | ISC00 | MCUCR |
Læs/skriv | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 6 – PUD: Pull-up deaktiver
Når denne bit skrives til en, deaktiveres pull-ups i I/O-portene, selvom DDxn- og PORTxn-registrene er konfigureret til at aktivere pull-ups ({DDxn, PORTxn} = 0b01). Se "Konfiguration af pin" på side 54 for flere detaljer om denne funktion.
PORTB – Port B-dataregister
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 | |
Startværdi | 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 | |
Startværdi | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PINB – Port B Input Pins adresse
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 | |
Startværdi | 0 | 0 | N/A | N/A | N/A | N/A | N/A | N/A |
8-bit timer/tæller0 med PWM
Funktioner
To uafhængige output-sammenligningsenheder
Sammenlign registre med dobbelt bufret output
Ryd timer ved sammenligningsmatch (automatisk genindlæsning)
Fejlfri, fasekorrekt pulsbreddemodulator (PWM)
Variabel PWM-periode
Frekvensgenerator
Tre uafhængige afbrydelseskilder (TOV0, OCF0A og OCF0B)
Overview
Timer/Counter0 er et generelt 8-bit timer/tæller-modul med to uafhængige output-sammenligningsenheder og med PWM-understøttelse. Det tillader nøjagtig programudførelsestid (hændelsesstyring) og bølgegenerering.
Et forenklet blokdiagram over 8-bit timeren/tælleren er vist i Figur 11-1. Se den faktiske placering af I/O-stifter "Pinout ATtiny25/45/85" på side 2. CPU-tilgængelige I/O-registre, inklusive I/O-bits og I/O-ben, vises med fed skrift. Det enhedsspecifikke I/O-register og bitplaceringer er angivet i "Registrer beskrivelse" på side 77.
Timer/tæller (TCNT0) og output-sammenligningsregistre (OCR0A og OCR0B) er 8-bit registre. Interrupt request (forkortet til Int.Req. i figuren) signaler er alle synlige i Timer Interrupt Flag Register (TIFR). Alle afbrydelser er individuelt maskeret med Timer Interrupt Mask Register (TIMSK). TIFR og TIMSK er ikke vist i figuren.
Timeren/tælleren kan clockes internt, via prescaleren eller af en ekstern urkilde på T0-stiften. Clock Select-logikblokken styrer, hvilken klokkilde og -flanke, som timeren/tælleren bruger til at øge (eller formindske) dens værdi. Timeren/tælleren er inaktiv, når der ikke er valgt en urkilde. Outputtet fra Clock Select-logikken omtales som timeruret (clkT0).
De dobbeltbuffede output-sammenligningsregistre (OCR0A og OCR0B) sammenlignes med timer/tæller-værdien til enhver tid. Resultatet af sammenligningen kan bruges af Waveform Generatoren til at generere et PWM- eller variabel frekvensoutput på Output Compare-benene (OC0A og OC0B). Se "Udgangssammenligningsenhed" på side 69. for detaljer. Hændelsen Compare Match vil også indstille Compare Flag (OCF0A eller OCF0B), som kan bruges til at generere en Output Compare afbrydelsesanmodning.
Definitioner
Mange register- og bitreferencer i dette afsnit er skrevet i generel form. Et lille bogstav "n" erstatter timer-/tællernummeret, i dette tilfælde 0. Et lille "x" erstatter Output Compare Unit, i dette tilfælde Compare Unit A eller Compare Unit B. Men når du bruger registret eller bit definerer i et program skal den præcise form bruges, dvs. TCNT0 for at få adgang til Timer/Counter0 tællerværdi og så videre.
Definitionerne i Tabel 11-1 bruges også meget i hele dokumentet.
Tabel 11-1. Definitioner
Konstant | Beskrivelse |
BUND | Tælleren når BUNDEN, når den bliver 0x00 |
MAKS | Tælleren når sit MAKSimum, når den bliver 0xFF (decimal 255) |
TOP | Tælleren når TOPPEN, når den bliver lig med den højeste værdi i tællesekvensen. TOP-værdien kan tildeles til at være den faste værdi 0xFF (MAX) eller værdien gemt i OCR0A-registret. Tildelingen afhænger af driftsformen |
Timer/tæller forskalering og urkilder
Timeren/tælleren kan uret af en intern eller en ekstern urkilde. Klokkilden vælges af Clock Select-logikken, som styres af Clock Select (c)-bittene, der er placeret i Timer/TællerO kontrolregisteret (TCCROB).
Intern urkilde med Prescaler
Timer/tæller0 kan klokkes direkte af systemuret (ved at indstille CS0[2:0] = 1). Dette giver den hurtigste betjening med en maksimal timer/tællerfrekvens svarende til systemets clockfrekvens (fCLK_I/O). Alternativt kan et af fire tryk fra prescaleren bruges som urkilde. Det forskalerede ur har en frekvens på enten
Prescaler Reset
Prescaleren kører frit, dvs. den fungerer uafhængigt af urvalgslogikken for Timer/Tæller0. Da prescaleren ikke er påvirket af timeren/tællerens urvalg, vil tilstanden af prescaleren have implikationer for situationer, hvor et forudskaleret ur bruges. En example af en præskaleringsartefakt er, når timeren/tælleren er aktiveret og clocket af prescaleren (6 > CS0[2:0] > 1). Antallet af systemurcyklusser, fra timeren er aktiveret, til den første optælling finder sted, kan være fra 1 til N+1 systemurcyklusser, hvor N er lig med forskaleringsdivisoren (8, 64, 256 eller 1024).
Det er muligt at bruge Prescaler Reset til at synkronisere timeren/tælleren til programudførelse.
Ekstern urkilde
En ekstern urkilde påført T0-stiften kan bruges som timer/tæller (clkT0). T0-stiften er sampledet én gang hver systemurcyklus af pin-synkroniseringslogikken. Den synkroniserede (sampled) signalet sendes derefter
gennem kantdetektoren. Figur 11-2 viser et funktionelt ækvivalent blokdiagram over T0-synkroniseringen og kantdetektorlogikken. Registrene clockes ved den positive kant af det interne systemur (clkI/O). Låsen er gennemsigtig i den høje periode af det interne systemur.
Kantdetektoren genererer én clkT0-impuls for hver positiv (CS0[2:0] = 7) eller negativ (CS0[2:0] = 6) flanke, den detekterer.
OCR0x-registrene er dobbelt buffer, når der bruges en af Pulse Width Modulation (PWM)-tilstandene. For de normale og Clear Timer on Compare (CTC) driftstilstande er dobbelt buffering deaktiveret. Den dobbelte buffer synkroniserer opdateringen af OCR0x-sammenligningsregistrene til enten toppen eller bunden af tællesekvensen. Synkroniseringen forhindrer forekomsten af ulige længder, ikke-symmetriske PWM-impulser, hvilket gør udgangen fejlfri.
OCR0x Register-adgangen kan virke kompleks, men dette er ikke tilfældet. Når dobbeltbuffring er aktiveret, har CPU'en adgang til OCR0x-bufferregistret, og hvis dobbeltbuffering er deaktiveret, vil CPU'en få direkte adgang til OCR0x.
Tving output-sammenligning
I ikke-PWM-bølgeformgenereringstilstande kan matchoutputtet fra komparatoren tvinges ved at skrive et et til Force Output Compare (FOC0x) bit. At tvinge sammenligningsmatch vil ikke indstille OCF0x-flaget eller genindlæse/rydde timeren, men OC0x-pinden vil blive opdateret, som om der var opstået en rigtig sammenligningsmatch (COM0x[1:0]-bitindstillingerne definerer, om OC0x-pinden er indstillet, ryddet eller slået til).
Sammenlign Match Blocking af TCNT0 Write
Alle CPU-skriveoperationer til TCNT0-registret vil blokere enhver sammenligningsmatch, der forekommer i den næste timer-urcyklus, selv når timeren er stoppet. Denne funktion gør det muligt at initialisere OCR0x til samme værdi som TCNT0 uden at udløse en afbrydelse, når timeren/tælleren er aktiveret.
Brug af output-sammenligningsenheden
Da skrivning af TCNT0 i en hvilken som helst driftstilstand vil blokere alle Sammenlign Matches for én timerur-cyklus, er der risici involveret, når du ændrer TCNT0, når du bruger Output Compare Unit, uafhængigt af om timeren/tælleren kører eller ej. Hvis værdien skrevet til TCNT0 er lig med OCR0x-værdien, vil Compare Match blive overset, hvilket resulterer i ukorrekt bølgeformgenerering. På samme måde må du ikke skrive TCNT0-værdien lig med BUND, når tælleren tæller ned.
Opsætningen af OC0x skal udføres, før du indstiller dataretningsregistret for portstiften til output. Den nemmeste måde at indstille OC0x-værdien på er at bruge Force Output Compare (FOC0x) strobebits i normal tilstand. OC0x-registrene beholder deres værdier, selv når der skiftes mellem Waveform Generation-tilstande.
Vær opmærksom på, at COM0x[1:0]-bits ikke er dobbeltbuffret sammen med sammenligningsværdien. Ændring af COM0x[1:0]-bits vil træde i kraft med det samme.
Sammenlign Match Output Unit
Bittene til sammenligning af outputtilstand (COM0x[1:0]) har to funktioner. Bølgeformgeneratoren bruger COM0x[1:0]-bittene til at definere Output Compare-tilstanden (OC0x) ved næste Compare Match. Desuden styrer COM0x[1:0]-bittene OC0x-pin-outputkilden. Figur 11-6 viser et forenklet skema over logikken, der påvirkes af COM0x[1:0] bitindstillingen. I/O-registrene, I/O-bittene og I/O-benene i figuren er vist med fed skrift. Kun de dele af de generelle I/O-portkontrolregistre (DDR og PORT), der er påvirket af COM0x[1:0]-bits, vises. Når der refereres til OC0x-tilstanden, er referencen for det interne OC0x-register, ikke OC0x-stiften. Hvis der opstår en systemnulstilling, nulstilles OC0x-registret til "0".
Når OC0A/OC0B er forbundet til I/O-pinden, afhænger COM0A[1:0]/COM0B[1:0]-bittenes funktion af WGM0[2:0]-bit-indstillingen. Tabel 11-2 viser COM0x[1:0]-bitfunktionaliteten, når WGM0[2:0]-bittene er indstillet til normal eller CTC-tilstand (ikke-PWM).
Tabel 11-2. Sammenlign Output Mode, non-PWM Mode
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskrivelse |
0 | 0 | Normal portdrift, OC0A/OC0B afbrudt. |
0 | 1 | Skift OC0A/OC0B på Sammenlign Match |
1 | 0 | Ryd OC0A/OC0B på Sammenlign Match |
1 | 1 | Indstil OC0A/OC0B på Sammenlign Match |
Tabel 11-3 viser COM0x[1:0]-bitfunktionaliteten, når WGM0[2:0]-bittene er indstillet til hurtig PWM-tilstand.
Tabel 11-3. Sammenlign Output Mode, Fast PWM Mode(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskrivelse |
0 | 0 | Normal portdrift, OC0A/OC0B afbrudt. |
0 | 1 | Reserveret |
1 | 0 | Ryd OC0A/OC0B på Compare Match, indstil OC0A/OC0B til BUND (ikke-inverterende tilstand) |
1 | 1 | Indstil OC0A/OC0B på Sammenlign Match, ryd OC0A/OC0B i BUND (inverterende tilstand) |
Bemærk: Et særligt tilfælde opstår, når OCR0A eller OCR0B er lig med TOP og COM0A1/COM0B1 er indstillet. I dette tilfælde ignoreres sammenligningsmatchen, men indstillingen eller sletningen udføres i BUNDEN. Se "Hurtig PWM-tilstand" på side 73 for flere detaljer.
Tabel 11-4 viser COM0x[1:0]-bitfunktionaliteten, når WGM0[2:0]-bittene er indstillet til fasekorrekt PWM-tilstand.
Tabel 11-4. Sammenlign Output Mode, Phase Correct PWM Mode(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskrivelse |
0 | 0 | Normal portdrift, OC0A/OC0B afbrudt. |
0 | 1 | Reserveret |
1 | 0 | Ryd OC0A/OC0B på Sammenlign Match ved optælling. Indstil OC0A/OC0B på Sammenlign Match ved nedtælling. |
1 | 1 | Indstil OC0A/OC0B på Sammenlign Match, når der optælles. Ryd OC0A/OC0B på Sammenlign Match ved nedtælling. |
Bemærk: 1. Et særligt tilfælde opstår, når OCR0A eller OCR0B er lig med TOP og COM0A1/COM0B1 er indstillet. I dette tilfælde ignoreres Compare Match, men indstillingen eller sletningen udføres på TOP. Se "Phase Correct PWM Mode" på side 74 for flere detaljer.
Bits 3:2 – Res: Reserverede bits
Disse bits er reserverede bits i ATtiny25/45/85 og vil altid læses som nul.
Bits 1:0 – WGM0[1:0]: Waveform Generation Mode
Kombineret med WGM02-bitten, der findes i TCCR0B-registret, styrer disse bit tællerens tællesekvens, kilden til maksimal (TOP) tællerværdi, og hvilken type bølgeformgenerering, der skal bruges, se Tabel 11-5. Driftstilstande, der understøttes af timer/tællerenheden er: Normal tilstand (tæller), Clear Timer on Compare Match (CTC) tilstand og to typer Pulse Width Modulation (PWM) tilstande (se "Betjeningsmåder" på side 71).
Tabel 11-5. Waveform Generation Mode Bit Beskrivelse
Mode | WGM 02 | WGM 01 | WGM 00 | Timer/tæller funktionsmåde | TOP | Opdatering af OCRx kl | TOV-flag sat på |
0 | 0 | 0 | 0 | Normal | 0xFF | Umiddelbar | MAKS(1) |
1 | 0 | 0 | 1 | PWM, fasekorrekt | 0xFF | TOP | BUND(2) |
2 | 0 | 1 | 0 | CTC | OCRA | Umiddelbar | MAKS(1) |
3 | 0 | 1 | 1 | Hurtig PWM | 0xFF | BUND(2) | MAKS(1) |
4 | 1 | 0 | 0 | Reserveret | – | – | – |
5 | 1 | 0 | 1 | PWM, fasekorrekt | OCRA | TOP | BUND(2) |
6 | 1 | 1 | 0 | Reserveret | – | – | – |
7 | 1 | 1 | 1 | Hurtig PWM | OCRA | BUND(2) | TOP |
Bit 7 – FOC0A: Force Output Sammenligning A
FOC0A-bitten er kun aktiv, når WGM-bittene angiver en ikke-PWM-tilstand.
For at sikre kompatibilitet med fremtidige enheder skal denne bit dog sættes til nul, når TCCR0B skrives, når der arbejdes i PWM-tilstand. Når du skriver en logisk en til FOC0A-bitten, tvinges en øjeblikkelig Compare Match på Waveform Generation-enheden. OC0A-udgangen ændres i henhold til dens COM0A[1:0]-bit-indstilling. Bemærk, at FOC0A-bitten er implementeret som en stroboskop. Derfor er det værdien i COM0A[1:0]-bittene, der bestemmer effekten af den tvungne sammenligning.
En FOC0A-strobe vil ikke generere nogen afbrydelse, og den vil heller ikke rydde timeren i CTC-tilstand ved at bruge OCR0A som TOP. FOC0A-bitten læses altid som nul.
Bit 6 – FOC0B: Tving output-sammenligning B
FOC0B-bitten er kun aktiv, når WGM-bittene angiver en ikke-PWM-tilstand.
For at sikre kompatibilitet med fremtidige enheder skal denne bit dog sættes til nul, når TCCR0B skrives, når der arbejdes i PWM-tilstand. Når du skriver en logisk til FOC0B-bitten, tvinges en øjeblikkelig Compare Match på Waveform Generation-enheden. OC0B-udgangen ændres i henhold til dens COM0B[1:0]-bit-indstilling. Bemærk, at FOC0B-bitten er implementeret som en strobe. Derfor er det værdien i COM0B[1:0]-bittene, der bestemmer effekten af den tvungne sammenligning.
En FOC0B-strobe vil ikke generere nogen afbrydelse, og den vil heller ikke rydde timeren i CTC-tilstand ved at bruge OCR0B som TOP.
FOC0B-bitten læses altid som nul.
Bits 5:4 – Res: Reserverede bits
Disse bits er reserverede bits i ATtiny25/45/85 og vil altid læses som nul.
Bit 3 – WGM02: Waveform Generation Mode
Se beskrivelsen i "TCCR0A – Timer/tællerkontrolregister A" på side 77.
Bits 2:0 – CS0[2:0]: Urvalg
De tre Clock Select bits vælger den urkilde, der skal bruges af timeren/tælleren.
Tabel 11-6. Ur Vælg Bit Beskrivelse
CS02 | CS01 | CS00 | Beskrivelse |
0 | 0 | 0 | Ingen urkilde (Timer/tæller stoppet) |
0 | 0 | 1 | clI/O/(Ingen forudskalering) |
0 | 1 | 0 | clkI/O/8 (Fra forskaler) |
0 | 1 | 1 | clkI/O/64 (Fra forskaler) |
1 | 0 | 0 | clkI/O/256 (Fra forskaler) |
1 | 0 | 1 | clkI/O/1024 (Fra forskaler) |
1 | 1 | 0 | Ekstern urkilde på T0 pin. Ur på faldende kant. |
1 | 1 | 1 | Ekstern urkilde på T0 pin. Ur på stigende kant. |
Hvis der bruges eksterne pin-tilstande til Timer/Counter0, vil overgange på T0-pinden klokke tælleren, selvom pinden er konfigureret som en udgang. Denne funktion tillader softwarekontrol af optællingen.
Tæller og sammenlign enheder
Timer/Tæller1 generelle betjening er beskrevet i asynkron modus, og betjening i synkron modus er kun nævnt, hvis der er forskelle mellem disse to tilstande. Figur 12-2 viser Timer/Tæller 1 synkroniseringsregister blokdiagram og synkroniseringsforsinkelser mellem registrene. Bemærk, at alle detaljer om urporten ikke er vist på figuren. Timer/Tæller1 registerværdierne går gennem de interne synkroniseringsregistre, som forårsager inputsynkroniseringsforsinkelsen, før de påvirker tællerdriften. Registrene TCCR1, GTCCR, OCR1A, OCR1B og OCR1C kan læses tilbage lige efter at registret er skrevet. Tilbagelæsningsværdierne er forsinket for Timer/Counter1 (TCNT1) registeret og flag (OCF1A, OCF1B og TOV1), på grund af input- og outputsynkronisering.
Timer/Counter1 har en høj opløsning og en høj nøjagtighed med de lavere forudskaleringsmuligheder. Den kan også understøtte to nøjagtige, højhastigheds, 8-bit pulsbreddemodulatorer, der bruger clockhastigheder op til 64 MHz (eller 32 MHz i lavhastighedstilstand). I denne tilstand fungerer Timer/Counter1 og output-sammenligningsregistrene som dobbelte stand-alone PWM'er med ikke-overlappende ikke-inverterede og inverterede udgange. Der henvises til side 86 for en detaljeret beskrivelse af denne funktion. På samme måde gør de høje forudskaleringsmuligheder denne enhed nyttig til lavere hastighedsfunktioner eller nøjagtige timingfunktioner med sjældne handlinger.
Figur 12-2. Timer/tæller 1 Synkroniseringsregister blokdiagram.
Timer/tæller1 og prescaler tillader at køre CPU'en fra en hvilken som helst urkilde, mens prescaleren kører på det hurtige 64 MHz (eller 32 MHz i lavhastighedstilstand) PCK-ur i asynkron tilstand.
Bemærk, at systemets clockfrekvens skal være lavere end en tredjedel af PCK-frekvensen. Synkroniseringsmekanismen for den asynkrone timer/tæller1 har brug for mindst to kanter af PCK'en, når systemuret er højt. Hvis frekvensen af systemuret er for høj, er der risiko for, at data eller kontrolværdier går tabt.
Følgende Figur 12-3 viser blokdiagrammet for Timer/Tæller1.
Tabel 12-1. Sammenlign tilstand Vælg i PWM-tilstand
COM1x1 | COM1x0 | Effekt på output Sammenlign pins |
0 | 0 | OC1x ikke tilsluttet. OC1x ikke tilsluttet. |
0 | 1 | OC1x ryddet ved sammenligningsmatch. Indstil når TCNT1 = $00. OC1x indstillet på sammenligne kamp. Ryddet, når TCNT1 = $00. |
1 | 0 | OC1x ryddet ved sammenligningsmatch. Indstil når TCNT1 = $00. OC1x ikke tilsluttet. |
1 | 1 | OC1x Sæt på sammenligne kamp. Ryddet, når TCNT1= $00. OC1x ikke tilsluttet. |
ADC-karakteristika
Tabel 21-8. ADC-karakteristika, Single Ended Channels. TA = -40°C til +85°C
Symbol | Parameter | Tilstand | Min | Typ | Maks | Enheder |
Opløsning | 10 | Bits | ||||
Absolut nøjagtighed (inklusive INL, DNL og kvantiserings-, forstærknings- og offset-fejl) | VREF = 4V, VCC = 4V,
ADC ur = 200 kHz |
2 | LSB | |||
VREF = 4V, VCC = 4V,
ADC-ur = 1 MHz |
3 | LSB | ||||
VREF = 4V, VCC = 4V,
ADC ur = 200 kHz Støjreduktionstilstand |
1.5 | LSB | ||||
VREF = 4V, VCC = 4V,
ADC-ur = 1 MHz Støjreduktionstilstand |
2.5 | LSB | ||||
Integral ikke-linearitet (INL) (nøjagtighed efter offset og forstærkningskalibrering) | VREF = 4V, VCC = 4V,
ADC ur = 200 kHz |
1 | LSB | |||
Differentiel ikke-linearitet (DNL) | VREF = 4V, VCC = 4V,
ADC ur = 200 kHz |
0.5 | LSB | |||
Opnå fejl | VREF = 4V, VCC = 4V,
ADC ur = 200 kHz |
2.5 | LSB | |||
Offset-fejl | VREF = 4V, VCC = 4V,
ADC ur = 200 kHz |
1.5 | LSB | |||
Konverteringstid | Gratis kørende konvertering | 14 | 280 | mikrosekunder | ||
Urfrekvens | 50 | 1000 | kHz | |||
VIN | Input bindtage | GND | VREF | V | ||
Input båndbredde | 38.4 | kHz | ||||
AREF | Ekstern reference Voltage | 2.0 | VCC | V | ||
VINT | Intern voltage Reference | 1.0 | 1.1 | 1.2 | V | |
Intern 2.56V reference (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | 32 | kΩ | ||||
REGN | Analog indgangsmodstand | 100 | MΩ | |||
ADC udgang | 0 | 1023 | LSB |
Bemærk: 1. Værdier er kun vejledende.
Tabel 21-9. ADC-karakteristika, differentielle kanaler (unipolær tilstand). TA = -40°C til +85°C
Symbol | Parameter | Tilstand | Min | Typ | Maks | Enheder |
Opløsning | Forstærkning = 1x | 10 | Bits | |||
Forstærkning = 20x | 10 | Bits | ||||
Absolut nøjagtighed (inklusive INL, DNL og
Kvantiserings-, forstærknings- og offsetfejl) |
Forstærkning = 1x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
10.0 | LSB | |||
Forstærkning = 20x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
20.0 | LSB | ||||
Integral ikke-linearitet (INL) (nøjagtighed efter offset og forstærkningskalibrering) | Forstærkning = 1x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
4.0 | LSB | |||
Forstærkning = 20x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
10.0 | LSB | ||||
Opnå fejl | Forstærkning = 1x | 10.0 | LSB | |||
Forstærkning = 20x | 15.0 | LSB | ||||
Offset-fejl | Forstærkning = 1x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
3.0 | LSB | |||
Forstærkning = 20x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
4.0 | LSB | ||||
Konverteringstid | Gratis kørende konvertering | 70 | 280 | mikrosekunder | ||
Urfrekvens | 50 | 200 | kHz | |||
VIN | Input bindtage | GND | VCC | V | ||
VDIFF | Input differential Voltage | VREF/Gain | V | |||
Input båndbredde | 4 | kHz | ||||
AREF | Ekstern reference Voltage | 2.0 | VCC – 1.0 | V | ||
VINT | Intern voltage Reference | 1.0 | 1.1 | 1.2 | V | |
Intern 2.56V reference (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | Referenceindgangsmodstand | 32 | kΩ | |||
REGN | Analog indgangsmodstand | 100 | MΩ | |||
ADC-konverteringsoutput | 0 | 1023 | LSB |
Bemærk: Værdier er kun vejledende.
Tabel 21-10. ADC-karakteristika, differentielle kanaler (bipolær tilstand). TA = -40°C til +85°C
Symbol | Parameter | Tilstand | Min | Typ | Maks | Enheder |
Opløsning | Forstærkning = 1x | 10 | Bits | |||
Forstærkning = 20x | 10 | Bits | ||||
Absolut nøjagtighed (inklusive INL, DNL og
Kvantiserings-, forstærknings- og offsetfejl) |
Forstærkning = 1x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
8.0 | LSB | |||
Forstærkning = 20x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
8.0 | LSB | ||||
Integral ikke-linearitet (INL) (nøjagtighed efter offset og forstærkningskalibrering) | Forstærkning = 1x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
4.0 | LSB | |||
Forstærkning = 20x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
5.0 | LSB | ||||
Opnå fejl | Forstærkning = 1x | 4.0 | LSB | |||
Forstærkning = 20x | 5.0 | LSB | ||||
Offset-fejl | Forstærkning = 1x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
3.0 | LSB | |||
Forstærkning = 20x
VREF = 4V, VCC = 5V ADC ur = 50 – 200 kHz |
4.0 | LSB | ||||
Konverteringstid | Gratis kørende konvertering | 70 | 280 | mikrosekunder | ||
Urfrekvens | 50 | 200 | kHz | |||
VIN | Input bindtage | GND | VCC | V | ||
VDIFF | Input differential Voltage | VREF/Gain | V | |||
Input båndbredde | 4 | kHz | ||||
AREF | Ekstern reference Voltage | 2.0 | VCC – 1.0 | V | ||
VINT | Intern voltage Reference | 1.0 | 1.1 | 1.2 | V | |
Intern 2.56V reference (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | Referenceindgangsmodstand | 32 | kΩ | |||
REGN | Analog indgangsmodstand | 100 | MΩ | |||
ADC-konverteringsoutput | -512 | 511 | LSB |
Opsummering af instruktionssæt
Mnemonics | Operander | Beskrivelse | Operation | Flag | #Ure |
REGNE- OG LOGISKE INSTRUKTIONER | |||||
TILFØJE | Rd, Rr | Tilføj to registre | Rd ← Rd + Rr | Z, C, N, V, H | 1 |
ADC | Rd, Rr | Tilføj med Carry to registre | Rd ← Rd + Rr + C | Z, C, N, V, H | 1 |
ADIW | Rdl,K | Tilføj Immediate til Word | Rdh:Rdl ← Rdh:Rdl + K | Z, C, N, V, S | 2 |
SUB | Rd, Rr | Træk to registre fra | Rd ← Rd – Rr | Z, C, N, V, H | 1 |
SUBI | Rd, K | Træk konstant fra register | Rd ← Rd – K | Z, C, N, V, H | 1 |
SBC | Rd, Rr | Træk fra med Bær to registre | Rd ← Rd – Rr – C | Z, C, N, V, H | 1 |
SBCI | Rd, K | Træk med bærekonstant fra reg. | Rd ← Rd – K – C | Z, C, N, V, H | 1 |
SBIW | Rdl,K | Træk øjeblikkelig fra Word | Rdh:Rdl ← Rdh:Rdl – K | Z, C, N, V, S | 2 |
OG | Rd, Rr | Logiske OG registre | Rd ← Rd ∙ Rr | Z,N,V | 1 |
ANDI | Rd, K | Logisk OG Register og Konstant | Rd ← Rd ∙ K | Z,N,V | 1 |
OR | Rd, Rr | Logiske ELLER-registre | Rd ← Rd v Rr | Z,N,V | 1 |
ORI | Rd, K | Logisk ELLER Register og konstant | Rd ← Rd v K | Z,N,V | 1 |
EOR | Rd, Rr | Eksklusive ELLER-registre | Rd ← Rd ⊕ Rr | Z,N,V | 1 |
KOM | Rd | Ens komplement | Rd ← 0xFF − Rd | Z, C, N, V | 1 |
NEG | Rd | To's komplement | Rd ← 0x00 − Rd | Z, C, N, V, H | 1 |
SBR | Rd,K | Indstil Bit(s) i Register | Rd ← Rd v K | Z,N,V | 1 |
CBR | Rd,K | Ryd bit(er) i register | Rd ← Rd ∙ (0xFF – K) | Z,N,V | 1 |
INC | Rd | Forøgelse | Rd ← Rd + 1 | Z,N,V | 1 |
DEC | Rd | Nedgang | Rd ← Rd − 1 | Z,N,V | 1 |
TST | Rd | Test for nul eller minus | Rd ← Rd ∙ Rd | Z,N,V | 1 |
CLR | Rd | Ryd register | Rd ← Rd ⊕ Rd | Z,N,V | 1 |
SER | Rd | Indstil register | Rd ← 0xFF | Ingen | 1 |
AFDELINGSINSTRUKTIONER | |||||
RJMP | k | Relativt spring | PC ← PC + k + 1 | Ingen | 2 |
IJMP | Indirekte hop til (Z) | PC ← Z | Ingen | 2 | |
RCALL | k | Relativt subrutineopkald | PC ← PC + k + 1 | Ingen | 3 |
ICALL | Indirekte opkald til (Z) | PC ← Z | Ingen | 3 | |
RET | Subrutine Retur | PC ← STAK | Ingen | 4 | |
NETVÆRK | Afbryd retur | PC ← STAK | I | 4 | |
CPSE | Rd, Rr | Sammenlign, Spring over hvis Lige | hvis (Rd = Rr) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
CP | Rd, Rr | Sammenligne | Rd − Rr | Z, N, V, C, H | 1 |
CPC | Rd, Rr | Sammenlign med Carry | Rd − Rr − C | Z, N, V, C, H | 1 |
CPI | Rd,K | Sammenlign Register med Immediate | Rd - K | Z, N, V, C, H | 1 |
SBRC | Rr, b | Spring over, hvis bit i register er ryddet | hvis (Rr(b)=0) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
SBRS | Rr, b | Spring over, hvis bit i register er indstillet | hvis (Rr(b)=1) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
SBIC | P, b | Spring over hvis bit i I/O-registret er ryddet | hvis (P(b)=0) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
SBIS | P, b | Spring over, hvis Bit in I/O Register er indstillet | hvis (P(b)=1) PC ← PC + 2 eller 3 | Ingen | 1/2/3 |
BRBS | s, k | Filial, hvis statusflag er indstillet | hvis (SREG(s) = 1) så PC←PC+k + 1 | Ingen | 1/2 |
BRBC | s, k | Filial, hvis statusflaget er slettet | hvis (SREG(s) = 0) så PC←PC+k + 1 | Ingen | 1/2 |
BREQ | k | Filial hvis Lige | hvis (Z = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRNE | k | Filial hvis ikke lige | hvis (Z = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRCS | k | Gren hvis bæresæt | hvis (C = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRCC | k | Filial hvis Carry Cleared | hvis (C = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRSH | k | Filial hvis samme eller højere | hvis (C = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRLO | k | Filial hvis lavere | hvis (C = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRMI | k | Filial hvis Minus | hvis (N = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRPL | k | Filial hvis Plus | hvis (N = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRGE | k | Filial, hvis større eller lige, underskrevet | hvis (N ⊕ V= 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRLT | k | Filial, hvis mindre end nul, underskrevet | hvis (N ⊕ V= 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRHS | k | Branch if Half Carry Flag Set | hvis (H = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRHC | k | Filial, hvis Half Carry Flag ryddet | hvis (H = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRTS | k | Gren hvis T Flag Sæt | hvis (T = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRTC | k | Gren hvis T-flaget er ryddet | hvis (T = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRVS | k | Forgrening, hvis overløbsflag er indstillet | hvis (V = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRVC | k | Forgrening, hvis overløbsflaget er slettet | hvis (V = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BRIE | k | Filial, hvis afbrydelse er aktiveret | hvis (I = 1) så PC ← PC + k + 1 | Ingen | 1/2 |
BRID | k | Filial, hvis afbrydelse er deaktiveret | hvis (I = 0) så PC ← PC + k + 1 | Ingen | 1/2 |
BIT OG BIT-TEST INSTRUKTIONER | |||||
SBI | P,b | Indstil bit i I/O-register | I/O(P,b) ← 1 | Ingen | 2 |
CBI | P,b | Ryd bit i I/O-register | I/O(P,b) ← 0 | Ingen | 2 |
LSL | Rd | Logisk skift til venstre | Rd(n+1) ← Rd(n), Rd(0) ← 0 | Z, C, N, V | 1 |
LSR | Rd | Logisk skift til højre | Rd(n) ← Rd(n+1), Rd(7) ← 0 | Z, C, N, V | 1 |
ROLLE | Rd | Drej til venstre gennem bære | Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) | Z, C, N, V | 1 |
ROR | Rd | Drej lige igennem bære | Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) | Z, C, N, V | 1 |
ASR | Rd | Aritmetisk skift til højre | Rd(n) ← Rd(n+1), n=0..6 | Z, C, N, V | 1 |
Mnemonics | Operander | Beskrivelse | Operation | Flag | #Ure |
BYT | Rd | Byt nibbles | Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) | Ingen | 1 |
BSET | s | Flag sæt | SREG(er) ← 1 | SREG(er) | 1 |
BCLR | s | Flag klart | SREG(er) ← 0 | SREG(er) | 1 |
BST | Rr, b | Bit Store fra Register til T | T ← Rr(b) | T | 1 |
BLD | Rd, b | Bitbelastning fra T til Register | Rd(b) ← T | Ingen | 1 |
SEC | Sæt Carry | C ← 1 | C | 1 | |
CLC | Clear Carry | C ← 0 | C | 1 | |
SEN | Indstil negativt flag | N ← 1 | N | 1 | |
CLN | Ryd negativt flag | N ← 0 | N | 1 | |
SEZ | Indstil Zero Flag | Z ← 1 | Z | 1 | |
CLZ | Clear Zero Flag | Z ← 0 | Z | 1 | |
SEI | Aktiver global afbrydelse | I ← 1 | I | 1 | |
CLI | Global interrupt deaktiver | I ← 0 | I | 1 | |
SES | Sæt underskrevet testflag | S ← 1 | S | 1 | |
CLS | Ryd signeret testflag | S ← 0 | S | 1 | |
SEV | Sæt toer komplementoverløb. | V ← 1 | V | 1 | |
CLV | Clear Twos Complement Overflow | V ← 0 | V | 1 | |
SÆT | Indstil T i SREG | T ← 1 | T | 1 | |
CLT | Ryd T i SREG | T ← 0 | T | 1 | |
SEH | Sæt Half Carry Flag i SREG | H ← 1 | H | 1 | |
CLH | Ryd Half Carry Flag i SREG | H ← 0 | H | 1 | |
DATAOVERFØRSELSINSTRUKTIONER | |||||
MOV | Rd, Rr | Flyt mellem registre | Rd ← Rr | Ingen | 1 |
MOVW | Rd, Rr | Kopier Register Word | Rd+1:Rd ← Rr+1:Rr | Ingen | 1 |
LDI | Rd, K | Indlæs øjeblikkeligt | Rd ← K | Ingen | 1 |
LD | Rd, X | Indlæs indirekte | Rd ← (X) | Ingen | 2 |
LD | Rd, X+ | Indlæs indirekte og Post-Inc. | Rd ← (X), X ← X + 1 | Ingen | 2 |
LD | Rd, – X | Indlæs indirekte og før dec. | X ← X – 1, Rd ← (X) | Ingen | 2 |
LD | Rd, Y | Indlæs indirekte | Rd ← (Y) | Ingen | 2 |
LD | Rd, Y+ | Indlæs indirekte og Post-Inc. | Rd ← (Y), Y ← Y + 1 | Ingen | 2 |
LD | Rd, – Y | Indlæs indirekte og før dec. | Y ← Y – 1, Rd ← (Y) | Ingen | 2 |
LDD | Rd,Y+q | Belastning indirekte med forskydning | Rd ← (Y + q) | Ingen | 2 |
LD | Rd, Z | Indlæs indirekte | Rd ← (Z) | Ingen | 2 |
LD | Rd, Z+ | Indlæs indirekte og Post-Inc. | Rd ← (Z), Z ← Z+1 | Ingen | 2 |
LD | Rd, -Z | Indlæs indirekte og før dec. | Z ← Z – 1, Rd ← (Z) | Ingen | 2 |
LDD | Rd, Z+q | Belastning indirekte med forskydning | Rd ← (Z + q) | Ingen | 2 |
LDS | Rd, k | Indlæs direkte fra SRAM | Rd ← (k) | Ingen | 2 |
ST | X, Rr | Butik indirekte | (X) ← Rr | Ingen | 2 |
ST | X+, Rr | Butik Indirect og Post-Inc. | (X) ← Rr, X ← X + 1 | Ingen | 2 |
ST | – X, Rr | Butik indirekte og før dec. | X ← X – 1, (X) ← Rr | Ingen | 2 |
ST | Y, Rr | Butik indirekte | (Y) ← Rr | Ingen | 2 |
ST | Y+, Rr | Butik Indirect og Post-Inc. | (Y) ← Rr, Y ← Y + 1 | Ingen | 2 |
ST | – Y, Rr | Butik indirekte og før dec. | Y ← Y – 1, (Y) ← Rr | Ingen | 2 |
STD | Y+q,Rr | Opbevar indirekte med forskydning | (Y + q) ← Rr | Ingen | 2 |
ST | Z, Rr | Butik indirekte | (Z) ← Rr | Ingen | 2 |
ST | Z+, Rr | Butik Indirect og Post-Inc. | (Z) ← Rr, Z ← Z + 1 | Ingen | 2 |
ST | -Z, Rr | Butik indirekte og før dec. | Z ← Z – 1, (Z) ← Rr | Ingen | 2 |
STD | Z+q,Rr | Opbevar indirekte med forskydning | (Z + q) ← Rr | Ingen | 2 |
STS | k, Rr | Gem direkte til SRAM | (k) ← Rr | Ingen | 2 |
LPM | Indlæs programhukommelse | R0 ← (Z) | Ingen | 3 | |
LPM | Rd, Z | Indlæs programhukommelse | Rd ← (Z) | Ingen | 3 |
LPM | Rd, Z+ | Indlæs programhukommelse og Post-Inc | Rd ← (Z), Z ← Z+1 | Ingen | 3 |
SPM | Gem programhukommelse | (z) ← R1:R0 | Ingen | ||
IN | Rd, P | I havn | Rd ← P | Ingen | 1 |
UD | P, Rr | Ud havn | P ← Rr | Ingen | 1 |
SKUBBE | Rr | Tryk Registrer på stak | STAK ← Rr | Ingen | 2 |
POP | Rd | Pop Register fra Stack | Rd ← STAK | Ingen | 2 |
MCU STYRING INSTRUKTIONER | |||||
NEJ | Ingen operation | Ingen | 1 | ||
SOVE | Sove | (se specifik beskrivelse for Sleep-funktion) | Ingen | 1 | |
WDR | Nulstil vagthund | (se specifik beskrivelse for WDR/Timer) | Ingen | 1 | |
PAUSE | Pause |
Hastighed (MHz) (1) | Forsyning Voltage (V) | Temperaturområde | Pakke (2) | Bestillingskode (3) |
10 | 1.8 – 5.5 | Industriel
(-40 ° C til + 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 | Industriel
(-40 ° C til + 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 |
Bemærkninger: 1. For hastighed vs. forsyning voltage, se afsnit 21.3 "Hastighed" på side 163.
Alle pakker er Pb-fri, halogenidfri og helt grønne, og de overholder det europæiske direktiv for begrænsning af farlige stoffer (RoHS).
Kode indikatorer
H: NiPdAu bly finish
U: mat tin
R: tape og rulle
Disse enheder kan også leveres i waferform. Kontakt venligst dit lokale Atmel-salgskontor for detaljerede bestillingsoplysninger og minimumsmængder.
trykfejl
Errata ATtiny25
Revisionsbrevet i dette afsnit henviser til revisionen af ATtiny25-enheden.
Rev D – F
Ingen kendte fejl.
Rev B – C
EEPROM-læsning kan mislykkes ved lav forsyningsvolumentage / lav clockfrekvens
EEPROM-læsning kan mislykkes ved lav forsyningsvolumentage / lav clockfrekvens
Forsøger at læse EEPROM ved lave clockfrekvenser og/eller lav forsyning voltage kan resultere i ugyldige data.
Problemløsning/løsning
Brug ikke EEPROM'en, når clockfrekvensen er under 1MHz og leverer voltage er under 2V. Hvis driftsfrekvensen ikke kan hæves over 1MHz, skal voltage skal være mere end 2V. Tilsvarende, hvis forsyning voltage kan ikke hæves over 2V, så skal driftsfrekvensen være mere end 1MHz.
Denne funktion er kendt for at være temperaturafhængig, men den er ikke blevet karakteriseret. Der gives kun retningslinjer for stuetemperatur.
Rev A
Ikke samplidt.
Errata ATtiny45
Revisionsbrevet i dette afsnit henviser til revisionen af ATtiny45-enheden.
Rev F – G
Ingen kendte fejl
Rev D – E
EEPROM-læsning kan mislykkes ved lav forsyningsvolumentage / lav clockfrekvens
EEPROM-læsning kan mislykkes ved lav forsyningsvolumentage / lav clockfrekvens
Forsøger at læse EEPROM ved lave clockfrekvenser og/eller lav forsyning voltage kan resultere i ugyldige data.
Problemløsning/løsning
Brug ikke EEPROM'en, når clockfrekvensen er under 1MHz og leverer voltage er under 2V. Hvis driftsfrekvensen ikke kan hæves over 1MHz, skal voltage skal være mere end 2V. Tilsvarende, hvis forsyning voltage kan ikke hæves over 2V, så skal driftsfrekvensen være mere end 1MHz.
Denne funktion er kendt for at være temperaturafhængig, men den er ikke blevet karakteriseret. Der gives kun retningslinjer for stuetemperatur.
Rev B – C
PLL låser ikke
EEPROM læst fra applikationskode virker ikke i Lock Bit Mode 3
EEPROM-læsning kan mislykkes ved lav forsyningsvolumentage / lav clockfrekvens
Timer Counter 1 PWM-udgangsgenerering på OC1B-XOC1B fungerer ikke korrekt
PLL låser ikke
Ved frekvenser under 6.0 MHz vil PLL ikke låse
Problemløsning/løsning
Når du bruger PLL, skal du køre ved 6.0 MHz eller højere.
EEPROM læst fra applikationskode virker ikke i Lock Bit Mode 3
Når hukommelseslåsbittene LB2 og LB1 er programmeret til tilstand 3, virker EEPROM-læsning ikke fra applikationskoden.
Problemløsning/omgå
Indstil ikke Lock Bit Protection Mode 3, når applikationskoden skal læses fra EEPROM.
EEPROM-læsning kan mislykkes ved lav forsyningsvolumentage / lav clockfrekvens
Forsøger at læse EEPROM ved lave clockfrekvenser og/eller lav forsyning voltage kan resultere i ugyldige data.
Problemløsning/løsning
Brug ikke EEPROM'en, når clockfrekvensen er under 1MHz og leverer voltage er under 2V. Hvis driftsfrekvensen ikke kan hæves over 1MHz, skal voltage skal være mere end 2V. Tilsvarende, hvis forsyning voltage kan ikke hæves over 2V, så skal driftsfrekvensen være mere end 1MHz.
Denne funktion er kendt for at være temperaturafhængig, men den er ikke blevet karakteriseret. Der gives kun retningslinjer for stuetemperatur.
Timer Counter 1 PWM-udgangsgenerering på OC1B – XOC1B fungerer ikke korrekt
Timer Counter1 PWM-udgang OC1B-XOC1B fungerer ikke korrekt. Kun i det tilfælde, hvor kontrolbittene COM1B1 og COM1B0 er i samme tilstand som henholdsvis COM1A1 og COM1A0, fungerer OC1B-XOC1B udgangen korrekt.
Problemløsning/omgå
Den eneste løsning er at bruge samme kontrolindstilling på COM1A[1:0] og COM1B[1:0] kontrolbits, se tabel 14-4 i dataarket. Problemet er blevet rettet for Tiny45 rev D.
Rev A
For højt strømforbrug
DebugWIRE mister kommunikationen, når man enkelt træder ind i interrupts
PLL låser ikke
EEPROM læst fra applikationskode virker ikke i Lock Bit Mode 3
EEPROM-læsning kan mislykkes ved lav forsyningsvolumentage / lav clockfrekvens
For højt strømforbrug
Tre situationer vil føre til et for højt strømforbrug. Disse er:
Et eksternt ur vælges af sikringer, men I/O-PORTEN er stadig aktiveret som udgang.
EEPROM'en aflæses, før strømmen slukkes.
VCC er 4.5 volt eller højere.
Ansvarsfraskrivelse: Oplysningerne i dette dokument er givet i forbindelse med Atmel-produkter. Ingen licens, hverken udtrykkelig eller underforstået, ved estoppel eller på anden måde, til nogen intellektuel ejendomsret er givet af dette dokument eller i forbindelse med salg af Atmel-produkter. UNDTAGET SOM ANGIVET I ATMEL VILKÅR OG SALGSBETINGELSER PLACERET PÅ ATMEL WEBWEBSTED, ATMEL PÅTAGER SIG INTET ANSVAR OG FRASKRIVER SIG ENHVER UDTRYKKELIG, UNDERFORSTÅET ELLER LOVBETLIG GARANTI I FORBINDELSE MED DETS PRODUKTER, INKLUSIVE, MEN IKKE BEGRÆNSET TIL, DEN UNDERFORSTÅEDE GARANTI FOR SALGBARHED, EGNETHED, EGNETHED IKKE-KRÆNKELSE. ATMEL KAN UNDER INGEN OMSTÆNDIGHEDER VÆRE ANSVARLIG FOR NOGEN DIREKTE, INDIREKTE, FØLGESKADER, STRAF-, SÆRLIGE ELLER TILFÆLDIGE SKADER (HERunder, UDEN BEGRÆNSNING, SKADER FOR TAB OG FORTJENESTE, FORRETNINGSAFBRYDELSE ELLER UDEN ELLER TAB AF BRUG) FOR AT BRUGE DETTE DOKUMENT, SELV HVIS ATMEL ER BLIVER UNDRETET OM MULIGHEDEN FOR SÅDANNE SKADER.
Atmel giver ingen erklæringer eller garantier med hensyn til nøjagtigheden eller fuldstændigheden af indholdet af dette dokument og forbeholder sig retten til at foretage ændringer i specifikationer og produktbeskrivelser til enhver tid uden varsel. Atmel forpligter sig ikke til at opdatere oplysningerne heri. Medmindre andet specifikt er angivet, er Atmel-produkter ikke egnede til og må ikke bruges i bilapplikationer. Atmels produkter er ikke beregnet til, godkendt eller garanteret til brug som komponenter i applikationer, der er beregnet til at understøtte eller opretholde liv.