Atmel

Atmel 8-Bit AVR-Mikrocontroller mit 2/4/8 KBytes In-System programmierbarem FlashChip

 

Merkmale

  • Leistungsstarker, stromsparender AVR® 8-Bit-Mikrocontroller
  • Erweiterte RISC-Architektur
  • 120 Leistungsstarke Anweisungen - Die meisten Ausführungen mit einem Taktzyklus
  • 32 x 8 Allzweck-Arbeitsregister
  • Voll statischer Betrieb
  • Nichtflüchtige Programm- und Datenspeicher
  • 2/4/8 KBytes im System programmierbarer Programmspeicher-Flash
  • Ausdauer: 10,000 Schreib-/Löschzyklen
  • 128/256/512 Bytes im System programmierbares EEPROM
  • Ausdauer: 100,000 Schreib-/Löschzyklen
  • 128/256/512 Byte interner SRAM
  • Programmiersperre für selbstprogrammierendes Flash-Programm und EEPROM-Datensicherheit

Periphere Funktionen

  • 8-Bit-Timer/Zähler mit Prescaler und zwei PWM-Kanälen
  • 8-Bit-Hochgeschwindigkeitstimer/-zähler mit separatem Prescaler
  • 2 Hochfrequenz-PWM-Ausgänge mit separaten Ausgangsvergleichsregistern
  • Programmierbarer Totzeitgenerator
  • USI – Universal Serial Interface mit Start Condition Detector
  • 10-Bit-ADC

4 Single Ended-Kanäle

2 differentielle ADC-Kanalpaare mit programmierbarer Verstärkung (1x, 20x)

Temperaturmessung

Programmierbarer Watchdog-Timer mit separatem On-Chip-Oszillator

On-Chip-Analogkomparator

Spezielle Mikrocontroller-Funktionen

debugWIRE On-Chip-Debugsystem

Im System programmierbar über den SPI-Port

Externe und interne Interruptquellen

Niedriger Stromverbrauch im Leerlauf, ADC-Rauschunterdrückung und Abschaltmodi

Verbesserter Power-On-Reset-Schaltkreis

Programmierbarer Spannungsabfall-Erkennungsschaltkreis

Interner kalibrierter Oszillator

E / A und Pakete

Sechs programmierbare I/O-Leitungen

8-poliger PDIP, 8-poliger SOIC, 20-Pad QFN/MLF und 8-poliger TSSOP (nur ATtiny45/V)

Betriebslautstärketage
– 1.8 – 5.5 V für ATtiny25V/45V/85V
– 2.7 – 5.5 V für ATtiny25/45/85

Geschwindigkeitsstufe
– 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

Industrieller Temperaturbereich

Geringer Stromverbrauch

Aktiver Modus:

1 MHz, 1.8 V: 300 µA

Ausschaltmodus:

Pin-Konfigurationen

Pinbelegung ATtiny25/45/85 Konfiguration

Pin-Beschreibungen

VCC: Angebotsvolumentage.
GND: Masse.
Port B (PB5:PB0): Port B ist ein 6-Bit-bidirektionaler I/O-Port mit internen Pull-Up-Widerständen (für jedes Bit ausgewählt). Die Ausgangspuffer von Port B haben symmetrische Antriebseigenschaften mit hoher Senken- und Quellenkapazität. Als Eingänge liefern die Pins von Port B, die extern nach unten gezogen werden, Strom, wenn die Pull-Up-Widerstände aktiviert werden. Die Pins von Port B werden in den Dreizustand versetzt, wenn ein Reset-Zustand aktiv wird, selbst wenn die Uhr nicht läuft.

Port B dient auch den Funktionen verschiedener Sonderfunktionen des ATtiny25/45/85 wie aufgeführt
Bei ATtiny25 werden die programmierbaren I/O-Ports PB3 und PB4 (Pins 2 und 3) im ATtiny15-Kompatibilitätsmodus ausgetauscht, um die Abwärtskompatibilität mit ATtiny15 zu unterstützen.

RESET: Reset-Eingang. Ein Low-Pegel an diesem Pin, der länger als die Mindestimpulslänge anliegt, erzeugt einen Reset, auch wenn die Uhr nicht läuft und der Reset-Pin nicht deaktiviert wurde. Die Mindestimpulslänge ist angegeben in Tabelle 21-4 auf Seite 165. Kürzere Impulse führen nicht unbedingt zu einem Reset.

Der Reset-Pin kann auch als (schwacher) I/O-Pin verwendet werden.

Überview

Der ATtiny25/45/85 ist ein stromsparender 8-Bit-CMOS-Mikrocontroller, der auf der AVR-Enhanced-RISC-Architektur basiert. Durch die Ausführung leistungsstarker Befehle in einem einzigen Taktzyklus erreicht der ATtiny25/45/85 Durchsätze von nahezu 1 MIPS pro MHz, sodass der Systementwickler den Stromverbrauch im Verhältnis zur Verarbeitungsgeschwindigkeit optimieren kann.

Blockschaltbild Blockdiagramm

Der AVR-Kern kombiniert einen umfangreichen Befehlssatz mit 32 Allzweck-Arbeitsregistern. Alle 32 Register sind direkt mit der Arithmetic Logic Unit (ALU) verbunden, sodass auf zwei unabhängige Register in einem einzigen Befehl zugegriffen werden kann, der in einem Taktzyklus ausgeführt wird. Die resultierende Architektur ist Code-effizienter und erzielt Durchsätze, die bis zu zehnmal schneller sind als bei herkömmlichen CISC-Mikrocontrollern.

Der ATtiny25/45/85 bietet die folgenden Funktionen: 2/4/8 KByte In-System Programmable Flash, 128/256/512 Byte EEPROM, 128/256/256 Byte SRAM, 6 allgemeine I/O-Leitungen, 32 allgemeine Arbeitsregister, ein 8-Bit-Timer/Zähler mit Vergleichsmodi, ein 8-Bit-Hochgeschwindigkeits-Timer/Zähler, Universal Serial Interface, interne und externe Interrupts, ein 4-Kanal-, 10-Bit-ADC, ein programmierbarer Watchdog-Timer mit internem Oszillator und drei per Software wählbare Energiesparmodi. Der Leerlaufmodus stoppt die CPU, während SRAM, Timer/Zähler, ADC, Analogkomparator und Interruptsystem weiter funktionieren. Der Power-Down-Modus speichert den Registerinhalt und deaktiviert alle Chipfunktionen bis zum nächsten Interrupt oder Hardware-Reset. Der ADC-Rauschunterdrückungsmodus stoppt die CPU und alle E/A-Module außer ADC, um das Schaltrauschen während ADC-Konvertierungen zu minimieren.

Das Gerät wird mit der hochdichten nichtflüchtigen Speichertechnologie von Atmel hergestellt. Der On-Chip-ISP-Flash ermöglicht die Neuprogrammierung des Programmspeichers im System über eine SPI-Seriellschnittstelle, durch einen herkömmlichen nichtflüchtigen Speicherprogrammierer oder durch einen On-Chip-Bootcode, der auf dem AVR-Kern ausgeführt wird.

Der ATtiny25/45/85 AVR wird mit einer vollständigen Suite von Programm- und Systementwicklungstools unterstützt, darunter: C-Compiler, Makro-Assembler, Programm-Debugger/Simulatoren und Evaluierungskits.

Informationen zu Ressourcen

Ein umfassender Satz von Entwicklungstools, Anwendungshinweisen und Datenblättern steht unter zum Download zur Verfügung http://www.atmel.com/avr.

Code Bspamples

Diese Dokumentation enthält einfachen Code examples, die kurz zeigen, wie verschiedene Teile des Geräts verwendet werden. Diese Code-ExampEs wird davon ausgegangen, dass der teilespezifische Header file ist vor der Kompilierung enthalten. Beachten Sie, dass nicht alle C-Compiler-Anbieter Bitdefinitionen im Header enthalten files und Interrupt-Behandlung in C ist Compiler-abhängig. Bitte bestätigen Sie mit der C-Compiler-Dokumentation für weitere Details.

Für E/A-Register in der erweiterten E/A-Zuordnung müssen die Anweisungen „IN“, „OUT“, „SBIS“, „SBIC“, „CBI“ und „SBI“ durch Anweisungen ersetzt werden, die den Zugriff auf erweiterte E/A ermöglichen. Normalerweise bedeutet dies „LDS“ und „STS“ in Kombination mit „SBRS“, „SBRC“, „SBR“ und „CBR“. Beachten Sie, dass nicht alle AVR-Geräte eine erweiterte E/A-Zuordnung enthalten.

Kapazitive Berührungssensorik

Die Atmel QTouch Library bietet eine einfach zu verwendende Lösung für berührungsempfindliche Schnittstellen auf Atmel AVR-Mikrocontrollern. Die QTouch Library unterstützt die Erfassungsmethoden QTouch® und QMatrix®.

Die Touch-Sensorik lässt sich ganz einfach zu jeder Anwendung hinzufügen, indem Sie die QTouch-Bibliothek verknüpfen und die Anwendungsprogrammierschnittstelle (API) der Bibliothek verwenden, um die Touch-Kanäle und -Sensoren zu definieren. Die Anwendung ruft dann die API auf, um Kanalinformationen abzurufen und den Status des Touch-Sensors zu bestimmen.

Die QTouch-Bibliothek ist kostenlos und kann von der Atmel-Website heruntergeladen werden. webWebsite. Weitere Informationen und Einzelheiten zur Implementierung finden Sie im QTouch Library User Guide – ebenfalls erhältlich bei Atmel webWebsite.

Datenaufbewahrung

Die Ergebnisse der Zuverlässigkeitsqualifizierung zeigen, dass die prognostizierte Fehlerrate bei der Datenspeicherung bei 1 °C über 20 Jahre bzw. bei 85 °C über 100 Jahre deutlich unter 25 PPM liegt.

AVR-CPU-Kern

Einführung

In diesem Abschnitt wird die AVR-Kernarchitektur im Allgemeinen erläutert. Die Hauptfunktion des CPU-Kerns besteht darin, die korrekte Programmausführung sicherzustellen. Die CPU muss daher in der Lage sein, auf Speicher zuzugreifen, Berechnungen durchzuführen, Peripheriegeräte zu steuern und Interrupts zu verarbeiten.

Architektonisches Überview Architektur

Um Leistung und Parallelität zu maximieren, verwendet der AVR eine Harvard-Architektur – mit separaten Speichern und Bussen für Programm und Daten. Anweisungen im Programmspeicher werden mit einer einstufigen Pipelining-Methode ausgeführt. Während eine Anweisung ausgeführt wird, wird die nächste Anweisung aus dem Programmspeicher vorab abgerufen. Dieses Konzept ermöglicht die Ausführung von Anweisungen in jedem Taktzyklus. Der Programmspeicher ist ein im System umprogrammierbarer Flash-Speicher.

Das Schnellzugriffsregister File enthält 32 x 8-Bit-Allzweck-Arbeitsregister mit einer Zugriffszeit von einem einzigen Taktzyklus. Dies ermöglicht den Betrieb einer Arithmetik-Logik-Einheit (ALU) mit einem einzigen Zyklus. Bei einer typischen ALU-Operation werden zwei Operanden aus dem Register ausgegeben File, die Operation wird ausgeführt und das Ergebnis wird wieder im Register gespeichert File– in einem Taktzyklus.

Sechs der 32 Register können als drei 16-Bit-Zeiger für indirekte Adressregister zur Datenraumadressierung verwendet werden – was effiziente Adressberechnungen ermöglicht. Einer dieser Adresszeiger kann auch als Adresszeiger für Nachschlagetabellen im Flash-Programmspeicher verwendet werden. Diese zusätzlichen Funktionsregister sind die 16-Bit-X-, Y- und Z-Register, die später in diesem Abschnitt beschrieben werden.

Die ALU unterstützt arithmetische und logische Operationen zwischen Registern oder zwischen einer Konstanten und einem Register. In der ALU können auch Einzelregisteroperationen ausgeführt werden. Nach einer arithmetischen Operation wird das Statusregister aktualisiert, um Informationen über das Ergebnis der Operation wiederzugeben.

Der Programmfluss wird durch bedingte und unbedingte Sprung- und Aufrufanweisungen gewährleistet, die den gesamten Adressraum direkt ansprechen können. Die meisten AVR-Anweisungen haben ein einzelnes 16-Bit-Wortformat, es gibt jedoch auch 32-Bit-Anweisungen.

Bei Interrupts und Unterprogrammaufrufen wird die Rücksprungadresse des Programmzählers (PC) auf dem Stack gespeichert. Der Stack wird effektiv im allgemeinen Daten-SRAM zugewiesen, und daher ist die Stackgröße nur durch die Gesamtgröße des SRAM und die Nutzung des SRAM begrenzt. Alle Benutzerprogramme müssen den SP in der Reset-Routine initialisieren (bevor Unterprogramme oder Interrupts ausgeführt werden). Der Stack Pointer (SP) ist im E/A-Bereich schreib- und lesbar. Auf den Daten-SRAM kann problemlos über die fünf verschiedenen Adressierungsmodi zugegriffen werden, die in der AVR-Architektur unterstützt werden.

Die Speicherplätze in der AVR-Architektur sind alle lineare und reguläre Speicherzuordnungen.

Ein flexibles Interruptmodul hat seine Steuerregister im E/A-Bereich mit einem zusätzlichen globalen Interrupt-Enable-Bit im Statusregister. Alle Interrupts haben einen separaten Interrupt-Vektor in der Interrupt-Vektor-Tabelle. Die Interrupts haben Priorität entsprechend ihrer Interrupt-Vektor-Position. Je niedriger die Interrupt-Vektor-Adresse, desto höher die Priorität.

Der I/O-Speicherplatz enthält 64 Adressen für CPU-Peripheriefunktionen wie Steuerregister, SPI und andere I/O-Funktionen. Auf den I/O-Speicher kann direkt zugegriffen werden oder als Datenspeicherplatz, der denen des Registers folgt. File, 0x20 – 0x5F.

ALU – Arithmetisch-Logische Einheit

Die leistungsstarke AVR ALU arbeitet in direkter Verbindung mit allen 32 Allzweck-Arbeitsregistern. Innerhalb eines einzigen Taktzyklus werden arithmetische Operationen zwischen Allzweckregistern oder zwischen einem Register und einem Direktregister ausgeführt. Die ALU-Operationen sind in drei Hauptkategorien unterteilt – Arithmetik, Logik und Bitfunktionen. Einige Implementierungen der Architektur bieten auch einen leistungsstarken Multiplikator, der sowohl vorzeichenbehaftete/vorzeichenlose Multiplikation als auch das Bruchformat unterstützt. Eine detaillierte Beschreibung finden Sie im Abschnitt „Befehlssatz“.

Statusregister

Das Statusregister enthält Informationen über das Ergebnis des zuletzt ausgeführten Rechenbefehls. Diese Informationen können verwendet werden, um den Programmablauf zu ändern und bedingte Operationen auszuführen. Beachten Sie, dass das Statusregister nach allen ALU-Operationen aktualisiert wird, wie in der Befehlssatzreferenz angegeben. Dadurch entfällt in vielen Fällen die Notwendigkeit, die dedizierten Vergleichsbefehle zu verwenden, was zu schnellerem und kompakterem Code führt.

Das Statusregister wird beim Eintritt in eine Interruptroutine nicht automatisch gespeichert und bei der Rückkehr von einem Interrupt wiederhergestellt. Dies muss per Software erledigt werden.

SREG – AVR Statusregister

Das AVR-Statusregister – SREG – ist wie folgt definiert:

Bisschen 7 6 5 4 3 2 1 0
Version: I T H S V N Z C SREG
Lesen/Schreiben R/W R/W R/W R/W R/W R/W R/W R/W
Anfangswert 0 0 0 0 0 0 0 0

Bit 7 – I: Globale Interrupt-Freigabe

Damit die Interrupts aktiviert werden, muss das Global Interrupt Enable-Bit gesetzt sein. Die Steuerung der einzelnen Interrupt-Aktivierung erfolgt dann in separaten Steuerregistern. Wenn das Global Interrupt Enable-Register gelöscht ist, wird keiner der Interrupts aktiviert, unabhängig von den einzelnen Interrupt-Aktivierungseinstellungen. Das I-Bit wird von der Hardware gelöscht, nachdem ein Interrupt aufgetreten ist, und wird durch den RETI-Befehl gesetzt, um nachfolgende Interrupts zu aktivieren. Das I-Bit kann auch von der Anwendung mit den SEI- und CLI-Befehlen gesetzt und gelöscht werden, wie in der Befehlssatzreferenz beschrieben.

Bit 6 – T: Bit-Kopie-Speicher

Die Bit-Kopierbefehle BLD (Bit LoaD) und BST (Bit STore) verwenden das T-Bit als Quelle oder Ziel für das bearbeitete Bit. Ein Bit aus einem Register im Register File kann durch den BST-Befehl in T kopiert werden, und ein Bit in T kann in ein Bit in einem Register im Register kopiert werden. File durch den BLD-Befehl.

Bit 5 – H: Halbübertragsflag

Das Half Carry Flag H zeigt einen Half Carry bei einigen Rechenoperationen an. Half Carry ist bei der BCD-Arithmetik nützlich. Detaillierte Informationen finden Sie in der „Befehlssatzbeschreibung“.

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

Das S-Bit ist immer ein Exklusiv-Oder zwischen dem Negativ-Flag N und dem Zweierkomplement-Überlauf-Flag V. Ausführliche Informationen finden Sie in der „Befehlssatzbeschreibung“.

Bit 3 – V: Zweierkomplement-Überlaufflag

Das Zweierkomplement-Überlaufflag V unterstützt die Zweierkomplementarithmetik. Detaillierte Informationen finden Sie in der „Befehlssatzbeschreibung“.

Bit 2 – N: Negatives Flag

Das Negativ-Flag N zeigt ein negatives Ergebnis in einer arithmetischen oder logischen Operation an. Detaillierte Informationen finden Sie in der „Befehlssatzbeschreibung“.

Bit 1 – Z: Null-Flag

Das Null-Flag Z zeigt ein Null-Ergebnis in einer arithmetischen oder logischen Operation an. Detaillierte Informationen finden Sie in der „Befehlssatzbeschreibung“.

Bit 0 – C: Carry-Flag

Das Carry-Flag C zeigt einen Übertrag in einer arithmetischen oder logischen Operation an. Detaillierte Informationen finden Sie in der „Befehlssatzbeschreibung“.

Allgemeines Register File

Das Register File ist für den AVR Enhanced RISC-Befehlssatz optimiert. Um die erforderliche Leistung und Flexibilität zu erreichen, werden die folgenden Eingabe-/Ausgabeschemata vom Register unterstützt File:

Ein 8-Bit-Ausgabeoperand und ein 8-Bit-Ergebniseingang

Zwei 8-Bit-Ausgabeoperanden und ein 8-Bit-Ergebniseingang

Zwei 8-Bit-Ausgabeoperanden und ein 16-Bit-Ergebniseingang

Ein 16-Bit-Ausgabeoperand und ein 16-Bit-Ergebniseingang

Abbildung 4-2 zeigt die Struktur der 32 allgemeinen Arbeitsregister in der CPU. Allgemeiner Zweck

Wie in Abbildung 4-2, wird jedem Register auch eine Datenspeicheradresse zugewiesen, die sie direkt den ersten 32 Speicherorten des Benutzerdatenspeichers zuordnet. Obwohl diese Speicherorganisation nicht physisch als SRAM-Speicherorte implementiert ist, bietet sie große Flexibilität beim Zugriff auf die Register, da die X-, Y- und Z-Zeigerregister so eingestellt werden können, dass sie jedes Register im fileDie meisten Anweisungen, die auf das Register angewendet werden File haben direkten Zugriff auf alle Register und die meisten davon sind Einzelzyklusanweisungen.

Das X-Register, Y-Register und Z-Register

Die Register R26..R31 haben einige zusätzliche Funktionen zu ihrer allgemeinen Verwendung. Diese Register sind 16-Bit-Adresszeiger für die indirekte Adressierung des Datenraums. Die drei indirekten Adressregister X, Y und Z sind wie in beschrieben definiert. Abbildung 4-3.

Registrieren

In den verschiedenen Adressierungsmodi haben diese Adressregister Funktionen wie feste Verschiebung, automatische Inkrementierung und automatische Dekrementierung (Einzelheiten finden Sie in der Befehlssatzreferenz).

Stapelzeiger

Der Stack wird hauptsächlich zum Speichern temporärer Daten, zum Speichern lokaler Variablen und zum Speichern von Rücksprungadressen nach Interrupts und Unterprogrammaufrufen verwendet. Das Stack Pointer Register zeigt immer auf die Spitze des Stacks. Beachten Sie, dass der Stack so implementiert ist, dass er von höheren Speicherorten zu niedrigeren Speicherorten wächst. Dies bedeutet, dass ein Stack PUSH-Befehl den Stack Pointer verkleinert.

Der Stack-Pointer zeigt auf den Daten-SRAM-Stack-Bereich, in dem sich die Subroutinen- und Interrupt-Stacks befinden. Dieser Stack-Bereich im Daten-SRAM muss vom Programm definiert werden, bevor Subroutinenaufrufe ausgeführt oder Interrupts aktiviert werden. Der Stack-Pointer muss so eingestellt werden, dass er über 0x60 zeigt. Der Stack-Pointer wird um eins dekrementiert, wenn Daten mit dem PUSH-Befehl auf den Stack geschoben werden, und er wird um zwei dekrementiert, wenn die Rücksprungadresse mit einem Subroutinenaufruf oder Interrupt auf den Stack geschoben wird. Der Stack-Pointer wird um eins erhöht, wenn Daten mit dem POP-Befehl vom Stack geholt werden, und er wird um zwei erhöht, wenn Daten mit einer Rückkehr von der Subroutine RET oder einer Rückkehr von einem Interrupt RETI vom Stack geholt werden.

Der AVR-Stackpointer wird als zwei 8-Bit-Register im I/O-Bereich implementiert. Die Anzahl der tatsächlich verwendeten Bits ist implementierungsabhängig. Beachten Sie, dass der Datenbereich in einigen Implementierungen der AVR-Architektur so klein ist, dass nur SPL benötigt wird. In diesem Fall ist das SPH-Register nicht vorhanden.

SPH und SPL – Stack Pointer Register

Bisschen 15 14 13 12 11 10 9 8
Version: SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SPH
Version: SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 Schalldruck
7 6 5 4 3 2 1 0
Lesen/Schreiben R/W R/W R/W R/W R/W R/W R/W R/W
Lesen/Schreiben R/W R/W R/W R/W R/W R/W R/W R/W
Anfangswert RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND
Anfangswert RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND RAMEND

Zeitpunkt der Befehlsausführung

In diesem Abschnitt werden die allgemeinen Konzepte für den Zugriffszeitpunkt bei der Befehlsausführung beschrieben. Die AVR-CPU wird durch den CPU-Takt clkCPU gesteuert, der direkt aus der ausgewählten Taktquelle für den Chip generiert wird. Es wird keine interne Taktteilung verwendet.

Abb.4.4

Abbildung 4-4 zeigt die parallelen Befehlsabrufe und Befehlsausführungen, die durch die Harvard-Architektur und den schnellen Zugriff auf das Register ermöglicht werden File Konzept. Dies ist das grundlegende Pipelining-Konzept, um bis zu 1 MIPS pro MHz mit den entsprechenden einzigartigen Ergebnissen für Funktionen pro Kosten, Funktionen pro Takt und Funktionen pro Leistungseinheit zu erreichen.

Abbildung 4-5. Einzelzyklus-ALU-Betrieb

Abb.4.5

Reset- und Interrupt-Behandlung

Der AVR bietet mehrere verschiedene Interruptquellen. Diese Interrupts und der separate Reset-Vektor haben jeweils einen separaten Programmvektor im Programmspeicherplatz. Allen Interrupts sind individuelle Aktivierungsbits zugewiesen, die zusammen mit dem globalen Interrupt-Aktivierungsbit im Statusregister als logisch Eins geschrieben werden müssen, um den Interrupt zu aktivieren.

Die niedrigsten Adressen im Programmspeicher sind standardmäßig als Reset- und Interrupt-Vektoren definiert. Die vollständige Liste der Vektoren finden Sie in „Interrupts“ auf Seite 48. Die Liste bestimmt auch die Prioritätsstufen der verschiedenen Interrupts. Je niedriger die Adresse, desto höher die Prioritätsstufe. RESET hat die höchste Priorität, als nächstes kommt INT0 – die externe Interruptanforderung 0.

Wenn ein Interrupt auftritt, wird das Global Interrupt Enable I-Bit gelöscht und alle Interrupts werden deaktiviert. Die Benutzersoftware kann eine logische Eins in das I-Bit schreiben, um verschachtelte Interrupts zu aktivieren. Alle aktivierten Interrupts können dann die aktuelle Interruptroutine unterbrechen. Das I-Bit wird automatisch gesetzt, wenn eine Return from Interrupt-Anweisung – RETI – ausgeführt wird.

Es gibt grundsätzlich zwei Arten von Interrupts. Die erste Art wird durch ein Ereignis ausgelöst, das das Interrupt-Flag setzt. Für diese Interrupts wird der Programmzähler zum tatsächlichen Interrupt-Vektor geleitet, um die Interrupt-Behandlungsroutine auszuführen, und die Hardware löscht das entsprechende Interrupt-Flag. Interrupt-Flags können auch gelöscht werden, indem eine logische Eins in die zu löschende(n) Flag-Bitposition(en) geschrieben wird. Wenn eine Interrupt-Bedingung auftritt, während das entsprechende Interrupt-Enable-Bit gelöscht ist, wird das Interrupt-Flag gesetzt und gespeichert, bis der Interrupt aktiviert wird oder das Flag per Software gelöscht wird. Wenn eine oder mehrere Interrupt-Bedingungen auftreten, während das globale Interrupt-Enable-Bit gelöscht ist, werden die entsprechenden Interrupt-Flags gesetzt und gespeichert, bis das globale Interrupt-Enable-Bit gesetzt wird, und werden dann in der Reihenfolge ihrer Priorität ausgeführt.

Der zweite Interrupttyp wird ausgelöst, solange die Interruptbedingung vorliegt. Diese Interrupts haben nicht notwendigerweise Interrupt-Flags. Wenn die Interruptbedingung verschwindet, bevor der Interrupt aktiviert wird, wird der Interrupt nicht ausgelöst.

Wenn der AVR einen Interrupt beendet, kehrt er immer zum Hauptprogramm zurück und führt einen weiteren Befehl aus, bevor ein ausstehender Interrupt bedient wird.

Beachten Sie, dass das Statusregister beim Aufrufen einer Interruptroutine nicht automatisch gespeichert und bei der Rückkehr aus einer Interruptroutine nicht wiederhergestellt wird. Dies muss per Software erledigt werden.

Wenn Sie den CLI-Befehl zum Deaktivieren von Interrupts verwenden, werden die Interrupts sofort deaktiviert. Nach dem CLI-Befehl wird kein Interrupt ausgeführt, auch wenn dieser gleichzeitig mit dem CLI-Befehl auftritt. Das folgende Beispielample zeigt, wie dies verwendet werden kann, um Unterbrechungen während der zeitgesteuerten EEPROM-Schreibsequenz zu vermeiden.

Baugruppencode Example
in r16, SREG; SREG-Wert speichern

cli; Interrupts während zeitgesteuerter Sequenz deaktivieren

sbi EECR, EEMPE; EEPROM-Schreibvorgang starten

