So wie alles und jedes auf der Welt sind auch AVR-Mikrocontroller nicht frei von Fehlern: sie haben Silicon Bugs bzw. Hard-Bugs, also Fehler, die etwa durch den Herstellungsprozess oder mangelhaftes Chip-Design verursacht werden. Je nach Art des Fehlers (Erratum) gibt es verschiedene Möglichkeiten, ihn zu umschiffen, also einen Workaround zu finden. Das kann durch zusätzliche Hardware geschehen, indem man bestimmte Features nicht nutzt, oder indem ein Übersetzungsprogramm wie Compiler oder Assembler adäquaten Code erzeugt.
Im folgenden ein Überblick über bekannte Errata der AVRs. Die Liste soll nur ein kurzer Überblick mit Beschreibung und Vorschlägen für Workarounds sein, den man bei Problemen überfliegen kann, um Hard-Bugs auszuschließen. Ob ein Erratum überhaupt auf eine spezielle AVR-Version oder -Revision zutrifft sowie näheres dazu findet man in den Handbüchern.
Inhaltsverzeichnis
Erratum: EEPROM Adresse 0 fehlerhaft
- Beschreibung
- EEPROM-Zelle an Adresse 0 funktioniert nicht fehlerfrei. Beim Zusammenbrechen der Spannung kann das EEPROM an Adresse 0 überschrieben werden.
- Behebung
- Brownout aktivieren und/oder EEPROM-Adresse 0 nicht verwenden. Ob die Entwicklungsumgebung den Fehler umschifft – also keine Daten an diese Adresse lokatiert – findet man evtl. in der Dokumentation der Entwicklungsumgebung. Siehe auch Workaround mit avr-gcc.
Erratum: Interner 33pF wird nicht aktiviert
- Beschreibung
- Über Fuses kann bei Verwendung eines externen Low-Frequency-Quarzes (32kHz) ein interner Kondensator von 32pF aktiviert werden, um ein Bauteil einzusparen. Den C kann man auch zusammen mit einem externen R als RC-Glied zur Takterzeugung verwenden. Der Kondensator wird jedoch nicht aktiviert.
- Behebung
- Verwendung eines externen 32pF Kondensators.
Erratum: Interrupts bei Timer 2 geht verloren
- Beschreibung
- Wenn Timer2 im asyncronen Mode läuft, kann es passieren das beim Schreiben in das Register TCNT2 ein Interrupt verloren geht. Kurz nach dem Schreiben ist ein Compare Match Interrupts unterdrückt.
- Behebung
- Vor dem Zugriff auf TCNT2 testen ob bald ein Interrupt ansteht, und dann ggf. warten. Bei sehr langsamem externen Takt kann es eventuell besser sein im Nachhinein zu testen ob ein Interrupt verloren gegangen ist, und dann den Interrupt nachzuhohlen.