Atmel

Atmel 8-bit AVR-microcontroller met 2/4/8K bytes programmeerbare flash in het systeemsplinter

 

Functies

  • Hoge prestaties, laag vermogen AVR® 8-bit microcontroller
  • Geavanceerde RISC-architectuur
  • 120 Krachtige instructies - Meeste uitvoering van een enkele klokcyclus
  • 32 x 8 werkregisters voor algemeen gebruik
  • Volledig statische werking
  • Niet-vluchtige programma- en datageheugens
  • 2/4/8K bytes aan in het systeem programmeerbaar programmageheugen Flash
  • Uithoudingsvermogen: 10,000 schrijf-/wiscycli
  • 128/256/512 bytes in het systeem programmeerbare EEPROM
  • Uithoudingsvermogen: 100,000 schrijf-/wiscycli
  • 128/256/512 bytes Intern SRAM
  • Programmeerslot voor zelfprogrammerend flashprogramma en EEPROM-gegevensbeveiliging

Randapparatuur

  • 8-bit timer/teller met prescaler en twee PWM-kanalen
  • 8-bit hogesnelheidstimer/teller met aparte prescaler
  • 2 hoogfrequente PWM-uitgangen met afzonderlijke uitgangsvergelijkingsregisters
  • Programmeerbare dode tijdgenerator
  • USI – Universele seriële interface met startconditiedetector
  • 10-bits ADC

4 kanalen met één einde

2 differentiële ADC-kanaalparen met programmeerbare versterking (1x, 20x)

Temperatuurmeting

Programmeerbare watchdog-timer met afzonderlijke on-chip oscillator

Analoge comparator op de chip

Speciale microcontroller-functies

debugWIRE On-chip debugsysteem

In-systeem programmeerbaar via SPI-poort

Externe en interne onderbrekingsbronnen

Low Power Idle, ADC-ruisonderdrukking en uitschakelmodi

Verbeterd resetcircuit bij inschakelen

Programmeerbaar detectiecircuit voor brown-out

Interne gekalibreerde oscillator

I / O en pakketten

Zes programmeerbare I/O-lijnen

8-pins PDIP, 8-pins SOIC, 20-pad QFN/MLF en 8-pins TSSOP (alleen ATtiny45/V)

Bedrijfsvolumetage
– 1.8 – 5.5V voor ATtiny25V/45V/85V
– 2.7 – 5.5V voor ATtiny25/45/85

Snelheidsgraad
– ATtiny25V/45V/85V: 0 – 4 MHz bij 1.8 – 5.5V, 0 – 10 MHz bij 2.7 – 5.5V
– ATtiny25/45/85: 0 – 10 MHz bij 2.7 – 5.5V, 0 – 20 MHz bij 4.5 – 5.5V

Industrieel temperatuurbereik

Laag stroomverbruik

Actieve modus:

1 MHz, 1.8 V: 300 µA

Uitschakelmodus:

Pin-configuraties

Pinout ATtiny25/45/85 Configuratie

Pinbeschrijvingen

VCC: Aanbod voltage.
GND: Aarde.
Poort B (PB5:PB0): Poort B is een 6-bit bidirectionele I/O-poort met interne pull-up-weerstanden (geselecteerd voor elke bit). De poort B-uitgangsbuffers hebben symmetrische aandrijfkarakteristieken met zowel een hoge sink- als source-capaciteit. Als ingangen zullen poort B-pinnen die extern laag zijn getrokken, stroom leveren als de pull-up-weerstanden worden geactiveerd. De pinnen van poort B worden in drie standen gezet wanneer een resetconditie actief wordt, zelfs als de klok niet loopt.

Poort B dient ook de functies van verschillende speciale kenmerken van de ATtiny25/45/85, zoals vermeld
Op ATtiny25 worden de programmeerbare I/O-poorten PB3 en PB4 (pinnen 2 en 3) uitgewisseld in de ATtiny15-compatibiliteitsmodus ter ondersteuning van de achterwaartse compatibiliteit met ATtiny15.

RESET: Ingang resetten. Een laag niveau op deze pin gedurende langer dan de minimale pulslengte zal een reset genereren, zelfs als de klok niet loopt en op voorwaarde dat de resetpin niet is uitgeschakeld. De minimale pulslengte wordt aangegeven in Tabel 21-4 op pagina 165. Kortere pulsen zorgen niet gegarandeerd voor een reset.

De reset-pin kan ook als (zwakke) I/O-pin worden gebruikt.

Overview

De ATtiny25/45/85 is een CMOS 8-bit microcontroller met laag vermogen, gebaseerd op de AVR-verbeterde RISC-architectuur. Door krachtige instructies uit te voeren in een enkele klokcyclus, bereikt de ATtiny25/45/85 doorvoersnelheden die bijna 1 MIPS per MHz benaderen, waardoor de systeemontwerper het energieverbruik versus de verwerkingssnelheid kan optimaliseren.

Blokdiagram Blokdiagram

De AVR-kern combineert een rijke instructieset met 32 ​​werkregisters voor algemene doeleinden. Alle 32 registers zijn rechtstreeks verbonden met de Arithmetic Logic Unit (ALU), waardoor twee onafhankelijke registers toegankelijk zijn in één enkele instructie die in één klokcyclus wordt uitgevoerd. De resulterende architectuur is code-efficiënter en bereikt tegelijkertijd tot tien keer snellere doorvoersnelheden dan conventionele CISC-microcontrollers.

De ATtiny25/45/85 biedt de volgende kenmerken: 2/4/8K bytes in-systeem programmeerbare flash, 128/256/512 bytes EEPROM, 128/256/256 bytes SRAM, 6 algemene I/O-lijnen, 32 algemene speciaal werkende registers, één 8-bit timer/teller met vergelijkingsmodi, één 8-bit hogesnelheidstimer/teller, universele seriële interface, interne en externe interrupts, een 4-kanaals, 10-bit ADC, een programmeerbare Watchdog-timer met interne Oscillator en drie softwarematig selecteerbare energiebesparende modi. De inactieve modus stopt de CPU terwijl het SRAM-, Timer/Counter-, ADC-, Analoge Comparator- en Interrupt-systeem blijven functioneren. De uitschakelmodus slaat de registerinhoud op en schakelt alle chipfuncties uit tot de volgende interrupt of hardwarereset. De ADC-ruisonderdrukkingsmodus stopt de CPU en alle I/O-modules behalve ADC, om schakelruis tijdens ADC-conversies te minimaliseren.

Het apparaat is vervaardigd met behulp van Atmel's niet-vluchtige geheugentechnologie met hoge dichtheid. Met de On-chip ISP Flash kan het programmageheugen in het systeem opnieuw worden geprogrammeerd via een SPI seriële interface, door een conventionele niet-vluchtige geheugenprogrammeur of door een On-chip opstartcode die op de AVR-kern draait.

De ATtiny25/45/85 AVR wordt ondersteund met een volledige reeks programma- en systeemontwikkeltools, waaronder: C-compilers, macro-assemblers, programma-debugger/-simulators en evaluatiekits.

Over bronnen

Een uitgebreide set ontwikkeltools, toepassingsnotities en datasheets is beschikbaar om te downloaden op http://www.atmel.com/avr.

Code Bijvampde

Deze documentatie bevat eenvoudige code exampbestanden die kort laten zien hoe de verschillende onderdelen van het apparaat moeten worden gebruikt. Deze code exampneem aan dat de onderdeelspecifieke kop file wordt vóór de compilatie opgenomen. Houd er rekening mee dat niet alle leveranciers van C-compilers bitdefinities in de header opnemen files en interruptafhandeling in C zijn afhankelijk van de compiler. Bevestig dit met de documentatie van de C-compiler voor meer details.

Voor I/O-registers die zich in de uitgebreide I/O-kaart bevinden, moeten de instructies “IN”, “OUT”, “SBIS”, “SBIC”, “CBI” en “SBI” worden vervangen door instructies die toegang tot uitgebreide I/O-kaarten mogelijk maken. /O. Meestal betekent dit “LDS” en “STS” gecombineerd met “SBRS”, “SBRC”, “SBR” en “CBR”. Houd er rekening mee dat niet alle AVR-apparaten een uitgebreide I/O-kaart bevatten.

Capacitieve aanraakdetectie

Atmel QTouch Library biedt een eenvoudig te gebruiken oplossing voor aanraakgevoelige interfaces op Atmel AVR-microcontrollers. De QTouch-bibliotheek biedt ondersteuning voor QTouch®- en QMatrix®-acquisitiemethoden.

Aanraakdetectie kan eenvoudig aan elke toepassing worden toegevoegd door de QTouch-bibliotheek te koppelen en de Application Programming Interface (API) van de bibliotheek te gebruiken om de aanraakkanalen en sensoren te definiëren. De applicatie roept vervolgens de API aan om kanaalinformatie op te halen en de status van de aanraaksensor te bepalen.

De QTouch-bibliotheek is gratis en kan worden gedownload via Atmel webplaats. Voor meer informatie en details over de implementatie raadpleegt u de QTouch Library User Guide – ook verkrijgbaar bij Atmel webplaats.

Gegevensretentie

Betrouwbaarheid Uit de kwalificatieresultaten blijkt dat het verwachte percentage mislukte gegevensretentie veel minder dan 1 ppm bedraagt ​​over een periode van 20 jaar bij 85°C of 100 jaar bij 25°C.

AVR CPU-kern

Invoering

In deze sectie wordt de AVR-kernarchitectuur in het algemeen besproken. De belangrijkste functie van de CPU-kern is het garanderen van een correcte programma-uitvoering. De CPU moet daarom toegang kunnen krijgen tot geheugens, berekeningen kunnen uitvoeren, randapparatuur kunnen besturen en interrupts kunnen afhandelen.

Architectonisch voorbijview Architectuur

Om de prestaties en het parallellisme te maximaliseren, maakt de AVR gebruik van een Harvard-architectuur – met aparte geheugens en bussen voor programma en data. Instructies in het programmageheugen worden uitgevoerd met een pipelining op één niveau. Terwijl één instructie wordt uitgevoerd, wordt de volgende instructie vooraf uit het programmageheugen opgehaald. Dit concept maakt het mogelijk dat instructies in elke klokcyclus worden uitgevoerd. Het programmageheugen is in het systeem herprogrammeerbaar flashgeheugen.

Het snel toegankelijke register File bevat 32 x 8-bit werkregisters voor algemene doeleinden met een enkele klokcyclustoegangstijd. Dit maakt een enkele cyclus Arithmetic Logic Unit (ALU) werking mogelijk. Bij een typische ALU-bewerking worden twee operanden uit het register uitgevoerd File, wordt de bewerking uitgevoerd en wordt het resultaat weer in het register opgeslagen File– in één klokcyclus.

Zes van de 32 registers kunnen worden gebruikt als drie 16-bits indirecte adresregisteraanwijzers voor dataruimte-adressering, waardoor efficiënte adresberekeningen mogelijk zijn. Eén van deze adresaanwijzers kan ook worden gebruikt als adresaanwijzer voor opzoektabellen in het Flash-programmageheugen. Deze toegevoegde functieregisters zijn de 16-bits X-, Y- en Z-registers, die later in deze sectie worden beschreven.

De ALU ondersteunt rekenkundige en logische bewerkingen tussen registers of tussen een constante en een register. Enkelvoudige registerbewerkingen kunnen ook in de ALU worden uitgevoerd. Na een rekenkundige bewerking wordt het statusregister bijgewerkt om informatie weer te geven over het resultaat van de bewerking.

De programmastroom wordt verzorgd door voorwaardelijke en onvoorwaardelijke sprong- en oproepinstructies, die rechtstreeks de hele adresruimte kunnen aanspreken. De meeste AVR-instructies hebben een enkel 16-bits woordformaat, maar er zijn ook 32-bits instructies.

Tijdens interrupts en subroutineoproepen wordt het retouradres Program Counter (PC) opgeslagen op de Stack. De stapel wordt effectief toegewezen in de algemene gegevens-SRAM, en bijgevolg wordt de stapelgrootte alleen beperkt door de totale SRAM-grootte en het gebruik van de SRAM. Alle gebruikersprogramma's moeten de SP initialiseren in de Reset-routine (voordat subroutines of interrupts worden uitgevoerd). De Stack Pointer (SP) is toegankelijk voor lezen/schrijven in de I/O-ruimte. Het data-SRAM is eenvoudig toegankelijk via de vijf verschillende adresseringsmodi die worden ondersteund in de AVR-architectuur.

De geheugenruimten in de AVR-architectuur zijn allemaal lineaire en reguliere geheugenkaarten.

Een flexibele interruptmodule heeft zijn controleregisters in de I/O-ruimte met een extra Global Interrupt Enable-bit in het statusregister. Alle interrupts hebben een aparte Interrupt Vector in de Interrupt Vector-tabel. De interrupts hebben prioriteit in overeenstemming met hun Interrupt Vector-positie. Hoe lager het Interrupt Vector-adres, hoe hoger de prioriteit.

De I/O-geheugenruimte bevat 64 adressen voor CPU-randapparatuurfuncties zoals besturingsregisters, SPI en andere I/O-functies. Het I/O-geheugen is direct toegankelijk, of als de Data Space-locaties volgend op die van het Register File, 0x20 – 0x5F.

ALU – Rekenkundige logische eenheid

De krachtige AVR ALU werkt in directe verbinding met alle 32 algemene werkregisters. Binnen een enkele klokcyclus worden rekenkundige bewerkingen tussen registers voor algemene doeleinden of tussen een register en een onmiddellijk register uitgevoerd. De ALU-bewerkingen zijn onderverdeeld in drie hoofdcategorieën: rekenkundige, logische en bitfuncties. Sommige implementaties van de architectuur bieden ook een krachtige vermenigvuldiger die zowel ondertekende/niet-ondertekende vermenigvuldiging als fractioneel formaat ondersteunt. Zie het hoofdstuk “Instructieset” voor een gedetailleerde beschrijving.

Statusregister

Het Statusregister bevat informatie over het resultaat van de laatst uitgevoerde rekeninstructie. Deze informatie kan worden gebruikt voor het wijzigen van de programmastroom om voorwaardelijke bewerkingen uit te voeren. Houd er rekening mee dat het statusregister na alle ALU-bewerkingen wordt bijgewerkt, zoals gespecificeerd in de instructiesetreferentie. Dit zal in veel gevallen de noodzaak voor het gebruik van de speciale vergelijkingsinstructies wegnemen, wat resulteert in snellere en compactere code.

Het statusregister wordt niet automatisch opgeslagen bij het starten van een interruptroutine en hersteld bij het terugkeren van een interrupt. Dit moet softwarematig worden afgehandeld.

SREG – AVR-statusregister

Het AVR Status Register – SREG – wordt gedefinieerd als:

Beetje 7 6 5 4 3 2 1 0
0x3F I T H S V N Z C SREG
Lezen/Schrijven Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 0

Bit 7 – I: Global Interrupt inschakelen

De Global Interrupt Enable-bit moet worden ingesteld om de interrupts mogelijk te maken. De individuele onderbrekingsvrijgavebesturing wordt dan uitgevoerd in afzonderlijke besturingsregisters. Als het Global Interrupt Enable Register wordt gewist, worden geen van de interrupts ingeschakeld, onafhankelijk van de individuele interrupt enable-instellingen. De I-bit wordt door hardware gewist nadat een interrupt heeft plaatsgevonden, en wordt ingesteld door de RETI-instructie om volgende interrupts mogelijk te maken. De I-bit kan ook worden ingesteld en gewist door de applicatie met de SEI- en CLI-instructies, zoals beschreven in de instructiesetreferentie.

Bit 6 – T: Bitkopieopslag

De Bit Copy-instructies BLD (Bit LoaD) en BST (Bit STore) gebruiken de T-bit als bron of bestemming voor de bediende bit. Een stukje uit een register in het Register File kan worden gekopieerd naar T door de BST-instructie, en een bit in T kan worden gekopieerd naar een bit in een register in het register File door de BLD-instructie.

Bit 5 – H: Halve draagvlag

De Half Carry-vlag H geeft bij sommige rekenkundige bewerkingen een Half Carry aan. Half Carry is handig bij BCD-rekenkunde. Zie de “Instructiesetbeschrijving” voor gedetailleerde informatie.

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

De S-bit is altijd een exclusieve of tussen de negatieve vlag N en de twee-complementoverloopvlag V. Zie de “Instructiesetbeschrijving” voor gedetailleerde informatie.

Bit 3 – V: Twee-complement-overloopvlag

De Two's Complement Overflow Flag V ondersteunt twee-complement rekenkunde. Zie de “Beschrijving van de instructieset” voor gedetailleerde informatie.

Bit 2 – N: Negatieve vlag

De negatieve vlag N geeft een negatief resultaat aan in een rekenkundige of logische bewerking. Zie de “Instructiesetbeschrijving” voor gedetailleerde informatie.

Bit 1 – Z: Nulvlag

De nulvlag Z geeft een nulresultaat aan in een rekenkundige of logische bewerking. Zie de “Beschrijving van de instructieset” voor gedetailleerde informatie.

Bit 0 – C: vlag dragen

De Carry-vlag C geeft een carry aan in een rekenkundige of logische bewerking. Zie de “Beschrijving van de instructieset” voor gedetailleerde informatie.

Register voor algemeen gebruik File

Het register File is geoptimaliseerd voor de AVR Enhanced RISC-instructieset. Om de vereiste prestatie en flexibiliteit te bereiken, worden de volgende input/output-schema's door het Register ondersteund File:

Eén 8-bit uitvoeroperand en één 8-bit resultaatinvoer

Twee 8-bit uitvoeroperanden en één 8-bit resultaatinvoer

Twee 8-bit uitvoeroperanden en één 16-bit resultaatinvoer

Eén 16-bit uitvoeroperand en één 16-bit resultaatinvoer

Figuur 4-2 toont de structuur van de 32 werkregisters voor algemene doeleinden in de CPU. Algemeen doel

Zoals getoond in Figuur 4-2, krijgt elk register ook een datageheugenadres toegewezen, waardoor ze rechtstreeks worden toegewezen aan de eerste 32 locaties van de gebruikersdataruimte. Hoewel deze geheugenorganisatie niet fysiek is geïmplementeerd als SRAM-locaties, biedt deze een grote flexibiliteit bij de toegang tot de registers, aangezien de X-, Y- en Z-pointerregisters kunnen worden ingesteld om elk register in de registers te indexeren. file.De meeste instructies werken in het register File hebben directe toegang tot alle registers, en de meeste daarvan zijn instructies met één cyclus.

Het X-register, Y-register en Z-register

De registers R26..R31 hebben enkele extra functies naast hun algemene gebruik. Deze registers zijn 16-bits adreswijzers voor indirecte adressering van de dataruimte. De drie indirecte adresregisters X, Y en Z worden gedefinieerd zoals beschreven in Figuur 4-3.

Register

In de verschillende adresseringsmodi hebben deze adresregisters functies als vaste verplaatsing, automatische toename en automatische afname (zie de instructiesetreferentie voor details).

Stapel Pointer

De Stack wordt voornamelijk gebruikt voor het opslaan van tijdelijke gegevens, voor het opslaan van lokale variabelen en voor het opslaan van retouradressen na interrupts en subroutineaanroepen. Het Stack Pointer Register wijst altijd naar de bovenkant van de stapel. Merk op dat de stapel is geïmplementeerd als groeiend van hogere geheugenlocaties naar lagere geheugenlocaties. Dit houdt in dat een Stack PUSH-opdracht de Stack Pointer verlaagt.

De Stack Pointer wijst naar het data-SRAM Stack-gebied waar de Subroutine en Interrupt Stacks zich bevinden. Deze stapelruimte in het data-SRAM moet door het programma worden gedefinieerd voordat subroutineaanroepen worden uitgevoerd of interrupts worden ingeschakeld. De Stack Pointer moet worden ingesteld op een punt boven 0x60. De Stack Pointer wordt met één verlaagd wanneer gegevens naar de Stack worden gepusht met de PUSH-instructie, en wordt met twee verlaagd wanneer het retouradres naar de Stack wordt geduwd met een subroutine-oproep of interrupt. De Stack Pointer wordt met één verhoogd wanneer er gegevens uit de stapel worden gehaald met de POP-instructie, en wordt met twee verhoogd wanneer gegevens uit de stapel worden gehaald met terugkeer van subroutine RET of terugkeer van interrupt RETI.

De AVR Stack Pointer is geïmplementeerd als twee 8-bit registers in de I/O-ruimte. Het aantal feitelijk gebruikte bits is afhankelijk van de implementatie. Merk op dat de dataruimte in sommige implementaties van de AVR-architectuur zo klein is dat alleen SPL nodig is. In dit geval zal het SPH Register niet aanwezig zijn.

SPH en SPL — Stack Pointer-register

Beetje 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
Lezen/Schrijven Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Lezen/Schrijven Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND
Initiële waarde RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND

Instructie Uitvoeringstijdstip

In deze sectie worden de algemene toegangstimingconcepten voor het uitvoeren van instructies beschreven. De AVR CPU wordt aangestuurd door de CPU-klok clkCPU, die rechtstreeks wordt gegenereerd door de geselecteerde klokbron voor de chip. Er wordt geen interne klokverdeling gebruikt.

Figuur 4.4

Figuur 4-4 toont het parallel ophalen en uitvoeren van instructies, mogelijk gemaakt door de Harvard-architectuur en het snelle toegangsregister File concept. Dit is het basispipeliningconcept om maximaal 1 MIPS per MHz te verkrijgen met de bijbehorende unieke resultaten voor functies per kosten, functies per klok en functies per voedingseenheid.

Figuur 4-5. ALU-bediening met één cyclus

Figuur 4.5

Reset en onderbreek de afhandeling

De AVR beschikt over verschillende onderbrekingsbronnen. Deze interrupts en de afzonderlijke resetvector hebben elk een afzonderlijke programmavector in de programmageheugenruimte. Aan alle interrupts worden individuele enable-bits toegewezen die logisch één moeten worden geschreven samen met de Global Interrupt Enable-bit in het statusregister om de interrupt mogelijk te maken.

De laagste adressen in de programmageheugenruimte worden standaard gedefinieerd als de reset- en interruptvectoren. De volledige lijst met vectoren wordt weergegeven in “Onderbrekingen” op pagina 48. De lijst bepaalt ook de prioriteitsniveaus van de verschillende interrupts. Hoe lager het adres, hoe hoger het prioriteitsniveau. RESET heeft de hoogste prioriteit, en de volgende is INT0 – het externe onderbrekingsverzoek 0.

Wanneer er een interrupt optreedt, wordt de Global Interrupt Enable I-bit gewist en worden alle interrupts uitgeschakeld. De gebruikerssoftware kan logica één naar de I-bit schrijven om geneste interrupts mogelijk te maken. Alle ingeschakelde interrupts kunnen dan de huidige interruptroutine onderbreken. De I-bit wordt automatisch ingesteld wanneer een Return from Interrupt-instructie – RETI – wordt uitgevoerd.

Er zijn grofweg twee soorten interrupts. Het eerste type wordt geactiveerd door een gebeurtenis die de Interrupt-vlag instelt. Voor deze interrupts wordt de programmateller gevectoriseerd naar de daadwerkelijke interruptvector om de interruptafhandelingsroutine uit te voeren, en de hardware wist de corresponderende interruptvlag. Onderbrekingsvlaggen kunnen ook worden gewist door een logische één naar de te wissen vlagbitpositie(s) te schrijven. Als er een interruptconditie optreedt terwijl het overeenkomstige interrupt-inschakelbit is gewist, wordt de interruptvlag ingesteld en onthouden totdat de interrupt wordt ingeschakeld, of totdat de vlag door software wordt gewist. Op soortgelijke wijze zullen, als zich een of meer interruptcondities voordoen terwijl de Global Interrupt Enable-bit wordt gewist, de corresponderende Interrupt-vlag(pen) worden ingesteld en onthouden totdat de Global Interrupt Enable-bit is ingesteld, en zullen deze vervolgens worden uitgevoerd in volgorde van prioriteit.

Het tweede type interrupts wordt geactiveerd zolang de interruptconditie aanwezig is. Deze interrupts hebben niet noodzakelijkerwijs interruptvlaggen. Als de interruptconditie verdwijnt voordat de interrupt is ingeschakeld, wordt de interrupt niet geactiveerd.

Wanneer de AVR een interrupt verlaat, keert deze altijd terug naar het hoofdprogramma en voert nog een instructie uit voordat een eventuele wachtende interrupt wordt geserveerd.

Merk op dat het statusregister niet automatisch wordt opgeslagen bij het binnengaan van een interruptroutine, en ook niet wordt hersteld bij het terugkeren van een interruptroutine. Dit moet softwarematig worden afgehandeld.

Wanneer u de CLI-instructie gebruikt om interrupts uit te schakelen, worden de interrupts onmiddellijk uitgeschakeld. Er zal geen interrupt worden uitgevoerd na de CLI-instructie, zelfs als deze gelijktijdig met de CLI-instructie plaatsvindt. De volgende bijvample laat zien hoe dit kan worden gebruikt om interrupts tijdens de getimede EEPROM-schrijfreeks te voorkomen.

Assemblagecode Bijvample
in r16, SREG; SREG-waarde opslaan

cl; schakel interrupts uit tijdens getimede reeks

sbi EECR, EEMPE ; start EEPROM-schrijven

sbi EECR, EEPE

uit SREG, r16; SREG-waarde herstellen (I-bit)

C-code Bijvample
teken cSREG;

cSREG = SREG; /* SREG-waarde opslaan */

