- Was sind Sicherungen in AVR - Eine detaillierte Erklärung
- Sicherungsbits in Arduino
- Erforderliche Komponenten zum Testen von Sicherungen in AVR
- Schema zum Testen der Sicherungsbits in AVR
- Testen der Sicherungen in AVR
In diesem Tutorial werden wir über Sicherungen sprechen. Als ich auf dem College war und all die coolen Dinge in der Elektronik lernte, hörte ich zum ersten Mal den Begriff Sicherung in AVR. Mein erster Gedanke zu diesem Thema war: Oh! Es gibt etwas im AVR, das durchbrennt, wenn ich etwas falsch gemacht habe. Damals standen im Internet nicht viele Ressourcen zur Verfügung. Ich habe ziemlich viel gesucht, um herauszufinden, dass diese Sicherungen auf einige spezielle Bits im AVR-Mikrocontroller verweisen. Diese Bits sind wie winzige Schalter im AVR. Durch Ein- und Ausschalten können wir einige Besonderheiten des AVR ein- und ausschalten. Ein- und Ausschalten bedeutet Einstellen und Zurücksetzen.
Wir werden diese Gelegenheit nutzen, um alles zu besprechen, was es über die Sicherungsbits in AVR gibt. Der Einfachheit halber nehmen wir das Beispiel eines Arduino-Boards, auf dem sich der beliebte ATmega328P-Mikrocontroller befindet. Hier erfahren Sie, wie Sie diese Sicherungen zum Ein- und Ausschalten einiger dieser Funktionen einstellen, was in realen Anwendungen sehr praktisch ist. Also, lasst uns gleich loslegen.
In unseren vorherigen Beiträgen haben wir viele AVR-Mikrocontroller-Projekte wie das Interfacing GSM-Modul mit AVR-Mikrocontroller und das Interfacing HC-05 mit AVR-Mikrocontroller erstellt. Sie können sie überprüfen, wenn Sie mehr über diese Projekte erfahren möchten.
Was sind Sicherungen in AVR - Eine detaillierte Erklärung
Wie bereits erwähnt, sind Sicherungen im Mikrocontroller wie kleine Schalter, die ein- und ausgeschaltet werden können, um verschiedene Funktionen im AVR-Mikrocontroller zu aktivieren und zu deaktivieren. Dies ist der Teil, in dem unsere nächste Frage auftaucht. Wie setzen oder setzen wir diese Sicherungen zurück? Die Antwort auf diese Frage ist einfach: Wir tun dies mit Hilfe von Sicherungsregistern.
Im ATmega328P-IC befinden sich insgesamt 19 Sicherungsbits, die in drei Sicherungsbytes unterteilt sind. Diese sind definiert als "Extended Fuse Bytes", "High Fuse Byte" und "Low Fuse Byte".
Wenn Sie sich Tabelle 27 des ATmega328 / P-Datenblattes Rev: 7810D - AVR - 01/15 ansehen, finden Sie alle kleinen Details zu den Sicherungsbits. Das folgende Bild gibt Ihnen jedoch eine bessere Vorstellung vom Abschnitt mit den Sicherungsbits im Datenblatt.
Nachdem Sie ein wenig über die Sicherungsbits gelernt haben, gehen wir das Datenblatt durch und finden alle erforderlichen Details zu diesem IC heraus.
Die erweiterten Sicherungsbits:
Wenn Sie auf die Registerkarte Sicherungsbits klicken und ein wenig nach unten scrollen, finden Sie Tabelle 27-5: Die Tabelle für das „Erweiterte Sicherungsbyte“, allgemein bekannt als „ EFUSE“. Das Bild unten zeigt genau das.
In dieser Tabelle gibt es nur drei verwendbare Bits, und die anderen drei sind reserviert. Diese drei Bits befassen sich mit der Brownout-Erkennungsstufe. Wie Sie im Hinweis sehen können, wenn wir uns Tabelle 28-5 ansehen, finden wir weitere Details dazu.
Wie Sie in der obigen Tabelle sehen können, haben wir die Tabelle für die Brownout-Erkennung. Die Brownout-Erkennung ist eine Funktion, die den Mikrocontroller zurücksetzt, wenn die Versorgungsspannung einen bestimmten Spannungspegel unterschreitet. Im ATmega328P-IC können wir die Brownout-Erkennung vollständig deaktivieren oder auf die in der obigen Tabelle angegebenen Werte einstellen.
Die High Fuse Bytes:
Wie Sie in der Abbildung unten sehen können, zeigt Tabelle 27-6: des Datenblattes die Higher Fuse-Bits des ATmega328P-IC.
Die Hochsicherung erledigt verschiedene Aufgaben im ATmega328-Mikrocontroller. In diesem Abschnitt werden wir über die höheren Sicherungsbits und ihre Funktionsweise sprechen. Beginnen wir mit den Bits BOOTRST, BOOTSZ0 und BOOTSZ1. Diese drei Bits sind für die Einstellung der Startgröße verantwortlich. Die Startgröße bezieht sich auf die Speichermenge, die für die Installation des Bootloaders reserviert ist .
Ein Bootloader ist eine spezielle Software, die auf dem Mikrocontroller ausgeführt wird und verschiedene Aufgaben verwaltet. Beim Arduino wird der Bootloader jedoch verwendet, um die Arduino-Skizze in den Mikrocontroller hochzuladen. In einem unserer vorherigen Artikel haben wir Ihnen gezeigt, wie Sie den Bootloader in ATmega328P mit Arduino brennen. Sie können dies überprüfen, wenn Sie an dem Thema interessiert sind. Zurück zu unserem Thema: Die Zwecke anderer Bits im High-Byte werden einigermaßen klargestellt. Das EESAVE-Bit dient dazu, den EEPROM-Speicher zu erhalten, während ein Chip-Löschzyklus durchgeführt wird. Das WDTON-Bit dient zum Aktivieren oder Deaktivieren des Watchdog-Timers.
Der Watchdog-Timer ist ein spezieller Timer im ATmega328P-IC, der über eine separate Uhr verfügt und unabhängig läuft. Wenn der Watchdog-Timer aktiviert ist, müssen Sie ihn mit einer bestimmten Zeit löschen. Andernfalls setzt der Watchdog-Timer den Mikrocontroller zurück. Dies ist eine nützliche Funktion, die in vielen Mikrocontrollern enthalten ist, wenn der Prozessor hängen bleibt. Der Watchdog setzt es zurück, um Schäden an der Endanwendung zu vermeiden.
Das DWEN-Bit dient zum Aktivieren des Debug-Kabels. Dies ist ein vorbereitendes Protokoll, das intern in die Hardware integriert ist und zum Programmieren und Debuggen der Prozessoren verwendet wird. Wenn diese Funktion aktiviert ist, können Sie den Prozessor mit einem einzigen Kabel flashen und debuggen. Um es zu verwenden, benötigen Sie jedoch spezielle Hardware, die Atmel vorbereitet.
Die verbleibenden zwei Bits sind die Bits, die Sie vermeiden müssen, es sei denn, Sie wissen genau, was Sie tun. Dies sind das RSTDISBL-Bit-7 und das SPIEN-Bit-5. Das RSTDISBL (External Reset Disable) deaktiviert, wie der Name schon sagt, den externen Hardware-Reset-Pin, und das SPIEN-Bit wird zum Deaktivieren der SPI-Programmierschnittstelle verwendet. Durch Deaktivieren eines dieser beiden Bits kann Ihr AVR vollständig blockiert werden. Es ist also eine gute Idee, sie in Ruhe zu lassen.
Die Low Fuse Bytes:
Wie Sie in der Abbildung unten sehen können, zeigt Tabelle 27-7: des Datenblattes die unteren Sicherungsbits des ATmega328P-IC.
Dieses Sicherungsbyte ist für die Einrichtung der Taktquelle und einiger anderer Parameter der Uhr im AVR verantwortlich. In diesem Abschnitt erfahren Sie alles darüber.
Das 7. Bit oder das CKDIV8-Flag können gesetzt werden, um die Taktquelle durch 8 zu teilen. Dies ist sehr praktisch, was Sie möglicherweise bereits wissen, wenn Sie versucht haben, den AVR selbst zu programmieren. Das nächste Bit ist das CKOUT-Bit und es ist das 6. Bit im Low Fuse Byte. Beim Programmieren würde das interne Taktsignal am PORTB0 des Mikrocontrollers ausgegeben.
Die Bits 5 und 4 SUT1 und SUT0 steuern die Startzeit des Mikrocontrollers. Dies verhindert jegliche Anlaufaktionen, die stattfinden können oder nicht, bevor die Versorgungsspannung einen akzeptablen Mindestschwellenspannungspegel erreichen kann. Die letzten vier CKSEL0 - 4 Bits werden verwendet, um die Taktquelle des Mikrocontrollers auszuwählen. Die folgende Tabelle gibt Ihnen ein besseres Verständnis dieser vier Bits, die für die Einrichtung der Taktquelle verantwortlich sind. Sie finden diese Tabelle im Abschnitt Taktquelle des Datenblattes.
Bevor wir weiter kommen, sollte ich noch die Tabelle für die Startverzögerung des Oszillators durchgehen. Mit der Startverzögerung beziehen wir uns auf die Bits 4 und 5 des unteren Sicherungsbytes. Die Verzögerungen müssen abhängig von der Bedingung, in der die Schaltung betrieben wird, und dem verwendeten Oszillatortyp eingestellt werden. Die Standardwerte sind so eingestellt, dass die ansteigende Leistung mit 6 Taktzyklen verlangsamt wird, wenn eine Ein- oder Ausschaltsequenz ausgeführt wird. Als nächstes gibt es eine weitere Verzögerung von 14 Taktzyklen mit einer Verzögerung von 65 ms nach dem Start.
Puh! Das waren viele Informationen zu verdauen. Bevor wir jedoch fortfahren, beenden wir diesen Abschnitt mit einer kurzen Notiz.
Hinweis:
Wenn Sie sich das Datenblatt genau angesehen haben, müssen Sie bemerkt haben, dass das Programmieren eines Sicherungsbits bedeutet, dass es niedrig gesetzt wird, dh 0 (Null), was das Gegenteil von dem ist, was wir normalerweise tun, um einen Port hoch oder niedrig zu machen. Sie müssen dies bei der Konfiguration Ihrer Sicherungen berücksichtigen.
Sicherungsbits in Arduino
Wir haben im obigen Abschnitt viel über Sicherungen gesprochen, aber in diesem Abschnitt wollen wir darüber sprechen, wie man sie konfiguriert und wie man sie in einen Mikrocontroller schreibt. Dafür benötigen wir ein Tool namens Avrdude. Es ist ein Tool, mit dem Speicher in AVR-Mikrocontrollern gelesen, geschrieben und geändert werden kann. Es funktioniert mit SPI und bietet eine lange Liste von Unterstützungsmöglichkeiten für verschiedene Arten von Programmierern. Sie können das Tool über den unten angegebenen Link herunterladen. Außerdem werden wir unseren Lieblings-Mikrocontroller Arduino verwenden.
- Laden Sie Avrdude Version 6.3 Windows-ming32 herunter
Nachdem Sie Avrdude haben, müssen Sie dies extrahieren und ein Befehlsfenster in diesem Ordner öffnen. Wenn Sie es später verwenden möchten, können Sie den Ordnerpfad auch zu Ihrem Abschnitt mit Windows-Umgebungsvariablen hinzufügen. Aber ich werde es auf meinen Desktop legen und dort ein Befehlsfenster öffnen. Sobald wir das getan haben, werden wir den USBasp-Programmierer an unseren PC anschließen und sicherstellen, dass wir den richtigen Treiber für unseren USBasp-Programmierer haben. Sobald wir das getan haben, können wir loslegen und zuerst den Standard-Sicherungswert lesen. Dazu müssen Sie den folgenden Befehl ausführen.
avrdude.exe -c usbasp -p m328p -U lfuse: r: low_fuse_val.txt: h -U hfuse: r: high_fuse_val.txt: h -U efuse: r: ext_fuse_val.txt: h
Wenn alles in Ordnung ist, liest dieser Befehl die Sicherungsbytes und fügt sie in drei separate Textdateien ein. Das Bild unten gibt Ihnen eine bessere Vorstellung von dem Prozess.
Wie Sie sehen können, hat der Avrdude die Sicherungsbits auf dem Arduino Nano durchgelesen und in drei separaten Textdateien gespeichert. Jetzt haben wir sie geöffnet und drei Werte erhalten; für EFUSE: 0xFD, für HFUSE: 0XDA, für LFUSE: 0xFF. Dies war der Standard-Sicherungswert, den wir für einen Arduino Nano erhalten haben. Nun konvertieren wir diese Bits in Binärbits und vergleichen sie mit ihrem Standardwert aus dem Datenblatt. Die folgende Tabelle zeigt genau das.
Der Einfachheit halber werden die Sicherungsbits in hexadezimalen Werten geschrieben. Wenn wir sie jedoch in Binärwerte konvertieren und mit dem Datenblatt vergleichen, wissen wir, was passiert. Beginnen wir mit dem unteren Sicherungsbyte. Wie Sie aus der obigen Zeichenfolge sehen können, wird sie auf 0XFF gesetzt und der Binärwert wäre 0B11111111.
Vergleich der unteren Sicherungsbytes mit Arduino:
Low Fuse Byte |
Bit Nr. |
Standardwert in AVR |
Standardwert von Arduino |
CKDIV8 |
7 |
0 (programmiert) |
1 (unprogrammiert) |
CKOUT |
6 |
1 (unprogrammiert) |
1 (unprogrammiert) |
SUT1 |
5 |
1 (unprogrammiert) |
1 (unprogrammiert) |
SUT0 |
4 |
0 (programmiert) |
1 (unprogrammiert) |
CKSEL3 |
3 |
0 (programmiert) |
1 (unprogrammiert) |
CKSEL2 |
2 |
0 (programmiert) |
1 (unprogrammiert) |
CKSEL1 |
1 |
1 (unprogrammiert) |
1 (unprogrammiert) |
CKSEL0 |
0 |
0 (programmiert) |
1 (unprogrammiert) |
Das höhere Sicherungsbyte wird in der Binärdatei 0B11011010 auf 0XDA gesetzt.
Höheres Sicherungsbyte in Binär:
High Fuse Byte |
Bit Nr. |
Standardwert in AVR |
Standardwert von Arduino |
RSTDISBL |
7 |
1 (unprogrammiert) |
1 (unprogrammiert) |
DWEN |
6 |
1 (unprogrammiert) |
1 (unprogrammiert) |
SPIEN |
5 |
0 (programmiert) |
0 (programmiert) |
WDTON |
4 |
1 (unprogrammiert) |
1 (unprogrammiert) |
EESAVE |
3 |
1 (unprogrammiert) |
1 (unprogrammiert) |
BOOTSZ1 |
2 |
0 (programmiert) |
0 (programmiert) |
BOOTSZ0 |
1 |
0 (programmiert) |
1 (unprogrammiert) |
BOOTRST |
0 |
1 (unprogrammiert) |
0 (programmiert)) |
Die Einstellung für das erweiterte Sicherungsbyte ist auf 0XFD festgelegt, binär ist sie 0B11111101.
Erweitertes Sicherungsbyte in Binär:
Erweitertes Sicherungsbyte |
Bit Nr. |
Standardwert in AVR |
Standardwert von Arduino |
- - |
7 |
1 |
1 |
- - |
6 |
1 |
1 |
- - |
5 |
1 |
1 |
- - |
4 |
1 |
1 |
- - |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (unprogrammiert) |
1 (unprogrammiert) |
BODLEVEL1 |
1 |
1 (unprogrammiert) |
0 (programmiert) |
BODLEVEL0 |
0 |
1 (unprogrammiert) |
1 (unprogrammiert) |
Dies markiert nun das Ende dieses Abschnitts. Bis jetzt haben wir viel über den AVR-Mikrocontroller und seine Sicherungsbits gelernt. Lassen Sie uns diesen Artikel abschließen, indem wir unsere Theorie auf die Probe stellen, indem wir einige der Sicherungsbits im Arduino Nano ändern und damit experimentieren.
Erforderliche Komponenten zum Testen von Sicherungen in AVR
Wir haben viel über die Sicherungen im obigen Teil gesprochen. Um im Artikel weiter fortzufahren, benötigen wir jedoch einige Hardwarekomponenten und einige Softwaretools. In diesem Abschnitt werden wir darüber sprechen. Eine Liste der erforderlichen Komponenten mit Bildern wird unten angezeigt.
- Steckbrett - 1
- Arduino Nano - 1
- USBasp AVR Programmer - 1
- USB-Kabel - 1
- AVR 10-Pin zu 6-Pin Konverter - 1
- Avrdude (Software-Tool zur Programmierung von AVR)
- LED - 1
- 330R Widerstand - 1
- Überbrückungskabel
Schema zum Testen der Sicherungsbits in AVR
Das Hardware-Test-Setup wird unten in diesem Setup gezeigt. Wir haben den Arduino Nano mit einem USB-Kabel an den PC angeschlossen und den USBasp-Programmierer an den PC angeschlossen. Ziel dieses Artikels ist es, die Sicherungsbits in AVR zu programmieren. Aus diesem Grund haben wir den USBasp-Programmierer mit dem Arduino verbunden. Das Bild unten gibt Ihnen einen besseren Überblick über das Setup.
Testen der Sicherungen in AVR
Der Testaufbau ist unten dargestellt. Wie Sie sehen können, haben wir den Arduino- und den USBasp-Programmierer an den USB meines Laptops angeschlossen.
Öffnen wir nun die Arduino IDE und laden eine grundlegende Blinkskizze hoch. Der Inhalt der grundlegenden Blinkskizze ist selbsterklärend, daher habe ich keine Details dazu angegeben.
Sie werden im Video sehen, dass die LED an Pin Nr. 13 wie gewünscht blinkt. Lassen Sie uns nun die Sicherungseinstellungen anpassen und auf die Standardwerte einstellen. Und wie wir zuvor im Datenblatt gesehen haben; die EFUSE ist 0XFF; die HFUSE ist D9; Die LFUSE ist: 62. Jetzt konfigurieren wir es mit Avrdude, flashen es und sehen, was passiert. Der Code, den wir verwenden werden, ist:
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Sobald ich dies tue, werden Sie sehen, dass die LED extrem langsam blinkt, da wir den Wert für einen 16-MHz-Takt berechnet und programmiert haben und es nach dem Brennen der Sicherungen nur noch ein interner 1-MHz-RC-Oszillator ist. Deshalb blinkt die LED so langsam. Versuchen wir nun erneut, eine Skizze hochzuladen. Wir werden sehen, dass der Arduino einen Fehler ausgibt und der Code nicht hochgeladen wird. Denn durch das Ändern der Sicherungen haben wir auch die Bootloader-Einstellungen durcheinander gebracht. Sie können das im folgenden Bild sehen.
Um dies zu beheben und das Arduino wieder so zu machen, wie es vorher war, müssen wir den Bootloader für das Arduino erneut brennen. Gehen Sie dazu zu Extras -> Programmierer - USBasp . Sobald Sie dies getan haben, können Sie erneut zu Tools gehen und auf die Option Bootloader brennen klicken. Dadurch wird der Standard-Bootloader auf Ihrem Arduino erneut gebrannt und alles wird wieder so wie zuvor.
Nachdem der Bootloader wieder auf das Arduino geflasht wurde, kehrte er in seinen ursprünglichen Zustand zurück und das letzte Bild zeigt eine blinkende LED, nachdem der Bootloader erneut gebrannt wurde.
Und das markiert das Ende dieses Artikels. Ich hoffe, Ihnen hat der Artikel gefallen und Sie haben etwas Neues gelernt. Wenn Sie Fragen zum Artikel haben, zögern Sie nicht, unten einen Kommentar abzugeben.