sbi EECR, EEPE

out SREG, r16; SREG-Wert wiederherstellen (I-Bit)

C Code Example
Zeichen cSREG;

cSREG = SREG; /* SREG-Wert speichern */

/* Unterbrechungen während zeitgesteuerter Sequenzen deaktivieren */

_CLI();

EWGR |= (1<

EWGR |= (1<

SREG = cSREG; /* SREG-Wert wiederherstellen (I-Bit) */

Wenn Sie den SEI-Befehl verwenden, um Interrupts zu aktivieren, wird der auf SEI folgende Befehl vor allen anstehenden Interrupts ausgeführt, wie in diesem Beispiel gezeigt.ample.

Baugruppencode Example
sei; setze Global Interrupt Enable

schlafen; in den Ruhezustand wechseln, auf Unterbrechung warten

; Hinweis: wird in den Ruhezustand versetzt, bevor alle ausstehenden

; Unterbrechung(en)

C Code Example
_SEI(); /* Globale Interrupt-Aktivierung setzen */

_SLEEP(); /* in den Ruhezustand wechseln, auf Unterbrechung warten */

/* Hinweis: wechselt in den Ruhezustand, bevor eine oder mehrere Unterbrechungen ausstehen */

Unterbrechungsreaktionszeit

Die Antwortzeit für die Interrupt-Ausführung aller aktivierten AVR-Interrupts beträgt mindestens vier Taktzyklen. Nach vier Taktzyklen wird die Programmvektoradresse für die eigentliche Interrupt-Behandlungsroutine ausgeführt. Während dieser vier Taktzyklen wird der Programmzähler auf den Stapel geschoben. Der Vektor ist normalerweise ein Sprung zur Interrupt-Routine, und dieser Sprung dauert drei Taktzyklen. Wenn während der Ausführung einer mehrzyklischen Anweisung ein Interrupt auftritt, wird diese Anweisung abgeschlossen, bevor der Interrupt bedient wird. Wenn ein Interrupt auftritt, während sich die MCU im Ruhemodus befindet, erhöht sich die Antwortzeit für die Interrupt-Ausführung um vier Taktzyklen. Diese Erhöhung kommt zu der Startzeit aus dem ausgewählten Ruhemodus hinzu.

Die Rückkehr aus einer Interrupt-Behandlungsroutine dauert vier Taktzyklen. Während dieser vier Taktzyklen wird der Programmzähler (zwei Bytes) vom Stapel zurückgeholt, der Stapelzeiger um zwei erhöht und das I-Bit in SREG gesetzt.

AVR-Speicher

In diesem Abschnitt werden die verschiedenen Speicher im ATtiny25/45/85 beschrieben. Die AVR-Architektur verfügt über zwei Hauptspeicherbereiche, den Datenspeicher und den Programmspeicherbereich. Darüber hinaus verfügt der ATtiny25/45/85 über einen EEPROM-Speicher zur Datenspeicherung. Alle drei Speicherbereiche sind linear und regulär.

Im System neu programmierbarer Flash-Programmspeicher

Der ATtiny25/45/85 enthält 2/4/8 KBytes On-Chip In-System Reprogrammable Flash-Speicher zur Programmspeicherung. Da alle AVR-Befehle 16 oder 32 Bit breit sind, ist der Flash als 1024/2048/4096 x 16 organisiert.

Der Flash-Speicher hat eine Lebensdauer von mindestens 10,000 Schreib-/Löschzyklen. Der ATtiny25/45/85 Programmzähler (PC) ist 10/11/12 Bit breit und adressiert somit die 1024/2048/4096 Programmspeicherplätze. „Speicherprogramm- ming“ auf Seite 147 enthält eine detaillierte Beschreibung zum seriellen Herunterladen von Flash-Daten über die SPI-Pins.

Konstantentabellen können innerhalb des gesamten Adressraums des Programmspeichers zugewiesen werden (siehe Beschreibung des Befehls LPM – Programmspeicher laden).

Abbildung 5-1. Programmspeicherplan Speicherkarte

SRAM Datenspeicher

Abbildung 5-2 zeigt, wie der ATtiny25/45/85 SRAM-Speicher organisiert ist.

Die unteren 224/352/607 Datenspeicherplätze adressieren sowohl die Register File, den I/O-Speicher und den internen Daten-SRAM. Die ersten 32 Speicherplätze adressieren die Register File, die nächsten 64 Positionen adressieren den Standard-E/A-Speicher und die letzten 128/256/512 Positionen adressieren den internen Daten-SRAM.

Die fünf verschiedenen Adressierungsarten für den Datenspeicher umfassen: Direkt, Indirekt mit Verschiebung, Indirekt, Indirekt mit Vorab-Dekrement und Indirekt mit Nachab-Inkrement. Im Register File, die Register R26 bis R31 verfügen über die Zeigerregister für die indirekte Adressierung.

Die direkte Adressierung erreicht den gesamten Datenraum.

Der indirekte Modus mit Verschiebung erreicht 63 Adresspositionen von der Basisadresse, die durch das Y- oder Z-Register angegeben wird.

Bei Verwendung von registerindirekten Adressierungsmodi mit automatischer Vordekrementierung und Nachinkrementierung werden die Adressregister X, Y und Z dekrementiert oder inkrementiert.

Die 32 allgemeinen Arbeitsregister, 64 I/O-Register und die 128/256/512 Byte internen Daten-SRAM im ATtiny25/45/85 sind alle über alle diese Adressierungsmodi zugänglich. Das Register File wird in beschrieben „Generell Allgemeines Zweckregister File“ auf Seite 10.

Abbildung 5-2. Datenspeicherplan Speicherkarte 2

Datenspeicherzugriff Mal

In diesem Abschnitt werden die allgemeinen Zugriffszeitkonzepte für den internen Speicherzugriff beschrieben. Der interne Daten-SRAM-Zugriff erfolgt in zwei clkCPU-Zyklen, wie in Abbildung 5-3.

Abbildung 5-3. On-Chip-Daten-SRAM-Zugriffszyklen On-Chip-Daten EEPROM Datenspeicher

Der ATtiny25/45/85 enthält 128/256/512 Byte EEPROM-Datenspeicher. Dieser ist als separater Datenraum organisiert, in dem einzelne Bytes gelesen und geschrieben werden können. Das EEPROM hat eine Lebensdauer von mindestens 100,000 Schreib-/Löschzyklen. Der Zugriff zwischen dem EEPROM und der CPU wird im Folgenden beschrieben, wobei die EEPROM-Adressregister, das EEPROM-Datenregister und das EEPROM-Steuerregister angegeben werden. Einzelheiten finden Sie unter „Serielles Herunterladen“ auf Seite 151.

EEPROM Lese-/Schreibzugriff

Auf die EEPROM-Zugriffsregister kann im E/A-Bereich zugegriffen werden.

Die Schreibzugriffszeiten für das EEPROM finden Sie in Tabelle 5-1 auf Seite 21. Eine Selbsttaktfunktion lässt die Benutzersoftware jedoch erkennen, wann das nächste Byte geschrieben werden kann. Wenn der Benutzercode Anweisungen enthält, die das EEPROM schreiben, müssen einige Vorsichtsmaßnahmen getroffen werden. Bei stark gefilterten Netzteilen steigt oder fällt VCC wahrscheinlich langsam an

Ein-/Ausschalten. Dadurch läuft das Gerät für eine gewisse Zeit mit einer Lautstärketage niedriger als das für die verwendete Taktfrequenz angegebene Minimum. Siehe „EEPROM-Beschädigung verhindern“ auf Seite 19 für Einzelheiten dazu, wie Sie in diesen Situationen Probleme vermeiden können.

Um unbeabsichtigte EEPROM-Schreibvorgänge zu verhindern, muss ein bestimmtes Schreibverfahren befolgt werden. Siehe „Atom Byte-Programmierung“ auf Seite 17 Und „Split-Byte-Programmierung“ auf Seite 17 für Details dazu.

Beim Lesen des EEPROM wird die CPU für vier Taktzyklen angehalten, bevor der nächste Befehl ausgeführt wird. Beim Schreiben des EEPROM wird die CPU für zwei Taktzyklen angehalten, bevor der nächste Befehl ausgeführt wird.

Atomare Byte-Programmierung

Die Verwendung von Atomic Byte Programming ist der einfachste Modus. Beim Schreiben eines Bytes in das EEPROM muss der Benutzer die Adresse in das EEAR-Register und die Daten in das EEDR-Register schreiben. Wenn die EEPMn-Bits Null sind, löst das Schreiben von EEPE (innerhalb von vier Zyklen nach dem Schreiben von EEMPE) den Lösch-/Schreibvorgang aus. Sowohl der Lösch- als auch der Schreibzyklus werden in einem Vorgang ausgeführt und die gesamte Programmierzeit beträgt Tabelle 5-1 auf Seite 21. Das EEPE-Bit bleibt gesetzt, bis die Lösch- und Schreibvorgänge abgeschlossen sind. Während das Gerät mit dem Programmieren beschäftigt ist, können keine anderen EEPROM-Vorgänge durchgeführt werden.

Split-Byte-Programmierung

Es ist möglich, den Lösch- und Schreibzyklus in zwei verschiedene Vorgänge aufzuteilen. Dies kann nützlich sein, wenn das System für einen begrenzten Zeitraum kurze Zugriffszeiten benötigt (normalerweise wenn die Stromversorgungsspannungtage fällt). Um die Vorteile zu nutzen, tagBei dieser Methode ist es erforderlich, dass die zu schreibenden Speicherorte vor dem Schreibvorgang gelöscht wurden. Da Lösch- und Schreibvorgänge jedoch getrennt sind, ist es möglich, die Löschvorgänge durchzuführen, wenn das System zeitkritische Vorgänge zulässt (normalerweise nach dem Einschalten).

Löschen

Um ein Byte zu löschen, muss die Adresse in EEAR geschrieben werden. Wenn die EEPMn-Bits 0b01 sind, löst das Schreiben des EEPE (innerhalb von vier Zyklen nach dem Schreiben von EEMPE) nur den Löschvorgang aus (die Programmierzeit ist angegeben in Tabelle 5-1 auf Seite 21). Das EEPE-Bit bleibt gesetzt, bis der Löschvorgang abgeschlossen ist. Während das Gerät programmiert wird, können keine anderen EEPROM-Vorgänge durchgeführt werden.

Schreiben

Um einen Speicherort zu schreiben, muss der Benutzer die Adresse in EEAR und die Daten in EEDR schreiben. Wenn die EEPMn-Bits 0b10 sind, wird das Schreiben des EEPE (innerhalb von vier Zyklen nach dem Schreiben von EEMPE) nur den Schreibvorgang auslösen (die Programmierzeit ist in Tabelle 5-1 auf Seite 21). Das EEPE-Bit bleibt gesetzt, bis der Schreibvorgang abgeschlossen ist. Wenn der zu schreibende Speicherort vor dem Schreiben nicht gelöscht wurde, müssen die gespeicherten Daten als verloren betrachtet werden. Während das Gerät mit dem Programmieren beschäftigt ist, können keine anderen EEPROM-Vorgänge durchgeführt werden.

Der kalibrierte Oszillator wird verwendet, um die EEPROM-Zugriffe zu takten. Stellen Sie sicher, dass die Oszillatorfrequenz innerhalb der in „OSCCAL – Oszillator-Kalibrierungsregister“ auf Seite 31.

Der folgende Code exampDie Dateien zeigen eine Assembly und eine C-Funktion zum Löschen, Schreiben oder atomaren Schreiben des EEPROM.ampIn diesen Dateien wird davon ausgegangen, dass Interrupts kontrolliert werden (z. B. indem Interrupts global deaktiviert werden), sodass während der Ausführung dieser Funktionen keine Interrupts auftreten.

Baugruppencode Example
EEPROM_schreiben:

; Warten Sie, bis der vorherige Schreibvorgang abgeschlossen ist

sbic EECR,EEPE

rjmp EEPROM_schreiben

; Programmiermodus einstellen

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

aus EECR, r16

; Adresse (r18:r17) im Adressregister einrichten

aus EEARH, r18

aus EEARL, r17

; Daten (r19) ins Datenregister schreiben

aus EEDR, r19

; Logische Eins in EEMPE schreiben

sbi EECR, EEMPE

; Starten Sie den EEPROM-Schreibvorgang, indem Sie EEPE setzen

sbi EECR,EEPE

zurück

C Code Example
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)

{

/* Auf Abschluss des vorherigen Schreibvorgangs warten */ while(EECR & (1<

;

/* Programmiermodus einstellen */

EECR = (0<

/* Adress- und Datenregister einrichten */ EEAR = ucAddress;

EEDR = ucDaten;

/* Logische Eins in EEMPE schreiben */

EWGR |= (1<

/* Starten Sie das Schreiben ins EEPROM, indem Sie EEPE setzen */

EWGR |= (1<

}

Der nächste Code exampDie Dateien zeigen Assembler- und C-Funktionen zum Lesen des EEPROM.ampIn diesen Dateien wird davon ausgegangen, dass Interrupts so gesteuert werden, dass während der Ausführung dieser Funktionen keine Interrupts auftreten.

Baugruppencode Example
EEPROM_lesen:

; Warten Sie, bis der vorherige Schreibvorgang abgeschlossen ist

sbic EECR,EEPE

rjmp EEPROM_lesen

; Adresse (r18:r17) im Adressregister einrichten

aus EEARH, r18

aus EEARL, r17

; Starten Sie das Lesen des EEPROMs, indem Sie EERE schreiben

sbi EECR, EERE

; Daten aus dem Datenregister lesen

in r16,EEDR

zurück

C Code Example
unsigned char EEPROM_read(unsigned char ucAddress)

{

/* Auf Abschluss des vorherigen Schreibvorgangs warten */

während(EECR & (1<

;

/* Adressregister einrichten */ EEAR = ucAddress;

/* Starten Sie das Lesen des EEPROM, indem Sie EERE schreiben */

EWGR |= (1<

/* Daten aus dem Datenregister zurückgeben */

EEDR zurückgeben;

}

Verhindern einer Beschädigung des EEPROM

Während Perioden mit niedriger VCC können die EEPROM-Daten beschädigt werden, da die Versorgungsspannungtage ist zu niedrig, damit die CPU und das EEPROM ordnungsgemäß funktionieren. Diese Probleme sind die gleichen wie bei Platinensystemen mit EEPROM, und es sollten die gleichen Designlösungen angewendet werden.

Eine Beschädigung der EEPROM-Daten kann durch zwei Situationen verursacht werden, wenn das Volumentage ist zu niedrig. Erstens erfordert eine reguläre Schreibsequenz in das EEPROM eine Mindestlautstärketage, um richtig zu funktionieren. Zweitens kann die CPU selbst Anweisungen falsch ausführen, wenn die Versorgungsspannungtage ist zu niedrig.

Eine Beschädigung der EEPROM-Daten lässt sich leicht vermeiden, indem Sie die folgende Design-Empfehlung befolgen:

Halten Sie den AVR RESET aktiv (niedrig) während Zeiten unzureichender Stromversorgungtage. Dies kann durch die Aktivierung des internen Brown-out-Detektors (BOD) erfolgen. Wenn der Nachweiswert des internen BOD nicht mit dem

Um den erforderlichen Erkennungspegel zu erreichen, kann eine externe Reset-Schutzschaltung mit niedrigem VCC verwendet werden. Wenn während eines Schreibvorgangs ein Reset erfolgt, wird der Schreibvorgang abgeschlossen, vorausgesetzt, dass die Stromversorgungsspannungtage ist ausreichend.

E/A-Speicher

Die I/O-Raumdefinition des ATtiny25/45/85 ist dargestellt in „Registerübersicht“ auf Seite 200.

Alle ATtiny25/45/85 I/Os und Peripheriegeräte sind im I/O-Bereich untergebracht. Auf alle I/O-Speicherorte kann mit den LD/LDS/LDD- und ST/STS/STD-Befehlen zugegriffen werden, wobei Daten zwischen den 32 allgemeinen Arbeitsregistern und dem I/O-Bereich übertragen werden. I/O-Register im Adressbereich 0x00 – 0x1F sind mit den SBI- und CBI-Befehlen direkt bitweise zugänglich. In diesen Registern kann der Wert einzelner Bits mit den SBIS- und SBIC-Befehlen überprüft werden. Weitere Einzelheiten finden Sie im Abschnitt Befehlssatz. Bei Verwendung der I/O-spezifischen Befehle IN und OUT müssen die I/O-Adressen 0x00 – 0x3F verwendet werden. Wenn I/O-Register mit LD- und ST-Befehlen als Datenbereich adressiert werden, muss diesen Adressen 0x20 hinzugefügt werden.

Aus Gründen der Kompatibilität mit zukünftigen Geräten sollten reservierte Bits beim Zugriff auf Null geschrieben werden. Reservierte E / A-Speicheradressen sollten niemals geschrieben werden.

Einige der Statusflags werden gelöscht, indem eine logische Eins in sie geschrieben wird. Beachten Sie, dass die CBI- und SBI-Anweisungen nur auf das angegebene Bit wirken und daher auf Register angewendet werden können, die solche Statusflags enthalten. Die CBI- und SBI-Anweisungen funktionieren nur mit den Registern 0x00 bis 0x1F.

Die E/A- und Peripheriesteuerregister werden in späteren Abschnitten erläutert.

Registerbeschreibung

EEARH – EEPROM-Adressregister

Bisschen 7 6 5 4 3 2 1 0
Version: EEAR8 EEARH
Lesen/Schreiben R R R R R R R R/W
Anfangswert 0 0 0 0 0 0 0 X/0

Bits 7:1 – Res: Reservierte Bits

Diese Bits sind für die zukünftige Verwendung reserviert und werden immer als Null gelesen.

Bits 0 – EEAR8: EEPROM-Adresse

Dies ist das höchstwertige EEPROM-Adressbit von ATtiny85. Bei Geräten mit weniger EEPROM, z. B. ATtiny25/ATtiny45, ist dieses Bit reserviert und wird immer Null anzeigen. Der Anfangswert des EEPROM-Adressregisters (EEAR) ist undefiniert und daher muss ein geeigneter Wert geschrieben werden, bevor auf das EEPROM zugegriffen wird.

EEARL – EEPROM-Adressregister

Bisschen

Version: EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 EEARL
Rückseite/Schreiben R/W R/W R/W R/W R/W R/W R/W R/W
Anfangswert X X X X X X X X

Bit 7 – EEAR7: EEPROM-Adresse

Dies ist das höchstwertige EEPROM-Adressbit von ATtiny45. Bei Geräten mit weniger EEPROM, z. B. ATtiny25, ist dieses Bit reserviert und wird immer Null anzeigen. Der Anfangswert des EEPROM-Adressregisters (EEAR) ist undefiniert und daher muss ein geeigneter Wert geschrieben werden, bevor auf das EEPROM zugegriffen wird.

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

Dies sind die (niedrigen) Bits des EEPROM-Adressregisters. Die EEPROM-Datenbytes werden linear im Bereich 0…(128/256/512-1) adressiert. Der Anfangswert von EEAR ist undefiniert und daher muss ein geeigneter Wert geschrieben werden, bevor auf das EEPROM zugegriffen werden kann.

EEDR – EEPROM-Datenregister

Bisschen 7 6 5 4 3 2 1 0
Version: EEDR7 EEDR6 EEDR5 EEDR4 EEDR3 EEDR2 EEDR1 EEDR0 EEDR
Lesen/Schreiben R/W R/W R/W R/W R/W R/W R/W R/W
Anfangswert 0 0 0 0 0 0 0 0

Beim EEPROM-Schreibvorgang enthält das EEDR-Register die Daten, die in das EEPROM geschrieben werden sollen, und zwar an die Adresse, die das EEAR-Register angibt. Beim EEPROM-Lesevorgang enthält das EEDR die aus dem

EEPROM unter der von EEAR angegebenen Adresse.

 

5.5.4 EECR – EEPROM-Steuerregister

Bit 7 6 5 4 3 2 1 0
0x1C        – EEPM1 EEPM0 UNHEIMLICH EEMPE EEPE EE EECR
Lesen/Schreiben R R R/W R/W R/W R/W R/W R/W
Anfangswert 0 0 X X 0 0 X 0

Bit 7 – Res: Reserviertes Bit

Dieses Bit ist für die zukünftige Verwendung reserviert und wird in ATtiny0/25/45 immer als 85 gelesen. Aus Kompatibilitätsgründen mit zukünftigen AVR-Geräten schreiben Sie dieses Bit immer auf Null. Maskieren Sie dieses Bit nach dem Lesen.

Bit 6 – Res: Reserviertes Bit

Dieses Bit ist im ATtiny25/45/85 reserviert und wird immer als Null gelesen.

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

Die Einstellung der EEPROM-Programmiermodus-Bits definiert, welche Programmieraktion beim Schreiben von EEPE ausgelöst wird. Es ist möglich, Daten in einer einzigen atomaren Operation zu programmieren (den alten Wert löschen und den neuen Wert programmieren) oder die Lösch- und Schreiboperationen in zwei verschiedene Operationen aufzuteilen. Die Programmierzeiten für die verschiedenen Modi sind in Tabelle 5-1. Während EEPE gesetzt ist, wird jeder Schreibvorgang in EEPMn ignoriert. Während des Zurücksetzens werden die EEPMn-Bits auf 0b00 zurückgesetzt, es sei denn, das EEPROM ist mit dem Programmieren beschäftigt.

Tabelle 5-1. EEPROM-Modusbits

EEPM1 EEPM0 Programmierzeit Betrieb
0 0 3.4 ms Löschen und Schreiben in einem Vorgang (Atomare Operation)
0 1 1.8 ms Nur löschen
1 0 1.8 ms Nur schreiben
1 1 Für zukünftige Verwendung reserviert

Bit 3 – EERIE: EEPROM Bereit Interrupt aktivieren

Das Schreiben von EERIE auf eins aktiviert den EEPROM Ready Interrupt, wenn das I-Bit in SREG gesetzt ist. Das Schreiben von EERIE auf null deaktiviert den Interrupt. Der EEPROM Ready Interrupt erzeugt einen konstanten Interrupt, wenn der nichtflüchtige Speicher zur Programmierung bereit ist.

Bit 2 – EEMPE: EEPROM-Masterprogramm aktivieren

Das EEMPE-Bit bestimmt, ob das Schreiben von EEPE in eins Wirkung hat oder nicht.

Wenn EEMPE gesetzt ist, wird durch Setzen von EEPE innerhalb von vier Taktzyklen das EEPROM an der ausgewählten Adresse programmiert. Wenn EEMPE null ist, hat das Setzen von EEPE keine Auswirkung. Wenn EEMPE per Software auf eins geschrieben wurde, löscht die Hardware das Bit nach vier Taktzyklen auf null.

Bit 1 – EEPE: EEPROM-Programm aktivieren

Das EEPROM-Programmierfreigabesignal EEPE ist das Programmierfreigabesignal für das EEPROM. Wenn EEPE geschrieben wird, wird das EEPROM entsprechend der EEPMn-Biteinstellung programmiert. Das EEMPE-Bit muss auf Eins geschrieben werden, bevor eine logische Eins auf EEPE geschrieben wird, sonst findet kein EEPROM-Schreibvorgang statt. Wenn die Schreibzugriffszeit abgelaufen ist, wird das EEPE-Bit durch die Hardware gelöscht. Wenn EEPE gesetzt wurde, wird die CPU für zwei Zyklen angehalten, bevor der nächste Befehl ausgeführt wird.

Bit 0 – EERE: EEPROM-Lesen aktivieren

Das EEPROM-Lesefreigabesignal (EERE) ist das Lesesignal für das EEPROM. Wenn die richtige Adresse im EEAR-Register eingerichtet ist, muss das EERE-Bit auf Eins geschrieben werden, um den EEPROM-Lesevorgang auszulösen. Der EEPROM-Lesezugriff erfordert einen Befehl und die angeforderten Daten sind sofort verfügbar. Wenn das EEPROM gelesen wird, wird die CPU für vier Zyklen angehalten, bevor der nächste Befehl ausgeführt wird. Der Benutzer sollte das EEPE-Bit abfragen, bevor er den Lesevorgang startet. Wenn ein Schreibvorgang ausgeführt wird, ist es weder möglich, das EEPROM zu lesen, noch das EEAR-Register zu ändern.

Systemuhr und Uhroptionen

Uhrensysteme und ihre Verbreitung

Uhrverteilung

CPU Clock

Der CPU-Takt wird an die Teile des Systems weitergeleitet, die für den Betrieb des AVR-Kerns zuständig sind.ampBeispiele für solche Module sind das General Purpose Register File, das Statusregister und der Datenspeicher, der den Stackpointer enthält. Das Anhalten der CPU-Taktung verhindert, dass der Kern allgemeine Operationen und Berechnungen durchführt.

E/A-Takt – clkI/O

Die E/A-Uhr wird von den meisten E/A-Modulen wie Timer/Counter verwendet. Die E/A-Uhr wird auch vom externen Interrupt-Modul verwendet. Beachten Sie jedoch, dass einige externe Interrupts durch asynchrone Logik erkannt werden, sodass solche Interrupts auch dann erkannt werden können, wenn die E/A-Uhr angehalten ist.

Flash-Uhr – clkFLASH

Der Flash-Takt steuert den Betrieb der Flash-Schnittstelle. Der Flash-Takt ist normalerweise gleichzeitig mit dem CPU-Takt aktiv.

ADC-Takt – clkADC

Der ADC ist mit einer dedizierten Taktdomäne ausgestattet. Dadurch können die CPU- und I/O-Taktfrequenzen angehalten werden, um das von digitalen Schaltkreisen erzeugte Rauschen zu reduzieren. Dies führt zu genaueren ADC-Konvertierungsergebnissen.

Interne PLL zur schnellen Peripherietakterzeugung – clkPCK

Die interne PLL in ATtiny25/45/85 erzeugt eine Taktfrequenz, die 8x von einem Quelleingang multipliziert wird. Standardmäßig verwendet die PLL den Ausgang des internen 8.0 MHz RC-Oszillators als Quelle. Alternativ verwendet die PLL, wenn das Bit LSM von PLLCSR gesetzt ist, den Ausgang des RC-Oszillators geteilt durch zwei. Somit beträgt der Ausgang der PLL, der schnelle Peripherietakt, 64 MHz. Der schnelle Peripherietakt oder ein daraus vorskalierter Takt kann als Taktquelle für Timer/Counter1 oder als Systemtakt ausgewählt werden. Siehe Abbildung 6-2. Die Frequenz des schnellen Peripherietakts wird durch zwei geteilt, wenn LSM von PLLCSR eingestellt ist, was zu einer Taktfrequenz von 32 MHz führt. Beachten Sie, dass LSM nicht eingestellt werden kann, wenn PLLCLK als Systemtakt verwendet wird.

Abbildung 6-2. PCK-Taktsystem. PCK-Taktung

Die PLL ist auf den RC-Oszillator eingestellt und durch die Einstellung des RC-Oszillators über das OSCCAL-Register wird gleichzeitig auch der schnelle Peripherietakt eingestellt. Selbst wenn der RC-Oszillator jedoch auf eine höhere Frequenz als 8 MHz eingestellt wird, sättigt sich die schnelle Peripherietaktfrequenz bei 85 MHz (schlimmster Fall) und schwingt weiterhin auf der maximalen Frequenz. Es ist zu beachten, dass die PLL in diesem Fall nicht mehr auf den RC-Oszillatortakt eingestellt ist. Daher wird empfohlen, die OSCCAL-Einstellungen nicht auf eine höhere Frequenz als 8 MHz einzustellen, um die PLL im richtigen Betriebsbereich zu halten.

Die interne PLL wird aktiviert, wenn:

Das PLLE-Bit im Register PLLCSR ist gesetzt.

Die CKSEL-Sicherung ist auf „0001“ programmiert.

Die CKSEL-Sicherung ist auf „0011“ programmiert.

Das PLLCSR-Bit PLOCK wird gesetzt, wenn die PLL gesperrt ist. Sowohl der interne RC-Oszillator als auch die PLL werden im Power-Down- und Standby-Schlafmodus ausgeschaltet.

Interne PLL im ATtiny15-Kompatibilitätsmodus

Da es sich bei ATtiny25/45/85 um ein Migrationsgerät für ATtiny15-Benutzer handelt, gibt es einen ATtiny15-Kompatibilitätsmodus für die Abwärtskompatibilität. Der ATtiny15-Kompatibilitätsmodus wird ausgewählt, indem die CKSEL-Sicherungen auf „0011“ programmiert werden.

Im ATtiny15-Kompatibilitätsmodus wird die Frequenz des internen RC-Oszillators auf 6.4 MHz herunterkalibriert und der Multiplikationsfaktor der PLL auf 4x eingestellt. Siehe Abbildung 6-3Mit diesen Anpassungen ist das Taktsystem ATtiny15-kompatibel und der resultierende schnelle Peripherietakt hat eine Frequenz von 25.6 MHz (dieselbe wie bei ATtiny15).

Abbildung 6-3. PCK-Taktsystem im ATtiny15-Kompatibilitätsmodus. Zeiterfassungssystem

Uhrenquellen

Das Gerät verfügt über die folgenden Taktquellenoptionen, die durch Flash-Fuse-Bits ausgewählt werden können, wie unten gezeigt. Der Takt aus der ausgewählten Quelle wird in den AVR-Taktgenerator eingegeben und an die entsprechenden Module weitergeleitet.

Tabelle 6-1. Gerätetaktungsoptionen auswählen

Geräte-Taktungsoption CKSEL[3:0](1)
Externe Uhr (sehen Seite 26) 0000
Hochfrequenter PLL-Takt (sehen Seite 26) 0001
Kalibrierter interner Oszillator (sehen Seite 27) 0010(2)
Kalibrierter interner Oszillator (sehen Seite 27) 0011(3)
Interner 128 kHz Oszillator (sehen Seite 28) 0100
Niederfrequenz-Quarzoszillator (sehen Seite 29) 0110
Quarzoszillator / Keramikresonator (sehen Seite 29) 1000 – 1111
Reserviert 0101, 0111

Bei allen Sicherungen bedeutet „1“ unprogrammiert und „0“ programmiert.

Das Gerät wird mit ausgewählter Option ausgeliefert.

Dadurch wird der ATtiny15-Kompatibilitätsmodus aktiviert, bei dem die Systemuhr durch vier geteilt wird, was zu einer Taktfrequenz von 1.6 MHz führt. Weitere Informationen finden Sie unter „Kalibrierter interner Oszillator“ auf Seite 27.

Die verschiedenen Auswahlmöglichkeiten für jede Taktoption werden in den folgenden Abschnitten angegeben. Wenn die CPU aus dem Power-Down-Modus aufwacht, wird die ausgewählte Taktquelle verwendet, um den Start zu timen und so einen stabilen Oszillatorbetrieb sicherzustellen, bevor die Befehlsausführung beginnt. Wenn die CPU aus dem Reset startet, gibt es eine zusätzliche Verzögerung, die es der Stromversorgung ermöglicht, ein stabiles Niveau zu erreichen, bevor der Normalbetrieb beginnt. Der Watchdog-Oszillator wird verwendet, um diesen Echtzeitteil der Startzeit zu timen. Die Anzahl der WDT-Oszillatorzyklen, die für jedes Timeout verwendet werden, wird in Tabelle 6-2.

Tabelle 6-2. Anzahl der Watchdog-Oszillatorzyklen

Typ Time-out Anzahl der Zyklen
4 ms 512
64 ms 8K (8,192)

Externe Uhr

Um das Gerät von einer externen Taktquelle anzusteuern, sollte CLKI wie in gezeigt angesteuert werden Abbildung 6-4Um das Gerät mit einer externen Uhr zu betreiben, müssen die CKSEL-Sicherungen auf „00“ programmiert werden.

Abbildung 6-4. Konfiguration des externen Taktgebers

Abb.6.4

Wenn diese Taktquelle ausgewählt ist, werden die Startzeiten durch die SUT-Sicherungen bestimmt, wie in Tabelle 6-3.

Tabelle 6-3. Startzeiten für die externe Taktauswahl

SUT[1:0] Anlaufzeit nach dem Ausschalten Zusätzliche Verzögerung vom Zurücksetzen Empfohlene Verwendung
00 6 CK 14CK BOD aktiviert
01 6 CK 14CK + 4 ms Schnell steigende Macht
10 6 CK 14CK + 64 ms Langsam steigende Macht
11 Reserviert

Bei Verwendung eines externen Taktgebers müssen plötzliche Änderungen der verwendeten Taktfrequenz vermieden werden, um einen stabilen Betrieb der MCU zu gewährleisten. Eine Frequenzabweichung von mehr als 2 % von einem Taktzyklus zum nächsten kann zu unvorhersehbarem Verhalten führen. Es muss sichergestellt werden, dass die MCU während solcher Änderungen der Taktfrequenz im Reset-Zustand bleibt.

Beachten Sie, dass der System Clock Presale verwendet werden kann, um Laufzeitänderungen der internen Taktfrequenz durchzuführen und dabei weiterhin einen stabilen Betrieb sicherzustellen. Siehe „System Clock Prescaler“ auf Seite 31 für weitere Einzelheiten.

Hochfrequenter PLL-Takt

Es gibt eine interne PLL, die eine nominelle Taktfrequenz von 64 MHz liefert, die an den RC-Oszillator gekoppelt ist, um den Peripherie-Timer/Counter1 und die Systemtaktquelle zu verwenden. Wenn sie als Systemtaktquelle ausgewählt wird, indem die CKSEL-Sicherungen auf „0001“ programmiert werden, wird sie durch vier geteilt, wie in Tabelle 6-4.

Tabelle 6-4. Hochfrequenz-PLL-Taktbetriebsarten

CKSEL[3:0] Nennfrequenz
0001 16 MHz

Wenn diese Taktquelle ausgewählt ist, werden die Startzeiten durch die SUT-Sicherungen bestimmt, wie in Tabelle 6-5.

Tabelle 6-5. Startzeiten für den hochfrequenten PLL-Takt

SUT[1:0] Anlaufzeit nach Abschalten der Stromversorgung Zusätzliche Verzögerung vom Power-On-Reset (VCC = 5.0 V) Empfohlene Verwendung
00 14CK + 1K (1024) CK + 4 ms 4 ms BOD aktiviert

Tabelle 6-5. Startzeiten für den hochfrequenten PLL-Takt

SUT[1:0] Anlaufzeit nach Abschalten der Stromversorgung Zusätzliche Verzögerung vom Power-On-Reset (VCC = 5.0 V) Empfohlene Verwendung
01 14CK + 16K (16384) CK + 4 ms 4 ms Schnell steigende Macht
10 14CK + 1K (1024) CK + 64 ms 4 ms Langsam steigende Macht
11 14CK + 16K (16384) CK + 64 ms 4 ms Langsam steigende Macht

Kalibrierter interner Oszillator

Standardmäßig liefert der interne RC-Oszillator eine Taktfrequenz von ca. 8.0 MHz.tage und temperaturabhängig, kann diese Uhr vom Benutzer sehr genau kalibriert werden. Siehe „Kalibrierte interne RC-Oszillator-Akzeptanz rassig“ auf Seite 164 Und „Interne Oszillatorgeschwindigkeit“ auf Seite 192 für weitere Einzelheiten. Das Gerät wird mit der programmierten CKDIV8-Sicherung ausgeliefert. Siehe „System Clock Prescaler“ auf Seite 31 für weitere Details.

Diese Uhr kann als Systemuhr ausgewählt werden, indem die CKSEL-Sicherungen wie in gezeigt programmiert werden. Tabelle 6-6 auf Seite

27. Wenn diese Option ausgewählt ist, wird es ohne externe Komponenten betrieben. Während des Resets lädt die Hardware den vorprogrammierten Kalibrierungswert in das OSCCAL-Register und kalibriert dadurch automatisch den RC-Oszillator. Die Genauigkeit dieser Kalibrierung wird als Werkskalibrierung in Tabelle 21-2 auf Seite 164.

Durch Ändern des OSCCAL-Registers von SW, siehe „OSCCAL – Oszillator-Kalibrierungsregister“ auf Seite 31ist es möglich, eine höhere Kalibrierungsgenauigkeit zu erreichen als mit der Werkskalibrierung. Die Genauigkeit dieser Kalibrierung wird als Benutzerkalibrierung in Tabelle 21-2 auf Seite 164.

Wenn dieser Oszillator als Chip-Takt verwendet wird, wird der Watchdog-Oszillator weiterhin für den Watchdog-Timer und für das Reset-Timeout verwendet. Weitere Informationen zum vorprogrammierten Kalibrierungswert finden Sie im Abschnitt „Kali- brierungsbytes” auf Seite 150.

Der interne Oszillator kann auch so eingestellt werden, dass er einen 6.4 MHz-Takt liefert, indem CKSEL-Sicherungen auf „0011“ geschrieben werden, wie in Tabelle 6-6 weiter unten. Diese Einstellung wird als ATtiny15-Kompatibilitätsmodus bezeichnet und soll eine kalibrierte Taktquelle mit 6.4 MHz bereitstellen, wie bei ATtiny15. Im ATtiny15-Kompatibilitätsmodus verwendet die PLL den internen Oszillator mit 6.4 MHz, um ein 25.6 MHz-Peripherietaktsignal für Timer/Counter1 zu erzeugen (siehe „8-Bit Timer/Counter1 in ATtiny15-Modus“ auf Seite 95). Beachten Sie, dass in diesem Betriebsmodus das 6.4-MHz-Taktsignal immer durch vier geteilt wird, wodurch ein Systemtakt von 1.6 MHz entsteht.

Tabelle 6-6. Intern kalibrierte RC-Oszillator-Betriebsarten

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

Das Gerät wird mit ausgewählter Option ausgeliefert.

Diese Einstellung wählt den ATtiny15-Kompatibilitätsmodus, bei dem die Systemuhr durch vier geteilt wird, was zu einer Taktfrequenz von 1.6 MHz führt.

Wenn der kalibrierte interne 8-MHz-Oszillator als Taktquelle ausgewählt wird, werden die Startzeiten durch die SUT-Sicherungen bestimmt, wie in Tabelle 6-7 unten.

Tabelle 6-7. Startzeiten für intern kalibrierte RC-Oszillatoruhr

SUT[1:0] Anlaufzeit nach dem Ausschalten Zusätzliche Verzögerung vom Reset (VCC = 5.0 V) Empfohlene Verwendung
00 6 CK 14CK(1) BOD aktiviert
01 6 CK 14CK + 4 ms Schnell steigende Macht
10(2) 6 CK 14CK + 64 ms Langsam steigende Macht
11 Reserviert

1. Wenn die RSTDISBL-Sicherung programmiert ist, wird diese Startzeit auf 14CK + 4 ms erhöht, um sicherzustellen, dass in den Programmiermodus gewechselt werden kann.
2. Das Gerät wird mit ausgewählter Option ausgeliefert.

Im ATtiny15-Kompatibilitätsmodus werden die Startzeiten durch SUT-Sicherungen bestimmt, wie in Tabelle 6-8 unten.

Tabelle 6-8. Startzeiten für intern kalibrierte RC-Oszillatoruhr (im ATtiny15-Modus)

SUT[1:0] Anlaufzeit nach dem Ausschalten Zusätzliche Verzögerung vom Reset (VCC = 5.0 V) Empfohlene Verwendung
00 6 CK 14CK + 64 ms
01 6 CK 14CK + 64 ms
10 6 CK 14CK + 4 ms
11 1 CK 14CK(1)

Hinweis: Wenn die RSTDISBL-Sicherung programmiert ist, erhöht sich diese Startzeit auf 14CK + 4 ms, um sicherzustellen, dass in den Programmiermodus gewechselt werden kann.

Zusammenfassend finden Sie weitere Informationen zum ATtiny15-Kompatibilitätsmodus in den Abschnitten „Port B (PB5:PB0)“ auf Seite 2„Interne PLL im ATtiny15-Kompatibilitätsmodus“ auf Seite 24„8-bit Timer/Counter1 im ATtiny15 Modus“ auf Seite 95„Einschränkungen von debugWIRE“ auf Seite 140„Kalibrierungsbytes“ auf Seite 150 und in Tabelle „Takt-Prescaler Auswählen“ auf Seite 33.

Interner 128 kHz Oszillator

Der interne 128-kHz-Oszillator ist ein stromsparender Oszillator, der eine Taktfrequenz von 128 kHz liefert. Die Frequenz ist bei 3 V und 25 °C nominal. Dieser Takt kann als Systemtakt ausgewählt werden, indem die CKSEL-Sicherungen auf „0100“ programmiert werden.

Wenn diese Taktquelle ausgewählt ist, werden die Startzeiten durch die SUT-Sicherungen bestimmt, wie in Tabelle 6-9.

Tabelle 6-9. Startzeiten für den internen 128-kHz-Oszillator

SUT[1:0] Anlaufzeit nach dem Ausschalten Zusätzliche Verzögerung vom Zurücksetzen Empfohlene Verwendung
00 6 CK 14CK(1) BOD aktiviert
01 6 CK 14CK + 4 ms Schnell steigende Macht
10 6 CK 14CK + 64 ms Langsam steigende Macht
11 Reserviert

Hinweis: Wenn die RSTDISBL-Sicherung programmiert ist, erhöht sich diese Startzeit auf 14CK + 4 ms, um sicherzustellen, dass in den Programmiermodus gewechselt werden kann.

Niederfrequenz-Quarzoszillator

Um einen 32.768 kHz-Uhrenquarz als Taktquelle für das Gerät zu verwenden, muss der Niederfrequenz-Quarzoszillator ausgewählt werden, indem die CKSEL-Sicherungen auf „0110“ gesetzt werden. Der Quarz sollte wie in gezeigt angeschlossen werden. Abbildung 6-5Um die geeignete Lastkapazität für einen 32.768-kHz-Quarz zu finden, konsultieren Sie bitte das Datenblatt des Herstellers.

Wenn dieser Oszillator ausgewählt ist, werden die Startzeiten durch die SUT-Sicherungen bestimmt, wie in Tabelle 6-10.

Tabelle 6-10. Startzeiten für die Auswahl des niederfrequenten Quarzoszillatortakts

SUT[1:0] Anlaufzeit nach Abschalten der Stromversorgung Zusätzliche Verzögerung vom Reset (VCC = 5.0 V) Empfohlene Verwendung
00 1K (1024) CK(1) 4 ms Schnell ansteigende Leistung oder BOD aktiviert
01 1K (1024) CK(1) 64 ms Langsam steigende Macht
10 32K (32768) CK 64 ms Stabile Frequenz beim Start
11 Reserviert

Hinweis: Diese Optionen sollten nur verwendet werden, wenn die Frequenzstabilität beim Start nicht wichtig ist.

Der Niederfrequenz-Quarzoszillator verfügt über eine interne Lastkapazität, siehe Tabelle 6-11 an jedem TOSC-Pin.

Tabelle 6-11. Kapazität eines Niederfrequenz-Quarzoszillators

Gerät 32 kHz Osz.-Typ Kappe (Xtal1/Tosc1) Kappe (Xtal2/Tosc2)
ATtiny25/45/85 Systemosz. 16 pF 6 pF

Quarzoszillator / Keramikresonator

XTAL1 und XTAL2 sind Eingang bzw. Ausgang eines invertierenden amplifier, der für den Einsatz als On-Chip-Oszillator konfiguriert werden kann, wie in gezeigt Abbildung 6-5Es kann entweder ein Quarzkristall oder ein Keramikresonator verwendet werden.

C1 und C2 sollten für Kristalle und Resonatoren immer gleich sein. Der optimale Wert der Kondensatoren hängt vom verwendeten Kristall oder Resonator, der Streukapazität und dem elektromagnetischen Rauschen der Umgebung ab. Einige erste Richtlinien zur Auswahl von Kondensatoren für die Verwendung mit Kristallen finden Sie in Tabelle 6-12 unten. Für Keramikresonatoren sollten die vom Hersteller angegebenen Kondensatorwerte verwendet werden.

Tabelle 6-12. Betriebsmodi des Quarzoszillators

CKSEL[3:1] Frequenzbereich (MHz) Empfohlener Bereich für Kondensatoren C1 und C2 zur Verwendung mit Kristallen (pF)
100(1) 0.4 – 0.9
101 0.9 – 3.0 12 – 22
110 3.0 – 8.0 12 – 22
111 8.0 – 12 – 22

Hinweise: Diese Option sollte nicht mit Kristallen verwendet werden, sondern nur mit Keramikresonatoren.

Der Oszillator kann in drei verschiedenen Modi betrieben werden, die jeweils für einen bestimmten Frequenzbereich optimiert sind. Der Betriebsmodus wird durch die Sicherungen CKSEL[3:1] ausgewählt, wie in Tabelle 6-12.

Die CKSEL0-Fuse wählt zusammen mit den SUT[1:0]-Fuses die Startzeiten wie in Tabelle 6-13.

Tabelle 6-13. Startzeiten für die Auswahl des Quarzoszillatortakts

CKSEL0 SUT[1:0] Anlaufzeit nach dem Ausschalten Zusätzliche Verzögerung vom Zurücksetzen Empfohlene Verwendung
0 00 258 CK(1) 14CK + 4 ms Keramikresonator, schnell ansteigende Leistung
0 01 258 CK(1) 14CK + 64 ms Keramikresonator, langsam ansteigende Leistung
0 10 1K (1024) CK(2) 14CK Keramikresonator, BOD-fähig
0 11 1K (1024)CK(2) 14CK + 4 ms Keramikresonator, schnell ansteigende Leistung
1 00 1K (1024)CK(2) 14CK + 64 ms Keramikresonator, langsam ansteigende Leistung
1 01 16K (16384) CK 14CK Quarzoszillator, BOD-fähig
1 10 16K (16384) CK 14CK + 4 ms Quarzoszillator, schnell ansteigende Leistung
1 11 16K (16384) CK 14CK + 64 ms Quarzoszillator, langsam steigende Leistung

Hinweise

Diese Optionen sollten nur verwendet werden, wenn der Betrieb nicht in der Nähe der maximalen Frequenz des Geräts erfolgt und nur, wenn die Frequenzstabilität beim Start für die Anwendung nicht wichtig ist. Diese Optionen sind nicht für Kristalle geeignet.

Diese Optionen sind für die Verwendung mit Keramikresonatoren vorgesehen und gewährleisten Frequenzstabilität beim Start. Sie können auch mit Kristallen verwendet werden, wenn der Betrieb nicht in der Nähe der maximalen Frequenz des Geräts erfolgt und Frequenzstabilität beim Start für die Anwendung nicht wichtig ist.

Standard-Taktquelle

Das Gerät wird mit CKSEL = „0010“, SUT = „10“ und CKDIV8-Programmierung ausgeliefert. Die Standardeinstellung für die Taktquelle ist daher der interne RC-Oszillator mit 8 MHz mit der längsten Startzeit und einer anfänglichen Systemtaktvorskalierung von 8, was zu einem Systemtakt von 1.0 MHz führt. Diese Standardeinstellung stellt sicher, dass alle Benutzer ihre gewünschte Taktquelleneinstellung mit einem In-System- oder High-Vol-Modul vornehmen können.tage Programmierer.

Systemtakt-Vorteiler

Die Systemuhr des ATtiny25/45/85 kann geteilt werden durch die Einstellung der „CLKPR – Clock Prescale Register“ auf Seite 32. Diese Funktion kann verwendet werden, um den Stromverbrauch zu senken, wenn der Bedarf an Rechenleistung gering ist. Dies kann mit allen Taktquellenoptionen verwendet werden und beeinflusst die Taktfrequenz der CPU und aller synchronen Peripheriegeräte. clkI/O, clkADC, clkCPU und clkFLASH werden durch einen Faktor geteilt, wie in gezeigt Tabelle 6-15 auf Seite 33.

Umschaltzeit

Beim Umschalten zwischen Prescaler-Einstellungen stellt der System Clock Prescaler sicher, dass keine Störungen im Taktsystem auftreten und dass keine Zwischenfrequenz höher ist als weder die Taktfrequenz der vorherigen Einstellung noch die Taktfrequenz der neuen Einstellung.

Der Ripple-Zähler, der den Prescaler implementiert, läuft mit der Frequenz der ungeteilten Uhr, die schneller sein kann als die Taktfrequenz der CPU. Daher ist es nicht möglich, den Zustand des Prescalers zu bestimmen – selbst wenn er lesbar wäre, und die genaue Zeit, die zum Umschalten von einer Taktteilung zur nächsten benötigt wird, kann nicht genau vorhergesagt werden.

Vom Zeitpunkt des Schreibens der CLKPS-Werte an dauert es zwischen T1 + T2 und T1 + 2*T2, bis die neue Taktfrequenz aktiv ist. In diesem Intervall werden 2 aktive Taktflanken erzeugt. Dabei ist T1 die vorherige Taktperiode und T2 die Periode, die der neuen Prescaler-Einstellung entspricht.

Takt-Ausgabepuffer

Das Gerät kann den Systemtakt am CLKO-Pin ausgeben (wenn dieser nicht als XTAL2-Pin verwendet wird). Um die Ausgabe zu aktivieren, muss die CKOUT-Sicherung programmiert werden. Dieser Modus ist geeignet, wenn der Chiptakt zum Ansteuern anderer Schaltkreise im System verwendet wird. Beachten Sie, dass der Takt während des Zurücksetzens nicht ausgegeben wird und dass der normale Betrieb des I/O-Pins überschrieben wird, wenn die Sicherung programmiert ist. Interner RC-Oszillator, WDT-Oszillator, PLL und externer Takt (CLKI) können ausgewählt werden, wenn der Takt am CLKO ausgegeben wird. Quarzoszillatoren (XTAL1, XTAL2) können nicht für die Taktausgabe am CLKO verwendet werden. Wenn der Systemtakt-Prescaler verwendet wird, wird der geteilte Systemtakt ausgegeben.

Registerbeschreibung

OSCCAL – Oszillator-Kalibrierungsregister

Bisschen 7 6 5 4 3 2 1 0
0 x 31 CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0 OSCCAL
Lesen/Schreiben R/W R/W R/W R/W R/W R/W R/W R/W

Bits 7:0 – CAL[7:0]: Oszillator-Kalibrierungswert

Das Oszillator-Kalibrierungsregister wird verwendet, um den kalibrierten internen RC-Oszillator zu trimmen, um Prozessabweichungen von der Oszillatorfrequenz zu entfernen. Ein vorprogrammierter Kalibrierungswert wird beim Chip-Reset automatisch in dieses Register geschrieben, wodurch die werkseitig kalibrierte Frequenz wie in angegeben erreicht wird. Tabelle 21-2 auf Seite 164. Die Anwendungssoftware kann dieses Register schreiben, um die Oszillatorfrequenz zu ändern. Der Oszillator kann auf Frequenzen kalibriert werden, wie in Tabelle 21-2 auf Seite 164Eine Kalibrierung außerhalb dieses Bereichs kann nicht garantiert werden.

Beachten Sie, dass dieser Oszillator zum Takten von EEPROM- und Flash-Schreibzugriffen verwendet wird und diese Schreibzeiten entsprechend beeinflusst werden. Wenn auf EEPROM oder Flash geschrieben wird, kalibrieren Sie nicht auf mehr als 8.8 MHz. Andernfalls kann der EEPROM- oder Flash-Schreibvorgang fehlschlagen.

Das CAL7-Bit bestimmt den Betriebsbereich des Oszillators. Wenn dieses Bit auf 0 gesetzt wird, ergibt sich der niedrigste Frequenzbereich, wenn dieses Bit auf 1 gesetzt wird, ergibt sich der höchste Frequenzbereich. Die beiden Frequenzbereiche überlappen sich, d. h. eine Einstellung von OSCCAL = 0x7F ergibt eine höhere Frequenz als OSCCAL = 0x80.

Die CAL[6:0]-Bits werden verwendet, um die Frequenz innerhalb des ausgewählten Bereichs abzustimmen. Eine Einstellung von 0x00 ergibt die niedrigste Frequenz in diesem Bereich, und eine Einstellung von 0x7F ergibt die höchste Frequenz in dem Bereich.

Um einen stabilen Betrieb der MCU zu gewährleisten, sollte der Kalibrierungswert nur geringfügig geändert werden. Eine Frequenzabweichung von mehr als 2 % von einem Zyklus zum nächsten kann zu unvorhersehbarem Verhalten führen. Änderungen in OSCCAL sollten bei jeder Kalibrierung 0x20 nicht überschreiten. Es muss sichergestellt werden, dass die MCU während solcher Änderungen der Taktfrequenz im Reset bleibt.

Tabelle 6-14. Frequenzbereich des internen RC-Oszillators

OSCCAL-Wert Typische niedrigste Frequenz im Verhältnis zur Nennfrequenz Typische Höchstfrequenz im Verhältnis zur Nennfrequenz
0 x 00 50 % 100 %
Version: 75 % 150 %
Version: 100 % 200 %

CLKPR – Takt-Prescale-Register

Bisschen 7 6 5 4 3 2 1 0
0 x 26 CLKPCE CLKPS3 CLKPS2 CLKPS1 CLKPS0 CLKPR
Lesen/Schreiben R/W R R R R/W R/W R/W R/W

Anfangswert 0 0 0 0 Siehe Bitbeschreibung

Bit 7 – CLKPCE: Änderung des Taktvorteilers aktivieren

Das CLKPCE-Bit muss auf logisch Eins geschrieben werden, um eine Änderung der CLKPS-Bits zu ermöglichen. Das CLKPCE-Bit wird nur aktualisiert, wenn die anderen Bits in CLKPR gleichzeitig auf Null geschrieben werden. CLKPCE wird vier Zyklen nach dem Schreiben oder wenn die CLKPS-Bits geschrieben werden, von der Hardware gelöscht. Das erneute Schreiben des CLKPCE-Bits innerhalb dieser Timeout-Periode verlängert weder die Timeout-Periode noch löscht es das CLKPCE-Bit.

Bits 6:4 – Res: Reservierte Bits

Diese Bits sind im ATtiny25/45/85 reservierte Bits und werden immer als Null gelesen.

Bits 3:0 – CLKPS[3:0]: Takt-Prescaler-Auswahl Bits 3 – 0

Diese Bits definieren den Teilungsfaktor zwischen der ausgewählten Taktquelle und dem internen Systemtakt. Diese Bits können während der Laufzeit geschrieben werden, um die Taktfrequenz entsprechend den Anwendungsanforderungen zu variieren. Da der Teiler den Haupttakteingang zur MCU teilt, wird die Geschwindigkeit aller synchronen Peripheriegeräte reduziert, wenn ein Teilungsfaktor verwendet wird. Die Teilungsfaktoren sind in Tabelle 6-15.

Um unbeabsichtigte Änderungen der Taktfrequenz zu vermeiden, muss zum Ändern der CLKPS-Bits ein spezielles Schreibverfahren befolgt werden:

Schreiben Sie das Clock Prescaler Change Enable (CLKPCE)-Bit auf Eins und alle anderen Bits in CLKPR auf Null.

Schreiben Sie innerhalb von vier Zyklen den gewünschten Wert in CLKPS und gleichzeitig eine Null in CLKPCE.

Beim Ändern der Prescaler-Einstellungen müssen Interrupts deaktiviert werden, um sicherzustellen, dass der Schreibvorgang nicht unterbrochen wird.

Die CKDIV8-Sicherung bestimmt den Anfangswert der CLKPS-Bits. Wenn CKDIV8 nicht programmiert ist, werden die CLKPS-Bits auf „0000“ zurückgesetzt. Wenn CKDIV8 programmiert ist, werden die CLKPS-Bits auf „0011“ zurückgesetzt, was beim Start einen Teilungsfaktor von acht ergibt. Diese Funktion sollte verwendet werden, wenn die ausgewählte Taktquelle eine höhere Frequenz hat als die maximale Frequenz des Geräts unter den aktuellen Betriebsbedingungen. Beachten Sie, dass unabhängig von der CKDIV8-Sicherungseinstellung jeder beliebige Wert in die CLKPS-Bits geschrieben werden kann. Die Anwendungssoftware muss sicherstellen, dass ein ausreichender Teilungsfaktor vorhanden ist.

gewählt, wenn die ausgewählte Taktquelle eine höhere Frequenz hat als die maximale Frequenz des Geräts unter den aktuellen Betriebsbedingungen. Das Gerät wird mit programmierter CKDIV8-Sicherung ausgeliefert.

Tabelle 6-15. Auswahl des Taktvorskalierers

CLKPS3 CLKPS2 CLKPS1 CLKPS0 Taktteilungsfaktor
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 Reserviert
1 0 1 0 Reserviert
1 0 1 1 Reserviert
1 1 0 0 Reserviert
1 1 0 1 Reserviert
1 1 1 0 Reserviert
1 1 1 1 Reserviert

Hinweis: Der Prescaler ist im ATtiny15-Kompatibilitätsmodus deaktiviert und weder das Schreiben in CLKPR noch das Programmieren der CKDIV8-Sicherung hat Auswirkungen auf die Systemtaktfrequenz (die immer 1.6 MHz beträgt).

Energieverwaltung und Ruhemodi

Die hohe Leistung und branchenführende Codeeffizienz machen die AVR-Mikrocontroller zur idealen Wahl für Anwendungen mit geringem Stromverbrauch. Darüber hinaus ermöglichen Schlafmodi der Anwendung, nicht verwendete Module in der MCU abzuschalten und so Strom zu sparen. Der AVR bietet verschiedene Schlafmodi, mit denen der Benutzer den Stromverbrauch an die Anforderungen der Anwendung anpassen kann.

Schlafmodi

Abbildung 6-1 auf Seite 23 stellt die verschiedenen Taktsysteme und deren Verteilung in ATtiny25/45/85 dar. Die Abbildung ist hilfreich bei der Auswahl eines geeigneten Schlafmodus. Tabelle 7-1 zeigt die verschiedenen Schlafmodi und ihre Weckquellen.

Tabelle 7-1. Aktive Taktdomänen und Aktivierungsquellen in den verschiedenen Schlafmodi

Aktive Taktdomänen Oszillatoren Aktivierungsquellen
Schlafmodus clkCPU clkFLASH clkIO clkADC clkPCK Haupttaktquelle aktiviert INT0 und Pin-Änderung SPM/EEPROM

Bereit

 

USI-Startbedingung

ADC Andere E/A Wachhund Unterbrechen
Leerlauf X X X X X X X X X X
ADC-Rauschunterdrückung X X X(1) X X X X
Stromausfall X(1) X X

Hinweis: Für INT0 nur Level-Interrupt.

Um in einen der drei Schlafmodi zu wechseln, muss das SE-Bit in MCUCR auf logisch Eins geschrieben und ein SLEEP-Befehl ausgeführt werden. Die SM[1:0]-Bits im MCUCR-Register wählen aus, welcher Schlafmodus (Leerlauf, ADC-Rauschunterdrückung oder Ausschalten) durch den SLEEP-Befehl aktiviert wird. Siehe Tabelle 7-2 für eine Zusammenfassung.

Wenn ein aktivierter Interrupt auftritt, während sich die MCU im Schlafmodus befindet, wird die MCU aktiviert. Die MCU wird dann zusätzlich zur Startzeit für vier Zyklen angehalten, führt die Interruptroutine aus und nimmt die Ausführung ab dem Befehl nach SLEEP wieder auf. Der Inhalt des Registers File und SRAM bleiben unverändert, wenn das Gerät aus dem Ruhezustand erwacht. Wenn im Ruhemodus ein Reset erfolgt, wird die MCU geweckt und führt den Reset-Vektor aus.

Hinweis: Wenn zum Aufwecken ein pegelgesteuerter Interrupt verwendet wird, muss der geänderte Pegel einige Zeit lang gehalten werden, um die MCU aufzuwecken (und damit die MCU in die Interrupt-Serviceroutine eintritt). Siehe „Externe Interrupts“ auf Seite 49 für weitere Einzelheiten.

Ruhezustand

Wenn die SM[1:0]-Bits auf 00 geschrieben werden, schaltet der SLEEP-Befehl die MCU in den Leerlaufmodus, wodurch die CPU angehalten wird, Analogkomparator, ADC, USI, Timer/Zähler, Watchdog und das Interruptsystem jedoch weiterarbeiten können. Dieser Ruhemodus hält grundsätzlich clkCPU und clkFLASH an, während die anderen Taktgeber weiterlaufen.

Im Leerlaufmodus kann die MCU sowohl von externen als auch von internen Interrupts wie dem Timer-Überlauf geweckt werden. Wenn kein Wecken durch den Analog-Comparator-Interrupt erforderlich ist, kann der Analog-Comparator durch Setzen des ACD-Bits in ausgeschaltet werden. „ACSR – Analoges Komparator-Kontroll- und Statusregister“ auf Seite 120. Dadurch wird der Stromverbrauch im Leerlaufmodus reduziert. Wenn der ADC aktiviert ist, wird beim Wechsel in diesen Modus automatisch eine Konvertierung gestartet.

ADC-Rauschunterdrückungsmodus

Wenn die SM[1:0]-Bits auf 01 geschrieben werden, versetzt der SLEEP-Befehl die MCU in den ADC-Rauschunterdrückungsmodus, wodurch die CPU angehalten wird, der ADC, die externen Interrupts und der Watchdog jedoch weiterarbeiten können (sofern aktiviert). Dieser Schlafmodus hält clkI/O, clkCPU und clkFLASH an, während die anderen Taktgeber weiterlaufen.

Dies verbessert die Rauschumgebung für den ADC und ermöglicht Messungen mit höherer Auflösung. Wenn der ADC aktiviert ist, startet automatisch eine Konvertierung, wenn dieser Modus aufgerufen wird. Abgesehen vom ADC-Konvertierungs-Abschluss-Interrupt kann nur ein externer Reset, ein Watchdog-Reset, ein Brown-out-Reset, ein SPM/EEPROM-Bereitschafts-Interrupt, ein externer Pegel-Interrupt auf INT0 oder ein Pin-Wechsel-Interrupt den MCU aus dem ADC-Rauschunterdrückungsmodus wecken.

Power-down-Modus

Wenn die SM[1:0]-Bits auf 10 geschrieben werden, versetzt der SLEEP-Befehl die MCU in den Power-Down-Modus. In diesem Modus wird der Oszillator gestoppt, während die externen Interrupts, die USI-Startbedingungserkennung und der Watchdog (sofern aktiviert) weiterarbeiten. Nur ein externer Reset, ein Watchdog-Reset, ein Brown-out-Reset, ein USI-Startbedingungs-Interrupt, ein externer Level-Interrupt auf INT0 oder ein Pin-Change-Interrupt können die MCU wecken. Dieser Schlafmodus hält alle generierten Takte an und ermöglicht nur den Betrieb asynchroner Module.

Software-BOD deaktivieren

Wenn der Brown-out Detector (BOD) durch BODLEVEL-Sicherungen aktiviert wird (siehe Tabelle 20-4 auf Seite 148) überwacht der Vorstand aktiv das Angebotsvolumentage während einer Schlafphase. Bei einigen Geräten ist es möglich, Strom zu sparen, indem der BOD im Power-Down-Schlafmodus per Software deaktiviert wird. Der Stromverbrauch im Schlafmodus ist dann auf dem gleichen Niveau wie wenn der BOD global durch Sicherungen deaktiviert ist.

Wenn BOD per Software deaktiviert ist, wird die BOD-Funktion sofort nach dem Eintritt in den Ruhemodus ausgeschaltet. Beim Aufwachen aus dem Ruhemodus wird BOD automatisch wieder aktiviert. Dies gewährleistet einen sicheren Betrieb, falls der VCC-Pegel während der Ruhephase gesunken ist.

Wenn das BOD deaktiviert wurde, ist die Aufwachzeit aus dem Ruhemodus dieselbe wie die zum Aufwachen aus dem RESET. Der Benutzer muss die Aufwachzeiten manuell konfigurieren, sodass die Bandlückenreferenz Zeit zum Starten hat und das BOD ordnungsgemäß funktioniert, bevor die MCU mit der Ausführung des Codes fortfährt. Siehe SUT[1:0]- und CKSEL[3:0]-Sicherungsbits in der Tabelle „Fuse Low Byte“ auf Seite 149

Die BOD-Deaktivierung wird durch das BODS-Bit (BOD Sleep) des MCU-Steuerregisters gesteuert, siehe „MCUCR – MCU-Steuerung Registrieren“ auf Seite 37. Wenn dieses Bit auf 1 geschrieben wird, wird BOD beim Power-Down ausgeschaltet, während das Schreiben auf 0 das BOD aktiv hält. Die Standardeinstellung ist 0, d. h. BOD aktiv.

Das Schreiben in das BODS-Bit wird durch eine zeitgesteuerte Sequenz und ein Enable-Bit gesteuert, siehe „MCUCR – MCU Control Register ter“ auf Seite 37.

Einschränkungen

Die BOD-Deaktivierungsfunktion wurde nur in den folgenden Geräten implementiert:

ATtiny25, Revision E und neuer

ATtiny45, Revision D und neuer

ATtiny85, Revision C und neuer

Revisionen sind auf der Geräteverpackung gekennzeichnet und können wie folgt gefunden werden:

Unterseite der Pakete 8P3 und 8S2

Oberseite des Pakets 20M1

Leistungsreduzierungsregister

Das Power Reduction Register (PRR), siehe „PRR – Leistungsreduzierungsregister“ auf Seite 38bietet eine Methode zur Reduzierung des Stromverbrauchs durch Anhalten der Uhr einzelner Peripheriegeräte. Der aktuelle Zustand des Peripheriegeräts wird eingefroren und die E/A-Register können nicht gelesen oder geschrieben werden. Ressourcen, die das Peripheriegerät beim Anhalten der Uhr verwendet, bleiben belegt, daher sollte das Peripheriegerät in den meisten Fällen vor dem Anhalten der Uhr deaktiviert werden. Das Aufwecken eines Moduls, das durch Löschen des Bits in PRR erfolgt, versetzt das Modul in denselben Zustand wie vor dem Herunterfahren.

Die Modulabschaltung kann im Idle-Modus und im Active-Modus verwendet werden, um den Gesamtstromverbrauch deutlich zu senken. In allen anderen Schlafmodi ist die Uhr bereits angehalten. Siehe „Stromversorgung der I/O-Module“ auf Seite 177 zum Beispielamples.

Minimierung des Stromverbrauchs

Beim Versuch, den Stromverbrauch in einem AVR-gesteuerten System zu minimieren, müssen verschiedene Aspekte berücksichtigt werden. Generell sollten Ruhemodi so oft wie möglich verwendet werden und der Ruhemodus sollte so gewählt werden, dass möglichst wenige Funktionen des Geräts ausgeführt werden. Alle nicht benötigten Funktionen sollten deaktiviert werden. Insbesondere die folgenden Module müssen möglicherweise besonders berücksichtigt werden, wenn versucht wird, den geringstmöglichen Stromverbrauch zu erreichen.

Analog-Digital-Wandler

Wenn aktiviert, wird der ADC in allen Schlafmodi aktiviert. Um Strom zu sparen, sollte der ADC vor dem Wechsel in einen Schlafmodus deaktiviert werden. Wenn der ADC aus- und wieder eingeschaltet wird, ist die nächste Konvertierung eine erweiterte Konvertierung. Siehe „Analog-Digital-Umsetzer“ auf Seite 122 für Einzelheiten zum ADC-Betrieb.

Analoger Komparator

Beim Wechsel in den Ruhemodus sollte der Analogkomparator deaktiviert werden, wenn er nicht verwendet wird. Beim Wechsel in den ADC-Rauschunterdrückungsmodus sollte der Analogkomparator deaktiviert werden. In den anderen Ruhemodi wird der Analogkomparator automatisch deaktiviert. Wenn der Analogkomparator jedoch so eingestellt ist, dass er den internen Lautstärkeregler verwendet,tage Referenz als Eingang, der Analogkomparator sollte in allen Schlafmodi deaktiviert werden. Andernfalls wird der interne Voltage Die Referenz wird unabhängig vom Ruhemodus aktiviert. Siehe „Analogkomparator“ auf Seite 119 für Einzelheiten zur Konfiguration des Analogkomparators.

Spannungsabfall-Detektor

Wenn der Brown-out-Detektor in der Anwendung nicht benötigt wird, sollte dieses Modul ausgeschaltet werden. Wenn der Brown-out-Detektor durch die BODLEVEL-Sicherungen aktiviert wird, ist er in allen Schlafmodi aktiviert und verbraucht daher immer Strom. In den tieferen Schlafmodi trägt dies erheblich zum Gesamtstromverbrauch bei. Siehe „Brown-out-Erkennung ” auf Seite 41 Und „Software-BOD-Deaktivierung“ auf Seite 35 für Einzelheiten zur Konfiguration des Brown-out-Detektors.

Interne Lautstärketage Referenz

Die interne LautstärketagDie Referenz wird bei Bedarf von der Brown-out-Erkennung, dem Analogkomparator oder dem ADC aktiviert. Wenn diese Module wie in den obigen Abschnitten beschrieben deaktiviert werden, wird die interne LautstärketagDie Referenz wird deaktiviert und verbraucht keinen Strom. Beim erneuten Einschalten muss der Benutzer die Referenz starten lassen, bevor der Ausgang verwendet wird. Wenn die Referenz im Ruhemodus eingeschaltet bleibt, kann der Ausgang sofort verwendet werden. Siehe „Interne Voltage Referenz“ auf Seite 42 für Einzelheiten zur Startzeit.

Watchdog-Zeitgeber

Wenn der Watchdog-Timer in der Anwendung nicht benötigt wird, sollte dieses Modul ausgeschaltet werden. Wenn der Watchdog-Timer aktiviert ist, ist er in allen Schlafmodi aktiviert und verbraucht daher immer Strom. In den tieferen Schlafmodi trägt dies erheblich zum Gesamtstromverbrauch bei. Siehe „Watchdog-Timer“ auf Seite 42 für Einzelheiten zur Konfiguration des Watchdog-Timers.

Anschlussstifte

Beim Wechsel in den Ruhemodus sollten alle Port-Pins so konfiguriert werden, dass sie nur minimalen Strom verbrauchen. Das Wichtigste ist dann, sicherzustellen, dass keine Pins ohmsche Lasten treiben. In Ruhemodi, in denen sowohl der I/O-Takt (clkI/O) als auch der ADC-Takt (clkADC) gestoppt sind, werden die Eingangspuffer des Geräts deaktiviert. Dadurch wird sichergestellt, dass kein Strom verbraucht wird.

von der Eingangslogik, wenn sie nicht benötigt wird. In manchen Fällen wird die Eingangslogik benötigt, um Wake-Up-Bedingungen zu erkennen, und

es wird dann aktiviert. Siehe den Abschnitt „Digitaleingang aktivieren und Ruhemodus“ auf Seite 57 für Details zu den aktivierten Pins. Wenn der Eingangspuffer aktiviert ist und das Eingangssignal schwebend bleibt oder einen analogen Signalpegel nahe VCC/2 hat, verbraucht der Eingangspuffer übermäßig viel Strom.

Bei analogen Eingangspins sollte der digitale Eingangspuffer immer deaktiviert sein. Ein analoger Signalpegel nahe VCC/2 an einem Eingangspin kann selbst im aktiven Modus einen erheblichen Strom verursachen. Digitale Eingangspuffer können durch Schreiben in das Digital Input Disable Register (DIDR0) deaktiviert werden. Siehe „DIDR0 – Digital Input Disable Register 0“ auf Seite 121 für weitere Einzelheiten.

Registerbeschreibung

MCUCR – MCU-Steuerregister

Das MCU-Steuerregister enthält Steuerbits für die Energieverwaltung.

Bisschen 7 6 5 4 3 2 1 0
0 x 35 BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Lesen/Schreiben R R/W R/W R/W R/W R R/W R/W
Anfangswert 0 0 0 0 0 0 0 0

Bit 7 – BODS: BOD Schlaf

Die BOD-Deaktivierungsfunktion ist nur bei einigen Geräten verfügbar. Siehe "Einschränkungen" auf Seite 36.

Um den BOD während des Schlafs zu deaktivieren (siehe Tabelle 7-1 auf Seite 34) muss das BODS-Bit auf logisch Eins gesetzt werden. Dies wird durch eine zeitgesteuerte Sequenz und das Aktivierungsbit BODSE in MCUCR gesteuert. Zunächst müssen sowohl BODS als auch BODSE auf Eins gesetzt werden. Zweitens muss BODS innerhalb von vier Taktzyklen auf Eins und BODSE auf Null gesetzt werden. Das BODS-Bit ist drei Taktzyklen nach seiner Einstellung aktiv. Während BODS aktiv ist, muss ein Sleep-Befehl ausgeführt werden, um das BOD für den eigentlichen Sleep-Modus auszuschalten. Das BODS-Bit wird nach drei Taktzyklen automatisch gelöscht.

Auf Geräten, auf denen Sleeping BOD nicht implementiert wurde, wird dieses Bit nicht verwendet und zeigt immer den Wert Null an.

Bit 5 – SE: Ruhezustand aktivieren

Das SE-Bit muss auf logisch 1 geschrieben werden, damit die MCU in den Schlafmodus wechselt, wenn der SLEEP-Befehl ausgeführt wird. Um zu verhindern, dass die MCU in den Schlafmodus wechselt, es sei denn, der Programmierer beabsichtigt dies, wird empfohlen, das Sleep Enable (SE)-Bit unmittelbar vor der Ausführung des SLEEP-Befehls auf 1 zu schreiben und es sofort nach dem Aufwachen zu löschen.

Bits 4:3 – SM[1:0]: Auswahlbits 1 und 0 für den Ruhemodus

Diese Bits wählen zwischen den drei verfügbaren Schlafmodi aus, wie in Tabelle 7-2.

Tabelle 7-2. Auswahl des Ruhemodus

SM1 SM0 Schlafmodus
0 0 Leerlauf
0 1 ADC-Rauschunterdrückung
1 0 Stromausfall
1 1 Reserviert

Bit 2 – BODSE: BOD-Schlaf aktivieren

Die BOD-Deaktivierungsfunktion ist nur bei einigen Geräten verfügbar. Siehe "Einschränkungen" auf Seite 36.

Das BODSE-Bit ermöglicht das Setzen des BODS-Steuerbits, wie in der BODS-Bitbeschreibung erläutert. Die BOD-Deaktivierung wird durch eine zeitgesteuerte Sequenz gesteuert.

Dieses Bit wird auf Geräten, auf denen die Software-BOD-Deaktivierung nicht implementiert wurde, nicht verwendet und wird auf diesen Geräten als Null gelesen.

PRR – Leistungsreduzierungsregister

Das Power Reduction Register bietet eine Methode zur Reduzierung des Stromverbrauchs durch die Deaktivierung peripherer Taktsignale.

Bisschen 7 6 5 4 3 2 1 0
0 x 20 PRTIMI1 PRTIMI0 PRUSI PRADC PRR
Lesen/Schreiben R R R R R/W R/W R/W R/W
Anfangswert 0 0 0 0 0 0 0 0

Bits 7:4 – Res: Reservierte Bits

Diese Bits sind im ATtiny25/45/85 reservierte Bits und werden immer als Null gelesen.

Bit 3 – PRTIM1: Leistungsreduzierungs-Timer/Zähler1

Das Schreiben einer logischen Eins in dieses Bit schaltet das Timer/Counter1-Modul ab. Wenn Timer/Counter1 aktiviert ist, wird der Betrieb wie vor dem Herunterfahren fortgesetzt.

Bit 2 – PRTIM0: Leistungsreduzierungs-Timer/Zähler0

Das Schreiben einer logischen Eins in dieses Bit schaltet das Timer/Counter0-Modul ab. Wenn Timer/Counter0 aktiviert ist, wird der Betrieb wie vor dem Herunterfahren fortgesetzt.

Bit 1 – PRUSI: Leistungsreduzierung USI

Wenn Sie eine logische Eins in dieses Bit schreiben, wird das USI heruntergefahren, indem die Uhr zum Modul angehalten wird. Wenn Sie das USI wieder aktivieren, sollte es neu initialisiert werden, um einen ordnungsgemäßen Betrieb sicherzustellen.

Bit 0 – PRADC: Leistungsreduzierungs-ADC

Das Schreiben einer logischen Eins in dieses Bit schaltet den ADC ab. Der ADC muss vor dem Abschalten deaktiviert werden. Beachten Sie, dass der ADC-Takt auch von einigen Teilen des analogen Komparators verwendet wird, was bedeutet, dass der analoge Komparator nicht verwendet werden kann, wenn dieses Bit hoch ist.

Systemsteuerung und Reset

Zurücksetzen des AVR

Beim Zurücksetzen werden alle I/O-Register auf ihre Anfangswerte gesetzt und das Programm beginnt mit der Ausführung vom Reset-Vektor. Der am Reset-Vektor platzierte Befehl muss ein RJMP-Befehl (Relative Jump) zur Reset-Behandlungsroutine sein. Wenn das Programm nie eine Interrupt-Quelle aktiviert, werden die Interrupt-Vektoren nicht verwendet und an diesen Stellen kann regulärer Programmcode platziert werden. Der Schaltplan in Abbildung 8-1 zeigt die Reset-Logik. Die elektrischen Parameter der Reset-Schaltung sind in „System- und Reset-Eigenschaften“ auf Seite 165.

Abbildung 8-1 Reset-Logik Reset-Logik

Die I/O-Ports des AVR werden sofort auf ihren Ausgangszustand zurückgesetzt, wenn eine Reset-Quelle aktiv wird. Dazu ist es nicht erforderlich, dass eine Taktquelle läuft.

Nachdem alle Reset-Quellen inaktiv geworden sind, wird ein Verzögerungszähler aufgerufen, der den internen Reset verlängert. Dadurch kann die Leistung ein stabiles Niveau erreichen, bevor der Normalbetrieb beginnt. Die Timeout-Periode des Verzögerungszählers wird vom Benutzer über die SUT- und CKSEL-Sicherungen definiert. Die verschiedenen Auswahlmöglichkeiten für die Verzögerungsperiode werden in "Uhr Quellen“ auf Seite 25.

Quellen zurücksetzen

Der ATtiny25/45/85 verfügt über vier Reset-Quellen:

Power-on Reset. Die MCU wird zurückgesetzt, wenn die Versorgungsspannungtage liegt unter dem Power-on-Reset-Schwellenwert (VPOT).

Externer Reset. Die MCU wird zurückgesetzt, wenn am RESET-Pin länger als die Mindestimpulslänge ein niedriger Pegel anliegt.

Watchdog-Reset. Die MCU wird zurückgesetzt, wenn der Watchdog-Timer abläuft und der Watchdog aktiviert wird.

Brown-out Reset. Die MCU wird zurückgesetzt, wenn die VersorgungsspannungtagDer VCC liegt unter dem Brown-Out-Reset-Schwellenwert (VBOT) und der Brown-Out-Detektor ist aktiviert.

Power-On-Reset

Ein Power-on Reset (POR)-Impuls wird von einer On-Chip-Erkennungsschaltung erzeugt. Der Erkennungspegel ist definiert in „System- tem- und Reset-Eigenschaften“ auf Seite 165. Der POR wird aktiviert, wenn VCC unter dem Erkennungspegel liegt. Die POR-Schaltung kann verwendet werden, um den Start-Reset auszulösen sowie einen Ausfall der Versorgungsspannung zu erkennen.tage.

Eine Power-on Reset (POR)-Schaltung sorgt dafür, dass das Gerät nach dem Einschalten zurückgesetzt wird. Das Erreichen der Power-on Reset-Schwelletage ruft den Verzögerungszähler auf, der bestimmt, wie lange das Gerät nach einem VCC-Anstieg im RESET-Zustand bleibt. Das RESET-Signal wird ohne Verzögerung erneut aktiviert, wenn VCC unter den Erkennungspegel fällt.

Abbildung 8-2. MCU-Start, RESET an VCC gebunden

INTERNER RESET

Abbildung 8-3. MCU-Start, externer RESET-Extender

Externer Reset

Ein externer Reset wird durch einen niedrigen Pegel am RESET-Pin erzeugt, sofern dieser aktiviert ist. Reset-Impulse, die länger als die minimale Impulsbreite sind (siehe „System- und Reset-Eigenschaften“ auf Seite 165) wird einen Reset auslösen, auch wenn die Uhr nicht läuft. Kürzere Impulse führen nicht unbedingt zu einem Reset. Wenn das angelegte Signal den Reset Threshold Vol erreicht,tage – VRST – an seiner positiven Flanke startet der Verzögerungszähler die MCU, nachdem die Timeout-Periode abgelaufen ist.

Abbildung 8-4. Externes Zurücksetzen während des Betriebs Abb.8.4

Brown-out-Erkennung

ATtiny25/45/85 verfügt über eine integrierte Brown-out Detection (BOD)-Schaltung zur Überwachung des VCC-Pegels während des Betriebs durch Vergleich mit einem festen Triggerpegel. Der Triggerpegel für die BOD kann über die BODLEVEL-Sicherungen ausgewählt werden. Der Triggerpegel verfügt über eine Hysterese, um eine spitzenfreie Brown-out-Erkennung zu gewährleisten. Die Hysterese des Erkennungspegels sollte als VBOT+ = VBOT + VHYST/2 und VBOT- = VBOT – VHYST/2 interpretiert werden.

Wenn der BOD aktiviert ist und VCC auf einen Wert unterhalb des Triggerpegels (VBOT- in Abbildung 8-5), wird der Brown-out Reset sofort aktiviert. Wenn VCC über den Triggerpegel steigt (VBOT+ in Abbildung 8-5), startet der Verzögerungszähler die MCU, nachdem die Timeout-Zeit tTOUT abgelaufen ist.

Die BOD-Schaltung erkennt einen Abfall der VCC nur, wenn die Voltage bleibt länger als tBOD unter dem Auslösewert in „System- und Reset-Eigenschaften“ auf Seite 165. Abb.8.5

Watchdog zurücksetzen

Wenn der Watchdog ein Timeout hat, wird ein kurzer Reset-Impuls mit der Dauer eines CK-Zyklus generiert. An der fallenden Flanke dieses Impulses beginnt der Verzögerungszeitgeber mit dem Zählen der Timeout-Periode tTOUT. Siehe „Watchdog-Timer“ auf Seite 42 für Einzelheiten zum Betrieb des Watchdog-Timers.

Bandtage Referenzfreigabesignale und Startzeit

Die voltagDie Referenz hat eine Startzeit, die Einfluss auf die Art und Weise haben kann, wie sie verwendet werden soll. Die Startzeit ist angegeben in „System- und Reset-Eigenschaften“ auf Seite 165. Um Strom zu sparen, ist die Referenz nicht immer eingeschaltet. Die Referenz ist in den folgenden Situationen eingeschaltet:

Wenn der BOD aktiviert ist (durch Programmieren der BODLEVEL[2:0]-Sicherungsbits).

Wenn die Bandlückenreferenz mit dem analogen Komparator verbunden ist (durch Setzen des ACBG-Bits in ACSR).

Wenn der ADC aktiviert ist.

Wenn der BOD nicht aktiviert ist, muss der Benutzer nach dem Setzen des ACBG-Bits oder dem Aktivieren des ADC immer den Referenzstart zulassen, bevor der Ausgang des Analogkomparators oder ADC verwendet wird. Um den Stromverbrauch im Power-Down-Modus zu reduzieren, kann der Benutzer die drei oben genannten Bedingungen vermeiden, um sicherzustellen, dass die Referenz ausgeschaltet ist, bevor er in den Power-Down-Modus wechselt.

Watchdog-Zeitgeber

Der Watchdog-Timer wird von einem On-Chip-Oszillator getaktet, der mit 128 kHz läuft. Durch die Steuerung des Watchdog-Timer-Prescalers kann das Watchdog-Reset-Intervall wie in dargestellt angepasst werden. Tabelle 8-3 auf Seite 46. Der WDR-Befehl (Watchdog Reset) setzt den Watchdog-Timer zurück. Der Watchdog-Timer wird auch zurückgesetzt, wenn er deaktiviert ist und wenn ein Chip-Reset erfolgt. Zur Bestimmung des Rücksetzzeitraums können zehn verschiedene Taktzyklusperioden ausgewählt werden. Wenn der Rücksetzzeitraum ohne einen weiteren Watchdog-Reset abläuft, wird der ATtiny25/45/85 zurückgesetzt und vom Reset-Vektor ausgeführt. Einzelheiten zum Timing des Watchdog-Resets finden Sie unter Tabelle 8-3 auf Seite 46.

Der Watchdog-Timer kann auch so konfiguriert werden, dass er statt eines Resets einen Interrupt erzeugt. Dies kann sehr hilfreich sein, wenn der Watchdog zum Aufwachen aus dem Power-Down-Modus verwendet wird.

Um ein unbeabsichtigtes Deaktivieren des Watchdogs oder eine unbeabsichtigte Änderung der Timeout-Zeit zu verhindern, werden durch die Sicherung WDTON zwei verschiedene Sicherheitsstufen ausgewählt, wie in dargestellt. Tabelle 8-1 Siehe „Zeitgesteuerte Sequenzen zum Ändern der Konfiguration des Watchdog Timers” auf Seite 43 für weitere Einzelheiten.

Tabelle 8-1. WDT-Konfiguration als Funktion der Sicherungseinstellungen von WDTON

WDTON Sicherheitsstufe WDT-Anfangszustand So deaktivieren Sie den WDT So ändern Sie das Timeout
Unprogrammiert 1 Deaktiviert Zeitgesteuerte Sequenz Keine Einschränkungen
Programmiert 2 Ermöglicht Immer aktiviert Zeitgesteuerte Sequenz

Abbildung 8-7. Watchdog-Timer Wachhund

Zeitgesteuerte Sequenzen zum Ändern der Konfiguration des Watchdog-Timers

Die Reihenfolge der Konfigurationsänderungen ist bei den beiden Sicherheitsstufen leicht unterschiedlich. Für jede Stufe werden separate Vorgehensweisen beschrieben.

Sicherheitsstufe 1: In diesem Modus ist der Watchdog-Timer zunächst deaktiviert, kann aber durch Schreiben des WDE-Bits auf eins ohne Einschränkung aktiviert werden. Beim Deaktivieren eines aktivierten Watchdog-Timers ist eine zeitgesteuerte Sequenz erforderlich. Zum Deaktivieren eines aktivierten Watchdog-Timers muss das folgende Verfahren befolgt werden:

Schreiben Sie im selben Vorgang eine logische Eins in WDCE und WDE. Eine logische Eins muss in WDE geschrieben werden, unabhängig vom vorherigen Wert des WDE-Bits.

Schreiben Sie innerhalb der nächsten vier Taktzyklen im selben Vorgang die WDE- und WDP-Bits wie gewünscht, aber mit gelöschtem WDCE-Bit.

Sicherheitsstufe 2: In diesem Modus ist der Watchdog-Timer immer aktiviert und das WDE-Bit wird immer als Eins gelesen. Beim Ändern der Watchdog-Timeout-Periode ist eine zeitgesteuerte Sequenz erforderlich. Um das Watchdog-Timeout zu ändern, muss das folgende Verfahren befolgt werden:

Schreiben Sie im selben Vorgang eine logische Eins in WDCE und WDE. Obwohl WDE immer gesetzt ist, muss WDE in eine Eins geschrieben werden, um die zeitgesteuerte Sequenz zu starten.

Schreiben Sie innerhalb der nächsten vier Taktzyklen im selben Vorgang die WDP-Bits wie gewünscht, aber mit gelöschtem WDCE-Bit. Der in das WDE-Bit geschriebene Wert ist irrelevant.

Code Bspample

Der folgende Code exampIn der Abbildung ist eine Assembly und eine C-Funktion zum Ausschalten des WDT zu sehen.ample geht davon aus, dass Interrupts kontrolliert werden (z. B. durch globales Deaktivieren von Interrupts), sodass während der Ausführung dieser Funktionen keine Interrupts auftreten.

Baugruppencode Example(1)
WDT_aus:

wdr

; WDRF in MCUSR löschen

ldi r16, (0<

aus MCUSR, r16

; Logische Eins in WDCE und WDE schreiben

; Behalten Sie die alte Prescaler-Einstellung bei, um ein unbeabsichtigtes Zurücksetzen des Watchdogs zu verhindern

in r16, WDTCR

ori r16, (1<

aus WDTCR, r16

; WDT ausschalten

ldi r16, (0<

aus WDTCR, r16

zurück

C Code Example(1)
ungültig WDT_off(void)

{

_WDR();

/* WDRF in MCUSR löschen */ MCUSR = 0x00

/* Schreibe eine logische Eins in WDCE und WDE */ WDTCR |= (1<

/* WDT ausschalten */ WDTCR = 0x00;

}

Hinweis: 1. Siehe „Code Examples“ auf Seite 6.

Registerbeschreibung

MCUSR – MCU-Statusregister

Das MCU-Statusregister liefert Informationen darüber, welche Reset-Quelle einen MCU-Reset verursacht hat.

Bisschen 7 6 5 4 3 2 1 0
0 x 34 WDRF BORF EXTRF PORF MCUSR
Lesen/Schreiben R R R R R/W R/W R/W R/W

Anfangswert 0 0 0 0 Siehe Bitbeschreibung

Bits 7:4 – Res: Reservierte Bits

Diese Bits sind im ATtiny25/45/85 reservierte Bits und werden immer als Null gelesen.

Bit 3 – WDRF: Watchdog-Reset-Flag

Dieses Bit wird gesetzt, wenn ein Watchdog-Reset erfolgt. Das Bit wird durch einen Power-On-Reset oder durch Schreiben einer logischen Null in das Flag zurückgesetzt.

Bit 2 – BORF: Brown-out-Reset-Flag

Dieses Bit wird gesetzt, wenn ein Brown-out-Reset auftritt. Das Bit wird durch einen Power-on-Reset oder durch Schreiben einer logischen Null in das Flag zurückgesetzt.

Bit 1 – EXTRF: Externes Reset-Flag

Dieses Bit wird gesetzt, wenn ein externer Reset erfolgt. Das Bit wird durch einen Power-On-Reset oder durch Schreiben einer logischen Null in das Flag zurückgesetzt.

Bit 0 – PORF: Einschalt-Reset-Flag

Dieses Bit wird gesetzt, wenn ein Power-on Reset erfolgt. Das Bit wird nur zurückgesetzt, wenn eine logische Null in das Flag geschrieben wird.

Um die Reset-Flags zum Identifizieren eines Reset-Zustands zu verwenden, sollte der Benutzer den MCUSR so früh wie möglich im Programm lesen und dann zurücksetzen. Wenn das Register gelöscht wird, bevor ein weiterer Reset erfolgt, kann die Quelle des Resets durch Untersuchen der Reset-Flags gefunden werden.

WDTCR – Watchdog-Timer-Steuerregister

Bisschen 7 6 5 4 3 2 1 0
0 x 21 WDIF WDIE WDP3 WDCE WDE WDP2 WDP1 WDP0 WDTCR
Lesen/Schreiben R/W R/W R/W R/W R/W R/W R/W R/W
Anfangswert 0 0 0 0 X 0 0 0

Bit 7 – WDIF: Watchdog-Timeout-Interrupt-Flag

Dieses Bit wird gesetzt, wenn im Watchdog-Timer ein Timeout auftritt und der Watchdog-Timer für Interrupts konfiguriert ist. WDIF wird von der Hardware gelöscht, wenn der entsprechende Interrupt-Handling-Vektor ausgeführt wird. Alternativ wird WDIF gelöscht, indem eine logische Eins in das Flag geschrieben wird. Wenn das I-Bit in SREG und WDIE gesetzt ist, wird der Watchdog-Timeout-Interrupt ausgeführt.

Bit 6 – WDIE: Watchdog-Timeout-Interrupt aktivieren

Wenn dieses Bit auf Eins geschrieben wird, WDE gelöscht wird und das I-Bit im Statusregister gesetzt wird, wird der Watchdog Time-out Interrupt aktiviert. In diesem Modus wird der entsprechende Interrupt anstelle eines Resets ausgeführt, wenn ein Timeout im Watchdog Timer auftritt.

Wenn WDE gesetzt ist, wird WDIE automatisch von der Hardware gelöscht, wenn ein Timeout auftritt. Dies ist nützlich, um die Watchdog-Reset-Sicherheit bei Verwendung des Interrupts aufrechtzuerhalten. Nachdem das WDIE-Bit gelöscht wurde, wird beim nächsten Timeout ein Reset generiert. Um den Watchdog-Reset zu vermeiden, muss WDIE nach jedem Interrupt gesetzt werden.

Tabelle 8-2. Watchdog-Timer-Konfiguration

WDE WDIE Watchdog-Timer-Status Maßnahmen bei Auszeit
0 0 Gestoppt Keiner
0 1 Läuft Unterbrechen
1 0 Läuft Zurücksetzen
1 1 Läuft Unterbrechen

Bit 4 – WDCE: Watchdog-Änderung aktivieren

Dieses Bit muss gesetzt sein, wenn das WDE-Bit auf logisch Null geschrieben wird. Andernfalls wird der Watchdog nicht deaktiviert. Sobald es auf Eins geschrieben wurde, löscht die Hardware dieses Bit nach vier Taktzyklen. Informationen zum Deaktivieren des Watchdogs finden Sie in der Beschreibung des WDE-Bits. Dieses Bit muss auch gesetzt werden, wenn die Prescaler-Bits geändert werden. Siehe „Zeitgesteuerte Sequenzen zum Ändern der Konfiguration des Watchdog-Timers“ auf Seite 43.

Bit 3 – WDE: Watchdog aktivieren

Wenn das WDE auf logisch Eins geschrieben wird, wird der Watchdog-Timer aktiviert, und wenn das WDE auf logisch Null geschrieben wird, wird die Watchdog-Timer-Funktion deaktiviert. WDE kann nur gelöscht werden, wenn das WDCE-Bit den Logikpegel Eins hat. Um einen aktivierten Watchdog-Timer zu deaktivieren, muss das folgende Verfahren befolgt werden:

Schreiben Sie im selben Vorgang eine logische Eins in WDCE und WDE. Eine logische Eins muss in WDE geschrieben werden, auch wenn es vor Beginn des Deaktivierungsvorgangs auf Eins gesetzt ist.

Schreiben Sie innerhalb der nächsten vier Taktzyklen eine logische 0 in WDE. Dadurch wird der Watchdog deaktiviert.

In der Sicherheitsstufe 2 ist es nicht möglich, den Watchdog-Timer zu deaktivieren, auch nicht mit dem oben beschriebenen Algorithmus. Siehe „Zeitgesteuerte Abläufe zum Ändern der Konfiguration des Watchdog-Timers“ auf Seite 43.

In Sicherheitsstufe 1 wird WDE durch WDRF in MCUSR überschrieben. Siehe „MCUSR – MCU-Statusregister“ auf Seite 44 für eine Beschreibung von WDRF. Das bedeutet, dass WDE immer gesetzt ist, wenn WDRF gesetzt ist. Um WDE zu löschen, muss WDRF gelöscht werden, bevor der Watchdog mit dem oben beschriebenen Verfahren deaktiviert wird. Diese Funktion gewährleistet mehrere Rücksetzungen während Bedingungen, die einen Fehler verursachen, und einen sicheren Start nach dem Fehler.

Hinweis: Wenn der Watchdog-Timer in der Anwendung nicht verwendet wird, ist es wichtig, bei der Initialisierung des Geräts eine Watchdog-Deaktivierungsprozedur durchzuführen. Wenn der Watchdog versehentlich aktiviert wird, z. B.ampWenn der Zähler durch einen Runaway Pointer oder einen Brownout-Zustand gestört wird, wird das Gerät zurückgesetzt, was wiederum zu einem erneuten Watchdog-Reset führt. Um diese Situation zu vermeiden, sollte die Anwendungssoftware in der Initialisierungsroutine immer das WDRF-Flag und das WDE-Steuerbit löschen.

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

Die WDP[3:0]-Bits bestimmen die Vorskalierung des Watchdog-Timers, wenn dieser aktiviert ist. Die verschiedenen Vorskalierungswerte und die entsprechenden Timeout-Perioden sind in Tabelle 8-3.

Tabelle 8-3. Watchdog-Timer-Vorskalierungsauswahl

WDP3 WDP2 WDP1 WDP0 Anzahl der WDT-Oszillatorzyklen Typisches Timeout bei VCC = 5.0 V
0 0 0 0 2K (2048) Zyklen 16 ms
0 0 0 1 4K (4096) Zyklen 32 ms
0 0 1 0 8K (8192) Zyklen 64 ms
0 0 1 1 16K (16384) Zyklen 0.125 Sekunden
0 1 0 0 32K (32764) Zyklen 0.25 Sekunden
0 1 0 1 64K (65536) Zyklen 0.5 Sekunden
0 1 1 0 128K (131072) Zyklen 1.0 Sekunden
0 1 1 1 256K (262144) Zyklen 2.0 Sekunden
1 0 0 0 512K (524288) Zyklen 4.0 Sekunden
1 0 0 1 1024K (1048576) Zyklen 8.0 Sekunden

Tabelle 8-3. Watchdog-Timer-Vorskalierungsauswahl (Fortsetzung)

WDP3 WDP2 WDP1 WDP0 Anzahl der WDT-Oszillatorzyklen Typisches Timeout bei VCC = 5.0 V
1 0 1 0 Reserviert(1)
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1

Hinweis: 1. Wenn ausgewählt, wird eine der gültigen Einstellungen unter 0b1010 verwendet.

Unterbricht

Dieser Abschnitt beschreibt die Besonderheiten der Interrupt-Behandlung, wie sie in ATtiny25/45/85 durchgeführt wird. Eine allgemeine Erklärung der AVR-Interrupt-Behandlung finden Sie unter „Reset- und Interrupt-Behandlung“ auf Seite 12.

Interrupt-Vektoren in ATtiny25/45/85

Die Interrupt-Vektoren von ATtiny25/45/85 sind beschrieben in Tabelle 9-1unten.

Tabelle 9-1. Reset- und Interrupt-Vektoren

Vektor-Nr. Programmadresse Quelle Interrupt-Definition
1 0 x 0000 ZURÜCKSETZEN Externer Pin, Power-On-Reset, Brown-Out-Reset, Watchdog-Reset
2 0 x 0001 INT0 Externe Interrupt-Anforderung 0
3 0 x 0002 PCINT0 Pin-Änderung Interrupt-Anforderung 0
4 0 x 0003 TIMER1_COMPA Timer/Zähler1 Vergleichen Übereinstimmung A
5 0 x 0004 TIMER1_OVF Timer/Zähler1 Überlauf
6 0 x 0005 TIMER0_OVF Timer/Zähler0 Überlauf
7 0 x 0006 EE_RDY EEPROM-fähig
8 0 x 0007 ANA_COMP Analoger Komparator
9 0 x 0008 ADC ADC-Konvertierung abgeschlossen
10 0 x 0009 TIMER1_COMPB Timer/Zähler1 Vergleichen Übereinstimmung B
11 Version: TIMER0_COMPA Timer/Zähler0 Vergleichen Übereinstimmung A
12 0x000B TIMER0_COMPB Timer/Zähler0 Vergleichen Übereinstimmung B
13 0x000C WDT Watchdog-Zeitüberschreitung
14 Version: USI_START USI START
15 Version: USI_OVF USI-Überlauf

Wenn das Programm niemals eine Interruptquelle aktiviert, werden die Interrupt-Vektoren nicht verwendet und an diesen Stellen kann regulärer Programmcode platziert werden.

Ein typischer und allgemeiner Aufbau für Interrupt-Vektoradressen in ATtiny25/45/85 wird im Programmbeispiel gezeigt.ampsiehe unten.

Baugruppencode Example
.org 0x0000 ;Adresse des nächsten festlegen Stellungnahme
rjmp ZURÜCKSETZEN ; Adresse 0x0000
rjmp INT0_ISR ; Adresse 0x0001
rjmp PCINT0_ISR ; Adresse 0x0002
rjmp TIM1_COMPA_ISR ; Adresse 0x0003
rjmp TIM1_OVF_ISR ; Adresse 0x0004
rjmp TIM0_OVF_ISR ; Adresse 0x0005
rjmp EE_RDY_ISR ; Adresse 0x0006
rjmp ANA_COMP_ISR ; Adresse 0x0007
rjmp ADC_ISR ; Adresse 0x0008
rjmp TIM1_COMPB_ISR ; Adresse 0x0009
rjmp TIM0_COMPA_ISR ; Adresse 0x000A
rjmp TIM0_COMPB_ISR ; Adresse 0x000B
rjmp WDT_ISR ; Adresse 0x000C
rjmp USI_START_ISR ; Adresse 0x000D
rjmp USI_OVF_ISR ; Adresse 0x000E
ZURÜCKSETZEN: ; Start des Hauptprogramms
; Adresse 0x000F

Hinweis: Siehe „Code Examples“ auf Seite 6.

Externe Interrupts

Die externen Interrupts werden durch den INT0-Pin oder einen der PCINT[5:0]-Pins ausgelöst. Beachten Sie, dass die Interrupts, wenn aktiviert, auch dann ausgelöst werden, wenn die INT0- oder PCINT[5:0]-Pins als Ausgänge konfiguriert sind. Diese Funktion bietet eine Möglichkeit, einen Software-Interrupt zu erzeugen. Pin-Wechsel-Interrupts PCI werden ausgelöst, wenn ein aktivierter PCINT[5:0]-Pin umschaltet. Das PCMSK-Register steuert, welche Pins zu den Pin-Wechsel-Interrupts beitragen. Pin-Wechsel-Interrupts auf PCINT[5:0] werden asynchron erkannt. Dies bedeutet, dass diese Interrupts auch zum Aufwecken des Teils aus anderen Schlafmodi als dem Leerlaufmodus verwendet werden können.

Die INT0-Interrupts können durch eine fallende oder steigende Flanke oder einen niedrigen Pegel ausgelöst werden. Dies wird wie in der Spezifikation für das MCU Control Register – MCUCR angegeben eingerichtet. Wenn der INT0-Interrupt aktiviert und als pegelgesteuert konfiguriert ist, wird der Interrupt ausgelöst, solange der Pin niedrig gehalten wird. Beachten Sie, dass die Erkennung von Interrupts mit fallender oder steigender Flanke auf INT0 das Vorhandensein einer E/A-Uhr erfordert, die in beschrieben wird „Uhrensysteme und ihre Verbreitung“ auf Seite 23.

Low-Level-Unterbrechung

Ein Low-Level-Interrupt auf INT0 wird asynchron erkannt. Dies bedeutet, dass dieser Interrupt auch zum Aufwecken des Teils aus anderen Schlafmodi als dem Leerlaufmodus verwendet werden kann. Die E/A-Uhr wird in allen Schlafmodi außer dem Leerlaufmodus angehalten.

Beachten Sie, dass, wenn ein pegelgesteuerter Interrupt zum Aufwachen aus dem Power-Down verwendet wird, der erforderliche Pegel lange genug gehalten werden muss, damit die MCU das Aufwachen abschließen kann, um den Pegelinterrupt auszulösen. Wenn der Pegel vor Ablauf der Startzeit verschwindet, wird die MCU zwar trotzdem aufgeweckt, es wird jedoch kein Interrupt generiert. Die Startzeit wird durch die SUT- und CKSEL-Sicherungen definiert, wie in beschrieben „Systemuhr und Uhroptionen“ auf Seite 23.

Wenn der niedrige Pegel am Interrupt-Pin entfernt wird, bevor das Gerät aufgewacht ist, wird die Programmausführung nicht zur Interrupt-Serviceroutine umgeleitet, sondern mit der Anweisung fortgesetzt, die dem SLEEP-Befehl folgt.

Pin-Änderungs-Interrupt-Timing

Ein ExampDie zeitliche Abfolge eines Pin-Wechsel-Interrupts ist in Abbildung 9-1.

Registerbeschreibung

MCUCR – MCU-Steuerregister

Das externe Interrupt-Steuerregister A enthält Steuerbits zur Interrupt-Erkennungssteuerung.

Bisschen 7 6 5 4 3 2 1 0
0 x 35 BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Lesen/Schreiben R R/W R/W R/W R/W R R/W R/W
Anfangswert 0 0 0 0 0 0 0 0

Bits 1:0 – ISC0[1:0]: Interrupt Sense Control 0 Bit 1 und Bit 0

Der externe Interrupt 0 wird durch den externen Pin INT0 aktiviert, wenn das SREG I-Flag und die entsprechende Interruptmaske gesetzt sind. Die Pegel und Flanken am externen INT0-Pin, die den Interrupt aktivieren, sind definiert in Tabelle 9-2Der Wert am INT0-Pin ist sampLED vor dem Erkennen von Kanten. Wenn Kanten- oder Umschalt-Interrupt ausgewählt ist, erzeugen Impulse, die länger als eine Taktperiode dauern, einen Interrupt. Kürzere Impulse erzeugen nicht garantiert einen Interrupt. Wenn Low-Level-Interrupt ausgewählt ist, muss der Low-Level bis zum Abschluss der aktuell ausgeführten Anweisung gehalten werden, um einen Interrupt zu erzeugen.

Tabelle 9-2. Interrupt 0 Sense-Steuerung

ISC01 ISC00 Beschreibung
0 0 Der niedrige Pegel von INT0 erzeugt eine Interrupt-Anforderung.
0 1 Jede logische Änderung an INT0 generiert eine Interrupt-Anforderung.
1 0 Die fallende Flanke von INT0 generiert eine Interrupt-Anforderung.
1 1 Die steigende Flanke von INT0 generiert eine Interrupt-Anforderung.

GIMSK – Allgemeines Interrupt-Maskenregister

Bisschen 7 6 5 4 3 2 1 0
0x3B INT0 PCIe GIMSK
Lesen/Schreiben R R/W R/W R R R R R
Anfangswert 0 0 0 0 0 0 0 0

Bits 7, 4:0 – Res: Reservierte Bits

Diese Bits sind im ATtiny25/45/85 reservierte Bits und werden immer als Null gelesen.

Bit 6 – INT0: Externe Interruptanforderung 0 aktivieren

Wenn das INT0-Bit gesetzt (eins) und das I-Bit im Statusregister (SREG) gesetzt (eins) sind, ist der externe Pin-Interrupt aktiviert. Die Interrupt Sense Control0-Bits 1/0 (ISC01 und ISC00) im MCU-Steuerregister (MCUCR) definieren, ob der externe Interrupt bei steigender und/oder fallender Flanke des INT0-Pins oder bei erkanntem Pegel aktiviert wird. Aktivität am Pin führt zu einer Interrupt-Anforderung, auch wenn INT0 als Ausgang konfiguriert ist. Der entsprechende Interrupt der externen Interrupt-Anforderung 0 wird vom INT0-Interrupt-Vektor ausgeführt.

Bit 5 – PCIE: Pin-Wechsel-Interrupt aktivieren

Wenn das PCIE-Bit gesetzt (eins) und das I-Bit im Statusregister (SREG) gesetzt (eins) ist, wird der Pin-Wechsel-Interrupt aktiviert. Jede Änderung an einem aktivierten PCINT[5:0]-Pin verursacht einen Interrupt. Der entsprechende Interrupt der Pin-Wechsel-Interrupt-Anforderung wird vom PCI-Interrupt-Vektor ausgeführt. PCINT[5:0]-Pins werden einzeln durch das PCMSK0-Register aktiviert.

GIFR – Allgemeines Interrupt-Flag-Register

Bisschen 7 6 5 4 3 2 1 0
Version: INTF0 PCIF GIFR
Lesen/Schreiben R R/W R/W R R R R R
Anfangswert 0 0 0 0 0 0 0 0

Bits 7, 4:0 – Res: Reservierte Bits

Diese Bits sind im ATtiny25/45/85 reservierte Bits und werden immer als Null gelesen.

Bit 6 – INTF0: Externes Interrupt-Flag 0

Wenn eine Flanke oder eine logische Änderung am INT0-Pin eine Interrupt-Anforderung auslöst, wird INTF0 gesetzt (eins). Wenn das I-Bit in SREG und das INT0-Bit in GIMSK gesetzt (eins) sind, springt die MCU zum entsprechenden Interrupt-Vektor. Das Flag wird gelöscht, wenn die Interrupt-Routine ausgeführt wird. Alternativ kann das Flag gelöscht werden, indem eine logische Eins darauf geschrieben wird. Dieses Flag wird immer gelöscht, wenn INT0 als Level-Interrupt konfiguriert ist.

Bit 5 – PCIF: Pin-Änderungs-Interrupt-Flag

Wenn eine logische Änderung an einem beliebigen PCINT[5:0]-Pin eine Interrupt-Anforderung auslöst, wird PCIF gesetzt (eins). Wenn das I-Bit in SREG und das PCIE-Bit in GIMSK gesetzt (eins) sind, springt die MCU zum entsprechenden Interrupt-Vektor. Das Flag wird gelöscht, wenn die Interrupt-Routine ausgeführt wird. Alternativ kann das Flag gelöscht werden, indem eine logische Eins darauf geschrieben wird.

PCMSK – Pin-Änderungsmaskenregister

Bisschen 7 6 5 4 3 2 1 0
0 x 15 PCINT5 PCINT4 PCINT3 PCINT2 PCINT1 PCINT0 PCMSK
Lesen/Schreiben R R R/W R/W R/W R/W R/W R/W
Anfangswert 0 0 0 0 0 0 0 0

Bits 7:6 – Res: Reservierte Bits

Diese Bits sind im ATtiny25/45/85 reservierte Bits und werden immer als Null gelesen.

Bits 5:0 – PCINT[5:0]: Pin-Änderung aktivieren Maske 5:0

Jedes PCINT[5:0]-Bit legt fest, ob der Pin-Wechsel-Interrupt am entsprechenden I/O-Pin aktiviert ist. Wenn PCINT[5:0] gesetzt ist und das PCIE-Bit in GIMSK gesetzt ist, ist der Pin-Wechsel-Interrupt am entsprechenden I/O-Pin aktiviert. Wenn PCINT[5:0] gelöscht ist, ist der Pin-Wechsel-Interrupt am entsprechenden I/O-Pin deaktiviert.

E/A-Anschlüsse

Einführung

Alle AVR-Ports verfügen über echte Read-Modify-Write-Funktionalität, wenn sie als allgemeine digitale I/O-Ports verwendet werden. Das bedeutet, dass die Richtung eines Port-Pins geändert werden kann, ohne unbeabsichtigt die Richtung eines anderen Pins mit den SBI- und CBI-Anweisungen zu ändern. Dasselbe gilt beim Ändern des Antriebswerts (wenn als Ausgang konfiguriert) oder beim Aktivieren/Deaktivieren von Pull-Up-Widerständen (wenn als Eingang konfiguriert). Jeder Ausgangspuffer verfügt über symmetrische Antriebseigenschaften mit sowohl hoher Senken- als auch Quellenkapazität. Der Pin-Treiber ist stark genug, um LED-Anzeigen direkt anzutreiben. Alle Port-Pins verfügen über einzeln wählbare Pull-Up-Widerstände mit einer Versorgungsspannungtage invarianter Widerstand. Alle I/O-Pins haben Schutzdioden sowohl für VCC als auch für Masse, wie in Abbildung 10-1Siehe „Elektrische Eigenschaften“ auf Seite 161 für eine vollständige Liste der Parameter.

Abbildung 10-1. Äquivalentes Schema der E/A-Pins

Abb.10

Alle Register und Bitreferenzen in diesem Abschnitt werden in allgemeiner Form geschrieben. Ein kleines „x“ steht für den Nummerierungsbuchstaben des Ports und ein kleines „n“ für die Bitnummer. Wenn Sie jedoch die Register- oder Bitdefinitionen in einem Programm verwenden, muss die genaue Form verwendet werden. Zum Beispielample, PORTB3 für Bit Nr. 3 in Port B, hier allgemein als PORTxn dokumentiert. Die physischen I/O-Register und Bitpositionen sind in „Registerbeschreibung“ auf Seite 64.

Jedem Port sind drei I/O-Speicheradressen zugeordnet, jeweils eine für das Datenregister – PORTx, das Datenrichtungsregister – DDRx und die Port-Eingangspins – PINx. Die I/O-Adresse der Port-Eingangspins ist schreibgeschützt, während das Datenregister und das Datenrichtungsregister schreib- und lesbar sind. Wenn jedoch eine logische Eins in ein Bit im PINx-Register geschrieben wird, führt dies zu einem Umschalten des entsprechenden Bits im Datenregister. Darüber hinaus deaktiviert das Pull-up Disable – PUD-Bit in MCUCR die Pull-up-Funktion für alle Pins in allen Ports, wenn es gesetzt ist.

Die Verwendung des I/O-Ports als allgemeiner digitaler I/O wird beschrieben in „Ports als allgemeine digitale E/A“ auf Seite 53. Die meisten Port-Pins sind mit alternativen Funktionen für die Peripheriefunktionen des Geräts gemultiplext. Wie jede alternative Funktion den Port-Pin beeinflusst, wird in „Alternative Portfunktionen“ auf Seite 57Eine vollständige Beschreibung der alternativen Funktionen finden Sie in den einzelnen Modulabschnitten.

Beachten Sie, dass das Aktivieren der alternativen Funktion einiger Port-Pins keine Auswirkungen auf die Verwendung der anderen Pins im Port als allgemeine digitale E/A hat.

Anschlüsse als allgemeine digitale E/A

Bei den Ports handelt es sich um bidirektionale E/A-Ports mit optionalen internen Pull-Ups. Abbildung 10-2 zeigt eine Funktionsbeschreibung eines I/O-Port-Pins, hier allgemein Pxn genannt.

Abbildung 10-2. Allgemeine digitale E/A(1)

Abb.10

Konfigurieren des Pins

Jeder Port-Pin besteht aus drei Registerbits: DDxn, PORTxn und PINxn. Wie in „Registerbeschreibung“ auf Seite 64Der Zugriff auf die DDxn-Bits erfolgt an der DDRx-E/A-Adresse, auf die PORTxn-Bits an der PORTx-E/A-Adresse und auf die PINxn-Bits an der PINx-E/A-Adresse.

Das DDxn-Bit im DDRx-Register wählt die Richtung dieses Pins aus. Wenn DDxn als logisch Eins geschrieben wird, wird Pxn als Ausgangspin konfiguriert. Wenn DDxn als logisch Null geschrieben wird, wird Pxn als Eingangspin konfiguriert.

Wenn PORTxn mit logisch 1 geschrieben wird, während der Pin als Eingangspin konfiguriert ist, wird der Pull-up-Widerstand aktiviert. Um den Pull-up-Widerstand auszuschalten, muss PORTxn mit logisch 0 geschrieben werden oder der Pin muss als Ausgangspin konfiguriert werden. Die Port-Pins werden im Tri-State-Zustand gehalten, wenn die Reset-Bedingung aktiv wird, auch wenn keine Takte laufen.

Wenn PORTxn eine logische Eins enthält und der Pin als Ausgangspin konfiguriert ist, wird der Port-Pin hoch (eins) angesteuert. Wenn PORTxn eine logische Null enthält und der Pin als Ausgangspin konfiguriert ist, wird der Port-Pin niedrig (null) angesteuert.

Umschalten des Pins

Das Schreiben einer logischen Eins in PINxn schaltet den Wert von PORTxn um, unabhängig vom Wert von DDRxn. Beachten Sie, dass der SBI-Befehl verwendet werden kann, um ein einzelnes Bit in einem Port umzuschalten.

Umschalten zwischen Eingabe und Ausgabe

Beim Umschalten zwischen Tri-State ({DDxn, PORTxn} = 0b00) und Ausgang hoch ({DDxn, PORTxn} = 0b11) muss ein Zwischenzustand mit entweder aktiviertem Pull-up ({DDxn, PORTxn} = 0b01) oder Ausgang niedrig ({DDxn, PORTxn} = 0b10) auftreten. Normalerweise ist der Zustand mit aktiviertem Pull-up völlig akzeptabel, da eine Umgebung mit hoher Impedanz den Unterschied zwischen einem starken High-Treiber und einem Pull-up nicht bemerkt. Wenn dies nicht der Fall ist, kann das PUD-Bit im MCUCR-Register so eingestellt werden, dass alle Pull-ups in allen Ports deaktiviert werden.

Das Umschalten zwischen Eingang mit Pull-Up und Ausgang Low erzeugt das gleiche Problem. Der Benutzer muss als Zwischenschritt entweder den Tri-State ({DDxn, PORTxn} = 0b00) oder den Ausgang High-State ({DDxn, PORTxn} = 0b10) verwenden.

Tabelle 10-1 fasst die Steuersignale für den Pinwert zusammen.

Tabelle 10-1. Pin-Konfigurationen der Anschlüsse

DDxn PORTxn PUD

(im MCUCR)

Ein-/Ausgabe Klimmzug Kommentar
0 0 X Eingang NEIN Dreizustandsschaltung (Hi-Z)
0 1 0 Eingang Ja Pxn liefert Strom, wenn ext. nach unten gezogen wird.
0 1 1 Eingang NEIN Dreizustandsschaltung (Hi-Z)
1 0 X Ausgabe NEIN Ausgang niedrig (Sink)
1 1 X Ausgabe NEIN Ausgang hoch (Quelle)

Lesen des Pin-Wertes

Unabhängig von der Einstellung des Datenrichtungsbits DDxn kann der Port-Pin über das PINxn-Registerbit gelesen werden. Wie in Abbildung 10-2, das PINxn-Registerbit und der vorhergehende Latch bilden einen Synchronisierer. Dies ist erforderlich, um Metastabilität zu vermeiden, wenn der physische Pin seinen Wert nahe der Flanke der internen Uhr ändert, führt aber auch zu einer Verzögerung. Abbildung 10-3 zeigt ein Zeitdiagramm der Synchronisierung beim Lesen eines extern angelegten Pin-Werts. Die maximalen und minimalen Ausbreitungsverzögerungen werden mit tpd,max bzw. tpd,min bezeichnet.

Betrachten Sie die Taktperiode, die kurz nach der ersten fallenden Flanke des Systemtakts beginnt. Der Latch ist geschlossen, wenn der Takt niedrig ist, und wird transparent, wenn der Takt hoch ist, wie durch den schattierten Bereich des „SYNC LATCH“-Signals angezeigt. Der Signalwert wird verriegelt, wenn der Systemtakt niedrig wird. Er wird bei der darauffolgenden positiven Taktflanke in das PINxn-Register getaktet. Wie durch die beiden Pfeile tpd,max und tpd,min angezeigt, wird ein einzelner Signalübergang am Pin je nach Zeitpunkt der Bestätigung zwischen ½ und 1½ Systemtaktperiode verzögert.

Beim Rücklesen eines per Software zugewiesenen Pin-Wertes muss eine nop-Anweisung wie in Abbildung 10-4. Der Out-Befehl setzt das „SYNC LATCH“-Signal an der positiven Flanke des Takts. In diesem Fall beträgt die Verzögerung tpd durch den Synchronisierer eine Systemtaktperiode.

Der folgende Code example zeigt, wie die Port-B-Pins 0 und 1 hoch und 2 und 3 niedrig eingestellt werden und wie die Port-Pins 4 bis 5 als Eingang mit einem dem Port-Pin 4 zugewiesenen Pull-Up definiert werden. Die resultierenden Pin-Werte werden wieder zurückgelesen, aber wie bereits besprochen, ist ein NOP-Befehl enthalten, um den Wert zurücklesen zu können, der einigen Pins kürzlich zugewiesen wurde.

Baugruppencode Example(1)

; Pull-Ups definieren und Ausgänge hoch setzen

; Richtungen für Port-Pins definieren

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

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

aus PORTB,r16

aus DDRB,r17

; nop zur Synchronisierung einfügen

nein

; Port-Pins lesen

in r16,PINB

Hinweis: Für das Assemblerprogramm werden zwei temporäre Register verwendet, um die Zeit zwischen dem Setzen der Pull-Ups an den Pins 0, 1 und 4 und dem korrekten Setzen der Richtungsbits zu minimieren. Dabei werden Bit 2 und 3 als Low-Treiber definiert und Bit 0 und 1 als starke High-Treiber neu definiert.

C Code Example
vorzeichenloses Zeichen i;

/* Pullups definieren und Ausgänge auf High setzen */

/* Richtungen für Port-Pins festlegen */ PORTB = (1<

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

/* nop zur Synchronisierung einfügen */

_NOP();

/* Port-Pins lesen */ i = PINB;

Digitaleingang aktivieren und Ruhemodi

Wie in Abbildung 10-2, das digitale Eingangssignal kannampam Eingang des Schmitt-Triggers mit Masse verbunden. Das in der Abbildung mit SLEEP bezeichnete Signal wird vom MCU Sleep Controller im Power-Down-Modus gesetzt, um einen hohen Stromverbrauch zu vermeiden, wenn einige Eingangssignale schweben oder einen analogen Signalpegel nahe VCC/2 haben.

SLEEP wird für Port-Pins überschrieben, die als externe Interrupt-Pins aktiviert sind. Wenn die externe Interrupt-Anforderung nicht aktiviert ist, ist SLEEP auch für diese Pins aktiv. SLEEP wird auch durch verschiedene andere alternative Funktionen überschrieben, wie in beschrieben „Alternative Portfunktionen“ auf Seite 57.

Wenn ein logisch hoher Pegel („eins“) an einem asynchronen externen Interrupt-Pin anliegt, der als „Interrupt bei steigender Flanke, fallender Flanke oder beliebiger logischer Änderung am Pin“ konfiguriert ist, während der externe Interrupt nicht aktiviert ist, wird das entsprechende externe Interrupt-Flag beim Fortsetzen aus dem oben erwähnten Ruhemodus gesetzt, da der clampDer Wechsel in diesen Ruhemodus führt zu der gewünschten Logikänderung.

Nicht verbundene Pins

Wenn einige Pins nicht verwendet werden, empfiehlt es sich, sicherzustellen, dass diese Pins einen definierten Pegel haben. Auch wenn die meisten digitalen Eingänge in den Tiefschlafmodi wie oben beschrieben deaktiviert sind, sollten schwebende Eingänge vermieden werden, um den Stromverbrauch in allen anderen Modi zu reduzieren, in denen die digitalen Eingänge aktiviert sind (Reset, Aktivmodus und Leerlaufmodus).

Die einfachste Methode, einen definierten Pegel eines ungenutzten Pins sicherzustellen, ist das Aktivieren des internen Pull-Ups. In diesem Fall wird der Pull-Up beim Reset deaktiviert. Wenn ein geringer Stromverbrauch beim Reset wichtig ist, empfiehlt sich die Verwendung eines externen Pull-Ups oder Pull-Downs. Das direkte Anschließen ungenutzter Pins an VCC oder GND ist nicht zu empfehlen, da dies zu übermäßigen Strömen führen kann, wenn der Pin versehentlich als Ausgang konfiguriert wird.

Alternative Portfunktionen

Die meisten Port-Pins haben neben ihrer Funktion als allgemeine digitale E/A noch weitere Funktionen. Abbildung 10-5 zeigt, wie die Port-Pin-Steuersignale vom vereinfachten Abbildung 10-2 können durch alternative Funktionen überschrieben werden. Die überschreibenden Signale sind möglicherweise nicht in allen Port-Pins vorhanden, aber die Abbildung dient als allgemeine Beschreibung, die für alle Port-Pins in der AVR-Mikrocontrollerfamilie gilt.

Tabelle 10-2. Allgemeine Beschreibung der Übersteuerungssignale für alternative Funktionen

Signalname Vollständiger Name Beschreibung
PUOE Pull-Up-Override aktivieren Wenn dieses Signal gesetzt ist, wird die Pull-Up-Aktivierung durch das PUOV-Signal gesteuert. Wenn dieses Signal gelöscht ist, wird der Pull-Up aktiviert, wenn

{DDxn, PORTxn, PUD} = 0b010.

PUOV Pull-up-Override-Wert Wenn PUOE gesetzt ist, wird der Pull-up aktiviert/deaktiviert, wenn PUOV gesetzt/gelöscht wird, unabhängig von der Einstellung der Registerbits DDxn, PORTxn und PUD.
DDOE Datenrichtungsüberschreibung aktivieren Wenn dieses Signal gesetzt ist, wird die Aktivierung des Ausgangstreibers durch das DDOV-Signal gesteuert. Wenn dieses Signal gelöscht ist, wird der Ausgangstreiber durch das DDxn-Registerbit aktiviert.
DDOV Datenrichtungs-Override-Wert Wenn DDOE gesetzt ist, wird der Ausgabetreiber aktiviert/deaktiviert, wenn DDOV gesetzt/gelöscht wird, unabhängig von der Einstellung des DDxn-Registerbits.
PVOE Portwert-Überschreibung aktivieren Wenn dieses Signal gesetzt und der Ausgabetreiber aktiviert ist, wird der Portwert durch das PVOV-Signal gesteuert. Wenn PVOE gelöscht und der Ausgabetreiber aktiviert ist, wird der Portwert durch das PORTxn-Registerbit gesteuert.
PVOV Portwert Überschreibungswert Wenn PVOE gesetzt ist, wird der Portwert auf PVOV gesetzt, unabhängig von der Einstellung des PORTxn-Registerbits.
PTOE Port-Umschalt-Override aktivieren Wenn PTOE gesetzt ist, wird das PORTxn-Registerbit invertiert.
DIEOE Digitaleingang aktivieren Override aktivieren Wenn dieses Bit gesetzt ist, wird die Freigabe des Digitaleingangs durch das DIEOV-Signal gesteuert. Wenn dieses Signal gelöscht ist, wird die Freigabe des Digitaleingangs durch den MCU-Status (Normalmodus, Ruhemodus) bestimmt.
DIEOV Digitaler Eingang – Aktivierungs-Override-Wert Wenn DIEOE gesetzt ist, wird der Digitaleingang aktiviert/deaktiviert, wenn DIEOV gesetzt/gelöscht wird, unabhängig vom MCU-Status (Normalmodus, Ruhemodus).
DI Digitale Eingabe Dies ist der Digitaleingang für alternative Funktionen. In der Abbildung ist das Signal mit dem Ausgang des Schmitt-Triggers verbunden, jedoch vor dem Synchronisierer. Sofern der Digitaleingang nicht als Taktquelle verwendet wird, verwendet das Modul mit der alternativen Funktion seinen eigenen Synchronisierer.
AIO Analoger Ein- / Ausgang Dies ist der analoge Eingang/Ausgang zu/von alternativen Funktionen. Das Signal ist direkt mit dem Pad verbunden und kann bidirektional verwendet werden.

In den folgenden Unterabschnitten werden die Alternativfunktionen für jeden Port kurz beschrieben und die übergeordneten Signale mit der Alternativfunktion verknüpft. Weitere Einzelheiten finden Sie in der Beschreibung der Alternativfunktion.

Alternative Funktionen von Port B

Die Port B Pins mit alternativer Funktion sind in Tabelle 10-3.

Tabelle 10-3. Alternative Funktionen der Pins von Port B

Anschlussstift Alternative Funktion
PB5

RESET: Pin zurücksetzen

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

PCINT5: Pin-Wechsel-Interrupt, Quelle 5

PB4 XTAL2: Quarzoszillatorausgang CLKO: Systemtaktausgang ADC2: ADC-Eingangskanal 2

OC1B: Timer/Counter1 Vergleichsübereinstimmung B Ausgang PCINT4: Pin-Änderung Interrupt 0, Quelle 4

PB3 XTAL1: Quarzoszillator-Eingang CLKI: Externer Takt-Eingang ADC3: ADC-Eingang Kanal 3

OC1B: Komplementärer Timer/Zähler1 Vergleichsübereinstimmung B Ausgang PCINT3: Pin-Änderung Interrupt 0, Quelle 3

PB2 SCK: Serieller Takteingang ADC1: ADC-Eingangskanal 1

T0: Timer/Counter0-Taktquelle USCK: USI-Takt (Dreidrahtmodus) SCL: USI-Takt (Zweidrahtmodus) INT0: Externer Interrupt 0-Eingang PCINT2: Pin-Änderung Interrupt 0, Quelle 2

PB1 MISO: SPI-Masterdateneingang / Slavedatenausgang AIN1: Analogkomparator, negativer Eingang OC0B: Timer/Counter0 Vergleichs-Match-B-Ausgang OC1A: Timer/Counter1 Vergleichs-Match-A-Ausgang DO: USI-Datenausgang (Dreidrahtmodus) PCINT1: Pin-Änderung Interrupt 0, Quelle 1
PB0 MOSI:: SPI Master-Datenausgang / Slave-Dateneingang AIN0: Analoger Komparator, positiver Eingang

OC0A: Timer/Counter0 Vergleichsübereinstimmung A-Ausgabe

OC1A: Komplementärer Timer/Zähler1 Vergleichs- und Übereinstimmungsausgang A DI: USI-Dateneingang (Dreidrahtmodus)

SDA: USI-Dateneingang (Zweidrahtmodus) AREF: Externe analoge Referenz PCINT0: Pin-Änderung Interrupt 0, Quelle 0

Port B, Bit 5 – RESET/dW/ADC0/PCINT5

RESET: Der externe Reset-Eingang ist aktiv niedrig und wird durch Deprogrammierung („1“) der RSTDISBL-Sicherung aktiviert. Pullup wird aktiviert und Ausgangstreiber und digitaler Eingang werden deaktiviert, wenn der Pin als RESET-Pin verwendet wird.

dW: Wenn die Sicherung debugWIRE Enable (DWEN) programmiert und die Sperrbits deprogrammiert sind, wird das debugWIRE-System im Zielgerät aktiviert. Der RESET-Port-Pin ist als bidirektionaler Wire-AND-E/A-Pin (Open-Drain) mit aktiviertem Pull-up konfiguriert und wird zum Kommunikations-Gateway zwischen Ziel und Emulator.

ADC0: Analog-Digital-Umsetzer, Kanal 0.

PCINT5: Pin-Änderung der Interrupt-Quelle 5.

Port B, Bit 4 – XTAL2/CLKO/ADC2/OC1B/PCINT4

XTAL2: Chip-Taktoszillator-Pin 2. Wird als Takt-Pin für alle Chip-Taktquellen verwendet, außer für den intern kalibrierbaren RC-Oszillator und den externen Takt. Bei Verwendung als Takt-Pin kann der Pin nicht als I/O-Pin verwendet werden. Bei Verwendung des intern kalibrierbaren RC-Oszillators oder des externen Takts als Chip-Taktquellen dient PB4 als gewöhnlicher I/O-Pin.

CLKO: Der geteilte Systemtakt kann am Pin PB4 ausgegeben werden. Der geteilte Systemtakt wird ausgegeben, wenn die CKOUT-Sicherung programmiert ist, unabhängig von den Einstellungen von PORTB4 und DDB4. Er wird auch beim Reset ausgegeben.

ADC2: Analog-Digital-Umsetzer, Kanal 2.

OC1B: Output Compare Match-Ausgang: Der PB4-Pin kann als externer Ausgang für den Timer/Counter1 Compare Match B dienen, wenn er als Ausgang konfiguriert ist (DDB4 eingestellt). Der OC1B-Pin ist auch der Ausgangspin für die Timerfunktion im PWM-Modus.

PCINT4: Pin-Änderung der Interrupt-Quelle 4.

Port B, Bit 3 – XTAL1/CLKI/ADC3/OC1B/PCINT3

XTAL1: Chip Clock Oscillator Pin 1. Wird für alle Chip-Taktquellen außer dem intern kalibrierbaren RC-Oszillator verwendet. Bei Verwendung als Takt-Pin kann der Pin nicht als I/O-Pin verwendet werden.

CLKI: Takteingang von einer externen Taktquelle, siehe „Externe Uhr“ auf Seite 26.

ADC3: Analog-Digital-Umsetzer, Kanal 3.

OC1B: Invertierter Output Compare Match-Ausgang: Der PB3-Pin kann als externer Ausgang für den Timer/Counter1 Compare Match B dienen, wenn er als Ausgang konfiguriert ist (DDB3 eingestellt). Der OC1B-Pin ist auch der invertierte Ausgangspin für die Timerfunktion im PWM-Modus.

PCINT3: Pin-Änderung der Interrupt-Quelle 3.

Port B, Bit 2 – SCK/ADC1/T0/USCK/SCL/INT0/PCINT2

SCK: Master-Clock-Ausgang, Slave-Clock-Eingangspin für SPI-Kanal. Wenn SPI als Slave aktiviert ist, wird dieser Pin unabhängig von der Einstellung von DDB2 als Eingang konfiguriert. Wenn SPI als Master aktiviert ist, wird die Datenrichtung dieses Pins von DDPB2 gesteuert. Wenn der Pin vom SPI als Eingang gezwungen wird, kann der Pull-up immer noch vom PORTB2-Bit gesteuert werden.

ADC1: Analog-Digital-Umsetzer, Kanal 1.

T0: Timer/Counter0-Zählerquelle.

USCK: Universal Serial Interface Clock im Dreidrahtmodus.

SCL: Zweidrahtmodus-Serieller Taktgeber für USI-Zweidrahtmodus.

INT0: Externe Interruptquelle 0.

PCINT2: Pin-Änderung der Interrupt-Quelle 2.

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

MISO: Master-Dateneingang, Slave-Datenausgangspin für SPI-Kanal. Wenn SPI als Master aktiviert ist, wird dieser Pin unabhängig von der Einstellung von DDB1 als Eingang konfiguriert. Wenn SPI als Slave aktiviert ist, wird die Datenrichtung dieses Pins von DDB1 gesteuert. Wenn der Pin vom SPI als Eingang gezwungen wird, kann der Pull-up immer noch vom PORTB1-Bit gesteuert werden.

AIN1: Negativer Eingang des analogen Komparators. Konfigurieren Sie den Port-Pin als Eingang mit ausgeschaltetem internen Pull-up, um zu vermeiden, dass die digitale Port-Funktion die Funktion des analogen Komparators beeinträchtigt.

OC0B: Output Compare Match-Ausgang. Der PB1-Pin kann als externer Ausgang für den Timer/Counter0 Compare Match B dienen. Der PB1-Pin muss als Ausgang konfiguriert werden (DDB1 gesetzt (eins)), um diese Funktion zu erfüllen. Der OC0B-Pin ist auch der Ausgangspin für die PWM-Modus-Timerfunktion.

OC1A: Output Compare Match-Ausgang: Der PB1-Pin kann als externer Ausgang für den Timer/Counter1 Compare Match B dienen, wenn er als Ausgang konfiguriert ist (DDB1 gesetzt). Der OC1A-Pin ist auch der Ausgangspin für die Timerfunktion im PWM-Modus.

DO: Datenausgabe im Dreidrahtmodus der Universal Serial Interface. Die Datenausgabe im Dreidrahtmodus überschreibt den PORTB1-Wert und wird an den Port gesendet, wenn das Datenrichtungsbit DDB1 gesetzt (eins) ist. PORTB1 aktiviert den Pull-up immer noch, wenn die Richtung eingegeben wird und PORTB1 gesetzt (eins) ist.

PCINT1: Pin-Änderung der Interrupt-Quelle 1.

Port B, Bit 0 – MOSI/AIN0/OC0A/OC1A/DI/SDA/AREF/PCINT0

MOSI: SPI-Masterdatenausgang, Slavedateneingang für SPI-Kanal. Wenn SPI als Slave aktiviert ist, wird dieser Pin unabhängig von der Einstellung von DDB0 als Eingang konfiguriert. Wenn SPI als Master aktiviert ist, wird die Datenrichtung dieses Pins von DDB0 gesteuert. Wenn der Pin vom SPI als Eingang gezwungen wird, kann der Pull-up immer noch vom PORTB0-Bit gesteuert werden.

AIN0: Positiver Eingang des analogen Komparators. Konfigurieren Sie den Port-Pin als Eingang mit ausgeschaltetem internen Pull-up, um zu vermeiden, dass die digitale Port-Funktion die Funktion des analogen Komparators beeinträchtigt.

OC0A: Output Compare Match-Ausgang. Der PB0-Pin kann als externer Ausgang für den Timer/Counter0 Compare Match A dienen, wenn er als Ausgang konfiguriert ist (DDB0 gesetzt (eins)). Der OC0A-Pin ist auch der Ausgangspin für die Timerfunktion im PWM-Modus.

OC1A: Invertierter Output Compare Match-Ausgang: Der PB0-Pin kann als externer Ausgang für den Timer/Counter1 Compare Match B dienen, wenn er als Ausgang konfiguriert ist (DDB0 gesetzt). Der OC1A-Pin ist auch der invertierte Ausgangspin für die Timerfunktion im PWM-Modus.

SDA: Serielle Schnittstellendaten im Zweidrahtmodus.

AREF: Externe analoge Referenz für ADC. Pullup und Ausgangstreiber sind auf PB0 deaktiviert, wenn der Pin als externe Referenz oder interner Vol verwendet wird.tage Referenz mit externem Kondensator am AREF-Pin.

DI: Dateneingabe im USI-Dreidrahtmodus. Der USI-Dreidrahtmodus überschreibt die normalen Portfunktionen nicht, daher muss der Pin als Eingabe für die DI-Funktion konfiguriert werden.

PCINT0: Pin-Änderung der Interrupt-Quelle 0.

Tabelle 10-4 Und Tabelle 10-5 Beziehen Sie die alternativen Funktionen von Port B auf die übergeordneten Signale, die in Abbildung 10-5 auf Seite 58.

Tabelle 10-4. Überschreiben von Signalen für alternative Funktionen in PB[5:3]

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

RSTDISBL(1) • DWEN(1)

0 0
PUOV 1 0 0
DDOE RSTDISBL(1) • DWEN(1) 0 0
DDOV debugWire-Übertragung 0 0
PVOE 0 OC1B aktivieren

OC1B aktivieren

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

Hinweis: wenn die Sicherung auf „0“ (programmiert) steht.

Tabelle 10-5. Überschreiben von Signalen für alternative Funktionen in PB[2:0]

Signalname 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_ZWEI_DRAHT • DDB2 OC0B Aktivieren + OC1A Aktivieren + USI_THREE_WIRE

OC0A Aktivieren + OC1A Aktivieren + (USI_TWO_WIRE

(DDB0)

PVOV 0 OC0B + OC1A + DO

OC0A + OC1A

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

PCINT2-Eingabe

PCINT1-Eingabe DI/SDA/PCINT0-Eingang
AIO ADC1-Eingang Analoger Komparator, negativer Eingang Analoger Komparator Positiver Eingang

Registerbeschreibung

MCUCR – MCU-Steuerregister

Bisschen 7 6 5 4 3 2 1 0
0 x 35 BODS PUD SE SM1 SM0 BODSE ISC01 ISC00 MCUCR
Lesen/Schreiben R R/W R/W R/W R/W R R/W R/W
Anfangswert 0 0 0 0 0 0 0 0

Bit 6 – PUD: Pull-up deaktivieren

Wenn dieses Bit auf Eins geschrieben wird, werden die Pull-Ups in den I/O-Ports deaktiviert, auch wenn die Register DDxn und PORTxn so konfiguriert sind, dass die Pull-Ups aktiviert sind ({DDxn, PORTxn} = 0b01). Siehe „Konfigurieren des Pins“ auf Seite 54 für weitere Einzelheiten zu dieser Funktion.

PORTB – Port B Datenregister

Bisschen 7 6 5 4 3 2 1 0
0 x 18 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB
Lesen/Schreiben R R R/W R/W R/W R/W R/W R/W
Anfangswert 0 0 0 0 0 0 0 0

DDRB – Port B Datenrichtungsregister

Bisschen 7 6 5 4 3 2 1 0
0 x 17 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DDRB
Lesen/Schreiben R R R/W R/W R/W R/W R/W R/W
Anfangswert 0 0 0 0 0 0 0 0

PINB – Port B Eingangspins Adresse

Bisschen 7 6 5 4 3 2 1 0
0 x 16 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 BSP
Lesen/Schreiben R R R/W R/W R/W R/W R/W R/W
Anfangswert 0 0 N / A N / A N / A N / A N / A N / A

8-Bit-Timer/Counter0 mit PWM

Merkmale

Zwei unabhängige Ausgangsvergleichseinheiten

Doppelt gepufferte Ausgabevergleichsregister

Timer beim Vergleichsspiel löschen (Automatisches Neuladen)

Störungsfreier, phasenkorrekter Pulsweitenmodulator (PWM)

Variable PWM-Periode

Frequenzgenerator

Drei unabhängige Interruptquellen (TOV0, OCF0A und OCF0B)

Überview

Timer/Counter0 ist ein universelles 8-Bit-Timer/Counter-Modul mit zwei unabhängigen Output Compare Units und PWM-Unterstützung. Es ermöglicht eine genaue zeitliche Steuerung der Programmausführung (Ereignisverwaltung) und Wellengenerierung.

Ein vereinfachtes Blockdiagramm des 8-Bit-Timers/Zählers ist in Abbildung 11-1. Die tatsächliche Platzierung der I/O-Pins finden Sie unter „Pinbelegung ATtiny25/45/85“ auf Seite 2. CPU-zugängliche I/O-Register, einschließlich I/O-Bits und I/O-Pins, werden fett dargestellt. Die gerätespezifischen I/O-Register- und Bitpositionen sind in der „Registerbeschreibung“ auf Seite 77.

Der Timer/Counter (TCNT0) und die Output Compare Register (OCR0A und OCR0B) sind 8-Bit-Register. Interrupt-Request-Signale (in der Abbildung als Int.Req. abgekürzt) sind alle im Timer Interrupt Flag Register (TIFR) sichtbar. Alle Interrupts werden einzeln mit dem Timer Interrupt Mask Register (TIMSK) maskiert. TIFR und TIMSK werden in der Abbildung nicht angezeigt.

Der Timer/Zähler kann intern, über den Prescaler oder durch eine externe Taktquelle am T0-Pin getaktet werden. Der Clock Select-Logikblock steuert, welche Taktquelle und Flanke der Timer/Zähler verwendet, um seinen Wert zu erhöhen (oder zu verringern). Der Timer/Zähler ist inaktiv, wenn keine Taktquelle ausgewählt ist. Der Ausgang der Clock Select-Logik wird als Timer-Takt (clkT0) bezeichnet.

Die doppelt gepufferten Ausgangsvergleichsregister (OCR0A und OCR0B) werden ständig mit dem Timer-/Zählerwert verglichen. Das Ergebnis des Vergleichs kann vom Wellenformgenerator verwendet werden, um eine PWM- oder variable Frequenzausgabe an den Ausgangsvergleichspins (OC0A und OC0B) zu erzeugen. Siehe „Ausgabevergleichseinheit“ auf Seite 69. für Einzelheiten. Das Compare Match-Ereignis setzt auch das Compare Flag (OCF0A oder OCF0B), das zum Generieren einer Output Compare-Interruptanforderung verwendet werden kann.

Definitionen

Viele Register- und Bitreferenzen in diesem Abschnitt sind in allgemeiner Form geschrieben. Ein kleines „n“ ersetzt die Timer-/Zählernummer, in diesem Fall 0. Ein kleines „x“ ersetzt die Ausgabevergleichseinheit, in diesem Fall Vergleichseinheit A oder Vergleichseinheit B. Wenn Sie jedoch die Register- oder Bitdefinitionen in einem Programm verwenden, muss die genaue Form verwendet werden, d. h. TCNT0 für den Zugriff auf den Zählerwert von Timer/Counter0 usw.

Die Definitionen in Tabelle 11-1 werden im gesamten Dokument ebenfalls häufig verwendet.

Tabelle 11-1. Definitionen

Konstante Beschreibung
UNTEN Der Zähler erreicht den UNTEN-Wert, wenn er 0x00 wird.
MAX Der Zähler erreicht sein Maximum, wenn er 0xFF (dezimal 255) wird.
SPITZE Der Zähler erreicht den TOP, wenn er dem höchsten Wert in der Zählsequenz entspricht. Der TOP-Wert kann dem festen Wert 0xFF (MAX) oder dem im OCR0A-Register gespeicherten Wert zugewiesen werden. Die Zuweisung hängt vom Betriebsmodus ab.

Timer/Counter Prescaler und Taktquellen

Der Timer/Zähler kann von einer internen oder externen Taktquelle getaktet werden. Die Taktquelle wird von der Taktauswahllogik ausgewählt, die von den Taktauswahlbits (c) im Timer/Counter0-Steuerregister (TCCR0B) gesteuert wird.

Interne Taktquelle mit Prescaler

Timer/Counter0 kann direkt durch die Systemuhr getaktet werden (durch Setzen von CS0[2:0] = 1). Dies ermöglicht den schnellsten Betrieb mit einer maximalen Timer-/Counter-Taktfrequenz, die der Systemtaktfrequenz (fCLK_I/O) entspricht. Alternativ kann einer der vier Abgriffe des Prescalers als Taktquelle verwendet werden. Die vorskalierte Uhr hat eine Frequenz von entweder

Prescaler zurücksetzen

Der Prescaler ist freilaufend, d. h. er arbeitet unabhängig von der Taktauswahllogik von Timer/Counter0. Da der Prescaler nicht von der Taktauswahl des Timers/Counters beeinflusst wird, hat der Zustand des Prescalers Auswirkungen auf Situationen, in denen ein vorskalierter Takt verwendet wird. Ein BeispielampDas Auftreten eines Prescaler-Artefakts ist, wenn der Timer/Zähler aktiviert und vom Prescaler getaktet wird (6 > CS0[2:0] > 1). Die Anzahl der Systemtaktzyklen von der Aktivierung des Timers bis zum ersten Zählen kann zwischen 1 und N+1 Systemtaktzyklen liegen, wobei N dem Prescaler-Teiler (8, 64, 256 oder 1024) entspricht.

Es ist möglich, den Prescaler-Reset zu verwenden, um den Timer/Zähler mit der Programmausführung zu synchronisieren.

Externe Taktquelle

Eine externe Taktquelle, die an den T0-Pin angelegt wird, kann als Timer-/Zählertakt (clkT0) verwendet werden. Der T0-Pin istampeinmal pro Systemtaktzyklus durch die Pin-Synchronisationslogik geführt. Die synchronisierte (sampLED) Signal wird dann weitergegeben

durch den Kantendetektor. Abbildung 11-2 zeigt ein funktional gleichwertiges Blockdiagramm der T0-Synchronisations- und Flankendetektorlogik. Die Register werden an der positiven Flanke des internen Systemtakts (clkI/O) getaktet. Der Latch ist in der High-Periode des internen Systemtakts transparent.

Der Flankendetektor erzeugt für jede erkannte positive (CS0[0:2] = 0) oder negative (CS7[0:2] = 0) Flanke einen clkT6-Impuls.

Die OCR0x-Register sind bei Verwendung eines der Pulsweitenmodulationsmodi (PWM) doppelt gepuffert. Für die Betriebsmodi „Normal“ und „Clear Timer on Compare“ (CTC) ist die doppelte Pufferung deaktiviert. Die doppelte Pufferung synchronisiert die Aktualisierung der OCR0x-Vergleichsregister entweder mit dem Anfang oder Ende der Zählsequenz. Die Synchronisierung verhindert das Auftreten von PWM-Impulsen ungerader Länge und unsymmetrischer Art, wodurch der Ausgang störungsfrei bleibt.

Der Zugriff auf das OCR0x-Register mag kompliziert erscheinen, ist es aber nicht. Wenn die Doppelpufferung aktiviert ist, hat die CPU Zugriff auf das OCR0x-Pufferregister, und wenn die Doppelpufferung deaktiviert ist, greift die CPU direkt auf OCR0x zu.

Force-Ausgabevergleich

In Nicht-PWM-Wellenformgenerierungsmodi kann die Match-Ausgabe des Komparators erzwungen werden, indem eine Eins in das Force Output Compare (FOC0x)-Bit geschrieben wird. Das Erzwingen von Compare Match setzt weder das OCF0x-Flag noch lädt/löscht es den Timer, aber der OC0x-Pin wird aktualisiert, als ob ein echtes Compare Match stattgefunden hätte (die COM0x[1:0]-Biteinstellungen definieren, ob der OC0x-Pin gesetzt, gelöscht oder umgeschaltet wird).

Compare Match Blocking durch TCNT0-Schreiben

Alle CPU-Schreibvorgänge in das TCNT0-Register blockieren alle Vergleichsübereinstimmungen, die im nächsten Timer-Taktzyklus auftreten, selbst wenn der Timer gestoppt ist. Mit dieser Funktion kann OCR0x auf denselben Wert wie TCNT0 initialisiert werden, ohne einen Interrupt auszulösen, wenn der Timer-/Zählertakt aktiviert ist.

Verwenden der Ausgabevergleichseinheit

Da das Schreiben von TCNT0 in jedem Betriebsmodus alle Vergleichsübereinstimmungen für einen Timer-Taktzyklus blockiert, besteht das Ändern von TCNT0 bei Verwendung der Output Compare Unit mit Risiken, unabhängig davon, ob der Timer/Zähler läuft oder nicht. Wenn der in TCNT0 geschriebene Wert dem OCR0x-Wert entspricht, wird die Vergleichsübereinstimmung verpasst, was zu einer falschen Wellenformgenerierung führt. Schreiben Sie den TCNT0-Wert ebenso nicht gleich BOTTOM, wenn der Zähler rückwärts zählt.

Die Einrichtung des OC0x sollte durchgeführt werden, bevor das Datenrichtungsregister für den Port-Pin auf Ausgabe eingestellt wird. Die einfachste Möglichkeit, den OC0x-Wert einzustellen, besteht darin, die Force Output Compare (FOC0x)-Strobe-Bits im Normalmodus zu verwenden. Die OC0x-Register behalten ihre Werte auch beim Wechsel zwischen den Wellenformgenerierungsmodi.

Beachten Sie, dass die COM0x[1:0]-Bits nicht zusammen mit dem Vergleichswert doppelt gepuffert werden. Änderungen an den COM0x[1:0]-Bits werden sofort wirksam.

Vergleichen, Abgleichen, Ausgabeeinheit

Die Bits des Compare Output-Modus (COM0x[1:0]) haben zwei Funktionen. Der Wellenformgenerator verwendet die Bits COM0x[1:0], um den Output Compare-Zustand (OC0x) beim nächsten Compare Match zu definieren. Außerdem steuern die Bits COM0x[1:0] die Ausgabequelle des OC0x-Pins. Abbildung 11-6 zeigt ein vereinfachtes Schema der Logik, die von der Biteinstellung COM0x[1:0] betroffen ist. Die E/A-Register, E/A-Bits und E/A-Pins in der Abbildung sind fett dargestellt. Es werden nur die Teile der allgemeinen E/A-Port-Steuerregister (DDR und PORT) angezeigt, die von den Bits COM0x[1:0] betroffen sind. Wenn auf den OC0x-Zustand Bezug genommen wird, bezieht sich dies auf das interne OC0x-Register, nicht auf den OC0x-Pin. Wenn ein Systemreset erfolgt, wird das OC0x-Register auf „0“ zurückgesetzt.

Wenn OC0A/OC0B mit dem I/O-Pin verbunden ist, hängt die Funktion der COM0A[1:0]/COM0B[1:0]-Bits von der WGM0[2:0]-Biteinstellung ab. Tabelle 11-2 zeigt die Funktionalität des COM0x[1:0]-Bits, wenn die WGM0[2:0]-Bits auf einen normalen oder CTC-Modus (nicht PWM) eingestellt sind.

Tabelle 11-2. Vergleichsausgabemodus, Nicht-PWM-Modus

COM0A1 COM0B1 COM0A0 COM0B0 Beschreibung
0 0 Normaler Portbetrieb, OC0A/OC0B getrennt.
0 1 OC0A/OC0B beim Vergleichen umschalten
1 0 OC0A/OC0B beim Vergleichen löschen
1 1 OC0A/OC0B beim Vergleichen festlegen

Tabelle 11-3 zeigt die COM0x[1:0]-Bit-Funktionalität, wenn die WGM0[2:0]-Bits auf schnellen PWM-Modus eingestellt sind.

Tabelle 11-3. Vergleichsausgabemodus, schneller PWM-Modus(1)

COM0A1 COM0B1 COM0A0 COM0B0 Beschreibung
0 0 Normaler Portbetrieb, OC0A/OC0B getrennt.
0 1 Reserviert
1 0 OC0A/OC0B bei Compare Match löschen, OC0A/OC0B UNTEN einstellen (nicht invertierender Modus)
1 1 OC0A/OC0B bei Compare Match einstellen, OC0A/OC0B UNTEN löschen (invertierender Modus)

Hinweis: Ein Sonderfall tritt auf, wenn OCR0A oder OCR0B gleich TOP ist und COM0A1/COM0B1 gesetzt ist. In diesem Fall wird der Vergleichstreffer ignoriert, aber das Setzen oder Löschen erfolgt bei BOTTOM. Siehe „Schneller PWM-Modus“ auf Seite 73 für weitere Details.

Tabelle 11-4 zeigt die Funktionalität des COM0x[1:0]-Bits, wenn die WGM0[2:0]-Bits auf phasenkorrekten PWM-Modus eingestellt sind.

Tabelle 11-4. Vergleichsausgabemodus, Phasenkorrekter PWM-Modus(1)

COM0A1 COM0B1 COM0A0 COM0B0 Beschreibung
0 0 Normaler Portbetrieb, OC0A/OC0B getrennt.
0 1 Reserviert
1 0 Beim Aufwärtszählen OC0A/OC0B bei Compare Match löschen. Beim Abwärtszählen OC0A/OC0B bei Compare Match festlegen.
1 1 Beim Aufwärtszählen OC0A/OC0B auf Compare Match setzen. Beim Abwärtszählen OC0A/OC0B auf Compare Match löschen.

Hinweis: 1. Ein Sonderfall tritt auf, wenn OCR0A oder OCR0B gleich TOP ist und COM0A1/COM0B1 gesetzt ist. In diesem Fall wird der Compare Match ignoriert, aber das Setzen oder Löschen erfolgt bei TOP. Siehe „Phasenkorrekter PWM-Modus“ auf Seite 74 für weitere Details.

Bits 3:2 – Res: Reservierte Bits

Diese Bits sind im ATtiny25/45/85 reservierte Bits und werden immer als Null gelesen.

Bits 1:0 – WGM0[1:0]: Wellenform-Generierungsmodus

In Kombination mit dem WGM02-Bit im TCCR0B-Register steuern diese Bits die Zählsequenz des Zählers, die Quelle für den maximalen (TOP-)Zählerwert und welche Art der Wellenformgenerierung verwendet werden soll, siehe Tabelle 11-5. Die von der Timer/Counter-Einheit unterstützten Betriebsarten sind: Normalmodus (Zähler), Clear Timer on Compare Match (CTC)-Modus und zwei Arten von Pulsweitenmodulationsmodi (PWM) (siehe „Betriebsarten“ auf Seite 71).

Tabelle 11-5. Wellenform-Generierungsmodus Bit Beschreibung

Modus WGM 02 WGM 01 WGM 00 Timer/Zähler-Betriebsmodus SPITZE Update von OCRx unter TOV-Flagge gesetzt auf
0 0 0 0 Normal Versionsnummer Sofort MAX(1)
1 0 0 1 PWM, Phasenkorrektur Versionsnummer SPITZE UNTEN(2)
2 0 1 0 CTC OCRA Sofort MAX(1)
3 0 1 1 Schnelles PWM Versionsnummer UNTEN(2) MAX(1)
4 1 0 0 Reserviert
5 1 0 1 PWM, Phasenkorrektur OCRA SPITZE UNTEN(2)
6 1 1 0 Reserviert
7 1 1 1 Schnelles PWM OCRA UNTEN(2) SPITZE

Bit 7 – FOC0A: Ausgangsvergleich A erzwingen

Das FOC0A-Bit ist nur aktiv, wenn die WGM-Bits einen Nicht-PWM-Modus angeben.

Um jedoch die Kompatibilität mit zukünftigen Geräten sicherzustellen, muss dieses Bit auf Null gesetzt werden, wenn TCCR0B im PWM-Modus geschrieben wird. Wenn eine logische Eins in das FOC0A-Bit geschrieben wird, wird ein sofortiger Vergleichsabgleich für die Wellenformgenerierungseinheit erzwungen. Der OC0A-Ausgang wird entsprechend seiner COM0A[1:0]-Biteinstellung geändert. Beachten Sie, dass das FOC0A-Bit als Strobe implementiert ist. Daher ist es der in den COM0A[1:0]-Bits vorhandene Wert, der die Wirkung des erzwungenen Vergleichs bestimmt.

Ein FOC0A-Strobe erzeugt keinen Interrupt und löscht auch nicht den Timer im CTC-Modus, wenn OCR0A als TOP verwendet wird. Das FOC0A-Bit wird immer als Null gelesen.

Bit 6 – FOC0B: Ausgangsvergleich B erzwingen

Das FOC0B-Bit ist nur aktiv, wenn die WGM-Bits einen Nicht-PWM-Modus angeben.

Um jedoch die Kompatibilität mit zukünftigen Geräten sicherzustellen, muss dieses Bit auf Null gesetzt werden, wenn TCCR0B im PWM-Modus geschrieben wird. Wenn eine logische Eins in das FOC0B-Bit geschrieben wird, wird ein sofortiger Vergleichsabgleich für die Wellenformgenerierungseinheit erzwungen. Der OC0B-Ausgang wird entsprechend seiner COM0B[1:0]-Biteinstellung geändert. Beachten Sie, dass das FOC0B-Bit als Strobe implementiert ist. Daher bestimmt der in den COM0B[1:0]-Bits vorhandene Wert die Wirkung des erzwungenen Vergleichs.

Ein FOC0B-Strobe erzeugt keinen Interrupt und löscht auch nicht den Timer im CTC-Modus, wenn OCR0B als TOP verwendet wird.

Das FOC0B-Bit wird immer als Null gelesen.

Bits 5:4 – Res: Reservierte Bits

Diese Bits sind im ATtiny25/45/85 reservierte Bits und werden immer als Null gelesen.

Bit 3 – WGM02: Wellenform-Generierungsmodus

Siehe die Beschreibung im „TCCR0A – Timer/Counter Control Register A“ auf Seite 77.

Bits 2:0 – CS0[2:0]: Taktauswahl

Die drei Clock Select-Bits wählen die vom Timer/Zähler zu verwendende Taktquelle aus.

Tabelle 11-6. Beschreibung des Taktauswahlbits

CS02 CS01 CS00 Beschreibung
0 0 0 Keine Taktquelle (Timer/Zähler gestoppt)
0 0 1 clkI/O/(Keine Vorskalierung)
0 1 0 clkI/O/8 (vom Vorteiler)
0 1 1 clkI/O/64 (vom Vorteiler)
1 0 0 clkI/O/256 (vom Vorteiler)
1 0 1 clkI/O/1024 (vom Vorteiler)
1 1 0 Externe Taktquelle am T0-Pin. Takt an der fallenden Flanke.
1 1 1 Externe Taktquelle am T0-Pin. Takt bei steigender Flanke.

Wenn externe Pin-Modi für den Timer/Counter0 verwendet werden, takten Übergänge am T0-Pin den Zähler, selbst wenn der Pin als Ausgang konfiguriert ist. Diese Funktion ermöglicht eine Softwaresteuerung des Zählens.

Zähler- und Vergleichseinheiten

Die allgemeine Funktionsweise von Timer/Counter1 wird im asynchronen Modus beschrieben und die Funktionsweise im synchronen Modus wird nur erwähnt, wenn es Unterschiede zwischen diesen beiden Modi gibt. Abbildung 12-2 zeigt das Blockdiagramm des Synchronisationsregisters Timer/Counter 1 und die Synchronisationsverzögerungen zwischen den Registern. Beachten Sie, dass in der Abbildung nicht alle Details zur Taktsteuerung gezeigt werden. Die Registerwerte Timer/Counter1 durchlaufen die internen Synchronisationsregister, die die Eingangssynchronisationsverzögerung verursachen, bevor sie den Zählerbetrieb beeinflussen. Die Register TCCR1, GTCCR, OCR1A, OCR1B und OCR1C können direkt nach dem Schreiben des Registers zurückgelesen werden. Die zurückgelesenen Werte werden für das Register Timer/Counter1 (TCNT1) und die Flags (OCF1A, OCF1B und TOV1) aufgrund der Eingangs- und Ausgangssynchronisation verzögert.

Der Timer/Counter1 bietet eine hohe Auflösung und eine hohe Genauigkeit bei der Verwendung mit den niedrigeren Vorskalierungsmöglichkeiten. Er kann auch zwei genaue, schnelle 8-Bit-Pulsweitenmodulatoren mit Taktraten von bis zu 64 MHz (oder 32 MHz im Low-Speed-Modus) unterstützen. In diesem Modus dienen Timer/Counter1 und die Ausgangsvergleichsregister als duale eigenständige PWMs mit nicht überlappenden nicht invertierten und invertierten Ausgängen. Siehe Seite 86 für eine detaillierte Beschreibung dieser Funktion. Ebenso machen die hohen Vorskalierungsmöglichkeiten diese Einheit für langsamere Funktionen oder genaue Zeitfunktionen mit seltenen Aktionen nützlich.

Abbildung 12-2. Blockdiagramm des Synchronisierungsregisters für Timer/Counter 1.

Timer/Counter1 und der Prescaler ermöglichen den Betrieb der CPU von jeder beliebigen Taktquelle aus, während der Prescaler im asynchronen Modus mit dem schnellen 64-MHz-PCK-Takt (bzw. 32 MHz im Low-Speed-Modus) läuft.

Beachten Sie, dass die Systemtaktfrequenz niedriger als ein Drittel der PCK-Frequenz sein muss. Der Synchronisationsmechanismus des asynchronen Timers/Counter1 benötigt mindestens zwei Flanken des PCK, wenn der Systemtakt hoch ist. Wenn die Frequenz des Systemtakts zu hoch ist, besteht die Gefahr, dass Daten oder Steuerwerte verloren gehen.

Die folgende Abbildung 12-3 zeigt das Blockdiagramm für Timer/Counter1.

Tabelle 12-1. Vergleichsmodusauswahl im PWM-Modus

COM1x1 COM1x0 Auswirkungen auf Ausgabevergleichs-Pins
0 0 OC1x nicht verbunden. OC1x nicht verbunden.
0 1 OC1x wird bei Vergleichsübereinstimmung gelöscht. Wird gesetzt, wenn TCNT1 = $00. OC1x wird bei Vergleichsübereinstimmung gesetzt. Wird gelöscht, wenn TCNT1 = $00.
1 0 OC1x beim Vergleichsmatch gelöscht. Festgelegt, wenn TCNT1 = $00. OC1x nicht verbunden.
1 1 OC1x wird beim Vergleichen festgelegt. Gelöscht, wenn TCNT1 = $00. OC1x nicht verbunden.

ADC-Eigenschaften

Tabelle 21-8. ADC-Eigenschaften, Single-Ended-Kanäle. TA = -40 °C bis +85 °C

Symbol Parameter Zustand Mindest Typ Max Einheiten
Auflösung 10 Gebisse
Absolute Genauigkeit (einschließlich INL-, DNL- und Quantisierungs-, Verstärkungs- und Offsetfehler) VREF = 4V, VCC = 4V,

ADC-Takt = 200 kHz

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

ADC-Takt = 1 MHz

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

ADC-Takt = 200 kHz

Rauschunterdrückungsmodus

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

ADC-Takt = 1 MHz

Rauschunterdrückungsmodus

2.5 LSB
Integrale Nichtlinearität (INL) (Genauigkeit nach Offset- und Verstärkungskalibrierung) VREF = 4V, VCC = 4V,

ADC-Takt = 200 kHz

1 LSB
Differentielle Nichtlinearität (DNL) VREF = 4V, VCC = 4V,

ADC-Takt = 200 kHz

0.5 LSB
Fehler gewinnen VREF = 4V, VCC = 4V,

ADC-Takt = 200 kHz

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

ADC-Takt = 200 kHz

1.5 LSB
Umwandlungszeit Freilaufende Konvertierung 14 280 µs
Taktfrequenz 50 1000 kHz
Fahrgestellnummer Eingangslautstärketage Masse VREF V
Eingangsbandbreite 38.4 kHz
AREF Externe Referenz Voltage 2.0 VCC V
Vint Interne Lautstärketage Referenz 1.0 1.1 1.2 V
Interne 2.56-V-Referenz (1) VCC > 3.0 V 2.3 2.56 2.8 V
RREF 32 kOhm
REGEN Analoger Eingangswiderstand 100
ADC-Ausgang 0 1023 LSB

Hinweis: 1. Die Werte dienen nur als Richtlinien.

Tabelle 21-9. ADC-Eigenschaften, Differenzkanäle (Unipolarmodus). TA = -40 °C bis +85 °C

Symbol Parameter Zustand Mindest Typ Max Einheiten
Auflösung Gewinn = 1x 10 Gebisse
Gewinn = 20x 10 Gebisse
Absolute Genauigkeit (einschließlich INL, DNL und

Quantisierungs-, Verstärkungs- und Offsetfehler)

Gewinn = 1x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

10.0 LSB
Gewinn = 20x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

20.0 LSB
Integrale Nichtlinearität (INL) (Genauigkeit nach Offset- und Verstärkungskalibrierung) Gewinn = 1x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

4.0 LSB
Gewinn = 20x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

10.0 LSB
Fehler gewinnen Gewinn = 1x 10.0 LSB
Gewinn = 20x 15.0 LSB
Versatzfehler Gewinn = 1x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

3.0 LSB
Gewinn = 20x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

4.0 LSB
Umwandlungszeit Freilaufende Konvertierung 70 280 µs
Taktfrequenz 50 200 kHz
Fahrgestellnummer Eingangslautstärketage Masse VCC V
VDIFF Eingangsdifferenzvolumentage VREF/Verstärkung V
Eingangsbandbreite 4 kHz
AREF Externe Referenz Voltage 2.0 VCC – 1.0 V
Vint Interne Lautstärketage Referenz 1.0 1.1 1.2 V
Interne 2.56-V-Referenz (1) VCC > 3.0 V 2.3 2.56 2.8 V
RREF Referenzeingangswiderstand 32 kOhm
REGEN Analoger Eingangswiderstand 100
ADC-Konvertierungsausgang 0 1023 LSB

Hinweis: Die Werte dienen lediglich als Richtlinien.

Tabelle 21-10. ADC-Eigenschaften, Differenzkanäle (Bipolarmodus). TA = -40 °C bis +85 °C

Symbol Parameter Zustand Mindest Typ Max Einheiten
Auflösung Gewinn = 1x 10 Gebisse
Gewinn = 20x 10 Gebisse
Absolute Genauigkeit (einschließlich INL, DNL und

Quantisierungs-, Verstärkungs- und Offsetfehler)

Gewinn = 1x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

8.0 LSB
Gewinn = 20x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

8.0 LSB
Integrale Nichtlinearität (INL) (Genauigkeit nach Offset- und Verstärkungskalibrierung) Gewinn = 1x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

4.0 LSB
Gewinn = 20x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

5.0 LSB
Fehler gewinnen Gewinn = 1x 4.0 LSB
Gewinn = 20x 5.0 LSB
Versatzfehler Gewinn = 1x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

3.0 LSB
Gewinn = 20x

VREF = 4 V, VCC = 5 V

ADC-Takt = 50 – 200 kHz

4.0 LSB
Umwandlungszeit Freilaufende Konvertierung 70 280 µs
Taktfrequenz 50 200 kHz
Fahrgestellnummer Eingangslautstärketage Masse VCC V
VDIFF Eingangsdifferenzvolumentage VREF/Verstärkung V
Eingangsbandbreite 4 kHz
AREF Externe Referenz Voltage 2.0 VCC – 1.0 V
Vint Interne Lautstärketage Referenz 1.0 1.1 1.2 V
Interne 2.56-V-Referenz (1) VCC > 3.0 V 2.3 2.56 2.8 V
RREF Referenzeingangswiderstand 32 kOhm
REGEN Analoger Eingangswiderstand 100
ADC-Konvertierungsausgang -512 511 LSB

Befehlssatzzusammenfassung

Mnemonik Operanden Beschreibung Betrieb Flaggen #Uhren
ARITHMETISCHE UND LOGISCHE ANWEISUNGEN
HINZUFÜGEN Rd, Rr Fügen Sie zwei Register hinzu Rd ← Rd + Rr Z, C, N, V, H. 1
ADC Rd, Rr Fügen Sie mit Carry zwei Register hinzu Rd ← Rd + Rr + C Z, C, N, V, H. 1
ADIW Rdl,K Sofort zu Word hinzufügen Rdh:Rdl ← Rdh:Rdl + K Z, C, N, V, S 2
Untertitel Rd, Rr Subtrahieren Sie zwei Register Rd ← Rd – Rr Z, C, N, V, H. 1
HOCH Rd, K. Konstante vom Register abziehen Rd ← Rd – K Z, C, N, V, H. 1
SBC Rd, Rr Subtrahieren Sie mit Carry zwei Register Rd ← Rd – Rr – C Z, C, N, V, H. 1
SBCI Rd, K. Subtrahieren Sie mit Carry Constant von Reg. Rd ← Rd – K – C Z, C, N, V, H. 1
SBIW Rdl,K Sofort von Word abziehen Rdh:Rdl ← Rdh:Rdl – K Z, C, N, V, S 2
UND Rd, Rr Logische UND-Register Rd ← Rd ∙ Rr Z, N, V. 1
ANDI Rd, K. Logisches UND-Register und Konstante Rd ← Rd ∙ K Z, N, V. 1
OR Rd, Rr Logische ODER-Register Rd ← Rd gegen Rr Z, N, V. 1
ORI Rd, K. Logisches ODER-Register und Konstante Rd ← Rd gegen K Z, N, V. 1
EOR Rd, Rr Exklusive ODER-Register Rd ← Rd ⊕ Rr Z, N, V. 1
COM Rd Komplement Rd ← 0xFF − Rd Z, C, N, V. 1
NEG Rd Zweierkomplement Rd ← 0x00 − Rd Z, C, N, V, H. 1
SBR Rd, K. Bit (s) im Register setzen Rd ← Rd gegen K Z, N, V. 1
CBR Rd, K. Bit (s) im Register löschen Rd ← Rd ∙ (0xFF – K) Z, N, V. 1
INC Rd Inkrement Rd ← Rd + 1 Z, N, V. 1
DEZ Rd Dekrement Rd ← Rd − 1 Z, N, V. 1
TST Rd Test auf Null oder Minus Rd ← Rd ∙ Rd Z, N, V. 1
CLR Rd Register löschen Rd ← Rd ⊕ Rd Z, N, V. 1
SER Rd Register einstellen Rd ← 0xFF Keiner 1
NIEDERLASSUNGSANLEITUNG
RJMP k Relativer Sprung PC ← PC + k + 1 Keiner 2
IJMP Indirekter Sprung zu (Z) PC ← Z Keiner 2
RALL k Relativer Unterprogrammaufruf PC ← PC + k + 1 Keiner 3
ICH RUFE Indirekter Aufruf an (Z) PC ← Z Keiner 3
RET Unterprogramm Return PC ← STAPEL Keiner 4
NETZWERKE Rückgabe unterbrechen PC ← STAPEL I 4
CPSE Rd, Rr Vergleichen, Überspringen, wenn gleich wenn (Rd = Rr) PC ← PC + 2 oder 3 Keiner 1
CP Rd, Rr Vergleichen Rd − Rr Z, N, V, C, H. 1
CPC Rd, Rr Vergleiche mit Carry Rd − Rr − C Z, N, V, C, H. 1
Verbraucherpreisindex Rd, K. Vergleiche Register mit Sofort Rd − K Z, N, V, C, H. 1
SBRC Rr, geb Überspringen, wenn Bit im Register gelöscht wurde wenn (Rr(b)=0) PC ← PC + 2 oder 3 Keiner 1
SBRS Rr, geb Überspringen, wenn Bit in Register gesetzt ist wenn (Rr(b)=1) PC ← PC + 2 oder 3 Keiner 1
SBIC P, geb Überspringen, wenn Bit im E / A-Register gelöscht wurde wenn (P(b)=0) PC ← PC + 2 oder 3 Keiner 1
SBIS P, geb Überspringen, wenn das Bit im E / A-Register gesetzt ist wenn (P(b)=1) PC ← PC + 2 oder 3 Keiner 1
BRBS s, k Verzweigen, wenn das Statusflag gesetzt ist wenn (SREG(s) = 1), dann PC←PC+k + 1 Keiner 1/2
BRBC s, k Verzweigen, wenn Statusflag gelöscht wenn (SREG(s) = 0), dann PC←PC+k + 1 Keiner 1/2
BREQ k Verzweigen, wenn gleich wenn (Z = 1), dann PC ← PC + k + 1 Keiner 1/2
BRNE k Verzweigen, wenn nicht gleich wenn (Z = 0), dann PC ← PC + k + 1 Keiner 1/2
BRCS k Verzweigen, wenn Carry Set wenn (C = 1), dann PC ← PC + k + 1 Keiner 1/2
BRCC k Verzweigen, wenn Carry gelöscht wenn (C = 0), dann PC ← PC + k + 1 Keiner 1/2
BRSCH k Verzweigen, wenn gleich oder höher wenn (C = 0), dann PC ← PC + k + 1 Keiner 1/2
BRLO k Verzweigen, wenn niedriger wenn (C = 1), dann PC ← PC + k + 1 Keiner 1/2
BRMI k Verzweigen, wenn Minus wenn (N = 1), dann PC ← PC + k + 1 Keiner 1/2
BRPL k Verzweigen Sie, wenn Plus wenn (N = 0), dann PC ← PC + k + 1 Keiner 1/2
BRGE k Zweig, wenn größer oder gleich, signiert wenn (N ⊕ V= 0), dann PC ← PC + k + 1 Keiner 1/2
BRLT k Verzweigen, wenn weniger als Null, signiert wenn (N ⊕ V= 1), dann PC ← PC + k + 1 Keiner 1/2
BRHS k Verzweigen, wenn Half Carry Flag gesetzt ist wenn (H = 1), dann PC ← PC + k + 1 Keiner 1/2
BRHC k Verzweigen, wenn die halbe Tragflagge gelöscht ist wenn (H = 0), dann PC ← PC + k + 1 Keiner 1/2
BRTS k Verzweigen, wenn T-Flag gesetzt ist wenn (T = 1), dann PC ← PC + k + 1 Keiner 1/2
BRTC k Verzweigen, wenn T-Flag gelöscht ist wenn (T = 0), dann PC ← PC + k + 1 Keiner 1/2
BRVS k Verzweigen, wenn das Überlauf-Flag gesetzt ist wenn (V = 1), dann PC ← PC + k + 1 Keiner 1/2
BRVC k Verzweigen, wenn das Überlauf-Flag gelöscht ist wenn (V = 0), dann PC ← PC + k + 1 Keiner 1/2
BRIE k Verzweigen, wenn Interrupt aktiviert ist wenn (I = 1), dann PC ← PC + k + 1 Keiner 1/2
BRAUT k Verzweigen, wenn Interrupt deaktiviert ist wenn (I = 0), dann PC ← PC + k + 1 Keiner 1/2
BIT- UND BIT-TEST-ANWEISUNGEN
SBI P, b Bit im E / A-Register setzen I/O(P,b) ← 1 Keiner 2
CBI P, b Bit im E / A-Register löschen I/O(P,b) ← 0 Keiner 2
LSL Rd Logische Verschiebung nach links Rd(n+1) ← Rd(n), Rd(0) ← 0 Z, C, N, V. 1
LSR Rd Logische Verschiebung nach rechts Rd(n) ← Rd(n+1), Rd(7) ← 0 Z, C, N, V. 1
ROL Rd Nach links durch Carry drehen Rd(0)←C,Rd(n+1)← Rd(n),C←Rd(7) Z, C, N, V. 1
ROR Rd Durch Carry nach rechts drehen Rd(7)←C,Rd(n)← Rd(n+1),C←Rd(0) Z, C, N, V. 1
ASR Rd Arithmetische Verschiebung nach rechts Rd(n) ← Rd(n+1), n=0..6 Z, C, N, V. 1
Mnemonik Operanden Beschreibung Betrieb Flaggen #Uhren
TAUSCHEN Rd Knabbereien tauschen Rd(3..0)←Rd(7..4),Rd(7..4)←Rd(3..0) Keiner 1
BSET s Flaggensatz SREG(s) ← 1 SREG (s) 1
BCLR s Flagge löschen SREG(s) ← 0 SREG (s) 1
BST Rr, geb Bitspeicher von Register bis T. T ← Rr(b) T 1
BLD Rd, geb Bitlast von T nach Register Rd(b) ← T Keiner 1
SEC Set tragen C ← 1 C 1
CLC Klar tragen C ← 0 C 1
SEN Setzen Sie das negative Flag N ← 1 N 1
CLN Negative Flagge löschen N ← 0 N 1
Sonderwirtschaftszone Setzen Sie das Null-Flag Z ← 1 Z 1
CLZ Löschen Sie die Null-Flagge Z ← 0 Z 1
SEI Globale Interrupt-Aktivierung Ich ← 1 I 1
Befehlszeilenschnittstelle (CLI) Globale Interrupt-Deaktivierung Ich ← 0 I 1
SES Setzen Sie das signierte Testflag S ← 1 S 1
CLS Signiertes Testflag löschen S ← 0 S 1
SEV Zweierkomplement-Überlauf festlegen. V ← 1 V 1
CLV Löschen Sie den Zweierkomplementüberlauf V ← 0 V 1
SATZ Setze T in SREG T ← 1 T 1
Brettsperrholz Löschen Sie T in SREG T ← 0 T 1
SEH Setze Half Carry Flag in SREG H ← 1 H 1
CLH Klare Half Carry Flag in SREG H ← 0 H 1
DATENÜBERTRAGUNGSANLEITUNG
MOV Rd, Rr Zwischen Registern wechseln Rd ← Rr Keiner 1
MOVW Rd, Rr Registerwort kopieren Rd+1:Rd ← Rr+1:Rr Keiner 1
LDI Rd, K. Sofort laden Rd ← K Keiner 1
LD Rd, X Indirekte Last Rd ← (X) Keiner 2
LD Rd, X+ Indirekte Ladung und Post-Inc. Rd ← (X), X ← X + 1 Keiner 2
LD Rd, – X Indirekte und Vorab-Ladung laden. X ← X – 1, Rd ← (X) Keiner 2
LD Rd, Y Indirekte Last Rd ← (J) Keiner 2
LD Rd, J+ Indirekte Ladung und Post-Inc. Rd ← (J), J ← J + 1 Keiner 2
LD Rd, – Y Indirekte und Vorab-Ladung laden. Y ← Y – 1, Rd ← (Y) Keiner 2
LDD Rd, Y+q Indirekte Last mit Verschiebung Rd ← (Y + q) Keiner 2
LD Rd, Z Indirekte Last Rd ← (Z) Keiner 2
LD Rd, Z+ Indirekte Ladung und Post-Inc. Rd ← (Z), Z ← Z+1 Keiner 2
LD Rd, -Z Indirekte und Vorab-Ladung laden. Z ← Z – 1, Rd ← (Z) Keiner 2
LDD Rd, Z+q Indirekte Last mit Verschiebung Rd ← (Z + q) Keiner 2
HLT Rd, k Direkt vom SRAM laden Rd ← (k) Keiner 2
ST X, Rr Indirekt speichern (X) ← Rr Keiner 2
ST X+, Rr Store Indirect und Post-Inc. (X) ← Rr, X ← X + 1 Keiner 2
ST – X, Rr Indirekt und vor Dez. speichern. X ← X – 1, (X) ← Rr Keiner 2
ST Y, Rr Indirekt speichern (Y) ← Rr Keiner 2
ST Y+, Rr Store Indirect und Post-Inc. (Y) ← Rr, Y ← Y + 1 Keiner 2
ST – J, Rr Indirekt und vor Dez. speichern. Y ← Y – 1, (Y) ← Rr Keiner 2
Geschlechtskrankheiten Y+q,Rr Indirektes Speichern mit Verschiebung (Y + q) ← Rr Keiner 2
ST Z, Rr Indirekt speichern (Z) ← Rr Keiner 2
ST Z+, Rr Store Indirect und Post-Inc. (Z) ← Rr, Z ← Z + 1 Keiner 2
ST -Z, Rr Indirekt und vor Dez. speichern. Z ← Z – 1, (Z) ← Rr Keiner 2
Geschlechtskrankheiten Z+q,Rr Indirektes Speichern mit Verschiebung (Z + q) ← Rr Keiner 2
STS k, Rr Direkt zum SRAM speichern (k) ← Rr Keiner 2
LPM Programmspeicher laden R0 ← (Z) Keiner 3
LPM Rd, Z Programmspeicher laden Rd ← (Z) Keiner 3
LPM Rd, Z+ Programmspeicher laden und Post-Inc Rd ← (Z), Z ← Z+1 Keiner 3
SPM Programmspeicher speichern (z) ← R1:R0 Keiner
IN Rd, P. Im Hafen Rd ← P Keiner 1
AUS P, Rr Ausgangshafen P ← Rr Keiner 1
DRÜCKEN Rr Push-Register auf Stapel STAPEL ← Rr Keiner 2
POP Rd Pop Register vom Stapel Rd ← STAPELN Keiner 2
MCU-STEUERUNGSANLEITUNG
NOP Kein Vorgang Keiner 1
SCHLAFEN Schlafen (siehe spezifische Beschreibung für die Schlaffunktion) Keiner 1
WDR Watchdog zurücksetzen (siehe spezielle Beschreibung für WDR/Timer) Keiner 1
BRECHEN Brechen
Geschwindigkeit (MHz) (1) Versorgungsvolumentage (V) Temperaturbereich Paket (2) Bestellnummer (3)
10 1.8 – 5.5 Industrie

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

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

Hinweise: 1. Für Geschwindigkeit vs. Angebotsvolumentage, siehe Abschnitt 21.3 „Geschwindigkeit“ auf Seite 163.

Alle Pakete sind bleifrei, halogenidfrei und vollständig umweltfreundlich und entsprechen der europäischen Richtlinie zur Beschränkung gefährlicher Stoffe (RoHS).

Codeindikatoren

H: NiPdAu-Bleioberfläche

U: mattiertes Zinn

R: Band und Rolle

Diese Bausteine ​​sind auch in Waferform lieferbar. Detaillierte Bestellinformationen und Mindestbestellmengen erhalten Sie bei Ihrem Atmel-Vertriebsbüro vor Ort.

Errata

Errata ATtiny25

Der Revisionsbuchstabe in diesem Abschnitt bezieht sich auf die Revision des ATtiny25-Geräts.

Rev. D – F

Keine bekannten Fehler.

Rev. B – C

Das Lesen des EEPROM kann bei niedriger Versorgungsspannung fehlschlagentage / niedrige Taktfrequenz

Das Lesen des EEPROM kann bei niedriger Versorgungsspannung fehlschlagentage / niedrige Taktfrequenz

Versuch, EEPROM bei niedrigen Taktfrequenzen und/oder niedriger Versorgungsspannung zu lesentagDies kann zu ungültigen Daten führen.

Problembehebung/Workaround

Verwenden Sie das EEPROM nicht, wenn die Taktfrequenz unter 1 MHz liegt und die Versorgungsspannungtage liegt unter 2V. Wenn die Betriebsfrequenz nicht über 1MHz erhöht werden kann, dann Versorgungsspannungtage sollte mehr als 2V betragen. Ebenso, wenn die Versorgungsspannungtage kann nicht über 2 V erhöht werden, dann sollte die Betriebsfrequenz über 1 MHz liegen.

Es ist bekannt, dass diese Eigenschaft temperaturabhängig ist, sie wurde jedoch noch nicht charakterisiert. Richtlinien werden nur für Raumtemperatur angegeben.

Rev. A.

Nicht sampLED.

Errata ATtiny45

Der Revisionsbuchstabe in diesem Abschnitt bezieht sich auf die Revision des ATtiny45-Geräts.

Rev. F – G

Keine bekannten Errata

Rev. D – E

Das Lesen des EEPROM kann bei niedriger Versorgungsspannung fehlschlagentage / niedrige Taktfrequenz

Das Lesen des EEPROM kann bei niedriger Versorgungsspannung fehlschlagentage / niedrige Taktfrequenz

Versuch, EEPROM bei niedrigen Taktfrequenzen und/oder niedriger Versorgungsspannung zu lesentagDies kann zu ungültigen Daten führen.

Problembehebung/Workaround

Verwenden Sie das EEPROM nicht, wenn die Taktfrequenz unter 1 MHz liegt und die Versorgungsspannungtage liegt unter 2V. Wenn die Betriebsfrequenz nicht über 1MHz erhöht werden kann, dann Versorgungsspannungtage sollte mehr als 2V betragen. Ebenso, wenn die Versorgungsspannungtage kann nicht über 2 V erhöht werden, dann sollte die Betriebsfrequenz über 1 MHz liegen.

Es ist bekannt, dass diese Eigenschaft temperaturabhängig ist, sie wurde jedoch noch nicht charakterisiert. Richtlinien werden nur für Raumtemperatur angegeben.

Rev. B – C

PLL rastet nicht ein

Das Lesen des EEPROM aus dem Anwendungscode funktioniert im Lock Bit Mode 3 nicht

Das Lesen des EEPROM kann bei niedriger Versorgungsspannung fehlschlagentage / niedrige Taktfrequenz

Die Generierung des PWM-Ausgangs des Timer-Zählers 1 auf OC1B-XOC1B funktioniert nicht richtig

PLL rastet nicht ein

Bei Frequenzen unter 6.0 MHz wird die PLL nicht gesperrt.

Problembehebung/Workaround

Bei Verwendung der PLL sollte die Frequenz 6.0 MHz oder höher betragen.

Das Lesen des EEPROM aus dem Anwendungscode funktioniert im Lock Bit Mode 3 nicht

Wenn die Speichersperrbits LB2 und LB1 auf Modus 3 programmiert sind, funktioniert das Lesen des EEPROM aus dem Anwendungscode nicht.

Problembehebung/Workaround

Stellen Sie den Lock Bit Protection Mode 3 nicht ein, wenn der Anwendungscode aus dem EEPROM lesen muss.

Das Lesen des EEPROM kann bei niedriger Versorgungsspannung fehlschlagentage / niedrige Taktfrequenz

Versuch, EEPROM bei niedrigen Taktfrequenzen und/oder niedriger Versorgungsspannung zu lesentagDies kann zu ungültigen Daten führen.

Problembehebung/Workaround

Verwenden Sie das EEPROM nicht, wenn die Taktfrequenz unter 1 MHz liegt und die Versorgungsspannungtage liegt unter 2V. Wenn die Betriebsfrequenz nicht über 1MHz erhöht werden kann, dann Versorgungsspannungtage sollte mehr als 2V betragen. Ebenso, wenn die Versorgungsspannungtage kann nicht über 2 V erhöht werden, dann sollte die Betriebsfrequenz über 1 MHz liegen.

Es ist bekannt, dass diese Eigenschaft temperaturabhängig ist, sie wurde jedoch noch nicht charakterisiert. Richtlinien werden nur für Raumtemperatur angegeben.

Timer Counter 1 PWM-Ausgangsgenerierung auf OC1B – XOC1B funktioniert nicht richtig

Der PWM-Ausgang OC1B-XOC1B des Timer Counter1 funktioniert nicht richtig. Nur wenn die Steuerbits COM1B1 und COM1B0 im gleichen Modus wie COM1A1 bzw. COM1A0 sind, funktioniert der OC1B-XOC1B-Ausgang richtig.

Problembehebung/Workaround

Die einzige Problemumgehung besteht darin, für die Steuerbits COM1A[1:0] und COM1B[1:0] die gleiche Steuereinstellung zu verwenden, siehe Tabelle 14-4 im Datenblatt. Das Problem wurde für Tiny45 rev D behoben.

Rev. A.

Zu hoher Stromverbrauch beim Ausschalten

DebugWIRE verliert die Kommunikation beim Einzelschritt in Interrupts

PLL rastet nicht ein

Das Lesen des EEPROM aus dem Anwendungscode funktioniert im Lock Bit Mode 3 nicht

Das Lesen des EEPROM kann bei niedriger Versorgungsspannung fehlschlagentage / niedrige Taktfrequenz

Zu hoher Stromverbrauch beim Ausschalten

Drei Situationen führen zu einem zu hohen Stromverbrauch beim Ausschalten. Diese sind:

Eine externe Uhr wird durch Sicherungen ausgewählt, aber der I/O-PORT ist immer noch als Ausgang aktiviert.

Vor dem Ausschalten wird das EEPROM gelesen.

VCC beträgt 4.5 Volt oder mehr.

Haftungsausschluss: Die Informationen in diesem Dokument werden in Verbindung mit Atmel-Produkten bereitgestellt. Durch dieses Dokument oder im Zusammenhang mit dem Verkauf von Atmel-Produkten wird keine Lizenz, weder ausdrücklich noch stillschweigend, durch Rechtsverwirkung oder anderweitig, an geistigem Eigentum gewährt. AUSSER WIE IN DEN ATMEL-VERKAUFSBEDINGUNGEN AUF DER ATMEL-SEITE FESTGELEGT WEBSITE ÜBERNIMMT ATMEL KEINERLEI HAFTUNG UND SCHLIESST JEGLICHE AUSDRÜCKLICHE, STILLSCHWEIGENDE ODER GESETZLICHE GEWÄHRLEISTUNG IN BEZUG AUF SEINE PRODUKTE AUS, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE STILLSCHWEIGENDE GEWÄHRLEISTUNG DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK ODER NICHTVERLETZUNG VON RECHTEN DRITTER. ATMEL HAFTET IN KEINEM FALL FÜR DIREKTE, INDIREKTE, FOLGE-, STRAF-, SPEZIELLE ODER ZUFÄLLIGE SCHÄDEN (EINSCHLIESSLICH, OHNE EINSCHRÄNKUNG, SCHÄDEN FÜR VERLUSTE UND GEWINNE, GESCHÄFTSUNTERBRECHUNGEN ODER INFORMATIONSVERLUST), DIE SICH AUS DER NUTZUNG ODER UNFÄHIGKEIT DER NUTZUNG ERGEBEN DIESES DOKUMENT, SELBST WENN ATMEL AUF DIE MÖGLICHKEIT SOLCHER SCHÄDEN HINGEWIESEN WURDE.

Atmel gibt keine Zusicherungen oder Gewährleistungen in Bezug auf die Genauigkeit oder Vollständigkeit des Inhalts dieses Dokuments und behält sich das Recht vor, Spezifikationen und Produktbeschreibungen jederzeit ohne Vorankündigung zu ändern. Atmel verpflichtet sich nicht, die hierin enthaltenen Informationen zu aktualisieren. Sofern nicht ausdrücklich anders angegeben, sind Atmel-Produkte nicht für Automobilanwendungen geeignet und dürfen nicht in Automobilanwendungen verwendet werden. Atmel-Produkte sind nicht für die Verwendung als Komponenten in Anwendungen vorgesehen, autorisiert oder garantiert, die das Leben unterstützen oder erhalten sollen.

Verweise

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind markiert *