/* schakel interrupts uit tijdens getimede reeks */

_CLI();

EEK |= (1<

EEK |= (1<

SREG = cSREG; /* SREG-waarde herstellen (I-bit) */

Wanneer u de SEI-instructie gebruikt om interrupts mogelijk te maken, wordt de instructie die volgt op SEI uitgevoerd vóór eventuele lopende interrupts, zoals weergegeven in dit voorbeeldampik.

Assemblagecode Bijvample
sei; Stel Global Interrupt Enable in

slaap; ga in slaap, wachtend op onderbreking

; Let op: gaat eerst in de slaapstand voordat er nog iets in behandeling is

; onderbreken(en)

C-code Bijvample
_SEI(); /* set Global Interrupt inschakelen */

_SLAAP(); /* ga naar de slaapstand, wacht op onderbreking */

/* opmerking: gaat naar de slaapstand vóór eventuele lopende interrupt(s) */

Reactietijd onderbreken

De interruptuitvoeringsreactie voor alle ingeschakelde AVR-interrupts is minimaal vier klokcycli. Na vier klokcycli wordt het programmavectoradres voor de daadwerkelijke interruptafhandelingsroutine uitgevoerd. Tijdens deze periode van vier klokcycli wordt de programmateller op de stapel geduwd. De vector is normaal gesproken een sprong naar de interruptroutine, en deze sprong duurt drie klokcycli. Als er tijdens de uitvoering van een instructie met meerdere cycli een interrupt optreedt, wordt deze instructie voltooid voordat de interrupt wordt geserveerd. Als er een interrupt optreedt wanneer de MCU in de slaapmodus staat, wordt de responstijd voor het uitvoeren van de interrupt met vier klokcycli verlengd. Deze toename komt bovenop de opstarttijd vanuit de geselecteerde slaapmodus.

Een terugkeer van een interruptafhandelingsroutine duurt vier klokcycli. Tijdens deze vier klokcycli wordt de programmateller (twee bytes) teruggehaald uit de stapel, wordt de stapelwijzer met twee verhoogd en wordt de I-bit in SREG ingesteld.

AVR-herinneringen

In dit gedeelte worden de verschillende geheugens in de ATtiny25/45/85 beschreven. De AVR-architectuur heeft twee hoofdgeheugenruimten, het datageheugen en de programmageheugenruimte. Bovendien beschikt de ATtiny25/45/85 over een EEPROM-geheugen voor gegevensopslag. Alle drie de geheugenruimten zijn lineair en regelmatig.

In het systeem herprogrammeerbaar Flash-programmageheugen

De ATtiny25/45/85 bevat 2/4/8K bytes On-chip In-System Herprogrammeerbaar Flash-geheugen voor programma-opslag. Omdat alle AVR-instructies 16 of 32 bits breed zijn, is de Flash georganiseerd als 1024/2048/4096 x 16.

Het Flash-geheugen heeft een levensduur van minimaal 10,000 schrijf-/wiscycli. De ATtiny25/45/85 programmateller (PC) is 10/11/12 bits breed en adresseert dus de 1024/2048/4096 programmageheugenlocaties. “Geheugenprogramma- ming” op pagina 147 bevat een gedetailleerde beschrijving van het serieel downloaden van Flash-gegevens met behulp van de SPI-pinnen.

Constante tabellen kunnen worden toegewezen binnen de gehele adresruimte van het programmageheugen (zie de instructiebeschrijving LPM – Programmageheugen laden).

Figuur 5-1. Programmageheugenkaart Geheugenkaart

SRAM-gegevensgeheugen

Figuur 5-2 laat zien hoe het ATtiny25/45/85 SRAM-geheugen is georganiseerd.

De onderste 224/352/607 datageheugenlocaties adresseren zowel het register File, het I/O-geheugen en het interne data-SRAM. De eerste 32 locaties richten zich tot het Register File, de volgende 64 locaties het standaard I/O-geheugen, en de laatste 128/256/512 locaties adresseren de interne data-SRAM.

De vijf verschillende adresseringsmodi voor het datageheugen zijn: Direct, Indirect met verplaatsing, Indirect, Indirect met pre-decrement en Indirect met post-increment. In het Register File, beschikken de registers R26 tot en met R31 over de indirecte adresserende pointerregisters.

De directe adressering bereikt de gehele dataruimte.

De indirecte met verplaatsingsmodus bereikt 63 adreslocaties vanaf het basisadres dat wordt opgegeven door het Y- of Z-register.

Bij gebruik van register-indirecte adresseringsmodi met automatische voor- en na-verhoging worden de adresregisters X, Y en Z verlaagd of verhoogd.

De 32 algemene werkregisters, 64 I/O-registers en de 128/256/512 bytes aan interne data-SRAM in de ATtiny25/45/85 zijn allemaal toegankelijk via al deze adresseringsmodi. Het register File wordt beschreven in “Gen- doelregister File” op pagina 10.

Figuur 5-2. Gegevensgeheugenkaart Geheugenkaart 2

Toegang tot gegevensgeheugen Tijden

In dit gedeelte worden de algemene toegangstimingconcepten voor toegang tot het interne geheugen beschreven. De SRAM-toegang tot interne gegevens wordt uitgevoerd in twee clkCPU-cycli, zoals beschreven in Figuur 5-3.

Figuur 5-3. On-chip gegevens SRAM-toegangscycli Op chipgegevens EEPROM-gegevensgeheugen

De ATtiny25/45/85 bevat 128/256/512 bytes aan data-EEPROM-geheugen. Het is georganiseerd als een aparte dataruimte, waarin afzonderlijke bytes kunnen worden gelezen en geschreven. De EEPROM heeft een levensduur van minimaal 100,000 schrijf-/wiscycli. De toegang tussen de EEPROM en de CPU wordt hieronder beschreven, waarbij de EEPROM-adresregisters, het EEPROM-gegevensregister en het EEPROM-besturingsregister worden gespecificeerd. Voor details zie “Serieel downloaden” op pagina 151.

EEPROM-lees-/schrijftoegang

De EEPROM-toegangsregisters zijn toegankelijk in de I/O-ruimte.

De schrijftoegangstijden voor de EEPROM zijn aangegeven Tabel 5-1 op pagina 21. Een zelftimingfunctie laat de gebruikerssoftware echter detecteren wanneer de volgende byte kan worden geschreven. Als de gebruikerscode instructies bevat die de EEPROM schrijven, moeten enkele voorzorgsmaatregelen worden genomen. Bij zwaar gefilterde voedingen zal de VCC waarschijnlijk langzaam stijgen of dalen

In-/uitschakelen. Dit zorgt ervoor dat het apparaat enige tijd op vol vermogen draaittage lager dan opgegeven als minimum voor de gebruikte klokfrequentie. Zien “EEPROM-corruptie voorkomen” op pagina 19 voor meer informatie over hoe u problemen in deze situaties kunt voorkomen.

Om onbedoelde EEPROM-schrijfbewerkingen te voorkomen, moet een specifieke schrijfprocedure worden gevolgd. Verwijzen naar “Atomisch Byteprogrammering” op pagina 17 En “Split Byte Programmeren” op pagina 17 voor details hierover.

Wanneer de EEPROM wordt gelezen, wordt de CPU gedurende vier klokcycli stopgezet voordat de volgende instructie wordt uitgevoerd. Wanneer de EEPROM wordt geschreven, wordt de CPU gedurende twee klokcycli stopgezet voordat de volgende instructie wordt uitgevoerd.

Atomaire byteprogrammering

Het gebruik van Atomic Byte Programming is de eenvoudigste modus. Wanneer een byte naar de EEPROM wordt geschreven, moet de gebruiker het adres in het EEAR-register en de gegevens in het EDR-register schrijven. Als de EEPMn-bits nul zijn, zal het schrijven van EEPE (binnen vier cycli nadat EEMPE is geschreven) de wis-/schrijfbewerking activeren. Zowel de wis- als de schrijfcyclus worden in één handeling uitgevoerd en de totale programmeertijd wordt opgegeven Tabel 5-1 op pagina 21. Het EEPE-bit blijft ingesteld totdat de wis- en schrijfbewerkingen zijn voltooid. Terwijl het apparaat bezig is met programmeren, is het niet mogelijk om andere EEPROM-bewerkingen uit te voeren.

Programmeren van gesplitste bytes

Het is mogelijk om de wis- en schrijfcyclus in twee verschillende bewerkingen te splitsen. Dit kan handig zijn als het systeem gedurende een beperkte periode een korte toegangstijd nodig heeft (doorgaans als de voeding vol istage valt). Om voordeel te halen tagBij deze werkwijze is het vereist dat de te schrijven locaties vóór de schrijfbewerking zijn gewist. Maar omdat de wis- en schrijfbewerkingen zijn gesplitst, is het mogelijk de wisbewerkingen uit te voeren wanneer het systeem tijdkritische bewerkingen toestaat (meestal na het opstarten).

Wissen

Om een ​​byte te wissen, moet het adres naar EEAR worden geschreven. Als de EEPMn-bits 0b01 zijn, zal het schrijven van de EEPE (binnen vier cycli nadat EEMPE is geschreven) alleen de wisbewerking activeren (de programmeertijd wordt gegeven in Tabel 5-1 op pagina 21). Het EEPE-bit blijft ingesteld totdat de wisbewerking is voltooid. Terwijl het apparaat bezig is met programmeren, is het niet mogelijk om andere EEPROM-bewerkingen uit te voeren.

Schrijven

Om een ​​locatie te schrijven, moet de gebruiker het adres in EEAR en de gegevens in EEDR schrijven. Als de EEPMn-bits 0b10 zijn, zal het schrijven van de EEPE (binnen vier cycli nadat EEMPE is geschreven) alleen de schrijfbewerking activeren (de programmeertijd wordt gegeven in Tabel 5-1 op pagina 21). Het EEPE-bit blijft ingesteld totdat de schrijfbewerking is voltooid. Als de te schrijven locatie vóór het schrijven niet is gewist, moeten de opgeslagen gegevens als verloren worden beschouwd. Terwijl het apparaat bezig is met programmeren, is het niet mogelijk om andere EEPROM-bewerkingen uit te voeren.

De gekalibreerde oscillator wordt gebruikt om de toegang tot de EEPROM te timen. Zorg ervoor dat de oscillatorfrequentie binnen de vereisten valt die worden beschreven in “OSCCAL – Oscillatorkalibratieregister” op pagina 31.

De volgende code exampbestanden tonen één assembly en één C-functie voor wissen, schrijven of atomair schrijven van de EEPROM. De exampLes gaat ervan uit dat interrupts worden gecontroleerd (bijvoorbeeld door interrupts globaal uit te schakelen), zodat er geen interrupts zullen optreden tijdens de uitvoering van deze functies.

Assemblagecode Bijvample
EEPROM_write:

; Wacht tot het vorige schrijfproces is voltooid

sbic EECR,EEPE

rjmp EEPROM_write

; Programmeermodus instellen

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

uit EEKR, r16

; Adres instellen (r18:r17) in adresregister

uit EEARH, r18

uit EEARL, r17

; Gegevens (r19) naar gegevensregister schrijven

uit EDR, r19

; Schrijf een logische naar EEMPE

sbi EECR, EEMPE

; Start het schrijven van eeprom door EEPE in te stellen

sbi EECR,EEPE

terug

C-code Bijvample
void EEPROM_write (niet-ondertekende char ucAddress, niet-ondertekende char ucData)

{

/* Wacht op voltooiing van het vorige schrijfproces */ while(EECR & (1<

;

/* Programmeermodus instellen */

EEKR = (0<

/* Adres- en gegevensregisters instellen */ EEAR = ucAddress;

EDR = ucData;

/* Schrijf een logische één naar EEMPE */

EEK |= (1<

/* Start schrijven naar eeprom door EEPE in te stellen */

EEK |= (1<

}

De volgende code bijvampbestanden tonen assembly- en C-functies voor het lezen van de EEPROM. De exampLes gaat ervan uit dat interrupts zo worden bestuurd dat er geen interrupts optreden tijdens de uitvoering van deze functies.

Assemblagecode Bijvample
EEPROM_lezen:

; Wacht tot het vorige schrijfproces is voltooid

sbic EECR,EEPE

rjmp EEPROM_read

; Adres instellen (r18:r17) in adresregister

uit EEARH, r18

uit EEARL, r17

; Start het lezen van de eeprom door EERE te schrijven

sbi EECR, EERE

; Gegevens uit het gegevensregister lezen

in r16,EEDR

terug

C-code Bijvample
niet-ondertekende char EEPROM_read (niet-ondertekende char ucAddress)

{

/* Wacht op voltooiing van het vorige schrijfproces */

terwijl(EECR & (1<

;

/* Adresregister instellen */ EEAR = ucAddress;

/* Start het lezen van eeprom door EERE te schrijven */

EEK |= (1<

/* Gegevens retourneren uit gegevensregister */

EDR retourneren;

}

Voorkomen van EEPROM-corruptie

Tijdens perioden met een lage VCC kunnen de EEPROM-gegevens beschadigd raken omdat het aanbod voltage is te laag om de CPU en de EEPROM goed te laten werken. Deze problemen zijn dezelfde als bij systemen op bordniveau die EEPROM gebruiken, en dezelfde ontwerpoplossingen moeten worden toegepast.

Een EEPROM-gegevensbeschadiging kan worden veroorzaakt door twee situaties waarin de voltage is te laag. Ten eerste vereist een regelmatige schrijfvolgorde naar de EEPROM een minimaal volumetage om correct te werken. Ten tweede kan de CPU zelf instructies verkeerd uitvoeren als het aanbod voltage is te laag.

EEPROM-gegevenscorruptie kan eenvoudig worden vermeden door deze ontwerpaanbeveling te volgen:

Houd de AVR RESET actief (laag) tijdens perioden van onvoldoende voedingsvolumetage. Dit kan worden gedaan door de interne Brown-out Detector (BOD) in te schakelen. Als het detectieniveau van de interne BZV niet overeenkomt met de

nodig detectieniveau kan een extern resetbeveiligingscircuit tegen lage VCC worden gebruikt. Als er een reset plaatsvindt terwijl een schrijfbewerking bezig is, zal de schrijfbewerking worden voltooid, op voorwaarde dat de voeding voltage is voldoende.

I/O-geheugen

De I/O-ruimtedefinitie van de ATtiny25/45/85 wordt weergegeven in “Registratieoverzicht” op pagina 200.

Alle ATtiny25/45/85 I/O's en randapparatuur worden in de I/O-ruimte geplaatst. Alle I/O-locaties zijn toegankelijk via de LD/LDS/LDD- en ST/STS/STD-instructies, waarbij gegevens worden overgedragen tussen de 32 algemene werkregisters en de I/O-ruimte. I/O-registers binnen het adresbereik 0x00 – 0x1F zijn direct bit-toegankelijk met behulp van de SBI- en CBI-instructies. In deze registers kan de waarde van enkele bits worden gecontroleerd met behulp van de SBIS- en SBIC-instructies. Raadpleeg het gedeelte over de instructieset voor meer details. Bij gebruik van de I/O-specifieke commando's IN en OUT moeten de I/O-adressen 0x00 – 0x3F worden gebruikt. Bij het adresseren van I/O-registers als dataruimte met behulp van LD- en ST-instructies, moet 0x20 aan deze adressen worden toegevoegd.

Voor compatibiliteit met toekomstige apparaten moeten gereserveerde bits naar nul worden geschreven als ze worden geopend. Gereserveerde I / O-geheugenadressen mogen nooit worden geschreven.

Sommige statusvlaggen worden gewist door er een logische vlag naar te schrijven. Merk op dat de CBI- en SBI-instructies alleen op het gespecificeerde bit werken en daarom kunnen worden gebruikt op registers die dergelijke statusvlaggen bevatten. De CBI- en SBI-instructies werken alleen met registers 0x00 tot 0x1F.

De I/O- en randapparatuurcontroleregisters worden in latere secties uitgelegd.

Registreer Beschrijving

EEARH – EEPROM-adresregister

Beetje 7 6 5 4 3 2 1 0
0x1F EEAR8 EERH
Lezen/Schrijven R R R R R R R Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 X/0

Bits 7:1 – Res: gereserveerde bits

Deze bits zijn gereserveerd voor toekomstig gebruik en zullen altijd als nul worden gelezen.

Bits 0 – EEAR8: EEPROM-adres

Dit is het belangrijkste EEPROM-adresbit van ATtiny85. Bij apparaten met minder EEPROM, bijvoorbeeld ATtiny25/ATtiny45, is dit bit gereserveerd en zal het altijd nul zijn. De initiële waarde van het EEPROM-adresregister (EEAR) is niet gedefinieerd en er moet daarom een ​​juiste waarde worden geschreven voordat toegang wordt verkregen tot de EEPROM.

EARL – EEPROM-adresregister

Beetje

0x1E EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 EEARL
Achterkant/schrijven Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde X X X X X X X X

Bit 7 – EEAR7: EEPROM-adres

Dit is het belangrijkste EEPROM-adresbit van ATtiny45. Bij apparaten met minder EEPROM, bijvoorbeeld ATtiny25, is dit bit gereserveerd en zal het altijd nul zijn. De initiële waarde van het EEPROM-adresregister (EEAR) is niet gedefinieerd en daarom moet een juiste waarde worden geschreven voordat toegang wordt verkregen tot de EEPROM.

Bits 6:0 – EEAR[6:0]: EEPROM-adres

Dit zijn de (lage) bits van het EEPROM-adresregister. De EEPROM-databytes worden lineair geadresseerd in het bereik 0...(128/256/512-1). De initiële waarde van EEAR is niet gedefinieerd en er moet daarom een ​​juiste waarde worden geschreven voordat toegang kan worden verkregen tot de EEPROM.

EDR – EEPROM-gegevensregister

Beetje 7 6 5 4 3 2 1 0
0x1D EDR7 EDR6 EDR5 EDR4 EDR3 EDR2 EDR1 EDR0 EEDR
Lezen/Schrijven Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 0

Voor de EEPROM-schrijfbewerking bevat het EDR-register de gegevens die naar de EEPROM moeten worden geschreven op het adres dat door het EEAR-register is opgegeven. Voor de EEPROM-leesbewerking bevat de EEDR de gegevens die zijn uitgelezen uit de

EEPROM op het door EEAR opgegeven adres.

 

5.5.4 EECR – EEPROM-controleregister

Beetje 7 6 5 4 3 2 1 0
0x1C        – EEPM1 EEPM0 ENG EEMPE EEPE EER EEKR
Lezen/schrijven R R R/W Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Beginwaarde 0 0 X X 0 0 X 0

Bit 7 – Res: gereserveerde bit

Deze bit is gereserveerd voor toekomstig gebruik en zal altijd als 0 worden gelezen in ATtiny25/45/85. Voor compatibiliteit met toekomstige AVR-apparaten dient u dit bit altijd op nul te schrijven. Maskeer dit stukje na het lezen.

Bit 6 – Res: gereserveerde bit

Dit bit is gereserveerd in de ATtiny25/45/85 en zal altijd als nul worden gelezen.

Bits 5:4 – EEPM[1:0]: EEPROM-programmeermodusbits

De bitsinstelling voor de EEPROM-programmeermodus definieert welke programmeeractie wordt geactiveerd bij het schrijven van EEPE. Het is mogelijk om gegevens in één atomaire bewerking te programmeren (wis de oude waarde en programmeer de nieuwe waarde) of om de wis- en schrijfbewerkingen in twee verschillende bewerkingen te splitsen. De programmeertijden voor de verschillende modi worden weergegeven in Tabel 5-1. Terwijl EEPE is ingesteld, wordt elke schrijfactie naar EEPMn genegeerd. Tijdens het resetten worden de EEPMn-bits gereset naar 0b00, tenzij de EEPROM bezig is met programmeren.

Tabel 5-1. EEPROM-modusbits

EEPM1 EEPM0 Programmeertijd Bediening
0 0 3.4 ms Wissen en schrijven in één handeling (Atomic Operation)
0 1 1.8 ms Alleen wissen
1 0 1.8 ms Alleen schrijven
1 1 Gereserveerd voor toekomstig gebruik

Bit 3 – EERIE: EEPROM Ready Interrupt inschakelen

Door EERIE naar één te schrijven, wordt de EEPROM Ready Interrupt ingeschakeld als de I-bit in SREG is ingesteld. Door EERIE naar nul te schrijven, wordt de interrupt uitgeschakeld. De EEPROM Ready Interrupt genereert een constante interrupt wanneer het niet-vluchtige geheugen gereed is voor programmering.

Bit 2 – EEMPE: EEPROM-masterprogramma inschakelen

De EEMPE-bit bepaalt of het schrijven van EEPE naar één bit effect zal hebben of niet.

Wanneer EEMPE is ingesteld, zal het instellen van EEPE binnen vier klokcycli de EEPROM op het geselecteerde adres programmeren. Als EEMPE nul is, heeft het instellen van EEPE geen effect. Wanneer EEMPE door software naar één is geschreven, wist de hardware de bit na vier klokcycli naar nul.

Bit 1 – EEPE: EEPROM-programma inschakelen

Het EEPROM Programma-vrijgavesignaal EEPE is het programmeervrijgavesignaal naar de EEPROM. Wanneer EEPE wordt geschreven, wordt de EEPROM geprogrammeerd volgens de EEPMn-bitsinstelling. Het EEMPE-bit moet naar een bit worden geschreven voordat er een logische bit naar EEPE wordt geschreven, anders vindt er geen EEPROM-schrijfbewerking plaats. Wanneer de schrijftoegangstijd is verstreken, wordt de EEPE-bit door hardware gewist. Wanneer EEPE is ingesteld, wordt de CPU twee cycli stopgezet voordat de volgende instructie wordt uitgevoerd.

Bit 0 – EERE: EEPROM-lezen inschakelen

Het EEPROM Read Enable Signal – EERE – is de leesflitser voor de EEPROM. Wanneer het juiste adres is ingesteld in het EEAR-register, moet de EERE-bit naar één worden geschreven om het lezen van de EEPROM te activeren. Voor de EEPROM-leestoegang is één instructie nodig en de gevraagde gegevens zijn onmiddellijk beschikbaar. Wanneer de EEPROM wordt gelezen, wordt de CPU vier cycli stopgezet voordat de volgende instructie wordt uitgevoerd. De gebruiker moet de EEPE-bit opvragen voordat hij met de leesbewerking begint. Als er een schrijfbewerking bezig is, is het niet mogelijk de EEPROM te lezen, noch het EEAR-register te wijzigen.

Systeemklok en klokopties

Kloksystemen en hun distributie

Klok distributie

CPU klok

De CPU-klok wordt doorgestuurd naar delen van het systeem die betrokken zijn bij de werking van de AVR-kern. ExampDe bestanden van dergelijke modules zijn het General Purpose Register File, het statusregister en het datageheugen met de Stack Pointer. Door de CPU-klok te stoppen, kan de kern geen algemene bewerkingen en berekeningen uitvoeren.

I/O-klok – clkI/O

De I/O-klok wordt gebruikt door de meeste I/O-modules, zoals Timer/Counter. De I/O-klok wordt ook gebruikt door de External Interrupt-module, maar houd er rekening mee dat sommige externe interrupts worden gedetecteerd door asynchrone logica, waardoor dergelijke interrupts zelfs kunnen worden gedetecteerd als de I/O-klok wordt stopgezet.

Flitsklok – clkFLASH

De Flash-klok regelt de werking van de Flash-interface. De Flash-klok is meestal gelijktijdig met de CPU-klok actief.

ADC-klok – clkADC

De ADC is voorzien van een speciaal klokdomein. Hierdoor kunnen de CPU- en I/O-klokken worden stopgezet om de door digitale schakelingen gegenereerde ruis te verminderen. Dit levert nauwkeurigere ADC-conversieresultaten op.

Interne PLL voor snelle perifere klokgeneratie – clkPCK

De interne PLL in ATtiny25/45/85 genereert een klokfrequentie die 8x wordt vermenigvuldigd vanaf een broningang. Standaard gebruikt de PLL de uitgang van de interne, 8.0 MHz RC-oscillator als bron. Als alternatief, als bit LSM van PLLCSR is ingesteld, zal de PLL de uitvoer van de RC-oscillator gebruiken gedeeld door twee. De output van de PLL, de snelle perifere klok, is dus 64 MHz. De snelle randklok, of een daarvan vooraf geschaalde klok, kan worden geselecteerd als klokbron voor Timer/Counter1 of als systeemklok. Zien Figuur 6-2. De frequentie van de snelle perifere klok wordt door twee gedeeld wanneer LSM of PLLCSR is ingesteld, wat resulteert in een klokfrequentie van 32 MHz. Houd er rekening mee dat LSM niet kan worden ingesteld als PLLCLK als systeemklok wordt gebruikt.

Figuur 6-2. PCK-kloksysteem. PCK-klokken

De PLL is vergrendeld op de RC-oscillator en het aanpassen van de RC-oscillator via het OSCCAL-register zal tegelijkertijd de snelle perifere klok aanpassen. Maar zelfs als de RC-oscillator naar een hogere frequentie dan 8 MHz wordt gebracht, verzadigt de snelle perifere klokfrequentie zich op 85 MHz (in het slechtste geval) en blijft deze oscilleren op de maximale frequentie. Opgemerkt moet worden dat de PLL in dit geval niet langer vergrendeld is met de RC-oscillatorklok. Daarom wordt aanbevolen om de OSCCAL-aanpassingen niet naar een hogere frequentie dan 8 MHz te brengen, om de PLL in het juiste werkbereik te houden.

De interne PLL is ingeschakeld wanneer:

Het PLLE-bit in het register PLLCSR wordt ingesteld.

De CKSEL-zekering is geprogrammeerd op '0001'.

De CKSEL-zekering is geprogrammeerd op '0011'.

Het PLLCSR-bit PLOCK wordt ingesteld wanneer PLL is vergrendeld. Zowel de interne RC-oscillator als de PLL zijn uitgeschakeld in de uitschakel- en stand-by-slaapmodus.

Interne PLL in ATtiny15-compatibiliteitsmodus

Omdat ATtiny25/45/85 een migratieapparaat is voor ATtiny15-gebruikers, is er een ATtiny15-compatibiliteitsmodus voor achterwaartse compatibiliteit. De ATtiny15-compatibiliteitsmodus wordt geselecteerd door de CKSEL-zekeringen te programmeren op '0011'.

In de ATtiny15-compatibiliteitsmodus wordt de frequentie van de interne RC-oscillator gekalibreerd tot 6.4 MHz en wordt de vermenigvuldigingsfactor van de PLL ingesteld op 4x. Zien Figuur 6-3. Met deze aanpassingen is het kloksysteem ATtiny15-compatibel en heeft de resulterende snelle perifere klok een frequentie van 25.6 MHz (hetzelfde als in ATtiny15).

Figuur 6-3. PCK-kloksysteem in ATtiny15-compatibiliteitsmodus. Kloksysteem

Klokbronnen

Het apparaat heeft de volgende klokbronopties, selecteerbaar via Flash Fuse-bits, zoals hieronder weergegeven. De klok van de geselecteerde bron wordt ingevoerd in de AVR-klokgenerator en naar de juiste modules geleid.

Tabel 6-1. Apparaatklokopties Selecteer

Apparaatklokoptie CKSEL[3:0](1)
Externe klok (zien pagina 26) 0000
Hoogfrequente PLL-klok (zien pagina 26) 0001
Gekalibreerde interne oscillator (zien pagina 27) 0010(2)
Gekalibreerde interne oscillator (zien pagina 27) 0011(3)
Interne 128 kHz-oscillator (zien pagina 28) 0100
Laagfrequente kristaloscillator (zien pagina 29) 0110
Kristaloscillator / keramische resonator (zien pagina 29) 1000 – 1111
Gereserveerd 0101, 0111

Voor alle zekeringen betekent “1” niet geprogrammeerd, terwijl “0” geprogrammeerd betekent.

Het apparaat wordt geleverd met deze optie geselecteerd.

Hierdoor wordt de ATtiny15-compatibiliteitsmodus geselecteerd, waarbij de systeemklok door vier wordt gedeeld, wat resulteert in een klokfrequentie van 1.6 MHz. Voor meer informatie, zie “Gekalibreerde interne oscillator” op pagina 27.

De verschillende keuzes voor elke boekingsoptie worden in de volgende secties gegeven. Wanneer de CPU ontwaakt na het uitschakelen, wordt de geselecteerde klokbron gebruikt om het opstarten te timen, waardoor een stabiele werking van de oscillator wordt gegarandeerd voordat de uitvoering van de instructies begint. Wanneer de CPU opnieuw wordt ingesteld, is er een extra vertraging waardoor het vermogen een stabiel niveau bereikt voordat de normale werking begint. Voor de timing van dit real-time deel van de opstarttijd wordt de Watchdog Oscillator gebruikt. Het aantal WDT-oscillatorcycli dat voor elke time-out wordt gebruikt, wordt weergegeven in Tabel 6-2.

Tabel 6-2. Aantal Watchdog-oscillatorcycli

Typ Time-out Aantal cycli
4 ms 512
64 ms 8K (8,192)

Externe klok

Om het apparaat vanaf een externe klokbron aan te sturen, moet CLKI worden aangestuurd zoals weergegeven in Figuur 6-4. Om het apparaat op een externe klok te laten werken, moeten de CKSEL-zekeringen op “00” worden geprogrammeerd.

Figuur 6-4. Configuratie externe klokaandrijving

Figuur 6.4

Wanneer deze klokbron is geselecteerd, worden de opstarttijden bepaald door de SUT-zekeringen, zoals weergegeven in Tabel 6-3.

Tabel 6-3. Opstarttijden voor de externe klokselectie

ZUT[1:0] Opstarttijd vanaf uitschakelen Extra vertraging vanaf reset Aanbevolen gebruik
00 6 K.K 14CK BOD ingeschakeld
01 6 K.K 14CK + 4 ms Snel stijgend vermogen
10 6 K.K 14CK + 64 ms Langzaam stijgende macht
11 Gereserveerd

Bij het toepassen van een externe klok is het nodig om plotselinge veranderingen in de toegepaste klokfrequentie te vermijden om een ​​stabiele werking van de MCU te garanderen. Een frequentievariatie van meer dan 2% van de ene klokcyclus naar de volgende kan tot onvoorspelbaar gedrag leiden. Het is vereist om ervoor te zorgen dat de MCU tijdens dergelijke veranderingen in de klokfrequentie in de resetstand blijft.

Houd er rekening mee dat de systeemklokvoorverkoop kan worden gebruikt om runtimewijzigingen van de interne klokfrequentie te implementeren en tegelijkertijd een stabiele werking te garanderen. Verwijzen naar “Systeemklokvoorschaler” op pagina 31 voor meer informatie.

Hoogfrequente PLL-klok

Er is een interne PLL die een nominale kloksnelheid van 64 MHz levert die is vergrendeld voor de RC-oscillator voor het gebruik van de Peripheral Timer/Counter1 en voor de systeemklokbron. Wanneer geselecteerd als systeemklokbron, door het programmeren van de CKSEL-zekeringen op '0001', wordt deze door vier gedeeld, zoals weergegeven in Tabel 6-4.

Tabel 6-4. Bedrijfsmodi PLL-klok met hoge frequentie

CKSEL[3:0] Nominale frequentie
0001 16 MHz

Wanneer deze klokbron is geselecteerd, worden de opstarttijden bepaald door de SUT-zekeringen, zoals weergegeven in Tabel 6-5.

Tabel 6-5. Opstarttijden voor de hoogfrequente PLL-klok

ZUT[1:0] Opstarttijd vanaf uitschakelen Extra vertraging vanaf reset bij inschakelen (VCC = 5.0 V) Aanbevolen gebruik
00 14CK + 1K (1024) CK + 4 ms 4 ms BOD ingeschakeld

Tabel 6-5. Opstarttijden voor de hoogfrequente PLL-klok

ZUT[1:0] Opstarttijd vanaf uitschakelen Extra vertraging vanaf reset bij inschakelen (VCC = 5.0 V) Aanbevolen gebruik
01 14CK + 16K (16384) CK + 4 ms 4 ms Snel stijgend vermogen
10 14CK + 1K (1024) CK + 64 ms 4 ms Langzaam stijgende macht
11 14CK + 16K (16384) CK + 64 ms 4 ms Langzaam stijgende macht

Gekalibreerde interne oscillator

Standaard levert de interne RC-oscillator een kloksnelheid van ongeveer 8.0 MHz. Hoewel voltage en temperatuurafhankelijk kan deze klok zeer nauwkeurig door de gebruiker worden gekalibreerd. Zien “Gekalibreerde interne RC-oscillator accu- pittig” op pagina 164 En “Interne oscillatorsnelheid” op pagina 192 voor meer details. Het apparaat wordt geleverd met de CKDIV8-zekering geprogrammeerd. Zien “Systeemklokvoorschaler” op pagina 31 voor meer informatie.

Deze klok kan worden geselecteerd als de systeemklok door de CKSEL-zekeringen te programmeren zoals weergegeven in Tabel 6-6 op pagina

27. Indien geselecteerd, werkt het zonder externe componenten. Tijdens het resetten laadt de hardware de voorgeprogrammeerde kalibratiewaarde in het OSCCAL-register en kalibreert daardoor automatisch de RC-oscillator. De nauwkeurigheid van deze kalibratie wordt weergegeven als Fabriekskalibratie in Tabel 21-2 op pagina 164.

Door het OSCCAL-register van SW te wijzigen, zie “OSCCAL – Oscillatorkalibratieregister” op pagina 31, is het mogelijk om een ​​hogere kalibratienauwkeurigheid te verkrijgen dan bij gebruik van de fabriekskalibratie. De nauwkeurigheid van deze kalibratie wordt weergegeven als Gebruikerskalibratie in Tabel 21-2 op pagina 164.

Wanneer deze Oscillator als chipklok wordt gebruikt, wordt de Watchdog Oscillator nog steeds gebruikt voor de Watchdog Timer en voor de Reset Time-out. Voor meer informatie over de voorgeprogrammeerde kalibratiewaarde, zie de sectie “Cali- bratiebytes” op pagina 150.

De interne oscillator kan ook worden ingesteld om een ​​klok van 6.4 MHz te leveren door CKSEL-zekeringen naar “0011” te schrijven, zoals weergegeven in Tabel 6-6 onderstaand. Deze instelling wordt de ATtiny15-compatibiliteitsmodus genoemd en is bedoeld om een ​​gekalibreerde klokbron te bieden op 6.4 MHz, zoals in ATtiny15. In de ATtiny15-compatibiliteitsmodus gebruikt de PLL de interne oscillator die op 6.4 MHz draait om een ​​perifeer kloksignaal van 25.6 MHz te genereren voor Timer/Counter1 (zie “8-bit timer/teller1 in ATtiny15-modus” op pagina 95). Merk op dat in deze werkingsmodus het 6.4 MHz kloksignaal altijd door vier wordt gedeeld, wat een systeemklok van 1.6 MHz oplevert.

Tabel 6-6. Intern gekalibreerde RC-oscillator-bedrijfsmodi

CKSEL[3:0] Nominale frequentie
0010(1) 8.0 MHz
0011(2) 6.4 MHz

Het apparaat wordt geleverd met deze optie geselecteerd.

Deze instelling selecteert de ATtiny15-compatibiliteitsmodus, waarbij de systeemklok door vier wordt gedeeld, wat resulteert in een klokfrequentie van 1.6 MHz.

Wanneer de gekalibreerde 8 MHz interne oscillator als klokbron wordt geselecteerd, worden de opstarttijden bepaald door de SUT-zekeringen, zoals weergegeven in Tabel 6-7 onderstaand.

Tabel 6-7. Opstarttijden voor intern gekalibreerde RC-oscillatorklok

ZUT[1:0] Opstarttijd vanaf uitschakelen Extra vertraging vanaf reset (VCC = 5.0 V) Aanbevolen gebruik
00 6 K.K 14CK(1) BOD ingeschakeld
01 6 K.K 14CK + 4 ms Snel stijgend vermogen
10(2) 6 K.K 14CK + 64 ms Langzaam stijgende macht
11 Gereserveerd

1. Als de RSTDISBL-zekering is geprogrammeerd, wordt deze opstarttijd verlengd tot 14CK + 4 ms om ervoor te zorgen dat de programmeermodus kan worden geopend.
2. Het apparaat wordt geleverd met deze optie geselecteerd.

In de ATtiny15-compatibiliteitsmodus worden de opstarttijden bepaald door SUT-zekeringen, zoals weergegeven in Tabel 6-8 onderstaand.

Tabel 6-8. Opstarttijden voor intern gekalibreerde RC-oscillatorklok (in ATtiny15-modus)

ZUT[1:0] Opstarttijd vanaf uitschakelen Extra vertraging vanaf reset (VCC = 5.0 V) Aanbevolen gebruik
00 6 K.K 14CK + 64 ms
01 6 K.K 14CK + 64 ms
10 6 K.K 14CK + 4 ms
11 1 K.K 14CK(1)

Opmerking: Als de RSTDISBL-zekering is geprogrammeerd, wordt deze opstarttijd verlengd tot 14CK + 4 ms om ervoor te zorgen dat de programmeermodus kan worden geopend.

Samenvattend kunt u meer informatie over de ATtiny15-compatibiliteitsmodus vinden in de secties “Poort B (PB5:PB0)” aan pagina 2“Interne PLL in ATtiny15-compatibiliteitsmodus” op pagina 24“8-bit Timer/Counter1 in ATtiny15-modus” aan pagina 95“Beperkingen van debugWIRE” op pagina 140“Kalibratiebytes” op pagina 150 en in tabel “Klokvoorschaler Selecteer” op pagina 33.

Interne 128 kHz-oscillator

De 128 kHz interne oscillator is een oscillator met laag vermogen die een kloksnelheid van 128 kHz levert. De frequentie is nominaal bij 3V en 25°C. Deze klok kan worden geselecteerd als de systeemklok door de CKSEL-zekeringen te programmeren op “0100”.

Wanneer deze klokbron is geselecteerd, worden de opstarttijden bepaald door de SUT-zekeringen, zoals weergegeven in Tabel 6-9.

Tabel 6-9. Opstarttijden voor de 128 kHz interne oscillator

ZUT[1:0] Opstarttijd vanaf uitschakelen Extra vertraging vanaf reset Aanbevolen gebruik
00 6 K.K 14CK(1) BOD ingeschakeld
01 6 K.K 14CK + 4 ms Snel stijgend vermogen
10 6 K.K 14CK + 64 ms Langzaam stijgende macht
11 Gereserveerd

Opmerking: Als de RSTDISBL-zekering is geprogrammeerd, wordt deze opstarttijd verlengd tot 14CK + 4 ms om ervoor te zorgen dat de programmeermodus kan worden geopend.

Laagfrequente kristaloscillator

Om een ​​horlogekristal van 32.768 kHz als klokbron voor het apparaat te gebruiken, moet de laagfrequente kristaloscillator worden geselecteerd door de CKSEL-zekeringen in te stellen op '0110'. Het kristal moet worden aangesloten zoals weergegeven in Figuur 6-5. Raadpleeg het gegevensblad van de fabrikant om de geschikte belastingscapaciteit voor een kristal van 32.768 kHz te vinden.

Wanneer deze oscillator is geselecteerd, worden de opstarttijden bepaald door de SUT-zekeringen, zoals weergegeven in Tabel 6-10.

Tabel 6-10. Opstarttijden voor de laagfrequente kristaloscillatorklokselectie

ZUT[1:0] Opstarttijd vanaf uitschakelen Extra vertraging vanaf reset (VCC = 5.0 V) Aanbevolen gebruik
00 1K (1024)CK(1) 4 ms Snel stijgend vermogen of BOD ingeschakeld
01 1K (1024)CK(1) 64 ms Langzaam stijgende macht
10 32K (32768)CK 64 ms Stabiele frequentie bij opstarten
11 Gereserveerd

Opmerking: deze opties mogen alleen worden gebruikt als frequentiestabiliteit bij het opstarten niet belangrijk is.

De laagfrequente kristaloscillator biedt een interne belastingscapaciteit, zie Tabel 6-11 bij elke TOSC-pin.

Tabel 6-11. Capaciteit van laagfrequente kristaloscillator

Apparaat 32 kHz Osc. Type Dop (Xtal1/Tosc1) Dop (Xtal2/Tosc2)
ATtiny25/45/85 Systeem-osc. 16 pF 6 pF

Kristaloscillator / keramische resonator

XTAL1 en XTAL2 zijn respectievelijk invoer en uitvoer van een invertering amplifier die kan worden geconfigureerd voor gebruik als een On-chip Oscillator, zoals weergegeven in Figuur 6-5. Er kan gebruik worden gemaakt van een kwartskristal of een keramische resonator.

C1 en C2 moeten altijd gelijk zijn voor zowel kristallen als resonatoren. De optimale waarde van de condensatoren hangt af van het gebruikte kristal of de resonator, de hoeveelheid strooicapaciteit en de elektromagnetische ruis van de omgeving. Enkele initiële richtlijnen voor het kiezen van condensatoren voor gebruik met kristallen worden gegeven in Tabel 6-12 onderstaand. Voor keramische resonatoren moeten de door de fabrikant opgegeven condensatorwaarden worden gebruikt.

Tabel 6-12. Bedrijfsmodi van de kristaloscillator

CKSEL[3:1] Frequentiebereik (MHz) Aanbevolen bereik voor condensatoren C1 en C2 voor gebruik met kristallen (pF)
100(1) 0.4 – 0.9
101 0.9 – 3.0 12 – 22
110 3.0 – 8.0 12 – 22
111 8.0 – 12 – 22

Opmerkingen: Deze optie mag niet worden gebruikt bij kristallen, alleen bij keramische resonatoren.

De oscillator kan in drie verschillende modi werken, elk geoptimaliseerd voor een specifiek frequentiebereik. De bedrijfsmodus wordt geselecteerd door de zekeringen CKSEL[3:1], zoals weergegeven in Tabel 6-12.

De CKSEL0-zekering selecteert samen met de SUT[1:0]-zekeringen de opstarttijden zoals weergegeven in Tabel 6-13.

Tabel 6-13. Opstarttijden voor de kristaloscillatorklokselectie

CKSEL0 ZUT[1:0] Opstarttijd vanaf uitschakelen Extra vertraging vanaf reset Aanbevolen gebruik
0 00 258 K.K(1) 14CK + 4 ms Keramische resonator, snel stijgend vermogen
0 01 258 K.K(1) 14CK + 64 ms Keramische resonator, langzaam stijgend vermogen
0 10 1K (1024)CK(2) 14CK Keramische resonator, BOD ingeschakeld
0 11 1K (1024)CK(2) 14CK + 4 ms Keramische resonator, snel stijgend vermogen
1 00 1K (1024)CK(2) 14CK + 64 ms Keramische resonator, langzaam stijgend vermogen
1 01 16K (16384)CK 14CK Kristaloscillator, BOD ingeschakeld
1 10 16K (16384)CK 14CK + 4 ms Kristaloscillator, snel stijgend vermogen
1 11 16K (16384)CK 14CK + 64 ms Kristaloscillator, langzaam stijgend vermogen

Notities

Deze opties mogen alleen worden gebruikt als ze niet in de buurt van de maximale frequentie van het apparaat werken, en alleen als frequentiestabiliteit bij het opstarten niet belangrijk is voor de toepassing. Deze opties zijn niet geschikt voor kristallen.

Deze opties zijn bedoeld voor gebruik met keramische resonatoren en zorgen voor frequentiestabiliteit bij het opstarten. Ze kunnen ook worden gebruikt met kristallen als ze niet in de buurt van de maximale frequentie van het apparaat werken en als frequentiestabiliteit bij het opstarten niet belangrijk is voor de toepassing.

Standaard klokbron

Het apparaat wordt geleverd met CKSEL = “0010”, SUT = “10” en CKDIV8 geprogrammeerd. De standaardklokbroninstelling is daarom de interne RC-oscillator die draait op 8 MHz met de langste opstarttijd en een initiële systeemklokvoorschaling van 8, wat resulteert in een systeemklok van 1.0 MHz. Deze standaardinstelling zorgt ervoor dat alle gebruikers de gewenste klokbroninstelling kunnen maken met behulp van een In-System of High-voltage Programmeur.

Systeemklokvoorschaler

De ATtiny25/45/85 systeemklok kan worden verdeeld door het instellen van de “CLKPR – Klokvoorschaalregistratie” op pagina 32. Deze functie kan worden gebruikt om het energieverbruik te verminderen wanneer de vereiste verwerkingskracht laag is. Dit kan worden gebruikt met alle klokbronopties en heeft invloed op de klokfrequentie van de CPU en alle synchrone randapparatuur. clkI/O, clkADC, clkCPU en clkFLASH worden gedeeld door een factor zoals weergegeven in Tabel 6-15 op pagina 33.

Schakeltijd

Bij het schakelen tussen prescalerinstellingen zorgt de System Clock Prescaler ervoor dat er geen storingen optreden in het kloksysteem en dat geen enkele tussenfrequentie hoger is dan de klokfrequentie die overeenkomt met de vorige instelling, noch de klokfrequentie die overeenkomt met de nieuwe instelling.

De rimpelteller die de prescaler implementeert, werkt op de frequentie van de onverdeelde klok, wat sneller kan zijn dan de klokfrequentie van de CPU. Daarom is het niet mogelijk om de status van de prescaler te bepalen – ook al zou deze leesbaar zijn, en kan de exacte tijd die nodig is om van de ene klokverdeling naar de andere over te schakelen niet precies worden voorspeld.

Vanaf het moment dat de CLKPS-waarden worden geschreven, duurt het tussen T1 + T2 en T1 + 2*T2 voordat de nieuwe klokfrequentie actief is. In dit interval worden 2 actieve klokflanken geproduceerd. Hier is T1 de vorige klokperiode, en T2 is de periode die overeenkomt met de nieuwe prescaler-instelling.

Klokuitgangsbuffer

Het apparaat kan de systeemklok uitvoeren op de CLKO-pin (wanneer deze niet wordt gebruikt als XTAL2-pin). Om de uitgang in te schakelen, moet de CKOUT-zekering worden geprogrammeerd. Deze modus is geschikt wanneer de chipklok wordt gebruikt om andere circuits in het systeem aan te sturen. Houd er rekening mee dat de klok tijdens het resetten niet wordt uitgevoerd en dat de normale werking van de I/O-pin wordt overschreven wanneer de zekering wordt geprogrammeerd. Interne RC-oscillator, WDT-oscillator, PLL en externe klok (CLKI) kunnen worden geselecteerd wanneer de klok wordt uitgevoerd op CLKO. Kristaloscillatoren (XTAL1, XTAL2) kunnen niet worden gebruikt voor klokuitvoer op CLKO. Als de System Clock Prescaler wordt gebruikt, wordt de verdeelde systeemklok uitgevoerd.

Registreer Beschrijving

OSCCAL – Kalibratieregister van de oscillator

Beetje 7 6 5 4 3 2 1 0
0x31 CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL
Lezen/Schrijven Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit

Bits 7:0 – CAL[7:0]: Kalibratiewaarde van de oscillator

Het oscillatorkalibratieregister wordt gebruikt om de gekalibreerde interne RC-oscillator te trimmen om procesvariaties uit de oscillatorfrequentie te verwijderen. Tijdens de chipreset wordt automatisch een voorgeprogrammeerde kalibratiewaarde naar dit register geschreven, waardoor de in de fabriek gekalibreerde frequentie wordt verkregen zoals gespecificeerd in Tabel 21-2 op pagina 164. De applicatiesoftware kan dit register schrijven om de oscillatorfrequentie te wijzigen. De oscillator kan worden gekalibreerd op frequenties zoals gespecificeerd in Tabel 21-2 op pagina 164. Kalibratie buiten dat bereik is niet gegarandeerd.

Merk op dat deze oscillator wordt gebruikt om EEPROM- en Flash-schrijftoegangen te timen, en deze schrijftijden zullen dienovereenkomstig worden beïnvloed. Als de EEPROM of Flash zijn geschreven, mag u niet kalibreren op meer dan 8.8 MHz. Anders kan het schrijven naar EEPROM of Flash mislukken.

De CAL7-bit bepaalt het werkingsbereik van de oscillator. Als u dit bit op 0 zet, krijgt u het laagste frequentiebereik, als u dit bit op 1 zet, krijgt u het hoogste frequentiebereik. De twee frequentiebereiken overlappen elkaar, met andere woorden: een instelling van OSCCAL = 0x7F geeft een hogere frequentie dan OSCCAL = 0x80.

De CAL[6:0]-bits worden gebruikt om de frequentie binnen het geselecteerde bereik af te stemmen. Een instelling van 0x00 geeft de laagste frequentie in dat bereik, en een instelling van 0x7F geeft de hoogste frequentie in het bereik.

Om een ​​stabiele werking van de MCU te garanderen, moet de kalibratiewaarde klein worden gewijzigd. Een frequentievariatie van meer dan 2% van cyclus tot cyclus kan tot onvoorspelbaar gedrag leiden. Veranderingen in OSCCAL mogen voor elke kalibratie niet groter zijn dan 0x20. Het is vereist om ervoor te zorgen dat de MCU tijdens dergelijke veranderingen in de klokfrequentie in de resetstand blijft

Tabel 6-14. Frequentiebereik van de interne RC-oscillator

OSCCAL-waarde Typische laagste frequentie met betrekking tot nominale frequentie Typische hoogste frequentie met betrekking tot nominale frequentie
0x00 50% 100%
0x3F 75% 150%
0x7F 100% 200%

CLKPR – Klokvoorschaalregister

Beetje 7 6 5 4 3 2 1 0
0x26 CLKPCE CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR
Lezen/Schrijven Rood/Wit R R R Rood/Wit Rood/Wit Rood/Wit Rood/Wit

Initiële waarde 0 0 0 0 Zie bitbeschrijving

Bit 7 – CLKPCE: Wijziging klokvoorschaler inschakelen

Het CLKPCE-bit moet naar logische één worden geschreven om verandering van de CLKPS-bits mogelijk te maken. Het CLKPCE-bit wordt alleen bijgewerkt wanneer de andere bits in CLKPR gelijktijdig naar nul worden geschreven. CLKPCE wordt door hardware gewist vier cycli nadat het is geschreven of wanneer de CLKPS-bits zijn geschreven. Het herschrijven van de CLKPCE-bit binnen deze time-outperiode verlengt de time-outperiode niet, noch wist de CLKPCE-bit.

Bits 6:4 – Res: gereserveerde bits

Deze bits zijn gereserveerde bits in de ATtiny25/45/85 en zullen altijd als nul worden gelezen.

Bits 3:0 – CLKPS[3:0]: Selectie klokvoorschaler Bits 3 – 0

Deze bits definiëren de deelfactor tussen de geselecteerde klokbron en de interne systeemklok. Deze bits kunnen runtime worden geschreven om de klokfrequentie te variëren om aan de toepassingsvereisten te voldoen. Terwijl de deler de hoofdklokingang naar de MCU verdeelt, wordt de snelheid van alle synchrone randapparatuur verlaagd wanneer een deelfactor wordt gebruikt. De delingsfactoren zijn opgegeven Tabel 6-15.

Om onbedoelde veranderingen van de klokfrequentie te voorkomen, moet een speciale schrijfprocedure worden gevolgd om de CLKPS-bits te wijzigen:

Schrijf de Clock Prescaler Change Enable (CLKPCE)-bit naar één en alle andere bits in CLKPR naar nul.

Schrijf binnen vier cycli de gewenste waarde naar CLKPS terwijl u een nul naar CLKPCE schrijft.

Interrupts moeten worden uitgeschakeld bij het wijzigen van de prescaler-instelling om ervoor te zorgen dat de schrijfprocedure niet wordt onderbroken.

De CKDIV8-zekering bepaalt de initiële waarde van de CLKPS-bits. Als CKDIV8 niet is geprogrammeerd, worden de CLKPS-bits gereset naar “0000”. Als CKDIV8 is geprogrammeerd, worden CLKPS-bits gereset naar “0011”, wat bij het opstarten een deelfactor van acht oplevert. Deze functie moet worden gebruikt als de geselecteerde klokbron een hogere frequentie heeft dan de maximale frequentie van het apparaat onder de huidige bedrijfsomstandigheden. Merk op dat elke waarde naar de CLKPS-bits kan worden geschreven, ongeacht de CKDIV8 Fuse-instelling. De Applicatiesoftware moet ervoor zorgen dat er voldoende delingsfactor is

gekozen als de geselecteerde klokbron een hogere frequentie heeft dan de maximale frequentie van het apparaat onder de huidige bedrijfsomstandigheden. Het apparaat wordt geleverd met de CKDIV8-zekering geprogrammeerd.

Tabel 6-15. Klokvoorschaler selecteren

CLKPS3 CLKPS2 CLKPS1 CLKPS0 Klokverdelingsfactor
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 Gereserveerd
1 0 1 0 Gereserveerd
1 0 1 1 Gereserveerd
1 1 0 0 Gereserveerd
1 1 0 1 Gereserveerd
1 1 1 0 Gereserveerd
1 1 1 1 Gereserveerd

Opmerking: De prescaler is uitgeschakeld in de ATtiny15-compatibiliteitsmodus en noch het schrijven naar CLKPR, noch het programmeren van de CKDIV8-zekering heeft enig effect op de systeemklok (die altijd 1.6 MHz zal zijn).

Energiebeheer en slaapmodi

De hoge prestaties en toonaangevende code-efficiëntie maken de AVR-microcontrollers een ideale keuze voor toepassingen met laag vermogen. Bovendien zorgen slaapmodi ervoor dat de applicatie ongebruikte modules in de MCU kan uitschakelen, waardoor energie wordt bespaard. De AVR biedt verschillende slaapmodi waarmee de gebruiker het stroomverbruik kan afstemmen op de vereisten van de toepassing.

Slaapmodi

Afbeelding 6-1 op pagina 23 presenteert de verschillende kloksystemen en hun distributie in ATtiny25/45/85. De afbeelding is nuttig bij het selecteren van een geschikte slaapmodus. Tabel 7-1 toont de verschillende slaapmodi en hun ontwaakbronnen.

Tabel 7-1. Actieve klokdomeinen en wekbronnen in de verschillende slaapmodi

Actieve klokdomeinen Oscillatoren Wakker wordende bronnen
Slaapstand clkCPU clkFLASH clkIO clkADC clkPCK Hoofdklokbron ingeschakeld INT0 en pincode wijzigen SPM/EEPROM

Klaar

 

USI-startvoorwaarde

ADC Andere I/O Waakhond Onderbreken
Inactief X X X X X X X X X X
ADC-ruisonderdrukking X X X(1) X X X X
Stroomstoring X(1) X X

Opmerking: voor INT0 alleen niveau-interrupt.

Om een ​​van de drie slaapmodi te betreden, moet het SE-bit in MCUCR naar logische één worden geschreven en moet een SLEEP-instructie worden uitgevoerd. De SM[1:0]-bits in het MCUCR-register selecteren welke slaapmodus (Idle, ADC Noise Reduction of Power-down) zal worden geactiveerd door de SLEEP-instructie. Zien Tabel 7-2 voor een samenvatting.

Als er een ingeschakelde interrupt optreedt terwijl de MCU zich in de slaapmodus bevindt, wordt de MCU wakker. De MCU wordt dan naast de opstarttijd gedurende vier cycli gestopt, voert de interruptroutine uit en hervat de uitvoering vanaf de instructie die volgt op SLEEP. De inhoud van het Register File en SRAM blijven ongewijzigd wanneer het apparaat uit de slaapstand ontwaakt. Als er tijdens de slaapmodus een reset plaatsvindt, wordt de MCU wakker en wordt deze uitgevoerd via de Reset Vector.

Opmerking: als een niveau-getriggerde interrupt wordt gebruikt voor het ontwaken, moet het gewijzigde niveau enige tijd worden vastgehouden om de MCU te wekken (en om de MCU de interrupt-serviceroutine te laten starten). Zien “Externe interrupts” op pagina 49 voor meer informatie.

Inactieve modus

Wanneer de SM[1:0]-bits naar 00 worden geschreven, zorgt de SLEEP-instructie ervoor dat de MCU in de inactieve modus gaat, waardoor de CPU wordt gestopt, maar Analoge Comparator, ADC, USI, Timer/Counter, Watchdog en het interruptsysteem kunnen blijven werken. eten. Deze slaapmodus stopt feitelijk clkCPU en clkFLASH, terwijl de andere klokken kunnen draaien.

In de inactieve modus kan de MCU ontwaken door zowel extern geactiveerde interrupts als interne interrupts zoals de Timer Overflow. Als ontwaken door de onderbreking van de analoge comparator niet vereist is, kan de analoge comparator worden uitgeschakeld door de ACD-bit in te stellen “ACSR – Analoge comparatorbesturing en statusregister” op pagina 120. Hierdoor wordt het stroomverbruik in de inactieve modus verminderd. Als de ADC is ingeschakeld, start er automatisch een conversie wanneer deze modus wordt geactiveerd.

ADC-ruisonderdrukkingsmodus

Wanneer de SM[1:0]-bits naar 01 worden geschreven, zorgt de SLEEP-instructie ervoor dat de MCU naar de ADC-ruisonderdrukkingsmodus gaat, waardoor de CPU wordt gestopt, maar de ADC, de externe interrupts en de Watchdog kunnen blijven werken (indien ingeschakeld). Deze slaapmodus stopt clkI/O, clkCPU en clkFLASH, terwijl de andere klokken kunnen draaien.

Dit verbetert de geluidsomgeving voor de ADC, waardoor metingen met een hogere resolutie mogelijk zijn. Als de ADC is ingeschakeld, start er automatisch een conversie wanneer deze modus wordt geactiveerd. Afgezien van de ADC Conversion Complete interrupt, kan alleen een External Reset, een Watchdog Reset, een Brown-out Reset, een SPM/EEPROM ready interrupt, een externe niveau-interrupt op INT0 of een pin change interrupt de MCU wakker maken van ADC Noise Reduction modus.

Uitschakelmodus

Wanneer de SM[1:0]-bits naar 10 worden geschreven, zorgt de SLEEP-instructie ervoor dat de MCU naar de uitschakelmodus gaat. In deze modus wordt de oscillator gestopt, terwijl de externe interrupts, de USI-startconditiedetectie en de Watchdog blijven werken (indien ingeschakeld). Alleen een externe reset, een watchdog-reset, een brown-out-reset, een USI-startconditie-onderbreking, een externe niveau-onderbreking op INT0 of een pinwissel-interrupt kunnen de MCU wekken. Deze slaapmodus stopt alle gegenereerde klokken, waardoor alleen asynchrone modules kunnen werken.

Software BOD uitschakelen

Wanneer de Brown-out Detector (BOD) wordt ingeschakeld door BODLEVEL-zekeringen (zie Tabel 20-4 op pagina 148), houdt de BOD actief toezicht op het aanbodvolumetage tijdens een slaapperiode. Bij sommige apparaten is het mogelijk om energie te besparen door de BOD softwarematig uit te schakelen in de Power-Down-slaapmodus. Het energieverbruik in de slaapmodus zal dan op hetzelfde niveau liggen als wanneer BOD globaal wordt uitgeschakeld door zekeringen.

Als BOD softwarematig wordt uitgeschakeld, wordt de BOD-functie onmiddellijk uitgeschakeld nadat de slaapmodus is geactiveerd. Bij het ontwaken uit de slaapstand wordt BOD automatisch weer ingeschakeld. Dit garandeert een veilige werking als het VCC-niveau tijdens de slaapperiode is gedaald.

Wanneer de BOD is uitgeschakeld, zal de wektijd vanuit de slaapmodus dezelfde zijn als die voor het ontwaken vanuit RESET. De gebruiker moet de ontwaaktijden handmatig configureren, zodat de bandgap-referentie tijd heeft om te starten en de BOD correct werkt voordat de MCU doorgaat met het uitvoeren van code. Zie SUT[1:0] en CKSEL[3:0] zekeringbits in de tabel “Zekering laag Byte” op pagina 149

BOD-uitschakeling wordt bestuurd door het BODS-bit (BOD Sleep) van het MCU-controleregister, zie “MCUCR – MCU-besturing Registreren” op pagina 37. Als u dit bit naar één schrijft, wordt BOD uitgeschakeld tijdens het uitschakelen, terwijl het schrijven van een nul de BOD actief houdt. De standaardinstelling is nul, dwz BOD actief.

Het schrijven naar de BODS-bit wordt bestuurd door een getimede reeks en een enable-bit, zie “MCUCR – MCU-controleregister ter” op pagina 37.

Beperkingen

De BOD-uitschakelfunctionaliteit is alleen op de volgende apparaten geïmplementeerd:

ATtiny25, revisie E en nieuwer

ATtiny45, revisie D en nieuwer

ATtiny85, revisie C en nieuwer

Revisies staan ​​aangegeven op de verpakking van het apparaat en kunnen als volgt worden gevonden:

Onderkant van pakketten 8P3 en 8S2

Bovenzijde van pakket 20M1

Register voor vermogensreductie

Het Power Reduction Register (PRR), zie “PRR – Stroomreductieregister” op pagina 38, biedt een methode om het stroomverbruik te verminderen door de klok van individuele randapparatuur te stoppen. De huidige status van het randapparaat is bevroren en de I/O-registers kunnen niet worden gelezen of geschreven. Hulpbronnen die door het randapparaat worden gebruikt bij het stoppen van de klok, blijven bezet. Daarom moet het randapparaat in de meeste gevallen worden uitgeschakeld voordat de klok wordt gestopt. Als u een module wakker maakt, wat wordt gedaan door de bit in PRR te wissen, wordt de module in dezelfde staat geplaatst als vóór het afsluiten.

Module-uitschakeling kan worden gebruikt in de inactieve modus en de actieve modus om het totale energieverbruik aanzienlijk te verminderen. In alle andere slaapmodi staat de klok al stil. Zien “Voedingsstroom van I/O-modules” op pagina 177 bijvoorbeeldamples.

Stroomverbruik minimaliseren

Er zijn verschillende zaken waarmee u rekening moet houden als u het stroomverbruik in een AVR-gestuurd systeem probeert te minimaliseren. Over het algemeen moeten de slaapmodi zoveel mogelijk worden gebruikt en moet de slaapmodus zo worden geselecteerd dat zo min mogelijk functies van het apparaat actief zijn. Alle functies die niet nodig zijn, moeten worden uitgeschakeld. Met name de volgende modules behoeven mogelijk speciale aandacht bij het streven naar een zo laag mogelijk stroomverbruik.

Analoog naar digitaal converter

Indien ingeschakeld, wordt de ADC in alle slaapmodi ingeschakeld. Om energie te besparen moet de ADC worden uitgeschakeld voordat deze naar een slaapmodus gaat. Wanneer de ADC wordt uit- en weer ingeschakeld, zal de volgende conversie een uitgebreide conversie zijn. Verwijzen naar “Analoog naar digitaal converter” op pagina 122 voor meer informatie over de werking van ADC.

Analoge vergelijker

Wanneer u naar de inactieve modus gaat, moet de analoge comparator worden uitgeschakeld als deze niet wordt gebruikt. Wanneer u de ADC-ruisonderdrukkingsmodus activeert, moet de analoge comparator worden uitgeschakeld. In de andere slaapmodi wordt de Analoge Comparator automatisch uitgeschakeld. Als de Analoge Comparator echter is ingesteld om de Internal Voltage Referentie als invoer: de analoge comparator moet in alle slaapmodi worden uitgeschakeld. Anders zal de Interne Voltage Referentie wordt ingeschakeld, onafhankelijk van de slaapmodus. Verwijzen naar “Analoge comparator” op pagina 119 voor meer informatie over het configureren van de analoge comparator.

Brown-out-detector

Als de Brown-out Detector niet nodig is in de toepassing, moet deze module worden uitgeschakeld. Als de Brown-out-detector wordt ingeschakeld door de BODLEVEL-zekeringen, zal deze in alle slaapmodi worden ingeschakeld en dus altijd stroom verbruiken. In de diepere slaapmodi zal dit aanzienlijk bijdragen aan het totale stroomverbruik. Zien “Brown-out-detectie- op pagina 41 En “Software BOD uitschakelen” op pagina 35 voor meer informatie over het configureren van de Brown-out-detector.

Intern volumetage Referentie:

Het interne voltage Referentie wordt ingeschakeld wanneer dat nodig is door de Brown-out-detectie, de analoge comparator of de ADC. Als deze modules zijn uitgeschakeld zoals beschreven in de bovenstaande secties, wordt de interne voltagDe referentie wordt uitgeschakeld en verbruikt geen stroom. Wanneer deze opnieuw wordt ingeschakeld, moet de gebruiker de referentie laten opstarten voordat de uitgang wordt gebruikt. Als de referentie in de slaapmodus ingeschakeld blijft, kan de uitgang onmiddellijk worden gebruikt. Verwijzen naar “Interne voltage Referentie” op pagina 42 voor meer informatie over de opstarttijd.

Waakhond-timer

Als de Watchdog Timer niet nodig is in de applicatie, moet deze module worden uitgeschakeld. Als de Watchdog Timer is ingeschakeld, is deze in alle slaapmodi ingeschakeld en verbruikt deze dus altijd stroom. In de diepere slaapmodi zal dit aanzienlijk bijdragen aan het totale stroomverbruik. Verwijzen naar “Watchdog-timer” op pagina 42 voor meer informatie over het configureren van de Watchdog Timer.

Poortpinnen

Wanneer u naar de slaapmodus gaat, moeten alle poortpinnen zo worden geconfigureerd dat ze minimaal stroom verbruiken. Het belangrijkste is dan om ervoor te zorgen dat er geen pinnen weerstandsbelastingen aandrijven. In slaapmodi waarin zowel de I/O-klok (clkI/O) als de ADC-klok (clkADC) worden gestopt, worden de invoerbuffers van het apparaat uitgeschakeld. Dit zorgt ervoor dat er geen stroom wordt verbruikt

door de ingangslogica wanneer dit niet nodig is. In sommige gevallen is de invoerlogica nodig voor het detecteren van ontwaakomstandigheden

het wordt dan ingeschakeld. Raadpleeg de sectie “Digitale ingang inschakelen en slaapstanden” op pagina 57 voor meer informatie over welke pinnen zijn ingeschakeld. Als de ingangsbuffer is ingeschakeld en het ingangssignaal zwevend blijft of een analoog signaalniveau heeft dat dichtbij VCC/2 ligt, zal de ingangsbuffer excessief vermogen gebruiken.

Voor analoge ingangspinnen moet de digitale ingangsbuffer te allen tijde worden uitgeschakeld. Een analoog signaalniveau dichtbij VCC/2 op een ingangspin kan aanzienlijke stroom veroorzaken, zelfs in de actieve modus. Digitale ingangsbuffers kunnen worden uitgeschakeld door naar het Digital Input Disable Register (DIDR0) te schrijven. Verwijzen naar “DIDR0 – Digitale ingang uitschakelen Register 0” op pagina 121 voor meer informatie.

Registreer Beschrijving

MCUCR – MCU-controleregister

Het MCU-besturingsregister bevat besturingsbits voor energiebeheer.

Beetje 7 6 5 4 3 2 1 0
0x35 LICHAAMSBEWIJZEN PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Lezen/Schrijven R Rood/Wit Rood/Wit Rood/Wit Rood/Wit R Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 0

Bit 7 – BODS: BOD-slaap

De BOD-uitschakelfunctionaliteit is alleen op sommige apparaten beschikbaar. Zien “Beperkingen” op pagina 36.

Om BOD tijdens de slaap uit te schakelen (zie Tabel 7-1 op pagina 34) moet de BODS-bit naar logische één worden geschreven. Dit wordt bestuurd door een getimede reeks en het activeringsbit, BODSE in MCUCR. Eerst moeten zowel BODS als BODSE op één worden ingesteld. Ten tweede moet BODS binnen vier klokcycli op één worden ingesteld en BODSE op nul. Het BODS-bit is drie klokcycli actief nadat het is ingesteld. Er moet een slaapinstructie worden uitgevoerd terwijl BODS actief is om de BOD uit te schakelen voor de daadwerkelijke slaapmodus. Het BODS-bit wordt automatisch gewist na drie klokcycli.

In apparaten waar Sleeping BOD niet is geïmplementeerd, wordt dit bit niet gebruikt en zal het altijd nul zijn.

Bit 5 – SE: Slaap inschakelen

Het SE-bit moet naar logische één worden geschreven om de MCU in de slaapmodus te laten gaan wanneer de SLEEP-instructie wordt uitgevoerd. Om te voorkomen dat de MCU in de slaapmodus gaat, tenzij dit de bedoeling van de programmeur is, wordt aanbevolen om de Sleep Enable (SE)-bit vlak voor de uitvoering van de SLEEP-instructie naar één te schrijven en deze onmiddellijk na het ontwaken te wissen.

Bits 4:3 – SM[1:0]: Slaapmodus Selecteer bits 1 en 0

Deze bits selecteren tussen de drie beschikbare slaapmodi, zoals weergegeven in Tabel 7-2.

Tabel 7-2. Slaapmodus selecteren

SM1 SM0 Slaapstand
0 0 Inactief
0 1 ADC-ruisonderdrukking
1 0 Stroomstoring
1 1 Gereserveerd

Bit 2 – BODSE: BOD-slaap inschakelen

De BOD-uitschakelfunctionaliteit is alleen op sommige apparaten beschikbaar. Zien “Beperkingen” op pagina 36.

De BODSE-bit maakt het instellen van de BODS-besturingsbit mogelijk, zoals uitgelegd in de BODS-bitbeschrijving. BOD-uitschakeling wordt geregeld door een getimede reeks.

Deze bit wordt niet gebruikt op apparaten waarop de BOD-uitschakeling via software niet is geïmplementeerd en wordt op die apparaten als nul gelezen.

PRR – Register voor vermogensreductie

Het Power Reduction Register biedt een methode om het stroomverbruik te verminderen door het uitschakelen van randkloksignalen mogelijk te maken.

Beetje 7 6 5 4 3 2 1 0
0x20 PRTIM1 PRTIM0 PRUSI PRADC PRR
Lezen/Schrijven R R R R Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 0

Bits 7:4 – Res: gereserveerde bits

Deze bits zijn gereserveerde bits in de ATtiny25/45/85 en zullen altijd als nul worden gelezen.

Bit 3 – PRTIM1: Timer/teller stroomreductie 1

Als u een logische één naar deze bit schrijft, wordt de Timer/Counter1-module uitgeschakeld. Als Timer/Teller1 is ingeschakeld, gaat de werking door zoals vóór de uitschakeling.

Bit 2 – PRTIM0: Timer/teller stroomreductie 0

Als u een logische één naar deze bit schrijft, wordt de Timer/Counter0-module uitgeschakeld. Als Timer/Teller0 is ingeschakeld, gaat de werking door zoals vóór de uitschakeling.

Bit 1 – PRUSI: Vermogensreductie USI

Als u een logische één naar dit bit schrijft, wordt de USI afgesloten door de klok naar de module te stoppen. Wanneer de USI weer uit de slaapstand wordt gehaald, moet de USI opnieuw worden geïnitialiseerd om een ​​goede werking te garanderen.

Bit 0 – PRADC: Vermogensreductie ADC

Als u een logische één naar dit bit schrijft, wordt de ADC uitgeschakeld. De ADC moet worden uitgeschakeld voordat deze wordt uitgeschakeld. Merk op dat de ADC-klok ook wordt gebruikt door sommige delen van de analoge comparator, wat betekent dat de analoge comparator niet kan worden gebruikt als deze bit hoog is.

Systeemcontrole en reset

De AVR resetten

Tijdens het resetten worden alle I/O-registers ingesteld op hun initiële waarden, en begint het programma met de uitvoering vanaf de Reset Vector. De instructie die bij de Reset Vector wordt geplaatst, moet een RJMP – Relatieve Sprong – instructie zijn voor de resetverwerkingsroutine. Als het programma nooit een interruptbron inschakelt, worden de interruptvectoren niet gebruikt en kan reguliere programmacode op deze locaties worden geplaatst. Het schakelschema in Figuur 8-1 toont de resetlogica. De elektrische parameters van het resetcircuit zijn aangegeven “Systeem- en resetkarakteristieken” op pagina 165.

Afbeelding 8-1 Resetlogica Reset-logica

De I/O-poorten van de AVR worden onmiddellijk teruggezet naar hun oorspronkelijke status wanneer een resetbron actief wordt. Hiervoor hoeft geen klokbron actief te zijn.

Nadat alle resetbronnen inactief zijn geworden, wordt een vertragingsteller geactiveerd, waardoor de interne reset wordt verlengd. Hierdoor kan het vermogen een stabiel niveau bereiken voordat de normale werking begint. De time-outperiode van de vertragingsteller wordt door de gebruiker gedefinieerd via de SUT- en CKSEL-zekeringen. De verschillende selecties voor de vertragingsperiode worden gepresenteerd in "Klok Bronnen” op pagina 25.

Bronnen opnieuw instellen

De ATtiny25/45/85 heeft vier resetbronnen:

Resetten bij inschakelen. De MCU wordt gereset als de voedingsvoltage ligt onder de Power-on Reset-drempel (VPOT).

Externe reset. De MCU wordt gereset als er langer dan de minimale pulslengte een laag niveau op de RESET-pin aanwezig is.

Watchdog-reset. De MCU wordt gereset wanneer de Watchdog Timer-periode afloopt en de Watchdog is ingeschakeld.

Brown-out reset. De MCU wordt gereset als de voedingsvoltagDe VCC ligt onder de Brown-out Reset-drempel (VBOT) en de Brown-out-detector is ingeschakeld.

Inschakelreset

Een Power-on Reset (POR)-puls wordt gegenereerd door een detectiecircuit op de chip. Het detectieniveau is gedefinieerd in “Sys- tem- en resetkarakteristieken” op pagina 165. De POR wordt geactiveerd wanneer VCC onder het detectieniveau komt. Het POR-circuit kan worden gebruikt om de Start-up Reset te activeren, maar ook om een ​​storing in de toevoervolumes te detecterentage.

Een Power-on Reset (POR)-circuit zorgt ervoor dat het apparaat wordt gereset nadat het is ingeschakeld. Het bereiken van de Power-on Reset-drempel voltage roept de vertragingsteller op, die bepaalt hoe lang het apparaat in RESET wordt gehouden nadat de VCC is gestegen. Het RESET-signaal wordt zonder enige vertraging opnieuw geactiveerd wanneer VCC onder het detectieniveau daalt.

Figuur 8-2. MCU opstarten, RESET Gekoppeld aan VCC

INTERNE RESET

Figuur 8-3. MCU opstarten, RESET extern uitgebreid

Externe reset

Een externe reset wordt gegenereerd door een laag niveau op de RESET-pin, indien ingeschakeld. Resetpulsen langer dan de minimale pulsbreedte (zie “Systeem- en resetkarakteristieken” op pagina 165) zal een reset genereren, zelfs als de klok niet loopt. Kortere pulsen zorgen niet gegarandeerd voor een reset. Wanneer het toegepaste signaal de Reset Threshold Voltage – VRST – op de positieve flank start de vertragingsteller de MCU nadat de time-outperiode is verstreken.

Figuur 8-4. Externe reset tijdens bedrijf Figuur 8.4

Brown-out-detectie

ATtiny25/45/85 heeft een On-chip Brown-out Detection (BOD) circuit voor het bewaken van het VCC-niveau tijdens bedrijf door het te vergelijken met een vast triggerniveau. Het triggerniveau voor de BOD kan worden geselecteerd door de BODLEVEL-zekeringen. Het triggerniveau heeft een hysteresis om piekvrije Brown-out-detectie te garanderen. De hysteresis op het detectieniveau moet worden geïnterpreteerd als VBOT+ = VBOT + VHYST/2 en VBOT- = VBOT – VHYST/2.

Wanneer de BOD is ingeschakeld en VCC afneemt tot een waarde onder het triggerniveau (VBOT-in Figuur 8-5), wordt de Brown-out Reset onmiddellijk geactiveerd. Wanneer VCC boven het triggerniveau (VBOT+ in Figuur 8-5), start de vertragingsteller de MCU nadat de time-outperiode tTOUT is verstreken.

Het BOD-circuit zal alleen een daling in VCC detecteren als de voltage blijft langer onder het triggerniveau dan de opgegeven tBOD “Systeem- en resetkarakteristieken” op pagina 165. Figuur 8.5

Watchdog-reset

Wanneer de Watchdog een time-out heeft, genereert deze een korte resetpuls van één CK-cyclusduur. Op de dalende flank van deze puls begint de vertragingstimer met het tellen van de time-outperiode tTOUT. Verwijzen naar “Watchdog-timer” op pagina 42 voor details over de werking van de Watchdog Timer.

Deeltage Referentie Inschakelsignalen en opstarttijd

de voltagDe referentie heeft een opstarttijd die van invloed kan zijn op de manier waarop deze gebruikt moet worden. De opstarttijd wordt opgegeven “Systeem- en resetkarakteristieken” op pagina 165. Om energie te besparen is de referentie niet altijd ingeschakeld. De referentie is ingeschakeld tijdens de volgende situaties:

Wanneer de BOD is ingeschakeld (door het programmeren van de BODLEVEL[2:0] zekeringbits).

Wanneer de bandgap-referentie is verbonden met de analoge comparator (door de ACBG-bit in ACSR in te stellen).

Wanneer de ADC is ingeschakeld.

Wanneer de BOD dus niet is ingeschakeld, moet de gebruiker na het instellen van de ACBG-bit of het inschakelen van de ADC altijd toestaan ​​dat de referentie wordt opgestart voordat de uitvoer van de analoge comparator of ADC wordt gebruikt. Om het stroomverbruik in de Power-down-modus te verminderen, kan de gebruiker de drie bovenstaande omstandigheden vermijden om ervoor te zorgen dat de referentie is uitgeschakeld voordat de Power-down-modus wordt geactiveerd.

Waakhond-timer

De Watchdog Timer wordt geklokt door een On-chip Oscillator die werkt op 128 kHz. Door de Watchdog Timer-prescaler te bedienen, kan het Watchdog Reset-interval worden aangepast zoals weergegeven in Tabel 8-3 op pagina 46. De WDR – Watchdog Reset – instructie reset de Watchdog Timer. De Watchdog Timer wordt ook gereset als deze wordt uitgeschakeld en als er een Chip Reset plaatsvindt. Er kunnen tien verschillende klokcyclusperioden worden geselecteerd om de resetperiode te bepalen. Als de resetperiode afloopt zonder nog een Watchdog Reset, wordt de ATtiny25/45/85 gereset en uitgevoerd vanaf de Reset Vector. Voor timingdetails over de Watchdog Reset, zie Tabel 8-3 op pagina 46.

De Watchdog Timer kan ook worden geconfigureerd om een ​​interrupt te genereren in plaats van een reset. Dit kan erg handig zijn als u de Watchdog gebruikt om te ontwaken na een uitschakeling.

Om onbedoelde uitschakeling van de Watchdog of onbedoelde wijziging van de time-outperiode te voorkomen, worden door de zekering WDTON twee verschillende veiligheidsniveaus geselecteerd, zoals weergegeven in Tabel 8-1 Verwijzen naar “Getimede sequenties voor het wijzigen van de con- afbeelding van de Watchdog Timer” op pagina 43 voor meer informatie.

Tabel 8-1. WDT-configuratie als functie van de zekeringinstellingen van WDTON

WDTON Veiligheidsniveau WDT-initiële staat Hoe de WDT uit te schakelen Time-out wijzigen
Niet geprogrammeerd 1 Gehandicapt Getimede reeks Geen beperkingen
Geprogrammeerd 2 Ingeschakeld Altijd ingeschakeld Getimede reeks

Figuur 8-7. Watchdog-timer Waakhond

Getimede reeksen voor het wijzigen van de configuratie van de Watchdog-timer

De volgorde voor het wijzigen van de configuratie verschilt enigszins tussen de twee veiligheidsniveaus. Voor elk niveau zijn aparte procedures beschreven.

Veiligheidsniveau 1: In deze modus is de Watchdog Timer aanvankelijk uitgeschakeld, maar kan zonder enige beperking worden ingeschakeld door de WDE-bit naar één te schrijven. Er is een getimede reeks nodig bij het uitschakelen van een ingeschakelde Watchdog-timer. Om een ​​ingeschakelde Watchdog Timer uit te schakelen, moet de volgende procedure worden gevolgd:

Schrijf in dezelfde bewerking een logische één naar WDCE en WDE. Er moet een logische code naar WDE worden geschreven, ongeacht de vorige waarde van de WDE-bit.

Schrijf binnen de volgende vier klokcycli, in dezelfde bewerking, de WDE- en WDP-bits naar wens, maar zorg ervoor dat de WDCE-bit wordt gewist.

Veiligheidsniveau 2: In deze modus is de Watchdog Timer altijd ingeschakeld en wordt de WDE-bit altijd als één gelezen. Er is een getimede reeks nodig bij het wijzigen van de Watchdog Time-out-periode. Om de Watchdog Time-out te wijzigen, moet de volgende procedure worden gevolgd:

Schrijf in dezelfde bewerking een logische naar WDCE en WDE. Hoewel de WDE altijd is ingesteld, moet de WDE naar één worden geschreven om de getimede reeks te starten.

Binnen de volgende vier klokcycli, in dezelfde bewerking, schrijft u de WDP-bits naar wens, maar waarbij de WDCE-bit wordt gewist. De waarde die naar de WDE-bit wordt geschreven, is niet relevant.

Code Bijvample

De volgende code example toont één assembly en één C-functie voor het uitschakelen van de WDT. De example gaat ervan uit dat interrupts worden gecontroleerd (bijvoorbeeld door interrupts globaal uit te schakelen), zodat er geen interrupts zullen optreden tijdens de uitvoering van deze functies.

Assemblagecode Bijvample(1)
WDT_uit:

wdr

; Wis WDRF in MCUSR

ldi r16, (0<

uit MCUSR, r16

; Schrijf een logische naar WDCE en WDE

; Behoud de oude prescaler-instelling om onbedoelde Watchdog Reset te voorkomen

in r16, WDTCR

ori r16, (1<

uit WDTCR, r16

; Schakel WDT uit

ldi r16, (0<

uit WDTCR, r16

terug

C-code Bijvample(1)
ongeldig WDT_off(ongeldig)

{

_WDR();

/* Wis WDRF in MCUSR */ MCUSR = 0x00

/* Schrijf een logische één naar WDCE en WDE */ WDTCR |= (1<

/* WDT uitschakelen */ WDTCR = 0x00;

}

Opmerking: 1. Zie “Code Examples” op pagina 6.

Registreer Beschrijving

MCUSR – MCU-statusregister

Het MCU-statusregister biedt informatie over welke resetbron een MCU-reset heeft veroorzaakt.

Beetje 7 6 5 4 3 2 1 0
0x34 WDRF BORF EXTRF PORF MCUSR
Lezen/Schrijven R R R R Rood/Wit Rood/Wit Rood/Wit Rood/Wit

Initiële waarde 0 0 0 0 Zie bitbeschrijving

Bits 7:4 – Res: gereserveerde bits

Deze bits zijn gereserveerde bits in de ATtiny25/45/85 en zullen altijd als nul worden gelezen.

Bit 3 – WDRF: Watchdog-resetvlag

Deze bit wordt ingesteld als er een Watchdog Reset plaatsvindt. De bit wordt gereset door een Power-on Reset, of door een logische nul naar de vlag te schrijven.

Bit 2 – BORF: Brown-out resetvlag

Deze bit wordt ingesteld als er een Brown-out Reset plaatsvindt. De bit wordt gereset door een Power-on Reset, of door een logische nul naar de vlag te schrijven.

Bit 1 – EXTRF: Externe resetvlag

Deze bit wordt ingesteld als er een externe reset plaatsvindt. De bit wordt gereset door een Power-on Reset, of door een logische nul naar de vlag te schrijven.

Bit 0 – PORF: Vlag bij inschakelen resetten

Deze bit wordt ingesteld als er een Power-on Reset plaatsvindt. Het bit wordt alleen gereset door een logische nul naar de vlag te schrijven.

Om gebruik te maken van de resetvlaggen om een ​​resetconditie te identificeren, moet de gebruiker de MCUSR zo vroeg mogelijk in het programma lezen en vervolgens resetten. Als het register wordt leeggemaakt voordat een nieuwe reset plaatsvindt, kan de bron van de reset worden gevonden door de resetvlaggen te onderzoeken.

WDTCR – Watchdog-timercontroleregister

Beetje 7 6 5 4 3 2 1 0
0x21 WDIF WDI WDP3 WDCE WDE WDP2 WDP1 WDP0 WDTCR
Lezen/Schrijven Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 X 0 0 0

Bit 7 – WDIF: Watchdog Timeout Interrupt-vlag

Deze bit wordt ingesteld wanneer er een time-out optreedt in de Watchdog Timer en de Watchdog Timer is geconfigureerd voor onderbreking. WDIF wordt door hardware gewist bij het uitvoeren van de overeenkomstige interruptverwerkingsvector. Als alternatief wordt WDIF gewist door een logische één naar de vlag te schrijven. Wanneer de I-bit in SREG en WDIE zijn ingesteld, wordt de Watchdog Time-out Interrupt uitgevoerd.

Bit 6 – WDIE: Watchdog-time-outonderbreking inschakelen

Wanneer dit bit naar één wordt geschreven, wordt WDE gewist en wordt de I-bit in het statusregister ingesteld, en wordt de Watchdog Time-out Interrupt ingeschakeld. In deze modus wordt de overeenkomstige interrupt uitgevoerd in plaats van een reset als er een time-out in de Watchdog Timer optreedt.

Als WDE is ingesteld, wordt WDIE automatisch door de hardware gewist wanneer er een time-out optreedt. Dit is handig om de Watchdog Reset-beveiliging te behouden tijdens het gebruik van de interrupt. Nadat het WDIE-bit is gewist, genereert de volgende time-out een reset. Om de Watchdog Reset te voorkomen, moet WDIE na elke interrupt worden ingesteld.

Tabel 8-2. Watchdog-timerconfiguratie

WDE WDI Watchdog-timerstatus Actie bij time-out
0 0 Gestopt Geen
0 1 Rennen Onderbreken
1 0 Rennen Opnieuw instellen
1 1 Rennen Onderbreken

Bit 4 – WDCE: Watchdog-wijziging inschakelen

Deze bit moet worden ingesteld wanneer de WDE-bit naar logisch nul wordt geschreven. Anders wordt de Watchdog niet uitgeschakeld. Eenmaal ernaar geschreven, zal de hardware dit bit na vier klokcycli wissen. Raadpleeg de beschrijving van de WDE-bit voor een Watchdog-uitschakelprocedure. Deze bit moet ook worden ingesteld bij het wijzigen van de prescalerbits. Zien “Getimede reeksen voor het wijzigen van de configuratie van de Watchdog-timer” op pagina 43.

Bit 3 – WDE: Watchdog inschakelen

Wanneer de WDE naar logische één wordt geschreven, wordt de Watchdog Timer ingeschakeld, en als de WDE naar logische nul wordt geschreven, wordt de Watchdog Timer-functie uitgeschakeld. WDE kan alleen worden gewist als de WDCE-bit logisch niveau één heeft. Om een ​​ingeschakelde Watchdog Timer uit te schakelen, moet de volgende procedure worden gevolgd:

Schrijf in dezelfde bewerking een logische één naar WDCE en WDE. Er moet een logische één naar WDE worden geschreven, ook al is deze op één ingesteld voordat de uitschakelbewerking begint.

Schrijf binnen de volgende vier klokcycli een logische 0 naar WDE. Hierdoor wordt de Watchdog uitgeschakeld.

Op veiligheidsniveau 2 is het niet mogelijk om de Watchdog Timer uit te schakelen, zelfs niet met het hierboven beschreven algoritme. Zien “Getimede reeksen voor het wijzigen van de configuratie van de Watchdog-timer” op pagina 43.

Op veiligheidsniveau 1 wordt WDE overschreven door WDRF in MCUSR. Zien “MCUSR – MCU-statusregister” op pagina 44 voor een beschrijving van WDRF. Dit betekent dat WDE altijd is ingesteld als WDRF is ingesteld. Om WDE te wissen, moet WDRF worden gewist voordat de Watchdog wordt uitgeschakeld met de hierboven beschreven procedure. Deze functie zorgt voor meerdere resets tijdens omstandigheden die een storing veroorzaken, en een veilige opstart na de storing.

Opmerking: Als de watchdog-timer niet in de toepassing wordt gebruikt, is het belangrijk om bij de initialisatie van het apparaat een watchdog-uitschakelprocedure te doorlopen. Als de Watchdog per ongeluk wordt ingeschakeld, bijvoorbeeldampBij een op hol geslagen aanwijzer of een brown-out-toestand wordt het apparaat gereset, wat op zijn beurt zal leiden tot een nieuwe watchdog-reset. Om deze situatie te voorkomen, moet de applicatiesoftware altijd de WDRF-vlag en de WDE-besturingsbit in de initialisatieroutine wissen.

Bits 5, 2:0 – WDP[3:0]: Watchdog Timer Prescaler 3, 2, 1 en 0

De WDP[3:0]-bits bepalen de voorschaling van de Watchdog Timer wanneer de Watchdog Timer is ingeschakeld. De verschillende voorschalingswaarden en de bijbehorende time-outperioden worden weergegeven in Tabel 8-3.

Tabel 8-3. Watchdog Timer Voorschaal selecteren

WDP3 WDP2 WDP1 WDP0 Aantal WDT-oscillatorcycli Typische time-out bij VCC = 5.0 V
0 0 0 0 2K (2048) cycli 16 ms
0 0 0 1 4K (4096) cycli 32 ms
0 0 1 0 8K (8192) cycli 64 ms
0 0 1 1 16K (16384) cycli 0.125 seconden
0 1 0 0 32K (32764) cycli 0.25 seconden
0 1 0 1 64K (65536) cycli 0.5 seconden
0 1 1 0 128K (131072) cycli 1.0 seconden
0 1 1 1 256K (262144) cycli 2.0 seconden
1 0 0 0 512K (524288) cycli 4.0 seconden
1 0 0 1 1024K (1048576) cycli 8.0 seconden

Tabel 8-3. Watchdog Timer Voorschaal selecteren (vervolg)

WDP3 WDP2 WDP1 WDP0 Aantal WDT-oscillatorcycli Typische time-out bij VCC = 5.0 V
1 0 1 0 Gereserveerd(1)
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1

Opmerking: 1. Indien geselecteerd, wordt een van de geldige instellingen onder 0b1010 gebruikt.

interrupts

Deze sectie beschrijft de details van de interruptafhandeling zoals uitgevoerd in ATtiny25/45/85. Voor een algemene uitleg van de AVR-onderbrekingsafhandeling, zie “Resetten en verwerking onderbreken” op pagina 12.

Onderbreek vectoren in ATtiny25/45/85

De interruptvectoren van ATtiny25/45/85 worden beschreven in Tabel 9-1onderstaand.

Tabel 9-1. Reset- en onderbreekvectoren

Vector-nr. Programma adres Bron Interrupt-definitie
1 0x0000 RESET Externe pin, resetten bij inschakelen, resetten van brown-out, resetten van watchdog
2 0x0001 INT0 Extern onderbrekingsverzoek 0
3 0x0002 PCINT0 Pinwijziging Onderbrekingsverzoek 0
4 0x0003 TIMER1_COMPA Timer/teller1 Vergelijk wedstrijd A
5 0x0004 TIMER1_OVF Timer/teller1 Overloop
6 0x0005 TIMER0_OVF Timer/teller0 Overloop
7 0x0006 EE_RDY EEPROM gereed
8 0x0007 ANA_COMP Analoge vergelijker
9 0x0008 ADC ADC-conversie voltooid
10 0x0009 TIMER1_COMPB Timer/teller1 Vergelijk wedstrijd B
11 0x000A TIMER0_COMPA Timer/teller0 Vergelijk wedstrijd A
12 0x000B TIMER0_COMPB Timer/teller0 Vergelijk wedstrijd B
13 0x000C WDT Watchdog-time-out
14 0x000D USI_START USI BEGIN
15 0x000E USI_OVF USI-overloop

Als het programma nooit een interruptbron inschakelt, worden de interruptvectoren niet gebruikt en kan reguliere programmacode op deze locaties worden geplaatst.

Een typische en algemene opzet voor interruptvectoradressen in ATtiny25/45/85 wordt getoond in het programma examphieronder.

Assemblagecode Bijvample
.org 0x0000 ;Stel het adres van de volgende in stelling
rjmp RESET ; Adres 0x0000
rjmp INT0_ISR ; Adres 0x0001
rjmp PCINT0_ISR ; Adres 0x0002
rjmp TIM1_COMPA_ISR ; Adres 0x0003
rjmp TIM1_OVF_ISR ; Adres 0x0004
rjmp TIM0_OVF_ISR ; Adres 0x0005
rjmp EE_RDY_ISR ; Adres 0x0006
rjmp ANA_COMP_ISR ; Adres 0x0007
rjmp ADC_ISR ; Adres 0x0008
rjmp TIM1_COMPB_ISR ; Adres 0x0009
rjmp TIM0_COMPA_ISR ; Adres 0x000A
rjmp TIM0_COMPB_ISR ; Adres 0x000B
rjmp WDT_ISR ; Adres 0x000C
rjmp USI_START_ISR ; Adres 0x000D
rjmp USI_OVF_ISR ; Adres 0x000E
HERSTEL: ; Start van het hoofdprogramma
; Adres 0x000F

Let op: Zie “Code Examples” op pagina 6.

Externe onderbrekingen

De externe interrupts worden geactiveerd door de INT0-pin of een van de PCINT[5:0]-pinnen. Houd er rekening mee dat, indien ingeschakeld, de interrupts worden geactiveerd, zelfs als de INT0- of PCINT[5:0]-pinnen zijn geconfigureerd als uitgangen. Deze functie biedt een manier om een ​​software-interrupt te genereren. Onderbrekingen bij pinwijziging PCI wordt geactiveerd als een ingeschakelde PCINT[5:0]-pin omschakelt. Het PCMSK Register controleert welke pinnen bijdragen aan de pinwissel-interrupts. Interrupts voor pinwijzigingen op PCINT[5:0] worden asynchroon gedetecteerd. Dit houdt in dat deze interrupts kunnen worden gebruikt om het onderdeel ook uit andere slaapmodi dan de inactieve modus te wekken.

De INT0-interrupts kunnen worden geactiveerd door een dalende of stijgende flank of een laag niveau. Dit is ingesteld zoals aangegeven in de specificatie voor het MCU Control Register – MCUCR. Wanneer de INT0-interrupt is ingeschakeld en is geconfigureerd als niveau-trigger, wordt de interrupt geactiveerd zolang de pin laag wordt gehouden. Merk op dat de herkenning van dalende of stijgende flankonderbrekingen op INT0 de aanwezigheid van een I/O-klok vereist, beschreven in “Kloksystemen en hun distributie” op pagina 23.

Onderbreking op laag niveau

Een interrupt op laag niveau op INTU wordt asynchroon gedetecteerd. Dit houdt in dat deze interrupt kan worden gebruikt om het onderdeel ook uit een andere slaapmodus dan de inactieve modus te wekken. De I/O-klok wordt stopgezet in alle slaapmodi, behalve in de inactieve modus.

Houd er rekening mee dat als een niveau-getriggerde interrupt wordt gebruikt voor het ontwaken na het uitschakelen, het vereiste niveau lang genoeg moet worden aangehouden zodat de MCU het ontwaken kan voltooien om de niveau-onderbreking te activeren. Als het niveau vóór het einde van de opstarttijd verdwijnt, wordt de MCU nog steeds wakker, maar wordt er geen onderbreking gegenereerd. De opstarttijd wordt bepaald door de SUT- en CKSEL-zekeringen, zoals beschreven in “Systeemklok en klokopties” op pagina 23.

Als het lage niveau op de interrupt-pin wordt verwijderd voordat het apparaat is ontwaakt, wordt de programma-uitvoering niet omgeleid naar de interrupt-serviceroutine, maar wordt voortgezet vanaf de instructie die volgt op het SLEEP-commando.

Onderbrekingstijd van pinwijziging

een exampHet bestand met de timing van een pinwissel-interrupt wordt getoond in Figuur 9-1.

Registreer Beschrijving

MCUCR – MCU-controleregister

Het externe onderbrekingsbesturingsregister A bevat besturingsbits voor onderbrekingsdetectiebesturing.

Beetje 7 6 5 4 3 2 1 0
0x35 LICHAAMSBEWIJZEN PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Lezen/Schrijven R Rood/Wit Rood/Wit Rood/Wit Rood/Wit R Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 0

Bits 1:0 – ISC0[1:0]: detectiecontrole onderbreken 0 Bit 1 en Bit 0

De External Interrupt 0 wordt geactiveerd door de externe pin INT0 als de SREG I-vlag en het bijbehorende interruptmasker zijn ingesteld. Het niveau en de randen op de externe INT0-pin die de interrupt activeren, zijn gedefinieerd in Tabel 9-2. De waarde op de INT0-pin is sampgeleid voordat randen worden gedetecteerd. Als flank- of toggle-interrupt is geselecteerd, zullen pulsen die langer dan één klokperiode duren een interrupt genereren. Het is niet gegarandeerd dat kortere pulsen een interrupt genereren. Als een interrupt op laag niveau wordt geselecteerd, moet het lage niveau worden vastgehouden tot de voltooiing van de momenteel uitgevoerde instructie om een ​​interrupt te genereren.

Tabel 9-2. Onderbreken 0 Sense Control

ISC01 ISC00 Beschrijving
0 0 Het lage niveau van INTO genereert een interruptverzoek.
0 1 Elke logische wijziging op INT0 genereert een interruptverzoek.
1 0 De dalende flank van INTO genereert een interruptverzoek.
1 1 De stijgende flank van INT0 genereert een interruptverzoek.

GIMSK – Algemeen interruptmaskerregister

Beetje 7 6 5 4 3 2 1 0
0x3B INT0 PCIE GIMSK
Lezen/Schrijven R Rood/Wit Rood/Wit R R R R R
Initiële waarde 0 0 0 0 0 0 0 0

Bits 7, 4:0 – Res: gereserveerde bits

Deze bits zijn gereserveerde bits in de ATtiny25/45/85 en zullen altijd als nul worden gelezen.

Bit 6 – INT0: Extern onderbrekingsverzoek 0 inschakelen

Wanneer de INTO-bit is ingesteld (één) en de I-bit in het statusregister (SREG) is ingesteld (één), wordt de externe pin-interrupt ingeschakeld. De Interrupt Sense Control0 bits 0/1 (ISC0 en ISC01) in het MCU Control Register (MCUCR) bepalen of de externe interrupt wordt geactiveerd op de stijgende en/of dalende flank van de IN00-pin of op het gedetecteerde niveau. Activiteit op de pin zal een interruptverzoek veroorzaken, zelfs als INT0 als uitgang is geconfigureerd. De corresponderende interrupt van Extern Interrupt Request 0 wordt uitgevoerd vanaf de INT0 Interrupt Vector.

Bit 5 – PCIE: Onderbreking pinwijziging inschakelen

Wanneer de PCIE-bit is ingesteld (één) en de I-bit in het statusregister (SREG) is ingesteld (één), wordt de pinwisselonderbreking ingeschakeld. Elke wijziging aan een ingeschakelde PCINT[5:0]-pin zal een interrupt veroorzaken. De corresponderende interrupt van Pin Change Interrupt Request wordt uitgevoerd vanaf de PCI Interrupt Vector. PCINT[5:0]-pinnen worden afzonderlijk ingeschakeld door het PCMSK0-register.

GIFR – Algemeen vlagregister voor onderbrekingen

Beetje 7 6 5 4 3 2 1 0
0x3A INTF0 PCIF GIFR
Lezen/Schrijven R Rood/Wit Rood/Wit R R R R R
Initiële waarde 0 0 0 0 0 0 0 0

Bits 7, 4:0 – Res: gereserveerde bits

Deze bits zijn gereserveerde bits in de ATtiny25/45/85 en zullen altijd als nul worden gelezen.

Bit 6 – INTF0: Externe interruptvlag 0

Wanneer een flank- of logische wijziging op de INT0-pin een interruptverzoek activeert, wordt INTF0 ingesteld (één). Als de I-bit in SREG en de INTO-bit in GIMSK zijn ingesteld (één), springt de MCU naar de overeenkomstige Interrupt-vector. De vlag wordt gewist wanneer de interruptroutine wordt uitgevoerd. Als alternatief kan de vlag worden gewist door er een logische vlag naartoe te schrijven. Deze vlag wordt altijd gewist wanneer INT0 is geconfigureerd als een niveau-interrupt.

Bit 5 – PCIF: Pin Change Interrupt-vlag

Wanneer een logische wijziging op een PCINT[5:0]-pin een interruptverzoek activeert, wordt PCIF ingesteld (één). Als de I-bit in SREG en de PCIE-bit in GIMSK zijn ingesteld (één), springt de MCU naar de overeenkomstige Interrupt-vector. De vlag wordt gewist wanneer de interruptroutine wordt uitgevoerd. Als alternatief kan de vlag worden gewist door er een logische vlag naartoe te schrijven.

PCMSK – Register voor pinwijzigingsmasker

Beetje 7 6 5 4 3 2 1 0
0x15 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 PCMSK
Lezen/Schrijven R R Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 0

Bits 7:6 – Res: gereserveerde bits

Deze bits zijn gereserveerde bits in de ATtiny25/45/85 en zullen altijd als nul worden gelezen.

Bits 5:0 – PCINT[5:0]: Masker wijzigen pincode inschakelen 5:0

Elke PCINT[5:0]-bit selecteert of de pinwissel-interrupt is ingeschakeld op de overeenkomstige I/O-pin. Als PCINT[5:0] is ingesteld en de PCIE-bit in GIMSK is ingesteld, wordt de pinwisselonderbreking ingeschakeld op de overeenkomstige I/O-pin. Als PCINT[5:0] wordt gewist, wordt de pinwisselonderbreking op de overeenkomstige I/O-pin uitgeschakeld.

I/O-poorten

Invoering

Alle AVR-poorten hebben echte Read-Modify-Write-functionaliteit wanneer ze worden gebruikt als algemene digitale I/O-poorten. Dit betekent dat de richting van één poortpin kan worden gewijzigd zonder onbedoeld de richting van een andere pin te veranderen met de SBI- en CBI-instructies. Hetzelfde geldt voor het wijzigen van de aandrijfwaarde (indien geconfigureerd als uitgang) of het in-/uitschakelen van pull-up-weerstanden (indien geconfigureerd als ingang). Elke uitgangsbuffer heeft symmetrische aandrijfkarakteristieken met zowel een hoge sink- als source-capaciteit. De pindriver is sterk genoeg om LED-displays rechtstreeks aan te sturen. Alle poortpinnen hebben individueel selecteerbare pull-up-weerstanden met een supply-voltage onveranderlijke weerstand. Alle I/O-pinnen hebben beveiligingsdiodes voor zowel VCC als aarde, zoals aangegeven in Figuur 10-1. Raadpleeg “Elektrische kenmerken” op pagina 161 voor een volledige lijst met parameters.

Figuur 10-1. I/O-pin-equivalent schema

Figuur 10

Alle registers en bitreferenties in deze sectie zijn in algemene vorm geschreven. Een kleine letter “x” vertegenwoordigt de nummering van de poort, en een kleine letter “n” vertegenwoordigt het bitnummer. Wanneer u echter het register of de bitdefinities in een programma gebruikt, moet de precieze vorm worden gebruikt. Bijvoorbeeldample, PORTB3 voor bitnr. 3 in poort B, hier algemeen gedocumenteerd als PORTxn. De fysieke I/O-registers en bitlocaties worden vermeld in “Registreerbeschrijving” aan pagina 64.

Voor elke poort worden drie I/O-geheugenadreslocaties toegewezen, één voor het Data Register – PORTx, Data Direction Register – DDRx, en de Port Input Pins – PINx. De I/O-locatie van de poortingangspinnen is alleen-lezen, terwijl het dataregister en het datarichtingregister lezen/schrijven zijn. Het schrijven van een logische één naar een bit in het PINx-register zal echter resulteren in een toggle in de corresponderende bit in het dataregister. Bovendien schakelt de Pull-up Disable – PUD-bit in MCUCR de pull-up-functie uit voor alle pinnen in alle poorten wanneer deze is ingesteld.

Het gebruik van de I/O-poort zoals Algemene Digitale I/O wordt beschreven in “Poorten als algemene digitale I/O” op pagina 53. De meeste poortpinnen zijn gemultiplext met alternatieve functies voor de randapparatuur op het apparaat. Hoe elke alternatieve functie de poortpin verstoort, wordt beschreven in “Alternatieve poortfuncties” op pagina 57. Raadpleeg de afzonderlijke modulesecties voor een volledige beschrijving van de alternatieve functies.

Houd er rekening mee dat het inschakelen van de alternatieve functie van sommige poortpinnen geen invloed heeft op het gebruik van de andere pinnen in de poort als algemene digitale I/O.

Poorten als algemene digitale I/O

De poorten zijn bidirectionele I/O-poorten met optionele interne pull-ups. Figuur 10-2 toont een functionele beschrijving van één I/O-poortpin, hier algemeen Pxn genoemd.

Figuur 10-2. Algemene digitale I/O(1)

Figuur 10

De pin configureren

Elke poortpin bestaat uit drie registerbits: DDxn, PORTxn en PINxn. Zoals getoond in “Registreerbeschrijving” aan pagina 64, zijn de DDxn-bits toegankelijk op het DDRx I/O-adres, de PORTxn-bits op het PORTx I/O-adres en de PINxn-bits op het PINx I/O-adres.

De DDxn-bit in het DDRx-register selecteert de richting van deze pin. Als DDxn logisch één is geschreven, wordt Pxn geconfigureerd als een uitgangspin. Als DDxn logisch nul is geschreven, wordt Pxn geconfigureerd als een invoerpin.

Als PORTxn logisch één is geschreven wanneer de pin is geconfigureerd als een ingangspin, wordt de pull-up-weerstand geactiveerd. Om de pull-up-weerstand uit te schakelen, moet PORTxn logisch nul worden geschreven of moet de pin worden geconfigureerd als uitgangspin. De poortpinnen worden in drie standen weergegeven wanneer de resetconditie actief wordt, zelfs als er geen klokken lopen.

Als PORTxn logisch één is geschreven wanneer de pin is geconfigureerd als een uitgangspin, wordt de poortpin hoog aangedreven (één). Als PORTxn logisch nul wordt geschreven wanneer de pin is geconfigureerd als een uitgangspin, wordt de poortpin laag (nul) gestuurd.

De pin wisselen

Het schrijven van een logische één naar PINxn schakelt de waarde van PORTxn om, onafhankelijk van de waarde van DDRxn. Merk op dat de SBI-instructie kan worden gebruikt om één enkele bit in een poort te schakelen.

Schakelen tussen invoer en uitvoer

Bij het schakelen tussen tri-state ({DDxn, PORTxn} = 0b00) en output hoog ({DDxn, PORTxn} = 0b11), een tussenliggende status met ofwel pull-up ingeschakeld {DDxn, PORTxn} = 0b01) of output laag ({DDxn, PORTxn} = 0b10) moet voorkomen. Normaal gesproken is de status waarin pull-up mogelijk is volledig acceptabel, omdat een omgeving met een hoge impedantie het verschil niet zal opmerken tussen een sterke hoge driver en een pull-up. Als dit niet het geval is, kan de PUD-bit in het MCUCR-register zo worden ingesteld dat alle pull-ups in alle poorten worden uitgeschakeld.

Schakelen tussen invoer met pull-up en uitvoer laag genereert hetzelfde probleem. De gebruiker moet de driestatus ({DDxn, PORTxn} = 0b00) of de hoge uitvoerstatus ({DDxn, PORTxn} = 0b10) als tussenstap gebruiken.

Tabel 10-1 vat de stuursignalen voor de pinwaarde samen.

Tabel 10-1. Poortpinconfiguraties

DDxn PORTxn PUD

(in MCUCR)

IO Optrekken Opmerking
0 0 X Invoer Nee Tri-state (Hi-Z)
0 1 0 Invoer Ja Pxn zal stroom leveren als ext. laag getrokken.
0 1 1 Invoer Nee Tri-state (Hi-Z)
1 0 X Uitvoer Nee Uitvoer laag (zinken)
1 1 X Uitvoer Nee Uitgang hoog (bron)

Het lezen van de pinwaarde

Onafhankelijk van de instelling van Data Direction-bit DDxn, kan de poortpin worden gelezen via de PINxn Register-bit. Zoals getoond in Figuur 10-2, vormen het PINxn-registerbit en de voorgaande grendel een synchronisator. Dit is nodig om metastabiliteit te voorkomen als de fysieke pin van waarde verandert nabij de rand van de interne klok, maar het introduceert ook een vertraging. Figuur 10-3 toont een timingdiagram van de synchronisatie bij het lezen van een extern toegepaste pinwaarde. De maximale en minimale voortplantingsvertragingen worden respectievelijk aangegeven met tpd,max en tpd,min.

Beschouw de klokperiode die begint kort na de eerste dalende flank van de systeemklok. De grendel is gesloten wanneer de klok laag is, en wordt transparant wanneer de klok hoog is, zoals aangegeven door het gearceerde gebied van het “SYNC LATCH”-signaal. De signaalwaarde wordt vergrendeld wanneer de systeemklok laag wordt. Het wordt bij de volgende positieve klokflank in het PINxn-register geklokt. Zoals aangegeven door de twee pijlen tpd,max en tpd,min, zal een enkele signaalovergang op de pin worden vertraagd tussen ½ en 1½ systeemklokperiode, afhankelijk van het tijdstip van bevestiging.

Bij het teruglezen van een door de software toegewezen pinwaarde moet een nop-instructie worden ingevoegd, zoals aangegeven in Figuur 10-4. De out-instructie stelt het signaal “SYNC LATCH” in op de positieve flank van de klok. In dit geval bedraagt ​​de vertragingstijd via de synchronisator één systeemklokperiode.

De volgende code example laat zien hoe poort B-pinnen 0 en 1 hoog, 2 en 3 laag worden ingesteld, en de poortpinnen van 4 tot 5 als invoer worden gedefinieerd met een pull-up toegewezen aan poortpin 4. De resulterende pinwaarden worden opnieuw gelezen, maar zoals eerder besproken is er een nop-instructie opgenomen om de waarde die onlangs aan sommige pinnen is toegewezen, terug te kunnen lezen.

Assemblagecode Bijvample(1)

; Definieer pull-ups en stel de uitgangen hoog in

; Definieer richtingen voor poortpinnen

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

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

uit PORTB,r16

uit DDRB,r17

; Voeg nop in voor synchronisatie

nee

; Poortpinnen lezen

in r16, PINB

Opmerking: Voor het assemblageprogramma worden twee tijdelijke registers gebruikt om de tijd vanaf het instellen van pull-ups op pin 0, 1 en 4 tot de richtingsbits correct zijn ingesteld te minimaliseren, waarbij bit 2 en 3 als laag worden gedefinieerd en bits 0 en 1 opnieuw worden gedefinieerd. XNUMX als sterke hoge drivers.

C-code Bijvample
niet-ondertekende char i;

/* Definieer pull-ups en stel de uitgangen hoog in */

/* Definieer richtingen voor poortpinnen */ PORTB = (1<

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

/* Nop invoegen voor synchronisatie*/

_GEEN P();

/* Poortpinnen lezen */ i = PINB;

Digitale invoer inschakelen en slaapmodi

Zoals getoond in Figuur 10-2, kan het digitale ingangssignaal cl zijnampgeaard aan de ingang van de schmitt-trigger. Het signaal dat in de afbeelding met SLEEP wordt aangeduid, wordt door de MCU-slaapcontroller in de uitschakelmodus gezet om een ​​hoog stroomverbruik te voorkomen als sommige ingangssignalen zwevend blijven of een analoog signaalniveau hebben dat dichtbij VCC/2 ligt.

SLEEP wordt overschreven voor poortpinnen die zijn ingeschakeld als externe interruptpinnen. Als het externe interruptverzoek niet is ingeschakeld, is SLEEP ook voor deze pinnen actief. SLEEP wordt ook overschreven door verschillende andere alternatieve functies, zoals beschreven in “Alternatieve poortfuncties” op pagina 57.

Als er een logisch hoog niveau (“één”) aanwezig is op een asynchrone externe interrupt-pin die is geconfigureerd als “Interrupt on Rising Edge, Falling Edge of Any Logic Change on Pin” terwijl de externe interrupt niet is ingeschakeld, zal de overeenkomstige External Interrupt-vlag worden ingesteld bij het hervatten vanuit de bovengenoemde slaapmodus, aangezien de clampAls u zich in deze slaapmodus bevindt, wordt de gevraagde logische verandering veroorzaakt.

Niet-verbonden pinnen

Als sommige pinnen ongebruikt zijn, is het raadzaam ervoor te zorgen dat deze pinnen een gedefinieerd niveau hebben. Ook al zijn de meeste digitale ingangen uitgeschakeld in de diepe slaapmodi, zoals hierboven beschreven, moeten zwevende ingangen worden vermeden om het stroomverbruik te verminderen in alle andere modi waarin de digitale ingangen zijn ingeschakeld (Reset, Actieve modus en Inactieve modus).

De eenvoudigste methode om een ​​gedefinieerd niveau van een ongebruikte pin te garanderen, is door de interne pull-up in te schakelen. In dit geval wordt de pull-up uitgeschakeld tijdens het resetten. Als een laag stroomverbruik tijdens het resetten belangrijk is, wordt het aanbevolen om een ​​externe pull-up of pulldown te gebruiken. Het wordt niet aanbevolen om ongebruikte pinnen rechtstreeks op VCC of GND aan te sluiten, omdat dit overmatige stromen kan veroorzaken als de pin per ongeluk als uitgang wordt geconfigureerd.

Alternatieve poortfuncties

De meeste poortpinnen hebben naast algemene digitale I/O's ook alternatieve functies. Figuur 10-5 laat zien hoe de poort-pin-besturingssignalen van de vereenvoudigde Figuur 10-2 kan worden overschreven door alternatieve functies. De overheersende signalen zijn mogelijk niet in alle poortpinnen aanwezig, maar de afbeelding dient als algemene beschrijving die van toepassing is op alle poortpinnen in de AVR-microcontrollerfamilie.

Tabel 10-2. Algemene beschrijving van overheersende signalen voor alternatieve functies

Signaalnaam Volledige naam Beschrijving
PUOE Pull-up-override inschakelen Als dit signaal is ingesteld, wordt de pull-up-vrijgave geregeld door het PUOV-signaal. Als dit signaal wordt gewist, wordt de pull-up ingeschakeld

{DDxn, PORTxn, PUD} = 0b010.

PUOV Pull-up-overschrijvingswaarde Als PUOE is ingesteld, wordt de pull-up ingeschakeld/uitgeschakeld wanneer PUOV wordt ingesteld/gewist, ongeacht de instelling van de DDxn-, PORTxn- en PUD-registerbits.
DDOE Overschrijven van gegevensrichting ingeschakeld Als dit signaal is ingesteld, wordt de Output Driver Enable bestuurd door het DDOV-signaal. Als dit signaal wordt gewist, wordt de uitvoerdriver ingeschakeld door de DDxn Register-bit.
DDOV Waarde voor overschrijven van gegevensrichting Als DDOE is ingesteld, wordt het uitvoerstuurprogramma in-/uitgeschakeld wanneer DDOV wordt ingesteld/gewist, ongeacht de instelling van de DDxn-registerbit.
PVOE Overschrijven van poortwaarde inschakelen Als dit signaal is ingesteld en de Output Driver is ingeschakeld, wordt de poortwaarde bestuurd door het PVOV-signaal. Als PVOE is gewist en het uitvoerstuurprogramma is ingeschakeld, wordt de poortwaarde bestuurd door de PORTxn-registerbit.
PVOV Poortwaarde overschrijft waarde Als PVOE is ingesteld, wordt de poortwaarde ingesteld op PVOV, ongeacht de instelling van de PORTxn Register-bit.
POE Poortwisseloverschrijven inschakelen Als PTOE is ingesteld, wordt de PORTxn-registerbit omgekeerd.
DIEOE Digitale ingang inschakelen Overschrijven inschakelen Als dit bit is ingesteld, wordt de digitale ingangsactivatie bestuurd door het DIEOV-signaal. Als dit signaal wordt gewist, wordt de digitale ingang ingeschakeld bepaald door de MCU-status (normale modus, slaapmodus).
DIEOV Digitale ingang Overridewaarde inschakelen Als DIEOE is ingesteld, wordt de digitale ingang ingeschakeld/uitgeschakeld wanneer DIEOV wordt ingesteld/gewist, ongeacht de MCU-status (normale modus, slaapmodus).
DI Digitale invoer Dit is de digitale ingang voor alternatieve functies. In de figuur is het signaal verbonden met de uitgang van de schmitt-trigger, maar vóór de synchronisator. Tenzij de digitale ingang als klokbron wordt gebruikt, zal de module met de alternatieve functie zijn eigen synchronisator gebruiken.
AIO Analoge invoer / uitvoer Dit is de analoge ingang/uitgang naar/van alternatieve functies. Het signaal is rechtstreeks op de pad aangesloten en kan bidirectioneel worden gebruikt.

De volgende subsecties beschrijven kort de alternatieve functies voor elke poort, en relateren de overheersende signalen aan de alternatieve functie. Raadpleeg de alternatieve functiebeschrijving voor meer details.

Alternatieve functies van poort B

De poort B-pinnen met alternatieve functie worden weergegeven in Tabel 10-3.

Tabel 10-3. Poort B-pinnen alternatieve functies

Poortpen Alternatieve functie
PB5

RESET: Pin resetten

dW: debugWIRE I/O ADC0: ADC-ingangskanaal 0

PCINT5: Onderbreking pinwijziging, bron 5

PB4 XTAL2: Kristaloscillatoruitgang CLKO: Systeemklokuitgang ADC2: ADC-ingangskanaal 2

OC1B: Timer/teller1 Vergelijk Match B-uitgang PCINT4: Pinwisselonderbreking 0, bron 4

PB3 XTAL1: Kristaloscillatoringang CLKI: Externe klokingang ADC3: ADC-ingangskanaal 3

OC1B: Complementaire Timer/Teller1 Vergelijk Match B-uitgang PCINT3: Pin Change Interrupt 0, Bron 3

PB2 SCK: Seriële klokingang ADC1: ADC-ingangskanaal 1

T0: Timer/teller0 Klokbron USCK: USI-klok (driedraadsmodus) SCL: USI-klok (tweedraadsmodus) INT0: Externe onderbreking 0 Ingang PCINT2: Pinwijzigingonderbreking 0, bron 2

PB1 MISO: SPI masterdata-ingang / slave-data-uitgang AIN1: Analoge comparator, negatieve ingang OC0B: Timer/teller0 Vergelijk Match B-uitgang OC1A: Timer/Counter1 Vergelijk Match A-uitgang DO: USI-data-uitgang (driedraadsmodus) PCINT1: Pin Change Interrupt 0, Bron 1
PB0 MOSI:: SPI-masterdata-uitgang / slave-data-ingang AIN0: Analoge comparator, positieve ingang

OC0A: Timer/teller0 Vergelijk Match A-uitvoer

OC1A: Complementaire timer/teller1 Vergelijk Match A-uitgang DI: USI-gegevensinvoer (driedraadsmodus)

SDA: USI-gegevensinvoer (tweedraadsmodus) AREF: externe analoge referentie PCINT0: pinwisselonderbreking 0, bron 0

Poort B, bit 5 – RESET/dW/ADC0/PCINT5

RESET: Externe reset-ingang is actief laag en ingeschakeld door het deprogrammeren (“1”) van de RSTDISBL-zekering. Pullup wordt geactiveerd en uitgangsdriver en digitale ingang worden gedeactiveerd wanneer de pin wordt gebruikt als RESET-pin.

dW: Wanneer de debugWIRE Enable (DWEN) Fuse is geprogrammeerd en Lock-bits niet zijn geprogrammeerd, wordt het debugWIRE-systeem binnen het doelapparaat geactiveerd. De RESET-poortpin is geconfigureerd als een draad-EN (open-drain) bidirectionele I/O-pin met pull-up ingeschakeld en wordt de communicatiegateway tussen doel en emulator.

ADC0: Analoog naar digitaal converter, kanaal 0.

PCINT5: Pin Change Interrupt-bron 5.

Poort B, bit 4 – XTAL2/CLKO/ADC2/OC1B/PCINT4

XTAL2: Chip Clock Oscillator pin 2. Wordt gebruikt als klokpin voor alle chipklokbronnen behalve de interne, kalibreerbare RC-oscillator en externe klok. Bij gebruik als klokpin kan de pin niet als I/O-pin worden gebruikt. Bij gebruik van een interne, kalibreerbare RC-oscillator of externe klok als chipklokbron, fungeert PB4 als een gewone I/O-pin.

CLKO: De verdeelde systeemklok kan worden uitgevoerd op pin PB4. De verdeelde systeemklok wordt uitgevoerd als de CKOUT-zekering is geprogrammeerd, ongeacht de PORTB4- en DDB4-instellingen. Deze wordt ook uitgevoerd tijdens het resetten.

ADC2: Analoog naar digitaal converter, kanaal 2.

OC1B: Output Compare Match-uitgang: De PB4-pin kan dienen als externe uitgang voor de Timer/Counter1 Compare Match B indien geconfigureerd als uitgang (DDB4-set). De OC1B-pin is ook de uitgangspin voor de timerfunctie in de PWM-modus.

PCINT4: Pin Change Interrupt-bron 4.

Poort B, bit 3 – XTAL1/CLKI/ADC3/OC1B/PCINT3

XTAL1: Chipklokoscillator pin 1. Gebruikt voor alle chipklokbronnen behalve de interne kalibreerbare RC-oscillator. Bij gebruik als klokpin kan de pin niet als I/O-pin worden gebruikt.

CLKI: Klokingang van een externe klokbron, zie “Externe klok” op pagina 26.

ADC3: Analoog naar digitaal converter, kanaal 3.

OC1B: Geïnverteerde Output Compare Match-uitgang: De PB3-pin kan dienen als een externe uitgang voor de Timer/Counter1 Compare Match B indien geconfigureerd als uitgang (DDB3 ingesteld). De OC1B-pin is ook de omgekeerde uitgangspin voor de timerfunctie in de PWM-modus.

PCINT3: Pin Change Interrupt-bron 3.

Poort B, bit 2 – SCK/ADC1/T0/USCK/SCL/INT0/PCINT2

SCK: Master Clock-uitgang, Slave Clock-ingangspin voor SPI-kanaal. Wanneer de SPI als slaaf is ingeschakeld, wordt deze pin geconfigureerd als ingang, ongeacht de instelling van DDB2. Wanneer de SPI als Master is ingeschakeld, wordt de datarichting van deze pin bestuurd door DDPB2. Wanneer de pin door de SPI als invoer wordt gedwongen, kan de pull-up nog steeds worden bestuurd door de PORTB2-bit.

ADC1: Analoog naar digitaal converter, kanaal 1.

T0: Timer/Teller0-tellerbron.

USCK: Driedraadsmodus Universele seriële interfaceklok.

SCL: Tweedraadsmodus Seriële klok voor USI Tweedraadsmodus.

INT0: Externe interruptbron 0.

PCINT2: Pin Change Interrupt-bron 2.

Poort B, Bit 1 – MISO/AIN1/OC0B/OC1A/DO/PCINT1

MISO: Master Data input, Slave Data output pin voor SPI-kanaal. Wanneer de SPI is ingeschakeld als Master, wordt deze pin geconfigureerd als input, ongeacht de instelling van DDB1. Wanneer de SPI is ingeschakeld als Slave, wordt de datarichting van deze pin aangestuurd door DDB1. Wanneer de pin door de SPI wordt gedwongen een input te zijn, kan de pull-up nog steeds worden aangestuurd door de PORTB1-bit.

AIN1: Analoge comparator negatieve ingang. Configureer de poortpin als ingang met de interne pull-up uitgeschakeld om te voorkomen dat de digitale poortfunctie de functie van de analoge comparator verstoort.

OC0B: Output Compare Match output. De PB1-pin kan dienen als een externe output voor de Timer/Counter0 Compare Match B. De PB1-pin moet worden geconfigureerd als een output (DDB1 set (één)) om deze functie te kunnen vervullen. De OC0B-pin is ook de output-pin voor de PWM-modustimerfunctie.

OC1A: Output Compare Match output: De PB1-pin kan dienen als een externe output voor de Timer/Counter1 Compare Match B wanneer deze is geconfigureerd als een output (DDB1-set). De OC1A-pin is ook de output-pin voor de PWM-modustimerfunctie.

DO: Drie-draadsmodus Universal Serial Interface Data-uitvoer. Drie-draadsmodus Data-uitvoer overschrijft de PORTB1-waarde en wordt naar de poort gestuurd wanneer datarichtingsbit DDB1 is ingesteld (één). PORTB1 schakelt de pull-up nog steeds in als de richting is ingevoerd en PORTB1 is ingesteld (één).

PCINT1: Pin Change Interrupt-bron 1.

Poort B, bit 0 – MOSI/AIN0/OC0A/OC1A/DI/SDA/AREF/PCINT0

MOSI: SPI Master Data-uitgang, Slave Data-ingang voor SPI-kanaal. Wanneer de SPI is ingeschakeld als Slave, wordt deze pin geconfigureerd als een ingang, ongeacht de instelling van DDB0. Wanneer de SPI is ingeschakeld als Master, wordt de datarichting van deze pin aangestuurd door DDB0. Wanneer de pin door de SPI wordt gedwongen een ingang te zijn, kan de pull-up nog steeds worden aangestuurd door de PORTB0-bit.

AIN0: Analoge Comparator Positieve Input. Configureer de poortpin als input met de interne pull-up uitgeschakeld om te voorkomen dat de digitale poortfunctie de functie van de Analoge Comparator verstoort.

OC0A: Output Compare Match output. De PB0-pin kan dienen als een externe output voor de Timer/Counter0 Compare Match A wanneer geconfigureerd als een output (DDB0 set (één)). De OC0A-pin is ook de output-pin voor de PWM-modustimerfunctie.

OC1A: Inverted Output Compare Match-uitgang: De PB0-pin kan dienen als een externe uitgang voor de Timer/Counter1 Compare Match B wanneer deze is geconfigureerd als een uitgang (DDB0-set). De OC1A-pin is ook de omgekeerde uitgangspin voor de PWM-modustimerfunctie.

SDA: Seriële interfacegegevens in twee-draadsmodus.

AREF: Externe analoge referentie voor ADC. Pullup en outputdriver zijn uitgeschakeld op PB0 wanneer de pin wordt gebruikt als externe referentie of interne voltage Referentie met externe condensator op de AREF-pin.

DI: Gegevensinvoer in USI Three-wire-modus. USI Three-wire-modus overschrijft normale poortfuncties niet, dus pin moet worden geconfigureerd als een invoer voor DI-functie.

PCINT0: Pin Change Interrupt-bron 0.

Tabel 10-4 En Tabel 10-5 relateer de alternatieve functies van poort B aan de overheersende signalen die in Figuur 10-5 verder pagina 58.

Tabel 10-4. Signalen overschrijven voor alternatieve functies in PB[5:3]

Signaalnaam 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-verzending 0 0
PVOE 0 OC1B inschakelen

OC1B inschakelen

PVOV 0 OC1B OC1B
POE 0 0 0
DIEOE

RSTDISBL(1) + (PCINT5 • PCIE + ADC0D)

PCINT4 • PCIE + ADC2D PCINT3 • PCIE + ADC3D
DIEOV ADC0D ADC2D ADC3D
DI PCINT5-invoer PCINT4-invoer PCINT3-invoer
AIO RESET-ingang, ADC0-ingang ADC2-ingang ADC3-ingang

Let op: wanneer de zekering op “0” staat (geprogrammeerd).

Tabel 10-5. Signalen overschrijven voor alternatieve functies in PB[2:0]

Signaalnaam 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_TWEE_DRADEN 0 USI_TWEE_DRADEN
PUOV 0 0 0
DDOE USI_TWEE_DRADEN 0 USI_TWEE_DRADEN
DDOV (USI_SCL_HOLD + POORTB2) • DDB2 0  

(SDA + PORTB0) • DDB0

PVOE USI_TWEE_DRADEN • DDB2 OC0B Inschakelen + OC1A Inschakelen + USI_THREE_WIRE

OC0A Inschakelen + OC1A Inschakelen + (USI_TWO_WIRE

(DDB0)

PVOV 0 OC0B + OC1A + DO

OC0A + OC1A

POE VSITC 0 0
DIEOE PCINT2 • PCIE + ADC1D + USISIE PCINT1 • PCIE + AIN1D PCINT0 • PCIE + AIN0D + USISIE
DIEOV ADC1D AIN1D AIN0D
DI T0/USCK/SCL/INT0/

PCINT2-invoer

PCINT1-invoer DI/SDA/PCINT0-ingang
AIO ADC1-ingang Analoge comparator negatieve ingang Analoge comparator positieve ingang

Registreer Beschrijving

MCUCR – MCU-controleregister

Beetje 7 6 5 4 3 2 1 0
0x35 LICHAAMSBEWIJZEN PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Lezen/Schrijven R Rood/Wit Rood/Wit Rood/Wit Rood/Wit R Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 0

Bit 6 – PUD: Pull-up uitschakelen

Wanneer deze bit naar één wordt geschreven, worden de pull-ups in de I/O-poorten uitgeschakeld, zelfs als de DDxn- en PORTxn-registers zijn geconfigureerd om de pull-ups in te schakelen ({DDxn, PORTxn} = 0b01). Zie “De pin configureren” op pagina 54 voor meer informatie over deze functie.

PORTB – Gegevensregister van haven B

Beetje 7 6 5 4 3 2 1 0
0x18 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB
Lezen/Schrijven R R Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 0

DDRB – Poort B Data Richting Register

Beetje 7 6 5 4 3 2 1 0
0x17 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DDRB
Lezen/Schrijven R R Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde 0 0 0 0 0 0 0 0

PINB – Poort B Ingangspinnen Adres

Beetje 7 6 5 4 3 2 1 0
0x16 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB
Lezen/Schrijven R R Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit Rood/Wit
Initiële waarde 0 0 n.v.t. n.v.t. n.v.t. n.v.t. n.v.t. n.v.t.

8-bits timer/teller0 met PWM

Functies

Twee onafhankelijke output-vergelijkingseenheden

Dubbel gebufferde uitvoervergelijkingsregisters

Timer wissen bij vergelijkingsmatch (automatisch opnieuw laden)

Storingsvrije, fasecorrecte pulsbreedtemodulator (PWM)

Variabele PWM-periode

Frequentie generator

Drie onafhankelijke interruptbronnen (TOV0, OCF0A en OCF0B)

Overview

Timer/Counter0 is een algemene 8-bits Timer/Counter module, met twee onafhankelijke Output Compare Units en met PWM-ondersteuning. Het maakt nauwkeurige timing van programma-uitvoering (gebeurtenisbeheer) en golfgeneratie mogelijk.

Een vereenvoudigd blokdiagram van de 8-bits timer/teller wordt getoond in Figuur 11-1Voor de werkelijke plaatsing van I/O-pinnen, zie “Pinout ATtiny25/45/85” op pagina 2. CPU-toegankelijke I/O-registers, inclusief I/O-bits en I/O-pinnen, worden vetgedrukt weergegeven. De apparaatspecifieke I/O-register- en bitlocaties worden vermeld in de “Registerbeschrijving” op pagina 77.

De Timer/Counter (TCNT0) en Output Compare Registers (OCR0A en OCR0B) zijn 8-bits registers. Interrupt request (afgekort tot Int.Req. in de afbeelding) signalen zijn allemaal zichtbaar in het Timer Interrupt Flag Register (TIFR). Alle interrupts worden individueel gemaskeerd met het Timer Interrupt Mask Register (TIMSK). TIFR en TIMSK worden niet getoond in de afbeelding.

De Timer/Counter kan intern worden geklokt, via de prescaler of door een externe klokbron op de T0-pin. Het Clock Select-logicablok regelt welke klokbron en -rand de Timer/Counter gebruikt om zijn waarde te verhogen (of te verlagen). De Timer/Counter is inactief wanneer er geen klokbron is geselecteerd. De uitvoer van de Clock Select-logica wordt de timerklok (clkT0) genoemd.

De dubbel gebufferde Output Compare Registers (OCR0A en OCR0B) worden te allen tijde vergeleken met de Timer/Counter-waarde. Het resultaat van de vergelijking kan door de Waveform Generator worden gebruikt om een ​​PWM- of variabele frequentie-uitvoer te genereren op de Output Compare-pinnen (OC0A en OC0B). Zie “Outputvergelijkingseenheid” op pagina 69. voor details. De Compare Match-gebeurtenis stelt ook de Compare Flag (OCF0A of OCF0B) in, die kan worden gebruikt om een ​​Output Compare-interruptaanvraag te genereren.

Definities

Veel register- en bitreferenties in deze sectie zijn in algemene vorm geschreven. Een kleine letter "n" vervangt het Timer/Counter-nummer, in dit geval 0. Een kleine letter "x" vervangt de Output Compare Unit, in dit geval Compare Unit A of Compare Unit B. Wanneer u echter de register- of bitdefinities in een programma gebruikt, moet de precieze vorm worden gebruikt, d.w.z. TCNT0 voor toegang tot de Timer/Counter0-tellerwaarde enzovoort.

De definities in Tabel 11-1 worden ook veelvuldig in het document gebruikt.

Tabel 11-1. Definities

Constante Beschrijving
ONDERKANT De teller bereikt ONDERAAN wanneer deze 0x00 wordt
MAX De teller bereikt zijn MAXimum wanneer deze 0xFF wordt (decimaal 255)
BOVENKANT De teller bereikt de TOP wanneer deze gelijk wordt aan de hoogste waarde in de telreeks. De TOP-waarde kan worden toegewezen als de vaste waarde 0xFF (MAX) of de waarde die is opgeslagen in het OCR0A-register. De toewijzing is afhankelijk van de werkingsmodus

Timer/teller-prescaler en klokbronnen

De Timer/Counter kan worden geklokt door een interne of externe klokbron. De klokbron wordt geselecteerd door de Clock Select-logica die wordt aangestuurd door de Clock Select (c)-bits in het Timer/Counter0 Control Register (TCCR0B).

Interne klokbron met prescaler

Timer/Counter0 kan direct worden geklokt door de systeemklok (door CS0[2:0] = 1 in te stellen). Dit biedt de snelste werking, met een maximale timer/counter klokfrequentie gelijk aan de systeemklokfrequentie (fCLK_I/O). Als alternatief kan een van de vier taps van de prescaler worden gebruikt als klokbron. De geprescaleerde klok heeft een frequentie van

Prescaler-reset

De prescaler is vrijlopend, dwz dat hij onafhankelijk van de Clock Select-logica van Timer/Counter0 werkt. Omdat de prescaler niet wordt beïnvloed door de clock select van de timer/counter, heeft de status van de prescaler gevolgen voor situaties waarin een voorgeschaalde klok wordt gebruikt. Eén exampHet niveau van een prescalingartefact is wanneer de timer/teller is ingeschakeld en geklokt door de prescaler (6 > CS0[2:0] > 1). Het aantal systeemklokcycli vanaf het moment dat de timer is ingeschakeld tot de eerste telling kan variëren van 1 tot N+1 systeemklokcycli, waarbij N gelijk is aan de prescalerdeler (8, 64, 256 of 1024).

Het is mogelijk om de Prescaler Reset te gebruiken om de Timer/Counter te synchroniseren met de programma-uitvoering.

Externe klokbron

Een externe klokbron die op de T0-pin wordt toegepast, kan worden gebruikt als timer/tegenklok (clkT0). De T0-pin is sampgeleid eenmaal per systeemklokcyclus door de pinsynchronisatielogica. De gesynchroniseerde (sampled) signaal wordt dan doorgegeven

via de randdetector. Figuur 11-2 toont een functioneel equivalent blokdiagram van de T0-synchronisatie en randdetectorlogica. De registers worden geklokt op de positieve rand van de interne systeemklok (clkI/O). De latch is transparant in de hoge periode van de interne systeemklok.

De randdetector genereert één clkT0-puls voor elke positieve (CS0[2:0] = 7) of negatieve (CS0[2:0] = 6) rand die hij detecteert.

De OCR0x-registers zijn dubbel gebufferd bij gebruik van een van de Pulse Width Modulation (PWM)-modi. Voor de normale en Clear Timer on Compare (CTC)-modus is de dubbele buffering uitgeschakeld. De dubbele buffering synchroniseert de update van de OCR0x Compare Registers met de boven- of onderkant van de telsequentie. De synchronisatie voorkomt het optreden van oneven-lengte, niet-symmetrische PWM-pulsen, waardoor de uitvoer storingsvrij is.

De toegang tot het OCR0x-register lijkt misschien complex, maar dat is het niet. Wanneer dubbele buffering is ingeschakeld, heeft de CPU toegang tot het OCR0x-bufferregister en als dubbele buffering is uitgeschakeld, heeft de CPU rechtstreeks toegang tot de OCR0x.

Krachtoutput vergelijken

In niet-PWM-golfvormgeneratiemodi kan de match-uitvoer van de comparator worden geforceerd door een één te schrijven naar de Force Output Compare (FOC0x)-bit. Het forceren van Compare Match stelt de OCF0x-vlag niet in en laadt/wist de timer niet, maar de OC0x-pin wordt wel bijgewerkt alsof er een echte Compare Match heeft plaatsgevonden (de COM0x[1:0]-bitsinstellingen definiëren of de OC0x-pin wordt ingesteld, gewist of omgeschakeld).

Vergelijk Match Blocking door TCNT0 Schrijf

Alle CPU-schrijfbewerkingen naar het TCNT0-register blokkeren elke Compare Match die plaatsvindt in de volgende timerklokcyclus, zelfs wanneer de timer is gestopt. Deze functie maakt het mogelijk dat OCR0x wordt geïnitialiseerd op dezelfde waarde als TCNT0 zonder een interrupt te activeren wanneer de timer/tellerklok is ingeschakeld.

De uitvoervergelijkingseenheid gebruiken

Omdat het schrijven van TCNT0 in elke bedrijfsmodus alle Compare Matches voor één timerklokcyclus blokkeert, zijn er risico's verbonden aan het wijzigen van TCNT0 bij gebruik van de Output Compare Unit, ongeacht of de Timer/Counter wel of niet draait. Als de waarde die naar TCNT0 wordt geschreven gelijk is aan de OCR0x-waarde, wordt de Compare Match gemist, wat resulteert in een onjuiste golfvormgeneratie. Schrijf de TCNT0-waarde ook niet gelijk aan BOTTOM wanneer de teller aan het aftellen is.

De setup van de OC0x moet worden uitgevoerd voordat het Data Direction Register voor de poortpin op output wordt ingesteld. De eenvoudigste manier om de OC0x-waarde in te stellen, is door de Force Output Compare (FOC0x) strobe bits in de normale modus te gebruiken. De OC0x-registers behouden hun waarden, zelfs bij het wisselen tussen Waveform Generation-modi.

Houd er rekening mee dat de COM0x[1:0]-bits niet dubbel gebufferd zijn samen met de vergelijkingswaarde. Het wijzigen van de COM0x[1:0]-bits wordt onmiddellijk van kracht.

Vergelijk Match Uitvoer Eenheid

De Compare Output mode (COM0x[1:0]) bits hebben twee functies. De Waveform Generator gebruikt de COM0x[1:0] bits voor het definiëren van de Output Compare (OC0x) status bij de volgende Compare Match. Ook besturen de COM0x[1:0] bits de OC0x pin output source. Figuur 11-6 toont een vereenvoudigd schema van de logica die wordt beïnvloed door de COM0x[1:0] bitinstelling. De I/O-registers, I/O-bits en I/O-pinnen in de afbeelding worden vetgedrukt weergegeven. Alleen de delen van de algemene I/O-poortbesturingsregisters (DDR en PORT) die worden beïnvloed door de COM0x[1:0]-bits worden weergegeven. Wanneer wordt verwezen naar de OC0x-status, wordt verwezen naar het interne OC0x-register, niet naar de OC0x-pin. Als er een systeemreset plaatsvindt, wordt het OC0x-register gereset naar "0".

Wanneer OC0A/OC0B is aangesloten op de I/O-pin, is de functie van de COM0A[1:0]/COM0B[1:0]-bits afhankelijk van de WGM0[2:0]-bitinstelling. Tabel 11-2 toont de COM0x[1:0] bitfunctionaliteit wanneer de WGM0[2:0] bits zijn ingesteld op een normale of CTC-modus (niet-PWM).

Tabel 11-2. Vergelijk uitvoermodus, niet-PWM-modus

COM0A1 COM0B1 COM0A0 COM0B0 Beschrijving
0 0 Normale poortwerking, OC0A/OC0B losgekoppeld.
0 1 Schakel OC0A/OC0B in op Vergelijken Match
1 0 Wis OC0A/OC0B op Vergelijk Match
1 1 Stel OC0A/OC0B in op Vergelijk Match

Tabel 11-3 toont de COM0x[1:0] bitfunctionaliteit wanneer de WGM0[2:0] bits zijn ingesteld op de snelle PWM-modus.

Tabel 11-3. Vergelijk uitvoermodus, snelle PWM-modus(1)

COM0A1 COM0B1 COM0A0 COM0B0 Beschrijving
0 0 Normale poortwerking, OC0A/OC0B losgekoppeld.
0 1 Gereserveerd
1 0 Wis OC0A/OC0B bij Vergelijk Match, stel OC0A/OC0B in op ONDER (niet-inverterende modus)
1 1 Stel OC0A/OC0B in op Vergelijk Match, wis OC0A/OC0B ONDERAAN (inverterende modus)

Opmerking: Een speciaal geval doet zich voor wanneer OCR0A of OCR0B gelijk is aan TOP en COM0A1/COM0B1 is ingesteld. In dit geval wordt de vergelijkingsmatch genegeerd, maar wordt de set of clear uitgevoerd bij BOTTOM. Zie “Snelle PWM-modus” op pagina 73 voor meer informatie.

Tabel 11-4 toont de COM0x[1:0] bitfunctionaliteit wanneer de WGM0[2:0] bits zijn ingesteld op de fasecorrecte PWM-modus.

Tabel 11-4. Vergelijk de uitgangsmodus, fasecorrecte PWM-modus(1)

COM0A1 COM0B1 COM0A0 COM0B0 Beschrijving
0 0 Normale poortwerking, OC0A/OC0B losgekoppeld.
0 1 Gereserveerd
1 0 Wis OC0A/OC0B op Compare Match bij up-counting. Stel OC0A/OC0B in op Compare Match bij down-counting.
1 1 Stel OC0A/OC0B in op Compare Match bij up-counting. Wis OC0A/OC0B op Compare Match bij down-counting.

Opmerking: 1. Een speciaal geval doet zich voor wanneer OCR0A of OCR0B gelijk is aan TOP en COM0A1/COM0B1 is ingesteld. In dit geval wordt de Compare Match genegeerd, maar wordt de set of clear uitgevoerd bij TOP. Zie “Fasecorrecte PWM-modus” op pagina 74 voor meer informatie.

Bits 3:2 – Res: gereserveerde bits

Deze bits zijn gereserveerde bits in de ATtiny25/45/85 en zullen altijd als nul worden gelezen.

Bits 1:0 – WGM0[1:0]: Waveform-generatiemodus

In combinatie met de WGM02-bit in het TCCR0B-register regelen deze bits de telvolgorde van de teller, de bron voor de maximale (TOP) tellerwaarde en welk type golfvormgeneratie moet worden gebruikt, zie Tabel 11-5De door de Timer/Counter-eenheid ondersteunde werkingsmodi zijn: normale modus (teller), Clear Timer on Compare Match (CTC)-modus en twee typen Pulse Width Modulation (PWM)-modi (zie “Werkingsmodi” op pagina 71).

Tabel 11-5. Golfvormgeneratiemodus Bitbeschrijving

Modus WGM 02 WGM 01 WGM 00 Timer/teller-werkmodus BOVENKANT Update van OCRx op TOV-vlag ingesteld op
0 0 0 0 Normaal 0xFF Onmiddellijk MAX(1)
1 0 0 1 PWM, fasecorrectie 0xFF BOVENKANT ONDERKANT(2)
2 0 1 0 CTC OCRA Onmiddellijk MAX(1)
3 0 1 1 Snelle PWM 0xFF ONDERKANT(2) MAX(1)
4 1 0 0 Gereserveerd
5 1 0 1 PWM, fasecorrectie OCRA BOVENKANT ONDERKANT(2)
6 1 1 0 Gereserveerd
7 1 1 1 Snelle PWM OCRA ONDERKANT(2) BOVENKANT

Bit 7 – FOC0A: Force Output Vergelijking A

De FOC0A-bit is alleen actief wanneer de WGM-bits een niet-PWM-modus specificeren.

Om compatibiliteit met toekomstige apparaten te garanderen, moet deze bit echter op nul worden gezet wanneer TCCR0B wordt geschreven in de PWM-modus. Wanneer een logische naar de FOC0A-bit wordt geschreven, wordt een onmiddellijke Compare Match op de Waveform Generation-eenheid geforceerd. De OC0A-uitvoer wordt gewijzigd op basis van de COM0A[1:0]-bitsinstelling. Merk op dat de FOC0A-bit is geïmplementeerd als een stroboscoop. Daarom is het de waarde die aanwezig is in de COM0A[1:0]-bits die het effect van de geforceerde vergelijking bepaalt.

Een FOC0A-stroboscoop genereert geen interrupt en wist ook de timer niet in de CTC-modus met OCR0A als TOP. De FOC0A-bit wordt altijd als nul gelezen.

Bit 6 – FOC0B: Force Output Vergelijking B

De FOC0B-bit is alleen actief wanneer de WGM-bits een niet-PWM-modus specificeren.

Om compatibiliteit met toekomstige apparaten te garanderen, moet deze bit echter op nul worden gezet wanneer TCCR0B wordt geschreven in de PWM-modus. Wanneer een logische naar de FOC0B-bit wordt geschreven, wordt een onmiddellijke Compare Match op de Waveform Generation-eenheid geforceerd. De OC0B-uitvoer wordt gewijzigd op basis van de COM0B[1:0]-bitsinstelling. Merk op dat de FOC0B-bit is geïmplementeerd als een stroboscoop. Daarom is het de waarde die aanwezig is in de COM0B[1:0]-bits die het effect van de geforceerde vergelijking bepaalt.

Een FOC0B-stroboscoop genereert geen interrupts en wist de timer ook niet in de CTC-modus met OCR0B als TOP.

De FOC0B-bit wordt altijd als nul gelezen.

Bits 5:4 – Res: gereserveerde bits

Deze bits zijn gereserveerde bits in de ATtiny25/45/85 en zullen altijd als nul worden gelezen.

Bit 3 – WGM02: Waveform-generatiemodus

Zie de beschrijving in de “TCCR0A – Timer/teller-besturingsregister A” op pagina 77.

Bits 2:0 – CS0[2:0]: Klok selecteren

De drie Clock Select-bits selecteren de klokbron die door de timer/teller moet worden gebruikt.

Tabel 11-6. Beschrijving klokselectiebit

CS02 CS01 CS00 Beschrijving
0 0 0 Geen klokbron (timer/teller gestopt)
0 0 1 clkI/O/(Geen voorschaling)
0 1 0 clkI/O/8 (Van prescaler)
0 1 1 clkI/O/64 (Van prescaler)
1 0 0 clkI/O/256 (Van prescaler)
1 0 1 clkI/O/1024 (Van prescaler)
1 1 0 Externe klokbron op T0-pin. Klok op dalende rand.
1 1 1 Externe klokbron op T0-pin. Klok op stijgende flank.

Als externe pin-modi worden gebruikt voor de Timer/Counter0, zullen overgangen op de T0-pin de teller klokken, zelfs als de pin is geconfigureerd als een output. Deze functie maakt softwarematige controle van de telling mogelijk.

Teller en vergelijk eenheden

De algemene werking van Timer/Counter1 wordt beschreven in de asynchrone modus en de werking in de synchrone modus wordt alleen vermeld als er verschillen zijn tussen deze twee modi. Figuur 12-2 toont het synchronisatieregisterblokschema van Timer/Counter 1 en synchronisatievertragingen tussen registers. Merk op dat niet alle klokgatingdetails in de afbeelding worden weergegeven. De registerwaarden van Timer/Counter1 gaan door de interne synchronisatieregisters, die de invoersynchronisatievertraging veroorzaken, voordat ze de tellerwerking beïnvloeden. De registers TCCR1, GTCCR, OCR1A, OCR1B en OCR1C kunnen direct na het schrijven van het register worden teruggelezen. De teruggelezen waarden worden vertraagd voor het register Timer/Counter1 (TCNT1) en vlaggen (OCF1A, OCF1B en TOV1), vanwege de invoer- en uitvoersynchronisatie.

De Timer/Counter1 heeft een hoge resolutie en een hoge nauwkeurigheid met de lagere prescaling-mogelijkheden. Het kan ook twee nauwkeurige, hoge snelheid, 8-bits Pulse Width Modulators ondersteunen met kloksnelheden tot 64 MHz (of 32 MHz in Low Speed ​​Mode). In deze modus dienen Timer/Counter1 en de output-vergelijkingsregisters als dubbele stand-alone PWM's met niet-overlappende niet-geïnverteerde en geïnverteerde outputs. Raadpleeg pagina 86 voor een gedetailleerde beschrijving van deze functie. Evenzo maken de hoge prescaling-mogelijkheden deze unit bruikbaar voor functies met een lagere snelheid of exacte timingfuncties met onregelmatige acties.

Figuur 12-2. Blokdiagram van het synchronisatieregister van timer/teller 1.

Met Timer/Counter1 en de prescaler kan de CPU vanaf elke klokbron worden aangestuurd, terwijl de prescaler op de snelle 64 MHz (of 32 MHz in de lagesnelheidsmodus) PCK-klok in de asynchrone modus werkt.

Let op dat de systeemklokfrequentie lager moet zijn dan een derde van de PCK-frequentie. Het synchronisatiemechanisme van de asynchrone Timer/Counter1 heeft ten minste twee randen van de PCK nodig wanneer de systeemklok hoog is. Als de frequentie van de systeemklok te hoog is, bestaat het risico dat gegevens of controlewaarden verloren gaan.

Het volgende Figuur 12-3 toont het blokdiagram voor Timer/Counter1.

Tabel 12-1. Vergelijkingsmodus selecteren in PWM-modus

COM1x1 COM1x0 Effect op output Vergelijk pinnen
0 0 OC1x niet verbonden. OC1x niet verbonden.
0 1 OC1x gewist bij vergelijkingsmatch. Ingesteld wanneer TCNT1 = $00. OC1x ingesteld bij vergelijkingsmatch. Gewist wanneer TCNT1 = $00.
1 0 OC1x gewist bij vergelijkingsmatch. Ingesteld wanneer TCNT1 = $00. OC1x niet verbonden.
1 1 OC1x Ingesteld op vergelijkingsmatch. Gewist wanneer TCNT1= $00. OC1x niet verbonden.

ADC-kenmerken

Tabel 21-8. ADC-kenmerken, enkelvoudige kanalen. TA = -40°C tot +85°C

Symbool Parameter Voorwaarde Mijn Typ Maximaal Eenheden
Oplossing 10 Beetjes
Absolute nauwkeurigheid (inclusief INL-, DNL- en kwantiserings-, versterkings- en offsetfouten) VREF = 4V, VCC = 4V,

ADC-klok = 200 kHz

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

ADC-klok = 1 MHz

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

ADC-klok = 200 kHz

Ruisonderdrukkingsmodus

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

ADC-klok = 1 MHz

Ruisonderdrukkingsmodus

2.5 LSB
Integrale niet-lineariteit (INL) (nauwkeurigheid na offset- en versterkingskalibratie) VREF = 4V, VCC = 4V,

ADC-klok = 200 kHz

1 LSB
Differentiële niet-lineariteit (DNL) VREF = 4V, VCC = 4V,

ADC-klok = 200 kHz

0.5 LSB
Krijg fout VREF = 4V, VCC = 4V,

ADC-klok = 200 kHz

2.5 LSB
Offset-fout VREF = 4V, VCC = 4V,

ADC-klok = 200 kHz

1.5 LSB
Conversietijd Vrijlopende conversie 14 280 µs
Klokfrequentie 50 1000 kHz
VIN Ingangsvolumetage GND VREF V
Invoerbandbreedte 38.4 kHz
AREF Externe referentie Voltage 2.0 VCC V
VINT Intern volumetage Referentie: 1.0 1.1 1.2 V
Interne 2.56V-referentie (1) VCC> 3.0V 2.3 2.56 2.8 V
RREF 32
REGEN Analoge ingangsweerstand 100
ADC-uitgang 0 1023 LSB

Let op: 1. Waarden zijn slechts richtlijnen.

Tabel 21-9. ADC-kenmerken, differentiële kanalen (unipolaire modus). TA = -40°C tot +85°C

Symbool Parameter Voorwaarde Mijn Typ Maximaal Eenheden
Oplossing Winst = 1x 10 Beetjes
Winst = 20x 10 Beetjes
Absolute nauwkeurigheid (inclusief INL, DNL en

Kwantisering, versterking en offsetfouten)

Winst = 1x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

10.0 LSB
Winst = 20x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

20.0 LSB
Integrale niet-lineariteit (INL) (nauwkeurigheid na offset- en versterkingskalibratie) Winst = 1x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

4.0 LSB
Winst = 20x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

10.0 LSB
Krijg fout Winst = 1x 10.0 LSB
Winst = 20x 15.0 LSB
Offset-fout Winst = 1x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

3.0 LSB
Winst = 20x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

4.0 LSB
Conversietijd Vrijlopende conversie 70 280 µs
Klokfrequentie 50 200 kHz
VIN Ingangsvolumetage GND VCC V
VDIFF Ingangsdifferentiaal volumetage VREF/Winst V
Invoerbandbreedte 4 kHz
AREF Externe referentie Voltage 2.0 VCC-1.0 V
VINT Intern volumetage Referentie: 1.0 1.1 1.2 V
Interne 2.56V-referentie (1) VCC> 3.0V 2.3 2.56 2.8 V
RREF Referentie-ingangsweerstand 32
REGEN Analoge ingangsweerstand 100
ADC-conversie-uitvoer 0 1023 LSB

Let op: de waarden zijn slechts richtlijnen.

Tabel 21-10. ADC-kenmerken, differentiële kanalen (bipolaire modus). TA = -40°C tot +85°C

Symbool Parameter Voorwaarde Mijn Typ Maximaal Eenheden
Oplossing Winst = 1x 10 Beetjes
Winst = 20x 10 Beetjes
Absolute nauwkeurigheid (inclusief INL, DNL en

Kwantisering, versterking en offsetfouten)

Winst = 1x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

8.0 LSB
Winst = 20x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

8.0 LSB
Integrale niet-lineariteit (INL) (nauwkeurigheid na offset- en versterkingskalibratie) Winst = 1x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

4.0 LSB
Winst = 20x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

5.0 LSB
Krijg fout Winst = 1x 4.0 LSB
Winst = 20x 5.0 LSB
Offset-fout Winst = 1x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

3.0 LSB
Winst = 20x

VREF = 4V, VCC = 5V

ADC-klok = 50 – 200 kHz

4.0 LSB
Conversietijd Vrijlopende conversie 70 280 µs
Klokfrequentie 50 200 kHz
VIN Ingangsvolumetage GND VCC V
VDIFF Ingangsdifferentiaal volumetage VREF/Winst V
Invoerbandbreedte 4 kHz
AREF Externe referentie Voltage 2.0 VCC-1.0 V
VINT Intern volumetage Referentie: 1.0 1.1 1.2 V
Interne 2.56V-referentie (1) VCC> 3.0V 2.3 2.56 2.8 V
RREF Referentie-ingangsweerstand 32
REGEN Analoge ingangsweerstand 100
ADC-conversie-uitvoer -512 511 LSB

Samenvatting instructieset

Mnemonieken Operanden Beschrijving Bediening Vlaggen #Klokken
REKENKUNDIGE EN LOGISCHE INSTRUCTIES
TOEVOEGEN Rd, Achter Voeg twee registers toe Rd ← Rd + Rr Z,C,N,V,H 1
ADC Rd, Achter Voeg toe met Carry twee registers Rd ← Rd + Rr + C Z,C,N,V,H 1
ADIW Rdl,K Direct toevoegen aan Word Rdh:Rdl ← Rdh:Rdl + K Z,C,N,V,S 2
SUB Rd, Achter Trek twee registers af Rd ← Rd – Rr Z,C,N,V,H 1
ONDERDEEL Rd, K Constante van register aftrekken Rd ← Rd – K Z,C,N,V,H 1
SBC Rd, Achter Aftrekken met Carry twee registers Rd ← Rd – Rr – C Z,C,N,V,H 1
SBCI Rd, K Trek met overdrachtsconstante af van Reg. Rd ← Rd – K – C Z,C,N,V,H 1
SBIW Rdl,K Direct aftrekken van Woord Rdh:Rdl ← Rdh:Rdl – K Z,C,N,V,S 2
EN Rd, Achter Logische EN-registers Rd ← Rd ∙ Rr Z,N,V 1
ANDI Rd, K Logisch EN-register en constante Rd ← Rd ∙ K Z,N,V 1
OR Rd, Achter Logische OF-registers Rd ← Rd v Rr Z,N,V 1
ORI Rd, K Logisch OF-register en constante Rd ← Rd v K Z,N,V 1
EOR Rd, Achter Exclusieve OF-registers Rd ← Rd ⊕ Rr Z,N,V 1
COM Rd Een complement Rd ← 0xFF − Rd Z,C,N,V 1
NEG Rd Twee's complement Rd ← 0x00 − Rd Z,C,N,V,H 1
SBR Rd,K Bit(s) in register instellen Rd ← Rd v K Z,N,V 1
CBR Rd,K Bit(s) in register wissen Rd ← Rd ∙ (0xFF – K) Z,N,V 1
INHOUD Rd Toename Rd ← Rd + 1 Z,N,V 1
DECEMBER Rd Afname Rd ← Rd − 1 Z,N,V 1
TST Rd Test voor Nul of Min Rd ← Rd ∙ Rd Z,N,V 1
CLR Rd Register wissen Rd ← Rd ⊕ Rd Z,N,V 1
SER Rd Stel Register in Rd ← 0xFF Geen 1
TAKINSTRUCTIES
RJMP k Relatieve sprong PC ← PC + k + 1 Geen 2
IJMP Indirecte sprong naar (Z) PC ← Z Geen 2
RCALL k Relatieve subroutine-aanroep PC ← PC + k + 1 Geen 3
ICALL Indirecte oproep naar (Z) PC ← Z Geen 3
RET Subroutine-retour PC ← STAPEL Geen 4
NETWERKEN Onderbreken Terugkeer PC ← STAPEL I 4
CPSE Rd,Rr Vergelijken, overslaan indien gelijk als (Rd = Rr) PC ← PC + 2 of 3 Geen 1/2/3
CP Rd,Rr Vergelijken Rd − Rr Z, N, V, C, H 1
CPC Rd,Rr Vergelijk met Carry Rd − Rr − C Z, N, V, C, H 1
Consumentenprijsindex Rd,K Vergelijk Register met Direct Rd − K Z, N, V, C, H 1
SBRC Rr, b Overslaan als bit in register gewist is als (Rr(b)=0) PC ← PC + 2 of 3 Geen 1/2/3
SBRS Rr, b Overslaan als bit in register is ingesteld als (Rr(b)=1) PC ← PC + 2 of 3 Geen 1/2/3
SBIC P, b Overslaan als bit in I/O-register is gewist als (P(b)=0) PC ← PC + 2 of 3 Geen 1/2/3
SBIS P, b Overslaan als bit in I/O-register is ingesteld als (P(b)=1) PC ← PC + 2 of 3 Geen 1/2/3
BRBS s, k Branch als statusvlag is ingesteld als (SREG(s) = 1) dan PC←PC+k + 1 Geen 1/2
BRBC s, k Branch als statusvlag is gewist als (SREG(s) = 0) dan PC←PC+k + 1 Geen 1/2
BREQ k Tak indien gelijk als (Z = 1) dan PC ← PC + k + 1 Geen 1/2
BROE k Vertakking indien niet gelijk als (Z = 0) dan PC ← PC + k + 1 Geen 1/2
BRCS k Tak als Carry Set als (C = 1) dan PC ← PC + k + 1 Geen 1/2
BRCC k Tak indien Carry Cleared als (C = 0) dan PC ← PC + k + 1 Geen 1/2
BRSH k Tak indien gelijk of hoger als (C = 0) dan PC ← PC + k + 1 Geen 1/2
BRLO k Tak indien lager als (C = 1) dan PC ← PC + k + 1 Geen 1/2
BRMI k Tak als Min als (N = 1) dan PC ← PC + k + 1 Geen 1/2
BRPL k Tak als Plus als (N = 0) dan PC ← PC + k + 1 Geen 1/2
BRGE k Tak indien groter of gelijk, getekend als (N ⊕ V= 0) dan PC ← PC + k + 1 Geen 1/2
BRLT k Tak indien kleiner dan nul, ondertekend als (N ⊕ V= 1) dan PC ← PC + k + 1 Geen 1/2
BRHS k Tak als Half Carry Flag Set als (H = 1) dan PC ← PC + k + 1 Geen 1/2
BRHC k Tak als de vlag voor half dragen is gewist als (H = 0) dan PC ← PC + k + 1 Geen 1/2
BRTS k Tak als T-vlag is ingesteld als (T = 1) dan PC ← PC + k + 1 Geen 1/2
BRTC k Tak als T-vlag gewist als (T = 0) dan PC ← PC + k + 1 Geen 1/2
BRVS k Vertakken als overloopvlag is ingesteld als (V = 1) dan PC ← PC + k + 1 Geen 1/2
BRVC k Vertakken als de overloopvlag is gewist als (V = 0) dan PC ← PC + k + 1 Geen 1/2
BRIE k Vertakken als onderbreking is ingeschakeld als (I = 1) dan PC ← PC + k + 1 Geen 1/2
BRUID k Vertakken als onderbreking is uitgeschakeld als (I = 0) dan PC ← PC + k + 1 Geen 1/2
BIT- EN BIT-TESTINSTRUCTIES
SBI P,b Bit instellen in I/O-register I/O(P,b) ← 1 Geen 2
CBI P,b Bit wissen in I/O-register I/O(P,b) ← 0 Geen 2
LSL Rd Logische verschuiving naar links Rd(n+1) ← Rd(n), Rd(0) ← 0 Z,C,N,V 1
LSR Rd Logische verschuiving naar rechts Rd(n) ← Rd(n+1), Rd(7) ← 0 Z,C,N,V 1
ROL Rd Draai links door te dragen Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) Z,C,N,V 1
ROR Rd Draai rechts door draag Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) Z,C,N,V 1
ASR Rd Rekenkundige verschuiving naar rechts Rd(n) ← Rd(n+1), n=0..6 Z,C,N,V 1
Mnemonieken Operanden Beschrijving Bediening Vlaggen #Klokken
RUIL Rd Ruil hapjes Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) Geen 1
BSET s Vlag ingesteld SREG(en) ← 1 SREG(en) 1
BCLR s Vlag vrij SREG(en) ← 0 SREG(en) 1
Zomertijd Rr, b Bit Store van Register naar T T ← Rr(b) T 1
BLD Rd, b Bitbelasting van T naar register Rd(b) ← T Geen 1
SEC Set Dragen C← 1 C 1
CLC Duidelijk dragen C← 0 C 1
SEN Negatieve vlag instellen N← 1 N 1
CLN Negatieve vlag wissen N← 0 N 1
SEZ Stel nulvlag in Z← 1 Z 1
CLZ Duidelijke nulvlag Z← 0 Z 1
SEI Globale onderbreking inschakelen Ik ← 1 I 1
CLI Globale onderbreking uitschakelen Ik ← 0 I 1
SES Stel ondertekende testvlag in S← 1 S 1
CLS Duidelijke ondertekende testvlag S← 0 S 1
ZONDER Set Tweeën Complement Overloop. V← 1 V 1
CLV Duidelijke tweeën complement overloop V← 0 V 1
SET Stel T in SREG in ← 1 T 1
CLT Duidelijke T in SREG ← 0 T 1
SEH Stel de Half Carry-vlag in SREG in H← 1 H 1
CLH Duidelijke halve draagvlag in SREG H← 0 H 1
INSTRUCTIES VOOR GEGEVENSOVERDRACHT
MOV Rd, Achter Bewegen tussen registers Rd ← Rr Geen 1
MOVW Rd, Achter Kopieer Register Woord Rd+1:Rd ← Rr+1:Rr Geen 1
LDI Rd, K Direct laden Rd ← K Geen 1
LD Rd, X Laad indirect Rd ← (X) Geen 2
LD Rd, X+ Laad indirect en post-inc. Rd ← (X), X ← X + 1 Geen 2
LD Rd, – X Laad indirect en pre-dec. X ← X – 1, Rd ← (X) Geen 2
LD Rd, Y Laad indirect Rd ← (J) Geen 2
LD Rd, Y+ Laad indirect en post-inc. Rd ← (J), J ← J + 1 Geen 2
LD Rd, – Y Laad indirect en pre-dec. J ← J – 1, Rd ← (J) Geen 2
LDD Rd,Y+q Indirecte belasting met verplaatsing Rd ← (Y + q) Geen 2
LD Rd, Z Laad indirect Rd ← (Z) Geen 2
LD Rd, Z+ Laad indirect en post-inc. Rd ← (Z), Z ← Z+1 Geen 2
LD Rd, -Z Laad indirect en pre-dec. Z ← Z – 1, Rd ← (Z) Geen 2
LDD Rd, Z+q Indirecte belasting met verplaatsing Rd ← (Z + q) Geen 2
Mormoonse Kerk Rd, k Direct laden vanaf SRAM Rd ← (k) Geen 2
ST X, Rr Indirect opslaan (X) ← Rr Geen 2
ST X+, Rr Indirecte en post-inc. opslaan (X) ← Rr, X ← X + 1 Geen 2
ST – X, Rr Indirect en vóór de ontginning bewaren. X ← X – 1, (X) ← Rr Geen 2
ST J, Rr Indirect opslaan (Y) ← Rr Geen 2
ST J+, Rr Indirecte en post-inc. opslaan (J) ← Rr, J ← J + 1 Geen 2
ST – J, Rr Indirect en vóór de ontginning bewaren. J ← J – 1, (J) ← Rr Geen 2
SOA Y+q,Rr Indirect opslaan met verplaatsing (Y + q) ← Rr Geen 2
ST Z, Rr Indirect opslaan (Z) ← Rr Geen 2
ST Z+, Rr Indirecte en post-inc. opslaan (Z) ← Rr, Z ← Z + 1 Geen 2
ST -Z, Rr Indirect en vóór de ontginning bewaren. Z ← Z – 1, (Z) ← Rr Geen 2
SOA Z+q,Rr Indirect opslaan met verplaatsing (Z + q) ← Rr Geen 2
STS k, Rr Direct opslaan bij SRAM (k) ← Rr Geen 2
LPM Programmageheugen laden R0 ← (Z) Geen 3
LPM Rd, Z Programmageheugen laden Rd ← (Z) Geen 3
LPM Rd, Z+ Programmageheugen laden en post-inc Rd ← (Z), Z ← Z+1 Geen 3
SPM Programmageheugen opslaan (z) ← R1:R0 Geen
IN Rd, P In de haven Rd ← P Geen 1
UIT P, Rr Uit haven P ← Rr Geen 1
DUW Rr Push-register op stapel STAPEL ← Rr Geen 2
KNAL Rd Pop-register van Stack Rd ← STAPEL Geen 2
MCU-BESTURINGSINSTRUCTIES
NEE Geen operatie Geen 1
SLAAP Slaap (zie specifieke beschrijving voor slaapfunctie) Geen 1
WDR Watchdog-reset (zie specifieke beschrijving voor WDR/Timer) Geen 1
PAUZE Pauze
Snelheid (MHz) (1) Leveringsvolumetage (V) Temperatuurbereik Pakket (2) Bestelcode (3)
10 1.8 – 5.5 Industrieel

(-40 ° C tot + 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 Industrieel

(-40 ° C tot + 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

Opmerkingen: 1. Voor snelheid vs. aanbodvolumetage, zie sectie 21.3 “Snelheid” op pagina 163.

Alle verpakkingen zijn loodvrij, halidevrij en volledig groen en voldoen aan de Europese richtlijn voor beperking van gevaarlijke stoffen (RoHS).

Code-indicatoren

H: NiPdAu lood afwerking

U: mat blik

R: tape & spoel

Deze apparaten kunnen ook in wafervorm worden geleverd. Neem contact op met uw lokale Atmel-verkoopkantoor voor gedetailleerde bestelinformatie en minimale hoeveelheden.

errata

Fouten ATtiny25

De revisiebrief in deze sectie verwijst naar de revisie van het ATtiny25-apparaat.

Rev. D – F

Geen errata bekend.

Rev. B – C

EEPROM-lezen kan mislukken bij lage voedingsspanningtage / lage klokfrequentie

EEPROM-lezen kan mislukken bij lage voedingsspanningtage / lage klokfrequentie

Proberen EEPROM te lezen bij lage klokfrequenties en/of lage voedingsspanningtagDit kan resulteren in ongeldige gegevens.

Probleemoplossing/oplossing

Gebruik het EEPROM niet wanneer de kloksnelheid lager is dan 1 MHz en het voedingsvolumetage is lager dan 2V. Als de bedrijfsfrequentie niet boven 1 MHz kan worden gebracht, moet het voedingsvolume worden verhoogdtage moet groter zijn dan 2V. Op dezelfde manier, als het voedingsvolumetagAls de spanning niet boven 2V kan worden gebracht, moet de werkfrequentie hoger zijn dan 1MHz.

Het is bekend dat deze eigenschap temperatuurafhankelijk is, maar deze is niet gekarakteriseerd. Er worden alleen richtlijnen gegeven voor kamertemperatuur.

Ds. A

Niet sampLED.

Fouten ATtiny45

De revisiebrief in deze sectie verwijst naar de revisie van het ATtiny45-apparaat.

Rev. F – G

Geen bekende fouten

Rev. D – E

EEPROM-lezen kan mislukken bij lage voedingsspanningtage / lage klokfrequentie

EEPROM-lezen kan mislukken bij lage voedingsspanningtage / lage klokfrequentie

Proberen EEPROM te lezen bij lage klokfrequenties en/of lage voedingsspanningtagDit kan resulteren in ongeldige gegevens.

Probleemoplossing/oplossing

Gebruik het EEPROM niet wanneer de kloksnelheid lager is dan 1 MHz en het voedingsvolumetage is lager dan 2V. Als de bedrijfsfrequentie niet boven 1 MHz kan worden gebracht, moet het voedingsvolume worden verhoogdtage moet groter zijn dan 2V. Op dezelfde manier, als het voedingsvolumetagAls de spanning niet boven 2V kan worden gebracht, moet de werkfrequentie hoger zijn dan 1MHz.

Het is bekend dat deze eigenschap temperatuurafhankelijk is, maar het is niet gekarakteriseerd. Er worden alleen richtlijnen gegeven voor kamertemperatuur.

Rev. B – C

PLL vergrendelt niet

EEPROM lezen van applicatiecode werkt niet in Lock Bit Mode 3

EEPROM-lezen kan mislukken bij lage voedingsspanningtage / lage klokfrequentie

Timer Counter 1 PWM-uitgangsgeneratie op OC1B-XOC1B werkt niet correct

PLL vergrendelt niet

Bij frequenties onder 6.0 MHz zal de PLL niet vergrendelen

Probleem opgelost / Tijdelijke oplossing

Wanneer u de PLL gebruikt, moet u op 6.0 MHz of hoger werken.

EEPROM lezen van applicatiecode werkt niet in Lock Bit Mode 3

Wanneer de geheugenvergrendelingsbits LB2 en LB1 zijn geprogrammeerd op modus 3, werkt het EEPROM-lezen vanuit de applicatiecode niet.

Probleem oplossen/omzeilen

Stel Lock Bit Protection Mode 3 niet in als de applicatiecode van EEPROM moet worden gelezen.

EEPROM-lezen kan mislukken bij lage voedingsspanningtage / lage klokfrequentie

Proberen EEPROM te lezen bij lage klokfrequenties en/of lage voedingsspanningtagDit kan resulteren in ongeldige gegevens.

Probleemoplossing/oplossing

Gebruik het EEPROM niet wanneer de kloksnelheid lager is dan 1 MHz en het voedingsvolumetage is lager dan 2V. Als de bedrijfsfrequentie niet boven 1 MHz kan worden gebracht, moet het voedingsvolume worden verhoogdtage moet groter zijn dan 2V. Op dezelfde manier, als het voedingsvolumetagAls de spanning niet boven 2V kan worden gebracht, moet de werkfrequentie hoger zijn dan 1MHz.

Het is bekend dat deze eigenschap temperatuurafhankelijk is, maar deze is niet gekarakteriseerd. Er worden alleen richtlijnen gegeven voor kamertemperatuur.

Timer Counter 1 PWM-uitgangsgeneratie op OC1B – XOC1B werkt niet correct

Timer Counter1 PWM-uitgang OC1B-XOC1B werkt niet correct. Alleen in het geval dat de besturingsbits COM1B1 en COM1B0 respectievelijk in dezelfde modus staan ​​als COM1A1 en COM1A0, werkt de OC1B-XOC1B-uitgang correct.

Probleem oplossen/omzeilen

De enige oplossing is om dezelfde besturingsinstelling te gebruiken op COM1A[1:0] en COM1B[1:0] besturingsbits, zie tabel 14-4 in het gegevensblad. Het probleem is opgelost voor Tiny45 rev D.

Ds. A

Te hoog stroomverbruik bij uitschakeling

DebugWIRE verliest communicatie wanneer er een enkele stap in interrupts wordt gezet

PLL vergrendelt niet

EEPROM lezen van applicatiecode werkt niet in Lock Bit Mode 3

EEPROM-lezen kan mislukken bij lage voedingsspanningtage / lage klokfrequentie

Te hoog stroomverbruik bij uitschakeling

Drie situaties leiden tot een te hoog power down stroomverbruik. Dit zijn:

Een externe klok wordt geselecteerd door zekeringen, maar de I/O-POORT blijft nog steeds ingeschakeld als uitgang.

Het EEPROM wordt gelezen voordat de stroom wordt uitgeschakeld.

VCC is 4.5 volt of hoger.

Disclaimer: De informatie in dit document wordt verstrekt in verband met Atmel-producten. Er wordt geen licentie, expliciet of impliciet, door uitsluiting of anderszins, verleend voor enig intellectueel eigendomsrecht door dit document of in verband met de verkoop van Atmel-producten. BEHALVE ZOALS VERMELD IN DE ATMEL-VOORWAARDEN VOOR VERKOOP OP DE ATMEL WEBSITE AANVAARDT ATMEL GEEN ENKELE AANSPRAKELIJKHEID EN WIJST ELKE EXPLICIETE, IMPLICIETE OF WETTELIJKE GARANTIE AF MET BETREKKING TOT HAAR PRODUCTEN, INCLUSIEF MAAR NIET BEPERKT TOT DE IMPLICIETE GARANTIE VAN VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL OF NIET-INBREUK. IN GEEN GEVAL ZAL ATMEL AANSPRAKELIJK ZIJN VOOR ENIGE DIRECTE, INDIRECTE, GEVOLGSCHADE, PUNITIEVE, SPECIALE OF INCIDENTELE SCHADE (INCLUSIEF, MAAR NIET BEPERKT TOT, SCHADE DOOR VERLIES EN WINST, BEDRIJFSONDERBREKING OF VERLIES VAN INFORMATIE) VOORTVLOEIEND UIT HET GEBRUIK OF DE ONMOGELIJKHEID TOT GEBRUIK DIT DOCUMENT, ZELFS ALS ATMEL OP DE HOOGTE IS GESTELD VAN DE MOGELIJKHEID VAN DERGELIJKE SCHADE.

Atmel geeft geen verklaringen of garanties met betrekking tot de juistheid of volledigheid van de inhoud van dit document en behoudt zich het recht voor om op elk moment zonder voorafgaande kennisgeving wijzigingen aan te brengen in de specificaties en productbeschrijvingen. Atmel doet geen enkele belofte om de hierin opgenomen informatie bij te werken. Tenzij specifiek anders bepaald, zijn Atmel-producten niet geschikt voor en mogen ze niet worden gebruikt in automobieltoepassingen. Atmel-producten zijn niet bedoeld, geautoriseerd of gegarandeerd voor gebruik als componenten in toepassingen die bedoeld zijn om het leven te ondersteunen of in stand te houden.

Referenties

Laat een reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd *