Atmel

Atmel 8-bit AVR-mikrokontroller med 2/4/8K byte programmerbar flash i systemetchip

 

Funksjoner

  • Høy ytelse, laveffekt AVR® 8-bits mikrokontroller
  • Avansert RISC-arkitektur
  • 120 Kraftige instruksjoner - mest enkel klokkesyklusutførelse
  • 32 x 8 Arbeidsregister for generelt bruk
  • Fullstendig statisk drift
  • Ikke-flyktige program- og dataminner
  • 2/4 / 8K byte med systemprogrammerbart programminneblink
  • Utholdenhet: 10,000 XNUMX skrive-/slettesykluser
  • 128/256/512 byte Programmerbar EEPROM i systemet
  • Utholdenhet: 100,000 XNUMX skrive-/slettesykluser
  • 128/256/512 Bytes Intern SRAM
  • Programmeringslås for selvprogrammerende Flash-program og EEPROM datasikkerhet

Perifere funksjoner

  • 8-biters timer / teller med prescaler og to PWM-kanaler
  • 8-biters høyhastighets tidtaker / teller med separat prescaler
  • 2 høyfrekvente PWM-utganger med separate utgangssammenligningsregistre
  • Programmerbar dødtidsgenerator
  • USI - Universal Serial Interface med Start Condition Detector
  • 10-bits ADC

4 enkeltkanaler

2 differensial ADC-kanalpar med programmerbar forsterkning (1x, 20x)

Temperaturmåling

Programmerbar Watchdog Timer med separat on-chip oscillator

Analog komparator på brikken

Spesielle mikrokontrollerfunksjoner

debugWIRE Feilsøkingssystem på brikken

System-programmerbar via SPI-port

Eksterne og interne avbruddskilder

Tomgang med lavt strømforbruk, ADC-støyreduksjon og avstengningsmodus

Forbedret tilbakestillingskrets for oppstart

Programmerbar detekteringskrets for brun ut

Intern kalibrert oscillator

I / O og pakker

Seks programmerbare I / O-linjer

8-pin PDIP, 8-pin SOIC, 20-pad QFN / MLF og 8-pin TSSOP (kun ATtiny45 / V)

Driftsvoltage
- 1.8 - 5.5V for ATtiny25V / 45V / 85V
- 2.7 - 5.5 V for ATtiny25 / 45/85

Hastighetsgrad
- ATtiny25V / 45V / 85V: 0 - 4 MHz @ 1.8 - 5.5 V, 0 - 10 MHz @ 2.7 - 5.5 V
- ATtiny25 / 45/85: 0 - 10 MHz @ 2.7 - 5.5 V, 0 - 20 MHz @ 4.5 - 5.5 V

Industrielt temperaturområde

Lavt strømforbruk

Aktiv modus:

1 MHz, 1.8 V: 300 uA

Slå av modus:

Pin-konfigurasjoner

Pinout ATtiny25 / 45/85 Konfigurasjon

Pin-beskrivelser

VCC: Supply voltage.
GND: Jord.
Port B (PB5:PB0): Port B er en 6-bits toveis I/O-port med interne pull-up-motstander (valgt for hver bit). Port B-utgangsbufferne har symmetriske kjøreegenskaper med både høy synke- og kildekapasitet. Som innganger vil port B-pinner som eksternt trekkes lavt gi strøm hvis pull-up-motstandene er aktivert. Port B-pinnene er tredelt når en tilbakestillingstilstand blir aktiv, selv om klokken ikke går.

Port B tjener også funksjonene til forskjellige spesialfunksjoner i ATtiny25 / 45/85 som oppført
På ATtiny25 byttes de programmerbare I / O-portene PB3 og PB4 (pinner 2 og 3) ut i ATtiny15-kompatibilitetsmodus for å støtte bakoverkompatibilitet med ATtiny15.

RESET: Tilbakestill inngang. Et lavt nivå på denne pinnen lenger enn minimumspulslengden vil generere en tilbakestilling, selv om klokken ikke går og forutsatt at tilbakestillingspinnen ikke er deaktivert. Minimum pulslengde er oppgitt Tabell 21-4 på side 165. Kortere pulser genererer ikke garantert en tilbakestilling.

Tilbakestillingspinnen kan også brukes som en (svak) I / O-pinne.

Overview

ATtiny25 / 45/85 er en CMOS 8-bits mikrokontroller med lav effekt basert på AVR-forbedret RISC-arkitektur. Ved å utføre kraftige instruksjoner i en enkelt klokkesyklus, oppnår ATtiny25 / 45/85 gjennomstrømninger som nærmer seg 1 MIPS per MHz, slik at systemdesigneren kan optimalisere strømforbruket versus prosesshastigheten.

Blokkdiagram Blokkdiagram

AVR-kjernen kombinerer et rikt instruksjonssett med 32 arbeidsregister for generelle formål. Alle 32 registerene er direkte koblet til den aritmetiske logiske enheten (ALU), slik at to uavhengige registre kan nås i en enkelt instruksjon utført i en klokkesyklus. Den resulterende arkitekturen er mer kodeeffektiv og oppnår gjennomstrømninger opptil ti ganger raskere enn vanlige CISC-mikrokontrollere.

ATtiny25 / 45/85 gir følgende funksjoner: 2/4 / 8K byte med programmerbar blits i systemet, 128/256/512 byte EEPROM, 128/256/256 byte SRAM, 6 generelle I / O-linjer, 32 generelle formålsregister, en 8-biters timer / teller med sammenligningsmodus, en 8-biters høyhastighets timer / teller, universelt serielt grensesnitt, interne og eksterne avbrudd, en 4-kanals, 10-biters ADC, en programmerbar Watchdog Timer med intern Oscillator og tre programvarevalgbare strømsparingsmoduser. Hvilemodus stopper CPU mens SRAM, Timer / Counter, ADC, Analog Comparator og Interrupt-systemet fortsetter å fungere. Avstengingsmodus lagrer registerinnholdet, og deaktiverer alle chipfunksjonene til neste avbrytelse eller maskinvaretilbakestilling. ADC Noise Reduction mode stopper CPU og alle I / O-moduler unntatt ADC, for å minimere svitsjestøy under ADC-konvertering.

Enheten er produsert ved bruk av Atmels ikke-flyktige minneteknologi med høy tetthet. On-chip ISP Flash lar programminnet omprogrammeres i systemet gjennom et SPI serielt grensesnitt, av en konvensjonell ikke-flyktig minneprogrammerer eller av en startkode på chip som kjører på AVR-kjernen.

ATtiny25 / 45/85 AVR støttes med en komplett pakke med program- og systemutviklingsverktøy inkludert: C-piloter, makroassemblere, programfeilsøkere / simulatorer og evalueringskit.

Om ressurser

Et omfattende sett med utviklingsverktøy, applikasjonsmerknader og datablad er tilgjengelig for nedlasting på http://www.atmel.com/avr.

Kode Eksamples

Denne dokumentasjonen inneholder enkel kode eksamples som kort viser hvordan du bruker ulike deler av enheten. Disse koden eksamples antar at den spesifikke overskriften file er inkludert før kompilering. Vær oppmerksom på at ikke alle C-kompilatorleverandører inkluderer bitdefinisjoner i overskriften files og avbruddshåndtering i C er kompilatoravhengig. Bekreft med C -kompilerdokumentasjonen for mer informasjon.

For I / O-registre som ligger i det utvidede I / O-kartet, må "IN", "OUT", "SBIS", "SBIC", "CBI" og "SBI" erstattes med instruksjoner som gir tilgang til utvidet I / O. Vanligvis betyr dette "LDS" og "STS" kombinert med "SBRS", "SBRC", "SBR" og "CBR". Merk at ikke alle AVR-enheter inkluderer et utvidet I / O-kart.

Kapasitiv berøringsføling

Atmel QTouch Library gir en enkel å bruke løsning for berøringsfølsomme grensesnitt på Atmel AVR mikrokontrollere. QTouch Library inkluderer støtte for QTouch®- og QMatrix®-oppkjøpsmetoder.

Berøringsfølelse blir enkelt lagt til i ethvert program ved å koble til QTouch-biblioteket og bruke applikasjonsprogrammeringsgrensesnittet (API) i biblioteket for å definere berøringskanaler og sensorer. Applikasjonen kaller deretter API for å hente kanalinformasjon og bestemme berøringssensorens tilstand.

QTouch Library er gratis og kan lastes ned fra Atmel webnettstedet. For mer informasjon og detaljer om implementering, se QTouch Library User Guide - også tilgjengelig fra Atmel webnettstedet.

Oppbevaring av data

Pålitelighet Kvalifiseringsresultater viser at den forventede datalagringsfeilen er mye mindre enn 1 PPM over 20 år ved 85 ° C eller 100 år ved 25 ° C.

AVR CPU-kjerne

Introduksjon

Denne delen diskuterer AVR-kjernearkitekturen generelt. Hovedfunksjonen til CPU-kjernen er å sikre riktig programgjennomføring. CPU-en må derfor kunne få tilgang til minner, utføre beregninger, kontrollere periferiutstyr og håndtere avbrudd.

Arkitektonisk overview Arkitektur

For å maksimere ytelse og parallellitet bruker AVR en Harvard-arkitektur - med separate minner og busser for program og data. Instruksjoner i programminnet utføres med en enkeltnivå rørledning. Mens en instruksjon blir utført, blir den neste instruksjonen forhåndshentet fra programminnet. Dette konseptet gjør det mulig å utføre instruksjoner i hver klokkesyklus. Programminnet er omprogrammerbart Flash-minne i systemet.

Hurtigtilgangsregisteret File inneholder 32 x 8-biters generelle arbeidsregistre med en enkelt klokkesyklus tilgangstid. Dette tillater en-syklus Arithmetic Logic Unit (ALU) drift. I en typisk ALU-operasjon sendes to operander ut fra registeret File, operasjonen utføres, og resultatet lagres tilbake i registeret File- i en kloksyklus.

Seks av de 32 registrene kan brukes som tre 16-biters indirekte adresseregisterpekere for Data Space-adressering - muliggjør effektive adresseberegninger. En av disse adressepekerne kan også brukes som en adressepeker for oppslagstabeller i Flash Program-minne. Disse tilleggsfunksjonsregistrene er 16-biters X-, Y- og Z-registeret, beskrevet senere i dette avsnittet.

ALU støtter aritmetiske og logiske operasjoner mellom registre eller mellom en konstant og et register. Operasjoner med enkeltregister kan også utføres i ALU. Etter en aritmetisk operasjon oppdateres statusregisteret for å gjenspeile informasjon om resultatet av operasjonen.

Programflyt er gitt av betingede og ubetingede instruksjoner for å hoppe og ringe, som er i stand til å adressere hele adresseområdet direkte. De fleste AVR-instruksjoner har et enkelt 16-biters ordformat, men det er også 32-bit instruksjoner.

Under avbrudd og underrutineanrop lagres returadressen Programteller (PC) på bunken. Stack blir allokert effektivt i generelle data SRAM, og følgelig er Stack-størrelsen bare begrenset av den totale SRAM-størrelsen og bruken av SRAM. Alle brukerprogrammer må initialisere SP i Reset-rutinen (før underrutiner eller avbrudd utføres). Stack Pointer (SP) er lese- / skrivetilgjengelig i I / O-rommet. Data SRAM er lett tilgjengelig via de fem forskjellige adresseringsmodusene som støttes i AVR-arkitekturen.

Minnerommene i AVR-arkitekturen er alle lineære og vanlige minnekart.

En fleksibel avbruddsmodul har sine kontrollregistre i I / O-rommet med en ekstra Global Interrupt Enable-bit i statusregisteret. Alle avbrudd har en egen Interrupt Vector i tabellen Interrupt Vector. Avbruddene har prioritet i samsvar med deres avbrytelsesposisjon. Jo lavere Interrupt Vector-adresse, jo høyere prioritet.

I/O-minneplassen inneholder 64 adresser for CPU-perifere funksjoner som kontrollregistre, SPI og andre I/O-funksjoner. I/O-minnet kan nås direkte, eller som dataromplasseringer som følger registret File, 0x20 – 0x5F.

ALU - Aritmetisk logikkenhet

AVR ALU med høy ytelse fungerer i direkte forbindelse med alle de 32 arbeidsregistrene for generelle formål. Innen en enkelt klokkesyklus utføres aritmetiske operasjoner mellom generelle formålsregistre eller mellom et register og et øyeblikkelig. ALU-operasjonene er delt inn i tre hovedkategorier - aritmetikk, logisk og bitfunksjon. Noen implementeringer av arkitekturen gir også en kraftig multiplikator som støtter både signert / usignert multiplikasjon og brøkformat. Se avsnittet "Instruksjonssett" for en detaljert beskrivelse.

Statusregister

Statusregisteret inneholder informasjon om resultatet av den siste utførte regneinstruksjonen. Denne informasjonen kan brukes til å endre programflyten for å utføre betingede operasjoner. Merk at statusregisteret oppdateres etter alle ALU-operasjoner, som spesifisert i instruksjonsreferansen. Dette vil i mange tilfeller fjerne behovet for å bruke de dedikerte sammenligningsinstruksjonene, noe som resulterer i raskere og mer kompakt kode.

Statusregisteret lagres ikke automatisk når du går inn i en avbruddsrutine og gjenopprettes når du kommer tilbake fra et avbrudd. Dette må håndteres av programvare.

SREG - AVR Status Register

AVR-statusregisteret - SREG - er definert som:

Bit 7 6 5 4 3 2 1 0
0x3F I T H S V N Z C SREG
Les/skriv R/W R/W R/W R/W R/W R/W R/W R/W
Startverdi 0 0 0 0 0 0 0 0

Bit 7 - I: Global Interrupt Enable

Global Interrupt Enable-biten må være satt for at avbruddene skal aktiveres. Den individuelle avbruddsaktiveringskontrollen blir deretter utført i separate kontrollregistre. Hvis Global Interrupt Enable Register er slettet, er ingen av avbruddene aktivert uavhengig av de individuelle innstillingene for avbruddsaktivering. I-biten blir ryddet av maskinvare etter at et avbrudd har skjedd, og er satt av RETI-instruksjonen for å aktivere påfølgende avbrudd. I-bit kan også stilles inn og tømmes av applikasjonen med SEI- og CLI-instruksjonene, som beskrevet i instruksjonsreferansen.

Bit 6 - T: Bitkopilagring

Bitkopiinstruksjonene BLD (Bit LoaD) og BST (Bit STore) bruker T-biten som kilde eller destinasjon for den opererte biten. Litt fra et register i Registeret File kan kopieres til T ved BST-instruksjonen, og en bit i T kan kopieres inn i en bit i et register i registeret File etter BLD-instruksjonen.

Bit 5 - H: Half Carry Flag

Half Carry Flag H indikerer Half Carry i noen aritmetiske operasjoner. Half Carry er nyttig i BCD-aritmetikk. Se “Beskrivelse av instruksjonssett” for detaljert informasjon.

Bit 4 – S: Tegnbit, S = N ⊕ V

S-biten er alltid en eksklusiv eller mellom Negative Flag N og Two's Complement Overflow Flag V. Se "Beskrivelse av instruksjonssett" for detaljert informasjon.

Bit 3 - V: Two's Complement Overflow Flag

The Two's Complement Overflow Flag V støtter to komplement-aritmetikk. Se “Beskrivelse av instruksjonssett” for detaljert informasjon.

Bit 2 - N: Negativt flagg

Negativt flagg N indikerer et negativt resultat i en aritmetisk eller logisk operasjon. Se “Beskrivelse av instruksjonssett” for detaljert informasjon.

Bit 1 - Z: Zero Flag

Zero Flag Z indikerer et nullresultat i en aritmetisk eller logisk operasjon. Se “Beskrivelse av instruksjonssett” for detaljert informasjon.

Bit 0 - C: Carry Flag

Carry Flag C indikerer en bæring i en aritmetisk eller logisk operasjon. Se “Beskrivelse av instruksjonssett” for detaljert informasjon.

Generelle formålsregister File

Registeret File er optimert for AVR Enhanced RISC instruksjonssettet. For å oppnå den nødvendige ytelsen og fleksibiliteten, støttes følgende input/output-ordninger av registeret File:

Én 8-bits utgangsoperand og en 8-bits resultatinngang

To 8-bits utgangsoperander og en 8-bits resultatinngang

To 8-bits utgangsoperander og en 16-bits resultatinngang

Én 16-bits utgangsoperand og en 16-bits resultatinngang

Figur 4-2 viser strukturen til de 32 arbeidsregistrene for generelle formål i CPUen. Generelt formål

Som vist i Figur 4-2, blir hvert register også tildelt en dataminneadresse, som kartlegger dem direkte til de første 32 stedene i brukerdatarommet. Selv om denne ikke er fysisk implementert som SRAM-lokasjoner, gir denne minneorganisasjonen stor fleksibilitet i tilgangen til registerene, ettersom X-, Y- og Z-pekerregistrene kan settes til å indeksere ethvert register i file.De fleste av instruksjonene som opererer i registeret File har direkte tilgang til alle registre, og de fleste av dem er ensyklusinstruksjoner.

X-registeret, Y-registeret og Z-registeret

Registerene R26..R31 har noen ekstra funksjoner til deres generelle formål. Disse registerene er 16-biters adressepekere for indirekte adressering av datarommet. De tre indirekte adresseregistrene X, Y og Z er definert som beskrevet i Figur 4-3.

Register

I de forskjellige adresseringsmodusene har disse adresseregistrene funksjoner som fast forskyvning, automatisk økning og automatisk dekrement (se instruksjonsreferansen for detaljer).

Stakk pekeren

Stakken brukes hovedsakelig for lagring av midlertidige data, for lagring av lokale variabler og for lagring av returadresser etter avbrudd og subrutineanrop. Stack Pointer Register viser alltid til toppen av Stack. Merk at Stack er implementert som voksende fra høyere minneplasser til lavere minneplasseringer. Dette innebærer at en Stack PUSH-kommando reduserer Stack Pointer.

Stack-pekeren peker på data SRAM Stack-området der Subrutine og Interrupt Stacks er plassert. Denne stabelplassen i SRAM-dataene må defineres av programmet før eventuelle subrutineanrop utføres eller avbrudd aktiveres. Stack-pekeren må være satt til punktet over 0x60. Stakkpekeren blir redusert av en når data skyves på stakken med PUSH-instruksjonen, og den blir redusert av to når returadressen skyves på stakken med subrutineanrop eller avbrudd. Stakkpekeren økes med en når data poppes fra stakken med POP-instruksjonen, og den økes med to når data poppes fra stakken med retur fra underrutine RET eller retur fra avbrudd RETI.

AVR Stack Pointer er implementert som to 8-biters registre i I / O-rommet. Antall bits som faktisk brukes er avhengig av implementering. Merk at datarommet i noen implementeringer av AVR-arkitekturen er så lite at bare SPL er nødvendig. I dette tilfellet vil ikke SPH-registeret 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
Les/skriv R/W R/W R/W R/W R/W R/W R/W R/W
Les/skriv R/W R/W R/W R/W R/W R/W R/W R/W
Startverdi RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND
Startverdi RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND

Instruksjon for gjennomføring av instruksjon

Denne delen beskriver de generelle tilgangstidskonseptene for instruksjonsutførelse. AVR CPU er drevet av CPU-klokken clkCPU, direkte generert fra den valgte klokkekilden for brikken. Ingen intern klokkeinndeling brukes.

Fig. 4.4

Figur 4-4 viser parallelle instruksjonshentinger og instruksjonskjøringer aktivert av Harvard-arkitekturen og hurtigtilgangsregisteret File konsept. Dette er det grunnleggende pipelining-konseptet for å oppnå opptil 1 MIPS per MHz med tilsvarende unike resultater for funksjoner per kostnad, funksjoner per klokker og funksjoner per kraftenhet.

Figur 4-5. Enkeltsyklus ALU-drift

Fig. 4.5

Tilbakestill og avbryt håndtering

AVR har flere forskjellige avbruddskilder. Disse avbruddene og den separate tilbakestillingsvektoren har hver sin egen programvektor i programminnet. Alle avbrudd tildeles individuelle aktiveringsbiter som må skrives logisk en sammen med Global Interrupt Enable-biten i statusregistret for å aktivere avbruddet.

De laveste adressene i programminnet er som standard definert som Reset and Interrupt Vectors. Den komplette listen over vektorer er vist i “Avbryter” på side 48. Listen bestemmer også prioritetsnivåene til de forskjellige avbruddene. Jo lavere adresse, jo høyere er prioritetsnivået. RESET har høyest prioritet, og neste er INT0 - forespørsel om ekstern avbrudd 0.

Når det oppstår et avbrudd, slettes Global Interrupt Enable I-bit og alle avbrudd deaktiveres. Brukerprogramvaren kan skrive logikk en til I-bit for å aktivere nestede avbrudd. Alle aktiverte avbrudd kan da avbryte den gjeldende avbruddsrutinen. I-bit settes automatisk når en Return from Interrupt-instruksjon - RETI - kjøres.

Det er i utgangspunktet to typer avbrudd. Den første typen utløses av en hendelse som setter Interrupt Flag. For disse avbruddene blir programtelleren vektorert til den faktiske avbruddsvektoren for å utføre avbruddshåndteringsrutinen, og maskinvaren tømmer det tilsvarende avbruddsflagget. Interrupt Flags kan også tømmes ved å skrive en logisk til flaggbitposisjon (er) som skal tømmes. Hvis det oppstår en avbruddstilstand mens den tilsvarende avbrytelsesaktiveringsbiten er fjernet, vil avbruddsflagget bli satt og husket til avbruddet er aktivert, eller flagget tømmes av programvaren. Tilsvarende, hvis en eller flere avbruddsbetingelser oppstår mens den globale avbrytingsaktivering-biten er fjernet, vil det korresponderende avbrytningsflagget (-ene) bli satt og husket til den globale avbrytelsesaktiveringsbit er satt, og vil deretter bli utført etter prioritetsrekkefølge.

Den andre typen avbrudd vil utløse så lenge avbruddstilstanden er tilstede. Disse avbruddene har ikke nødvendigvis Interrupt Flags. Hvis avbruddstilstanden forsvinner før avbruddet er aktivert, vil ikke avbruddet utløses.

Når AVR-en går ut av et avbrudd, vil den alltid gå tilbake til hovedprogrammet og utføre en instruksjon til før noen ventende avbrudd blir servert.

Merk at statusregisteret ikke lagres automatisk når du går inn i en avbruddsrutine, eller gjenopprettes når du kommer tilbake fra en avbruddsrutine. Dette må håndteres av programvare.

Når du bruker CLI-instruksjonen for å deaktivere avbrudd, vil avbruddene bli deaktivert umiddelbart. Ingen avbrudd vil bli utført etter CLI-instruksjonen, selv om den skjer samtidig med CLI-instruksjonen. Følgende eksample viser hvordan dette kan brukes for å unngå avbrudd under den tidsstyrte EEPROM-skrivesekvensen.

