Atmel 8-bit AVR-microcontroller met 2/4/8K bytes programmeerbare flash in het systeem
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
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
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
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.
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.
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 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
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
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
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 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
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.
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.
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
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
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
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.
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
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
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)
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 | ![]() |
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 | kΩ | ||||
REGEN | Analoge ingangsweerstand | 100 | MΩ | |||
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 | kΩ | |||
REGEN | Analoge ingangsweerstand | 100 | MΩ | |||
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 | kΩ | |||
REGEN | Analoge ingangsweerstand | 100 | MΩ | |||
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.