Atmel 8-bis AVR mikrobeheerder met 2/4/8K grepe in-stelsel programmeerbare flits
Kenmerke
- Hoë werkverrigting, lae krag AVR® 8-bis mikrobeheerder
- Gevorderde RISC-argitektuur
- 120 Kragtige instruksies - die meeste kloksiklusuitvoering
- 32 x 8 werkregisters vir algemene doeleindes
- Ten volle statiese werking
- Nie-vlugtige program- en dataherinneringe
- 2/4 / 8K Bytes programmeerbare geheue-flits in die stelsel
- Uithouvermoë: 10,000 XNUMX skryf-/vee-siklusse
- 128/256/512 Bytes In-stelsel programmeerbare EEPROM
- Uithouvermoë: 100,000 XNUMX skryf-/vee-siklusse
- 128/256/512 Bytes Interne SRAM
- Programmeringslot vir selfprogrammerende flitsprogram en EEPROM-datasekuriteit
Randse kenmerke
- 8-bit timer / toonbank met voorskakelaar en twee PWM-kanale
- 8-bit hoëspoed-timer / toonbank met aparte voorskakelaar
- 2 hoë frekwensie PWM-uitsette met aparte uitsetvergelykingsregisters
- Programmeerbare doodtydgenerator
- USI - Universele seriële koppelvlak met begintoestandverklikker
- 10-bis ADC
4 enkel kanale
2 Differensiële ADC-kanaalpare met programmeerbare wins (1x, 20x)
Temperatuurmeting
Programmeerbare waghondtimer met aparte ossillator op die skyfie
Analoog vergelyking op die skyfie
Spesiale mikrobeheerder funksies
debugWIRE Ontfoutstelsel op die skyfie
In-stelsel programmeerbaar via SPI-poort
Eksterne en interne onderbrekingsbronne
Idle met lae krag, ADC-ruisonderdrukking en afskakelmodusse
Verbeterde stroom-aan-stroombaan
Programmeerbare stroombaan vir opsporing van verbruining
Interne gekalibreerde ossillator
I / O en pakkette
Ses programmeerbare I / O-reëls
8-pen PDIP, 8-pen SOIC, 20-pad QFN / MLF en 8-pen TSSOP (slegs ATtiny45 / V)
Bedryfsvoltage
- 1.8 - 5.5V vir ATtiny25V / 45V / 85V
- 2.7 - 5.5V vir ATtiny25 / 45/85
Spoedgraad
- ATtiny25V / 45V / 85V: 0 - 4 MHz @ 1.8 - 5.5 V, 0 - 10 MHz @ 2.7 - 5.5 V
- ATtiny25 / 45/85: 0 - 10 MHz @ 2.7 - 5.5 V, 0 - 20 MHz @ 4.5 - 5.5 V
Industriële temperatuurreeks
Lae kragverbruik
Aktiewe modus:
1 MHz, 1.8 V: 300 µA
Afskakelmodus:
Speldkonfigurasies vas
Pinout ATtiny25 / 45/85
Speldbeskrywings
VCC: Voorsiening voltage.
GND: Grond.
Poort B (PB5:PB0): Poort B is 'n 6-bis tweerigting I/O-poort met interne optrekweerstande (gekies vir elke bis). Die Port B-uitsetbuffers het simmetriese dryfkenmerke met beide hoë sink- en bronvermoë. As insette sal Poort B-penne wat ekstern laag getrek word, stroom verskaf as die optrekweerstande geaktiveer word. Die poort B-penne is drie-statig wanneer 'n terugsteltoestand aktief word, selfs al loop die klok nie.
Port B bedien ook die funksies van verskillende spesiale eienskappe van die ATtiny25 / 45/85 soos aangedui
Op ATtiny25 word die programmeerbare I / O-poorte PB3 en PB4 (pen 2 en 3) in die ATtiny15-verenigingsmodus uitgeruil om die agteruitversoenbaarheid met ATtiny15 te ondersteun.
TERUGSTEL: Stel invoer terug. 'n Lae vlak op hierdie pen vir langer as die minimum polslengte sal 'n terugstelling genereer, selfs al loop die klok nie en mits die terugstelpen nie gedeaktiveer is nie. Die minimum polslengte word ingegee Tabel 21-4 op bladsy 165. Korter pulse kan nie gewaarborg word nie.
Die resetpen kan ook gebruik word as 'n (swak) I / O-pin.
verbyview
Die ATtiny25 / 45/85 is 'n lae-krag CMOS 8-bis-mikrobeheerder gebaseer op die AVR-verbeterde RISC-argitektuur. Deur kragtige instruksies in 'n enkele kloksiklus uit te voer, behaal die ATtiny25 / 45/85 deurvoere wat 1 MIPS per MHz nader, wat die stelselontwerper in staat stel om die kragverbruik teenoor verwerkingspoed te optimaliseer.
Blokdiagram
Die AVR-kern kombineer 'n ryk instruksiestel met 32 algemene werkregisters. Al 32 registers is direk gekoppel aan die Arithmetic Logic Unit (ALU), wat toegang tot twee onafhanklike registers kan verkry in een enkele instruksie wat in een kloksiklus uitgevoer word. Die gevolglike argitektuur is meer kodedoeltreffend en lewer deurvoer tot tien keer vinniger as konvensionele CISC-mikrobeheerders.
Die ATtiny25 / 45/85 bied die volgende funksies: 2/4 / 8K byte programmeerbare flits in die stelsel, 128/256/512 bytes EEPROM, 128/256/256 bytes SRAM, 6 algemene doel I / O-lyne, 32 algemeen doel werkregisters, een 8-bit timer / teller met vergelykingsmodusse, een 8-bit hoëspoed timer / teller, universele seriële koppelvlak, interne en eksterne onderbrekings, 'n 4-kanaals, 10-bit ADC, 'n programmeerbare waghondtimer met interne Ossillator en drie sagteware-kiesbare kragbesparingsmodusse. Die rustelose modus stop die SVE terwyl die SRAM, Timer / Counter, ADC, Analog Comparator en Interrupt-stelsel kan voortgaan om te funksioneer. Die afskakelmodus stoor die registerinhoud en deaktiveer alle chipfunksies tot die volgende onderbreking of hardewareherstel. ADC-ruisverminderingsmodus stop die SVE en alle I / O-modules, behalwe ADC, om skakelruis tydens ADC-omskakeling te verminder.
Die toestel word vervaardig met behulp van Atmel se hoë digtheid nie-vlugtige geheue tegnologie. Met die ISP Flash op die skyfie kan die programgeheue in die stelsel herprogrammeer word deur middel van 'n seriële koppelvlak van SPI, deur 'n gewone nie-vlugtige geheueprogrammeerder of deur 'n On-chip-opstartkode wat op die AVR-kern loop.
Die ATtiny25 / 45/85 AVR word ondersteun met 'n volledige reeks program- en stelselontwikkelingsinstrumente, insluitend: C-versorgers, makroassemblers, programontfouters / simulators en evalueringskits.
Oor hulpbronne
'N Omvattende stel ontwikkelingsinstrumente, toepassingsnotas en gegewensblaaie is beskikbaar vir aflaai op http://www.atmel.com/avr.
Kode Examples
Hierdie dokumentasie bevat eenvoudige kode, bvampwat kortliks wys hoe om verskillende dele van die toestel te gebruik. Hierdie kode, bvamples veronderstel dat die deel spesifieke kop file is ingesluit voor opstel. Hou in gedagte dat nie alle verskaffers van C -samestellers bitdefinisies in die kop bevat nie files en onderbrekingshantering in C is samesteller afhanklik. Bevestig die C -samesteller dokumentasie vir meer besonderhede.
Vir I / O-registers in die uitgebreide I / O-kaart, moet "IN", "OUT", "SBIS", "SBIC", "CBI" en "SBI" vervang word met instruksies wat toegang tot uitgebreide I toelaat / O. Gewoonlik beteken dit “LDS” en “STS” gekombineer met “SBRS”, “SBRC”, “SBR” en “CBR”. Let daarop dat nie alle AVR-toestelle 'n uitgebreide I / O-kaart bevat nie.
Kapasitiewe raakwaarneming
Atmel QTouch Library bied 'n maklike oplossing vir aanraaksensitiewe koppelvlakke op Atmel AVR-mikrobeheerders. Die QTouch-biblioteek bevat ondersteuning vir QTouch®- en QMatrix®-verkrygingsmetodes.
Aanraakwaarneming word maklik by elke toepassing gevoeg deur die QTouch-biblioteek te koppel en die Toepassingsprogrammeringsinterface (API) van die biblioteek te gebruik om die aanraakkanale en sensors te definieer. Die toepassing skakel dan die API om kanaalinligting op te spoor en die toestand van die aanraaksensor te bepaal.
Die QTouch -biblioteek is gratis en kan afgelaai word vanaf die Atmel webwerf. Raadpleeg die QTouch Library -gebruikershandleiding vir meer inligting en besonderhede oor die implementering - ook beskikbaar by Atmel webwebwerf.
Databehoud
Betroubaarheid Resultate van kwalifikasies toon dat die geprojekteerde mislukkingskoers van data baie minder is as 1 PPM oor 20 jaar by 85 ° C of 100 jaar by 25 ° C.
AVR SVE-kern
Inleiding
Hierdie afdeling bespreek die AVR-kernargitektuur in die algemeen. Die vernaamste funksie van die SVE-kern is om die korrekte programuitvoering te verseker. Die SVE moet dus toegang tot geheue hê, berekeninge kan uitvoer, randapparatuur beheer en onderbrekings kan hanteer.
Argitektoniese oorview
Om die prestasie en parallelisme te maksimeer, gebruik die AVR 'n Harvard-argitektuur - met aparte geheue en busse vir program en data. Instruksies in die programgeheue word uitgevoer met 'n pypleiding op een vlak. Terwyl een instruksie uitgevoer word, word die volgende instruksie vooraf uit die programgeheue gehaal. Met hierdie konsep kan instruksies in elke kloksiklus uitgevoer word. Die programgeheue is 'n herprogrammeerbare flitsgeheue in die stelsel.
Die vinnige toegangsregister File bevat 32 x 8-bis algemene doel werkende registers met 'n enkele klok siklus toegang tyd. Dit laat enkelsiklus rekenkundige logiese eenheid (ALU) werking toe. In 'n tipiese ALU-bewerking word twee operandes uit die Register uitgevoer File, word die operasie uitgevoer en word die resultaat in die register gestoor File- in een kloksiklus.
Ses van die 32 registers kan gebruik word as drie 16-bis indirekte adresregisterwysers vir Data Space-aanspreek - wat effektiewe adresberekeninge moontlik maak. Een van hierdie adreswysers kan ook gebruik word as 'n adreswyser vir nasoek-tabelle in die Flash-programgeheue. Hierdie bykomende funksieregisters is die 16-bit X-, Y- en Z-register, wat later in hierdie afdeling beskryf word.
Die ALU ondersteun rekenkundige en logiese bewerkings tussen registers of tussen 'n konstante en 'n register. Enkele registerbewerkings kan ook in die ALU uitgevoer word. Na 'n rekenkundige bewerking word die Statusregister opgedateer om inligting oor die resultaat van die bewerking weer te gee.
Programvloei word voorsien deur voorwaardelike en onvoorwaardelike spring- en oproepinstruksies, wat die hele adresruimte direk kan aanspreek. Die meeste AVR-instruksies het 'n enkele 16-bis-woordformaat, maar daar is ook 32-bit-instruksies.
Tydens onderbrekings en subroetine-oproepe word die retouradres Program Counter (PC) op die Stack gestoor. Die Stack word effektief toegeken in die algemene SRAM-data, en gevolglik word die Stack-grootte slegs beperk deur die totale SRAM-grootte en die gebruik van die SRAM. Alle gebruikersprogramme moet die SP inisieer in die Herstelroetine (voordat onderroetines of onderbrekings uitgevoer word). Die Stack Pointer (SP) is in die I / O-ruimte toeganklik vir lees / skryf. Die data van SRAM is maklik toeganklik via die vyf verskillende aanspreekmetodes wat ondersteun word in die AVR-argitektuur.
Die geheuespasies in die AVR-argitektuur is almal lineêre en gewone geheuekaarte.
'N Buigsame onderbrekingsmodule bevat sy beheerregisters in die I / O-ruimte met 'n addisionele Global Interrupt Enable-bietjie in die statusregister. Alle onderbrekings het 'n aparte onderbrekingsvektor in die onderbrekingsvektortabel. Die onderbrekings het voorkeur in ooreenstemming met hul onderbrekingsvectorposisie. Hoe laer die Interrupt Vector-adres, hoe hoër is die prioriteit.
Die I/O -geheue spasie bevat 64 adresse vir CPU -perifere funksies soos Control Registers, SPI en ander I/O -funksies. Die I/O-geheue kan direk verkry word, of as die Data Space-liggings volgens die van die registrateur File, 0x20 - 0x5F.
ALU - Rekenkundige logika-eenheid
Die hoëprestasie AVR ALU werk in direkte verband met al die 32 werkregisters vir algemene doeleindes. Binne 'n enkele kloksiklus word rekenkundige bewerkings gedoen tussen algemene registers of tussen 'n register en 'n onmiddellike. Die ALU-bedrywighede word in drie hoofkategorieë verdeel - rekenkundige, logiese en bitfunksies. Sommige implementasies van die argitektuur bied ook 'n kragtige vermenigvuldiger wat beide getekende / ongetekende vermenigvuldigings- en breukformaat ondersteun. Sien die afdeling "Instruksieset" vir 'n gedetailleerde beskrywing.
Statusregister
Die statusregister bevat inligting oor die resultaat van die rekenkundige instruksie wat onlangs uitgevoer is. Hierdie inligting kan gebruik word om die programvloei te verander om voorwaardelike bewerkings uit te voer. Let daarop dat die statusregister bygewerk word na alle ALU-bewerkings, soos gespesifiseer in die instruksiestelverwysing. Dit sal in baie gevalle die behoefte aan die gebruik van die toegewyde vergelykingsinstruksies verwyder, wat vinniger en kompakter kode tot gevolg het.
Die statusregister word nie outomaties gestoor as u 'n onderbrekingsroetine binnegaan nie en herstel wanneer dit van 'n onderbreking terugkeer. Dit moet deur sagteware hanteer word.
SREG - AVR-statusregister
Die AVR-statusregister - SREG - word gedefinieer as:
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3F | I | T | H | S | V | N | Z | C | SREG |
Lees/Skryf | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 - I: Global Interrupt Enable
Die Global Interrupt Enable-bietjie moet ingestel wees om die onderbrekings te aktiveer. Die individuele onderbrekingsbeheer word dan in aparte kontroleregisters uitgevoer. As die Global Interrupt Enable Register skoongemaak word, word geen onderbrekings geaktiveer nie, onafhanklik van die individuele instellings vir onderbreking. Die I-bit word deur hardeware skoongemaak nadat 'n onderbreking plaasgevind het, en word ingestel deur die RETI-opdrag om daaropvolgende onderbrekings moontlik te maak. Die I-bit kan ook ingestel en skoongemaak word deur die toepassing met die SEI- en CLI-instruksies, soos beskryf in die instruksiestelverwysing.
Bit 6 - T: Bitkopie-berging
Die Bit Copy instruksies BLD (Bit LoaD) en BST (Bit STore) gebruik die T-bit as bron of bestemming vir die bewerkte bit. 'N Bietjie van 'n register in die register File kan na T gekopieer word deur die BST instruksie, en 'n bietjie in T kan in 'n bietjie in 'n register in die register gekopieer word File deur die BLD instruksie.
Bit 5 - H: Half dra vlag
Die Half Carry Flag H dui op Half Carry in sommige rekenkundige bewerkings. Half Carry is nuttig in BCD-rekenkunde. Sien die “Instruksie-beskrywing” vir gedetailleerde inligting.
Bit 4 – S: Tekenbit, S = N ⊕ V
Die S-bit is altyd 'n eksklusiewe of tussen die negatiewe vlag N en die twee se aanvullende oorvloei-vlag V. Raadpleeg die “Instruksiestellingbeskrywing” vir meer inligting.
Bit 3 - V: Two's Complement Overflow Flag
The Two's Complement Overflow Flag V ondersteun die komplementrekene van twee. Sien die “Instruksie-beskrywing” vir gedetailleerde inligting.
Bit 2 - N: Negatiewe vlag
Die negatiewe vlag N dui op 'n negatiewe resultaat in 'n rekenkundige of logiese bewerking. Sien die “Instruksie-beskrywing” vir gedetailleerde inligting.
Bit 1 - Z: Nulvlag
Die Zero Flag Z dui 'n nul-resultaat aan in 'n rekenkundige of logiese bewerking. Raadpleeg die “Instruksiestelbeskrywing” vir gedetailleerde inligting.
Bit 0 - C: Carry Flag
Die dravlag C dui op 'n rekenkundige of logiese bewerking. Raadpleeg die “Instruksiestelbeskrywing” vir gedetailleerde inligting.
Register vir algemene doeleindes File
Die Register File is geoptimaliseer vir die AVR Enhanced RISC -instruksiestel. Om die vereiste prestasie en buigsaamheid te bereik, word die volgende invoer-/afvoerskemas deur die register ondersteun File:
Een 8-bis uitvoer-operand en een 8-bis resultaat-invoer
Twee 8-bis-uitvoer-operande en een 8-bis-resultaatinvoer
Twee 8-bis-uitvoer-operande en een 16-bis-resultaatinvoer
Een 16-bis uitvoer-operand en een 16-bis resultaat-invoer
Figuur 4-2 toon die struktuur van die 32 algemene werkregisters in die SVE.
Soos getoon in Figuur 4-2, aan elke register word ook 'n gegewensgeheue -adres toegeken, wat hulle direk op die eerste 32 plekke van die gebruikersdataruimte in kaart bring. Alhoewel dit nie fisies geïmplementeer word as SRAM-liggings nie, bied hierdie geheue-organisasie groot buigsaamheid in die toegang tot die registers, aangesien die X-, Y- en Z-wyserregisters ingestel kan word om enige register in die file.Die meeste van die instruksies wat op die Register werk File het direkte toegang tot alle registers, en die meeste daarvan is enkele siklusinstruksies.
Die X-register, Y-register en Z-register
Die registers R26..R31 het 'n paar funksies wat by die algemene gebruik gebruik word. Hierdie registers is 16-bis adreswysers vir indirekte aanspreek van die data-ruimte. Die drie indirekte adresregisters X, Y en Z word gedefinieer soos beskryf in Figuur 4-3.
In die verskillende aanspreekmetodes funksioneer hierdie adresregisters as vaste verplasing, outomatiese verhoging en outomatiese verlaging (sien die verwysing vir die instruksiestel vir besonderhede).
Stapelwyser
Die Stack word hoofsaaklik gebruik vir die stoor van tydelike data, vir die stoor van plaaslike veranderlikes en vir die stoor van retouradresse na onderbrekings en subroetine-oproepe. Die Stack Pointer Register wys altyd na die top van die Stack. Let daarop dat die Stack geïmplementeer word as groei van hoër geheue na laer geheue. Dit impliseer dat 'n Stack PUSH-opdrag die Stack Pointer verminder.
Die Stack Pointer wys na die data SRAM Stack area waar die Subroutine en Interrupt Stacks geleë is. Hierdie stapelruimte in die SRAM-data moet deur die program gedefinieer word voordat subroetine-oproepe uitgevoer word of onderbrekings geaktiveer word. Die stapelwyser moet op punt bokant 0x60 gestel word. Die Stack Pointer word deur een afgeneem wanneer data op die Stack gestoot word met die PUSH-instruksie, en dit word met twee verminder as die retouradres op die Stack gestoot word met subroetine-oproep of onderbreking. Die Stack Pointer word met een verhoog wanneer die data van die Stack met die POP-instruksie gepop word, en dit word met twee verhoog wanneer die data uit die Stack gepop word met terugkeer van subroetine RET of terugkeer van onderbrekende RETI.
Die AVR Stack Pointer word geïmplementeer as twee 8-bit registers in die I / O-ruimte. Die aantal stukkies wat eintlik gebruik word, hang af van die implementering. Let daarop dat die data-ruimte in sommige implementerings van die AVR-argitektuur so klein is dat slegs SPL nodig is. In hierdie geval sal die SPH-register nie teenwoordig wees nie.
SPH en SPL - Stack Pointer Register
Bietjie | 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 | ||
Lees/Skryf | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Lees/Skryf | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Aanvangswaarde | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | |
Aanvangswaarde | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND | RAMEND |
Instellings vir uitvoering van instruksies
Hierdie afdeling beskryf die algemene toegang tydsberekening konsepte vir instruksie uitvoering. Die AVR SVE word aangedryf deur die SVE klok clkCPU, direk gegenereer vanaf die geselekteerde klok bron vir die chip. Geen interne klokverdeling word gebruik nie.
Figuur 4-4 toon die parallelle instruksies en instruksies wat uitgevoer word deur die Harvard -argitektuur en die vinnige toegangsregister File konsep. Dit is die basiese pyplyn-konsep om tot 1 MIPS per MHz te verkry met die ooreenstemmende unieke resultate vir funksies per koste, funksies per horlosies en funksies per krag-eenheid.
Figuur 4-5. Enkelsiklus ALU-werking
Herstel en onderbreek die hantering
Die AVR bied verskillende onderbrekingsbronne. Hierdie onderbrekings en die afsonderlike Reset Vector het elk 'n aparte Program Vector in die Program geheue ruimte. Aan alle onderbrekings word individuele inskakelbits toegeken, wat een logiese een moet wees, tesame met die globale onderbrekingsaktiwiteitsbit in die statusregister om die onderbreking moontlik te maak.
Die laagste adresse in die programgeheuurspasie word standaard gedefinieer as die reset- en onderbrekingsvektore. Die volledige lys van vektore word in getoon “Onderbreek” op bladsy 48. Die lys bepaal ook die prioriteitsvlakke van die verskillende onderbrekings. Hoe laer die adres hoe hoër is die prioriteitsvlak. RESET het die hoogste prioriteit, en die volgende is INT0 - die eksterne onderbrekingsversoek 0.
Wanneer 'n onderbreking plaasvind, word die Global Interrupt Enable I-bit skoongemaak en word alle onderbrekings uitgeskakel. Die gebruikersagteware kan logiese een na die I-bit skryf om geneste onderbrekings moontlik te maak. Alle geaktiveerde onderbrekings kan dan die huidige onderbrekingsroetine onderbreek. Die I-bit word outomaties ingestel wanneer 'n Return from Interrupt-instruksie - RETI - uitgevoer word.
Daar is basies twee soorte onderbrekings. Die eerste tipe word veroorsaak deur 'n gebeurtenis wat die onderbrekingsvlag stel. Vir hierdie onderbrekings word die programteller gevektoreer na die werklike onderbrekingsvektor om die onderbrekingshanteringsroetine uit te voer, en hardeware maak die ooreenstemmende onderbrekingsvlag skoon. Onderbrekingsvlae kan ook skoongemaak word deur 'n logiese een te skryf na die vlagbitposisie (s) om te verwyder. As 'n onderbrekingstoestand voorkom terwyl die ooreenstemmende onderbrekingsaktiwiteitspunt uitgevee word, sal die onderbrekingsvlag ingestel en onthou word totdat die onderbreking geaktiveer is, of die vlag deur sagteware uitgevee word. Net so, as een of meer onderbrekingsvoorwaardes voorkom terwyl die Global Interrupt Enable-bietjie uitgevee word, sal die ooreenstemmende Interrupt Flag (s) ingestel en onthou word totdat die Global Interrupt Enable-bit ingestel is, en dan op volgorde van prioriteit uitgevoer word.
Die tweede tipe onderbrekings sal veroorsaak solank die onderbrekingstoestand aanwesig is. Hierdie onderbrekings het nie noodwendig onderbrekingsvlae nie. As die onderbrekingstoestand verdwyn voordat die onderbreking geaktiveer word, sal die onderbreking nie geaktiveer word nie.
Wanneer die AVR van 'n onderbreking verlaat, sal hy altyd na die hoofprogram terugkeer en nog 'n opdrag uitvoer voordat enige onderbreking bedien word.
Let daarop dat die statusregister nie outomaties gestoor word wanneer u 'n onderbrekingsroetine binnegaan nie, en ook nie herstel wanneer u van 'n onderbrekingsroetine terugkeer nie. Dit moet deur sagteware hanteer word.
As u die CLI -instruksie gebruik om onderbrekings uit te skakel, word die onderbrekings onmiddellik gedeaktiveer. Geen onderbreking sal uitgevoer word na die CLI -instruksie nie, selfs al vind dit gelyktydig met die CLI -instruksie plaas. Die volgende eksample wys hoe dit gebruik kan word om onderbrekings tydens die tydsberekende EEPROM -skryfvolgorde te vermy.
Vergaderingskode Example |
in r16, SREG ; stoor SREG-waarde
cli ; deaktiveer onderbrekings tydens tydvolgorde sbi EECR, EEMPE ; begin EEPROM skryf sbi EECR, EEPE uit SREG, r16; herstel SREG-waarde (I-bis) |
C Kode Example |
char cSREG;
cSREG = SREG; /* stoor SREG-waarde */ /* deaktiveer onderbrekings tydens tydvolgorde */ _CLI (); EECR |= (1< EECR | = (1 < SREG = cSREG; /* herstel SREG-waarde (I-bis) */ |
As u die SEI-instruksie gebruik om onderbrekings moontlik te maak, sal die instruksie wat volg op SEI uitgevoer word voor enige onderbrekings, soos getoon in hierdie voorbeeldample.
Vergaderingskode Example |
sei ; stel Global Interrupt Enable in
slaap; gaan slaap, wag vir onderbreking ; opmerking: sal in slaap gaan voor enige hangende ; onderbreek (s) |
C Kode Example |
_SEI(); /* stel Global Interrupt Aktiveer */
_SLAAP(); /* gaan slaap, wag vir onderbreking */ / * opmerking: gaan slaap voor enige onderbreking (e) * / |
Onderbreek reaksietyd
Die onderbrekingsuitvoeringsreaksie vir al die geaktiveerde AVR-onderbrekings is minstens vier kloksiklusse. Na vier kloksiklusse word die Program Vector-adres uitgevoer vir die werklike onderbrekingshanteringsroetine. Gedurende hierdie vier-uur-siklusperiode word die programteller op die stapel gedruk. Die vektor is normaalweg 'n sprong na die onderbrekingsroetine, en hierdie sprong neem drie kloksiklusse. As 'n onderbreking plaasvind tydens die uitvoering van 'n multisiklusinstruksie, word hierdie instruksie voltooi voordat die onderbreking bedien word. As 'n onderbreking plaasvind wanneer die MCU in die slaapmodus is, word die onderbrekingsreaksietyd met vier kloksiklusse verhoog. Hierdie toename kom bo en behalwe die opsteltyd van die geselekteerde slaapmodus.
'N Terugkeer van 'n onderbrekingshanteringsroetine duur vier kloksiklusse. Gedurende hierdie vier kloksiklusse word die Program Counter (twee bytes) van die Stack teruggespring, die Stack Pointer word met twee verhoog en die I-bit in SREG word ingestel.
AVR-herinneringe
Hierdie afdeling beskryf die verskillende herinneringe in die ATtiny25 / 45/85. Die AVR-argitektuur het twee hoofgeheuespasies, die Data-geheue en die Program-geheuespasie. Daarbenewens het die ATtiny25 / 45/85 'n EEPROM-geheue vir data-stoor. Al drie geheuespasies is lineêr en reëlmatig.
Herprogrammerbare flitsprogramgeheue in die stelsel
Die ATtiny25 / 45/85 bevat 2/4 / 8K grepe Herprogrammeerbare flitsgeheue in die stelsel vir die programopberging. Aangesien alle AVR-instruksies 16 of 32 bisse breed is, is die Flash georganiseer as 1024/2048/4096 x 16.
Die Flash-geheue het 'n uithouvermoë van minstens 10,000 skryf- / uitwis-siklusse. Die ATtiny25 / 45/85 Program Counter (PC) is 10/11/12 bis breed, en spreek dus die 1024/2048/4096 Program geheue plekke aan. “Geheue-program- ming ”op bladsy 147 bevat 'n gedetailleerde beskrywing oor die aflaai van Flash-data met behulp van die SPI-penne.
Konstante tabelle kan binne die hele programgeheue-adresruimte toegeken word (sien die beskrywing van die LPM - Laai programgeheue-instruksie).
Figuur 5-1. Program geheue kaart
SRAM Data geheue
Figuur 5-2 toon aan hoe die ATtiny25 / 45/85 SRAM Memory georganiseer is.
Die onderste 224/352/607 data geheue plekke spreek beide die register aan File, die I/O geheue en die interne data SRAM. Die eerste 32 plekke spreek die Register aan File, die volgende 64 liggings die standaard I/O -geheue, en die laaste 128/256/512 liggings spreek die interne data SRAM aan.
Die vyf verskillende aanspreekmodi vir die data-geheue-dekking: Direk, indirek met verplasing, indirek, indirek met voorafvermindering en indirek met na-toename. In die register File, registers R26 tot R31 bevat die indirekte adresseringswyserregisters.
Die direkte adressering bereik die hele dataruimte.
Die indirekte met verplasing-modus bereik 63 adreslokasies vanaf die basisadres wat deur die Y- of Z-register gegee word.
Wanneer u indirekte adresseringsmodusse met outomatiese voor- en na-toename gebruik, word die adresregisters X, Y en Z afgeneem of verhoog.
Die 32 werkregisters vir algemene doeleindes, 64 I/O -registers en die 128/256/512 grepe interne data SRAM in die ATtiny25/45/85 is almal toeganklik via al hierdie aanspreekmetodes. Die register File word beskryf in “Gen- algemene doelregister File”Op bladsy 10.
Figuur 5-2. Data geheue kaart
Toegang tot datageheue Tye
Hierdie afdeling beskryf die algemene toegang tydsberekening konsepte vir interne geheue toegang. Die interne data SRAM-toegang word uitgevoer in twee clkCPU-siklusse soos beskryf in Figuur 5-3.
Figuur 5-3. On-chip Data SRAM Toegangssiklusse EEPROM Data geheue
Die ATtiny25 / 45/85 bevat 128/256/512 grepe data EEPROM-geheue. Dit is georganiseer as 'n aparte dataruimte waarin enkele grepe gelees en geskryf kan word. Die EEPROM het 'n uithouvermoë van minstens 100,000 skryf / vee siklusse. Die toegang tussen die EEPROM en die SVE word hieronder beskryf, met vermelding van die EEPROM-adresregisters, die EEPROM-dataregister en die EEPROM-kontroleregister. Vir besonderhede, sien “Seriële aflaai” op bladsy 151.
EEPROM Lees / Skryf Toegang
Die EEPROM-toegangsregisters is toeganklik in die I / O-ruimte.
Die skryftoegangstye vir die EEPROM word aangedui Tabel 5-1 op bladsy 21. 'n Selftydfunksie laat die gebruikersagteware egter opspoor wanneer die volgende greep geskryf kan word. As die gebruikerskode instruksies bevat wat die EEPROM skryf, moet sekere voorsorgmaatreëls getref word. In swaar gefiltreerde kragbronne sal VCC waarskynlik stadig styg of daal
Aan/af. Dit veroorsaak dat die toestel 'n geruime tyd op 'n voltage laer as gespesifiseer as minimum vir die klokfrekwensie wat gebruik word. Sien “Voorkoming van EEPROM-korrupsie” op bladsy 19 vir besonderhede oor hoe u probleme in hierdie situasies kan vermy.
Om onbedoelde EEPROM-skryfwerk te voorkom, moet 'n spesifieke skryfprosedure gevolg word. Verwys na 'Atoom Byte-programmering ”op bladsy 17 en “Split byte programmering” op bladsy 17 vir besonderhede hieroor.
Wanneer die EEPROM gelees word, word die SVE vir vier kloksiklusse gestaak voordat die volgende instruksie uitgevoer word. Wanneer die EEPROM geskryf word, word die SVE vir twee kloksiklusse gestaak voordat die volgende instruksie uitgevoer word.
Atomiese byte-programmering
Die gebruik van Atomic Byte-programmering is die eenvoudigste manier. Wanneer 'n byte aan die EEPROM geskryf word, moet die gebruiker die adres in die EEAR-register en data in die EEDR-register skryf. As die EEPMn-bisse nul is, sal die skryf van EEPE (binne vier siklusse nadat die EEMPE geskryf is) die uitvee / skryfbewerking veroorsaak. Beide die uitwis- en skryfsiklus word in een bewerking gedoen en die totale programmeringstyd word gegee Tabel 5-1 op bladsy 21. Die EEPE-bietjie bly ingestel totdat die uitvee- en skryfbewerkings voltooi is. Terwyl die toestel besig is met programmering, is dit nie moontlik om enige ander EEPROM-bewerking te doen nie.
Split Byte Programmering
Dit is moontlik om die uitvee en skryf siklus in twee verskillende bewerkings te verdeel. Dit kan handig wees as die stelsel kort toegangstyd vir 'n beperkte tyd benodig (gewoonlik as die kragtoevoer voltage val). Om vooruitgang te neem tagIn hierdie metode is dit nodig dat die plekke wat geskryf moet word, voor die skryfoperasie uitgevee is. Maar aangesien die vee- en skryfbewerkings verdeel word, is dit moontlik om die vee-operasies uit te voer as die stelsel dit toelaat om tydskritieke bewerkings uit te voer (gewoonlik na opstart).
Vee uit
Om 'n byte uit te wis, moet die adres aan EEAR geskryf word. As die EEPMn-bisse 0b01 is, sal die skryf van die EEPE (binne vier siklusse nadat die EEMPE geskryf is) die uitvee-bewerking veroorsaak (programmeringstyd word in Tabel 5-1 oor bladsy 21). Die EEPE-bit bly ingestel totdat die uitvee-bewerking voltooi is. Terwyl die toestel besig is met programmering, is dit nie moontlik om enige ander EEPROM-bewerking te doen nie.
Skryf
Om 'n plek te skryf, moet die gebruiker die adres in EEAR en die data in EEDR skryf. As die EEPMn-bisse 0b10 is, sal die skryf van die EEPE (binne vier siklusse nadat EEMPE geskryf is) slegs die skryfbewerking veroorsaak (programmeertyd word in Tabel 5-1 op bladsy 21). Die EEPE-bietjie bly ingestel totdat die skryfbewerking voltooi is. As die plek wat geskryf moet word nog nie voor die skryfwerk uitgevee is nie, moet die data wat gestoor word as verlore beskou word. Terwyl die toestel besig is met programmering, is dit nie moontlik om enige ander EEPROM-bewerking te doen nie.
Die gekalibreerde ossillator word gebruik om die toegang tot die EEPROM te tyd. Maak seker dat die oscillatorfrekwensie binne die vereistes is wat beskryf word “OSCCAL - Oscillator Calibration Register” op bladsy 31.
Die volgende kode, bvamples toon een samestelling en een C -funksie om die EEPROM uit te vee, te skryf of te atoom te skryf. Die eksamples neem aan dat onderbrekings beheer word (bv. deur onderbrekings wêreldwyd uit te skakel) sodat geen onderbrekings tydens die uitvoering van hierdie funksies sal plaasvind nie.
Vergaderingskode Example |
EEPROM_skryf:
; Wag totdat die vorige skrywe voltooi is sbic EECR,EEPE rjmp EEPROM_skryf ; Stel die programmeringsmodus in ldi r16, (0<<EEPM1)|(0<<EEPM0) uit EECR, r16 ; Stel adres (r18: r17) in adresregister op uit EEARH, r18 uit EEARL, r17 ; Skryf data (r19) na die data-register uit EEDR, r19 ; Skryf logiese een aan EEMPE sbi EECR,EEMPE ; Begin eeprom skryf deur EEPE in te stel sbi EECR,EEPE ret |
C Kode Example |
nietig EEPROM_write (ongetekende char ucAddress, ongetekende char ucData)
{ /* Wag vir voltooiing van vorige skryf */ while(EECR & (1< ; /* Stel programmeringsmodus in */ EECR = (0 < / * Stel adres- en dataregisters op * / EEAR = ucAddress; EEDR = ucData; /* Skryf logiese een na EEMPE */ EECR | = (1 < / * Begin eeprom skryf deur EEPE in te stel * / EECR | = (1 < } |
Die volgende kode, bvamples toon samestelling en C funksies vir die lees van die EEPROM. Die eksamples neem aan dat onderbrekings beheer word sodat daar geen onderbrekings tydens die uitvoering van hierdie funksies sal plaasvind nie.
Vergaderingskode Example |
EEPROM_read:
; Wag totdat die vorige skrywe voltooi is sbic EECR,EEPE rjmp EEPROM_read ; Stel adres (r18: r17) in adresregister op uit EEARH, r18 uit EEARL, r17 ; Begin eeprom gelees deur EERE te skryf sbi EECR,EERE ; Lees data uit die data-register in r16,EEDR ret |
C Kode Example |
unsigned char EEPROM_read (unsigned char ucAddress)
{ / * Wag tot voltooiing van vorige skryfwerk * / terwyl (EECR & (1 < ; / * Stel adresregister op * / EEAR = ucAddress; /* Begin eeprom-lees deur EERE te skryf */ EECR | = (1 < / * Stuur gegewens uit dataregister * / terugkeer EEDR; } |
Voorkoming van EEPROM-korrupsie
Gedurende periodes van lae VCC kan die EEPROM-data beskadig word omdat die toevoer voltage is te laag vir die SVE en die EEPROM om behoorlik te werk. Hierdie kwessies is dieselfde as vir boordvlakstelsels wat EEPROM gebruik, en dieselfde ontwerpoplossings moet toegepas word.
'N EEPROM -datakorrupsie kan veroorsaak word deur twee situasies waarin die voltage is te laag. Eerstens vereis 'n gewone skryfvolgorde na die EEPROM 'n minimum voltage om korrek te werk. Tweedens kan die SVE self instruksies verkeerd uitvoer as die toevoer voltage is te laag.
EEPROM-datakorrupsie kan maklik vermy word deur hierdie ontwerpaanbeveling te volg:
Hou die AVR RESET aktief (laag) tydens periodes van onvoldoende kragtoevoer voltage. Dit kan gedoen word deur die interne Brown-out Detector (BOD) moontlik te maak. As die opsporingsvlak van die interne BOD nie ooreenstem met die
nodige opsporingsvlak, kan 'n eksterne lae VCC-terugstelbeskermingskring gebruik word. Indien 'n terugstelling plaasvind terwyl 'n skryfbewerking aan die gang is, sal die skryfbewerking voltooi word mits die kragtoevoer voltage is voldoende.
Ek / O geheue
Die I / O-ruimtedefinisie van die ATtiny25 / 45/85 word in getoon “Registreer opsomming” op bladsy 200.
Alle ATtiny25 / 45/85 I / O's en randapparatuur word in die I / O-ruimte geplaas. Toegang tot alle I / O-plekke is deur die LD / LDS / LDD- en ST / STS / STD-instruksies, wat data oordra tussen die 32 algemene werkregisters en die I / O-ruimte. I / O-registers binne die adresbereik 0x00 - 0x1F is direk bit-toeganklik met behulp van die SBI- en CBI-instruksies. In hierdie registers kan die waarde van enkele bisse nagegaan word deur die SBIS- en SBIC-instruksies te gebruik. Verwys na die afdeling vir instruksies vir meer besonderhede. Wanneer u die I / O-spesifieke opdragte IN en OUT gebruik, moet die I / O-adresse 0x00 - 0x3F gebruik word. By die aanspreek van I / O-registers as dataruimte met behulp van LD- en ST-instruksies, moet 0x20 by hierdie adresse gevoeg word.
Vir versoenbaarheid met toekomstige toestelle, moet gereserveerde stukkies op nul geskryf word as dit verkry word. Gereserveerde I / O-geheue-adresse moet nooit geskryf word nie.
Sommige van die statusvlae word skoongemaak deur 'n logiese een aan hulle te skryf. Let daarop dat die CBI- en SBI-instruksies slegs op die gespesifiseerde bit sal werk, en dat dit dus gebruik kan word op registers wat sulke statusvlae bevat. Die CBI- en SBI-instruksies werk slegs met registers 0x00 tot 0x1F.
Die I / O- en randapparatuurbeheerregisters word in latere afdelings uiteengesit.
Registerbeskrywing
EEARH - EEPROM-adresregister
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1F | – | – | – | – | – | – | – | OOOR8 | AARDE |
Lees/Skryf | R | R | R | R | R | R | R | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | X/0 |
Bits 7: 1 - Res: Voorbehou Bits
Hierdie stukkies is gereserveer vir toekomstige gebruik en sal altyd as nul gelees word.
Bits 0 - EEAR8: EEPROM-adres
Dit is die belangrikste EEPROM-adresstuk van ATtiny85. By toestelle met minder EEPROM, dit wil sê ATtiny25 / ATtiny45, is hierdie bietjie voorbehou en sal dit altyd nul lees. Die aanvanklike waarde van die EEPROM-adresregister (EEAR) is ongedefinieerd en 'n behoorlike waarde moet dus geskryf word voordat toegang tot die EEPROM verkry word.
EEARL - EEPROM-adresregister
Bietjie
0x1E | OOOR7 | OOOR6 | OOOR5 | OOOR4 | OOOR3 | OOOR2 | OOOR1 | OOOR0 | OOR |
Agter / Skryf | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Aanvangswaarde | X | X | X | X | X | X | X | X |
Bit 7 - EEAR7: EEPROM-adres
Dit is die belangrikste EEPROM-adresstuk van ATtiny45. By toestelle met minder EEPROM, dit wil sê ATtiny25, is hierdie bietjie voorbehou en sal dit altyd nul lees. Die aanvanklike waarde van die EEPROM-adresregister (EEAR) is ongedefinieerd en 'n behoorlike waarde moet dus geskryf word voordat toegang tot die EEPROM verkry word.
Bits 6: 0 - EEAR [6: 0]: EEPROM-adres
Dit is die (lae) stukkies van die EEPROM-adresregister. Die EEPROM-data-grepe word lineêr aangespreek in die reeks 0… (128/256 / 512-1). Die aanvanklike waarde van EEAR is ongedefinieerd en 'n regte waarde moet dus geskryf word voordat toegang tot die EEPROM verkry kan word.
EEDR - EEPROM Data Register
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x1d | EEDR7 | EEDR6 | EEDR5 | EEDR4 | EEDR3 | EEDR2 | EEDR1 | EEDR0 | EEDR |
Lees/Skryf | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Vir die EEPROM-skryfbewerking bevat die EEDR-register die data wat aan die EEPROM geskryf moet word in die adres wat deur die EEAR-register gegee word. Vir die EEPROM-leesbewerking bevat die EEDR die data wat uit die gelees is
EEPROM by die adres wat deur EEAR gegee word.
5.5.4 EEGR - EEPROM-kontroleregister |
|||||||||
Bit 7 6 5 | 4 | 3 | 2 | 1 | 0 | ||||
0x1C – | – | EEPM1 | EEPM0 | EERIE | EEMPE | EEPE | EERE | EEGR | |
Lees / Skryf R R R / W | R/W | R/W | R/W | R/W | R/W | ||||
Aanvanklike waarde 0 0 X | X | 0 | 0 | X | 0 |
Bit 7 - Res: voorbehou bit
Hierdie bietjie is gereserveer vir toekomstige gebruik en sal altyd gelees word as 0 in ATtiny25 / 45/85. Skryf hierdie bietjie altyd op nul vir versoenbaarheid met toekomstige AVR-toestelle. Maskeer hierdie bietjie na u gelees het.
Bit 6 - Res: voorbehou bit
Hierdie bietjie is gereserveer in die ATtiny25 / 45/85 en sal altyd as nul gelees word.
Bits 5: 4 - EEPM [1: 0]: Bits van EEPROM-programmeermodus
Die instelling van bits van die EEPROM-programmeermodus definieer watter programmeringsaksie wat geaktiveer sal word tydens die skryf van EEPE. Dit is moontlik om data in een atoombewerking te programmeer (die ou waarde uit te wis en die nuwe waarde te programmeer) of om die Erase en Write-bewerkings in twee verskillende bewerkings te verdeel. Die programmeringstye vir die verskillende modusse word in getoon Tabel 5-1. Terwyl EEPE ingestel is, sal enige skrywe aan EEPMn geïgnoreer word. Tydens die reset sal die EEPMn-stukkies teruggestel word na 0b00, tensy die EEPROM besig is met programmering.
Tabel 5-1. EEPROM Mode Bits
EEPM1 | EEPM0 | Programmeringstyd | Operasie |
0 | 0 | 3.4 ms | Vee uit en skryf in een bewerking (Atoomwerking) |
0 | 1 | 1.8 ms | Vee slegs uit |
1 | 0 | 1.8 ms | Skryf slegs |
1 | 1 | – | Gereserveer vir toekomstige gebruik |
Bit 3 - EERIE: EEPROM Ready Interrupt Enable
Deur EERIE na een te skryf, word die EEPROM Ready Interrupt moontlik gemaak as die I-bit in SREG ingestel is. Deur EERIE tot nul te skryf, skakel die onderbreking uit. Die EEPROM Ready Interrupt genereer 'n konstante onderbreking wanneer die nie-vlugtige geheue gereed is vir programmering.
Bit 2 - EEMPE: EEPROM-hoofprogram inskakel
Die EEMPE-bit bepaal of die skryf van EEPE na een van toepassing is al dan nie.
As EEMPE ingestel is, sal die EEPROM op die geselekteerde adres geprogrammeer word as u die EEPE binne vier kloksiklusse instel. As EEMPE nul is, sal die instelling van EEPE geen effek hê nie. Wanneer EEMPE deur sagteware aan een geskryf is, maak die hardeware die bit na vier kloksiklusse tot nul.
Bit 1 - EEPE: EEPROM-program inskakel
Die EEPROM Program Enable Signal EEPE is die programmeerbare sein vir die EEPROM. Wanneer EEPE geskryf word, sal die EEPROM geprogrammeer word volgens die instelling van EEPMn bits. Die EEMPE-bit moet aan een geskryf word voordat 'n logiese bit aan EEPE geskryf word, anders vind geen EEPROM-skryf plaas nie. Wanneer die skryftoegangstyd verstreke is, word die EEPE-bietjie deur hardeware skoongemaak. Wanneer EEPE ingestel is, word die SVE vir twee siklusse gestaak voordat die volgende instruksie uitgevoer word.
Bit 0 - EERE: EEPROM Read Enable
Die EEPROM Read Enable Signal - EERE - is die leesstrook vir die EEPROM. Wanneer die regte adres in die EEAR-register is opgestel, moet die EERE-bit aan een geskryf word om die geleesde EEPROM te aktiveer. Die EEPROM-leestoegang neem een instruksie, en die gevraagde data is onmiddellik beskikbaar. Wanneer die EEPROM gelees word, word die SVE vir vier siklusse gestaak voordat die volgende instruksie uitgevoer word. Die gebruiker moet die EEPE-bietjie peil voordat hy met die leesbewerking begin. As 'n skryfbewerking aan die gang is, is dit nie moontlik om die EEPROM te lees of om die EEAR-register te verander nie.
Stelselklok en klokopsies
Clock Systems en die verspreiding daarvan
SVE Klok
Die CPU -klok word gestuur na dele van die stelsel wat verband hou met die werking van die AVR -kern. BvampLes van sulke modules is die Algemene Doelregister File, die statusregister en die data -geheue wat die stapelwyser bevat. Die stop van die CPU -klok belemmer die kern om algemene bewerkings en berekeninge uit te voer.
I / O-klok - clkI / O
Die I / O-klok word deur die meerderheid van die I / O-modules gebruik, soos Timer / Counter. Die I / O-klok word ook gebruik deur die module External Interrupt, maar let op dat sommige eksterne onderbrekings deur asynchrone logika opgespoor word, sodat sulke onderbrekings opgespoor kan word, selfs al word die I / O-klok gestaak.
Flitsklok - clkFLASH
Die Flash-klok beheer die werking van die Flash-koppelvlak. Die Flash-klok is gewoonlik gelyktydig aktief met die CPU-klok.
ADC-klok - clkADC
Die ADC is voorsien van 'n toegewyde klokdomein. Hierdeur kan die SVE- en I / O-klokke gestop word om geraas wat deur digitale stroombane gegenereer word, te verminder. Dit gee meer akkurate ADC-omskakelingsresultate.
Interne PLL vir 'n vinnige periferiese klokgenerasie - clkPCK
Die interne PLL in ATtiny25 / 45/85 genereer 'n klokfrekwensie wat vermenigvuldig word met 'n broninvoer. Standaard gebruik die PLL die uitset van die interne, 8 MHz RC-ossillator as bron. Alternatiewelik, as bit LSM van PLLCSR ingestel is, sal PLL die uitset van die RC-ossillator gebruik gedeel deur twee. Dus is die uitset van die PLL, die vinnige randklok 8.0 MHz. Die vinnige randklok, of 'n klok wat daaruit voorgeskal is, kan gekies word as die klokbron vir Timer / Counter64 of as 'n stelselklok. Sien Figuur 6-2. Die frekwensie van die vinnige perifere klok word deur twee gedeel wanneer LSM van PLLCSR ingestel is, wat lei tot 'n klokfrekwensie van 32 MHz. Let daarop dat LSM nie ingestel kan word as PLLCLK as stelselklok gebruik word nie.
Figuur 6-2. PCK-klokstelsel.
Die PLL is op die RC-ossillator geblokkeer en die aanpassing van die RC-ossillator via die OSCCAL-register sal die vinnige randklok terselfdertyd verstel. Alhoewel die RC-ossillator egter na 'n hoër frekwensie as 8 MHz geneem word, word die vinnige perifere klokfrekwensie versadig op 85 MHz (slegste geval) en bly dit op die maksimum frekwensie. Daar moet op gelet word dat die PLL in hierdie geval nie langer met die RC-ossillatorklok gesluit is nie. Daarom word aanbeveel om die OSCCAL-aanpassings nie na 'n hoër frekwensie as 8 MHz te neem nie, om die PLL in die regte werkbereik te hou.
Die interne PLL is geaktiveer wanneer:
Die PLLE-bit in die register PLLCSR is ingestel.
Die CKSEL-lont is op '0001' geprogrammeer.
Die CKSEL-lont is op '0011' geprogrammeer.
Die PLLCSR-bis PLOCK is ingestel wanneer PLL gesluit is. Beide interne RC-ossillator en PLL is afgeskakel in afskakel- en bystand-slaapmodusse.
Interne PLL in ATtiny15-verenigbaarheidsmodus
Aangesien ATtiny25 / 45/85 'n migrasietoestel vir ATtiny15-gebruikers is, is daar 'n ATtiny15-versoenbaarheidsmodus vir agterversoenbaarheid. Die ATtiny15-verenigbaarheidsmodus word gekies deur die CKSEL-versmeltings op '0011' te programmeer.
In die ATtiny15-verenigbaarheidsmodus word die frekwensie van die interne RC-ossillator tot 6.4 MHz gekalibreer en die vermenigvuldigingsfaktor van die PLL op 4x gestel. Sien Figuur 6-3. Met hierdie aanpassings is die klokstelsel ATtiny15-versoenbaar en die gevolglike vinnige randhorlosie het 'n frekwensie van 25.6 MHz (dieselfde as in ATtiny15).
Figuur 6-3. PCK-klokstelsel in ATtiny15-versoenbaarheidsmodus.
Klokbronne
Die toestel het die volgende klokbron-opsies, wat gekies kan word deur Flash Fuse-stukkies soos hieronder getoon. Die klok vanaf die geselekteerde bron word ingevoer na die AVR-klokopwekker en na die toepaslike modules gestuur.
Tabel 6-1. Toestelklokopsies Kies
Toestelklokopsie | CKSEL[3:0](1) |
Eksterne horlosie (sien bladsy 26) | 0000 |
Hoëfrekwensie PLL-horlosie (sien bladsy 26) | 0001 |
Gekalibreerde interne ossillator (sien bladsy 27) | 0010(2) |
Gekalibreerde interne ossillator (sien bladsy 27) | 0011(3) |
Interne 128 kHz ossillator (sien bladsy 28) | 0100 |
Lae-frekwensie kristal ossillator (sien bladsy 29) | 0110 |
Kristal ossillator / keramiek resonator (sien bladsy 29) | 1000 – 1111 |
Voorbehou | 0101, 0111 |
Vir alle sekerings beteken "1" ongeprogrammeer, terwyl "0" geprogrammeer is.
Die toestel word gestuur met hierdie opsie gekies.
Dit sal die ATtiny15-verenigingsmodus kies, waar die stelselklok deur vier gedeel word, wat 'n 1.6 MHz-klokfrekwensie tot gevolg het. Vir meer inligting, sien “Gekalibreerde interne ossillator” op bladsy 27.
Die verskillende keuses vir elke klokopsie word in die volgende afdelings gegee. Wanneer die SVE wakker word vanaf Power-down, word die geselekteerde klokbron gebruik om die opstart te laat tyd, en dit verseker stabiele werking van die oscillator voordat die instruksie uitgevoer word. Wanneer die SVE begin met die herstel, is daar 'n ekstra vertraging wat die krag 'n stabiele vlak kan bereik voordat die normale werking begin. Die Watchdog Oscillator word gebruik vir die tydsberekening van hierdie intydse deel van die opstarttyd. Die aantal WDT-ossillatorsiklusse wat vir elke time-out gebruik word, word in getoon Tabel 6-2.
Tabel 6-2. Aantal Waghond-ossillatorsiklusse
Tik time-out | Aantal siklusse |
4 ms | 512 |
64 ms | 8K (8,192 XNUMX) |
Eksterne horlosie
Om die toestel vanaf 'n eksterne klokbron te bestuur, moet CLKI bestuur word soos aangedui in Figuur 6-4. Om die toestel op 'n eksterne horlosie te laat werk, moet die CKSEL-sekerings op "00" geprogrammeer word.
Figuur 6-4. Eksterne klokaandrywingkonfigurasie
Wanneer hierdie klokbron gekies word, word die opstarttye bepaal deur die SUT-sekerings soos aangedui in Tabel 6-3.
Tabel 6-3. Begintye vir die keuse van die eksterne horlosie
SUT[1:0] | Opstarttyd vanaf afskakel | Bykomende vertraging by herstel | Aanbevole gebruik |
00 | 6 KK | 14CK | BOD geaktiveer |
01 | 6 KK | 14KK + 4 ms | Vinnig stygende krag |
10 | 6 KK | 14KK + 64 ms | Stadig stygende krag |
11 | Voorbehou |
Wanneer u 'n eksterne klok aanwend, is dit nodig om skielike veranderings in die toegepaste klokfrekwensie te vermy om die MCU stabiel te laat werk. 'N Variasie in frekwensie van meer as 2% van die een kloksiklus na die volgende kan lei tot onvoorspelbare gedrag. Dit is nodig om te verseker dat die MCU in Reset gehou word tydens sulke veranderings in die klokfrekwensie.
Let daarop dat die voorverkoop van die stelselklok gebruik kan word om tydsveranderings van die interne klokfrekwensie te implementeer, terwyl die stabiliteit steeds stabiel is. Verwys na “Stelselklokvoorkalker” op bladsy 31 vir besonderhede.
Hoëfrekwensie PLL-horlosie
Daar is 'n interne PLL wat die nominale 64 MHz-kloksnelheid bied wat op die RC-oscillator geblokkeer is vir die gebruik van die perifere timer / teller1 en vir die stelselklokbron. Deur die CKSEL-versmeltings na '0001' te programmeer, word dit gedeel deur vier soos getoon in Tabel 6-4.
Tabel 6-4. Hoëfrekwensie PLL-klokbedryfsmodusse
CKSEL[3:0] | Nominale frekwensie |
0001 | 16 MHz |
Wanneer hierdie klokbron gekies word, word die aanvangstye bepaal deur die SUT-sekerings soos aangedui in Tabel 6-5.
Tabel 6-5. Begintye vir die hoëfrekwensie PLL-klok
SUT[1:0] | Aanvangstyd vanaf afskakel | Bykomende vertraging van aanskakel-terugstelling (VCC = 5.0V) | Aanbevole gebruik |
00 | 14CK + 1K (1024) CK + 4 ms | 4 ms | BOD geaktiveer |
Tabel 6-5. Begintye vir die hoëfrekwensie PLL-klok
SUT[1:0] | Aanvangstyd vanaf afskakel | Bykomende vertraging van aanskakel-terugstelling (VCC = 5.0V) | Aanbevole gebruik |
01 | 14CK + 16K (16384) CK + 4 ms | 4 ms | Vinnig stygende krag |
10 | 14CK + 1K (1024) CK + 64 ms | 4 ms | Stadig stygende krag |
11 | 14CK + 16K (16384) CK + 64 ms | 4 ms | Stadig stygende krag |
Gekalibreerde interne ossillator
Die interne RC -ossillator bied standaard 'n geskatte klok van 8.0 MHz. Hoewel voltage en temperatuurafhanklik, kan hierdie klok baie akkuraat deur die gebruiker gekalibreer word. Sien “Gekalibreerde interne RC-ossillator-akku- racy ”op bladsy 164 en “Interne ossillatorsnelheid” op bladsy 192 vir meer besonderhede. Die toestel word gestuur met die CKDIV8 Fuse geprogrammeer. Sien “Stelselklokvoorkalker” op bladsy 31 vir meer besonderhede.
Hierdie klok kan gekies word as die stelselklok deur die CKSEL-versmeltings te programmeer soos getoon in Tabel 6-6 op bladsy
27. As dit gekies word, werk dit sonder eksterne komponente. Tydens herstel laai hardeware die voorafgeprogrammeerde kalibrasiewaarde in die OSCCAL-register en kalibreer sodoende die RC-ossillator outomaties. Die akkuraatheid van hierdie kalibrasie word getoon as Fabriekskalibrasie in Tabel 21-2 op bladsy 164.
Deur die OSCCAL-register van SW te verander, sien “OSCCAL - Oscillator Calibration Register” op bladsy 31, is dit moontlik om 'n hoër kalibrasie akkuraatheid te kry as deur die fabrieks kalibrasie te gebruik. Die akkuraatheid van hierdie kalibrasie word getoon as Gebruikerskalibrasie in Tabel 21-2 op bladsy 164.
Wanneer hierdie oscillator as die chipklok gebruik word, sal die Watchdog Oscillator steeds gebruik word vir die Watchdog Timer en vir die Reset Time-out. Raadpleeg die afdeling vir meer inligting oor die voorafgeprogrammeerde kalibrasiewaarde “Kali- brasie Bytes ”op bladsy 150.
Die interne ossillator kan ook ingestel word om 'n 6.4 MHz-klok te bied deur CKSEL-sekerings na "0011" te skryf, soos getoon in Tabel 6-6 hieronder. Daar word na hierdie instelling verwys as die ATtiny15-versoenbaarheidsmodus en is bedoel om 'n gekalibreerde klokbron op 6.4 MHz te bied, soos in ATtiny15. In die ATtiny15-versoenbaarheidsmodus gebruik die PLL die interne ossillator wat op 6.4 MHz werk om 'n 25.6 MHz perifere kloksein vir die timer / teller1 te genereer (sien “8-bis-timer / teller1 in ATtiny15-modus ”op bladsy 95). Let daarop dat die 6.4 MHz-kloksein in hierdie modus altyd deur vier gedeel word, wat 'n 1.6 MHz-stelselklok bied.
Tabel 6-6. Interne gekalibreerde RC-ossillator-bedryfsmodusse
CKSEL[3:0] | Nominale frekwensie |
0010(1) | 8.0 MHz |
0011(2) | 6.4 MHz |
Die toestel word gestuur met hierdie opsie gekies.
Hierdie instelling kies die ATtiny15-verenigingsmodus, waar die stelselklok deur vier gedeel word, wat 'n 1.6 MHz-klokfrekwensie tot gevolg het.
Wanneer die gekalibreerde interne oscillator van 8 MHz as klokbron gekies word, word die opstarttye bepaal deur die SUT-sekerings soos aangedui in Tabel 6-7 hieronder.
Tabel 6-7. Begintye vir interne gekalibreerde RC-ossillatorklok
SUT[1:0] | Opstarttyd vanaf afskakel | Bykomende vertraging vanaf terugstelling (VCC = 5.0V) | Aanbevole gebruik |
00 | 6 KK | 14CK(1) | BOD geaktiveer |
01 | 6 KK | 14KK + 4 ms | Vinnig stygende krag |
10(2) | 6 KK | 14KK + 64 ms | Stadig stygende krag |
11 | Voorbehou |
1. As die RSTDISBL-lont geprogrammeer is, sal hierdie opstarttyd verhoog word tot 14 CK + 4 ms om te verseker dat die programmeermodus ingeskakel kan word.
2. Die toestel word gestuur met hierdie opsie gekies.
In opstarttye van die ATtiny15-versoenbaarheidsmodus word bepaal deur SUT-sekerings soos aangedui in Tabel 6-8 hieronder.
Tabel 6-8. Opstarttye vir interne gekalibreerde RC-ossillatorklok (in ATtiny15-modus)
SUT[1:0] | Opstarttyd vanaf afskakel | Bykomende vertraging vanaf terugstelling (VCC = 5.0V) | Aanbevole gebruik |
00 | 6 KK | 14KK + 64 ms | |
01 | 6 KK | 14KK + 64 ms | |
10 | 6 KK | 14KK + 4 ms | |
11 | 1 KK | 14CK(1) |
Let wel: As die RSTDISBL lont geprogrammeer is, sal hierdie aanskakeltyd na 14CK + 4 ms verhoog word om te verseker dat programmeringsmodus betree kan word.
Samevattend kan meer inligting oor ATtiny15-verenigingsmodus in afdelings gevind word “Poort B (PB5: PB0)” aan bladsy 2, “Interne PLL in ATtiny15-versoenbaarheidsmodus” op bladsy 24, "8-bit timer / teller1 in ATtiny15-modus" aan bladsy 95, “Beperkings van debugWIRE” op bladsy 140, “Kalibrasiebyte” op bladsy 150 en in tabel 'Klokvoorsteller Kies ”op bladsy 33.
Interne 128 kHz ossillator
Die 128 kHz interne ossillator is 'n lae krag ossillator wat 'n horlosie van 128 kHz bied. Die frekwensie is nominaal by 3V en 25°C. Hierdie horlosie kan as die stelselklok gekies word deur die CKSEL Sekerings na “0100” te programmeer.
Wanneer hierdie klokbron gekies word, word die opstarttye bepaal deur die SUT-sekerings soos aangedui in Tabel 6-9.
Tabel 6-9. Opstarttye vir die 128 kHz interne ossillator
SUT[1:0] | Opstarttyd vanaf afskakel | Bykomende vertraging by herstel | Aanbevole gebruik |
00 | 6 KK | 14CK(1) | BOD geaktiveer |
01 | 6 KK | 14KK + 4 ms | Vinnig stygende krag |
10 | 6 KK | 14KK + 64 ms | Stadig stygende krag |
11 | Voorbehou |
Let wel: As die RSTDISBL lont geprogrammeer is, sal hierdie aanskakeltyd na 14CK + 4 ms verhoog word om te verseker dat programmeringsmodus betree kan word.
Lae-frekwensie kristal ossillator
Om 'n 32.768 kHz horlosiekristal as die klokbron vir die toestel te gebruik, moet die lae-frekwensie kristal ossillator gekies word deur CKSEL smelt op '0110' te stel. Die kristal moet verbind word soos getoon in Figuur 6-5. Raadpleeg die vervaardiger se gegewensblad om die geskikte laaikapasiteit vir 'n 32.768 kHz-kristal te bepaal.
Wanneer hierdie ossillator gekies word, word die aanvangstye bepaal deur die SUT-sekerings soos aangedui in Tabel 6-10.
Tabel 6-10. Opstarttye vir die Lae Frekwensie Kristal Ossillator Klok Seleksie
SUT[1:0] | Aanvangstyd vanaf afskakel | Bykomende vertraging vanaf terugstelling (VCC = 5.0V) | Aanbevole gebruik |
00 | 1K (1024) CK(1) | 4 ms | Vinnig stygende krag of BOD geaktiveer |
01 | 1K (1024) CK(1) | 64 ms | Stadig stygende krag |
10 | 32K (32768) CK | 64 ms | Stabiele frekwensie tydens aanvang |
11 | Voorbehou |
Let wel: Hierdie opsies moet slegs gebruik word as frekwensiestabiliteit by opstart nie belangrik is nie.
Die lae-frekwensie kristal ossillator bied 'n interne laaikapasiteit, sien Tabel 6-11 by elke TOSC-pen.
Tabel 6-11. Kapasitansie van lae-frekwensie kristal ossillator
Toestel | 32 kHz Osc. Tik | Dop (Xtal1 / Tosc1) | Dop (Xtal2 / Tosc2) |
ATtiny25 / 45/85 | Stelsel Osc. | 16 pF | 6 pF |
Kristal ossillator / keramiek resonator
XTAL1 en XTAL2 is onderskeidelik insette en afvoer van 'n omkering amplewendiger wat gekonfigureer kan word vir gebruik as 'n on-chip-ossillator, soos aangedui in Figuur 6-5. U kan 'n kwartskristal of 'n keramiekresonator gebruik.
C1 en C2 moet altyd gelyk wees vir beide kristalle en resonators. Die optimale waarde van die kapasitors hang af van die kristal of resonator wat gebruik word, die hoeveelheid verdwaalde kapasitansie en die elektromagnetiese geraas van die omgewing. Sommige aanvanklike riglyne vir die keuse van kapasitors vir gebruik met kristalle word in gegee Tabel 6-12 hieronder. Vir keramiekresonators moet die waardes van die kondensator wat deur die vervaardiger gegee word, gebruik word.
Tabel 6-12. Crystal Ossillator Bedryfsmodusse
CKSEL[3:1] | Frekwensie bereik (MHz) | Aanbevole reeks vir kondensators C1 en C2 vir gebruik met kristalle (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 |
Notas: Hierdie opsie moet nie met kristalle gebruik word nie, slegs met keramiekresonators.
Die oscillator kan in drie verskillende modusse werk, elk geskik vir 'n spesifieke frekwensiebereik. Die werksmodus word gekies deur die versmeltings CKSEL [3: 1] soos getoon in Tabel 6-12.
Die CKSEL0-lont saam met die SUT [1: 0] -sekerings kies die opstarttye soos getoon in Tabel 6-13.
Tabel 6-13. Begintye vir die keuse van die kristalossillatorklok
CKSEL0 | SUT[1:0] | Opstarttyd vanaf afskakel | Bykomende vertraging by herstel | Aanbevole gebruik |
0 | 00 | 258 KK(1) | 14KK + 4 ms | Keramiese resonator, vinnig stygende krag |
0 | 01 | 258 KK(1) | 14KK + 64 ms | Keramiese resonator, stadig stygende krag |
0 | 10 | 1K (1024) CK(2) | 14CK | Keramiekresonator, BOD geaktiveer |
0 | 11 | 1K (1024) CK(2) | 14KK + 4 ms | Keramiese resonator, vinnig stygende krag |
1 | 00 | 1K (1024) CK(2) | 14KK + 64 ms | Keramiese resonator, stadig stygende krag |
1 | 01 | 16K (16384) CK | 14CK | Crystal Oscillator, BOD geaktiveer |
1 | 10 | 16K (16384) CK | 14KK + 4 ms | Kristal ossillator, vinnig stygende krag |
1 | 11 | 16K (16384) CK | 14KK + 64 ms | Kristal ossillator, stadig stygende krag |
Notas
Hierdie opsies moet slegs gebruik word as dit nie naby die maksimum frekwensie van die toestel werk nie, en slegs as frekwensie-stabiliteit by die opstart nie belangrik is vir die toepassing nie. Hierdie opsies is nie geskik vir kristalle nie.
Hierdie opsies is bedoel vir gebruik saam met keramiekresonators en verseker die stabiliteit van die frekwensie tydens die opstart. Dit kan ook met kristalle gebruik word as dit nie naby die maksimum frekwensie van die toestel werk nie, en as frekwensie-stabiliteit by die opstart nie belangrik is vir die toepassing nie.
Standaard klokbron
Die toestel word gestuur met CKSEL = “0010”, SUT = “10” en CKDIV8 geprogrammeer. Die standaard klokbroninstelling is dus die interne RC-ossillator wat op 8 MHz werk met die langste opstarttyd en 'n aanvanklike voorskaal van die stelselklok van 8, wat lei tot 'n 1.0 MHz stelselklok. Hierdie standaardinstelling verseker dat alle gebruikers die gewenste klokbroninstelling kan maak met 'n stelsel in die stelsel of 'n hoë volumetage programmeerder.
Stelselklokvoorsteller
Die ATtiny25 / 45/85-stelselklok kan verdeel word deur die “CLKPR - Clock Prescale Register” op bladsy 32. Hierdie kenmerk kan gebruik word om kragverbruik te verminder wanneer die vereiste vir verwerkingskrag laag is. Dit kan met alle klokbronopsies gebruik word, en dit sal die klokfrekwensie van die SVE en alle sinchrone randapparatuur beïnvloed. clkI/O, clkADC, clkCPU en clkFLASH word gedeel deur 'n faktor soos getoon in Tabel 6-15 op bladsy 33.
Skakeltyd
Wanneer u tussen die voorskakelaarinstellings wissel, verseker die stelselklokvoorkalker dat daar geen foute in die klokstelsel voorkom nie en dat geen tussenfrekwensie hoër is as die klokfrekwensie wat ooreenstem met die vorige instelling nie, en ook nie die klokfrekwensie wat ooreenstem met die nuwe instelling nie.
Die rimpelteller waarmee die voorskakelaar geïmplementeer word, werk teen die frekwensie van die onverdeelde horlosie, wat vinniger kan wees as die klokfrekwensie van die SVE. Daarom is dit nie moontlik om die toestand van die voorskaler te bepaal nie, selfs al sou dit leesbaar wees, en die presiese tyd wat dit neem om van een klokafdeling na 'n ander oor te skakel, kan nie presies voorspel word nie.
Vandat die CLKPS-waardes geskryf word, duur dit tussen T1 + T2 en T1 + 2 * T2 voordat die nuwe klokfrekwensie aktief is. In hierdie interval word 2 aktiewe klokrande geproduseer. Hier is T1 die vorige klokperiode, en T2 is die periode wat ooreenstem met die nuwe voorskakelaarinstelling.
Klok-uitvoerbuffer
Die toestel kan die stelselklok op die CLKO-pen (as dit nie as XTAL2-pen gebruik word nie) uitvoer. Om die uitset moontlik te maak, moet die CKOUT-lont geprogrammeer word. Hierdie modus is geskik as die skyfklok gebruik word om ander stroombane op die stelsel aan te dryf. Let daarop dat die horlosie nie tydens die reset sal plaasvind nie en dat die normale werking van die I / O-pen oorgedra word wanneer die lont geprogrammeer word. Interne RC-ossillator, WDT-oscillator, PLL en eksterne klok (CLKI) kan gekies word wanneer die klok op CLKO uitgevoer word. Kristal ossillators (XTAL1, XTAL2) kan nie gebruik word vir klokuitset op CLKO nie. As die stelselklokvoorkalker gebruik word, is dit die verdeelde stelselklok wat uitgevoer word.
Registerbeskrywing
OSCCAL - Ossillator-kalibrasieregister
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x31 | CAL7 | CAL6 | CAL5 | CAL4 | CAL3 | CAL2 | CAL1 | CAL0 | OSCCAL |
Lees/Skryf | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
Bits 7: 0 - CAL [7: 0]: Ossillator-kalibrasiewaarde
Die oscillator-kalibrasieregister word gebruik om die gekalibreerde interne RC-oscillator af te sny om prosesvariasies van die ossillatorfrekwensie te verwyder. 'N Voorgeprogrammeerde kalibrasiewaarde word outomaties in die register geskryf tydens die herstel van die skyfie, wat die fabrieksgekalibreerde frekwensie gee soos gespesifiseer in Tabel 21-2 op bladsy 164. Die toepassingsagteware kan hierdie register opstel om die ossillatorfrekwensie te verander. Die ossillator kan gekalibreer word na frekwensies soos gespesifiseer in Tabel 21-2 op bladsy 164. Kalibrasie buite die reeks word nie gewaarborg nie.
Let daarop dat hierdie ossillator gebruik word om toegang tot EEPROM en Flash te skryf, en hierdie skryftye sal daarvolgens beïnvloed word. As die EEPROM of Flash geskryf is, moet u nie meer as 8.8 MHz kalibreer nie. Andersins kan die EEPROM- of Flash-skrywe misluk.
Die CAL7-bietjie bepaal die werking van die ossillator. As u hierdie bit op 0 stel, kry u die laagste frekwensiebereik. As u hierdie bit op 1 stel, word die hoogste frekwensie bereik. Die twee frekwensiegebiede oorvleuel, met ander woorde 'n instelling van OSCCAL = 0x7F gee 'n hoër frekwensie as OSCCAL = 0x80.
Die CAL [6: 0] bisse word gebruik om die frekwensie binne die geselekteerde reeks af te stel. 'N Instelling van 0x00 gee die laagste frekwensie in daardie reeks, en 'n instelling van 0x7F gee die hoogste frekwensie in die reeks.
Om 'n stabiele werking van die MCU te verseker, moet die kalibrasiewaarde klein verander word. 'N Variasie in frekwensie van meer as 2% van die een siklus na die volgende kan lei tot onvoorspelbare gedrag. Veranderings in OSCCAL mag nie meer as 0x20 vir elke kalibrasie wees nie. Dit is nodig om te verseker dat die MCU in Reset gehou word tydens sulke veranderings in die klokfrekwensie
Tabel 6-14. Interne RC-ossillator frekwensiereeks
OSCCAL Waarde | Tipies laagste frekwensie met betrekking tot nominale frekwensie | Tipies Hoogste frekwensie met betrekking tot nominale frekwensie |
0x00 | 50% | 100% |
0x3F | 75% | 150% |
0x7F | 100% | 200% |
CLKPR - Klokvoorskaalregister
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x26 | CLKPCE | – | – | – | CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | CLKPR |
Lees/Skryf | R/W | R | R | R | R/W | R/W | R/W | R/W |
Aanvanklike waarde 0 0 0 0 Sien beskrywing van die bietjie
Bit 7 - CLKPCE: Verandering van klokvoorskakelaar inskakel
Die CLKPCE-bit moet volgens logiese een geskryf word om die CLKPS-bisse te verander. Die CLKPCE-bis word eers opgedateer as die ander bisse in CLKPR gelyktydig tot nul geskryf word. CLKPCE word skoongemaak deur hardeware vier siklusse nadat dit geskryf is of wanneer die CLKPS-bisse geskryf is. Die herskryf van die CLKPCE-bietjie binne hierdie time-out-periode verleng nie die time-out-periode nie, en ook nie die CLKPCE-bit nie.
Bits 6: 4 - Res: Voorbehou Bits
Hierdie stukkies is gereserveerde stukkies in die ATtiny25 / 45/85 en sal altyd as nul gelees word.
Bits 3: 0 - CLKPS [3: 0]: Clock Prescaler Kies Bits 3 - 0
Hierdie stukkies definieer die verdelingsfaktor tussen die gekose klokbron en die interne stelselklok. Hierdie stukkies kan tydens die tyd geskryf word om die klokfrekwensie te varieer volgens die toepassingsvereistes. Aangesien die verdeler die hoofklok-invoer na die MCU deel, word die snelheid van alle sinkroniese randapparatuur verlaag wanneer 'n verdelingsfaktor gebruik word. Die delingsfaktore word in gegee Tabel 6-15.
Om onbedoelde veranderinge van die klokfrekwensie te voorkom, moet 'n spesiale skryfprosedure gevolg word om die CLKPS-bis te verander:
Skryf die Clock Prescaler Change Enable (CLKPCE) bit na een en alle ander bits in CLKPR op nul.
Skryf die gewenste waarde binne vier siklusse na CLKPS terwyl u 'n nul na CLKPCE skryf.
Onderbrekings moet uitgeskakel word as u die instelling van die voorskaler verander, om seker te maak dat die skryfprosedure nie onderbreek word nie.
Die CKDIV8 Fuse bepaal die aanvanklike waarde van die CLKPS bisse. As CKDIV8 ongeprogrammeer is, sal die CLKPS bisse teruggestel word na "0000". As CKDIV8 geprogrammeer is, word CLKPS-bisse teruggestel na "0011", wat 'n delingsfaktor van agt gee by opstart. Hierdie kenmerk moet gebruik word as die gekose klokbron 'n hoër frekwensie het as die maksimum frekwensie van die toestel by die huidige bedryfstoestande. Let daarop dat enige waarde na die CLKPS-bisse geskryf kan word, ongeag die CKDIV8 Fuse-instelling. Die Toepassingsagteware moet verseker dat 'n voldoende verdelingsfaktor is
gekies as die geselekteerde klokbron 'n hoër frekwensie het as die maksimum frekwensie van die toestel in die huidige bedryfsomstandighede. Die toestel word gestuur met die CKDIV8 Fuse geprogrammeer.
Tabel 6-15. Klok Prescaler Kies
CLKPS3 | CLKPS2 | CLKPS1 | CLKPS0 | Klokafdelingsfaktor |
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 | Voorbehou |
1 | 0 | 1 | 0 | Voorbehou |
1 | 0 | 1 | 1 | Voorbehou |
1 | 1 | 0 | 0 | Voorbehou |
1 | 1 | 0 | 1 | Voorbehou |
1 | 1 | 1 | 0 | Voorbehou |
1 | 1 | 1 | 1 | Voorbehou |
Let wel: Die voorskaaler is gedeaktiveer in ATtiny15-versoenbaarheidsmodus en nie skryf na CLKPR of programmering van die CKDIV8-lont het enige effek op die stelselklok (wat altyd 1.6 MHz sal wees nie).
Kragbestuur en slaapmodusse
Die hoë werkverrigting en toonaangewende kode-doeltreffendheid maak die AVR-mikrobeheerders 'n ideale keuse vir lae-krag-toepassings. Boonop stel slaapmodusse die toepassing in staat om ongebruikte modules in die MCU af te skakel en sodoende krag te bespaar. Die AVR bied verskillende slaapmodusse waarmee die gebruiker die kragverbruik kan aanpas volgens die vereistes van die toepassing.
Slaapmodusse
Figuur 6-1 op bladsy 23 bied die verskillende klokstelsels en die verspreiding daarvan in ATtiny25 / 45/85 aan. Die figuur is handig om 'n geskikte slaapmodus te kies. Tabel 7-1 toon die verskillende slaapmodusse en hul wakker bronne.
Tabel 7-1. Aktiewe klokdomeine en wakkermaakbronne in die verskillende slaapmodusse
Aktiewe klokdomeine | Ossillators | Wake-up Bronne | ||||||||||
Slaapmodus | clkCPU | clkFLITS | klIO | clkADC | klkPCK | Hoofklokbron geaktiveer | INT0 en Pin Change | SPM / EEPROM
Gereed |
USI-begintoestand |
ADC | Ander I/O | Waghond Onderbreek |
Ledig | X | X | X | X | X | X | X | X | X | X | ||
ADC-ruisvermindering | X | X | X(1) | X | X | X | X | |||||
Krag af | X(1) | X | X |
Let wel: Vir INT0, slegs vlakonderbreking.
Om een van die drie slaapmodusse te betree, moet die SE-bit in MCUCR volgens die logiese een geskryf word en 'n SLEEP-instruksie moet uitgevoer word. Die SM [1: 0] -stukkies in die MCUCR-register kies watter slaapmodus (stilstand, ADC-ruisvermindering of afskakel) deur die SLEEP-instruksie geaktiveer sal word. Sien Tabel 7-2 vir 'n opsomming.
As 'n geaktiveerde onderbreking plaasvind terwyl die MCU in 'n slaapmodus is, word die MCU wakker. Die MCU word dan, behalwe die opstarttyd, vir vier siklusse gestaak, voer die onderbrekingsroetine uit en hervat die uitvoering van die instruksie na SLAAP. Die inhoud van die register File en SRAM is onveranderd wanneer die toestel uit die slaap wakker word. As 'n herstel tydens die slaapmodus plaasvind, word die MCU wakker en word dit uitgevoer vanaf die Reset Vector.
Let wel: as 'n vlak-geaktiveerde onderbreking gebruik word vir wakker word, moet die veranderde vlak vir 'n geruime tyd gehou word om die MCU wakker te maak (en vir die MCU om die onderbrekingsdiensroetine te betree). Sien “Eksterne onderbrekings” op bladsy 49 vir besonderhede.
Stilstand
Wanneer die SM[1:0]-bisse na 00 geskryf word, laat die SLAAP-instruksie die MCU oorgaan in Idle-modus, wat die SVE stop, maar laat Analog Comparator, ADC, USI, Timer/Counter, Watchdog en die onderbrekingstelsel toe om voort te gaan. eet. Hierdie slaapmodus stop basies clkCPU en clkFLASH, terwyl die ander horlosies kan loop.
In-rus-modus stel die MCU in staat om wakker te word van eksterne onderbrekings, sowel as interne, soos die Timer Overflow. As wakker word van die Analog Comparator-onderbreking nie nodig is nie, kan die Analog Comparator afgeskakel word deur die ACD-bit in te stel “ACSR - Analoog vergelykingskontrole en statusregister” op bladsy 120. Dit verminder die kragverbruik in die stilstand-modus. As die ADC geaktiveer is, begin 'n omskakeling outomaties wanneer hierdie modus betree word.
ADC-ruisverminderingsmodus
Wanneer die SM[1:0]-bisse na 01 geskryf word, laat die SLAAP-instruksie die MCU in ADC-ruisreduksiemodus gaan, wat die SVE stop, maar die ADC, die eksterne onderbrekings en die Waghond toelaat om voort te gaan werk (indien geaktiveer). Hierdie slaapmodus stop clkI/O, clkCPU en clkFLASH, terwyl die ander horlosies kan loop.
Dit verbeter die geraasomgewing vir die ADC, wat hoër resolusiemetings moontlik maak. As die ADC geaktiveer is, begin 'n omskakeling outomaties wanneer hierdie modus betree word. Afgesien van die onderbreking van ADC Conversion Complete, kan slegs 'n eksterne reset, 'n Watchdog Reset, 'n Brown-out Reset, 'n SPM / EEPROM gereed onderbreking, 'n eksterne vlak onderbreking op INT0 of 'n pin-wissel onderbreking die MCU wakker maak van ADC-ruisonderdrukking wyse.
Skakel af
Wanneer die SM [1: 0] bisse op 10 geskryf word, laat die SLEEP-instruksie die MCU inskakel-af. In hierdie modus word die oscillator gestaak, terwyl die eksterne onderbrekings, die USI-toestandtoestandopsporing en die Watchdog aanhou werk (as dit geaktiveer is). Slegs 'n eksterne reset, 'n Watchdog Reset, 'n Brown-out Reset, USI-starttoestand onderbreek, 'n eksterne vlak onderbreking op INT0 of 'n pin-wissel onderbreking kan die MCU wakker maak. Hierdie slaapmodus stop alle gegenereerde horlosies, wat slegs asynchrone modules moontlik maak.
Sagteware BOD Deaktiveer
Wanneer die verbruiningsdetektor (BOD) deur BODLEVEL-versmeltings geaktiveer is (sien Tabel 20-4 op bladsy 148), monitor die BOD die aanbod voltage tydens 'n slaaptyd. Op sommige toestelle is dit moontlik om krag te bespaar deur die BOD uit te skakel deur sagteware in die afskakel-slaapmodus. Die slaapverbruik se kragverbruik sal dan op dieselfde vlak wees as wanneer BOD wêreldwyd deur sekuriteite gedeaktiveer word.
As BOD deur sagteware gedeaktiveer word, word die BOD-funksie afgeskakel onmiddellik nadat die slaapmodus ingegaan het. Sodra jy wakker word uit die slaap, word BOD outomaties weer geaktiveer. Dit verseker veilige werking ingeval die VCC-vlak gedurende die slaapperiode gedaal het.
Wanneer die BOD gedeaktiveer is, sal die wektyd van die slaapmodus dieselfde wees as vir die ontwaking van RESET. Die gebruiker moet die wakker tye handmatig instel sodat die bandgap-verwysing tyd het om te begin en die BOD reg werk voordat die MCU voortgaan met die uitvoering van kode. Sien SUT [1: 0] en CKSEL [3: 0] smeltpunte in tabel “Fuse Low Byte” op bladsy 149
BOD deaktivering word beheer deur die BODS (BOD Sleep) bietjie van MCU Control Register, sien “MCUCR - MCU-beheer Registreer ”op bladsy 37. Deur hierdie bietjie aan een te skryf, skakel BOD uit in Power-Down, terwyl die skryf van 'n nul die BOD aktief hou. Die standaardinstelling is nul, dws BOD aktief.
Skryf aan die BODS-bietjie word beheer deur 'n tydsreeks en 'n inskakelbit, sien “MCUCR - MCU Control Regis- ter ”op bladsy 37.
Beperkings
BOD-uitskakel-funksies is slegs op die volgende toestelle geïmplementeer:
ATtiny25, hersiening E, en nuwer
ATtiny45, hersiening D en nuwer
ATtiny85, hersiening C, en nuwer
Hersienings word op die toestelpakket gemerk en kan soos volg opgespoor word:
Onderkant van pakkette 8P3 en 8S2
Boonste kant van die pakket 20M1
Kragverminderingsregister
Die Power Reduction Register (PRR), sien “PRR - Kragverminderingsregister” op bladsy 38, bied 'n metode om die kragverbruik te verminder deur die klok na individuele randapparatuur te stop. Die huidige toestand van die randapparatuur is bevries en die I / O-registers kan nie gelees of geskryf word nie. Hulpbronne wat deur die randapparaat gebruik word om die klok te stop, sal beset bly, en daarom moet die randapparatuur in die meeste gevalle uitgeskakel word voordat die horlosie gestop word. As u 'n module wakker maak, wat gedoen word deur die bietjie in PRR skoon te maak, plaas dit die module in dieselfde toestand as voor die afsluiting.
Module-afskakeling kan gebruik word in die stil-modus en aktiewe modus om die algehele kragverbruik aansienlik te verlaag. In alle ander slaapmodusse is die horlosie al gestop. Sien “Voedingsstroom van I / O-modules” op bladsy 177 byvoorbeeldamples.
Vermindering van kragverbruik
Daar is verskeie kwessies wat u moet oorweeg wanneer u die kragverbruik in 'n AVR-beheerde stelsel probeer verminder. Oor die algemeen moet slaapmodusse soveel as moontlik gebruik word, en die slaapmodus moet so gekies word dat so min as moontlik van die funksies van die toestel werk. Alle funksies wat nie nodig is nie, moet gedeaktiveer word. In die besonder moet die volgende modules spesiale oorweging kry wanneer u probeer om die laagste moontlike kragverbruik te behaal.
Analoog na digitaal omskakelaar
As dit geaktiveer is, sal die ADC in alle slaapmodusse geaktiveer word. Om krag te bespaar, moet die ADC gedeaktiveer word voordat u in 'n slaapmodus gaan. Wanneer die ADC weer en weer afgeskakel word, sal die volgende omskakeling 'n uitgebreide omskakeling wees. Verwys na “Analoog na digitale omskakelaar” op bladsy 122 vir besonderhede oor ADC-werking.
Analoog Vergelyker
As u in die onaktiewe modus gaan, moet die analoog vergelyker gedeaktiveer word as dit nie gebruik word nie. As u die ADC -ruisonderdrukkingsmodus betree, moet die analoog vergelyker gedeaktiveer word. In die ander slaapmodusse word die analoog vergelyker outomaties gedeaktiveer. As die Analog Comparator egter ingestel is om die Internal Voltage As verwysing as inset, moet die analoog vergelyker in alle slaapmodusse gedeaktiveer word. Andersins het die Interne Voltage Verwysing sal geaktiveer word, onafhanklik van die slaapmodus. Verwys na “Analoog vergelyker” op bladsy 119 vir besonderhede oor die konfigurasie van die Analog Comparator.
Verbruiningsdetektor
As die verbruiningsdetektor nie nodig is in die toepassing nie, moet hierdie module afgeskakel word. As die verduisteringsdetektor deur die BODLEVEL-versekering geaktiveer is, sal dit in alle slaapmodusse geaktiveer word, en dus altyd krag verbruik. In die dieper slaapmodusse sal dit aansienlik bydra tot die totale stroomverbruik. Sien “Uitbruin opsporing- tion ”op bladsy 41 en “Sagteware-BOD deaktiveer” op bladsy 35 vir besonderhede oor die instelling van die verdonkeringsdetektor.
Interne Voltage Verwysing
Die Interne Voltage Verwysing sal geaktiveer word indien nodig deur die Brown-out Detection, die Analog Comparator of die ADC. As hierdie modules gedeaktiveer word soos beskryf in die afdelings hierbo, sal die interne voltagDie verwysing sal gedeaktiveer word en dit sal nie krag verbruik nie. As die gebruiker weer aangeskakel word, moet die gebruiker toelaat dat die verwysing begin voordat die uitset gebruik word. As die verwysing in die slaapmodus aangehou word, kan die uitset onmiddellik gebruik word. Verwys na 'Interne voltage Verwysing ”op bladsy 42 vir besonderhede oor die opstarttyd.
Waghond Timer
As die Watchdog Timer nie nodig is in die toepassing nie, moet hierdie module afgeskakel word. As die waghondtimer geaktiveer is, sal dit in alle slaapmodusse geaktiveer word, en dus altyd krag verbruik. In die dieper slaapmodusse sal dit aansienlik bydra tot die totale stroomverbruik. Verwys na “Waakhondtimer” op bladsy 42 vir meer inligting oor die instelling van die Watchdog Timer.
Portpenne
Wanneer 'n slaapmodus binnegegaan word, moet alle poortpenne gekonfigureer word om minimum krag te gebruik. Die belangrikste ding is dan om te verseker dat geen penne weerstandsladings aandryf nie. In slaapmodusse waar beide die I/O-klok (clkI/O) en die ADC-klok (clkADC) gestop word, sal die invoerbuffers van die toestel gedeaktiveer word. Dit verseker dat geen krag verbruik word nie
deur die invoerlogika as dit nie nodig is nie. In sommige gevalle is die invoerlogika nodig vir die opsporing van wakker toestande, en
dit sal dan geaktiveer word. Verwys na die gedeelte “Digitale invoer in- en slaapmodusse” op bladsy 57 vir besonderhede oor watter penne geaktiveer is. As die insetbuffer geaktiveer is en die insetsein bly swewend of het 'n analoog seinvlak naby aan VCC/2, sal die insetbuffer oormatige krag gebruik.
Vir analoog insetpenne moet die digitale insetbuffer te alle tye gedeaktiveer wees. 'n Analoog seinvlak naby VCC/2 op 'n insetpen kan aansienlike stroom veroorsaak, selfs in aktiewe modus. Digitale invoerbuffers kan gedeaktiveer word deur na die Digital Input Disable Register (DIDR0) te skryf. Verwys na “DIDR0 - Registrasie 0 vir digitale insette uitskakel” op bladsy 121 vir besonderhede.
Registerbeskrywing
MCUCR - MCU-kontroleregister
Die MCU Control Register bevat kontrolebits vir kragbestuur.
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUD | SE | SM1 | SM0 | LYF | ISC01 | ISC00 | MCUCR |
Lees/Skryf | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 7 - BODS: BOD Sleep
BOD-uitskakel-funksies is slegs op sommige toestelle beskikbaar. Sien “Beperkings” op bladsy 36.
Om BOD tydens slaap uit te skakel (sien Tabel 7-1 op bladsy 34) die BODS-bietjie moet volgens die logiese een geskryf word. Dit word beheer deur 'n tydreeks en die inskakelbit, BODSE in MCUCR. Eerstens moet beide BODS en BODSE op een ingestel wees. Tweedens, binne vier kloksiklusse, moet BODS op een gestel word en BODSE op nul. Die BODS-bit is drie kloksiklusse aktief nadat dit ingestel is. 'N Slaapinstruksie moet uitgevoer word terwyl BODS aktief is om die BOD vir die werklike slaapmodus uit te skakel. Die BODS-bietjie word outomaties skoongemaak na drie kloksiklusse.
In toestelle waar Sleeping BOD nie geïmplementeer is nie, is hierdie stukkie ongebruik en sal dit altyd nul wees.
Bit 5 - SE: Slaap inskakel
Die SE-bis moet na logika een geskryf word om die MCU in die slaapmodus te laat gaan wanneer die SLEEP-instruksie uitgevoer word. Om te verhoed dat die MCU die slaapmodus betree, tensy dit die programmeerder se doel is, word dit aanbeveel om die Sleep Enable (SE) bis na een te skryf net voor die uitvoering van die SLEEP instruksie en om dit onmiddellik na wakker te vee.
Bits 4: 3 - SM [1: 0]: Slaapmodus Kies Bits 1 en 0
Hierdie stukkies kies tussen die drie beskikbare slaapmodusse soos aangedui in Tabel 7-2.
Tabel 7-2. Slaapmodus Kies
SM1 | SM0 | Slaapmodus |
0 | 0 | Ledig |
0 | 1 | ADC-ruisvermindering |
1 | 0 | Krag af |
1 | 1 | Voorbehou |
Bit 2 - BODSE: BOD Slaap Inskakel
BOD-uitskakel-funksies is slegs op sommige toestelle beskikbaar. Sien “Beperkings” op bladsy 36.
Die BODSE-bit maak die instelling van BODS-kontrolebit moontlik, soos uiteengesit in die BODS-bitbeskrywing. BOD deaktiveer word beheer deur 'n tydsberekening.
Hierdie stukkie word ongebruik in toestelle waar sagteware wat BOD deaktiveer nie geïmplementeer is nie en in daardie toestelle as nul gelees word.
PRR - Kragverminderingsregister
Die Power Reduction Register bied 'n metode om kragverbruik te verlaag deur perifere klokseine uit te skakel.
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x20 | – | – | – | – | PRTIM1 | PRTIM0 | PRUSI | PRADC | PRR |
Lees/Skryf | R | R | R | R | R/W | R/W | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7: 4 - Res: Voorbehou Bits
Hierdie stukkies is gereserveerde stukkies in die ATtiny25 / 45/85 en sal altyd as nul gelees word.
Bit 3 - PRTIM1: Timer / teller vir kragreduksie1
Die skryf van 'n logiese een tot hierdie bietjie skakel die Timer / Counter1-module af. As die timer / toonbank1 geaktiveer is, sal die werking voortgaan soos voor die afskakel.
Bit 2 - PRTIM0: Timer / teller vir kragreduksie0
Die skryf van 'n logiese een tot hierdie bietjie skakel die Timer / Counter0-module af. As die timer / toonbank0 geaktiveer is, sal die werking voortgaan soos voor die afskakel.
Bit 1 - PRUSI: Kragvermindering USI
Die skryf van 'n logiese een tot hierdie bietjie skakel die USI af deur die klok na die module te stop. Wanneer die USI weer wakker gemaak word, moet die USI weer geïnisialiseer word om die regte werking te verseker.
Bit 0 - PRADC: Kragvermindering ADC
Die skryf van 'n logiese een tot hierdie bietjie skakel die ADC af. Die ADC moet gedeaktiveer word voordat dit gesluit word. Let op dat die ADC-klok ook deur sommige dele van die analoog-vergelyker gebruik word, wat beteken dat die analoog-vergelyker nie gebruik kan word as hierdie bietjie hoog is nie.
Stelselbeheer en herstel
Stel die AVR terug
Tydens die reset word alle I / O-registers op hul oorspronklike waardes gestel en begin die program vanaf die Reset Vector. Die instruksie wat by die Reset Vector geplaas word, moet 'n RJMP - Relatiewe sprong wees - instruksie vir die herstelhanteringsroetine. As die program nooit 'n onderbrekingsbron moontlik maak nie, word die onderbrekingsvektore nie gebruik nie en kan gewone programkode op hierdie plekke geplaas word. Die stroombaandiagram in Figuur 8-1 toon die reset logika. Elektriese parameters van die reset-stroombane word in gegee “Eienskappe van stelsel en herstel" op bladsy 165.
Figuur 8-1 Herstel logika
Die I / O-poorte van die AVR word onmiddellik teruggestel na hul oorspronklike toestand wanneer 'n reset-bron aktief word. Dit vereis nie dat enige klokbron aan die gang is nie.
Nadat alle reset-bronne onaktief geword het, word 'n vertragingsteller aangeroep wat die interne reset uitrek. Hierdeur kan die krag 'n stabiele vlak bereik voordat normale werking begin. Die time-outperiode van die vertragingsteller word deur die gebruiker gedefinieër deur die SUT- en CKSEL-versmeltingen. Die verskillende keuses vir die vertragingstydperk word in aangebied 'Klok Bronne ”op bladsy 25.
Stel bronne terug
Die ATtiny25 / 45/85 het vier bronne van herstel:
Aanskakel Herstel. Die MCU word herstel wanneer die toevoer voltage is onder die aanskakel-terugsteldrempel (VPOT).
Eksterne herstel. Die MCU word teruggestel as 'n lae vlak op die RESET-pen langer is as die minimum polslengte.
Die waghond is teruggestel. Die MCU word teruggestel wanneer die waghondtimerperiode verstryk en die waghond geaktiveer is.
Uitbruin Herstel. Die MCU word herstel wanneer die toevoer voltage VCC is onder die Brown-out Reset threshold (VBOT) en die Brown-out detector is geaktiveer.
Skakel weer in
'N POR (Power-on Reset) -puls word gegenereer deur 'n On-chip-opsporingskring. Die opsporingsvlak word gedefinieer in “Sys- tem en Herstel eienskappe ”op bladsy 165. Die POR word geaktiveer wanneer VCC onder die opsporingsvlak is. Die POR-kring kan gebruik word om die opstartterugstelling te aktiveer, sowel as om 'n fout in toevoervolume op te spoortage.
'N Power-on Reset (POR) kring verseker dat die toestel teruggestel word vanaf aanskakel. Die bereiking van die aanskakel-terugstel-drempel voltage roep die vertragingsteller aan, wat bepaal hoe lank die toestel in RESET gehou word nadat VCC styg. Die RESET-sein word weer geaktiveer, sonder enige vertraging, wanneer VCC onder die opsporingsvlak daal.
Figuur 8-2. MCU-opstart, TERUGSTEL Gebind aan VCC
INTERNE TERUGSTEL
Figuur 8-3. MCU opstart, RESET Ekstern verleng
Eksterne herstel
'N Eksterne reset word gegenereer deur 'n lae vlak op die RESET-pen as dit geaktiveer is. Stel pulse langer as die minimum polswydte terug (sien “Eienskappe van stelsel en herstel" op bladsy 165) sal 'n terugstelling genereer, selfs al loop die klok nie. Daar word nie gewaarborg dat korter pulse 'n reset stel nie. As die toegepaste sein die Reset Threshold Voltage – VRST – op sy positiewe rand begin die vertragingsteller die MCU nadat die Time-out tydperk verstryk het.
Figuur 8-4. Eksterne herstel tydens werking
Bruin-opsporing
ATtiny25/45/85 het 'n On-chip Brown-out Detection (BOD) kring vir die monitering van die VCC vlak tydens werking deur dit te vergelyk met 'n vaste sneller vlak. Die snellervlak vir die BOD kan deur die BODLEVEL Sekerings gekies word. Die snellervlak het 'n histerese om spykervrye verbruining-opsporing te verseker. Die histerese op die opsporingsvlak moet geïnterpreteer word as VBOT+ = VBOT + VHYST/2 en VBOT- = VBOT – VHYST/2.
Wanneer die BOD geaktiveer is, en VCC verminder tot 'n waarde onder die snellervlak (VBOT- in Figuur 8-5), word die Brown-out-terugstelling onmiddellik geaktiveer. Wanneer VCC bo die snellervlak toeneem (VBOT+ in Figuur 8-5), begin die vertragingsteller die MCU nadat die Time-out periode tTOUT verstryk het.
Die BOD-kring sal slegs 'n daling in VCC opspoor as die voltage bly langer onder die snellervlak as tBOD wat ingegee word “Eienskappe van stelsel en herstel" op bladsy 165.
Die waghond is teruggestel
Wanneer die Waghond uittel, sal dit 'n kort terugstelpuls van een CK-siklusduur genereer. Op die dalende flank van hierdie pols begin die vertragingstydhouer die Time-out periode tTOUT tel. Verwys na “Waakhondtimer” op bladsy 42 vir besonderhede oor die werking van die Watchdog Timer.
Voltage Verwysing Aktiveer seine en opstarttyd
Die voltagDie verwysing het 'n aanvangstyd wat die manier waarop dit gebruik moet word, kan beïnvloed. Die opstarttyd word ingegee “Eienskappe van stelsel en herstel" op bladsy 165. Om krag te bespaar, word die verwysing nie altyd aangeskakel nie. Die verwysing is aan gedurende die volgende situasies:
Wanneer die BOD geaktiveer is (deur die BODLEVEL [2: 0] Fuse Bits te programmeer).
Wanneer die bandgap verwysing gekoppel is aan die Analog Comparator (deur die ACBG bit in ACSR in te stel).
As die ADC geaktiveer is.
As die BOD dus nie geaktiveer is nie, moet die gebruiker, nadat die ACBG-bit ingestel is of die ADC geaktiveer het, altyd toelaat dat die verwysing begin voordat die uitvoer van die Analog Comparator of ADC gebruik word. Om die kragverbruik in die afskakelmodus te verminder, kan die gebruiker die drie voorwaardes hierbo vermy om te verseker dat die verwysing afgeskakel word voordat hy in die afskakelmodus gaan.
Waghond Timer
Die Watchdog Timer word geklok van 'n On-chip Oscillator wat op 128 kHz werk. Deur die Watchdog Timer-voorskakelaar te beheer, kan die Watchdog Reset-interval aangepas word soos getoon in Tabel 8-3 op bladsy 46. Met die WDR - Watchdog Reset - word die Watchdog-timer teruggestel. Die Watchdog Timer word ook weer ingestel wanneer dit uitgeskakel is en wanneer 'n chipreset plaasvind. Tien verskillende kloksiklusperiodes kan gekies word om die herstelperiode te bepaal. As die resetperiode verval sonder 'n ander Watchdog Reset, word die ATtiny25 / 45/85 teruggestel en uitgevoer vanaf die Reset Vector. Raadpleeg vir inligting oor die tydsberekening van die waghondherstel Tabel 8-3 op bladsy 46.
Die Watchdog Timer kan ook ingestel word om 'n onderbreking te genereer in plaas van 'n reset. Dit kan baie nuttig wees as u die Watchdog gebruik om wakker te word van Power-down.
Om die onwillekeurige uitskakeling van die waghond of die onbedoelde verandering van die time-outperiode te voorkom, word twee veiligheidsvlakke deur die lont WDTON gekies soos getoon Tabel 8-1 Verwys na “Tydvolgorde vir die verandering van die kon- figuur van die waghondtimer ”op bladsy 43 vir besonderhede.
Tabel 8-1. WDT-konfigurasie as 'n funksie van die lont-instellings van WDTON
WDTON | Veiligheidsvlak | WDT-aanvanklike toestand | Hoe om die WDT uit te skakel | Hoe om time-out te verander |
Ongeprogrammeer | 1 | Gestrem | Tydvolgorde | Geen beperkings nie |
Geprogrammeer | 2 | Geaktiveer | Altyd geaktiveer | Tydvolgorde |
Figuur 8-7. Waghond Timer
Bepaalde rye vir die verandering van die konfigurasie van die waghondtimer
Die volgorde vir die verandering van konfigurasie verskil effens tussen die twee veiligheidsvlakke. Afsonderlike prosedures word vir elke vlak beskryf.
Veiligheidsvlak 1: In hierdie modus is die Watchdog Timer aanvanklik gedeaktiveer, maar kan geaktiveer word deur die WDE-bis na een te skryf sonder enige beperking. 'n Tydige volgorde is nodig wanneer 'n geaktiveerde Waghond-afteller gedeaktiveer word. Om 'n geaktiveerde Watchdog Timer te deaktiveer, moet die volgende prosedure gevolg word:
Skryf in dieselfde bewerking 'n logiese een aan WDCE en WDE. 'N Logiese een moet aan WDE geskryf word, ongeag die vorige waarde van die WDE-bit.
Binne die volgende vier kloksiklusse, in dieselfde bewerking, skryf u die WDE- en WDP-bis soos u wil, maar met die WDCE-bietjie skoon.
Veiligheidsvlak 2: In hierdie modus is die Watchdog Timer altyd geaktiveer, en die WDE-bis sal altyd as een lees. 'n Tydvolgorde is nodig wanneer die Waghond-tyd-uittydperk verander word. Om die Watchdog Time-out te verander, moet die volgende prosedure gevolg word:
Skryf in dieselfde bewerking 'n logiese aan WDCE en WDE. Alhoewel die WDE altyd ingestel is, moet die WDE in een geskryf word om die vasgestelde volgorde te begin.
Binne die volgende vier kloksiklusse, in dieselfde bewerking, skryf die WDP-bisse na wense, maar met die WDCE-bietjie skoon. Die waarde wat aan die WDE-bit geskryf word, is nie relevant nie.
Kode Example
Die volgende kode, bvample toon een samestelling en een C -funksie om die WDT uit te skakel. Die eksample aanvaar dat onderbrekings beheer word (bv. deur onderbrekings wêreldwyd uit te skakel) sodat geen onderbrekings tydens die uitvoering van hierdie funksies sal plaasvind nie.
Vergaderingskode Example(1) |
WDT_af:
wdr ; Maak WDRF skoon in MCUSR ldi r16, (0< uit MCUSR, r16 ; Skryf 'n logiese een vir WDCE en WDE ; Hou die ou prescaler-instelling om onbedoelde herstel van die waghond te voorkom in r16, WDTCR of r16, (1< uit WDTCR, r16 ; Skakel WDT af ldi r16, (0< uit WDTCR, r16 ret |
C Kode Example(1) |
nietig WDT_af(leeg)
{ _WDR (); /* Vee WDRF uit in MCUSR */ MCUSR = 0x00 /* Skryf logiese een na WDCE en WDE */ WDTCR |= (1< / * Skakel WDT * / WDTCR = 0x00 uit; } |
Nota: 1. Sien “Kode Examples ”op bladsy 6.
Registerbeskrywing
MCUSR - MCU-statusregister
Die MCU-statusregister verskaf inligting oor watter bron wat herstel is, 'n MCU-reset veroorsaak het.
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x34 | – | – | – | – | WDRF | BORF | UITTREKSEL | PORF | MCUSR |
Lees/Skryf | R | R | R | R | R/W | R/W | R/W | R/W |
Aanvanklike waarde 0 0 0 0 Sien beskrywing van die bietjie
Bits 7: 4 - Res: Voorbehou Bits
Hierdie stukkies is gereserveerde stukkies in die ATtiny25 / 45/85 en sal altyd as nul gelees word.
Bit 3 - WDRF: waghond herstel vlag
Hierdie bit word ingestel as 'n waghondherstel plaasvind. Die bit word teruggestel deur 'n aan-uit-reset, of deur 'n logiese nul aan die vlag te skryf.
Bit 2 - BORF: bruin-herstel-vlag
Hierdie bietjie word ingestel as 'n terugbreek van die bruin kleur plaasvind. Die bietjie word herstel deur 'n aan-uit-reset, of deur 'n logiese nul aan die vlag te skryf.
Bit 1 - EXTRF: Eksterne herstelvlag
Hierdie bit word ingestel as 'n eksterne reset plaasvind. Die bit word teruggestel deur 'n aan-uit-reset, of deur 'n logiese nul aan die vlag te skryf.
Bit 0 - PORF: Reset-vlag by opstart
Hierdie bietjie word ingestel as 'n aan-uit-herstel plaasvind. Die bietjie word slegs herstel deur 'n logiese nul aan die vlag te skryf.
Om gebruik te maak van die Reset Flags om 'n reset-toestand te identifiseer, moet die gebruiker die MCUSR so vroeg as moontlik in die program lees en terugstel. As die register skoongemaak word voordat nog 'n reset plaasvind, kan die bron van die reset gevind word deur die Reset Flags te ondersoek.
WDTCR - Waakhond-timerregister
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x21 | WDIF | WDIE | WDP3 | WDCE | WDE | WDP2 | WDP1 | WDP0 | WDTCR |
Lees/Skryf | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | X | 0 | 0 | 0 |
Bit 7 - WDIF: Watchdog Timeout Interrupt Flag
Hierdie bit word ingestel wanneer 'n time-out plaasvind in die Watchdog Timer en die Watchdog Timer is ingestel vir onderbreking. WDIF word deur hardeware skoongemaak wanneer die ooreenstemmende onderbrekingshanteringsvektor uitgevoer word. Alternatiewelik word WDIF skoongemaak deur 'n logiese een aan die vlag te skryf. Wanneer die I-bit in SREG en WDIE ingestel is, word die Watchdog Time-out Interrupt uitgevoer.
Bit 6 - WDIE: Onderbreking van die waghondtydonderbreking
Wanneer hierdie bit aan een geskryf word, word WDE skoongemaak en die I-bit in die statusregister ingestel, word die Watchdog-time-out-onderbreking geaktiveer. In hierdie modus word die ooreenstemmende onderbreking uitgevoer in plaas van 'n reset as 'n time-out in die Watchdog Timer plaasvind.
As WDE ingestel is, word WDIE outomaties deur hardeware skoongemaak wanneer 'n time-out plaasvind. Dit is handig om die Watchdog Reset-sekuriteit te behou tydens die onderbreking. Nadat die WDIE-bietjie uitgevee is, sal die volgende time-out 'n reset veroorsaak. Om die Watchdog Reset te vermy, moet WDIE ingestel word na elke onderbreking.
Tabel 8-2. Waghond Timer-konfigurasie
WDE | WDIE | Waghond Timer Staat | Aksie op time-out |
0 | 0 | Gestop | Geen |
0 | 1 | Hardloop | Onderbreek |
1 | 0 | Hardloop | Stel terug |
1 | 1 | Hardloop | Onderbreek |
Bit 4 - WDCE: Watchdog Change Enable
Hierdie bit moet ingestel word as die WDE-bit op logiese nul geskryf word. Andersins sal die waghond nie gedeaktiveer word nie. Sodra dit aan een geskryf is, sal die hardeware hierdie stuk na vier kloksiklusse skoonmaak. Verwys na die beskrywing van die WDE-bietjie vir 'n Watchdog-uitskakelprosedure. Hierdie bietjie moet ook ingestel word wanneer die voorskalerbits verander word. Sien 'Tydreeks vir die verandering van die konfigurasie van die waghondtimer ”op bladsy 43.
Bit 3 - WDE: waghond inskakel
Wanneer die WDE volgens logiese een geskryf is, is die Watchdog Timer geaktiveer, en as die WDE na logic zero geskryf is, is die Watchdog Timer-funksie uitgeskakel. WDE kan slegs skoongemaak word as die WDCE-bit logiese vlak een het. Om 'n geaktiveerde waghondtimer uit te skakel, moet die volgende prosedure gevolg word:
Skryf in dieselfde bewerking 'n logiese een aan WDCE en WDE. 'N Logiese een moet aan WDE geskryf word, al is dit op een gestel voordat die deaktivering begin.
Skryf 'n logika 0 na WDE binne die volgende vier kloksiklusse. Dit skakel die waghond uit.
Op veiligheidsvlak 2 is dit nie moontlik om die Watchdog Timer uit te skakel nie, selfs nie met die algoritme hierbo beskryf nie. Sien “Bepaalde rye vir die verandering van die konfigurasie van die waghondtimer” op bladsy 43.
Op veiligheidsvlak 1 word WDE in MCUSR deur WDRF oorheers. Sien “MCUSR - MCU-statusregister” op bladsy 44 vir beskrywing van WDRF. Dit beteken dat WDE altyd ingestel is wanneer WDRF ingestel is. Om WDE skoon te maak, moet WDRF skoongemaak word voordat die waghond uitgeskakel word met die prosedure hierbo beskryf. Hierdie funksie verseker dat verskeie herstelle tydens toestande wat mislukking veroorsaak, en 'n veilige opstart na die mislukking.
Let wel: As die waghondtydteller nie in die toepassing gebruik gaan word nie, is dit belangrik om deur 'n waghonddeaktiveerprosedure te gaan in die inisialisering van die toestel. As die Waghond per ongeluk geaktiveer word, bvampDeur 'n wegloopwyser of 'n uitbruin toestand, word die toestel herstel, wat weer tot 'n nuwe waghond kan terugstel. Om hierdie situasie te vermy, moet die toepassingsprogrammatuur altyd die WDRF -vlag en die WDE -kontrolebit in die inisialiseringsroetine skoonmaak.
Bits 5, 2: 0 - WDP [3: 0]: Watchdog Timer Prescaler 3, 2, 1 en 0
Die WDP [3: 0] stukkies bepaal die voorskaling van die Watchdog Timer wanneer die Watchdog Timer geaktiveer is. Die verskillende voorskalingswaardes en hul ooreenstemmende time-outperiodes word in getoon Tabel 8-3.
Tabel 8-3. Waghond Timer Voorskaal Kies
WDP3 | WDP2 | WDP1 | WDP0 | Aantal WDT-ossillatorsiklusse | Tipiese Time-out by VCC = 5.0V |
0 | 0 | 0 | 0 | 2K (2048) siklusse | 16 ms |
0 | 0 | 0 | 1 | 4K (4096) siklusse | 32 ms |
0 | 0 | 1 | 0 | 8K (8192) siklusse | 64 ms |
0 | 0 | 1 | 1 | 16K (16384) siklusse | 0.125 s |
0 | 1 | 0 | 0 | 32K (32764) siklusse | 0.25 s |
0 | 1 | 0 | 1 | 64K (65536) siklusse | 0.5 s |
0 | 1 | 1 | 0 | 128K (131072) siklusse | 1.0 s |
0 | 1 | 1 | 1 | 256K (262144) siklusse | 2.0 s |
1 | 0 | 0 | 0 | 512K (524288) siklusse | 4.0 s |
1 | 0 | 0 | 1 | 1024K (1048576) siklusse | 8.0 s |
Tabel 8-3. Waghond Timer Prescale Select (vervolg)
WDP3 | WDP2 | WDP1 | WDP0 | Aantal WDT-ossillatorsiklusse | Tipiese Time-out by VCC = 5.0V |
1 | 0 | 1 | 0 | Voorbehou(1) | |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 0 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
Let wel: 1. Indien gekies, sal een van die geldige instellings onder 0b1010 gebruik word.
onderbrekings
Hierdie afdeling beskryf die besonderhede van die onderbrekingshantering soos uitgevoer in ATtiny25 / 45/85. Vir 'n algemene uiteensetting van die AVR-onderbrekingshantering, verwys na “Herstel en onderbreek hantering” op bladsy 12.
Onderbreek vektore in ATtiny25 / 45/85
Die onderbrekingsvektore van ATtiny25 / 45/85 word beskryf in Tabel 9-1hieronder.
Tabel 9-1. Stel en onderbreek vektore terug
Vektornr. | Programadres | Bron | Onderbreek definisie |
1 | 0x0000 | TERUGSTEL | Eksterne pen, weer inschakel, herstel van bruin, waghond-reset |
2 | 0x0001 | INT0 | Eksterne onderbrekingsversoek 0 |
3 | 0x0002 | PCINT0 | Speldverandering onderbreekversoek 0 |
4 | 0x0003 | TIMER1_COMPA | Timer / toonbank1 Vergelyk wedstryd A |
5 | 0x0004 | TIMER1_OVF | Timer / Teller1 Oorloop |
6 | 0x0005 | TIMER0_OVF | Timer / Teller0 Oorloop |
7 | 0x0006 | EE_RDY | EEPROM gereed |
8 | 0x0007 | ANA_COMP | Analoog Vergelyker |
9 | 0x0008 | ADC | ADC-omskakeling voltooi |
10 | 0x0009 | TIMER1_COMPB | Timer / toonbank1 Vergelyk wedstryd B |
11 | 0x000A | TIMER0_COMPA | Timer / toonbank0 Vergelyk wedstryd A |
12 | 0x000B | TIMER0_COMPB | Timer / toonbank0 Vergelyk wedstryd B |
13 | 0x000C | WDT | Waghond-time-out |
14 | 0x000d | USI_START | USI BEGIN |
15 | 0x000E | USI_OVF | USI Oorloop |
As die program nooit 'n onderbrekingsbron moontlik maak nie, word die onderbrekingsvektore nie gebruik nie, en kan gewone programkode op hierdie plekke geplaas word.
'N Tipiese en algemene opset vir onderbrekingsvektoradresse in ATtiny25/45/85 word in die program gewysample hieronder.
Vergaderingskode Example | ||
.org 0x0000 | ; Stel adres van volgende in | verklaring |
rjmp TERUGSTEL | ; 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: | ; Hoofprogram begin | |
; Adres 0x000F | ||
… |
Let wel: Sien “Kode Examples ”op bladsy 6.
Eksterne onderbrekings
Die eksterne onderbrekings word veroorsaak deur die INT0-pen of enige van die PCINT [5: 0] -penne. Let daarop dat die onderbrekings geaktiveer sal word, selfs al is die INT0- of PCINT [5: 0] -punte as uitsette gekonfigureer. Hierdie funksie bied 'n manier om 'n onderbreking van die sagteware te genereer. Pin-wissel onderbrekings PCI sal aktiveer as enige geaktiveerde PCINT [5: 0] -pen wissel. Die PCMSK Register bepaal watter penne bydra tot die onderbrekings van die pen. Onderbrekings van pennetjies op PCINT [5: 0] word asynchroon opgespoor. Dit impliseer dat hierdie onderbrekings gebruik kan word om die onderdeel ook uit die slaapmodus as die inactief te laat wakker word.
Die INT0-onderbrekings kan veroorsaak word deur 'n dalende of stygende rand of 'n lae vlak. Dit word opgestel soos aangedui in die spesifikasie vir die MCU Control Register - MCUCR. Wanneer die INT0-onderbreking geaktiveer is en ingestel is as geaktiveerde vlak, sal die onderbreking aktiveer solank die pen laag gehou word. Let daarop dat herkenning van dalende of stygende randonderbrekings op INT0 die aanwesigheid van 'n I / O-klok benodig, soos beskryf in “Clock Systems and their Distribution” op bladsy 23.
Onderbreking op lae vlak
'N Lae vlak onderbreking op INT0 word asynchroon opgespoor. Dit impliseer dat hierdie onderbreking gebruik kan word om die deel ook uit die slaapmodusse anders as die rustelose modus te wek. Die I / O-klok word in alle slaapmodusse gestaak, behalwe vir die rustelose modus.
Let daarop dat as 'n vlak-geaktiveerde onderbreking gebruik word vir wakker word vanaf Power-down, die vereiste vlak lank genoeg gehou moet word vir die MCU om die wek te voltooi om die vlak onderbreking te aktiveer. As die vlak voor die einde van die aanvangstyd verdwyn, sal die MCU steeds wakker word, maar geen onderbreking sal gegenereer word nie. Die aanskakeltyd word gedefinieer deur die SUT en CKSEL Sekerings soos beskryf in “Stelselklok en klokopsies” op bladsy 23.
As die lae vlak op die onderbrekingspen verwyder word voordat die toestel wakker geword het, sal die programuitvoering nie na die onderbrekingsdiensroetine herlei word nie, maar gaan voort met die instruksie na die SLEEP-opdrag.
Speld verander onderbrekingstyd
'N ExampDie tydsberekening van die onderbreking van 'n pen word aangedui in Figuur 9-1.
Registerbeskrywing
MCUCR - MCU-kontroleregister
Die register vir eksterne onderbrekingsbeheer A bevat kontrolebits vir onderbrekingssensbeheer.
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUD | SE | SM1 | SM0 | LYF | ISC01 | ISC00 | MCUCR |
Lees/Skryf | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 1: 0 - ISC0 [1: 0]: Onderbreek sintuigbeheer 0 bit 1 en bit 0
Die eksterne onderbreking 0 word geaktiveer deur die eksterne pen INT0 as die SREG I-vlag en die ooreenstemmende onderbrekingsmasker ingestel is. Die vlak en rande op die eksterne INT0-pen wat die onderbreking aktiveer, word gedefinieer in Tabel 9-2. Die waarde op die INT0 -pen is sampgelei voordat rande opgemerk word. As rand- of skakelonderbreking gekies word, sal pulse wat langer as een klokperiode duur, 'n onderbreking genereer. Daar word nie gewaarborg dat korter polse 'n onderbreking veroorsaak nie. As 'n lae vlak onderbreking gekies word, moet die lae vlak gehou word tot die voltooiing van die opdrag wat tans uitgevoer word om 'n onderbreking te genereer.
Tabel 9-2. Onderbreking 0 Sense Control
ISC01 | ISC00 | Beskrywing |
0 | 0 | Die lae vlak van INT0 genereer 'n onderbrekingsversoek. |
0 | 1 | Enige logiese verandering op INT0 genereer 'n onderbrekingsversoek. |
1 | 0 | Die val van INT0 genereer 'n onderbrekingsversoek. |
1 | 1 | Die stygende rand van INT0 genereer 'n onderbrekingsversoek. |
GIMSK - Algemene onderbrekingsmaskerregister
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3B | – | INT0 | PCIe | – | – | – | – | – | GIMSK |
Lees/Skryf | R | R/W | R/W | R | R | R | R | R | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7, 4: 0 - Res: Voorbehou Bits
Hierdie stukkies is gereserveerde stukkies in die ATtiny25 / 45/85 en sal altyd as nul gelees word.
Bit 6 - INT0: Eksterne onderbrekingsversoek 0 Inskakel
Wanneer die INT0-bit (een) ingestel is en die I-bit in die statusregister (SREG) ingestel is (een), word die eksterne penonderbreking geaktiveer. Die Interrupt Sense Control0 bis 1/0 (ISC01 en ISC00) in die MCU Control Register (MCUCR) definieer of die eksterne onderbreking geaktiveer word op stygende en / of dalende rand van die INT0-pen of vlak waargeneem. Aktiwiteit op die pen sal 'n onderbrekingsversoek veroorsaak, selfs al is INT0 as 'n uitvoer gekonfigureer. Die ooreenstemmende onderbreking van Eksterne onderbrekingsversoek 0 word uitgevoer vanaf die INT0 onderbrekingsvektor.
Bit 5 - PCIE: Pin Change Interrupt Enable
Wanneer die PCIE-bit (een) ingestel is en die I-bit in die statusregister (SREG) ingestel is (een), word die onderbreking van die pen verander. Enige verandering op enige geaktiveerde PCINT [5: 0] -pen sal onderbreking veroorsaak. Die ooreenstemmende onderbreking van Pin Change Interrupt Request word uitgevoer vanaf die PCI Interrupt Vector. PCINT [5: 0] -penne word individueel deur die PCMSK0-register geaktiveer.
GIFR - Algemene onderbrekingsvlagregister
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x3A | – | INTF0 | PCIF | – | – | – | – | – | GIFR |
Lees/Skryf | R | R/W | R/W | R | R | R | R | R | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7, 4: 0 - Res: Voorbehou Bits
Hierdie stukkies is gereserveerde stukkies in die ATtiny25 / 45/85 en sal altyd as nul gelees word.
Bit 6 - INTF0: Eksterne onderbrekingsvlag 0
Wanneer 'n rand- of logiese verandering op die INT0-pen 'n onderbrekingsversoek veroorsaak, word INTF0 stel (een). As die I-bit in SREG en die INT0-bit in GIMSK ingestel is (een), sal die MCU na die ooreenstemmende onderbrekingsvektor spring. Die vlag word skoongemaak wanneer die onderbrekingsroetine uitgevoer word. Alternatiewelik kan die vlag skoongemaak word deur 'n logiese vlag daarop te skryf. Hierdie vlag word altyd uitgevee as INT0 as 'n vlakonderbreking ingestel is.
Bit 5 - PCIF: Pin Change Interrupt Flag
Wanneer 'n logiese verandering op enige PCINT [5: 0] -pen 'n onderbrekingsversoek veroorsaak, word PCIF ingestel (een). As die I-bit in SREG en die PCIE-bit in GIMSK ingestel is (een), spring die MCU na die ooreenstemmende onderbrekingsvektor. Die vlag word skoongemaak wanneer die onderbrekingsroetine uitgevoer word. Alternatiewelik kan die vlag skoongemaak word deur 'n logiese vlag daarop te skryf.
PCMSK - Speldwisselmaskerregister
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x15 | – | – | PCINT5 | PCINT4 | PCINT3 | PCINT2 | PCINT1 | PCINT0 | PCMSK |
Lees/Skryf | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bits 7: 6 - Res: Voorbehou Bits
Hierdie stukkies is gereserveerde stukkies in die ATtiny25 / 45/85 en sal altyd as nul gelees word.
Bits 5: 0 - PCINT [5: 0]: Speldwissel aktiveer masker 5: 0
Elke PCINT [5: 0] -bit kies of onderbreking van die penverandering geaktiveer is op die ooreenstemmende I / O-pen. As PCINT [5: 0] ingestel is en die PCIE-bit in GIMSK ingestel is, word onderbreking van die pen verander op die ooreenstemmende I / O-pen. As PCINT [5: 0] uitgevee word, word die onderbreking van die pen op die ooreenstemmende I / O-pen uitgeskakel.
I/O-poorte
Inleiding
Alle AVR-poorte het ware lees-wysig-skryf-funksies wanneer dit gebruik word as algemene digitale I/O-poorte. Dit beteken dat die rigting van een poortpen verander kan word sonder om die rigting van enige ander pen opsetlik te verander met die SBI- en CBI -instruksies. Dieselfde geld wanneer die dryfwaarde verander word (as dit as uitset gekonfigureer is) of die optrekweerstands (as ingang) gekonfigureer/deaktiveer. Elke uitvoerbuffer het simmetriese aandrywingseienskappe met 'n hoë sink- en bronvermoë. Die pen -bestuurder is sterk genoeg om LED -skerms direk te bestuur. Alle poortpenne het afsonderlik kiesbare optrekweerstands met 'n toevoervolumetage onveranderlike weerstand. Alle I/O-penne het beskermingsdiodes vir beide VCC en grond soos aangedui in Figuur 10-1. Verwys na “Elektriese eienskappe” op bladsy 161 vir 'n volledige lys van parameters.
Figuur 10-1. I/O Pen Ekwivalent Skematiese
Alle registers en bitverwysings in hierdie afdeling is in algemene vorm geskryf. 'N Kleinletter "x" verteenwoordig die nommerletter vir die poort, en 'n kleinletter "n" stel die bisgetal voor. By die gebruik van die register of bit definisies in 'n program, moet die presiese vorm egter gebruik word. Vir eksample, PORTB3 vir bietjie nr. 3 in Port B, hier algemeen gedokumenteer as PORTxn. Die fisiese I/O -registers en bitlokasies word gelys "Registerbeskrywing" op bladsy 64.
Drie I / O-geheue-adreslokasies word toegeken vir elke poort, een elk vir die Data Register - PORTx, Data Direction Register - DDRx, en die Port Input Pins - PINx. Die poort-invoerpunte se I / O-plek is slegs leesbaar, terwyl die data-register en die datarigtingsregister gelees / geskryf word. Die skryf van 'n logiese een tot 'n bietjie in die PINx-registrasie, sal egter lei tot 'n omskakeling van die ooreenstemmende bit in die Data Register. Boonop skakel die Pull-up Disable - PUD-bietjie in MCUCR die optrekfunksie vir alle penne in alle poorte uit wanneer dit ingestel is.
Die gebruik van die I / O-poort as General Digital I / O word beskryf in “Porte as algemene digitale in- en uitgang” op bladsy 53. Die meeste poortpennetjies is gemultiplekseer met alternatiewe funksies vir die randfunksies op die toestel. Hoe elke alternatiewe funksie met die poortpen inmeng, word beskryf in “Alternatiewe hawe-funksies” op bladsy 57. Verwys na die individuele module-afdelings vir 'n volledige beskrywing van die alternatiewe funksies.
Let daarop dat die gebruik van die alternatiewe funksie van sommige van die poortpennetjies nie die gebruik van die ander pennetjies in die poort as algemene digitale I / O beïnvloed nie.
Hawens as algemene digitale in- en uitgang
Die hawens is tweerigting-I / O-poorte met opsionele interne optrekke. Figuur 10-2 toon 'n funksionele beskrywing van een I / O-poortpen, hier algemeen genoem Pxn.
Figuur 10-2. Algemene Digitale I/O(1)
Stel die pen op
Elke poortpen bestaan uit drie registerbits: DDxn, PORTxn en PINxn. Soos getoon in "Registerbeskrywing" op bladsy 64, word toegang tot die DDxn-stukkies verkry by die DDRx I / O-adres, die PORTxn-stukkies by die PORTx I / O-adres en die PINxn-stukkies by die PINx I / O-adres.
Die DDxn-bietjie in die DDRx-register kies die rigting van hierdie pen. As DDxn logies een geskryf is, word Pxn gekonfigureer as 'n uitvoerpen. As DDxn logies nul geskryf word, word Pxn as 'n invoerpen opgestel.
As die PORTxn een logika is as die pen as 'n invoerpen ingestel is, word die optrekweerstand geaktiveer. Om die optrekweerstand uit te skakel, moet PORTxn logies nul geskryf word, of die pen moet as 'n uitset-pen ingestel word. Die poortpennetjies word drie-aangegee wanneer die reset-toestand aktief word, selfs al werk geen horlosies nie.
As 'n PORTxn 'n logiese geskrewe is as die pen as 'n uitvoerpen is ingestel, word die poortpen hoog (een) aangedryf. As PORTxn logies nul geskryf word as die pen as 'n uitset-pen ingestel is, word die poort-pen laag (nul) gedryf.
Wissel die pen
Die skryf van 'n logiese een na PINxn skakel die waarde van PORTxn in, onafhanklik van die waarde van DDRxn. Let op dat die SBI-instruksie gebruik kan word om een enkele bis in 'n poort in te skakel.
Skakel tussen Invoer en Uitvoer
Wanneer daar geskakel word tussen drie-toestande ({DDxn, PORTxn} = 0b00) en uitset hoog ({DDxn, PORTxn} = 0b11), 'n intermediêre toestand met óf optrek-geaktiveerde {DDxn, PORTxn} = 0b01) óf uitset laag ({DDxn, PORTxn} = 0b10) moet voorkom. Normaalweg is die optrek-geaktiveerde toestand ten volle aanvaarbaar, aangesien 'n hoë-impedante omgewing nie die verskil tussen 'n sterk hoë drywer en 'n optrek sal opmerk nie. As dit nie die geval is nie, kan die PUD-bis in die MCUCR-register ingestel word om alle optrekke in alle poorte te deaktiveer.
Om te wissel tussen insette met uittrek- en uitvoeruitset, genereer dieselfde probleem. Die gebruiker moet die drie-staat ({DDxn, PORTxn} = 0b00) of die uitset-hoë toestand ({DDxn, PORTxn} = 0b10) as 'n tussenstap gebruik.
Tabel 10-1 som die beheerseine vir die penwaarde op.
Tabel 10-1. Port Pin-konfigurasies
DDxn | PORTxn | PUD
(in MCUCR) |
I/O | Optrek | Lewer kommentaar |
0 | 0 | X | Invoer | Nee | Drietoestand (Hi-Z) |
0 | 1 | 0 | Invoer | Ja | Pxn sal stroom kry as ekst. laag getrek. |
0 | 1 | 1 | Invoer | Nee | Drietoestand (Hi-Z) |
1 | 0 | X | Uitset | Nee | Uitset laag (wasbak) |
1 | 1 | X | Uitset | Nee | Uitvoer hoog (bron) |
Lees die Pin-waarde
Onafhanklik van die instelling van Data Direction bit DDxn, kan die poortpen deur die PINxn Register-bit gelees word. Soos getoon in Figuur 10-2, die PINxn Register-bietjie en die voorafgaande grendel 'n sinkroniseerder. Dit is nodig om metastabiliteit te vermy as die fisiese pen van naby aan die rand van die interne klok verander, maar dit stel ook 'n vertraging in. Figuur 10-3 toon 'n tydsberekeningdiagram van die sinchronisasie wanneer 'n ekstern toegepaste penwaarde gelees word. Die maksimum en minimum voortplantingsvertragings word onderskeidelik tpd,max en tpd,min aangedui.
Beskou die klokperiode wat begin kort na die eerste val van die stelselklok. Die grendel is gesluit as die horlosie laag is en word deursigtig wanneer die horlosie hoog is, soos aangedui deur die skaduwee van die "SYNC LATCH" sein. Die seinwaarde word vasgelê wanneer die stelselklok laag word. Dit word in die PINxn Register geklok aan die daaropvolgende positiewe klokrand. Soos aangedui deur die twee pyle tpd, max en tpd, min, sal 'n enkele seinoorgang op die pen vertraag word tussen ½ en 1½ stelsel se klokperiode, afhangende van die tyd van die bewering.
Wanneer u 'n sagteware-toegekende penwaarde teruglees, moet 'n nop-instruksie ingevoeg word soos aangedui in Figuur 10-4. Die uit-instruksie stel die "SYNC LATCH" sein aan die positiewe rand van die klok. In hierdie geval is die vertraging tpd deur die sinkroniseerder een stelselklokperiode.
Die volgende kode, bvample wys hoe om poort B-penne 0 en 1 hoog, 2 en 3 laag te stel, en definieer die poortpenne van 4 tot 5 as invoer met 'n optrek wat aan poortpen 4 toegewys is. Die resulterende penwaardes word weer teruggelees, maar soos voorheen bespreek, is 'n nop-instruksie ingesluit om die waarde wat onlangs aan sommige van die penne toegeken is, terug te kan lees.
Vergaderingskode Example(1) |
…
; Definieer pull-ups en stel uitsette hoog ; Definieer aanwysings vir hawepenne 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 vir sinchronisasie nee ; Lees portpennetjies in r16, PINB … |
Let wel: Vir die samestellingsprogram word twee tydelike registers gebruik om die tyd te minimaliseer vanaf pull-ups is op penne 0, 1 en 4 gestel, totdat die rigtingpunte korrek ingestel is, wat bis 2 en 3 as laag definieer en bisse 0 en herdefinieer 1 as sterk hoë drywers.
C Kode Example |
ongetekende char i;
… /* Definieer optrekke en stel uitsette hoog */ /* Definieer aanwysings vir poortpenne */ PORTB = (1< DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0); /* Voeg nop in vir sinchronisasie*/ _GEEN P(); /* Lees poortpenne */ i = PINB; … |
Aktiveer digitale insette en slaapmodusse
Soos getoon in Figuur 10-2, kan die digitale insetsein clamped na grond by die inset van die schmitt-sneller. Die sein wat SLAAP in die figuur aangedui word, word deur die MCU-slaapbeheerder in Power-down-modus gestel om hoë kragverbruik te vermy as sommige insetseine sweef gelaat word, of 'n analoog seinvlak naby VCC/2 het.
SLEEP word oorheers vir poortpenne wat as eksterne onderbrekingspenne geaktiveer is. As die eksterne onderbrekingsversoek nie geaktiveer is nie, is SLEEP ook aktief vir hierdie penne. SLEEP word ook oorheers deur verskillende ander alternatiewe funksies soos beskryf in “Alternatiewe hawe-funksies” op bladsy 57.
As 'n logiese hoë vlak ("een") teenwoordig is op 'n asynchrone eksterne onderbrekingspen wat gekonfigureer is as "Onderbreking op stygende rand, dalende rand, of enige logiese verandering op pen" terwyl die eksterne onderbreking nie geaktiveer is nie, sal die ooreenstemmende eksterne onderbrekingsvlag ingestel word wanneer u vanaf die bogenoemde slaapmodus hervat, aangesien die clampIn hierdie slaapmodus word die verlangde logiese verandering veroorsaak.
Ongekoppelde penne
As sommige penne nie gebruik word nie, word dit aanbeveel om te verseker dat hierdie penne 'n gedefinieerde vlak het. Alhoewel die meeste digitale insette gedeaktiveer is in die diepslaap-modusse soos hierbo beskryf, moet drywende insette vermy word om die stroomverbruik te verminder in alle ander modusse waar die digitale insette geaktiveer is (Reset, Active mode en Idle mode).
Die eenvoudigste metode om 'n gedefinieerde vlak van 'n ongebruikte pen te verseker, is om die interne optrek moontlik te maak. In hierdie geval sal die optrek gedeaktiveer word tydens die herstel. As lae kragverbruik tydens terugstelling belangrik is, word dit aanbeveel om 'n eksterne optrek of aftrek te gebruik. Dit word nie aanbeveel om ongebruikte penne direk aan VCC of GND te koppel nie, aangesien dit oormatige strome kan veroorsaak as die pen per ongeluk as 'n uitset gekonfigureer word.
Alternatiewe hawe-funksies
Die meeste poortpennetjies het alternatiewe funksies, behalwe dat dit algemene digitale I / O's is. Figuur 10-5 toon aan hoe die poortpen seine vanaf die vereenvoudigde beheer Figuur 10-2 kan vervang word deur alternatiewe funksies. Die belangrikste seine is miskien nie in alle poortpennetjies nie, maar die figuur dien as 'n algemene beskrywing van toepassing op alle poortpennetjies in die AVR-mikrobeheerderfamilie.
Tabel 10-2. Generiese beskrywing van oorheersende seine vir alternatiewe funksies
Sein Naam | Volle Naam | Beskrywing |
PUOE | Optrek-ignoreer Aktiveer | As hierdie sein ingestel is, word die uittrek-instelling deur die PUOV-sein beheer. As hierdie sein uitgevee word, word die optrek geaktiveer wanneer
{DDxn, PORTxn, PUD} = 0b010. |
PUOV | Uittreksel-negatiewe waarde | As PUOE ingestel is, word die optrek geaktiveer / uitgeskakel wanneer PUOV ingestel / skoongemaak word, ongeag die instelling van die DDxn-, PORTxn- en PUD-registerbits. |
DDOE | Datarigting ignoreer Aktiveer | As hierdie sein ingestel is, word die uitsetbestuurder inskakel beheer deur die DDOV-sein. As hierdie sein uitgevee word, word die uitvoerbestuurder deur die DDxn Register-bit geaktiveer. |
DDOV | Waarde van die datarigting oorheers | As DDOE ingestel is, word die uitvoerbestuurder geaktiveer / gedeaktiveer wanneer DDOV ingestel / gewis word, ongeag die instelling van die DDxn Register-bietjie. |
PVOE | Oorskrywing van hawewaarde geaktiveer | As hierdie sein ingestel is en die uitsetbestuurder geaktiveer word, word die poortwaarde deur die PVOV-sein beheer. As PVOE skoongemaak word en die uitvoerbestuurder geaktiveer word, word die poortwaarde beheer deur die PORTxn Register-bietjie. |
PVOV | Waarde oorskry hawe | As PVOE ingestel is, word die poortwaarde op PVOV gestel, ongeag die instelling van die PORTxn Register-bietjie. |
PTOE | Port Toggle Negering Aktiveer | As PTOE ingestel is, word die PORTxn Register-bit omgekeer. |
DIEOE | Aktiveer digitale invoer oorskrywing | As hierdie bit ingestel is, word die Digital Input Enable beheer deur die DIEOV sein. As hierdie sein uitgevee word, word die Digital Input Enable bepaal deur die MCU-toestand (normale modus, slaapmodus). |
DIEOV | Digitale invoer aktiveer negatiewe waarde | As DIEOE ingestel is, word die digitale invoer geaktiveer / gedeaktiveer wanneer DIEOV ingestel / gewis word, ongeag die MCU-toestand (normale modus, slaapmodus). |
DI | Digitale invoer | Dit is die digitale invoer vir alternatiewe funksies. In die figuur word die sein gekoppel aan die uitset van die schmitt-trigger, maar voor die sinkroniseerder. Tensy die digitale invoer as 'n klokbron gebruik word, sal die module met die alternatiewe funksie sy eie sinkroniseerder gebruik. |
AIO | Analoog Invoer / Uitvoer | Dit is die analoge invoer / uitvoer na / van alternatiewe funksies. Die sein is direk aan die pad gekoppel en kan tweerigting gebruik word. |
Die volgende onderafdelings beskryf kortliks die alternatiewe funksies vir elke poort en bring die heersende seine in verband met die alternatiewe funksie. Verwys na die alternatiewe funksiebeskrywing vir verdere besonderhede.
Alternatiewe funksies van poort B
Die Port B-penne met alternatiewe funksie word in getoon Tabel 10-3.
Tabel 10-3. Poort B-penne Alternatiewe funksies
Port Pin | Alternatiewe funksie |
PB5 | ![]() RESET: herstel pin dW: debugWIRE I / O ADC0: ADC-invoerkanaal 0 PCINT5: Pin Change Interrupt, Bron 5 |
PB4 | XTAL2: kristal ossillator-uitset CLKO: stelselklok-uitvoer ADC2: ADC-insetkanaal 2
OC1B: Timer / Teller1 Vergelyk wedstryd B-uitvoer PCINT4: Pin Change Interrupt 0, Bron 4 |
PB3 | XTAL1: Kristal Ossillator Invoer CLKI: Eksterne Klok Invoer ADC3: ADC Invoer Kanaal 3
OC1B: Aanvullende timer / teller1 Vergelyk wedstryd B-uitvoer PCINT3: penwisseling onderbreek 0, bron 3 |
PB2 | SCK: Seriële klokinvoer ADC1: ADC-invoerkanaal 1
T0: Timer / Teller0 Klokbron USCK: USI-klok (drie-draadmodus) SCL: USI-klok (tweedraadmodus) INT0: eksterne onderbreking 0 Invoer PCINT2: penwissel-onderbreking 0, bron 2 |
PB1 | MISO: SPI-stamdata-invoer / slawe-data-uitvoer AIN1: analoog vergelyker, negatiewe insette OC0B: timer / teller 0, Bron 1 |
PB0 | MOSI :: SPI Master Data Output / Slave Data Input AIN0: Analog Comparator, Positive Input
OC0A: Timer/Teller0 Vergelyk Pas A-uitset OC1A: Aanvullende timer / toonbank1 Vergelyk wedstryd A-uitset DI: USI-data-invoer (draddraadmodus) SDA: USI-data-invoer (tweedraadmodus) AREF: eksterne analoog verwysing PCINT0: Pin Change Interrupt 0, Source 0 |
Poort B, bit 5 - RESET / dW / ADC0 / PCINT5
RESET: Externe Reset-invoer is laag en word geaktiveer deur die RSTDISBL-lont (“1”) te programmeer. Uittrek is geaktiveer en die uitvoerbestuurder en digitale invoer word gedeaktiveer as die pen as die RESET-pen gebruik word.
dW: Wanneer die debugWIRE Enable (DWEN) fuse geprogrammeer is en Lock bits nie geprogrammeer is nie, word die debugWIRE-stelsel binne die teikenapparaat geaktiveer. Die RESET-poortpennetjie is gekonfigureer as 'n draad-en (oop-drein) tweerigting-I / O-pen met optrek-ingeskakel en word die kommunikasiepoort tussen teiken en emulator.
ADC0: Analoog na digitaal omskakelaar, kanaal 0.
PCINT5: Pin Change Onderbreek bron 5.
Poort B, bit 4 - XTAL2 / CLKO / ADC2 / OC1B / PCINT4
XTAL2: Chip Clock Oscillator pin 2. Word gebruik as klokpen vir alle chipklokbronne behalwe interne kalibreerbare RC Oscillator en eksterne klok. As dit as 'n klokpen gebruik word, kan die pen nie as 'n I / O-pen gebruik word nie. As u interne kalibreerbare RC-oscillator of eksterne horlosie as 'n chipklokbron gebruik, dien PB4 as 'n gewone I / O-pen.
CLKO: Die verdeelde stelselklok kan op die pen PB4 uitgevoer word. Die verdeelde stelselklok word uitgevoer as die CKOUT-lont geprogrammeer is, ongeag die PORTB4- en DDB4-instellings. Dit sal ook uitgevoer word tydens die herstel.
ADC2: Analoog na digitaal omskakelaar, kanaal 2.
OC1B: Output Compare Match output: Die PB4-pen kan dien as 'n eksterne uitvoer vir die Timer / Counter1 Vergelyk Match B wanneer dit as 'n output (DDB4-stel) ingestel is. Die OC1B-pen is ook die uitvoerpen vir die PWM-modus-timerfunksie.
PCINT4: Pin Change Onderbreek bron 4.
Poort B, bit 3 - XTAL1 / CLKI / ADC3 / OC1B / PCINT3
XTAL1: Chip Clock Oscillator pin 1. Word gebruik vir alle chipklokbronne behalwe interne kalibreerbare RC-ossillators. As dit as 'n klokpen gebruik word, kan die pen nie as 'n I / O-pen gebruik word nie.
CLKI: Klokinvoer vanaf 'n eksterne klokbron, sien “Eksterne horlosie” op bladsy 26.
ADC3: Analoog na digitaal omskakelaar, kanaal 3.
OC1B: Inverted Output Compare Match output: Die PB3-pen kan dien as 'n eksterne uitvoer vir die Timer / Counter1 Vergelyk Match B wanneer dit as 'n output (DDB3-stel) ingestel is. Die OC1B-pen is ook die omgekeerde uitvoerpen vir die PWM-modus-timerfunksie.
PCINT3: Pin Change Onderbreek bron 3.
Poort B, bit 2 - SCK / ADC1 / T0 / USCK / SCL / INT0 / PCINT2
SCK: Master Clock-uitvoer, Slave Clock-invoerpen vir SPI-kanaal. Wanneer die SPI as slaaf geaktiveer is, word hierdie pen as 'n invoer gekonfigureer ongeag die instelling van DDB2. Wanneer die SPI as Master geaktiveer word, word die datarigting van hierdie pen deur DDPB2 beheer. As die pen deur die SPI gedwing word om 'n invoer te wees, kan die optrek nog steeds deur die PORTB2-bit beheer word.
ADC1: Analoog na digitaal omskakelaar, kanaal 1.
T0: Timer / Teller0 toonbankbron.
USCK: drieledige modus Universele seriële koppelvlakklok.
SCL: Tweedraadmodus Seriële klok vir USI Tweedraadmodus.
INT0: Eksterne onderbrekingsbron 0.
PCINT2: Pin Change Onderbreek bron 2.
Poort B, bit 1 - MISO / AIN1 / OC0B / OC1A / DO / PCINT1
MISO: Master Data invoer, Slave Data output pin vir SPI kanaal. Wanneer die SPI as 'n Master geaktiveer is, word hierdie pen as 'n invoer ingestel, ongeag die instelling van DDB1. Wanneer die SPI as slaaf geaktiveer word, word die datarigting van hierdie pen deur DDB1 beheer. As die pen deur die SPI gedwing word om 'n invoer te wees, kan die optrek steeds deur die PORTB1-bietjie beheer word.
AIN1: Analoge vergelyker negatiewe invoer. Stel die poortpen in as invoer met die interne optrek uitgeskakel om te verhoed dat die digitale poortfunksie die funksie van die Analog Comparator inmeng.
OC0B: Uitset Vergelyk die uitset. Die PB1-pen kan dien as 'n eksterne uitvoer vir die Timer / Teller0 Vergelyk wedstryd B. Die PB1-pen moet as 'n uitvoer (DDB1-stel (een)) gekonfigureer word om hierdie funksie te kan bedien. Die OC0B-pen is ook die uitvoerpen vir die PWM-modus-timerfunksie.
OC1A: Output Compare Match-uitset: Die PB1-pen kan dien as 'n eksterne output vir die Timer / Counter1 Vergelyk Match B wanneer dit as 'n output (DDB1-stel) ingestel is. Die OC1A-pen is ook die uitvoerpen vir die PWM-modus-timerfunksie.
DOEN: Driedraadmodus Universal Serial Interface Data-uitvoer. Driedraadmodus Data-uitvoer oorheers die PORTB1-waarde en word na die poort gedryf as die datarigtingsbit DDB1 (een) ingestel is. PORTB1 maak steeds die optrek moontlik as die rigting ingevoer word en PORTB1 (een) ingestel is.
PCINT1: Pin Change Onderbreek bron 1.
Poort B, bit 0 - MOSI / AIN0 / OC0A / OC1A / DI / SDA / AREF / PCINT0
MOSI: SPI Master Data-uitvoer, Slave Data-invoer vir SPI-kanaal. Wanneer die SPI as 'n slaaf geaktiveer is, word hierdie pen as 'n invoer ingestel, ongeag die instelling van DDB0. Wanneer die SPI as Master geaktiveer word, word die datarigting van hierdie pen deur DDB0 beheer. As die pen deur die SPI gedwing word om 'n invoer te wees, kan die optrek steeds deur die PORTB0-bietjie beheer word.
AIN0: Positiewe invoer van analoog vergelyker. Stel die poortpen in as invoer met die interne optrek uitgeskakel om te verhoed dat die digitale poortfunksie die funksie van die Analog Comparator inmeng.
OC0A: Uitset Vergelyk wedstryduitsette. Die PB0-pen kan dien as 'n eksterne uitvoer vir die Timer / Counter0 Vergelyk Match A wanneer dit as 'n output ingestel is (DDB0-stel (een)). Die OC0A-pen is ook die uitvoerpen vir die PWM-modus-timerfunksie.
OC1A: Inverted Output Compare Match output: Die PB0-pen kan dien as 'n eksterne uitvoer vir die Timer / Counter1 Vergelyk Match B wanneer dit as 'n output (DDB0-stel) ingestel is. Die OC1A-pen is ook die omgekeerde uitvoerpen vir die PWM-modus-timerfunksie.
SDA: tweedraadmodus-seriële koppelvlakdata.
AREF: Eksterne analoog verwysing vir ADC. Pullup- en uitvoerbestuurder word op PB0 gedeaktiveer as die pen as 'n eksterne verwysing of Interne Voltage Verwysing met eksterne kondensator by die AREF -pen.
DI: data-invoer in USI-draddraadmodus. USI Driedraadmodus vervang normale poortfunksies nie, dus moet die pen as 'n invoer vir DI-funksie ingestel word.
PCINT0: Pin Change Onderbreek bron 0.
Tabel 10-4 en Tabel 10-5 bring die alternatiewe funksies van poort B in verband met die belangrikste seine in Figuur 10-5 op bladsy 58.
Tabel 10-4. Oorheersende seine vir alternatiewe funksies in PB[5:3]
Sein Naam | PB5 / RESET / ADC0 / PCINT5 | PB4/ADC2/XTAL2/ OC1B/PCINT4 | PB3/ADC3/XTAL1/ OC1B/PCINT3 |
PUOE | ![]() |
0 | 0 |
PUOV | 1 | 0 | 0 |
DDOE | RSTDISBL(1) • DWEN(1) | 0 | 0 |
DDOV | debugWire Transmit | 0 | 0 |
PVOE | 0 | OC1B Inskakel | ![]() OC1B Inskakel |
PVOV | 0 | OC1B | OC1B |
PTOE | 0 | 0 | 0 |
DIEOE | ![]() RSTDISBL(1) + (PCINT5 • PCIE + ADC0D) |
PCINT4 • PCIE + ADC2D | PCINT3 • PCIE + ADC3D |
DIEOV | ADC0D | ADC2D | ADC3D |
DI | PCINT5-invoer | PCINT4-invoer | PCINT3-invoer |
AIO | RESET Invoer, ADC0 Invoer | ADC2-invoer | ADC3-invoer |
Let wel: wanneer die lont “0” is (geprogrammeer).
Tabel 10-5. Oorheersende seine vir alternatiewe funksies in PB[2:0]
Sein Naam | PB2/SCK/ADC1/T0/ USCK/SCL/INT0/PCINT2 | PB1/MISO/DO/AIN1/ OC1A/OC0B/PCINT1 | PB0/MOSI/DI/SDA/AIN0/AR EF/OC1A/OC0A/
PCINT0 |
PUOE | USI_TWO_WIRE | 0 | USI_TWO_WIRE |
PUOV | 0 | 0 | 0 |
DDOE | USI_TWO_WIRE | 0 | USI_TWO_WIRE |
DDOV | (USI_SCL_HOLD + PORTB2) • DDB2 | 0 | ![]() ![]() (SDA + PORTB0) • DDB0 |
PVOE | USI_TWO_WIRE • DDB2 | OC0B Inskakel + OC1A Inskakel + USI_THREE_WIRE | ![]() OC0A Inskakel + OC1A Inskakel + (USI_TWO_WIRE DDB0) |
PVOV | 0 | OC0B + OC1A + DOEN | ![]() OC0A + OC1A |
PTOE | USITC | 0 | 0 |
DIEOE | PCINT2 • PCIE + ADC1D + USISIE | PCINT1 • PCIE + AIN1D | PCINT0 • PCIE + AIN0D + USISIE |
DIEOV | ADC1D | AIN1D | AIN0D |
DI | T0 / USCK / SCL / INT0 /
PCINT2-invoer |
PCINT1-invoer | DI / SDA / PCINT0-invoer |
AIO | ADC1-invoer | Analoog vergelyker negatiewe invoer | Analoog vergelyker Positiewe insette |
Registerbeskrywing
MCUCR - MCU-kontroleregister
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x35 | BODS | PUD | SE | SM1 | SM0 | LYF | ISC01 | ISC00 | MCUCR |
Lees/Skryf | R | R/W | R/W | R/W | R/W | R | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit 6 - PUD: Pull-up Disable
Wanneer hierdie bietjie aan een geskryf word, word die optrekkings in die I / O-poorte uitgeskakel, selfs al is die DDxn- en PORTxn-registers so ingestel dat die optrekkings moontlik is ({DDxn, PORTxn} = 0b01). Sien “Stel die pen vas” op bladsy 54 vir meer besonderhede oor hierdie funksie.
PORTB - Port B Data Register
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x18 | – | – | PORTB5 | PORTB4 | PORTB3 | PORTB2 | PORTB1 | PORTB0 | PORTB |
Lees/Skryf | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
DDRB - Port B Data Direction Register
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x17 | – | – | DDB5 | DDB4 | DDB3 | DDB2 | DDB1 | DDB0 | DDRB |
Lees/Skryf | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Aanvangswaarde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PINB - Poort B-invoerpunte-adres
Bietjie | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x16 | – | – | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 | PINB |
Lees/Skryf | R | R | R/W | R/W | R/W | R/W | R/W | R/W | |
Aanvangswaarde | 0 | 0 | NVT | NVT | NVT | NVT | NVT | NVT |
8-bit timer / toonbank0 met PWM
Kenmerke
Twee eenhede vir onafhanklike uitsette wat vergelyk word
Dubbel gebufferde uitsette vergelyk registers
Wis timer by vergelyking (outomatiese herlaai)
Glitchvrye, fase-korrekte polsbreedte-modulator (PWM)
Veranderlike PWM-periode
Frekwensiegenerator
Drie onafhanklike onderbrekingsbronne (TOV0, OCF0A en OCF0B)
verbyview
Timer / Counter0 is 'n algemene 8-bis-timer / counter-module, met twee onafhanklike uitvoer-vergelykende eenhede, en met PWM-ondersteuning. Dit laat akkurate tydsbestek vir programuitvoering (gebeurtenisbestuur) en golfgenerering toe.
'N Vereenvoudigde blokdiagram van die 8-bis-timer / teller word in getoon Figuur 11-1. Vir die werklike plasing van I / O-penne, verwys na “Pinout ATtiny25 / 45/85” op bladsy 2. CPU-toeganklike I / O-registers, insluitend I / O-stukkies en I / O-penne, word vet aangedui. Die toestelspesifieke I / O-register en bitlokasies word in die “Registerbeskrywing” op bladsy 77.
Die Timer/Counter (TCNT0) en Output Compare Registers (OCR0A en OCR0B) is 8-bis registers. Onderbrekingsversoek (afgekort tot Int.Req. in die figuur) seine is almal sigbaar in die Timer Interrupt Flag Register (TIFR). Alle onderbrekings word individueel gemasker met die Timer Interrupt Mask Register (TIMSK). TIFR en TIMSK word nie in die figuur getoon nie.
Die Timer/Teller kan intern geklok word, via die voorskaaler, of deur 'n eksterne klokbron op die T0-pen. Die klokkieslogikablok beheer watter klokbron en -rand die timer/teller gebruik om sy waarde te verhoog (of te verlaag). Die Timer/Teller is onaktief wanneer geen klokbron gekies is nie. Die uitset van die klokkieslogika word na verwys as die timerklok (clkT0).
Die dubbel gebufferde uitvoervergelykingsregisters (OCR0A en OCR0B) word te alle tye met die timer / tellerwaarde vergelyk. Die resultaat van die vergelyking kan deur die Waveform Generator gebruik word om 'n PWM of veranderlike frekwensie-uitset op die Output Compare-penne (OC0A en OC0B) te genereer. Sien “Vergelyk eenheid vir uitvoer” op bladsy 69. vir besonderhede. Die Vergelyk-wedstryd-geleentheid sal ook die Vergelykvlag (OCF0A of OCF0B) instel wat gebruik kan word om 'n onderbrekingsversoek vir uitsetvergelykings te genereer.
Definisies
Baie register- en bitverwysings in hierdie afdeling is in algemene vorm geskryf. 'N' klein 'vervang' die timer / teller-nommer, in hierdie geval 0. 'n Kleine letter 'x' vervang die uitvoer-vergelykingseenheid, in hierdie geval Vergelyk eenheid A of vergelyk eenheid B. As u egter die register of bit definieer, in 'n program moet die presiese vorm gebruik word, dws TCNT0 vir toegang tot die tellerwaarde van die timer / teller0, ensovoorts.
Die definisies in Tabel 11-1 word ook deur die hele dokument uitgebrei.
Tabel 11-1. Definisies
Konstant | Beskrywing |
ONDER | Die toonbank bereik ONDER as dit 0x00 word |
MAKS | Die teller bereik sy MAXimum as dit 0xFF word (desimaal 255) |
BO | Die teller bereik die TOP wanneer dit gelyk is aan die hoogste waarde in die telvolgorde. Die TOP-waarde kan toegeken word as die vaste waarde 0xFF (MAX) of die waarde wat in die OCR0A-register gestoor word. Die opdrag hang af van die werkswyse |
Timer / toonbank voorskakelaar en klokbronne
Die timer / toonbank kan geklok word deur 'n interne of 'n eksterne klokbron. Die klokbron word gekies deur die Clock Select-logika wat beheer word deur die Clock Select (c) -bits wat in die Timer / Counter0 Control Register (TCCR0B) geleë is.
Interne klokbron met prescaler
Timer/Teller0 kan direk deur die stelselklok geklok word (deur die CS0[2:0] = 1 te stel). Dit bied die vinnigste werking, met 'n maksimum tydhouer/teenklokfrekwensie gelyk aan stelselklokfrekwensie (fCLK_I/O). Alternatiewelik kan een van vier krane van die voorskaaler as 'n klokbron gebruik word. Die voorafgeskaalde horlosie het 'n frekwensie van óf
Prescaler herstel
Die voorverkoeler werk vryelik, dit wil sê, dit werk onafhanklik van die klokkeuse -logika van timer/teller0. Aangesien die prescaler nie beïnvloed word deur die timer/teller se klokkeuse nie, sal die toestand van die voorcalkaler implikasies hê vir situasies waar 'n vooraf afgeskaalde klok gebruik word. Een eksampDie leë van 'n voorskaal -artefak is wanneer die tydteller/teller geaktiveer en geklok word deur die voorskaler (6> CS0 [2: 0]> 1). Die aantal stelselkloksiklusse vanaf die tydsberekening tot die eerste telling kan plaasvind, kan van 1 tot N+1 stelselkloksiklusse wees, waar N gelyk is aan die voorverdeler (8, 64, 256 of 1024).
Dit is moontlik om die Prescaler Reset te gebruik om die timer / teller te sinchroniseer om die program uit te voer.
Eksterne horlosiebron
'n Eksterne klokbron wat op die T0-pen toegepas word, kan as tydhouer/toonbank (clkT0) gebruik word. Die T0-pen is sampgelei een keer elke stelsel klok siklus deur die pin sinchronisasie logika. Die gesinchroniseerde (aampled) sein word dan deurgegee
deur die randmelder. Figuur 11-2 toon 'n funksionele ekwivalente blokdiagram van die T0-sinchronisasie en randdetektorlogika. Die registers word geklok by die positiewe rand van die interne stelselklok (clkI/O). Die grendel is deursigtig in die hoë tydperk van die interne stelselklok.
Die randdetektor genereer een clkT0-puls vir elke positiewe (CS0[2:0] = 7) of negatiewe (CS0[2:0] = 6) rand wat dit bespeur.
Die OCR0x-registers word dubbel gebuffer wanneer u een van die PWM-modusse (Pulse Width Modulation) gebruik. Vir die normale en Clear Timer on Compare-modus (CTC) is die dubbele buffer afgeskakel. Die dubbele buffer sinchroniseer die opdatering van die OCR0x Vergelyk registers aan die bokant of onderkant van die telvolgorde. Die sinkronisasie verhoed dat die voorkoms van vreemde lengte, nie-simmetriese PWM-pulse voorkom, wat die uitset glad maak.
Die toegang tot OCR0x-register lyk miskien ingewikkeld, maar dit is nie die geval nie. As die dubbele buffering geaktiveer is, het die SVE toegang tot die OCR0x-bufferregister, en indien die dubbele buffer is uitgeskakel, sal die SVE direk toegang tot die OCR0x hê.
Kraguitset Vergelyk
In nie-PWM-golfvorm-genereringsmodusse kan die vergelykingsuitset van die vergelyker geforseer word deur 'n een aan die Force Output Compare (FOC0x) -bit te skryf. Forseer vergelykingswedstryd sal nie die OCF0x-vlag instel of die timer herlaai / uitvee nie, maar die OC0x-pen sal opgedateer word asof 'n regte vergelykingswedstryd plaasgevind het (die COM0x [1: 0] bis-instellings definieer of die OC0x-pen ingestel is, skoongemaak word of omgeskakel).
Vergelyk wedstrydblokkering volgens TCNT0 Skryf
Alle CPU-skryfbewerkings in die TCNT0-register sal enige vergelykingswedstryd wat in die volgende timerkloksiklus voorkom, blokkeer, selfs nie as die timer stop nie. Met hierdie funksie kan OCR0x tot dieselfde waarde as TCNT0 geïnisialiseer word sonder om 'n onderbreking te veroorsaak wanneer die timer / toonbankklok geaktiveer is.
Gebruik die eenheid vir uitvoervergelyking
Aangesien die skryf van TCNT0 in enige werkswyse alle Vergelykingswedstryde vir een timerkloksiklus sal blokkeer, is daar risiko's verbonde aan die verandering van TCNT0 wanneer u die uitvoer-vergelykingseenheid gebruik, ongeag of die timer / toonbank loop of nie. As die waarde wat aan TCNT0 geskryf is, gelyk is aan die OCR0x-waarde, sal die Vergelyk ooreenstemming gemis word, wat tot verkeerde golfvormgenerering lei. Moet ook nie die TCNT0-waarde gelyk aan ONDERSTE skryf as die teller aftel nie.
Die instelling van die OC0x moet uitgevoer word voordat u die Data Direction Register instel vir die poort om uit te voer. Die maklikste manier om die OC0x-waarde in te stel, is om die Force Output Compare (FOC0x) strobe-stukkies in die normale modus te gebruik. Die OC0x-registers hou hul waardes, selfs al wissel hulle tussen golfvormgenerasie-modusse.
Let daarop dat die COM0x [1: 0] bisse nie dubbel gebuffer is saam met die vergelykingswaarde nie. Die verandering van die COM0x [1: 0] stukkies tree onmiddellik in werking.
Vergelyk Match Output Unit
Die Vergelyk uitvoermodus (COM0x [1: 0]) -bits het twee funksies. Die golfvormgenerator gebruik die COM0x [1: 0] bisse om die uitsetvergelykingsstatus (OC0x) by die volgende vergelykingsmetode te definieer. Ook die COM0x [1: 0] bisse beheer die OC0x-penuitvoerbron. Figuur 11-6 toon 'n vereenvoudigde skema van die logika wat beïnvloed word deur die COM0x [1: 0] bit-instelling. Die I / O-registers, I / O-stukkies en I / O-penne in die figuur word vet aangedui. Slegs die dele van die algemene I / O-poortbeheerregisters (DDR en PORT) wat deur die COM0x [1: 0] bisse geraak word, word getoon. As u na die OC0x-toestand verwys, is die verwysing na die interne OC0x-register, nie die OC0x-pen nie. As 'n stelselherstel plaasvind, word die OC0x-register op '0' teruggestel.
Wanneer OC0A / OC0B aan die I / O-pen gekoppel is, hang die funksie van die COM0A [1: 0] / COM0B [1: 0] bis af van die WGM0 [2: 0] bis-instelling. Tabel 11-2 toon die COM0x [1: 0] bis funksionaliteit wanneer die WGM0 [2: 0] bisse op 'n normale of CTC modus (nie-PWM) ingestel is.
Tabel 11-2. Vergelyk uitsetmodus, nie-PWM-modus
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskrywing |
0 | 0 | Normale poortwerking, OC0A / OC0B ontkoppel. |
0 | 1 | Skakel OC0A / OC0B in op Vergelyk wedstryd |
1 | 0 | Maak OC0A / OC0B skoon by Vergelyk wedstryd |
1 | 1 | Stel OC0A / OC0B op Vergelyk wedstryd |
Tabel 11-3 toon die COM0x [1: 0] bis funksionaliteit wanneer die WGM0 [2: 0] bisse op die vinnige PWM-modus gestel is.
Tabel 11-3. Vergelyk uitsetmodus, vinnige PWM-modus(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskrywing |
0 | 0 | Normale poortwerking, OC0A / OC0B ontkoppel. |
0 | 1 | Voorbehou |
1 | 0 | Maak OC0A / OC0B skoon op Vergelyk wedstryd, stel OC0A / OC0B onder (nie-inverterende modus) |
1 | 1 | Stel OC0A / OC0B op Vergelyk wedstryd, maak OC0A / OC0B skoon onder (omkeermodus) |
Let wel: 'n Spesiale geval vind plaas wanneer OCR0A of OCR0B gelyk is aan TOP en COM0A1/COM0B1 gestel is. In hierdie geval word die vergelyking geïgnoreer, maar die stel of skoonmaak word onderaan gedoen. Sien “Vinnige PWM-modus” op bladsy 73 vir meer besonderhede.
Tabel 11-4 toon die COM0x [1: 0] bis funksionaliteit wanneer die WGM0 [2: 0] bisse ingestel is op fase korrekte PWM modus.
Tabel 11-4. Vergelyk uitsetmodus, fasekorrekte PWM-modus(1)
COM0A1 COM0B1 | COM0A0 COM0B0 | Beskrywing |
0 | 0 | Normale poortwerking, OC0A / OC0B ontkoppel. |
0 | 1 | Voorbehou |
1 | 0 | Maak OC0A / OC0B skoon by Vergelyk wedstryd wanneer u optel. Stel OC0A / OC0B op Vergelyk wedstryd wanneer u aftel. |
1 | 1 | Stel OC0A / OC0B op Vergelyk wedstryd wanneer u optel. Maak OC0A / OC0B skoon by Vergelyk wedstryd wanneer u aftel. |
Let wel: 1. 'n Spesiale geval vind plaas wanneer OCR0A of OCR0B gelyk is aan TOP en COM0A1/COM0B1 gestel is. In hierdie geval word die Vergelyk Wedstryd geïgnoreer, maar die stel of verwydering word BO gedoen. Sien “Fase-korrekte PWM-modus” op bladsy 74 vir meer besonderhede.
Bits 3: 2 - Res: Voorbehou Bits
Hierdie stukkies is gereserveerde stukkies in die ATtiny25 / 45/85 en sal altyd as nul gelees word.
Bits 1: 0 - WGM0 [1: 0]: Golfvormgenerasie-modus
Gekombineer met die WGM02-bis wat in die TCCR0B-register voorkom, beheer hierdie bisse die telvolgorde van die teller, die bron vir maksimum (TOP) tellerwaarde en watter tipe golfvormopwekking gebruik moet word, sien Tabel 11-5. Bedryfsmodusse wat deur die timer / teller-eenheid ondersteun word, is: Normale modus (teller), Duidelike timer op vergelyk ooreenstemmende (CTC) modus, en twee soorte Pulsbreedte modulasie (PWM) modusse (sien “Werkswyses” op bladsy 71).
Tabel 11-5. Golfvormgenerasiemodus Bietjiebeskrywing
Modus | WGM 02 | WGM 01 | WGM 00 | Tyd- / toonbank-modus | BO | Opdatering van OCRx by | TOV-vlag aan |
0 | 0 | 0 | 0 | Normaal | 0xff | Onmiddellik | MAKS(1) |
1 | 0 | 0 | 1 | PWM, fase korrek | 0xff | BO | ONDER(2) |
2 | 0 | 1 | 0 | CTC | OCRA | Onmiddellik | MAKS(1) |
3 | 0 | 1 | 1 | Vinnige PWM | 0xff | ONDER(2) | MAKS(1) |
4 | 1 | 0 | 0 | Voorbehou | – | – | – |
5 | 1 | 0 | 1 | PWM, fase korrek | OCRA | BO | ONDER(2) |
6 | 1 | 1 | 0 | Voorbehou | – | – | – |
7 | 1 | 1 | 1 | Vinnige PWM | OCRA | ONDER(2) | BO |
Bit 7 - FOC0A: Vergelyk die kraguitset A
Die FOC0A-bit is slegs aktief as die WGM-bis 'n nie-PWM-modus spesifiseer.
Om versoenbaarheid met toekomstige toestelle te verseker, moet hierdie bit egter op nul gestel word wanneer TCCR0B geskryf word wanneer dit in die PWM-modus werk. As u 'n logiese een aan die FOC0A-bit skryf, word die Vergelykingsmaatreël onmiddellik gedwing op die Waveform Generation-eenheid. Die OC0A-uitvoer word verander volgens die instelling van COM0A [1: 0] bis. Let daarop dat die FOC0A-bit as 'n strobe geïmplementeer word. Daarom is dit die waarde wat in die COM0A [1: 0] bisse is wat die effek van die gedwonge vergelyking bepaal.
'N FOC0A-strobe sal geen onderbreking genereer nie, en die timer in CTC-modus sal ook nie verwyder word deur OCR0A as TOP te gebruik nie. Die FOC0A-bietjie word altyd as nul gelees.
Bit 6 - FOC0B: Vergelyk kraguitset B
Die FOC0B-bietjie is slegs aktief as die WGM-bis 'n nie-PWM-modus spesifiseer.
Om versoenbaarheid met toekomstige toestelle te verseker, moet hierdie bit egter op nul gestel word wanneer TCCR0B geskryf word wanneer dit in die PWM-modus werk. Wanneer u 'n logiese een aan die FOC0B-bit skryf, word die Waveform Generation-eenheid onmiddellik geforseer. Die OC0B-uitvoer word verander volgens die instelling van COM0B [1: 0]. Let daarop dat die FOC0B-bit as 'n strobe geïmplementeer word. Daarom is dit die waarde wat in die COM0B [1: 0] bisse is wat die effek van die gedwonge vergelyking bepaal.
'N FOC0B-strobe sal geen onderbreking genereer nie, en dit sal ook nie die timer in CTC-modus verwyder met OCR0B as TOP nie.
Die FOC0B-bietjie word altyd as nul gelees.
Bits 5: 4 - Res: Voorbehou Bits
Hierdie stukkies is gereserveerde stukkies in die ATtiny25 / 45/85 en sal altyd as nul gelees word.
Bit 3 - WGM02: Waveform Generation Mode
Sien die beskrywing in die “TCCR0A - Register vir timer / tellerbeheer A” op bladsy 77.
Bits 2: 0 - CS0 [2: 0]: klok kies
Die drie Clock Select-stukkies kies die klokbron wat deur die timer / teller gebruik moet word.
Tabel 11-6. Klok Kies Bit Beskrywing
CS02 | CS01 | CS00 | Beskrywing |
0 | 0 | 0 | Geen klokbron (timer / teller gestop) |
0 | 0 | 1 | clI/O/(Geen voorafskaal nie) |
0 | 1 | 0 | clkI/O/8 (Vanaf voorskaaler) |
0 | 1 | 1 | clkI/O/64 (Vanaf voorskaaler) |
1 | 0 | 0 | clkI/O/256 (Vanaf voorskaaler) |
1 | 0 | 1 | clkI/O/1024 (Vanaf voorskaaler) |
1 | 1 | 0 | Eksterne horlosiebron op T0-pen. Horlosie op valrand. |
1 | 1 | 1 | Eksterne horlosiebron op T0-pen. Horlosie op stygende rand. |
As eksterne penmodusse vir die timer / teller0 gebruik word, sal oorgange op die T0-pen die teller klok, selfs al is die pen as 'n uitset gekonfigureer. Met hierdie funksie kan u die sagteware beheer.
Eenhede teë te werk en te vergelyk
Die Timer / Counter1 algemene werking word in die asynchrone modus beskryf en die werking in die sinchroon-modus word slegs genoem as daar verskille tussen hierdie twee modusse is. Figuur 12-2 toon Timer / Counter 1 sinchronisasie register blokdiagram en sinkronisasie vertragings tussen registers. Let daarop dat alle klokhekbesonderhede nie in die figuur getoon word nie. Die Timer / Counter1-registerwaardes gaan deur die interne sinchronisasieregisters, wat die insetsinkronisasievertraging veroorsaak, voordat dit die tellerwerking beïnvloed. Die registers TCCR1, GTCCR, OCR1A, OCR1B en OCR1C kan weer gelees word nadat u die register geskryf het. Die terugleeswaardes word vertraag vir die Timer / Counter1 (TCNT1) register en vlaggies (OCF1A, OCF1B en TOV1) as gevolg van die inset- en uitsetsinkronisering.
Die Timer / Counter1 het 'n hoë resolusie en 'n hoë akkuraatheidsgebruik met die laer voorskalingsgeleenthede. Dit kan ook twee akkurate 8-bis-pulsbreedte-modulators met 'n hoë spoed, met behulp van kloksnelhede tot 64 MHz (of 32 MHz in lae spoedmodus) ondersteun. In hierdie modus dien Timer / Counter1 en die uitvoervergelykingsregisters as dubbele losstaande PWM's met nie-oorvleuelende nie-omgekeerde en omgekeerde uitsette. Verwys na bladsy 86 vir 'n gedetailleerde beskrywing van hierdie funksie. Net so maak die hoë voorskalingsgeleenthede hierdie eenheid nuttig vir laer spoedfunksies of presiese tydsberekeningfunksies met ongereelde handelinge.
Figuur 12-2. Timer/Teller 1 Sinchronisasie Register Blokdiagram.
Timer / Counter1 en die voorskakelaar laat toe dat u die SVE vanaf enige klokbron laat loop terwyl die voorskakelaar op die vinnige 64 MHz (of 32 MHz in lae spoedmodus) PCK-klok in die asynchrone modus werk.
Let daarop dat die stelselklokfrekwensie laer moet wees as een derde van die PCK-frekwensie. Die sinchronisasie-meganisme van die asynchrone timer / teller1 benodig ten minste twee kante van die PCK wanneer die stelselklok hoog is. As die frekwensie van die stelselklok te hoog is, is die risiko dat data of beheerwaardes verlore gaan.
Die volgende Figuur 12-3 toon die blokdiagram vir Timer / Teller1.
Tabel 12-1. Vergelyk modus Kies in PWM-modus
COM1x1 | COM1x0 | Effek op uitset Vergelyk penne |
0 | 0 | OC1x nie gekoppel nie. OC1x nie gekoppel nie. |
0 | 1 | OC1x skoongemaak op vergelykingswedstryd. Stel wanneerTCNT1 = $ 00. OC1x ingestel op vergelyk wedstryd. Uitgevee wanneer TCNT1 = $ 00. |
1 | 0 | OC1x skoongemaak op vergelykingswedstryd. Stel wanneer TCNT1 = $ 00. OC1x nie gekoppel nie. |
1 | 1 | OC1x Stel op vergelyk wedstryd. Uitgevee wanneer TCNT1 = $ 00. OC1x nie gekoppel nie. |
ADC Eienskappe
Tabel 21-8. ADC-eienskappe, enkelbeëindigde kanale. TA = -40°C tot +85°C
Simbool | Parameter | Toestand | Min | Tipe | Maks | Eenhede |
Resolusie | 10 | Stukkies | ||||
Absolute akkuraatheid (insluitend INL-, DNL- en kwantisasie-, wins- en verrekeningsfoute) | 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 Ruisverminderingsmodus |
1.5 | LSB | ||||
VREF = 4V, VCC = 4V,
ADC-klok = 1 MHz Ruisverminderingsmodus |
2.5 | LSB | ||||
Integrale nie-lineariteit (INL) (akkuraatheid na verrekening en versterkingskalibrasie) | VREF = 4V, VCC = 4V,
ADC-klok = 200 kHz |
1 | LSB | |||
Differensiële nie-lineariteit (DNL) | VREF = 4V, VCC = 4V,
ADC-klok = 200 kHz |
0.5 | LSB | |||
Kry fout | VREF = 4V, VCC = 4V,
ADC-klok = 200 kHz |
2.5 | LSB | |||
Verrekeningsfout | VREF = 4V, VCC = 4V,
ADC-klok = 200 kHz |
1.5 | LSB | |||
Omskakelingstyd | Gratis hardloop omskakeling | 14 | 280 | μs | ||
Klokfrekwensie | 50 | 1000 | kHz | |||
VIN | Invoer Voltage | GND | VREF | V | ||
Invoerbandwydte | 38.4 | kHz | ||||
AREF | Eksterne verwysing Voltage | 2.0 | VCC | V | ||
WINT | Interne Voltage Verwysing | 1.0 | 1.1 | 1.2 | V | |
Interne 2.56V verwysing (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | 32 | kΩ | ||||
REËN | Weerstand teen analoog insette | 100 | MΩ | |||
ADC-uitvoer | 0 | 1023 | LSB |
Let wel: 1. Waardes is slegs riglyne.
Tabel 21-9. ADC-kenmerke, differensiële kanale (unipolêre modus). TA = -40°C tot +85°C
Simbool | Parameter | Toestand | Min | Tipe | Maks | Eenhede |
Resolusie | Wins = 1x | 10 | Stukkies | |||
Wins = 20x | 10 | Stukkies | ||||
Absolute akkuraatheid (insluitend INL, DNL en
Kwantisasie-, wins- en verrekeningsfoute) |
Wins = 1x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
10.0 | LSB | |||
Wins = 20x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
20.0 | LSB | ||||
Integrale nie-lineêriteit (INL) (akkuraatheid na verrekening en versterkingskalibrasie) | Wins = 1x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
4.0 | LSB | |||
Wins = 20x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
10.0 | LSB | ||||
Kry fout | Wins = 1x | 10.0 | LSB | |||
Wins = 20x | 15.0 | LSB | ||||
Verrekeningsfout | Wins = 1x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
3.0 | LSB | |||
Wins = 20x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
4.0 | LSB | ||||
Omskakelingstyd | Gratis hardloop omskakeling | 70 | 280 | μs | ||
Klokfrekwensie | 50 | 200 | kHz | |||
VIN | Invoer Voltage | GND | VCC | V | ||
VDIFF | Invoerdifferensiaal Voltage | VREF/wins | V | |||
Invoerbandwydte | 4 | kHz | ||||
AREF | Eksterne verwysing Voltage | 2.0 | VCC – 1.0 | V | ||
WINT | Interne Voltage Verwysing | 1.0 | 1.1 | 1.2 | V | |
Interne 2.56V verwysing (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | Weerstand vir invoer van verwysings | 32 | kΩ | |||
REËN | Weerstand teen analoog insette | 100 | MΩ | |||
ADC-omskakelingsuitset | 0 | 1023 | LSB |
Let wel: Waardes is slegs riglyne.
Tabel 21-10. ADC-eienskappe, differensiële kanale (bipolêre modus). TA = -40°C tot +85°C
Simbool | Parameter | Toestand | Min | Tipe | Maks | Eenhede |
Resolusie | Wins = 1x | 10 | Stukkies | |||
Wins = 20x | 10 | Stukkies | ||||
Absolute akkuraatheid (insluitend INL, DNL en
Kwantisasie-, wins- en verrekeningsfoute) |
Wins = 1x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
8.0 | LSB | |||
Wins = 20x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
8.0 | LSB | ||||
Integrale nie-lineêriteit (INL) (akkuraatheid na verrekening en versterkingskalibrasie) | Wins = 1x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
4.0 | LSB | |||
Wins = 20x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
5.0 | LSB | ||||
Kry fout | Wins = 1x | 4.0 | LSB | |||
Wins = 20x | 5.0 | LSB | ||||
Verrekeningsfout | Wins = 1x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
3.0 | LSB | |||
Wins = 20x
VREF = 4V, VCC = 5V ADC-klok = 50 - 200 kHz |
4.0 | LSB | ||||
Omskakelingstyd | Gratis hardloop omskakeling | 70 | 280 | μs | ||
Klokfrekwensie | 50 | 200 | kHz | |||
VIN | Invoer Voltage | GND | VCC | V | ||
VDIFF | Invoerdifferensiaal Voltage | VREF/wins | V | |||
Invoerbandwydte | 4 | kHz | ||||
AREF | Eksterne verwysing Voltage | 2.0 | VCC – 1.0 | V | ||
WINT | Interne Voltage Verwysing | 1.0 | 1.1 | 1.2 | V | |
Interne 2.56V verwysing (1) | VCC > 3.0V | 2.3 | 2.56 | 2.8 | V | |
RREF | Weerstand vir invoer van verwysings | 32 | kΩ | |||
REËN | Weerstand teen analoog insette | 100 | MΩ | |||
ADC-omskakelingsuitset | -512 | 511 | LSB |
Instruksiestelselopsomming
Mnemonics | operande | Beskrywing | Operasie | Vlae | #Klokke |
ARITMETIESE EN LOGIESE INSTRUKSIES | |||||
VOEG TOE | Rd, Rr | Voeg twee registers by | Rd ← Rd + Rr | Z, C, N, V, H | 1 |
ADC | Rd, Rr | Voeg met Carry twee registers by | Rd ← Rd + Rr + C | Z, C, N, V, H | 1 |
ADIW | Rdl, K | Voeg onmiddellik by Word | Rdh:Rdl ← Rdh:Rdl + K | Z, C, N, V, S | 2 |
SUB | Rd, Rr | Trek twee registers af | Rd ← Rd – Rr | Z, C, N, V, H | 1 |
OP | Rd, K. | Trek die konstante van die register af | Rd ← Rd – K | Z, C, N, V, H | 1 |
SBC | Rd, Rr | Trek af met twee registers | Rd ← Rd – Rr – C | Z, C, N, V, H | 1 |
SBCI | Rd, K. | Trek af met Carry Constant van Reg. | Rd ← Rd – K – C | Z, C, N, V, H | 1 |
SBIW | Rdl, K | Trek onmiddellik van Word af | Rdh:Rdl ← Rdh:Rdl – K | Z, C, N, V, S | 2 |
EN | Rd, Rr | Logiese EN registers | Rd ← Rd ∙ Rr | Z, N, V | 1 |
ANDI | Rd, K. | Logies EN Register en konstant | Rd ← Rd ∙ K | Z, N, V | 1 |
OR | Rd, Rr | Logiese OF registers | Rd ← Rd v Rr | Z, N, V | 1 |
ORI | Rd, K. | Logies OF Register en konstant | Rd ← Rd v K | Z, N, V | 1 |
EOR | Rd, Rr | Eksklusiewe OF registers | Rd ← Rd ⊕ Rr | Z, N, V | 1 |
COM | Rd | 'N Mens se aanvulling | Rd ← 0xFF − Rd | Z, C, N, V | 1 |
NEG | Rd | Twee's Komplement | Rd ← 0x00 − Rd | Z, C, N, V, H | 1 |
SBR | Rd, K | Stel bit (s) in Register | Rd ← Rd v K | Z, N, V | 1 |
CBR | Rd, K | Vee bietjie (s) in register uit | Rd ← Rd ∙ (0xFF – K) | Z, N, V | 1 |
INC | Rd | Verhoog | Rd ← Rd + 1 | Z, N, V | 1 |
DES | Rd | decrement | Rd ← Rd − 1 | Z, N, V | 1 |
TST | Rd | Toets vir nul of minus | Rd ← Rd ∙ Rd | Z, N, V | 1 |
CLR | Rd | Maak register skoon | Rd ← Rd ⊕ Rd | Z, N, V | 1 |
SER | Rd | Stel Register in | Rd ← 0xFF | Geen | 1 |
TAKINSTRUKSIES | |||||
RJMP | k | Relatiewe sprong | PC ← PC + k + 1 | Geen | 2 |
IJMP | Indirekte Spring na (Z) | PC ← Z | Geen | 2 | |
BEL | k | Relatiewe subroetine-oproep | PC ← PC + k + 1 | Geen | 3 |
ICALL | Indirekte oproep na (Z) | PC ← Z | Geen | 3 | |
RET | Subroetine-terugkeer | PC ← STAPEL | Geen | 4 | |
NETWERKE | Onderbreek terugkeer | PC ← STAPEL | I | 4 | |
CPSE | Rd, Rr | Vergelyk, slaan oor as gelyk | indien (Rd = Rr) PC ← PC + 2 of 3 | Geen | 1/2/3 |
CP | Rd, Rr | Vergelyk | Rd - Rr | Z, N, V, C, H | 1 |
CPC | Rd, Rr | Vergelyk met Carry | Rd − Rr − C | Z, N, V, C, H | 1 |
VPI | Rd, K | Vergelyk Register met Onmiddellike | Rd - K | Z, N, V, C, H | 1 |
SBRC | Rr, b | Slaan oor as bietjie in register uitgevee is | indien (Rr(b)=0) PC ← PC + 2 of 3 | Geen | 1/2/3 |
SBRS | Rr, b | Slaan oor as Bit in Register ingestel is | indien (Rr(b)=1) PC ← PC + 2 of 3 | Geen | 1/2/3 |
SBIC | P, b | Slaan oor as bietjie in I / O-register uitgevee is | indien (P(b)=0) PC ← PC + 2 of 3 | Geen | 1/2/3 |
SBIS | P, b | Slaan oor as 'n bietjie in die I / O-register ingestel is | indien (P(b)=1) PC ← PC + 2 of 3 | Geen | 1/2/3 |
BRBS | s, k | Vertakking as statusvlag ingestel is | as (SREG(s) = 1) dan PC←PC+k + 1 | Geen | 1/2 |
BRBC | s, k | Vertakking as statusvlag uitgevee word | as (SREG(s) = 0) dan PC←PC+k + 1 | Geen | 1/2 |
BREQ | k | Tak as Gelyk | as (Z = 1) dan PC ← PC + k + 1 | Geen | 1/2 |
BRNE | k | Tak indien nie gelyk nie | as (Z = 0) dan PC ← PC + k + 1 | Geen | 1/2 |
BRCS | k | Takk as draerstel | as (C = 1) dan PC ← PC + k + 1 | Geen | 1/2 |
BRCC | k | Vertakking as vervoer skoongemaak word | as (C = 0) dan PC ← PC + k + 1 | Geen | 1/2 |
BRSH | k | Tak as dieselfde of hoër | as (C = 0) dan PC ← PC + k + 1 | Geen | 1/2 |
BRLO | k | Vertak as dit laer is | as (C = 1) dan PC ← PC + k + 1 | Geen | 1/2 |
BRMI | k | Tak as minus | as (N = 1) dan PC ← PC + k + 1 | Geen | 1/2 |
BRPL | k | Tak as Plus | as (N = 0) dan PC ← PC + k + 1 | Geen | 1/2 |
BRGE | k | Tak as groter of gelyk, onderteken | as (N ⊕ V= 0) dan PC ← PC + k + 1 | Geen | 1/2 |
BRLT | k | Tak as minder as nul, Geteken | as (N ⊕ V= 1) dan PC ← PC + k + 1 | Geen | 1/2 |
BRHS | k | Vertak as 'n halwe dra vlagstel | as (H = 1) dan PC ← PC + k + 1 | Geen | 1/2 |
BRHC | k | Vertakking as halfdraende vlag skoongemaak word | as (H = 0) dan PC ← PC + k + 1 | Geen | 1/2 |
BRTS | k | Vertak as T-vlag stel | as (T = 1) dan PC ← PC + k + 1 | Geen | 1/2 |
BRTC | k | Vertakking as T-vlag skoongemaak word | as (T = 0) dan PC ← PC + k + 1 | Geen | 1/2 |
BRVS | k | Vertak as oorloopvlag ingestel is | as (V = 1) dan PC ← PC + k + 1 | Geen | 1/2 |
BRVC | k | Vertakking as vloedvlag uitgevee is | as (V = 0) dan PC ← PC + k + 1 | Geen | 1/2 |
BRIEF | k | Tak as onderbreking geaktiveer | as (I = 1) dan PC ← PC + k + 1 | Geen | 1/2 |
BRUID | k | Tak as onderbreking gedeaktiveer | as (I = 0) dan PC ← PC + k + 1 | Geen | 1/2 |
BIT- EN BIT-TOETSINSTRUKSIES | |||||
SBI | P, b | Stel bit in I / O Register | I/O(P,b) ← 1 | Geen | 2 |
CBI | P, b | Vee bietjie uit in I / O-register | I/O(P,b) ← 0 | Geen | 2 |
LSL | Rd | Logiese skuif links | Rd(n+1) ← Rd(n), Rd(0) ← 0 | Z, C, N, V | 1 |
LSR | Rd | Logiese skuif na regs | Rd(n) ← Rd(n+1), Rd(7) ← 0 | Z, C, N, V | 1 |
ROL | Rd | Draai links deur dra | Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) | Z, C, N, V | 1 |
ROR | Rd | Draai regs deur dra | Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) | Z, C, N, V | 1 |
ASR | Rd | Rekenkundige skuif regs | Rd(n) ← Rd(n+1), n=0..6 | Z, C, N, V | 1 |
Mnemonics | operande | Beskrywing | Operasie | Vlae | #Klokke |
RUIL | Rd | Ruil Nibbles | Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) | Geen | 1 |
BSET | s | Vlagstel | SREG(e) ← 1 | SREG (s) | 1 |
BCLR | s | Vlag skoon | SREG(e) ← 0 | SREG (s) | 1 |
BST | Rr, b | Bitstoor vanaf register na T | T ← Rr(b) | T | 1 |
BLD | Rd, b | Bietjie lading van T na Register | Rd(b) ← T | Geen | 1 |
SEC | Stel Carry | C ← 1 | C | 1 | |
CLC | Maak skoon | C ← 0 | C | 1 | |
SEN | Stel negatiewe vlag | N ← 1 | N | 1 | |
CLN | Duidelike negatiewe vlag | N ← 0 | N | 1 | |
SEZ | Stel nul vlag | Z ← 1 | Z | 1 | |
CLZ | Maak geen vlag skoon nie | Z ← 0 | Z | 1 | |
SEI | Globale onderbreking aktiveer | ek ← 1 | I | 1 | |
CLI | Globale onderbreking deaktiveer | ek ← 0 | I | 1 | |
SES | Stel ondertekende toetsvlag | S ← 1 | S | 1 | |
CLS | Duidelik onderteken toetsvlag | S ← 0 | S | 1 | |
SEV | Stel 'n oorvloei van twee aanvullings. | V ← 1 | V | 1 | |
CLV | Maak die oorvloei van twee aanvullings skoon | V ← 0 | V | 1 | |
STEL | Stel T in SREG | T ← 1 | T | 1 | |
CLT | Maak T skoon in SREG | T ← 0 | T | 1 | |
SEH | Stel 'n halwe dravlag in SREG | H ← 1 | H | 1 | |
CLH | Vee die helfte dra vlag in SREG uit | H ← 0 | H | 1 | |
INSTRUKSIES VIR DATA-OORDRAG | |||||
MOV | Rd, Rr | Skakel tussen registers | Rd ← Rr | Geen | 1 |
MOVW | Rd, Rr | Kopieer Register Word | Rd+1:Rd ← Rr+1:Rr | Geen | 1 |
LDI | Rd, K. | Laai onmiddellik | Rd ← K | Geen | 1 |
LD | Rd, X | Laai indirek | Rd ← (X) | Geen | 2 |
LD | Rd, X + | Load Indirect en Post-Inc. | Rd ← (X), X ← X + 1 | Geen | 2 |
LD | Rd, - X | Laai indirek en voor-Desember. | X ← X – 1, Rd ← (X) | Geen | 2 |
LD | Rd, Y | Laai indirek | Rd ← (Y) | Geen | 2 |
LD | Rd, Y + | Load Indirect en Post-Inc. | Rd ← (Y), Y ← Y + 1 | Geen | 2 |
LD | Rd, - Y | Laai indirek en voor-Desember. | Y ← Y – 1, Rd ← (Y) | Geen | 2 |
LDD | Rd, Y + q | Laai indirek met verplasing | Rd ← (Y + q) | Geen | 2 |
LD | Rd, Z | Laai indirek | Rd ← (Z) | Geen | 2 |
LD | Rd, Z + | Load Indirect en Post-Inc. | Rd ← (Z), Z ← Z+1 | Geen | 2 |
LD | Rd, -Z | Laai indirek en voor-Desember. | Z ← Z – 1, Rd ← (Z) | Geen | 2 |
LDD | Rd, Z + q | Laai indirek met verplasing | Rd ← (Z + q) | Geen | 2 |
LDS | Rd, k | Laai direk vanaf SRAM | Rd ← (k) | Geen | 2 |
ST | X, Rr | Stoor indirek | (X) ← Rr | Geen | 2 |
ST | X +, Rr | Store Indirekte en Post-Inc. | (X) ← Rr, X ← X + 1 | Geen | 2 |
ST | - X, Rr | Stoor indirek en voor-Desember. | X ← X – 1, (X) ← Rr | Geen | 2 |
ST | Y, Rr | Stoor indirek | (Y) ← Rr | Geen | 2 |
ST | Y +, Rr | Store Indirekte en Post-Inc. | (Y) ← Rr, Y ← Y + 1 | Geen | 2 |
ST | - Y, Rr | Stoor indirek en voor-Desember. | Y ← Y – 1, (Y) ← Rr | Geen | 2 |
STD | Y + q, Rr | Stoor indirek met verplasing | (Y + q) ← Rr | Geen | 2 |
ST | Z, Rr | Stoor indirek | (Z) ← Rr | Geen | 2 |
ST | Z +, Rr | Store Indirekte en Post-Inc. | (Z) ← Rr, Z ← Z + 1 | Geen | 2 |
ST | -Z, Rr | Stoor indirek en voor-Desember. | Z ← Z – 1, (Z) ← Rr | Geen | 2 |
STD | Z + q, Rr | Stoor indirek met verplasing | (Z + q) ← Rr | Geen | 2 |
STS | k, rr | Stoor direk by SRAM | (k) ← Rr | Geen | 2 |
LPM | Laai programgeheue | R0 ← (Z) | Geen | 3 | |
LPM | Rd, Z | Laai programgeheue | Rd ← (Z) | Geen | 3 |
LPM | Rd, Z + | Laai programgeheue en Post-Inc | Rd ← (Z), Z ← Z+1 | Geen | 3 |
SPM | Stoor programgeheue | (z) ← R1:R0 | Geen | ||
IN | Rd, P. | In die hawe | Rd ← P | Geen | 1 |
UIT | P, Rr | Uit hawe | P ← Rr | Geen | 1 |
DRUK | Rr | Druk Register op stapel | STAPEL ← Rr | Geen | 2 |
POP | Rd | Popregistreer vanaf Stack | Rd ← STAPEL | Geen | 2 |
MCU BEHEERINSTRUKSIES | |||||
NOP | Geen operasie | Geen | 1 | ||
SLAAP | Slaap | (sien spesifieke beskrywing vir slaapfunksie) | Geen | 1 | |
WDR | Die waghond is teruggestel | (sien spesifieke beskrywing vir WDR / timer) | Geen | 1 | |
BREEK | Breek |
Spoed (MHz) (1) | Aanbod Voltage (V) | Temperatuurreeks | Pakket (2) | Bestelkode (3) |
10 | 1.8 – 5.5 | Industriële
(-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 | Industriële
(-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 |
Opmerkings: 1. Vir spoed vs. aanbod voltage, sien afdeling 21.3 “Spoed” op bladsy 163.
Alle verpakkings is Pb-vry, haliedvry en volledig groen en voldoen aan die Europese richtlijn vir die beperking van gevaarlike stowwe (RoHS).
Kode aanwysers
H: NiPdAu-afwerking
U: mat blik
R: band en katrol
Hierdie toestelle kan ook in wafervorm verskaf word. Kontak u plaaslike Atmel-verkoopskantoor vir gedetailleerde bestelinligting en minimum hoeveelhede.
misdruk
Errata ATtiny25
Die hersieningsbrief in hierdie afdeling verwys na die hersiening van die ATtiny25-toestel.
Ds D - F
Geen errata bekend nie.
Ds B - C
EEPROM lees kan misluk by lae toevoer voltage / lae klokfrekwensie
EEPROM lees kan misluk by lae toevoer voltage / lae klokfrekwensie
Probeer EEPROM lees teen lae klokfrekwensies en/of lae toevoer voltage kan ongeldige data tot gevolg hê.
Probleemoplossing / oplossing
Moenie die EEPROM gebruik as die klokfrekwensie laer is as 1MHz en die toevoer voltage is onder 2V. As die bedryfsfrekwensie nie bo 1MHz verhoog kan word nie, moet voltage moet meer as 2V wees. Net so, as aanbod voltage kan nie bo 2V verhoog word nie, dan moet die werkfrekwensie meer as 1MHz wees.
Dit is bekend dat hierdie funksie temperatuurafhanklik is, maar dit word nie gekenmerk nie. Riglyne word slegs vir kamertemperatuur gegee.
Ds A
Nie sampled.
Errata ATtiny45
Die hersieningsbrief in hierdie afdeling verwys na die hersiening van die ATtiny45-toestel.
Ds F - G
Geen errata bekend nie
Ds D - E
EEPROM lees kan misluk by lae toevoer voltage / lae klokfrekwensie
EEPROM lees kan misluk by lae toevoer voltage / lae klokfrekwensie
Probeer EEPROM lees teen lae klokfrekwensies en/of lae toevoer voltage kan ongeldige data tot gevolg hê.
Probleemoplossing / oplossing
Moenie die EEPROM gebruik as die klokfrekwensie laer is as 1MHz en die toevoer voltage is onder 2V. As die bedryfsfrekwensie nie bo 1MHz verhoog kan word nie, moet voltage moet meer as 2V wees. Net so, as aanbod voltage kan nie bo 2V verhoog word nie, dan moet die werkfrekwensie meer as 1MHz wees.
Dit is bekend dat hierdie funksie temperatuurafhanklik is, maar dit word nie gekenmerk nie. Riglyne word slegs vir kamertemperatuur gegee.
Ds B - C
PLL sluit nie
EEPROM gelees vanaf toepassingskode werk nie in Lock Bit Mode 3 nie
EEPROM lees kan misluk by lae toevoer voltage / lae klokfrekwensie
Timerteller 1 PWM-produksie op OC1B- XOC1B werk nie korrek nie
PLL sluit nie
By frekwensies onder 6.0 MHz sal die PLL nie sluit nie
Probleemoplossing / oplossing
As u die PLL gebruik, moet u op 6.0 MHz of hoër werk.
EEPROM gelees vanaf toepassingskode werk nie in Lock Bit Mode 3 nie
Wanneer die geheuesslotbits LB2 en LB1 in modus 3 geprogrammeer is, werk EEPROM-lees nie vanaf die toepassingskode nie.
Probleemoplossing / werk rond
Moenie Lock Bit Protection Mode 3 instel as die toepassingskode van EEPROM moet lees nie.
EEPROM lees kan misluk by lae toevoer voltage / lae klokfrekwensie
Probeer EEPROM lees teen lae klokfrekwensies en/of lae toevoer voltage kan ongeldige data tot gevolg hê.
Probleemoplossing / oplossing
Moenie die EEPROM gebruik as die klokfrekwensie laer is as 1MHz en die toevoer voltage is onder 2V. As die bedryfsfrekwensie nie bo 1MHz verhoog kan word nie, moet voltage moet meer as 2V wees. Net so, as aanbod voltage kan nie bo 2V verhoog word nie, dan moet die werkfrekwensie meer as 1MHz wees.
Dit is bekend dat hierdie funksie temperatuurafhanklik is, maar dit word nie gekenmerk nie. Riglyne word slegs vir kamertemperatuur gegee.
Timerteller 1 PWM-produksie op OC1B - XOC1B werk nie korrek nie
Timerteller1 PWM-uitvoer OC1B-XOC1B werk nie korrek nie. Slegs in die geval wanneer die kontrolebits, COM1B1 en COM1B0 in dieselfde modus is as onderskeidelik COM1A1 en COM1A0, werk die OC1B-XOC1B-uitvoer korrek.
Probleemoplossing / werk rond
Die enigste oplossing is om dieselfde beheerinstelling op COM1A [1: 0] en COM1B [1: 0] -beheerstukke te gebruik, sien tabel 14-4 in die datablad. Die probleem is reggestel vir Tiny45 rev D.
Ds A
Te hoë kragverbruik
DebugWIRE verloor kommunikasie wanneer 'n enkele persoon onderbreek
PLL sluit nie
EEPROM gelees vanaf toepassingskode werk nie in Lock Bit Mode 3 nie
EEPROM lees kan misluk by lae toevoer voltage / lae klokfrekwensie
Te hoë kragverbruik
Drie situasies sal lei tot 'n te hoë kragverbruik. Hierdie is:
'N Eksterne horlosie word deur sekerings gekies, maar die I / O-PORT is steeds as uitset geaktiveer.
Die EEPROM word gelees voordat die krag afgeskakel word.
VCC is 4.5 volt of hoër.
Vrywaring: Die inligting in hierdie dokument word verskaf in verband met Atmel-produkte. Geen lisensie, uitdruklik of geïmpliseer, deur estoppel of andersins, aan enige intellektuele eiendomsreg word deur hierdie dokument of in verband met die verkoop van Atmel-produkte toegestaan nie. BEHALWE SOOS VERPAAL IN DIE ATMEL BEPALINGS EN VOORWAARDES VAN VERKOOP GELEE OP DIE ATMEL WEBWEBWERF, ATMEL AANVAAR GEEN AANSPREEKLIKHEID ENIGE AANSPREEKLIKHEID NIE EN WYS ENIGE UITDRUKLIKE, GEÏSPLISEERDE OF STATUTÊRE WAARBORG MET BETREKKING TOT SY PRODUKTE, INSLUITEND, MAAR NIE BEPERK TOT, DIE GEÏSPLISEERDE WAARBORG VAN VERHANDELBAARHEID, NIE-GESKIKTHEID VIR 'N GESKIKTHEID, GESKIKTHEID. IN GEEN GEVAL SAL ATMEL AANSPREEKLIK WEES VIR ENIGE DIREKTE, INDIREKTE, GEVOLLIKE, STRAF-, SPESIALE OF TOVALSLIKE SKADE (INSLUITEND, SONDER BEPERKING, SKADE VIR VERLIES EN WINSTE, BESIGHEIDSONDERBREKING, OF VERLIES VAN DIE GEBRUIK VAN GEBRUIK OF VERLIES) HIERDIE DOKUMENT, SELFS AL IS ATMEL IN kennis gestel VAN DIE MOONTLIKHEID VAN SULKE SKADE.
Atmel maak geen voorstellings of waarborge met betrekking tot die akkuraatheid of volledigheid van die inhoud van hierdie dokument nie en behou die reg voor om enige tyd sonder kennisgewing veranderinge aan spesifikasies en produkbeskrywings aan te bring. Atmel maak geen verbintenis om die inligting hierin vervat op te dateer nie. Tensy spesifiek anders bepaal, is Atmel-produkte nie geskik vir, en sal nie gebruik word in, motortoepassings nie. Atmel-produkte is nie bedoel, gemagtig of gewaarborg vir gebruik as komponente in toepassings wat bedoel is om lewe te ondersteun of te onderhou nie.