Monteringskode Eksample
i r16, SREG; lagre SREG-verdi

cli ; deaktiver avbrudd under tidsbestemt sekvens

sbi EECR, EEMPE ; start EEPROM-skriving

sbi EECR, EEPE

ut SREG, r16; gjenopprett SREG-verdi (I-bit)

C-kode Eksample
char cSREG;

cSREG = SREG; /* lagre SREG-verdi */

/* deaktiver avbrudd under tidsbestemt sekvens */

_CLI ();

EECR |= (1<

EECR | = (1 <

SREG = cSREG; /* gjenopprett SREG-verdi (I-bit) */

Når du bruker SEI-instruksjonen for å aktivere avbrudd, vil instruksjonen etter SEI bli utført før eventuelle ventende avbrudd, som vist i denne eks.ample.

Monteringskode Eksample
sei ; sett Global Interrupt Enable

søvn; gå inn i søvn, venter på avbrudd

; merknad: vil gå i dvale før ventende

; avbryt (e)

C-kode Eksample
_SEI(); /* sett Global Interrupt Enable */

_SØVN(); /* gå i dvale, venter på avbrudd */

/ * merknad: vil gå i dvale før avventende avbrudd (er) * /

Avbryt responstid

Avbruddsutførelsessvaret for alle aktiverte AVR-avbrudd er minst fire klokkesykluser. Etter fire klokkesykluser utføres programvektoradressen for den faktiske avbruddshåndteringsrutinen. I løpet av denne firesyklusperioden skyves programtelleren på bunken. Vektoren er normalt et hopp til avbruddsrutinen, og dette hoppet tar tre tidssykluser. Hvis det oppstår et avbrudd under utførelsen av en flersyklusinstruksjon, fullføres denne instruksjonen før avbruddet serveres. Hvis det oppstår et avbrudd når MCU er i hvilemodus, økes responstiden for avbruddsutførelse med fire klokkesykluser. Denne økningen kommer i tillegg til oppstartstiden fra den valgte hvilemodus.

En retur fra en avbruddshåndteringsrutine tar fire tidssykluser. I løpet av disse fire klokkesyklusene poppes programtelleren (to byte) tilbake fra stakken, stakkpekeren økes med to, og I-biten i SREG er satt.

AVR-minner

Denne delen beskriver de forskjellige minnene i ATtiny25 / 45/85. AVR-arkitekturen har to hovedminneplasser, dataminnet og programminneplassen. I tillegg har ATtiny25 / 45/85 et EEPROM-minne for datalagring. Alle tre minneplasser er lineære og vanlige.

Omprogrammerbart flashprogramminne i systemet

ATtiny25 / 45/85 inneholder 2/4 / 8K byte Omprogrammerbar Flash-minne på brikken for programlagring. Siden alle AVR-instruksjonene er 16 eller 32 bits brede, er blitsen organisert som 1024/2048/4096 x 16.

Flash-minnet har en utholdenhet på minst 10,000 skrive / slette sykluser. ATtiny25 / 45/85 programteller (PC) er 10/11/12 bits bred, og adresserer dermed 1024/2048/4096 programminneplasser. “Minneprogram- ming ”på side 147 inneholder en detaljert beskrivelse av nedlasting av Flash-data ved hjelp av SPI-pinnene.

Konstanttabeller kan tildeles i hele adresseminnet for programminnet (se beskrivelsen til LPM - Last programminneinstruksjon).

Figur 5-1. Program minnekart Minnekart

SRAM Dataminne

Figur 5-2 viser hvordan ATtiny25 / 45/85 SRAM Memory er organisert.

De nedre 224/352/607 dataminnestedene adresserer både registeret File, I/O -minnet og de interne dataene SRAM. De første 32 stedene adresserer registeret File, de neste 64 stedene standard I/O -minne, og de siste 128/256/512 stedene adresserer de interne dataene SRAM.

De fem forskjellige adresseringsmodusene for dataminnet dekker: Direkte, Indirekte med forskyvning, Indirekte, Indirekte med Pre-dekrement og Indirekte med Post-inkrement. I registeret File, registre R26 til R31 har de indirekte adresseringspekerregistrene.

Den direkte adresseringen når hele datarommet.

Indirekte med forskyvningsmodus når 63 adresseplasser fra basisadressen gitt av Y- eller Z-registeret.

Når du bruker registerindirekte adresseringsmodi med automatisk forhåndsdekrementering og etterøkning, blir adresseregistrene X, Y og Z dekrementert eller inkrementert.

De 32 arbeidsregistrene for generelle formål, 64 I/O -registre og 128/256/512 byte med interne data SRAM i ATtiny25/45/85 er alle tilgjengelige via alle disse adressemodusene. Registeret File er beskrevet i «Gen- eral Formålsregister File”På side 10.

Figur 5-2. Dataminnekart Minnekart 2

Dataminnetilgang Tider

Denne delen beskriver de generelle tilgangstidskonseptene for internminnetilgang. Den interne data SRAM-tilgangen utføres i to clkCPU-sykluser som beskrevet i Figur 5-3.

Figur 5-3. On-chip Data SRAM Access Cycles På brikkedata EEPROM Dataminne

ATtiny25 / 45/85 inneholder 128/256/512 byte data EEPROM-minne. Det er organisert som et eget datarom, der enkeltbyte kan leses og skrives. EEPROM har en utholdenhet på minst 100,000 skrive / slette sykluser. Tilgangen mellom EEPROM og CPU er beskrevet i det følgende, og spesifiserer EEPROM-adresseregistrene, EEPROM-dataregisteret og EEPROM-kontrollregisteret. For detaljer se “Seriell nedlasting” på side 151.

EEPROM lese- / skrivetilgang

EEPROM-tilgangsregistrene er tilgjengelige i I / O-rommet.

Skrivetilgangstidene for EEPROM er gitt i Tabell 5-1 på side 21. En selvtidsstillingsfunksjon lar imidlertid brukerprogramvaren oppdage når neste byte kan skrives. Hvis brukerkoden inneholder instruksjoner som skriver EEPROM, må noen forholdsregler tas. I sterkt filtrerte strømforsyninger vil VCC sannsynligvis stige eller falle sakte på

Strøm opp/ned. Dette får enheten til å kjøre på volum i en periodetage lavere enn spesifisert som minimum for klokkefrekvensen som brukes. Se “Forhindre EEPROM-korrupsjon” på side 19 for detaljer om hvordan du kan unngå problemer i disse situasjonene.

For å forhindre utilsiktet EEPROM-skriving, må en spesifikk skriveprosedyre følges. Referere til "Atomisk Byte-programmering ”på side 17 og “Split Byte Programming” på side 17 for detaljer om dette.

Når EEPROM leses, blir CPU stanset i fire klokkesykluser før neste instruksjon utføres. Når EEPROM skrives, blir CPU stanset i to klokkesykluser før neste instruksjon utføres.

Atomic byte programmering

Å bruke Atomic Byte Programming er den enkleste modusen. Når du skriver en byte til EEPROM, må brukeren skrive adressen i EEAR-registeret og data i EEDR-registeret. Hvis EEPMn-bitene er null, vil skriving av EEPE (innen fire sykluser etter at EEMPE er skrevet) utløse slette / skrive-operasjonen. Både slette- og skrivesyklusen utføres i en operasjon, og den totale programmeringstiden er gitt i Tabell 5-1 på side 21. EEPE-biten forblir satt til slette- og skriveoperasjonene er fullført. Mens enheten er opptatt med programmering, er det ikke mulig å utføre andre EEPROM-operasjoner.

Split Byte-programmering

Det er mulig å dele slette- og skrivesyklusen i to forskjellige operasjoner. Dette kan være nyttig hvis systemet krever kort tilgangstid i en begrenset tidsperiode (vanligvis hvis strømforsyningen voltage faller). For å ta fordel tage av denne metoden er det påkrevd at stedene som skal skrives har blitt slettet før skriveoperasjonen. Men siden slette- og skriveoperasjonene er delt, er det mulig å gjøre sletteoperasjonene når systemet tillater tidskritiske operasjoner (vanligvis etter oppstart).

Viske

For å slette en byte, må adressen skrives til EEAR. Hvis EEPMn-bitene er 0b01, vil skriving av EEPE (innen fire sykluser etter at EEMPE er skrevet) bare utløse sletteoperasjonen (programmeringstid er gitt i Tabell 5-1 om side 21). EEPE-biten forblir satt til sletteoperasjonen er fullført. Mens enheten er opptatt med programmering, er det ikke mulig å utføre andre EEPROM-operasjoner.

Skrive

For å skrive et sted, må brukeren skrive adressen til EEAR og dataene i EEDR. Hvis EEPMn-bitene er 0b10, vil skriving av EEPE (innen fire sykluser etter at EEMPE er skrevet) bare utløse skriveoperasjonen (programmeringstiden er gitt i Tabell 5-1 på side 21). EEPE-biten forblir satt til skrivingen er fullført. Hvis stedet som skal skrives ikke er slettet før skriving, må dataene som er lagret, anses som tapt. Mens enheten er opptatt med programmering, er det ikke mulig å utføre andre EEPROM-operasjoner.

Den kalibrerte oscillatoren brukes til å tidsette EEPROM-tilgangene. Forsikre deg om at oscillatorfrekvensen er innenfor kravene beskrevet i “OSCCAL - Oscillator Calibration Register” på side 31.

Følgende kode eksamples viser én sammenstilling og én C-funksjon for sletting, skriving eller atomskriving av EEPROM. EksenampLeser antar at avbrudd kontrolleres (f.eks. ved å deaktivere avbrudd globalt) slik at ingen avbrudd vil forekomme under utførelse av disse funksjonene.

Monteringskode Eksample
EEPROM_skriv:

; Vent til ferdigstillelse av forrige skriving

sbic EECR,EEPE

rjmp EEPROM_write

; Still inn programmeringsmodus

ldi        r16, (0<<EEPM1)|(0<<EEPM0)

ut EECR, r16

; Sett opp adresse (r18: r17) i adresseregisteret

ut EEARH, r18

ut EEARL, r17

; Skriv data (r19) til dataregisteret

ut EEDR, r19

; Skriv logisk til EEMPE

sbi EECR,EEMPE

; Start eeprom skriving ved å stille inn EEPE

sbi EECR,EEPE

ret

C-kode Eksample
void EEPROM_write(usignert char ucAddress, usignert char ucData)

{

/* Vent til forrige skriving er fullført */ while(EECR & (1<

;

/* Still inn programmeringsmodus */

EECR = (0 <

/ * Sett opp adresse- og dataregister * / EEAR = ucAddress;

EEDR = ucData;

/* Skriv logisk en til EEMPE */

EECR | = (1 <

/ * Start eeprom skriving ved å stille inn EEPE * /

EECR | = (1 <

}

Den neste koden eksamples viser montering og C -funksjoner for å lese EEPROM. EksenampLeser antar at avbrudd er kontrollert slik at ingen avbrudd vil oppstå under utførelse av disse funksjonene.

Monteringskode Eksample
EEPROM_read:

; Vent til ferdigstillelse av forrige skriving

sbic EECR,EEPE

rjmp EEPROM_read

; Sett opp adresse (r18: r17) i adresseregisteret

ut EEARH, r18

ut EEARL, r17

; Start eeprom lest ved å skrive EERE

sbi EECR,EERE

; Les data fra dataregisteret

i r16,EEDR

ret

C-kode Eksample
usignert tegn EEPROM_read (usignert tegn ucAddress)

{

/ * Vent til ferdigstillelse av forrige skriv * /

mens (EECR & (1 <

;

/ * Sett opp adresseregister * / EEAR = ucAddress;

/* Start eeprom read ved å skrive EERE */

EECR | = (1 <

/ * Returner data fra dataregisteret * /

returner EEDR;

}

Forebygging av EEPROM-korrupsjon

I perioder med lav VCC kan EEPROM-data bli ødelagt fordi forsyningsvoltage er for lav til at CPU og EEPROM kan fungere skikkelig. Disse problemene er de samme som for styrenivåsystemer som bruker EEPROM, og de samme designløsningene bør brukes.

En EEPROM-datakorrupsjon kan være forårsaket av to situasjoner når voltage er for lavt. For det første krever en vanlig skrivesekvens til EEPROM et minimum voltage for å fungere korrekt. For det andre kan selve CPUen utføre instruksjoner feil, hvis forsyningsvolumettage er for lavt.

EEPROM-datakorrupsjon kan enkelt unngås ved å følge denne designanbefalingen:

Hold AVR RESET aktiv (lav) i perioder med utilstrekkelig strømforsyning voltage. Dette kan gjøres ved å aktivere den interne Brown-out-detektoren (BOD). Hvis deteksjonsnivået til den interne BOD ikke samsvarer med

nødvendig deteksjonsnivå, kan en ekstern lav VCC tilbakestillingsbeskyttelseskrets brukes. Hvis en tilbakestilling skjer mens en skriveoperasjon pågår, vil skriveoperasjonen bli fullført forutsatt at strømforsyningen voltage er tilstrekkelig.

I / O-minne

I / O-romdefinisjonen til ATtiny25 / 45/85 er vist i “Registrer sammendrag” på side 200.

Alt ATtiny25 / 45/85 I / O og periferiutstyr er plassert i I / O-rommet. Alle I / O-stedene er tilgjengelige via LD / LDS / LDD- og ST / STS / STD-instruksjonene, og overfører data mellom de 32 arbeidsregistrene for generelle formål og I / O-rommet. I / O-registre innen adresseområdet 0x00 - 0x1F er direkte tilgjengelige via SBI og CBI-instruksjonene. I disse registrene kan verdien av enkeltbiter kontrolleres ved å bruke instruksjonene SBIS og SBIC. Se instruksjonsdelen for mer informasjon. Når du bruker de I / O-spesifikke kommandoene IN og OUT, må I / O-adressene 0x00 - 0x3F brukes. Når du adresserer I / O-registre som datarom ved bruk av LD- og ST-instruksjoner, må 0x20 legges til disse adressene.

For kompatibilitet med fremtidige enheter, skal reserverte biter skrives til null hvis de er tilgjengelige. Reserverte I / O-minneadresser skal aldri skrives.

Noen av statusflaggene fjernes ved å skrive en logisk til dem. Merk at CBI- og SBI-instruksjonene bare fungerer på den spesifiserte biten, og kan derfor brukes i registre som inneholder slike statusflagg. CBI- og SBI-instruksjonene fungerer bare med register 0x00 til 0x1F.

I / O- og periferiutstyrskontrollregistrene er forklart i senere avsnitt.

Registerbeskrivelse

EEARH - EEPROM-adresseregister

Bit 7 6 5 4 3 2 1 0
0x1F ØRE8 ØRE
Les/skriv R R R R R R R R/W
Startverdi 0 0 0 0 0 0 0 X/0

Bits 7: 1 - Res: Reservert Bits

Disse bitene er reservert for fremtidig bruk og vil alltid leses som null.

Bits 0 - EEAR8: EEPROM-adresse

Dette er den viktigste EEPROM-adressebiten til ATtiny85. I enheter med mindre EEPROM, dvs. ATtiny25 / ATtiny45, er denne biten reservert og vil alltid lese null. Den opprinnelige verdien av EEPROM-adresseregistratoren (EEAR) er udefinert, og en riktig verdi må derfor skrives før EEPROM er tilgjengelig.

EEARL - EEPROM-adresseregister

Bit

0x1E ØRE7 ØRE6 ØRE5 ØRE4 ØRE3 ØRE2 ØRE1 ØRE0 ØRE
Bak / skriv R/W R/W R/W R/W R/W R/W R/W R/W
Startverdi X X X X X X X X

Bit 7 - EEAR7: EEPROM-adresse

Dette er den viktigste EEPROM-adressebiten til ATtiny45. I enheter med mindre EEPROM, dvs. ATtiny25, er denne biten reservert og vil alltid lese null. Den opprinnelige verdien av EEPROM-adresseregisteret (EEAR) er udefinert, og en riktig verdi må derfor skrives før EEPROM er tilgjengelig.

Bits 6: 0 - EEAR [6: 0]: EEPROM-adresse

Dette er (lave) biter i EEPROM-adresseregisteret. EEPROM-databyte adresseres lineært i området 0… (128/256 / 512-1). Den opprinnelige verdien av EEAR er udefinert, og en riktig verdi må derfor skrives før EEPROM kan nås.

EEDR - EEPROM Data Register

Bit 7 6 5 4 3 2 1 0
0x1D EEDR7 EEDR6 EEDR5 EEDR4 EEDR3 EEDR2 EEDR1 EEDR0 EEDR
Les/skriv R/W R/W R/W R/W R/W R/W R/W R/W
Startverdi 0 0 0 0 0 0 0 0

For EEPROM-skriveoperasjonen inneholder EEDR-registeret dataene som skal skrives til EEPROM i adressen gitt av EEAR-registeret. For EEPROM-leseoperasjonen inneholder EEDR dataene som er lest ut fra

EEPROM på adressen gitt av EEAR.

 

5.5.4 EECR - EEPROM kontrollregister

Bit 7 6 5 4 3 2 1 0
0x1C        – EEPM1 EEPM0 Uhyggelig EEMPE EEPE EERE EECR
Les / skriv R R R / W R/W R/W R/W R/W R/W
Startverdi 0 0 X X 0 0 X 0

Bit 7 - Res: Reservert bit

Denne biten er reservert for fremtidig bruk og vil alltid lese som 0 i ATtiny25 / 45/85. For kompatibilitet med fremtidige AVR-enheter, skriv alltid denne biten til null. Etter å ha lest, masker ut denne biten.

Bit 6 - Res: Reservert bit

Denne biten er reservert i ATtiny25 / 45/85 og vil alltid lese som null.

Bits 5: 4 - EEPM [1: 0]: EEPROM programmeringsmodusbiter

EEPROM programmeringsmodus bitsinnstilling definerer hvilken programmeringshandling som skal utløses når du skriver EEPE. Det er mulig å programmere data i en atomoperasjon (slette den gamle verdien og programmere den nye verdien) eller å dele Slett og skriv-operasjonene i to forskjellige operasjoner. Programmeringstidene for de forskjellige modusene vises i Tabell 5-1. Mens EEPE er satt, vil enhver skriving til EEPMn bli ignorert. Under tilbakestilling tilbakestilles EEPMn-bitene til 0b00 med mindre EEPROM er opptatt med programmering.

Tabell 5-1. EEPROM-modusbiter

EEPM1 EEPM0 Programmeringstid Operasjon
0 0 3.4 ms Slett og skriv i en operasjon (Atomic Operation)
0 1 1.8 ms Bare slett
1 0 1.8 ms Skriv bare
1 1 Reservert for fremtidig bruk

Bit 3 - EERIE: EEPROM Ready Interrupt Enable

Å skrive EERIE til en aktiverer EEPROM Ready Interrupt hvis I-biten i SREG er satt. Å skrive EERIE til null deaktiverer avbruddet. EEPROM Ready Interrupt genererer et konstant avbrudd når ikke-flyktig minne er klar for programmering.

Bit 2 - EEMPE: EEPROM Master Program Enable

EEMPE-bit avgjør om skriving av EEPE til en vil ha effekt eller ikke.

Når EEMPE er innstilt, vil innstilling av EEPE innen fire klokkesykluser programmere EEPROM på den valgte adressen. Hvis EEMPE er null, vil innstilling av EEPE ikke ha noen effekt. Når EEMPE har blitt skrevet til en av programvare, tømmer maskinvaren biten til null etter fire klokkesykluser.

Bit 1 - EEPE: EEPROM Program Enable

EEPROM Program Enable Signal EEPE er det programmeringsaktiverende signalet til EEPROM. Når EEPE er skrevet, vil EEPROM programmeres i henhold til EEPMn bits-innstillingen. EEMPE-biten må skrives til en før en logisk skrives til EEPE, ellers finner ingen EEPROM-skriving sted. Når skrivetilgangstiden har gått, tømmes EEPE-biten av maskinvare. Når EEPE er satt, blir CPU stanset i to sykluser før neste instruksjon utføres.

Bit 0 - EERE: EEPROM Les aktivert

EEPROM Read Enable Signal - EERE - er lese-stroben til EEPROM. Når riktig adresse er satt opp i EEAR-registeret, må EERE-biten skrives til en for å utløse EEPROM-lesingen. EEPROM-lesetilgang tar en instruksjon, og de forespurte dataene er tilgjengelige umiddelbart. Når EEPROM leses, blir CPU stanset i fire sykluser før neste instruksjon utføres. Brukeren bør avstemme EEPE-biten før du begynner leseoperasjonen. Hvis en skriveoperasjon pågår, er det verken mulig å lese EEPROM eller å endre EEAR-registeret.

System Clock og Clock Options

Clock Systems og deres distribusjon

Klokkefordeling

CPU-klokke

CPU -klokken dirigeres til deler av systemet som er opptatt av drift av AVR -kjernen. Eksamples av slike moduler er General Purpose Register File, statusregisteret og dataminnet som holder stabelpekeren. Å stoppe CPU-klokken hindrer kjernen i å utføre generelle operasjoner og beregninger.

I / U-klokke - clkI / O

I / U-klokken brukes av flertallet av I / O-modulene, som Timer / Counter. I / U-klokken brukes også av modulen External Interrupt, men vær oppmerksom på at noen eksterne interrupt blir oppdaget av asynkron logikk, slik at slike interrupts kan oppdages selv om I / O Clock er stoppet.

Flash Clock - clkFLASH

Flash-klokken styrer driften av Flash-grensesnittet. Flash-klokken er vanligvis aktiv samtidig med CPU-klokken.

ADC Clock - clkADC

ADC er utstyrt med et dedikert klokkedomen. Dette gjør det mulig å stoppe CPU- og I / O-klokker for å redusere støy generert av digitale kretser. Dette gir mer nøyaktige ADC-konverteringsresultater.

Intern PLL for rask perifer klokkegenerering - clkPCK

Den interne PLL i ATtiny25 / 45/85 genererer en klokkefrekvens som multipliseres 8 ganger fra en kildeinngang. Som standard bruker PLL utgangen fra den interne 8.0 MHz RC-oscillatoren som kilde. Alternativt, hvis bit LSM av PLLCSR er satt, vil PLL bruke utgangen fra RC-oscillatoren delt på to. Dermed er utgangen fra PLL, den raske perifere klokken 64 MHz. Den raske perifere klokken, eller en klokke som er forhåndsberegnet fra det, kan velges som klokkilde for Timer / Counter1 eller som en systemklokke. Se Figur 6-2. Frekvensen til den raske perifere klokken deles med to når LSM til PLLCSR er satt, noe som resulterer i en klokkefrekvens på 32 MHz. Merk at LSM ikke kan stilles inn hvis PLLCLK brukes som systemklokke.

Figur 6-2. PCK klokkesystem. PCK klokker

PLL er låst på RC-oscillatoren, og justering av RC-oscillator via OSCCAL-registeret vil justere den raske perifere klokken samtidig. Imidlertid, selv om RC-oscillatoren blir ført til en høyere frekvens enn 8 MHz, mettes den hurtige perifere klokkefrekvensen ved 85 MHz (i verste fall) og forblir oscillerende ved maksimal frekvens. Det skal bemerkes at PLL i dette tilfellet ikke lenger er låst med RC-oscillatorklokken. Derfor anbefales det å ikke ta OSCCAL-justeringene til en høyere frekvens enn 8 MHz for å holde PLL i riktig driftsområde.

Den interne PLL er aktivert når:

PLLE-biten i registeret PLLCSR er satt.

CKSEL-sikringen er programmert til '0001'.

CKSEL-sikringen er programmert til '0011'.

PLLCSR bit PLOCK settes når PLL er låst. Både intern RC-oscillator og PLL er slått av i hvilemodus og hvilemodus.

Intern PLL i ATtiny15-kompatibilitetsmodus

Siden ATtiny25 / 45/85 er en migreringsenhet for ATtiny15-brukere, er det en ATtiny15-kompatibilitetsmodus for bakre kompatibilitet. ATtiny15-kompatibilitetsmodus velges ved å programmere CKSEL-sikringene til '0011'.

I ATtiny15-kompatibilitetsmodus er frekvensen til den interne RC-oscillatoren kalibrert ned til 6.4 MHz, og multiplikasjonsfaktoren til PLL er satt til 4x. Se Figur 6-3. Med disse justeringene er klokkesystemet ATtiny15-kompatibelt, og den resulterende raske perifere klokken har en frekvens på 25.6 MHz (samme som i ATtiny15).

Figur 6-3. PCK-klokkesystem i ATtiny15-kompatibilitetsmodus. Klokkesystem

Klokkilder

Enheten har følgende klokkildealternativer, som kan velges av Flash Fuse-bits som vist nedenfor. Klokken fra den valgte kilden er inngang til AVR-klokkegeneratoren, og rutet til de aktuelle modulene.

Tabell 6-1. Alternativer for enhetsklokke Velg

Enhetens klokkealternativ CKSEL[3:0](1)
Ekstern klokke (se side 26) 0000
Høyfrekvent PLL-klokke (se side 26) 0001
Kalibrert intern oscillator (se side 27) 0010(2)
Kalibrert intern oscillator (se side 27) 0011(3)
Intern 128 kHz oscillator (se side 28) 0100
Lavfrekvent krystalloscillator (se side 29) 0110
Krystalloscillator / keramisk resonator (se side 29) 1000 – 1111
Reservert 0101, 0111

For alle sikringer betyr "1" ikke-programmert mens "0" betyr programmert.

Enheten sendes med dette alternativet valgt.

Dette vil velge ATtiny15 Compatibility Mode, der systemklokken er delt på fire, noe som resulterer i en 1.6 MHz klokkefrekvens. For mer inormasjon, se “Kalibrert intern oscillator” på side 27.

De forskjellige valgene for hvert klokkealternativ er gitt i de følgende avsnittene. Når CPUen våkner fra nedstengning, brukes den valgte klokkilden til å starte oppstart, noe som sikrer stabil oscillatordrift før instruksjonskjøringen starter. Når CPU-en starter fra tilbakestilling, er det en ekstra forsinkelse som gjør at strømmen kan nå et stabilt nivå før normal drift. Watchdog Oscillator brukes til å timing denne sanntidsdelen av oppstartstiden. Antall WDT-oscillatorsykluser som brukes for hver tidsavbrudd er vist i Tabell 6-2.

Tabell 6-2. Antall Watchdog Oscillator-sykluser

Typ Time-out Antall sykluser
4 ms 512
64 ms 8K (8,192 XNUMX)

Ekstern klokke

For å drive enheten fra en ekstern klokkilde, bør CLKI kjøres som vist i Figur 6-4. For å kjøre enheten på en ekstern klokke, må CKSEL-sikringene være programmert til “00”.

Figur 6-4. Konfigurasjon av ekstern klokkestasjon

Fig. 6.4

Når denne klokkilden er valgt, blir oppstartstidene bestemt av SUT-sikringene som vist i Tabell 6-3.

Tabell 6-3. Oppstartstider for valg av ekstern klokke

SUT[1:0] Oppstartstid fra nedstengning Ekstra forsinkelse fra tilbakestilling Anbefalt bruk
00 6 CK 14CK BOD aktivert
01 6 CK 14 CK + 4 ms Rask stigende kraft
10 6 CK 14 CK + 64 ms Sakte stigende kraft
11 Reservert

Når du bruker en ekstern klokke, er det nødvendig å unngå plutselige endringer i den anvendte klokkefrekvensen for å sikre stabil drift av MCU. En variasjon i frekvens på mer enn 2% fra en klokkesyklus til den neste kan føre til uforutsigbar oppførsel. Det kreves at MCU holdes i Reset under slike endringer i klokkefrekvensen.

Vær oppmerksom på at systemklokkeforhandlingen kan brukes til å implementere endringer i kjøretiden til den interne klokkefrekvensen, samtidig som den fortsatt garanterer stabil drift. Referere til “System Clock Prescaler” på side 31 for detaljer.

Høyfrekvent PLL-klokke

Det er en intern PLL som nominelt gir 64 MHz klokkefrekvens låst til RC-oscillatoren for bruk av den perifere timeren / telleren 1 og for systemklokkilden. Når den er valgt som en systemklokkilde, ved å programmere CKSEL-sikringene til '0001', blir den delt med fire som vist i Tabell 6-4.

Tabell 6-4. Høyfrekvente PLL-klokkedriftsmodi

CKSEL[3:0] Nominell frekvens
0001 16 MHz

Når denne klokkilden er valgt, blir oppstartstidene bestemt av SUT-sikringene som vist i Tabell 6-5.

Tabell 6-5. Oppstartstider for høyfrekvent PLL-klokke

SUT[1:0] Oppstartstid fra nedstengning Ytterligere forsinkelse fra tilbakestilling av oppstart (VCC = 5.0 V) Anbefalt bruk
00 14 CK + 1 K (1024) CK + 4 ms 4 ms BOD aktivert

Tabell 6-5. Oppstartstider for høyfrekvent PLL-klokke

SUT[1:0] Oppstartstid fra nedstengning Ytterligere forsinkelse fra tilbakestilling av oppstart (VCC = 5.0 V) Anbefalt bruk
01 14 CK + 16 K (16384) CK + 4 ms 4 ms Rask stigende kraft
10 14 CK + 1 K (1024) CK + 64 ms 4 ms Sakte stigende kraft
11 14 CK + 16 K (16384) CK + 64 ms 4 ms Sakte stigende kraft

Kalibrert intern oscillator

Som standard gir den interne RC-oscillatoren en klokke på omtrent 8.0 MHz. Skjønt voltage og temperaturavhengig, kan denne klokken kalibreres svært nøyaktig av brukeren. Se “Kalibrert intern RC-oscillatorakku racy ”på side 164 og “Intern oscillatorhastighet” på side 192 for flere detaljer. Enheten leveres med CKDIV8 sikring programmert. Se “System Clock Prescaler” på side 31 for flere detaljer.

Denne klokken kan velges som systemklokke ved å programmere CKSEL-sikringene som vist i Tabell 6-6 på side

27. Hvis valgt, vil den fungere uten eksterne komponenter. Under tilbakestilling laster maskinvaren den forhåndsprogrammerte kalibreringsverdien i OSCCAL-registeret og kalibrerer dermed automatisk RC-oscillatoren. Nøyaktigheten til denne kalibreringen vises som Fabrikkalibrering i Tabell 21-2 på side 164.

Ved å endre OSCCAL-registeret fra SW, se “OSCCAL - Oscillator Calibration Register” på side 31, er det mulig å få en høyere kalibreringsnøyaktighet enn ved å bruke fabrikkalibreringen. Nøyaktigheten av denne kalibreringen vises som brukerkalibrering i Tabell 21-2 på side 164.

Når denne oscillatoren brukes som chipklokke, vil Watchdog Oscillator fortsatt brukes til Watchdog Timer og for Reset Time-out. For mer informasjon om den forhåndsprogrammerte kalibreringsverdien, se avsnittet "Cali- bration Bytes ”på side 150.

Den interne oscillatoren kan også settes til å gi en 6.4 MHz klokke ved å skrive CKSEL-sikringer til "0011", som vist i Tabell 6-6 under. Denne innstillingen er referert til som ATtiny15-kompatibilitetsmodus og er ment å gi en kalibrert klokkilde ved 6.4 MHz, som i ATtiny15. I ATtiny15-kompatibilitetsmodus bruker PLL den interne oscillatoren som kjører på 6.4 MHz for å generere et 25.6 MHz perifert klokkesignal for Timer / Counter1 (se “8-biters timer / teller 1 inn ATtiny15 Mode ”på side 95). Vær oppmerksom på at 6.4 MHz klokkesignal i denne modusen alltid er delt på fire, og gir en 1.6 MHz systemklokke.

Tabell 6-6. Interne kalibrerte RC-oscillatordriftsmodi

CKSEL[3:0] Nominell frekvens
0010(1) 8.0 MHz
0011(2) 6.4 MHz

Enheten sendes med dette alternativet valgt.

Denne innstillingen vil velge ATtiny15 Compatibility Mode, der systemklokken er delt på fire, noe som resulterer i en 1.6 MHz klokkefrekvens.

Når den kalibrerte interne oscillatoren på 8 MHz er valgt som klokkilde, bestemmes oppstartstidene av SUT-sikringene som vist i Tabell 6-7 under.

Tabell 6-7. Oppstartstider for intern kalibrert RC-oscillatorklokke

SUT[1:0] Oppstartstid fra nedstengning Ekstra forsinkelse fra tilbakestilling (VCC = 5.0V) Anbefalt bruk
00 6 CK 14CK(1) BOD aktivert
01 6 CK 14 CK + 4 ms Rask stigende kraft
10(2) 6 CK 14 CK + 64 ms Sakte stigende kraft
11 Reservert

1. Hvis RSTDISBL-sikringen er programmert, økes denne oppstartstiden til 14CK + 4 ms for å sikre at programmeringsmodus kan legges inn.
2. Enheten sendes med dette alternativet valgt.

I ATtiny15 kompatibilitetsmodus blir oppstartstider bestemt av SUT-sikringer som vist i Tabell 6-8 under.

Tabell 6-8. Oppstartstider for intern kalibrert RC-oscillatorklokke (i ATtiny15-modus)

SUT[1:0] Oppstartstid fra nedstengning Ekstra forsinkelse fra tilbakestilling (VCC = 5.0V) Anbefalt bruk
00 6 CK 14 CK + 64 ms
01 6 CK 14 CK + 64 ms
10 6 CK 14 CK + 4 ms
11 1 CK 14CK(1)

Merk: Hvis RSTDISBL-sikringen er programmert, vil denne oppstartstiden økes til 14CK + 4 ms for å sikre at programmeringsmodus kan aktiveres.

Oppsummert kan du finne mer informasjon om ATtiny15 kompatibilitetsmodus i seksjoner “Port B (PB5: PB0)” på side 2“Intern PLL i ATtiny15-kompatibilitetsmodus” på side 24“8-biters timer / teller1 i ATtiny15-modus” på side 95“Begrensninger for debugWIRE” på side 140“Kalibreringsbytes” på side 150 og i tabellen “Klokkeforskriver Velg ”på side 33.

Intern 128 kHz oscillator

Den 128 kHz interne oscillatoren er en laveffektoscillator som gir en klokke på 128 kHz. Frekvensen er nominell ved 3V og 25°C. Denne klokken kan velges som systemklokke ved å programmere CKSEL-sikringene til "0100".

Når denne klokkilden er valgt, blir oppstartstidene bestemt av SUT-sikringene som vist i Tabell 6-9.

Tabell 6-9. Oppstartstider for 128 kHz intern oscillator

SUT[1:0] Oppstartstid fra nedstengning Ekstra forsinkelse fra tilbakestilling Anbefalt bruk
00 6 CK 14CK(1) BOD aktivert
01 6 CK 14 CK + 4 ms Rask stigende kraft
10 6 CK 14 CK + 64 ms Sakte stigende kraft
11 Reservert

Merk: Hvis RSTDISBL-sikringen er programmert, vil denne oppstartstiden økes til 14CK + 4 ms for å sikre at programmeringsmodus kan aktiveres.

Lavfrekvent krystalloscillator

For å bruke en 32.768 kHz klokkekrystall som klokkilde for enheten, må lavfrekvente krystalloscillatorer velges ved å sette CKSEL-sikringer til '0110'. Krystallet skal kobles til som vist i Figur 6-5. For å finne passende lastekapasitans for en 32.768 kHz krystall, vennligst kontakt produsentens datablad.

Når denne oscillatoren er valgt, blir oppstartstidene bestemt av SUT-sikringene som vist i Tabell 6-10.

Tabell 6-10. Oppstartstider for lavfrekvent krystalloscillatorklokkevalg

SUT[1:0] Oppstartstid fra nedstengning Ekstra forsinkelse fra tilbakestilling (VCC = 5.0V) Anbefalt bruk
00 1K (1024) CK(1) 4 ms Rask stigende kraft eller BOD aktivert
01 1K (1024) CK(1) 64 ms Sakte stigende kraft
10 32K (32768) CK 64 ms Stabil frekvens ved oppstart
11 Reservert

Merk: Disse alternativene skal bare brukes hvis frekvensstabilitet ved oppstart ikke er viktig.

Lavfrekvent krystalloscillator gir en intern lastkapasitans, se Tabell 6-11 ved hver TOSC-pinne.

Tabell 6-11. Kapasitans til lavfrekvent krystalloscillator

Enhet 32 kHz Osc. Type Lokk (Xtal1 / Tosc1) Lokk (Xtal2 / Tosc2)
ATtiny25 / 45/85 System Osc. 16 pF 6 pF

Krystalloscillator / keramisk resonator

XTAL1 og XTAL2 er henholdsvis inngang og utgang av en invertering amplifier som kan konfigureres for bruk som en On-chip Oscillator, som vist i Figur 6-5. Enten en kvartskrystall eller en keramisk resonator kan brukes.

C1 og C2 skal alltid være like for både krystaller og resonatorer. Den optimale verdien av kondensatorene avhenger av krystallen eller resonatoren som er i bruk, mengden strøkapasitans og den elektromagnetiske støyen i omgivelsene. Noen innledende retningslinjer for valg av kondensatorer for bruk med krystaller er gitt i Tabell 6-12 under. For keramiske resonatorer bør kondensatorverdiene gitt av produsenten brukes.

Tabell 6-12. Driftsmoduser for krystalloscillator

CKSEL[3:1] Frekvensområde (MHz) Anbefalt område for kondensatorer C1 og C2 for bruk 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

Merknader: Dette alternativet bør ikke brukes med krystaller, kun med keramiske resonatorer.

Oscillatoren kan operere i tre forskjellige moduser, hver optimalisert for et bestemt frekvensområde. Driftsmodus velges av sikringene CKSEL [3: 1] som vist i Tabell 6-12.

CKSEL0-sikringen sammen med SUT [1: 0] -sikringene velger oppstartstidene som vist i Tabell 6-13.

Tabell 6-13. Oppstartstider for valg av krystalloscillatorklokke

CKSEL0 SUT[1:0] Oppstartstid fra nedstengning Ekstra forsinkelse fra tilbakestilling Anbefalt bruk
0 00 258 CK(1) 14 CK + 4 ms Keramisk resonator, kraftig stigende kraft
0 01 258 CK(1) 14 CK + 64 ms Keramisk resonator, sakte stigende kraft
0 10 1K (1024) CK(2) 14CK Keramisk resonator, BOD aktivert
0 11 1K (1024) CK(2) 14 CK + 4 ms Keramisk resonator, kraftig stigende kraft
1 00 1K (1024) CK(2) 14 CK + 64 ms Keramisk resonator, sakte stigende kraft
1 01 16K (16384) CK 14CK Crystal Oscillator, BOD aktivert
1 10 16K (16384) CK 14 CK + 4 ms Krystalloscillator, raskt stigende kraft
1 11 16K (16384) CK 14 CK + 64 ms Krystalloscillator, sakte stigende kraft

Notater

Disse alternativene skal bare brukes når de ikke fungerer i nærheten av enhetens maksimale frekvens, og bare hvis frekvensstabilitet ved oppstart ikke er viktig for applikasjonen. Disse alternativene er ikke egnet for krystaller.

Disse alternativene er ment for bruk med keramiske resonatorer og vil sikre frekvensstabilitet ved oppstart. De kan også brukes med krystaller når de ikke fungerer i nærheten av enhetens maksimale frekvens, og hvis frekvensstabilitet ved oppstart ikke er viktig for applikasjonen.

Standard klokkekilde

Enheten leveres med CKSEL = "0010", SUT = "10" og CKDIV8 programmert. Standard klokkekildeinnstilling er derfor den interne RC-oscillatoren som kjører på 8 MHz med lengste oppstartstid og en innledende systemklokkeforhåndsskalering på 8, noe som resulterer i 1.0 MHz systemklokke. Denne standardinnstillingen sikrer at alle brukere kan foreta ønsket klokkekildeinnstilling ved hjelp av en In-System eller High-voltage Programmerer.

Systemklokke Prescaler

Systemklokken ATtiny25 / 45/85 kan deles ved å stille inn “CLKPR - Clock Prescale Register” på side 32. Denne funksjonen kan brukes til å redusere strømforbruket når kravet til prosessorkraft er lavt. Dette kan brukes med alle klokkekildealternativer, og det vil påvirke klokkefrekvensen til CPU og alle synkrone perifere enheter. clkI/O, clkADC, clkCPU og clkFLASH er delt med en faktor som vist i Tabell 6-15 på side 33.

Byttetid

Når du bytter mellom innstillinger for prescaler, sørger System Clock Prescaler for at det ikke oppstår feil i klokkesystemet, og at ingen mellomfrekvens er høyere enn verken klokkefrekvensen som tilsvarer forrige innstilling, eller klokkefrekvensen som tilsvarer den nye innstillingen.

Ringtelleren som implementerer prescaler, går med frekvensen til den udelte klokken, noe som kan være raskere enn CPUens klokkefrekvens. Derfor er det ikke mulig å bestemme tilstanden til forkalkeren - selv om den var lesbar, og den nøyaktige tiden det tar å bytte fra en klokkeoppdeling til en annen kan ikke forutsies nøyaktig.

Fra det tidspunktet CLKPS-verdiene skrives, tar det mellom T1 + T2 og T1 + 2 * T2 før den nye klokkefrekvensen er aktiv. I dette intervallet produseres 2 aktive klokkekanter. Her er T1 den forrige klokkeperioden, og T2 er perioden som tilsvarer den nye innstillingen for forkalker.

Klokkeutgangsbuffer

Enheten kan sende systemklokken på CLKO-pinnen (når den ikke brukes som XTAL2-pinne). For å aktivere utgangen, må CKOUT-sikringen programmeres. Denne modusen er egnet når chipklokken brukes til å drive andre kretser på systemet. Merk at klokken ikke vil sendes ut under tilbakestilling, og at normal drift av I / O-pinnen vil bli overstyrt når sikringen er programmert. Intern RC-oscillator, WDT-oscillator, PLL og ekstern klokke (CLKI) kan velges når klokken sendes ut på CLKO. Krystalloscillatorer (XTAL1, XTAL2) kan ikke brukes til klokkeutgang på CLKO. Hvis System Clock Prescaler brukes, er det den delte systemklokken som sendes ut.

Registerbeskrivelse

OSCCAL - Oscillator Calibration Register

Bit 7 6 5 4 3 2 1 0
0x31 CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL
Les/skriv R/W R/W R/W R/W R/W R/W R/W R/W

Bits 7: 0 - CAL [7: 0]: Oscillatorkalibreringsverdi

Oscillator Calibration Register brukes til å trimme den kalibrerte interne RC Oscillatoren for å fjerne prosessvariasjoner fra oscillatorfrekvensen. En forhåndsprogrammert kalibreringsverdi blir automatisk skrevet til dette registeret under chiptilbakestilling, noe som gir fabrikkalibrert frekvens som spesifisert i Tabell 21-2 på side 164. Programvaren kan skrive dette registeret for å endre oscillatorfrekvensen. Oscillatoren kan kalibreres til frekvenser som angitt i Tabell 21-2 på side 164. Kalibrering utenfor dette området er ikke garantert.

Vær oppmerksom på at denne oscillatoren brukes til å time EEPROM og Flash-skrivetilgang, og disse skrivetidene vil bli påvirket tilsvarende. Hvis EEPROM eller Flash er skrevet, må du ikke kalibrere til mer enn 8.8 MHz. Ellers kan EEPROM eller Flash-skrivingen mislykkes.

CAL7-bit bestemmer driftsområdet for oscillatoren. Hvis du setter denne biten til 0, får du det laveste frekvensområdet. De to frekvensområdene overlapper hverandre, med andre ord gir en innstilling av OSCCAL = 1x0F en høyere frekvens enn OSCCAL = 7x0.

CAL [6: 0] -bitene brukes til å stille frekvensen innenfor det valgte området. En innstilling på 0x00 gir den laveste frekvensen i det området, og en innstilling på 0x7F gir den høyeste frekvensen i området.

For å sikre stabil drift av MCU bør kalibreringsverdien endres i liten grad. En variasjon i frekvens på mer enn 2% fra en syklus til en annen kan føre til uforutsigbar oppførsel. Endringer i OSCCAL bør ikke overstige 0x20 for hver kalibrering. Det kreves at MCU holdes i Reset under slike endringer i klokkefrekvensen

Tabell 6-14. Intern RC Oscillator frekvensområde

OSCCAL-verdi Typisk laveste frekvens med hensyn til nominell frekvens Typisk høyeste frekvens med hensyn til nominell frekvens
0x00 50 % 100 %
0x3F 75 % 150 %
0x7F 100 % 200 %

CLKPR - Clock Prescale Register

Bit 7 6 5 4 3 2 1 0
0x26 CLKPCE CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR
Les/skriv R/W R R R R/W R/W R/W R/W

Startverdi 0 0 0 0 Se bitbeskrivelse

Bit 7 - CLKPCE: Change Prescaler Change Enable

CLKPCE-biten må skrives for å logisk en for å muliggjøre endring av CLKPS-bitene. CLKPCE-biten oppdateres bare når de andre bitene i CLKPR er skrevet samtidig til null. CLKPCE tømmes av maskinvare fire sykluser etter at den er skrevet eller når CLKPS-biter er skrevet. Omskriving av CLKPCE-biten innen denne tidsavbruddsperioden utvider ikke verken tidsavbruddsperioden eller sletter CLKPCE-biten.

Bits 6: 4 - Res: Reservert Bits

Disse bitene er reserverte bits i ATtiny25 / 45/85 og vil alltid lese som null.

Bits 3: 0 - CLKPS [3: 0]: Clock Prescaler Velg Bits 3 - 0

Disse bitene definerer delingsfaktoren mellom den valgte klokkilden og den interne systemklokken. Disse bitene kan skrives kjøretid for å variere klokkefrekvensen for å dekke applikasjonskravene. Når skillelinjen deler hovedklokkeinngangen til MCU, reduseres hastigheten til alle synkrone eksterne enheter når en divisjonsfaktor brukes. Inndelingsfaktorene er gitt i Tabell 6-15.

For å unngå utilsiktede endringer av klokkefrekvensen, må en spesiell skriveprosedyre følges for å endre CLKPS-bitene:

Skriv Clock Prescaler Change Enable (CLKPCE) bit til en og alle andre bits i CLKPR til null.

I løpet av fire sykluser, skriv ønsket verdi til CLKPS mens du skriver null til CLKPCE.

Avbrudd må deaktiveres når du endrer innstillingen for prescaler for å sikre at skriveprosedyren ikke blir avbrutt.

CKDIV8-sikringen bestemmer startverdien til CLKPS-bitene. Hvis CKDIV8 er uprogrammert, vil CLKPS-bitene bli tilbakestilt til "0000". Hvis CKDIV8 er programmert, tilbakestilles CLKPS-biter til "0011", noe som gir en divisjonsfaktor på åtte ved oppstart. Denne funksjonen bør brukes hvis den valgte klokkekilden har en høyere frekvens enn den maksimale frekvensen til enheten ved de nåværende driftsforholdene. Merk at enhver verdi kan skrives til CLKPS-bitene uavhengig av CKDIV8-sikringsinnstillingen. Applikasjonsprogramvaren må sørge for at en tilstrekkelig delingsfaktor er

valgt hvis den valgte klokkilden har en høyere frekvens enn den maksimale frekvensen til enheten ved de nåværende driftsforholdene. Enheten leveres med CKDIV8 sikring programmert.

Tabell 6-15. Clock Prescaler Velg

CLKPS3 CLKPS2 CLKPS1 CLKPS0 Klokkedelingsfaktor
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 Reservert
1 0 1 0 Reservert
1 0 1 1 Reservert
1 1 0 0 Reservert
1 1 0 1 Reservert
1 1 1 0 Reservert
1 1 1 1 Reservert

Merk: Forskaleren er deaktivert i ATtiny15-kompatibilitetsmodus og verken skriving til CLKPR eller programmering av CKDIV8-sikringen har noen effekt på systemklokken (som alltid vil være 1.6 MHz).

Strømstyring og hvilemodus

Den høye ytelsen og den bransjeledende kodeeffektiviteten gjør AVR-mikrokontrollere til et ideelt valg for applikasjoner med lav effekt. I tillegg gjør hvilemodus applikasjonen i stand til å slå av ubrukte moduler i MCU, og sparer dermed strøm. AVR-en tilbyr forskjellige hvilemoduser som lar brukeren skreddersy strømforbruket til applikasjonens krav.

Hvilemodus

Figur 6-1 på side 23 presenterer de forskjellige klokkesystemene og deres distribusjon i ATtiny25 / 45/85. Figuren er nyttig når du velger en passende hvilemodus. Tabell 7-1 viser de forskjellige hvilemodusene og deres oppvåkningskilder.

Tabell 7-1. Aktive klokkedomener og vekkekilder i de forskjellige hvilemodusene

Aktive klokkedomener Oscillatorer Oppvåkningskilder
Hvilemodus clkCPU clkFLASH clkIO clkADC clkPCK Hovedklokkilde aktivert INT0 og Pin Change SPM / EEPROM

Ferdig

 

USI starttilstand

ADC Annen I/O Vakthund Avbryte
Uvirksom X X X X X X X X X X
ADC-støyreduksjon X X X(1) X X X X
Slå av X(1) X X

Merk: For INT0, bare nivåavbrudd.

For å gå inn i en av de tre hvilemodusene, må SE-biten i MCUCR skrives for å logisk en og en SLEEP-instruksjon må utføres. SM [1: 0] -bitene i MCUCR-registeret velger hvilken hvilemodus (tomgang, ADC-støyreduksjon eller avstengning) som skal aktiveres av SLEEP-instruksjonen. Se Tabell 7-2 for en oppsummering.

Hvis et aktivert avbrudd oppstår mens MCU er i hvilemodus, våkner MCU. MCU stoppes deretter i fire sykluser i tillegg til oppstartstiden, utfører avbruddsrutinen og gjenopptar utførelse fra instruksjonen etter SLEEP. Innholdet i registeret File og SRAM er uendret når enheten våkner fra dvale. Hvis en tilbakestilling skjer under hvilemodus, våkner MCU-en og kjører fra Reset Vector.

Merk: at hvis et nivåutløst avbrudd brukes for vekking, må det endrede nivået holdes i noen tid for å vekke MCU (og for at MCU skal gå inn i avbruddsservicerutinen). Se “Eksterne avbrudd” på side 49 for detaljer.

Inaktiv modus

Når SM[1:0]-bitene skrives til 00, får SLEEP-instruksjonen MCU til å gå inn i hvilemodus, og stopper CPU-en, men lar Analog Comparator, ADC, USI, Timer/Counter, Watchdog og avbruddssystemet fortsette å fungere. spise. Denne hvilemodusen stopper i utgangspunktet clkCPU og clkFLASH, mens den lar de andre klokkene kjøre.

Inaktiv modus gjør det mulig for MCU å våkne opp fra eksterne utløste avbrudd, så vel som interne som Timer Overflow. Hvis det ikke er nødvendig å våkne opp fra den analoge komparatoravbruddet, kan den analoge komparatoren slås av ved å sette ACD-biten i “ACSR - Analog Comparator Control and Status Register” på side 120. Dette vil redusere strømforbruket i hvilemodus. Hvis ADC er aktivert, starter en konvertering automatisk når denne modusen går inn.

ADC Støyreduksjonsmodus

Når SM[1:0]-bitene skrives til 01, får SLEEP-instruksjonen MCU til å gå inn i ADC-støyreduksjonsmodus, og stopper CPU-en, men lar ADC-en, de eksterne avbruddene og Watchdog-en fortsette å operere (hvis aktivert). Denne hvilemodusen stopper clkI/O, clkCPU og clkFLASH, samtidig som de andre klokkene kan kjøre.

Dette forbedrer støymiljøet for ADC, noe som muliggjør målinger med høyere oppløsning. Hvis ADC er aktivert, starter en konvertering automatisk når denne modusen går inn. Bortsett fra ADC Conversion Complete interrupt, kan bare en ekstern tilbakestilling, en Watchdog Reset, en Brown-out Reset, en SPM / EEPROM klar avbrytelse, en ekstern nivåavbrudd på INT0 eller en pin-endringsavbrudd vekke MCU fra ADC Noise Reduction modus.

Slå av modus

Når SM [1: 0] -bitene er skrevet til 10, får SLEEP-instruksjonen MCU til å slå seg av. I denne modusen stoppes oscillatoren, mens den eksterne avbryter, USI-starttilstandsdeteksjon og Watchdog fortsetter å fungere (hvis aktivert). Bare en ekstern tilbakestilling, en tilbakestilling av vakthunden, en tilbakestilling av utbrudd, USI-starttilstandsavbrudd, et eksternt nivåavbrudd på INT0 eller en pinneskiftavbrudd kan vekke MCU. Denne hvilemodus stopper alle genererte klokker, og tillater kun drift av asynkrone moduler.

Programvare BOD Deaktiver

Når Brown-out Detector (BOD) er aktivert av BODLEVEL-sikringer (se Tabell 20-4 på side 148), overvåker BIR aktivt forsyningen voltage under en søvnperiode. I noen enheter er det mulig å spare strøm ved å deaktivere BOD med programvare i Power-Down hvilemodus. Strømforbruket i hvilemodus vil da være på samme nivå som når BOD er ​​globalt deaktivert av sikringer.

Hvis BOD er ​​deaktivert av programvare, slås BOD-funksjonen av umiddelbart etter at du går inn i dvalemodus. Ved oppvåkning fra dvale aktiveres BOD automatisk igjen. Dette sikrer sikker drift i tilfelle VCC-nivået har sunket under hvileperioden.

Når BOD er ​​deaktivert, vil vekketiden fra hvilemodus være den samme som for å våkne fra RESET. Brukeren må konfigurere vekketidene manuelt slik at referansen til båndgapet har tid til å starte og BOD fungerer korrekt før MCU fortsetter å utføre kode. Se SUT [1: 0] og CKSEL [3: 0] sikringsbiter i tabellen “Sikring lavbyte” på side 149

BOD deaktivering styres av BODS (BOD Sleep) bit av MCU Control Register, se “MCUCR - MCU-kontroll Registrer deg ”på side 37. Å skrive denne biten til en slår av BOD i nedstengning, mens du skriver null holder BOD aktiv. Standardinnstillingen er null, dvs. BOD aktiv.

Skrive til BODS-biten styres av en tidsbestemt sekvens og en aktiveringsbit, se “MCUCR - MCU Control Regis- ter ”på side 37.

Begrensninger

BOD-deaktiveringsfunksjonalitet er bare implementert på følgende enheter:

ATtiny25, revisjon E og nyere

ATtiny45, revisjon D og nyere

ATtiny85, revisjon C og nyere

Revisjoner er merket på enhetspakken og kan lokaliseres som følger:

Bunnsiden av pakkene 8P3 og 8S2

Overside av pakken 20M1

Kraftreduksjonsregister

Power Reduction Register (PRR), se “PRR - Register for kraftreduksjon” på side 38, gir en metode for å redusere strømforbruket ved å stoppe klokken til individuelle eksterne enheter. Den nåværende tilstanden til periferiutstyret er frossen, og I / O-registerene kan ikke leses eller skrives. Ressurser som brukes av periferiutstyret når klokken stoppes, vil forbli okkupert, og derfor skal periferiutstyret i de fleste tilfeller være deaktivert før klokken stoppes. Å vekke en modul, som gjøres ved å fjerne biten i PRR, setter modulen i samme tilstand som før avstenging.

Modulavstenging kan brukes i hvilemodus og aktiv modus for å redusere det totale strømforbruket betydelig. I alle andre hvilemodus er klokken allerede stoppet. Se “Forsyningsstrøm for I / O-moduler” på side 177 for eksamples.

Minimere strømforbruket

Det er flere problemer du bør vurdere når du prøver å minimere strømforbruket i et AVR-kontrollert system. Generelt skal dvalemodus brukes så mye som mulig, og dvalemodus bør velges slik at så få som mulig av enhetens funksjoner fungerer. Alle funksjoner som ikke er nødvendige, bør deaktiveres. Spesielt kan følgende moduler trenge spesiell vurdering når vi prøver å oppnå lavest mulig strømforbruk.

Analog til digital omformer

Hvis aktivert, vil ADC være aktivert i alle hvilemodus. For å spare strøm, bør ADC deaktiveres før du går i hvilemodus. Når ADC er slått av og på igjen, blir neste konvertering en utvidet konvertering. Referere til “Analog til digital omformer” på side 122 for detaljer om ADC-drift.

Analog komparator

Når du går inn i hvilemodus, bør den analoge komparatoren deaktiveres hvis den ikke brukes. Når du går inn i ADC Noise Reduction-modus, bør den analoge komparatoren deaktiveres. I de andre hvilemodusene blir den analoge komparatoren automatisk deaktivert. Imidlertid, hvis den analoge komparatoren er satt opp til å bruke Internal Voltage Referanse som inngang, Analog Comparator skal være deaktivert i alle hvilemoduser. Ellers vil Internal Voltage Reference vil være aktivert, uavhengig av hvilemodus. Referere til “Analog komparator” på side 119 for detaljer om hvordan du konfigurerer Analog Comparator.

Brun ut-detektor

Hvis det ikke er behov for brun ut-detektor i applikasjonen, bør denne modulen være slått av. Hvis utbrudddetektoren er aktivert av BODLEVEL-sikringene, vil den være aktivert i alle hvilemoduser, og forbruker derfor alltid strøm. I de dypere hvilemodusene vil dette bidra betydelig til det totale strømforbruket. Se "Brun-out detek- tion ”på side 41 og “Programvare-BOD deaktivert” på side 35 for detaljer om hvordan du konfigurerer Brown-out Detector.

Intern voltage Referanse

The Internal Voltage Reference vil bli aktivert når det er nødvendig av Brown-out-deteksjonen, den analoge komparatoren eller ADC. Hvis disse modulene er deaktivert som beskrevet i avsnittene ovenfor, vil intern voltagReferansen vil bli deaktivert, og den vil ikke bruke strøm. Når den slås på igjen, må brukeren la referansen starte før utgangen brukes. Hvis referansen beholdes i hvilemodus, kan utgangen brukes umiddelbart. Referere til "Intern Voltage Referanse” på side 42 for detaljer om oppstartstid.

Watchdog Timer

Hvis Watchdog Timer ikke er nødvendig i applikasjonen, bør denne modulen være slått av. Hvis Watchdog Timer er aktivert, vil den være aktivert i alle hvilemodus, og forbruker derfor alltid strøm. I de dypere hvilemodusene vil dette bidra betydelig til det totale strømforbruket. Referere til “Watchdog Timer” på side 42 for detaljer om hvordan du konfigurerer Watchdog Timer.

Portnål

Når du går inn i en hvilemodus, bør alle portpinner konfigureres til å bruke minimum strøm. Det viktigste er da å sikre at ingen pinner driver motstandsbelastning. I hvilemodus der både I/O-klokken (clkI/O) og ADC-klokken (clkADC) er stoppet, vil inngangsbufferne til enheten bli deaktivert. Dette sikrer at ingen strøm forbrukes

av inngangslogikken når den ikke er nødvendig. I noen tilfeller er inngangslogikken nødvendig for å oppdage vekkeforhold, og

den blir da aktivert. Se avsnittet “Digital inngangsaktivering og hvilemodus” på side 57 for detaljer om hvilke pinner som er aktivert. Hvis inngangsbufferen er aktivert og inngangssignalet blir stående flytende eller har et analogt signalnivå nær VCC/2, vil inngangsbufferen bruke for mye strøm.

For analoge inngangsstifter bør den digitale inngangsbufferen være deaktivert til enhver tid. Et analogt signalnivå nær VCC/2 på en inngangspinne kan forårsake betydelig strøm selv i aktiv modus. Digitale inngangsbuffere kan deaktiveres ved å skrive til Digital Input Disable Register (DIDR0). Referere til “DIDR0 - Digital Input Disable Register 0” på side 121 for detaljer.

Registerbeskrivelse

MCUCR - MCU-kontrollregister

MCU Control Register inneholder kontrollbiter for strømstyring.

Bit 7 6 5 4 3 2 1 0
0x35 BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Les/skriv R R/W R/W R/W R/W R R/W R/W
Startverdi 0 0 0 0 0 0 0 0

Bit 7 - BODS: BOD Sleep

BOD deaktiveringsfunksjonalitet er bare tilgjengelig på noen enheter. Se “Begrensninger” på side 36.

For å deaktivere BOD under søvn (se Tabell 7-1 på side 34) BODS-biten må skrives til en logisk. Dette styres av en tidsbestemt sekvens og aktiveringsbit, BODSE i MCUCR. Først må både BODS og BODSE settes til en. For det andre, innen fire klokkesykluser, må BODS settes til en og BODSE må være satt til null. BODS-biten er aktiv tre klokkesykluser etter at den er satt. En søvninstruksjon må utføres mens BODS er aktiv for å slå av BOD for den faktiske hvilemodus. BODS-biten slettes automatisk etter tre klokkesykluser.

I enheter der Sleeping BOD ikke er implementert, er denne biten ubrukt og vil alltid lese null.

Bit 5 - SE: Sleep Enable

SE-biten må skrives til logisk én for å få MCU til å gå inn i hvilemodus når SLEEP-instruksjonen utføres. For å unngå at MCU går inn i dvalemodus med mindre det er programmererens formål, anbefales det å skrive Sleep Enable (SE)-biten til en rett før utførelsen av SLEEP-instruksjonen og fjerne den umiddelbart etter oppvåkning.

Bits 4: 3 - SM [1: 0]: Hvilemodus Velg Bits 1 og 0

Disse bitene velger mellom de tre tilgjengelige hvilemodusene som vist i Tabell 7-2.

Tabell 7-2. Dvalemodus Velg

SM1 SM0 Hvilemodus
0 0 Uvirksom
0 1 ADC-støyreduksjon
1 0 Slå av
1 1 Reservert

Bit 2 - BODSE: BOD Sleep Enable

BOD deaktiveringsfunksjonalitet er bare tilgjengelig på noen enheter. Se “Begrensninger” på side 36.

BODSE-biten muliggjør innstilling av BODS-kontrollbit, som forklart i BODS-bitbeskrivelsen. BOD deaktivering styres av en tidsbestemt sekvens.

Denne biten er ubrukt i enheter der programvaren BOD deaktiveres ikke er implementert og vil bli lest som null i disse enhetene.

PRR - Power Reduction Register

Power Reduction Register gir en metode for å redusere strømforbruket ved å la perifere klokkesignaler deaktiveres.

Bit 7 6 5 4 3 2 1 0
0x20 PRTIM1 PRTIM0 PRUSI PRADC PRR
Les/skriv R R R R R/W R/W R/W R/W
Startverdi 0 0 0 0 0 0 0 0

Bits 7: 4 - Res: Reservert Bits

Disse bitene er reserverte bits i ATtiny25 / 45/85 og vil alltid lese som null.

Bit 3 - PRTIM1: Effektreduksjonstimer / teller 1

Å skrive en logisk en til denne biten stenger Timer / Counter1-modulen. Når Timer / Counter1 er aktivert, vil driften fortsette som før avstengingen.

Bit 2 - PRTIM0: Effektreduksjonstimer / teller 0

Å skrive en logisk en til denne biten stenger Timer / Counter0-modulen. Når Timer / Counter0 er aktivert, vil driften fortsette som før avstengingen.

Bit 1 - PRUSI: Strømreduksjon USI

Å skrive en logisk en til denne biten stenger USI ved å stoppe klokken til modulen. Når du vekker USI igjen, bør USI initialiseres på nytt for å sikre riktig drift.

Bit 0 - PRADC: Power Reduction ADC

Å skrive en logisk en til denne biten stenger ADC. ADC må deaktiveres før den slås av. Merk at ADC-klokken også brukes av noen deler av den analoge komparatoren, noe som betyr at den analoge komparatoren ikke kan brukes når denne biten er høy.

Systemkontroll og tilbakestilling

Tilbakestille AVR

Under tilbakestillingen er alle I / O-registre satt til de opprinnelige verdiene, og programmet starter kjøringen fra Reset Vector. Instruksjonen plassert i Reset Vector må være en RJMP - Relative Jump - instruksjon til tilbakestillingshåndteringsrutinen. Hvis programmet aldri aktiverer en avbruddskilde, brukes ikke Avbrytningsvektorene, og vanlig programkode kan plasseres på disse stedene. Kretsskjemaet i Figur 8-1 viser tilbakestillogikken. Elektriske parametere for tilbakestillingskretsene er gitt i “System- og tilbakestillingsegenskaper” på side 165.

Figur 8-1 Tilbakestill logikk Tilbakestill-logikk

I / U-portene til AVR tilbakestilles umiddelbart til sin opprinnelige tilstand når en tilbakestillingskilde blir aktiv. Dette krever ingen klokkilde for å være i gang.

Etter at alle tilbakestillingskildene har gått inaktive, påkalles en forsinkelsesteller som strekker den interne tilbakestillingen. Dette gjør at kraften kan nå et stabilt nivå før normal drift starter. Tidsavbruddstiden for forsinkelsestelleren defineres av brukeren gjennom SUT- og CKSEL-sikringene. De forskjellige valgene for forsinkelsesperioden presenteres i "Klokke Kilder ”på side 25.

Tilbakestill kilder

ATtiny25 / 45/85 har fire tilbakestillingskilder:

Tilbakestilling ved oppstart. MCU nullstilles når forsyningsvolumettage er under Power-on Reset Threshold (VPOT).

Ekstern tilbakestilling. MCU tilbakestilles når et lavt nivå er tilstede på RESET-pinnen lenger enn minimum pulslengde.

Tilbakestilling av vakthund. MCU tilbakestilles når Watchdog Timer-perioden utløper og Watchdog er aktivert.

Brown-out Tilbakestill. MCU nullstilles når forsyningsvolumettage VCC er under Brown-out Reset-terskel (VBOT) og Brown-out-detektoren er aktivert.

Slå på tilbakestilling

En POR-puls (Power-on Reset) blir generert av en deteksjonskrets på chip. Deteksjonsnivået er definert i "Sys- tem og Tilbakestill egenskaper ”på side 165. POR aktiveres når VCC er under deteksjonsnivået. POR-kretsen kan brukes til å utløse Start-up Reset, samt å oppdage en feil i forsyningsvolumtage.

En Power-on Reset (POR)-krets sikrer at enheten tilbakestilles fra Power-on. Å nå terskelverdien for tilbakestilling ved oppstart voltage kaller på forsinkelsestelleren, som bestemmer hvor lenge enheten holdes i RESET etter VCC-stigning. RESET-signalet aktiveres igjen, uten noen forsinkelse, når VCC synker under deteksjonsnivået.

Figur 8-2. MCU-oppstart, RESET knyttet til VCC

INTERN RESET

Figur 8-3. MCU-oppstart, RESET utvidet eksternt

Ekstern tilbakestilling

En ekstern tilbakestilling genereres av et lavt nivå på RESET-pinnen hvis aktivert. Tilbakestill pulser lenger enn minimum pulsbredde (se “System- og tilbakestillingsegenskaper” på side 165) vil generere en tilbakestilling, selv om klokken ikke går. Kortere pulser er ikke garantert å generere en tilbakestilling. Når det tilførte signalet når Reset Threshold Voltage – VRST – på sin positive kant starter forsinkelsestelleren MCU etter at tidsavbruddsperioden er utløpt.

Figur 8-4. Ekstern tilbakestilling under drift Fig. 8.4

Utbrent deteksjon

ATtiny25/45/85 har en On-chip Brown-out Detection (BOD)-krets for å overvåke VCC-nivået under drift ved å sammenligne det med et fast triggernivå. Triggernivået for BOD kan velges av BODLEVEL-sikringene. Triggernivået har en hysterese for å sikre piggfri Brown-out-deteksjon. Hysteresen på deteksjonsnivået skal tolkes som VBOT+ = VBOT + VHYST/2 og VBOT- = VBOT – VHYST/2.

Når BOD er ​​aktivert, og VCC synker til en verdi under triggernivået (VBOT-in) Figur 8-5), aktiveres Brown-out Reset umiddelbart. Når VCC øker over triggernivået (VBOT+ in Figur 8-5), starter forsinkelsestelleren MCU etter at tidsavbruddsperioden tTOUT er utløpt.

BOD-kretsen vil bare oppdage et fall i VCC hvis voltage holder seg under triggernivået lenger enn tBOD gitt inn “System- og tilbakestillingsegenskaper” på side 165. Fig. 8.5

Tilbakestilling av vakthund

Når Watchdog-en går ut, vil den generere en kort tilbakestillingspuls på én CK-syklus. På den fallende flanken av denne pulsen begynner forsinkelsestidtakeren å telle Time-out-perioden tTOUT. Referere til “Watchdog Timer” på side 42 for detaljer om bruk av Watchdog Timer.

Voltage Referanse Aktiver signaler og oppstartstid

VoltagReferansen har en oppstartstid som kan påvirke måten den skal brukes på. Oppstartstiden er oppgitt “System- og tilbakestillingsegenskaper” på side 165. For å spare strøm er ikke referansen alltid slått på. Referansen er på i følgende situasjoner:

Når BOD er ​​aktivert (ved å programmere BODLEVEL [2: 0] Fuse Bits).

Når referansen til båndgapet er koblet til den analoge komparatoren (ved å sette ACBG-biten i ACSR).

Når ADC er aktivert.

Når BOD ikke er aktivert, må brukeren alltid etter at ACBG-biten er aktivert eller aktivert ADC, la referansen starte før utgangen fra Analog Comparator eller ADC brukes. For å redusere strømforbruket i avstengingsmodus, kan brukeren unngå de tre forholdene ovenfor for å sikre at referansen blir slått av før den går inn i nedstengingsmodus.

Watchdog Timer

Watchdog Timer er klokket fra en On-chip Oscillator som kjører på 128 kHz. Ved å kontrollere Watchdog Timer prescaler, kan Watchdog Reset intervallet justeres som vist i Tabell 8-3 på side 46. WDR - tilbakestilling av vakthund - instruksjon tilbakestiller vakthundtimeren. Watchdog Timer tilbakestilles også når den er deaktivert og når en Chip Reset oppstår. Ti forskjellige tidssyklusperioder kan velges for å bestemme tilbakestillingsperioden. Hvis tilbakestillingsperioden utløper uten en annen tilbakestilling av Watchdog, tilbakestilles og kjøres ATtiny25 / 45/85 fra Reset Vector. For informasjon om timing på tilbakestilling av Watchdog, se Tabell 8-3 på side 46.

Watchdog Timer kan også konfigureres til å generere et avbrudd i stedet for en tilbakestilling. Dette kan være veldig nyttig når du bruker Watchdog til å våkne fra Power-down.

For å forhindre utilsiktet deaktivering av Watchdog eller utilsiktet endring av tidsavbruddsperioden, velges to forskjellige sikkerhetsnivåer av sikringen WDTON som vist i Tabell 8-1 Referer til “Tidsbestemte sekvenser for å endre konteksten figurasjon av Watchdog Timer ”på side 43 for detaljer.

Tabell 8-1. WDT-konfigurasjon som en funksjon av sikringsinnstillingene til WDTON

WDTON Sikkerhetsnivå WDT-starttilstand Slik deaktiverer du WDT Hvordan endre tidsavbrudd
Uprogrammert 1 Funksjonshemmet Tidsbestemt sekvens Ingen begrensninger
Programmert 2 Aktivert Alltid aktivert Tidsbestemt sekvens

Figur 8-7. Watchdog Timer Vakthund

Tidsbestemte sekvenser for å endre konfigurasjonen av Watchdog Timer

Sekvensen for å endre konfigurasjon varierer litt mellom de to sikkerhetsnivåene. Separate prosedyrer er beskrevet for hvert nivå.

Sikkerhetsnivå 1: I denne modusen er Watchdog Timer i utgangspunktet deaktivert, men kan aktiveres ved å skrive WDE-biten til en uten noen begrensning. En tidsbestemt sekvens er nødvendig når du deaktiverer en aktivert Watchdog Timer. For å deaktivere en aktivert Watchdog Timer, må følgende prosedyre følges:

I samme operasjon, skriv en logisk til WDCE og WDE. En logikk må skrives til WDE uansett WDE-bitens tidligere verdi.

I løpet av de neste fire klokkesyklusene, i samme operasjon, skriver du WDE- og WDP-bitene etter ønske, men med WDCE-biten fjernet.

Sikkerhetsnivå 2: I denne modusen er Watchdog-timeren alltid aktivert, og WDE-biten vil alltid leses som én. En tidsinnstilt sekvens er nødvendig når du endrer Watchdog Time-out-perioden. For å endre Watchdog Time-out, må følgende prosedyre følges:

I samme operasjon, skriv en logisk til WDCE og WDE. Selv om WDE alltid er satt, må WDE skrives til en for å starte den tidsbestemte sekvensen.

I løpet av de neste fire klokkesyklusene, i samme operasjon, skriver du WDP-bitene som ønsket, men med WDCE-biten fjernet. Verdien skrevet til WDE-biten er irrelevant.

Kode Eksample

Følgende kode eksample viser én sammenstilling og én C-funksjon for å slå av WDT. Eksenample antar at avbrudd kontrolleres (f.eks. ved å deaktivere avbrudd globalt) slik at ingen avbrudd vil oppstå under utførelsen av disse funksjonene.

Monteringskode Eksample(1)
WDT_off:

wdr

; Fjern WDRF i MCUSR

ldi r16, (0<

ut MCUSR, r16

; Skriv logisk til WDCE og WDE

; Behold den gamle innstillingen for prescaler for å forhindre utilsiktet tilbakestilling av Watchdog

i r16, WDTCR

ori r16, (1<

ut WDTCR, r16

; Slå av WDT

ldi r16, (0<

ut WDTCR, r16

ret

C-kode Eksample(1)
void WDT_off(void)

{

_WDR ();

/* Slett WDRF i MCUSR */ MCUSR = 0x00

/* Skriv logisk en til WDCE og WDE */ WDTCR |= (1<

/ * Slå av WDT * / WDTCR = 0x00;

}

Merk: 1. Se “Kode Eksamples ”på side 6.

Registerbeskrivelse

MCUSR - MCU Status Register

MCU-statusregisteret gir informasjon om hvilken tilbakestillingskilde som forårsaket en MCU-tilbakestilling.

Bit 7 6 5 4 3 2 1 0
0x34 WDRF BORF EKSTRA PORF MCUSR
Les/skriv R R R R R/W R/W R/W R/W

Startverdi 0 0 0 0 Se bitbeskrivelse

Bits 7: 4 - Res: Reservert Bits

Disse bitene er reserverte bits i ATtiny25 / 45/85 og vil alltid lese som null.

Bit 3 - WDRF: Watchdog Reset Flag

Denne biten settes hvis en tilbakestilling av Watchdog forekommer. Biten tilbakestilles ved en tilbakestilling av start, eller ved å skrive en logisk null til flagget.

Bit 2 - BORF: Brown-out Reset Flag

Denne biten settes hvis en tilbakestilling av utbrudd forekommer. Biten tilbakestilles ved en tilbakestilling av start, eller ved å skrive en logisk null til flagget.

Bit 1 - EXTRF: Ekstern tilbakestillingsflagg

Denne biten angis hvis en ekstern tilbakestilling forekommer. Biten tilbakestilles ved en tilbakestilling av start, eller ved å skrive en logisk null til flagget.

Bit 0 - PORF: Start-på-tilbakestillingsflagg

Denne biten angis hvis en tilbakestilling av oppstarten forekommer. Biten tilbakestilles bare ved å skrive en logisk null til flagget.

For å bruke Reset Flags for å identifisere en tilbakestillingstilstand, bør brukeren lese og deretter tilbakestille MCUSR så tidlig som mulig i programmet. Hvis registeret tømmes før en annen tilbakestilling skjer, kan kilden til tilbakestillingen bli funnet ved å undersøke Tilbakestill flagg.

WDTCR - Watchdog Timer Control Register

Bit 7 6 5 4 3 2 1 0
0x21 WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 WDTCR
Les/skriv R/W R/W R/W R/W R/W R/W R/W R/W
Startverdi 0 0 0 0 X 0 0 0

Bit 7 - WDIF: Watchdog Timeout Interrupt Flag

Denne biten angis når en time-out forekommer i Watchdog Timer og Watchdog Timer er konfigurert for avbrudd. WDIF fjernes av maskinvare når du utfører den tilsvarende avbruddshåndteringsvektoren. Alternativt fjernes WDIF ved å skrive en logisk til flagget. Når I-bit i SREG og WDIE er satt, blir Watchdog Time-out Interrupt utført.

Bit 6 - WDIE: Watchdog Timeout Interrupt Enable

Når denne biten er skrevet til en, slettes WDE, og jeg-biten i statusregisteret er satt, aktiveres Watchdog Time-out Interrupt. I denne modusen utføres tilsvarende avbrudd i stedet for en tilbakestilling hvis det oppstår en tidsavbrudd i Watchdog Timer.

Hvis WDE er angitt, slettes WDIE automatisk av maskinvare når en time-out oppstår. Dette er nyttig for å holde Watchdog Reset-sikkerheten mens du bruker avbruddet. Etter at WDIE-biten er fjernet, vil neste time-out generere en tilbakestilling. For å unngå tilbakestilling av Watchdog, må WDIE stilles inn etter hvert avbrudd.

Tabell 8-2. Watchdog Timer-konfigurasjon

WDE WDIE Watchdog Timer State Handling på Time-out
0 0 Stoppet Ingen
0 1 Løper Avbryte
1 0 Løper Tilbakestill
1 1 Løper Avbryte

Bit 4 - WDCE: Watchdog Change Enable

Denne biten må settes når WDE-biten skrives til logisk null. Ellers blir ikke Watchdog deaktivert. Når det er skrevet til en, vil maskinvaren fjerne denne biten etter fire klokkesykluser. Se beskrivelsen av WDE-bit for en deaktiveringsprosedyre for Watchdog. Denne biten må også settes når du bytter prescalerbiter. Se “Tidsbestemte sekvenser for å endre konfigurasjonen av Watchdog Timer ”på side 43.

Bit 3 - WDE: Watchdog Enable

Når WDE er skrevet til en logikk, er Watchdog Timer aktivert, og hvis WDE er skrevet til logisk null, er Watchdog Timer-funksjonen deaktivert. WDE kan bare tømmes hvis WDCE-biten har logisk nivå ett. For å deaktivere en aktivert Watchdog Timer, må følgende fremgangsmåte følges:

I samme operasjon, skriv en logisk til WDCE og WDE. En logikk må skrives til WDE selv om den er satt til en før deaktiveringen starter.

I løpet av de neste fire klokkesyklusene, skriv en logikk 0 til WDE. Dette deaktiverer Watchdog.

På sikkerhetsnivå 2 er det ikke mulig å deaktivere Watchdog Timer, selv ikke med algoritmen beskrevet ovenfor. Se “Tidsbestemte sekvenser for å endre konfigurasjonen av vakthundtimeren” på side 43.

I sikkerhetsnivå 1 overstyres WDE av WDRF i MCUSR. Se “MCUSR - MCU Status Register” på side 44 for beskrivelse av WDRF. Dette betyr at WDE alltid er satt når WDRF er satt. For å tømme WDE, må WDRF tømmes før Watchdog deaktiveres med prosedyren beskrevet ovenfor. Denne funksjonen sikrer flere tilbakestillinger under forhold som forårsaker feil, og en sikker oppstart etter feilen.

Merk: Hvis watchdog-timeren ikke skal brukes i applikasjonen, er det viktig å gå gjennom en watchdog-deaktiveringsprosedyre i initialiseringen av enheten. Hvis Watchdog ved et uhell er aktivert, f.eksampved en løpende peker eller brun-ut-tilstand, vil enheten bli tilbakestilt, noe som igjen vil føre til en ny vakthund. For å unngå denne situasjonen, bør programvaren alltid fjerne WDRF -flagget og WDE -kontrollbiten i initialiseringsrutinen.

Bits 5, 2: 0 - WDP [3: 0]: Watchdog Timer Prescaler 3, 2, 1 og 0

WDP [3: 0] -bitene bestemmer forhåndsskalering av Watchdog Timer når Watchdog Timer er aktivert. De forskjellige forhåndsskaleringsverdiene og deres tilsvarende tidsavbruddsperioder er vist i Tabell 8-3.

Tabell 8-3. Watchdog Timer Prescale Velg

WDP3 WDP2 WDP1 WDP0 Antall WDT-oscillatorsykluser Typisk tidsavbrudd ved VCC = 5.0V
0 0 0 0 2K (2048) sykluser 16 ms
0 0 0 1 4K (4096) sykluser 32 ms
0 0 1 0 8K (8192) sykluser 64 ms
0 0 1 1 16K (16384) sykluser 0.125 s
0 1 0 0 32K (32764) sykluser 0.25 s
0 1 0 1 64K (65536) sykluser 0.5 s
0 1 1 0 128K (131072) sykluser 1.0 s
0 1 1 1 256K (262144) sykluser 2.0 s
1 0 0 0 512K (524288) sykluser 4.0 s
1 0 0 1 1024K (1048576) sykluser 8.0 s

Tabell 8-3. Watchdog Timer Prescale Select (fortsettelse)

WDP3 WDP2 WDP1 WDP0 Antall WDT-oscillatorsykluser Typisk tidsavbrudd ved VCC = 5.0V
1 0 1 0 Reservert(1)
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1

Merk: 1. Hvis valgt, vil en av de gyldige innstillingene under 0b1010 bli brukt.

avbryter

Denne delen beskriver detaljene i avbruddshåndteringen som utført i ATtiny25 / 45/85. For en generell forklaring på AVR-avbruddshåndtering, se “Tilbakestill og avbryt håndtering” på side 12.

Avbryt vektorer i ATtiny25 / 45/85

Avbruddsvektorene til ATtiny25 / 45/85 er beskrevet i Tabell 9-1under.

Tabell 9-1. Tilbakestill og avbryt vektorer

Vektornr. Programadresse Kilde Avbryt definisjon
1 0x0000 TILBAKESTILL Ekstern stift, tilbakestilling av start, tilbakestilling av brunfarge, tilbakestilling av vakthund
2 0x0001 INT0 Ekstern avbruddsforespørsel 0
3 0x0002 PCINT0 Pin Change Interrupt Request 0
4 0x0003 TIMER1_COMPA Timer / Counter1 Sammenlign kamp A
5 0x0004 TIMER1_OVF Timer / Counter1 Overflow
6 0x0005 TIMER0_OVF Timer / Counter0 Overflow
7 0x0006 EE_RDY EEPROM Klar
8 0x0007 ANA_COMP Analog komparator
9 0x0008 ADC ADC-konvertering fullført
10 0x0009 TIMER1_COMPB Timer / Counter1 Sammenlign kamp B
11 0x000A TIMER0_COMPA Timer / Counter0 Sammenlign kamp A
12 0x000B TIMER0_COMPB Timer / Counter0 Sammenlign kamp B
13 0x000C WDT Watchdog Time-out
14 0x000D USI_START USI START
15 0x000E USI_OVF USI overløp

Hvis programmet aldri aktiverer en avbruddskilde, brukes ikke Avbrytningsvektorene, og vanlig programkode kan plasseres på disse stedene.

Et typisk og generelt oppsett for avbruddsvektoradresser i ATtiny25/45/85 er vist i programmet eksample nedenfor.

Monteringskode Eksample
.org 0x0000 ; Angi adressen til neste uttalelse
rjmp RESET ; 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
NULLSTILLE: ; Hovedprogramstart
; Adresse 0x000F

Merk: Se “Kode Eksamples ”på side 6.

Eksterne avbrudd

De eksterne avbruddene utløses av INT0-pinnen eller noen av PCINT [5: 0] -pinnene. Vær oppmerksom på at hvis avbruddene er aktivert, vil de utløse selv om INT0- eller PCINT [5: 0] -pinnene er konfigurert som utganger. Denne funksjonen gir en måte å generere en programvareavbrudd på. Pin-endringsavbrudd PCI vil utløses hvis en aktivert PCINT [5: 0] -pinne bytter. PCMSK-registeret kontrollerer hvilke pinner som bidrar til at pinnene bytter. Pin-endringsavbrudd på PCINT [5: 0] oppdages asynkront. Dette innebærer at disse avbruddene kan brukes til å vekke delen også fra andre hvilemodus enn hvilemodus.

INT0-avbruddene kan utløses av en fallende eller stigende kant eller et lavt nivå. Dette settes opp som angitt i spesifikasjonen for MCU Control Register - MCUCR. Når INT0-avbruddet er aktivert og konfigurert som nivåutløst, vil avbruddet utløse så lenge pinnen holdes lav. Merk at gjenkjenning av fallende eller stigende kantavbrudd på INT0 krever nærvær av en I / O-klokke, beskrevet i “Clock Systems and their Distribution” på side 23.

Lavt nivå avbrudd

Et lavt nivåavbrudd på INT0 oppdages asynkront. Dette innebærer at dette avbruddet kan brukes til å vekke delen også fra andre hvilemodus enn hvilemodus. I / U-klokken er stoppet i alle hvilemodus unntatt inaktiv modus.

Merk at hvis et nivåutløst avbrudd brukes for vekking fra Power-down, må det nødvendige nivået holdes lenge nok til at MCU-en fullfører vekkingen for å utløse nivåavbruddet. Hvis nivået forsvinner før slutten av oppstartstiden, vil MCU fortsatt våkne, men ingen avbrudd vil bli generert. Oppstartstiden er definert av SUT- og CKSEL-sikringene som beskrevet i “System Clock and Clock Options” på side 23.

Hvis det lave nivået på avbruddspinnen fjernes før enheten har våknet, vil ikke programutførelsen bli viderekoblet til avbruddsrutinen, men fortsette fra instruksjonen etter SLEEP-kommandoen.

Tidspunkt for avbrudd av pinnebytte

En eksample av tidspunktet for et pinneskift avbrudd er vist i Figur 9-1.

Registerbeskrivelse

MCUCR - MCU-kontrollregister

Registeret A for ekstern avbruddskontroll inneholder kontrollbiter for avbruddsregulering.

Bit 7 6 5 4 3 2 1 0
0x35 BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Les/skriv R R/W R/W R/W R/W R R/W R/W
Startverdi 0 0 0 0 0 0 0 0

Bits 1: 0 - ISC0 [1: 0]: Avbryt sansekontroll 0 bit 1 og bit 0

Ekstern interrupt 0 aktiveres av den eksterne pinnen INT0 hvis SREG I-flagget og den tilsvarende avbrytelsesmasken er satt. Nivået og kantene på den eksterne INT0-pinnen som aktiverer avbruddet er definert i Tabell 9-2. Verdien på INT0-pinnen er sampledet før de oppdager kanter. Hvis kant- eller veksleavbrudd er valgt, vil pulser som varer lenger enn én klokkeperiode generere et avbrudd. Kortere pulser er ikke garantert å generere et avbrudd. Hvis lavt nivåavbrudd er valgt, må det lave nivået holdes til fullføringen av instruksjonen som utføres for øyeblikket for å generere et avbrudd.

Tabell 9-2. Avbryt 0 Sense Control

ISC01 ISC00 Beskrivelse
0 0 Det lave nivået av INT0 genererer en avbruddsforespørsel.
0 1 Enhver logisk endring på INT0 genererer en avbruddsforespørsel.
1 0 Den fallende kanten av INT0 genererer en avbruddsforespørsel.
1 1 Den stigende kanten av INT0 genererer en avbruddsforespørsel.

GIMSK - General Interrupt Mask Register

Bit 7 6 5 4 3 2 1 0
0x3B INT0 PCIE GIMSK
Les/skriv R R/W R/W R R R R R
Startverdi 0 0 0 0 0 0 0 0

Bits 7, 4: 0 - Res: Reservert Bits

Disse bitene er reserverte bits i ATtiny25 / 45/85 og vil alltid lese som null.

Bit 6 - INT0: Ekstern avbruddsforespørsel 0 Aktiver

Når INT0-biten er satt (en) og I-biten i statusregisteret (SREG) er satt (en), aktiveres den eksterne pinavbruddet. Interrupt Sense Control0 bits 1/0 (ISC01 og ISC00) i MCU Control Register (MCUCR) definerer om det eksterne avbruddet aktiveres ved stigende og / eller fallende kant av INT0-pinnen eller det registrerte nivået. Aktivitet på pinnen vil forårsake en avbruddsforespørsel, selv om INT0 er konfigurert som en utgang. Tilsvarende avbrudd av ekstern avbruddsforespørsel 0 utføres fra INT0 avbruddsvektor.

Bit 5 - PCIE: Pin Change Interrupt Enable

Når PCIE-biten er angitt (en) og I-biten i statusregisteret (SREG) er satt (en), er pin-endringsavbrudd aktivert. Enhver endring på en hvilken som helst aktivert PCINT [5: 0] -pinne vil føre til avbrudd. Den tilsvarende avbruddet i Pin Change Interrupt Request utføres fra PCI Interrupt Vector. PCINT [5: 0] -pinner aktiveres individuelt av PCMSK0-registeret.

GIFR - General Interrupt Flag Register

Bit 7 6 5 4 3 2 1 0
0x3A INTF0 PCIF GIFR
Les/skriv R R/W R/W R R R R R
Startverdi 0 0 0 0 0 0 0 0

Bits 7, 4: 0 - Res: Reservert Bits

Disse bitene er reserverte bits i ATtiny25 / 45/85 og vil alltid lese som null.

Bit 6 - INTF0: Eksternt avbruddsflagg 0

Når en kant- eller logisk endring på INT0-pinnen utløser en avbruddsforespørsel, blir INTF0 satt (en). Hvis I-biten i SREG og INT0-biten i GIMSK er satt (en), vil MCU hoppe til den tilsvarende avbrytelsesvektoren. Flagget tømmes når avbruddsrutinen utføres. Alternativt kan flagget tømmes ved å skrive en logisk til det. Dette flagget tømmes alltid når INT0 er konfigurert som et nivåavbrudd.

Bit 5 - PCIF: Pin Change Interrupt Flag

Når en logisk endring på en PCINT [5: 0] -pinne utløser en avbruddsforespørsel, blir PCIF satt (en). Hvis I-biten i SREG og PCIE-biten i GIMSK er satt (en), vil MCU hoppe til den tilsvarende avbruddsvektoren. Flagget tømmes når avbruddsrutinen utføres. Alternativt kan flagget tømmes ved å 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
Les/skriv R R R/W R/W R/W R/W R/W R/W
Startverdi 0 0 0 0 0 0 0 0

Bits 7: 6 - Res: Reservert Bits

Disse bitene er reserverte bits i ATtiny25 / 45/85 og vil alltid lese som null.

Bits 5: 0 - PCINT [5: 0]: Pin Change Enable Mask 5: 0

Hver PCINT [5: 0] -bit velger om pin-endringsavbrudd er aktivert på den tilsvarende I / O-pinnen. Hvis PCINT [5: 0] er angitt og PCIE-biten i GIMSK er satt, er pinnebrytingsavbrudd aktivert på den tilsvarende I / O-pinnen. Hvis PCINT [5: 0] er fjernet, deaktiveres pin-endringsavbrudd på den tilsvarende I / O-pinnen.

I/O-porter

Introduksjon

Alle AVR-porter har ekte Read-Modify-Write-funksjonalitet når de brukes som generelle digitale I/O-porter. Dette betyr at retningen til en portpinne kan endres uten å utilsiktet endre retningen til en annen pinne med SBI- og CBI-instruksjonene. Det samme gjelder ved endring av drivverdi (hvis konfigurert som utgang) eller aktivering/deaktivering av pull-up motstander (hvis konfigurert som inngang). Hver utgangsbuffer har symmetriske drivegenskaper med både høy synke- og kildekapasitet. Pin-driveren er sterk nok til å drive LED-skjermer direkte. Alle portstifter har individuelt valgbare pull-up motstander med en forsyningsvolumtage invariant motstand. Alle I/O-pinner har beskyttelsesdioder til både VCC og jord som angitt i Figur 10-1. Referer til “Elektriske egenskaper” på side 161 for en fullstendig liste over parametere.

Figur 10-1. I/O Pin Equivalent Schematic

Fig. 10

Alle registre og bitreferanser i denne delen er skrevet i generell form. En liten «x» representerer nummereringsbokstaven for porten, og en liten «n» representerer bitnummeret. Når du bruker register- eller bitdefinisjonene i et program, må imidlertid det presise skjemaet brukes. For eksample, PORTB3 for bit nr. 3 i Port B, her dokumentert generelt som PORTxn. De fysiske I/O -registerene og bitplasseringene er oppført i “Register Description” på side 64.

Tre I / O-minneadresselokasjoner er tildelt for hver port, en hver for dataregisteret - PORTx, dataretningsregister - DDRx og portinngangspinnene - PINx. Portens inngangspinner I / O-plassering er skrivebeskyttet, mens dataregisteret og dataretningsregisteret leses / skrives. Hvis du skriver en logikk en til en bit i PINx-registret, vil det imidlertid føre til en veksling i den tilsvarende biten i dataregisteret. I tillegg deaktiverer Pull-up Disable - PUD-biten i MCUCR pull-up-funksjonen for alle pinner i alle porter når den er satt.

Bruke I / O-porten som General Digital I / O er beskrevet i “Porter som generell digital I / U” på side 53. De fleste portpinner er multipleksede med alternative funksjoner for de perifere funksjonene på enheten. Hvordan hver alternative funksjon forstyrrer portporten er beskrevet i “Alternative portfunksjoner” på side 57. Se de enkelte modulavsnittene for en fullstendig beskrivelse av de alternative funksjonene.

Merk at aktivering av den alternative funksjonen til noen av portpinnene ikke påvirker bruken av de andre pinnene i porten som generell digital I / O.

Porter som generell digital I / U

Portene er toveis I / O-porter med valgfrie interne pull-ups. Figur 10-2 viser en funksjonell beskrivelse av en I / O-port pin, her generelt kalt Pxn.

Figur 10-2. Generell digital I/O(1)

Fig. 10

Konfigurere pin

Hver portpinne består av tre registerbiter: DDxn, PORTxn og PINxn. Som vist i “Register Description” på side 64, får du tilgang til DDxn-bitene ved DDRx I / O-adressen, PORTxn-bitene på PORTx I / O-adressen og PINxn-bitene ved PINx I / O-adressen.

DDxn-biten i DDRx-registeret velger retningen på denne pinnen. Hvis DDxn er skrevet logisk en, er Pxn konfigurert som en utgangsnål. Hvis DDxn er skrevet logisk null, er Pxn konfigurert som en inngangspinne.

Hvis PORTxn er skrevet logisk en når pinnen er konfigurert som en inngangspinne, blir opptrekksmotstanden aktivert. For å slå av motstandsmotstanden, må PORTxn skrives logisk null, eller pinnen må konfigureres som en utgangsstift. Portpinnene er tredelt når tilbakestillingstilstand blir aktiv, selv om ingen klokker er i gang.

Hvis PORTxn er skrevet logisk en når pinnen er konfigurert som en utgangspinne, blir portpinnen kjørt høyt (en). Hvis PORTxn skrives logisk null når pinnen er konfigurert som en utgangspinne, blir portpinnen kjørt lav (null).

Veksle pinnen

Ved å skrive en logisk en til PINxn bytter du verdien til PORTxn, uavhengig av verdien av DDRxn. Merk at SBI-instruksjonen kan brukes til å veksle en enkelt bit i en port.

Bytte mellom inngang og utgang

Når du bytter mellom tri-state ({DDxn, PORTxn} = 0b00) og utgang høy ({DDxn, PORTxn} = 0b11), en mellomtilstand med enten pull-up aktivert {DDxn, PORTxn} = 0b01) eller utgang lav ({DDxn, PORTxn} = 0b10) må forekomme. Normalt er pull-up-aktivert tilstand fullt akseptabel, da et høyimpedant miljø ikke vil merke forskjellen mellom en sterk høy driver og en pull-up. Hvis dette ikke er tilfelle, kan PUD-biten i MCUCR-registeret settes til å deaktivere alle pull-ups i alle porter.

Bytte mellom inngang med pull-up og output low genererer det samme problemet. Brukeren må bruke enten tri-state ({DDxn, PORTxn} = 0b00) eller output high state ({DDxn, PORTxn} = 0b10) som et mellomtrinn.

Tabell 10-1 oppsummerer styresignalene for pin-verdien.

Tabell 10-1. Port Pin-konfigurasjoner

DDxn PORTxn PUD

(i MCUCR)

I/O Opptrekk Kommentar
0 0 X Inndata Ingen Tri-state (Hi-Z)
0 1 0 Inndata Ja Pxn vil kildestrøm hvis ekst. trakk lavt.
0 1 1 Inndata Ingen Tri-state (Hi-Z)
1 0 X Produksjon Ingen Utgang lav (vask)
1 1 X Produksjon Ingen Utgang høy (kilde)

Lese PIN-verdien

Uavhengig av innstillingen av Data Direction bit DDxn, kan portpinnen leses gjennom PINxn Registerbit. Som vist i Figur 10-2, utgjør PINxn-registerbiten og den foregående låsen en synkroniseringsanordning. Dette er nødvendig for å unngå metastabilitet hvis den fysiske stiften endrer verdi nær kanten av den interne klokken, men det introduserer også en forsinkelse. Figur 10-3 viser et tidsdiagram for synkroniseringen ved lesing av en eksternt påført pin-verdi. Maksimum og minimum forplantningsforsinkelse er angitt henholdsvis tpd,max og tpd,min.

Tenk på klokkeperioden som begynner like etter den første fallende kanten av systemklokken. Låsen er lukket når klokken er lav, og blir gjennomsiktig når klokken er høy, som indikert av det skyggelagte området for “SYNC LATCH” -signalet. Signalverdien låses når systemklokken går lavt. Den er klokket inn i PINxn-registeret ved den etterfølgende positive klokkekanten. Som angitt av de to pilene tpd, max og tpd, min, vil en enkelt signalovergang på pinnen bli forsinket mellom ½ og 1 ½ systemklokkeperiode, avhengig av påstandstidspunktet.

Når du leser tilbake en programvare som er tilordnet pin-verdi, må det settes inn en nop-instruksjon som angitt i Figur 10-4. Ut-instruksjonen setter “SYNC LATCH” -signalet ved den positive kanten av klokken. I dette tilfellet er forsinkelsen tpd gjennom synkronisereren en systemklokkeperiode.

Følgende kode eksample viser hvordan du setter port B pinner 0 og 1 høy, 2 og 3 lav, og definerer port pinner fra 4 til 5 som inngang med en pull-up tilordnet port pin 4. De resulterende pin verdiene leses tilbake igjen, men som tidligere diskutert, er en nop-instruksjon inkludert for å kunne lese tilbake verdien som nylig ble tildelt noen av pinnene.

Monteringskode Eksample(1)

; Definer pull-ups og sett utganger høyt

; Definer retninger for portpinner

ldi        r16,(1<<PB4)|(1<<PB1)|(1<<PB0)

ldi        r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)

ut PORTB,r16

ut DDRB,r17

; Sett inn nop for synkronisering

nei

; Les portpinner

i r16, PINB

Merk: For monteringsprogrammet brukes to midlertidige registre for å minimere tiden fra pull-ups er satt på pinnene 0, 1 og 4, til retningsbitene er riktig innstilt, og definerer bit 2 og 3 som lav og redefinerer bit 0 og 1 som sterke høye sjåfører.

C-kode Eksample
usignert char i;

/* Definer pull-ups og sett utganger høye */

/* Definer retninger for portpinner */ PORTB = (1<

DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);

/* Sett inn nop for synkronisering*/

_NOP ();

/* Les portpinner */ i = PINB;

Aktiver digital inngang og hvilemodus

Som vist i Figur 10-2, kan det digitale inngangssignalet være clamped til jord ved inngangen til schmitt-triggeren. Signalet som er angitt SLEEP i figuren, settes av MCU Sleep Controller i Power-down-modus for å unngå høyt strømforbruk hvis noen inngangssignaler blir stående flytende, eller har et analogt signalnivå nær VCC/2.

SLEEP overstyres for portstifter som er aktivert som eksterne avbruddstifter. Hvis den eksterne avbruddsforespørselen ikke er aktivert, er SLEEP aktiv også for disse pinnene. SLEEP overstyres også av forskjellige andre alternative funksjoner som beskrevet i “Alternative portfunksjoner” på side 57.

Hvis et logisk høyt nivå ("én") er tilstede på en asynkron ekstern avbruddspinne konfigurert som "Avbrudd på stigende kant, fallende kant eller enhver logisk endring på pinne" mens det eksterne avbruddet ikke er aktivert, vil det tilsvarende eksterne avbruddsflagget stilles inn når du gjenopptar fra ovennevnte hvilemodus, som clamping i disse hvilemodusene produserer den forespurte logiske endringen.

Ukoblede pins

Hvis noen pinner ikke er i bruk, anbefales det å sikre at disse pinnene har et definert nivå. Selv om de fleste digitale innganger er deaktivert i dyp søvnmodus som beskrevet ovenfor, bør flytende innganger unngås for å redusere strømforbruket i alle andre moduser der de digitale inngangene er aktivert (Tilbakestill, Aktiv modus og inaktiv modus).

Den enkleste metoden for å sikre et definert nivå av en ubrukt pinne, er å aktivere intern pull-up. I dette tilfellet vil pull-up være deaktivert under tilbakestilling. Hvis lavt strømforbruk under tilbakestilling er viktig, anbefales det å bruke en ekstern pull-up eller pulldown. Det anbefales ikke å koble ubrukte pinner direkte til VCC eller GND, siden dette kan forårsake for høye strømmer hvis pinnene ved et uhell konfigureres som en utgang.

Alternative portfunksjoner

De fleste portpinner har alternative funksjoner i tillegg til å være generelle digitale I / Os. Figur 10-5 viser hvordan portstiften styresignaler fra det forenklede Figur 10-2 kan overstyres av alternative funksjoner. De overordnede signalene er kanskje ikke til stede i alle portpinnene, men figuren fungerer som en generell beskrivelse som gjelder alle portpinnene i AVR-mikrocontrollerfamilien.

Tabell 10-2. Generisk beskrivelse av overstyrende signaler for alternative funksjoner

Signalnavn Fullt navn Beskrivelse
PUOE Aktiver Pull-up Override Hvis dette signalet er innstilt, styres opptrekksaktivering av PUOV-signalet. Hvis dette signalet blir slettet, er pull-up aktivert når

{DDxn, PORTxn, PUD} = 0b010.

PUOV Overstyringsverdi for pull-up Hvis PUOE er satt, blir pull-up aktivert / deaktivert når PUOV er satt / fjernet, uavhengig av innstillingen av DDxn, PORTxn og PUD Register bits.
DDOE Data Retning Override Enable Hvis dette signalet er satt, blir Output Driver Enable kontrollert av DDOV-signalet. Hvis dette signalet slettes, aktiveres utgangsdriveren av DDxn-registerbiten.
DDOV Dataretning tilsidesetter verdi Hvis DDOE er angitt, blir utgangsdriveren aktivert / deaktivert når DDOV er satt / fjernet, uavhengig av innstillingen til DDxn Registerbit.
PVOE Overskrid portverdi Aktiver Hvis dette signalet er satt og utgangsdriveren er aktivert, blir portverdien styrt av PVOV-signalet. Hvis PVOE er fjernet, og utgangsdriveren er aktivert, blir portverdien kontrollert av PORTxn-registerbiten.
PVOV Portverdier tilsidesetter verdi Hvis PVOE er satt, settes portverdien til PVOV, uavhengig av innstillingen til PORTxn Registerbit.
PTOE Port Toggle Override Aktiver Hvis PTOE er satt, blir PORTxn Register-bit invertert.
DIEOE Digital Input Enable Override Aktiver Hvis denne biten er satt, styres digital inngangsaktivering av DIEOV-signalet. Hvis dette signalet slettes, bestemmes Digital Input Enable av MCU-tilstand (Normal modus, hvilemodus).
DIEOV Digital inngang muliggjør overstyringsverdi Hvis DIEOE er angitt, aktiveres / deaktiveres den digitale inngangen når DIEOV er satt / fjernet, uavhengig av MCU-tilstand (Normal modus, hvilemodus).
DI Digital inngang Dette er den digitale inngangen til alternative funksjoner. På figuren er signalet koblet til utgangen til schmitt-utløseren, men før synkronisereren. Med mindre den digitale inngangen brukes som en klokkilde, vil modulen med den alternative funksjonen bruke sin egen synkronisering.
AIO Analog inngang / utgang Dette er den analoge inngangen / utgangen til / fra alternative funksjoner. Signalet er koblet direkte til puten, og kan brukes toveis.

De følgende underavsnittene beskriver kort tid de alternative funksjonene for hver port, og relaterer de overordnede signalene til den alternative funksjonen. Se den alternative funksjonsbeskrivelsen for ytterligere detaljer.

Alternative funksjoner i port B

Port B-pinnene med alternativ funksjon er vist i Tabell 10-3.

Tabell 10-3. Alternative funksjoner for port B-pinner

Portpinne Alternativ funksjon
PB5

RESET: Tilbakestill pin

dW: debugWIRE I / O ADC0: ADC Inngangskanal 0

PCINT5: Pin Change Interrupt, Kilde 5

PB4 XTAL2: Krystalloscillatorutgang CLKO: Systemklokkeutgang ADC2: ADC-inngangskanal 2

OC1B: Timer / Counter1 Sammenlign Match B-utgang PCINT4: Pin Change Interrupt 0, Source 4

PB3 XTAL1: Krystalloscillatorinngang CLKI: Ekstern klokkeinngang ADC3: ADC-inngangskanal 3

OC1B: Komplementær timer / teller1 Sammenlign kamp B-utgang PCINT3: Pin Change Interrupt 0, Source 3

PB2 SCK: Serial Clock Input ADC1: ADC Input Channel 1

T0: Timer / Counter0 Clock Source USCK: USI Clock (Three Wire Mode) SCL: USI Clock (Two Wire Mode) INT0: External Interrupt 0 Input PCINT2: Pin Change Interrupt 0, Source 2

PB1 MISO: SPI Master Data Input / Slave Data Output AIN1: Analog Comparator, Negative Input OC0B: Timer / Counter0 Compare Match B Output OC1A: Timer / Counter1 Compare Match A Output DO: USI Data Output (Three Wire Mode) PCINT1: Pin Change Interrupt 0, Kilde 1
PB0 MOSI :: SPI Master Data Output / Slave Data Input AIN0: Analog Comparator, Positive Input

OC0A: Timer/Teller0 Sammenlign Match A-utgang

OC1A: Komplementær timer / teller1 Sammenlign match A-utgang DI: USI-datainngang (tre-ledningsmodus)

SDA: USI Data Input (Two Wire Mode) AREF: External Analog Reference PCINT0: Pin Change Interrupt 0, Source 0

Port B, bit 5 - RESET / dW / ADC0 / PCINT5

RESET: Ekstern tilbakestillingsinngang er aktiv lav og aktivert ved å ikke programmere (“1”) RSTDISBL-sikringen. Pullup er aktivert og utgangsdriver og digital inngang deaktiveres når pinnen brukes som RESET-pinne.

dW: Når debugWIRE Enable (DWEN) -sikringen er programmert og låsebitene ikke er programmert, aktiveres debugWIRE-systemet i målenheten. RESET-portpinnen er konfigurert som en wire-AND (open-drain) toveis I / O-pinne med pull-up aktivert og blir kommunikasjonsportalen mellom mål og emulator.

ADC0: Analog til digital omformer, kanal 0.

PCINT5: Pin Change Interrupt-kilde 5.

Port B, bit 4 - XTAL2 / CLKO / ADC2 / OC1B / PCINT4

XTAL2: Chip Clock Oscillator pin 2. Brukes som klokkepinne for alle chipklokkilder unntatt intern kalibrering av RC Oscillator og ekstern klokke. Når den brukes som en klokkepinne, kan ikke pinnen brukes som en I / O-pinne. Når du bruker intern kalibrerbar RC-oscillator eller ekstern klokke som en Chip Clock-kilde, fungerer PB4 som en vanlig I / O-pin.

CLKO: Den delte systemklokken kan sendes ut på pinnen PB4. Den delte systemklokken vil bli sendt ut hvis CKOUT-sikringen er programmert, uavhengig av PORTB4- og DDB4-innstillingene. Det vil også bli sendt ut under tilbakestilling.

ADC2: Analog til digital omformer, kanal 2.

OC1B: Output Compare Match output: PB4-pinnen kan fungere som en ekstern utgang for Timer / Counter1 Compare Match B når den er konfigurert som en utgang (DDB4-sett). OC1B-pinnen er også utgangspinnen for PWM-modus-timerfunksjonen.

PCINT4: Pin Change Interrupt-kilde 4.

Port B, bit 3 - XTAL1 / CLKI / ADC3 / OC1B / PCINT3

XTAL1: Chip Clock Oscillator pin 1. Brukes til alle chipklokkilder unntatt intern kalibrerbar RC-oscillator. Når den brukes som en klokkepinne, kan ikke pinnen brukes som en I / O-pinne.

CLKI: Klokkeinngang fra en ekstern klokkilde, se “Ekstern klokke” på side 26.

ADC3: Analog til digital omformer, kanal 3.

OC1B: Inverted Output Compare Match output: PB3-pinnen kan fungere som en ekstern utgang for Timer / Counter1 Compare Match B når den er konfigurert som en utgang (DDB3-sett). OC1B-pinnen er også den omvendte utgangspinnen for PWM-modus-timerfunksjonen.

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 for SPI channel. Når SPI er aktivert som en slave, er denne pinnen konfigurert som en inngang uavhengig av innstillingen til DDB2. Når SPI er aktivert som en master, styres dataretningen til denne pinnen av DDPB2. Når pinnen blir tvunget av SPI til å være en inngang, kan pull-up fortsatt styres av PORTB2-biten.

ADC1: Analog til digital omformer, kanal 1.

T0: Timer / Counter0 teller kilde.

USCK: Tre-tråds modus Universal Serial Interface Clock.

SCL: To-leder modus Seriell klokke for USI To-leder modus.

INT0: Ekstern avbruddskilde 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 for SPI channel. Når SPI er aktivert som en master, er denne pinnen konfigurert som en inngang uavhengig av innstillingen til DDB1. Når SPI er aktivert som en slave, styres dataretningen til denne pinnen av DDB1. Når stiften blir tvunget av SPI til å være en inngang, kan pull-up fortsatt styres av PORTB1-biten.

AIN1: Analog komparator negativ inngang. Konfigurer portpinnen som inngang med den interne pull-up slått av for å unngå at den digitale portfunksjonen forstyrrer funksjonen til Analog Comparator.

OC0B: Output Compare Match output. PB1-pinnen kan fungere som en ekstern utgang for Timer / Counter0 Compare Match B. PB1-pinnen må konfigureres som en utgang (DDB1-sett (en)) for å betjene denne funksjonen. OC0B-pinnen er også utgangspinnen for PWM-modus-timerfunksjonen.

OC1A: Output Compare Match output: PB1-pinnen kan fungere som en ekstern utgang for Timer / Counter1 Compare Match B når den er konfigurert som en utgang (DDB1-sett). OC1A-pinnen er også utgangspinnen for PWM-modus-timerfunksjonen.

DO: Tre-leder modus Universal Serial Interface Data-utgang. Tre-leder-modus Datautgang overstyrer PORTB1-verdien, og den kjøres til porten når dataretningsbit DDB1 er satt (en). PORTB1 aktiverer fremdeles trekkopp, hvis retningen er inngang og PORTB1 er satt (en).

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 for SPI channel. Når SPI er aktivert som en slave, er denne pinnen konfigurert som en inngang uavhengig av innstillingen til DDB0. Når SPI er aktivert som en master, styres dataretningen til denne pinnen av DDB0. Når stiften blir tvunget av SPI til å være en inngang, kan fremtrekningen fortsatt styres av PORTB0-biten.

AIN0: Positiv inngang for analog komparator. Konfigurer portpinnen som inngang med den interne pull-up slått av for å unngå at den digitale portfunksjonen forstyrrer funksjonen til Analog Comparator.

OC0A: Output Compare Match output. PB0-pinnen kan fungere som en ekstern utgang for Timer / Counter0 Compare Match A når den er konfigurert som en output (DDB0-sett (en)). OC0A-pinnen er også utgangspinnen for PWM-modus-timerfunksjonen.

OC1A: Inverted Output Compare Match output: PB0-pinnen kan fungere som en ekstern utgang for Timer / Counter1 Compare Match B når den er konfigurert som en utgang (DDB0-sett). OC1A-pinnen er også den omvendte utgangspinnen for PWM-modus-timerfunksjonen.

SDA: To-ledermodus Serial Interface Data.

AREF: Ekstern analog referanse for ADC. Pullup og output driver er deaktivert på PB0 når pinnen brukes som en ekstern referanse eller Internal Voltage Referanse med ekstern kondensator ved AREF-pinnen.

DI: Datainngang i USI tre-leder modus. USI Tre-ledermodus overstyrer ikke normale portfunksjoner, så pin må konfigureres som en inngang for DI-funksjon.

PCINT0: Pin Change Interrupt-kilde 0.

Tabell 10-4 og Tabell 10-5 relatere de alternative funksjonene til port B til de overordnede signalene vist i Figur 10-5 på side 58.

Tabell 10-4. Overstyre signaler for alternative funksjoner i PB[5:3]

Signalnavn PB5 / RESET / ADC0 / PCINT5 PB4/ADC2/XTAL2/ OC1B/PCINT4 PB3/ADC3/XTAL1/ OC1B/PCINT3
PUOE

RSTDISBL(1) • DWEN(1)

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-inngang PCINT4-inngang PCINT3-inngang
AIO RESET-inngang, ADC0-inngang ADC2-inngang ADC3-inngang

Merk: når sikringen er "0" (programmert).

Tabell 10-5. Overstyre signaler for alternative funksjoner i PB[2:0]

Signalnavn 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 Aktiver + OC1A Aktiver + USI_THREE_WIRE

OC0A Aktiver + OC1A Aktiver + (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-inngang

PCINT1-inngang DI / SDA / PCINT0-inngang
AIO ADC1-inngang Analog komparator negativ inngang Analog komparator positiv inngang

Registerbeskrivelse

MCUCR - MCU-kontrollregister

Bit 7 6 5 4 3 2 1 0
0x35 BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Les/skriv R R/W R/W R/W R/W R R/W R/W
Startverdi 0 0 0 0 0 0 0 0

Bit 6 - PUD: Pull-up Disable

Når denne biten skrives til en, deaktiveres pull-ups i I / O-portene selv om DDxn- og PORTxn-registerene er konfigurert til å aktivere pull-ups ({DDxn, PORTxn} = 0b01). Se “Konfigurere pinnen” på side 54 for mer informasjon om denne funksjonen.

PORTB - Port B Data Register

Bit 7 6 5 4 3 2 1 0
0x18 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB
Les/skriv R R R/W R/W R/W R/W R/W R/W
Startverdi 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
Les/skriv R R R/W R/W R/W R/W R/W R/W
Startverdi 0 0 0 0 0 0 0 0

PINB - Adresse for inngangspinner for port B

Bit 7 6 5 4 3 2 1 0
0x16 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB
Les/skriv R R R/W R/W R/W R/W R/W R/W
Startverdi 0 0 N/A N/A N/A N/A N/A N/A

8-biters timer / teller0 med PWM

Funksjoner

To uavhengige utgangssammenligningsenheter

Dobbeltbufret sammenligningsregistre

Fjern timeren ved sammenligning av samsvar (automatisk på nytt)

Glitchfri, fasekorrigert pulsbreddemodulator (PWM)

Variabel PWM-periode

Frekvensgenerator

Tre uavhengige avbruddskilder (TOV0, OCF0A og OCF0B)

Overview

Timer / Counter0 er en 8-bit timer / counter-modul for generell bruk, med to uavhengige utgangssammenligningsenheter, og med PWM-støtte. Det tillater nøyaktig programkjøringstid (hendelsesstyring) og bølgenerering.

Et forenklet blokkdiagram over 8-biters timer / teller er vist i Figur 11-1. For den faktiske plasseringen av I / O-pinner, se “Pinout ATtiny25 / 45/85” på side 2. CPU-tilgjengelige I / O-registre, inkludert I / O-biter og I / O-pinner, vises i fet skrift. Enhetsspesifikk I / O-register og bitplasser er oppført i “Registrer beskrivelse” på side 77.

Timer/Counter (TCNT0) og Output Compare Register (OCR0A og OCR0B) er 8-bits registre. Avbruddsforespørsel (forkortet til Int.Req. i figuren) signaler er alle synlige i Timer Interrupt Flag Register (TIFR). Alle avbrudd er individuelt maskert med Timer Interrupt Mask Register (TIMSK). TIFR og TIMSK er ikke vist i figuren.

Timeren/telleren kan klokkes internt, via forskaleren, eller av en ekstern klokkekilde på T0-pinnen. Klokkevalg-logikkblokken kontrollerer hvilken klokkekilde og flanke timeren/telleren bruker for å øke (eller redusere) verdien. Timeren/telleren er inaktiv når ingen klokkekilde er valgt. Utgangen fra Clock Select-logikken blir referert til som timerklokken (clkT0).

De dobbeltbufrede utgangssammenligningsregistrene (OCR0A og OCR0B) sammenlignes til enhver tid med verdien for timer / teller. Resultatet av sammenligningen kan brukes av Waveform Generator til å generere en PWM eller variabel frekvensutgang på Output Compare-pins (OC0A og OC0B). Se “Enhet for sammenligning av utgang” på side 69. for detaljer. Hendelsen Sammenlign kamp vil også angi sammenligningsflagget (OCF0A eller OCF0B) som kan brukes til å generere en forespørsel om avbrudd for utgangssammenlign.

Definisjoner

Mange register- og bitreferanser i denne delen er skrevet i generell form. Et små bokstav “n” erstatter Timer / Counter-nummeret, i dette tilfellet 0. Et små bokstav “x” erstatter Output Compare Unit, i dette tilfellet Sammenlign Unit A eller Compare Unit B. Imidlertid, når du bruker registeret eller bitdefinerer i et program må det presise skjemaet brukes, dvs. TCNT0 for å få tilgang til Timer / Counter0-tellerverdien og så videre.

Definisjonene i Tabell 11-1 brukes også mye i hele dokumentet.

Tabell 11-1. Definisjoner

Konstant Beskrivelse
BUNN Telleren når BUNN når den blir 0x00
MAKS Telleren når sitt MAXimum når den blir 0xFF (desimal 255)
TOPP Telleren når TOPPEN når den blir lik den høyeste verdien i tellesekvensen. TOP-verdien kan tilordnes til å være den faste verdien 0xFF (MAX) eller verdien som er lagret i OCR0A-registeret. Oppgaven avhenger av driftsmåten

Timer / Counter Prescaler og Clock Kilder

Timeren / telleren kan klokkes av en intern eller en ekstern klokkilde. Klokkilden velges av Clock Select-logikken som styres av Clock Select (c) -bitene som ligger i Timer / Counter0 Control Register (TCCR0B).

Intern klokkilde med prescaler

Timer/Counter0 kan klokkes direkte av systemklokken (ved å sette CS0[2:0] = 1). Dette gir den raskeste operasjonen, med en maksimal tidtaker/tellerklokkefrekvens lik systemklokkefrekvens (fCLK_I/O). Alternativt kan ett av fire trykk fra forskaleren brukes som klokkekilde. Den forhåndsskalerte klokken har en frekvens på enten

Rescaler Reset

Forskaleren kjører fritt, dvs. den fungerer uavhengig av klokkevalglogikken til Timer/Counter0. Siden prescaler ikke påvirkes av tidtakeren/tellerens klokkevalg, vil tilstanden til prescaleren ha implikasjoner for situasjoner der en forhåndsskalert klokke brukes. En eksample av en forhåndsskaleringsartefakt er når tidtakeren/telleren er aktivert og klokket av forhåndsskaleren (6 > CS0[2:0] > 1). Antall systemklokkesykluser fra når timeren er aktivert til den første tellingen skjer, kan være fra 1 til N+1 systemklokkesykluser, hvor N er lik forkalkningsdeleren (8, 64, 256 eller 1024).

Det er mulig å bruke Prescaler Reset for å synkronisere Timer / Counter til programutførelse.

Ekstern klokkilde

En ekstern klokkekilde påført T0-pinnen kan brukes som timer/tellerklokke (clkT0). T0-pinnen er sampledet en gang hver systemklokkesyklus av pin-synkroniseringslogikken. Den synkroniserte (sampled) signalet sendes deretter

gjennom kantdetektoren. Figur 11-2 viser et funksjonelt ekvivalent blokkskjema over T0-synkronisering og kantdetektorlogikk. Registrene klokkes ved den positive kanten av den interne systemklokken (clkI/O). Låsen er gjennomsiktig i den høye perioden til den interne systemklokken.

Kantdetektoren genererer én clkT0-puls for hver positiv (CS0[2:0] = 7) eller negativ (CS0[2:0] = 6) kant den oppdager.

OCR0x-registerene er dobbeltbufret når du bruker noen av PWM-modusene (Pulse Width Modulation). For normal og Clear Timer on Compare (CTC) -modus, er dobbel buffering deaktivert. Dobbelbufferen synkroniserer oppdateringen av OCR0x Compare Registers til toppen eller bunnen av tellesekvensen. Synkroniseringen forhindrer forekomst av ulige lengde, ikke-symmetriske PWM-pulser, og gjør dermed utgangen glitchfri.

OCR0x-registertilgangen kan virke komplisert, men dette er ikke tilfelle. Når dobbel buffering er aktivert, har CPU tilgang til OCR0x Buffer Register, og hvis dobbel buffering er deaktivert, vil CPU få tilgang til OCR0x direkte.

Force Output Sammenlign

I moduser som ikke genererer PWM-bølgeform, kan sammenligningsutgangen til komparatoren tvinges ved å skrive en til Force Output Compare (FOC0x) -bit. Tvinge sammenligningskamp vil ikke sette OCF0x-flagget eller laste inn / slette tidtakeren, men OC0x-pinnen vil oppdateres som om det hadde skjedd en ekte sammenligningskamp (COM0x [1: 0] bitsinnstillingene definerer om OC0x-pinnen er satt, tømt eller vekslet).

Sammenlign Match Blocking av TCNT0 Skriv

Alle CPU-skriveoperasjoner til TCNT0-registeret vil blokkere alle Sammenlign Match som oppstår i neste tidssyklus, også når timeren er stoppet. Denne funksjonen gjør at OCR0x kan initialiseres til samme verdi som TCNT0 uten å utløse et avbrudd når tidsur / tellerklokke er aktivert.

Bruke Output Compare Unit

Siden skriving av TCNT0 i en hvilken som helst driftsmodus vil blokkere alle sammenligningskamper for en tidssyklus, er det risiko forbundet med å endre TCNT0 når du bruker Output Compare Unit, uavhengig av om timeren / telleren er i gang eller ikke. Hvis verdien skrevet til TCNT0 er lik OCR0x-verdien, vil sammenligningskampen bli savnet, noe som resulterer i feil bølgeformgenerering. På samme måte, ikke skriv TCNT0-verdien som er BUNN når telleren teller ned.

Oppsettet av OC0x bør utføres før du setter dataregistreringsregisteret for portpinnen som skal sendes ut. Den enkleste måten å stille inn OC0x-verdien på er å bruke Force Output Compare (FOC0x) strobebiter i normal modus. OC0x-registrene beholder verdiene sine selv når du bytter mellom Waveform Generation-modus.

Vær oppmerksom på at COM0x [1: 0] bitene ikke er dobbeltbufret sammen med sammenligningsverdien. Endring av COM0x [1: 0] -bitene trer i kraft umiddelbart.

Sammenlign Match Output Unit

Bitsene Sammenlign utdata (COM0x [1: 0]) har to funksjoner. Waveform Generator bruker COM0x [1: 0] bitene for å definere Output Compare (OC0x) tilstand ved neste Compare Match. Dessuten styrer COM0x [1: 0] bitene OC0x pin-utgangskilden. Figur 11-6 viser en forenklet skjematisk oversikt over logikken som påvirkes av COM0x [1: 0] bitinnstillingen. I / O-registerene, I / O-bitene og I / O-pinnene i figuren vises i fet skrift. Bare delene av de generelle I / O-portkontrollregistrene (DDR og PORT) som er berørt av COM0x [1: 0] -bitene vises. Når det refereres til OC0x-tilstanden, er referansen til det interne OC0x-registeret, ikke OC0x-pinnen. Hvis det oppstår en tilbakestilling av systemet, blir OC0x-registeret tilbakestilt til "0".

Når OC0A / OC0B er koblet til I / O-pinnen, avhenger funksjonen til COM0A [1: 0] / COM0B [1: 0] bitene av WGM0 [2: 0] bitinnstillingen. Tabell 11-2 viser COM0x [1: 0] bit funksjonalitet når WGM0 [2: 0] bitene er satt til en normal eller CTC modus (ikke-PWM).

Tabell 11-2. Sammenlign utgangsmodus, ikke-PWM-modus

COM0A1 COM0B1 COM0A0 COM0B0 Beskrivelse
0 0 Normal portdrift, OC0A / OC0B frakoblet.
0 1 Bytt OC0A / OC0B på Compare Match
1 0 Fjern OC0A / OC0B på Compare Match
1 1 Sett OC0A / OC0B på Compare Match

Tabell 11-3 viser COM0x [1: 0] bitfunksjonalitet når WGM0 [2: 0] bitene er satt til rask PWM-modus.

Tabell 11-3. Sammenlign utgangsmodus, rask PWM-modus(1)

COM0A1 COM0B1 COM0A0 COM0B0 Beskrivelse
0 0 Normal portdrift, OC0A / OC0B frakoblet.
0 1 Reservert
1 0 Fjern OC0A / OC0B på Compare Match, sett OC0A / OC0B på BOTTOM (ikke-inverterende modus)
1 1 Sett OC0A / OC0B på Compare Match, fjern OC0A / OC0B nederst (inverteringsmodus)

Merk: Et spesielt tilfelle oppstår når OCR0A eller OCR0B er lik TOP og COM0A1/COM0B1 er satt. I dette tilfellet ignoreres sammenligningsmatchen, men setting eller sletting gjøres NEDERST. Se “Rask PWM-modus” på side 73 for flere detaljer.

Tabell 11-4 viser COM0x [1: 0] bit funksjonalitet når WGM0 [2: 0] bitene er satt til fasekorrekt PWM modus.

Tabell 11-4. Sammenlign Output Mode, Phase Correct PWM Mode(1)

COM0A1 COM0B1 COM0A0 COM0B0 Beskrivelse
0 0 Normal portdrift, OC0A / OC0B frakoblet.
0 1 Reservert
1 0 Fjern OC0A / OC0B på Compare Match når du teller opp. Sett OC0A / OC0B på Compare Match når nedtelling.
1 1 Sett OC0A / OC0B på Compare Match når du teller opp. Fjern OC0A / OC0B på Compare Match når nedtelling.

Merk: 1. Et spesielt tilfelle oppstår når OCR0A eller OCR0B er lik TOP og COM0A1/COM0B1 er satt. I dette tilfellet ignoreres Compare Match, men innstillingen eller slettingen gjøres på TOPP. Se “Fasekorrekt PWM-modus” på side 74 for flere detaljer.

Bits 3: 2 - Res: Reservert Bits

Disse bitene er reserverte bits i ATtiny25 / 45/85 og vil alltid lese som null.

Bits 1: 0 - WGM0 [1: 0]: Waveform Generation Mode

Kombinert med WGM02-biten som finnes i TCCR0B-registeret, styrer disse bitene telleresekvensen til telleren, kilden for maksimal (TOP) tellerverdi, og hvilken type bølgeformgenerering som skal brukes, se Tabell 11-5. Driftsmåter som støttes av Timer / Counter-enheten er: Normal modus (counter), Clear Timer on Compare Match (CTC) -modus, og to typer PWM-modus (Pulse Width Modulation) (se “Driftsmåter” på side 71).

Tabell 11-5. Bølgeformgenereringsmodus Bitbeskrivelse

Modus WGM 02 WGM 01 WGM 00 Timer / Counter Mode of Operation TOPP Oppdatering av OCRx kl TOV Flag Set på
0 0 0 0 Normal 0xFF Umiddelbar MAKS(1)
1 0 0 1 PWM, fasekorrekt 0xFF TOPP BUNN(2)
2 0 1 0 CTC OCRA Umiddelbar MAKS(1)
3 0 1 1 Rask PWM 0xFF BUNN(2) MAKS(1)
4 1 0 0 Reservert
5 1 0 1 PWM, fasekorrekt OCRA TOPP BUNN(2)
6 1 1 0 Reservert
7 1 1 1 Rask PWM OCRA BUNN(2) TOPP

Bit 7 - FOC0A: Sammenlign kraftutgang A

FOC0A-biten er bare aktiv når WGM-bitene spesifiserer en ikke-PWM-modus.

For å sikre kompatibilitet med fremtidige enheter må denne biten imidlertid settes til null når TCCR0B skrives når du opererer i PWM-modus. Når du skriver en logisk til FOC0A-biten, blir en øyeblikkelig sammenligningstilpasning tvunget til Waveform Generation-enheten. OC0A-utgangen endres i henhold til innstillingen COM0A [1: 0] bits. Merk at FOC0A-biten er implementert som en strobe. Derfor er det verdien som er tilstede i COM0A [1: 0] -bitene som bestemmer effekten av tvungen sammenligning.

En FOC0A-strobe vil ikke generere noen avbrudd, og den vil heller ikke fjerne timeren i CTC-modus ved å bruke OCR0A som TOPP. FOC0A-biten blir alltid lest som null.

Bit 6 - FOC0B: Sammenlign kraftutgang B

FOC0B-biten er bare aktiv når WGM-bitene spesifiserer en ikke-PWM-modus.

For å sikre kompatibilitet med fremtidige enheter, må denne biten imidlertid settes til null når TCCR0B skrives når du opererer i PWM-modus. Når du skriver en logisk til FOC0B-biten, tvinges en umiddelbar sammenligningskamp på Waveform Generation-enheten. OC0B-utgangen endres i henhold til innstillingen for COM0B [1: 0] bits. Merk at FOC0B-biten er implementert som en strobe. Derfor er det verdien som er tilstede i COM0B [1: 0] -bitene som bestemmer effekten av tvungen sammenligning.

En FOC0B-strobe vil ikke generere noen avbrudd, og den vil heller ikke fjerne timeren i CTC-modus ved å bruke OCR0B som TOPP.

FOC0B-biten blir alltid lest som null.

Bits 5: 4 - Res: Reservert Bits

Disse bitene er reserverte bits i ATtiny25 / 45/85 og vil alltid lese som null.

Bit 3 - WGM02: Waveform Generation Mode

Se beskrivelsen i “TCCR0A - Timer / Counter Control Register A” på side 77.

Bits 2: 0 - CS0 [2: 0]: Clock Clock

De tre Clock Select-bitene velger klokkilden som skal brukes av Timer / Counter.

Tabell 11-6. Klokkevelg bitbeskrivelse

CS02 CS01 CS00 Beskrivelse
0 0 0 Ingen klokkilde (Timer / Teller stoppet)
0 0 1 clkI/O/(Ingen forhåndsskalering)
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 klokkilde på T0-pin. Klokke på fallende kant.
1 1 1 Ekstern klokkilde på T0-pin. Klokke på stigende kant.

Hvis eksterne pin-modus brukes for Timer / Counter0, vil overgangene på T0-pin-en klokke telleren selv om pinnen er konfigurert som en utgang. Denne funksjonen tillater programvarekontroll av tellingen.

Motvirke og sammenligne enheter

Den generelle operasjonen Timer / Counter1 er beskrevet i asynkron modus, og operasjonen i synkronmodus er bare nevnt hvis det er forskjeller mellom disse to modusene. Figur 12-2 viser Timer / Counter 1 synkroniseringsregisterblokkdiagram og synkroniseringsforsinkelser mellom registerene. Vær oppmerksom på at alle klokkeinformasjon ikke vises på figuren. Timer / Counter1-registerverdiene går gjennom de interne synkroniseringsregistrene, som forårsaker inngangssynkroniseringsforsinkelse, før de påvirker telleroperasjonen. Registerene TCCR1, GTCCR, OCR1A, OCR1B og OCR1C kan leses tilbake rett etter at du har skrevet registeret. Tilbakestillingsverdiene er forsinket for Timer / Counter1 (TCNT1) -registeret og flaggene (OCF1A, OCF1B og TOV1) på grunn av inngangs- og utgangssynkroniseringen.

Timer / Counter1 har høy oppløsning og høy nøyaktighetsbruk med lavere forhåndsskaleringsmuligheter. Den kan også støtte to nøyaktige, 8-biters pulsbreddemodulatorer med høy hastighet ved bruk av klokkehastigheter på opptil 64 MHz (eller 32 MHz i lavhastighetsmodus). I denne modusen fungerer Timer / Counter1 og utgangssammenligningsregistrene som doble frittstående PWM-er med ikke-overlappende ikke-inverterte og inverterte utganger. Referere til side 86 for en detaljert beskrivelse av denne funksjonen. På samme måte gjør de høye forhåndsskaleringsmulighetene denne enheten nyttig for funksjoner med lavere hastighet eller nøyaktige tidsfunksjoner med sjeldne handlinger.

Figur 12-2. Tidsur/teller 1 Synkroniseringsregister Blokkdiagram.

Timer / Counter1 og prescaler tillater å kjøre CPU fra hvilken som helst klokkekilde mens prescaler fungerer på den raske 64 MHz (eller 32 MHz i Low Speed ​​Mode) PCK-klokken i asynkron modus.

Merk at systemets klokkefrekvens må være lavere enn en tredjedel av PCK-frekvensen. Synkroniseringsmekanismen til den asynkrone timeren / telleren 1 trenger minst to kanter på PCK når systemklokken er høy. Hvis frekvensen til systemklokken er for høy, er det en risiko for at data eller kontrollverdier går tapt.

Følgende Figur 12-3 viser blokkdiagrammet for Timer / Counter1.

Tabell 12-1. Sammenlign modus Velg i PWM-modus

COM1x1 COM1x0 Effekt på utgangssammenlign pins
0 0 OC1x ikke tilkoblet. OC1x ikke tilkoblet.
0 1 OC1x tømt på sammenligningskamp. Still inn når TCNT1 = $ 00. OC1x satt på sammenligningskamp. Fjernet når TCNT1 = $ 00.
1 0 OC1x tømt på sammenligningskamp. Angi når TCNT1 = $ 00. OC1x ikke tilkoblet.
1 1 OC1x Sett på sammenligningskamp. Fjernet når TCNT1 = $ 00. OC1x ikke tilkoblet.

ADC-egenskaper

Tabell 21-8. ADC-egenskaper, enkeltsluttede kanaler. TA = -40°C til +85°C

Symbol Parameter Betingelse Min Typ Maks Enheter
Oppløsning 10 Bits
Absolutt nøyaktighet (inkludert INL-, DNL- og kvantiserings-, gevinst- og forskyvningsfeil) VREF = 4V, VCC = 4V,

ADC-klokke = 200 kHz

2 LSB
VREF = 4V, VCC = 4V,

ADC-klokke = 1 MHz

3 LSB
VREF = 4V, VCC = 4V,

ADC-klokke = 200 kHz

Støyreduksjonsmodus

1.5 LSB
VREF = 4V, VCC = 4V,

ADC-klokke = 1 MHz

Støyreduksjonsmodus

2.5 LSB
Integral Non-linearity (INL) (Nøyaktighet etter forskyvning og forsterkningskalibrering) VREF = 4V, VCC = 4V,

ADC-klokke = 200 kHz

1 LSB
Differensiell ikke-linearitet (DNL) VREF = 4V, VCC = 4V,

ADC-klokke = 200 kHz

0.5 LSB
Få feil VREF = 4V, VCC = 4V,

ADC-klokke = 200 kHz

2.5 LSB
Forskyvningsfeil VREF = 4V, VCC = 4V,

ADC-klokke = 200 kHz

1.5 LSB
Konverteringstid Gratis løpekonvertering 14 280 ps
Klokkefrekvens 50 1000 kHz
VIN Inngang Voltage GND VREF V
Inngang båndbredde 38.4 kHz
AREF Ekstern referanse Voltage 2.0 VCC V
VINT Intern voltage Referanse 1.0 1.1 1.2 V
Intern 2.56V referanse (1) VCC > 3.0V 2.3 2.56 2.8 V
RREF 32
REGN Analog inngangsmotstand 100
ADC-utgang 0 1023 LSB

Merk: 1. Verdier er kun retningslinjer.

Tabell 21-9. ADC-karakteristikk, differensialkanaler (unipolar modus). TA = -40°C til +85°C

Symbol Parameter Betingelse Min Typ Maks Enheter
Oppløsning Gevinst = 1x 10 Bits
Gevinst = 20x 10 Bits
Absolutt nøyaktighet (inkludert INL, DNL og

Kvantisering, gevinst og kompensasjonsfeil)

Gevinst = 1x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

10.0 LSB
Gevinst = 20x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

20.0 LSB
Integral Non-Linearity (INL) (Nøyaktighet etter forskyvning og forsterkningskalibrering) Gevinst = 1x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

4.0 LSB
Gevinst = 20x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

10.0 LSB
Få feil Gevinst = 1x 10.0 LSB
Gevinst = 20x 15.0 LSB
Forskyvningsfeil Gevinst = 1x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

3.0 LSB
Gevinst = 20x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

4.0 LSB
Konverteringstid Gratis løpekonvertering 70 280 ps
Klokkefrekvens 50 200 kHz
VIN Inngang Voltage GND VCC V
VDIFF Inngangsdifferensial Voltage VREF/Gevinst V
Inngang båndbredde 4 kHz
AREF Ekstern referanse Voltage 2.0 VCC – 1.0 V
VINT Intern voltage Referanse 1.0 1.1 1.2 V
Intern 2.56V referanse (1) VCC > 3.0V 2.3 2.56 2.8 V
RREF Referanse inngangsmotstand 32
REGN Analog inngangsmotstand 100
ADC-konverteringsutgang 0 1023 LSB

Merk: Verdier er kun retningslinjer.

Tabell 21-10. ADC-karakteristikk, differensialkanaler (bipolar modus). TA = -40°C til +85°C

Symbol Parameter Betingelse Min Typ Maks Enheter
Oppløsning Gevinst = 1x 10 Bits
Gevinst = 20x 10 Bits
Absolutt nøyaktighet (inkludert INL, DNL og

Kvantisering, gevinst og kompensasjonsfeil)

Gevinst = 1x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

8.0 LSB
Gevinst = 20x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

8.0 LSB
Integral Non-Linearity (INL) (Nøyaktighet etter forskyvning og forsterkningskalibrering) Gevinst = 1x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

4.0 LSB
Gevinst = 20x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

5.0 LSB
Få feil Gevinst = 1x 4.0 LSB
Gevinst = 20x 5.0 LSB
Forskyvningsfeil Gevinst = 1x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

3.0 LSB
Gevinst = 20x

VREF = 4V, VCC = 5V

ADC-klokke = 50 - 200 kHz

4.0 LSB
Konverteringstid Gratis løpekonvertering 70 280 ps
Klokkefrekvens 50 200 kHz
VIN Inngang Voltage GND VCC V
VDIFF Inngangsdifferensial Voltage VREF/Gevinst V
Inngang båndbredde 4 kHz
AREF Ekstern referanse Voltage 2.0 VCC – 1.0 V
VINT Intern voltage Referanse 1.0 1.1 1.2 V
Intern 2.56V referanse (1) VCC > 3.0V 2.3 2.56 2.8 V
RREF Referanse inngangsmotstand 32
REGN Analog inngangsmotstand 100
ADC-konverteringsutgang -512 511 LSB

Instruksjonsoppsummering

Mnemonikk Operander Beskrivelse Operasjon Flagg #Klokker
ARITMETISKE OG LOGISKE INSTRUKSJONER
LEGGE TIL Rd, Rr Legg til to registre Rd ← Rd + Rr Z, C, N, V, H 1
ADC Rd, Rr Legg til med Carry to Registers Rd ← Rd + Rr + C Z, C, N, V, H 1
ADIW Rdl, K Legg til øyeblikkelig i Word Rdh:Rdl ← Rdh:Rdl + K Z, C, N, V, S 2
SUB Rd, Rr Trekk fra to registre Rd ← Rd – Rr Z, C, N, V, H 1
JEG GIKK OPP Rd, K Trekk Constant fra Register Rd ← Rd – K Z, C, N, V, H 1
SBC Rd, Rr Trekk med Carry two Registers Rd ← Rd – Rr – C Z, C, N, V, H 1
SBCI Rd, K Trekk med Carry Constant fra Reg. Rd ← Rd – K – C Z, C, N, V, H 1
SBIW Rdl, K Trekk umiddelbart 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 Registrer 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 Registrer og konstant Rd ← Rd v K Z, N, V 1
EOR Rd, Rr Eksklusive OR-registre Rd ← Rd ⊕ Rr Z, N, V 1
COM Rd Ens komplement Rd ← 0xFF − Rd Z, C, N, V 1
NEG Rd Tos komplement Rd ← 0x00 − Rd Z, C, N, V, H 1
SBR Rd, K Sett bit (er) i Register Rd ← Rd v K Z, N, V 1
CBR Rd, K Fjern bit (er) i registeret Rd ← Rd ∙ (0xFF – K) Z, N, V 1
INC Rd Øke Rd ← Rd + 1 Z, N, V 1
DES Rd minsk Rd ← Rd − 1 Z, N, V 1
TST Rd Test for null eller minus Rd ← Rd ∙ Rd Z, N, V 1
CLR Rd Fjern register Rd ← Rd ⊕ Rd Z, N, V 1
SER Rd Sett Register Rd ← 0xFF Ingen 1
GRANNINSTRUKSJONER
RJMP k Relativt hopp PC ← PC + k + 1 Ingen 2
IJMP Indirekte hopp til (Z) PC ← Z Ingen 2
RING k Relativ underrutineanrop PC ← PC + k + 1 Ingen 3
ICALL Indirekte samtale til (Z) PC ← Z Ingen 3
RET Subrutine Retur PC ← STAKKE Ingen 4
NETTVERK Avbryt retur PC ← STAKKE I 4
CPSE Rd, Rr Sammenlign, hopp over like hvis (Rd = Rr) PC ← PC + 2 eller 3 Ingen 1
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
KPI Rd, K Sammenlign Registrer med Øyeblikkelig Rd - K Z, N, V, C, H 1
SBRC Rr, b Hopp over hvis bit i register tømt hvis (Rr(b)=0) PC ← PC + 2 eller 3 Ingen 1
SBRS Rr, b Hopp over hvis bit i register er satt hvis (Rr(b)=1) PC ← PC + 2 eller 3 Ingen 1
SBIC P, b Hopp over hvis bit i I / O-registeret er ryddet hvis (P(b)=0) PC ← PC + 2 eller 3 Ingen 1
SBIS P, b Hopp over hvis bit i I / O-register er satt hvis (P(b)=1) PC ← PC + 2 eller 3 Ingen 1
BRBS s, k Gren hvis statusflagg er satt hvis (SREG(s) = 1) så PC←PC+k + 1 Ingen 1/2
BRBC s, k Filial hvis statusflagg fjernet hvis (SREG(s) = 0) så PC←PC+k + 1 Ingen 1/2
BREQ k Filial hvis lik hvis (Z = 1) så PC ← PC + k + 1 Ingen 1/2
BRNE k Gren hvis ikke lik hvis (Z = 0) så PC ← PC + k + 1 Ingen 1/2
BRCS k Gren hvis bæresett hvis (C = 1) så PC ← PC + k + 1 Ingen 1/2
BRCC k Gren hvis Carry Cleared hvis (C = 0) så PC ← PC + k + 1 Ingen 1/2
BRSH k Gren hvis samme eller høyere hvis (C = 0) så PC ← PC + k + 1 Ingen 1/2
BRLO k Gren hvis nedre hvis (C = 1) så PC ← PC + k + 1 Ingen 1/2
BRMI k Gren hvis minus hvis (N = 1) så PC ← PC + k + 1 Ingen 1/2
BRPL k Gren hvis Plus hvis (N = 0) så PC ← PC + k + 1 Ingen 1/2
BRGE k Gren hvis større eller lik, signert hvis (N ⊕ V= 0) så PC ← PC + k + 1 Ingen 1/2
BRLT k Gren hvis mindre enn null, signert hvis (N ⊕ V= 1) så PC ← PC + k + 1 Ingen 1/2
BRHS k Forgrenes hvis halve bære flaggsett hvis (H = 1) så PC ← PC + k + 1 Ingen 1/2
BRHC k Gren hvis halv bærer flagg ryddet hvis (H = 0) så PC ← PC + k + 1 Ingen 1/2
BRTS k Gren hvis T-flaggsett hvis (T = 1) så PC ← PC + k + 1 Ingen 1/2
BRTC k Gren hvis T-flagget er ryddet hvis (T = 0) så PC ← PC + k + 1 Ingen 1/2
BRVS k Gren hvis overløpsflagg er satt hvis (V = 1) så PC ← PC + k + 1 Ingen 1/2
BRVC k Gren hvis overløpsflagg er fjernet hvis (V = 0) så PC ← PC + k + 1 Ingen 1/2
BRIE k Gren hvis avbrudd er aktivert hvis ( I = 1) så PC ← PC + k + 1 Ingen 1/2
BRID k Gren hvis avbrudd deaktivert hvis ( I = 0) så PC ← PC + k + 1 Ingen 1/2
INSTRUKSJONER FOR BIT OG BIT-TEST
SBI P, b Sett bit i I / O-register I/O(P,b) ← 1 Ingen 2
CBI P, b Fjern 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øyre Rd(n) ← Rd(n+1), Rd(7) ← 0 Z, C, N, V 1
ROL Rd Roter venstre gjennom Carry Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) Z, C, N, V 1
ROR Rd Roter rett gjennom Carry Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) Z, C, N, V 1
ASR Rd Aritmetisk skift til høyre Rd(n) ← Rd(n+1), n=0..6 Z, C, N, V 1
Mnemonikk Operander Beskrivelse Operasjon Flagg #Klokker
BYTT Rd Bytt nibbles Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) Ingen 1
BSET s Flaggsett SREG(er) ← 1 SREG (er) 1
BCLR s Flagg klar SREG(er) ← 0 SREG (er) 1
BST Rr, b Bit Store fra Register til T T ← Rr(b) T 1
BLD Rd, f Bitbelastning fra T til Register Rd(b) ← T Ingen 1
SEC Sett Carry C ← 1 C 1
CLC Klar bær C ← 0 C 1
SEN Sett negativt flagg N ← 1 N 1
CLN Fjern negativt flagg N ← 0 N 1
SEZ Sett null flagg Z ← 1 Z 1
CLZ Fjern null flagg Z ← 0 Z 1
SEI Aktiver global avbrudd I ← 1 I 1
CLI Global avbryt deaktivert I ← 0 I 1
SES Sett signert testflagg S ← 1 S 1
CLS Fjern signert testflagg S ← 0 S 1
SEV Sett to komplementoverløp. V ← 1 V 1
CLV Fjern Twos Complement Overflow V ← 0 V 1
SETT Sett T i SREG T ← 1 T 1
CLT Fjern T i SREG T ← 0 T 1
SE Sett et halvt bæreflagg i SREG H ← 1 H 1
CLH Fjern Half Carry Flag i SREG H ← 0 H 1
INSTRUKSJONER FOR OVERFØRING AV DATA
MOV Rd, Rr Flytt mellom registre Rd ← Rr Ingen 1
MOVW Rd, Rr Kopier registerord Rd+1:Rd ← Rr+1:Rr Ingen 1
LDI Rd, K Last umiddelbart Rd ← K Ingen 1
LD Rd, X Last indirekte Rd ← (X) Ingen 2
LD Rd, X + Load Indirect og Post-Inc. Rd ← (X), X ← X + 1 Ingen 2
LD Rd, - X Last indirekte og før des. X ← X – 1, Rd ← (X) Ingen 2
LD Rd, Y Last indirekte Rd ← (Y) Ingen 2
LD Rd, Y + Load Indirect og Post-Inc. Rd ← (Y), Y ← Y + 1 Ingen 2
LD Rd, - Y Last indirekte og før des. Y ← Y – 1, Rd ← (Y) Ingen 2
LDD Rd, Y + q Last indirekte med forskyvning Rd ← (Y + q) Ingen 2
LD Rd, Z Last indirekte Rd ← (Z) Ingen 2
LD Rd, Z + Load Indirect og Post-Inc. Rd ← (Z), Z ← Z+1 Ingen 2
LD Rd, -Z Last indirekte og før des. Z ← Z – 1, Rd ← (Z) Ingen 2
LDD Rd, Z + q Last indirekte med forskyvning Rd ← (Z + q) Ingen 2
LDS Rd, k Last direkte fra SRAM Rd ← (k) Ingen 2
ST X, Rr Store indirekte (X) ← Rr Ingen 2
ST X +, Rr Store indirekte og Post-Inc. (X) ← Rr, X ← X + 1 Ingen 2
ST - X, Rr Store indirekte og før des. X ← X – 1, (X) ← Rr Ingen 2
ST Y, Rr Store indirekte (Y) ← Rr Ingen 2
ST Y +, Rr Store indirekte og Post-Inc. (Y) ← Rr, Y ← Y + 1 Ingen 2
ST - Y, Rr Store indirekte og før des. Y ← Y – 1, (Y) ← Rr Ingen 2
STD Y + q, Rr Oppbevares indirekte med forskyvning (Y + q) ← Rr Ingen 2
ST Z, Rr Store indirekte (Z) ← Rr Ingen 2
ST Z +, Rr Store indirekte og Post-Inc. (Z) ← Rr, Z ← Z + 1 Ingen 2
ST -Z, Rr Store indirekte og før des. Z ← Z – 1, (Z) ← Rr Ingen 2
STD Z + q, Rr Oppbevares indirekte med forskyvning (Z + q) ← Rr Ingen 2
STS k, Rr Lagre direkte til SRAM (k) ← Rr Ingen 2
LPM Last inn programminne R0 ← (Z) Ingen 3
LPM Rd, Z Last inn programminne Rd ← (Z) Ingen 3
LPM Rd, Z + Last inn programminne og Post-Inc. Rd ← (Z), Z ← Z+1 Ingen 3
SPM Lagre programminne (z) ← R1:R0 Ingen
IN Rd, P I havn Rd ← P Ingen 1
UTE P, Rr Ut havn P ← Rr Ingen 1
TRYKK Rr Trykk Register on Stack STAKKE ← Rr Ingen 2
POP Rd Pop Register fra Stack Rd ← STAKKE Ingen 2
MCU-KONTROLLINSTRUKSJONER
NOP Ingen operasjon Ingen 1
SOVE Sove (se spesifikk beskrivelse for søvnfunksjon) Ingen 1
WDR Tilbakestilling av vakthund (se spesifikk beskrivelse for WDR / timer) Ingen 1
BRUDD Brudd
Hastighet (MHz) (1) Forsyning Voltage (V) Temperaturområde Pakke (2) Bestillingskode (3)
10 1.8 – 5.5 Industriell

(-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 Industriell

(-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

Merknader: 1. For hastighet vs. forsyning voltage, se avsnitt 21.3 “Hastighet” på side 163.

Alle pakker er fri for Pb, halogenid og helt grønne, og de er i samsvar med det europeiske direktivet for begrensning av farlige stoffer (RoHS).

Kodeindikatorer

H: NiPdAu blyfinish

U: matt tinn

R: tape & snelle

Disse enhetene kan også leveres i waferform. Kontakt ditt lokale Atmel salgskontor for detaljert bestillingsinformasjon og minimumsmengder.

trykkfeil

Errata ATtiny25

Revisjonsbrevet i dette avsnittet refererer til revisjonen av ATtiny25-enheten.

Rev D - F

Ingen kjente errata.

Rev B - C

EEPROM -lesing kan mislykkes ved lav tilførsel voltage / lav klokkefrekvens

EEPROM -lesing kan mislykkes ved lav tilførsel voltage / lav klokkefrekvens

Prøver å lese EEPROM ved lave klokkefrekvenser og/eller lav forsyningsvoltage kan resultere i ugyldige data.

Problemløsning / løsning

Ikke bruk EEPROM når klokkefrekvensen er under 1MHz og forsyningsvolumtage er under 2V. Hvis driftsfrekvensen ikke kan heves over 1MHz, må voltage bør være mer enn 2V. Tilsvarende, hvis forsyning voltage kan ikke heves over 2V, da bør driftsfrekvensen være mer enn 1MHz.

Denne funksjonen er kjent for å være temperaturavhengig, men den har ikke blitt karakterisert. Retningslinjer er kun gitt for romtemperatur.

Rev A

Ikke sampledet.

Errata ATtiny45

Revisjonsbrevet i dette avsnittet refererer til revisjonen av ATtiny45-enheten.

Rev F - G

Ingen kjente errata

Rev D - E

EEPROM -lesing kan mislykkes ved lav tilførsel voltage / lav klokkefrekvens

EEPROM -lesing kan mislykkes ved lav tilførsel voltage / lav klokkefrekvens

Prøver å lese EEPROM ved lave klokkefrekvenser og/eller lav forsyningsvoltage kan resultere i ugyldige data.

Problemløsning / løsning

Ikke bruk EEPROM når klokkefrekvensen er under 1MHz og forsyningsvolumtage er under 2V. Hvis driftsfrekvensen ikke kan heves over 1MHz, må voltage bør være mer enn 2V. Tilsvarende, hvis forsyning voltage kan ikke heves over 2V, da bør driftsfrekvensen være mer enn 1MHz.

Denne funksjonen er kjent for å være temperaturavhengig, men den har ikke blitt karakterisert. Retningslinjer er kun gitt for romtemperatur.

Rev B - C

PLL låser ikke

EEPROM lest fra applikasjonskode fungerer ikke i Lock Bit Mode 3

EEPROM -lesing kan mislykkes ved lav tilførsel voltage / lav klokkefrekvens

Timer Counter 1 PWM output generation på OC1B- XOC1B fungerer ikke som den skal

PLL låser ikke

Når det er på frekvenser under 6.0 MHz, vil PLL ikke låse

Problemløsning / løsning

Når du bruker PLL, må du kjøre på 6.0 MHz eller høyere.

EEPROM lest fra applikasjonskode fungerer ikke i Lock Bit Mode 3

Når minnelåsbitene LB2 og LB1 er programmert til modus 3, fungerer ikke EEPROM-lesing fra applikasjonskoden.

Problem Fix / Arbeid rundt

Ikke sett Lock Bit Protection Mode 3 når applikasjonskoden må leses fra EEPROM.

EEPROM -lesing kan mislykkes ved lav tilførsel voltage / lav klokkefrekvens

Prøver å lese EEPROM ved lave klokkefrekvenser og/eller lav forsyningsvoltage kan resultere i ugyldige data.

Problemløsning / løsning

Ikke bruk EEPROM når klokkefrekvensen er under 1MHz og forsyningsvolumtage er under 2V. Hvis driftsfrekvensen ikke kan heves over 1MHz, må voltage bør være mer enn 2V. Tilsvarende, hvis forsyning voltage kan ikke heves over 2V, da bør driftsfrekvensen være mer enn 1MHz.

Denne funksjonen er kjent for å være temperaturavhengig, men den har ikke blitt karakterisert. Retningslinjer er kun gitt for romtemperatur.

Timer Counter 1 PWM output generation on OC1B - XOC1B fungerer ikke som den skal

Timer Counter1 PWM-utgang OC1B-XOC1B fungerer ikke som den skal. Bare i tilfelle når kontrollbittene, COM1B1 og COM1B0 er i samme modus som henholdsvis COM1A1 og COM1A0, fungerer OC1B-XOC1B-utgangen riktig.

Problem Fix / Arbeid rundt

Den eneste løsningen er å bruke samme kontrollinnstilling på COM1A [1: 0] og COM1B [1: 0] kontrollbiter, se tabell 14-4 i databladet. Problemet er løst for Tiny45 rev D.

Rev A

For høyt strømforbruk

DebugWIRE mister kommunikasjon når du går enkelt inn i avbrudd

PLL låser ikke

EEPROM lest fra applikasjonskode fungerer ikke i Lock Bit Mode 3

EEPROM -lesing kan mislykkes ved lav tilførsel voltage / lav klokkefrekvens

For høyt strømforbruk

Tre situasjoner vil føre til for høyt strømforbruk. Disse er:

En ekstern klokke velges med sikringer, men I / O-PORT er fortsatt aktivert som utgang.

EEPROM leses før den slås på.

VCC er 4.5 volt eller høyere.

Ansvarsfraskrivelse: Informasjonen i dette dokumentet er gitt i forbindelse med Atmel-produkter. Ingen lisens, uttrykt eller underforstått, ved estoppel eller på annen måte, til noen immaterielle rettigheter er gitt av dette dokumentet eller i forbindelse med salg av Atmel-produkter. UNNTATT SOM ANGITT I ATMEL VILKÅR OG SALGSBETINGELSER PLASSERT PÅ ATMEL WEBNETTSTED, ATMEL PÅTAR SIG INGEN ANSVAR OG FRASKRIVER SEG NOEN UTTRYKKELIG, UNDERFORSTÅTT ELLER LOVBETLIG GARANTI KNYTTET TIL DERES PRODUKTER, INKLUDERT, MEN IKKE BEGRENSET TIL, DEN UNDERFORSTÅTE GARANTIEN OM SALGBARHET, ELLER EGNETHET, ELLER EGNETHET. UNDER INGEN OMSTENDIGHET KAN ATMEL VÆRE ANSVARLIG FOR NOEN DIREKTE, INDIREKTE, FØLGESKADER, STRAFFENDE, SPESIELLE ELLER TILFELDIGE SKADER (INKLUDERT, UTEN BEGRENSNING, SKADER FOR TAP OG FORTJENESTE, FORRETNINGSAVBRUTTELSE, ELLER TAP AV BRUK) DETTE DOKUMENTET, SELV OM ATMEL HAR BLITT GJORT OM MULIGHETEN FOR SLIKE SKADER.

Atmel gir ingen representasjoner eller garantier med hensyn til nøyaktigheten eller fullstendigheten av innholdet i dette dokumentet og forbeholder seg retten til å gjøre endringer i spesifikasjoner og produktbeskrivelser når som helst uten varsel. Atmel forplikter seg ikke til å oppdatere informasjonen her. Med mindre annet er spesifikt oppgitt, er Atmel-produkter ikke egnet for, og skal ikke brukes i, bilapplikasjoner. Atmel-produkter er ikke tiltenkt, autorisert eller garantert for bruk som komponenter i applikasjoner som er ment å støtte eller opprettholde liv.

Referanser

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket *