Inhaltsverzeichnis:

Konfiguration der AVR-Mikrocontroller-Sicherungsbits. Erstellen und Hochladen des LED-Blinkprogramms im Flash-Speicher des Mikrocontrollers. - Gunook
Konfiguration der AVR-Mikrocontroller-Sicherungsbits. Erstellen und Hochladen des LED-Blinkprogramms im Flash-Speicher des Mikrocontrollers. - Gunook

Video: Konfiguration der AVR-Mikrocontroller-Sicherungsbits. Erstellen und Hochladen des LED-Blinkprogramms im Flash-Speicher des Mikrocontrollers. - Gunook

Video: Konfiguration der AVR-Mikrocontroller-Sicherungsbits. Erstellen und Hochladen des LED-Blinkprogramms im Flash-Speicher des Mikrocontrollers. - Gunook
Video: LDmicro 22: Arduino-Boards mit AVRDUDESS (Mikrocontroller-Programmierung mit LDmicro) 2024, Juni
Anonim
Image
Image

In diesem Fall erstellen wir ein einfaches Programm im C-Code und brennen es in den Speicher des Mikrocontrollers. Wir werden unser eigenes Programm schreiben und die Hex-Datei kompilieren, wobei wir das Atmel Studio als integrierte Entwicklungsplattform verwenden. Wir werden Fuse-Bits konfigurieren und eine Hex-Datei in den Speicher des AVR ATMega328P-Mikrocontrollers hochladen, indem wir unseren eigenen Programmierer und die Software AVRDUDE verwenden.

AVRDUDE - ist ein Programm zum Herunterladen und Hochladen der On-Chip-Speicher der AVR-Mikrocontroller von Atmel. Es kann Flash und EEPROM programmieren, und wo vom seriellen Programmierprotokoll unterstützt, kann es Fuse- und Lock-Bits programmieren.

Schritt 1: Programm schreiben und Hex-Datei mit Atmel Studio kompilieren

Programm schreiben und Hex-Datei mit Atmel Studio kompilieren
Programm schreiben und Hex-Datei mit Atmel Studio kompilieren
Programm schreiben und Hex-Datei mit Atmel Studio kompilieren
Programm schreiben und Hex-Datei mit Atmel Studio kompilieren

Wenn Sie Atmel Studio nicht haben, sollten Sie es herunterladen und installieren:

Dieses Projekt verwendet C. Wählen Sie daher die Option GCC C Executable Project aus der Vorlagenliste aus, um ein ausführbares Barebone-Projekt zu generieren.

Als nächstes muss angegeben werden, für welches Gerät das Projekt entwickelt werden soll. Dieses Projekt wird für den AVR ATMega328P Mikrocontroller entwickelt.

Geben Sie den Programmcode in den Bereich des Hauptquellen-Editors von Atmel Studio ein. Der Hauptquelleneditor – Dieses Fenster ist der Haupteditor für die Quelldateien im aktuellen Projekt. Der Editor verfügt über Funktionen zur Rechtschreibprüfung und zur automatischen Vervollständigung.

1. Wir müssen dem Compiler mitteilen, mit welcher Geschwindigkeit unser Chip läuft, damit er Verzögerungen richtig berechnen kann.

#ifndef F_CPU

#define F_CPU 16000000UL // Angabe der Quarzfrequenz des Controllers (16 MHz AVR ATMega328P) #endif

2. Wir fügen die Präambel ein, in die wir unsere Include-Informationen aus anderen Dateien einfügen, die globale Variablen und Funktionen definieren.

#include //Header, um die Datenflusskontrolle über Pins zu ermöglichen. Definiert Pins, Ports usw.

#include //Header, um die Verzögerungsfunktion im Programm zu aktivieren

3. Nach der Präambel kommt die Funktion main().

int main(void) {

Die Funktion main() ist einzigartig und hebt sich von allen anderen Funktionen ab. Jedes C-Programm muss genau eine main()-Funktion haben. Main() ist der Ort, an dem der AVR beim ersten Einschalten mit der Ausführung Ihres Codes beginnt, also der Einstiegspunkt des Programms.

4. Setzen Sie Pin 0 des PORTB als Ausgang.

DDRB=0b00000001; // PORTB1 als Ausgang setzen

Wir tun dies, indem wir eine Binärzahl in das Datenrichtungsregister B schreiben. Das Datenrichtungsregister B ermöglicht es uns, die Bits von Register B ein- oder auszugeben. Das Schreiben einer 1 führt zur Ausgabe, während eine 0 zur Eingabe führt. Da wir eine LED als Ausgang anschließen, schreiben wir eine Binärzahl und machen den Pin 0 von PORT B als Ausgang.

5. Schleife.

während (1) {

Diese Anweisung ist eine Schleife, die oft als Hauptschleife oder Ereignisschleife bezeichnet wird. Dieser Code ist immer wahr; Daher wird es immer wieder in einer Endlosschleife ausgeführt. Es hört nie auf. Daher blinkt die LED unendlich, es sei denn, der Mikrocontroller wird ausgeschaltet oder der Code aus dem Programmspeicher gelöscht.

6. Schalten Sie die LED ein, die an Port PB0 angeschlossen ist

PORTB= 0b00000001; // schaltet die LED ein, die an Port PB0 angeschlossen ist

Diese Zeile gibt dem PB0 von PortB eine 1 an. PORTB ist ein Hardwareregister auf dem AVR-Chip, das 8 Pins enthält, PB7-PB0, von links nach rechts. Das Setzen einer 1 am Ende ergibt eine 1 für PB0; dies setzt PB0 hoch, wodurch es eingeschaltet wird. Daher schaltet sich die an Pin PB0 angeschlossene LED ein und leuchtet auf.

7. Verzögerung

_verzögerung_ms(1000); // erzeugt eine Verzögerung von 1 Sekunde

Diese Anweisung erzeugt eine Verzögerung von 1 Sekunde, sodass die LED genau 1 Sekunde lang leuchtet und leuchtet.

8. Schalten Sie alle B-Pins aus, einschließlich PB0

PORTB= 0b00000000; // Schaltet alle B-Pins aus, einschließlich PB0

Diese Leitung schaltet alle 8 Port B-Pins aus, so dass auch PB0 ausgeschaltet ist, also erlischt die LED.

9. Eine weitere Verzögerung

_verzögerung_ms(1000); // erzeugt eine weitere Verzögerung von 1 Sekunde

Es schaltet sich genau 1 Sekunde lang aus, bevor es die Schleife erneut startet und auf die Linie trifft, die es wieder einschaltet und den Vorgang überall wiederholt. Dies geschieht stufenlos, sodass die LED ständig an- und ausblinkt.

10. Return-Anweisung

}

zurück (0); // diese Zeile wird nie erreicht }

Die letzte Zeile unseres Codes ist eine return(0)-Anweisung. Auch wenn dieser Code nie ausgeführt wird, da es eine Endlosschleife gibt, die niemals endet, ist es für unsere Programme, die auf Desktop-Computern ausgeführt werden, wichtig, dass das Betriebssystem weiß, ob sie korrekt ausgeführt wurden oder nicht. Aus diesem Grund möchte unser Compiler GCC, dass jedes main() mit einem Returncode endet. Rückkehrcodes sind für AVR-Code unnötig, der unabhängig von jedem unterstützenden Betriebssystem ausgeführt wird; trotzdem gibt der Compiler eine Warnung aus, wenn Sie main nicht mit return() beenden.

Der letzte Schritt ist die Erstellung des Projekts. Es bedeutet, alle Objektdateien zu kompilieren und schließlich zu verknüpfen, um die ausführbare Datei (.hex) zu erzeugen. Diese Hex-Datei wird im Ordner Debug generiert, der sich im Projektordner befindet. Diese Hex-Datei kann in den Mikrocontroller-Chip geladen werden.

Schritt 2: Ändern der Standardkonfiguration der Mikrocontroller-Sicherungsbits

Ändern der Standardkonfiguration der Mikrocontroller-Sicherungsbits
Ändern der Standardkonfiguration der Mikrocontroller-Sicherungsbits
Ändern der Standardkonfiguration der Mikrocontroller-Sicherungsbits
Ändern der Standardkonfiguration der Mikrocontroller-Sicherungsbits
Ändern der Standardkonfiguration der Mikrocontroller-Sicherungsbits
Ändern der Standardkonfiguration der Mikrocontroller-Sicherungsbits

Es ist wichtig, sich daran zu erinnern, dass einige der Sicherungsbits verwendet werden können, um bestimmte Aspekte des Chips zu sperren und ihn möglicherweise zu blockieren (und ihn unbrauchbar zu machen)

Es gibt insgesamt 19 Fuse-Bits, die im ATmega328P verwendet werden, und sie sind in drei verschiedene Fuse-Bytes unterteilt. Drei der Fuse-Bits sind im „Extended Fuse Byte“, acht im „Fuse High Byte“und acht weitere im „Fuse Low Byte“enthalten. Es gibt auch ein viertes Byte, das verwendet wird, um die Sperrbits zu programmieren.

Jedes Byte besteht aus 8 Bits und jedes Bit ist eine separate Einstellung oder ein Flag. Wenn wir über Setzen, nicht Setzen, programmierte, nicht programmierte Sicherungen sprechen, verwenden wir eigentlich binäre Sicherungen. 1 bedeutet nicht gesetzt, nicht programmiert und eine Null bedeutet gesetzt, programmiert. Beim Programmieren der Sicherungen können Sie die binäre Notation oder häufiger die hexadezimale Notation verwenden.

ATmega 328P-Chips verfügen über einen eingebauten RC-Oszillator mit einer Frequenz von 8 MHz. Neue Chips werden mit diesem Satz als Taktquelle und aktiver CKDIV8-Fuse ausgeliefert, was zu einem Systemtakt von 1 MHz führt. Die Startzeit ist auf das Maximum eingestellt und die Timeout-Zeit aktiviert.

Neue ATMega 328P-Chips haben im Allgemeinen die folgenden Sicherungseinstellungen:

Niedrige Sicherung = 0x62 (0b01100010)

Hohe Sicherung = 0xD9 (0b11011001)

Erweiterte Sicherung = 0xFF (0b1111111)

Wir werden einen ATmega 328-Chip mit einem externen 16-MHz-Kristall verwenden. Daher müssen wir die Bits von "Fuse Low Byte" entsprechend programmieren.

1. Bits 3-0 steuern die Oszillatorauswahl, und die Standardeinstellung von 0010 ist die Verwendung des kalibrierten internen RC-Oszillators, was wir nicht wollen. Wir möchten, dass der Quarzoszillator mit geringer Leistung von 8,0 bis 16,0 MHz betrieben wird, daher sollten die Bits 3-1 (CKSEL[3:1]) auf 111 gesetzt werden.

2. Bits 5 und 4 steuern die Startzeit, und die Standardeinstellung von 10 ist für eine Startverzögerung von sechs Taktzyklen nach dem Ausschalten und Energiesparen plus eine zusätzliche Startverzögerung von 14 Taktzyklen plus 65 Millisekunden nach dem Zurücksetzen.

Um für einen Quarzoszillator mit geringer Leistung auf der sicheren Seite zu sein, möchten wir die maximal mögliche Verzögerung von 16.000 Taktzyklen vom Ausschalten und Energiesparen, also sollte SUT[1] auf 1 gesetzt werden, plus eine zusätzliche Startverzögerung von 14 Taktzyklen plus 65 Millisekunden ab Reset, also sollte SUT[0] auf 1 gesetzt werden. Außerdem sollte CKSEL[0] auf 1 gesetzt werden.

3. Bit 6 steuert die Taktausgabe an PORTB0, was uns egal ist. Bit 6 kann also auf 1 gesetzt bleiben.

4. Bit 7 steuert die Division durch 8 und die Standardeinstellung von 0 hat die Funktion aktiviert, die wir nicht wollen. Bit 7 muss also von 0 auf 1 geändert werden.

Daher sollte das neue Fuse Low Byte 11111111 sein, was in hexadezimaler Schreibweise 0xFF ist

Um Bits des "Fuse Low Byte" zu programmieren, können wir unseren Programmierer (https://www.instructables.com/id/ISP-Programmer-fo…) und die Software AVRDUDE verwenden. AVRDUDE ist ein Befehlszeilen-Dienstprogramm, das zum Herunterladen von und zum Hochladen auf Atmel-Mikrocontroller verwendet wird.

AVRDUDE herunterladen:

Zuerst müssen wir beschreiben unseren Programmierer zur Konfigurationsdatei von AVRDUDE hinzufügen. Unter Windows befindet sich die Konfigurationsdatei normalerweise am selben Ort wie die ausführbare Datei von AVRDUDE.

Fügen Sie den Text in die Konfigurationsdatei avrdude.conf ein:

# ISPProgv1

Programmierer-ID = "ISPProgv1"; desc = "Serial Port Banging, reset=dtr sck=rts mosi=txd miso=cts"; type = "serbisch"; Verbindungstyp = seriell; zurücksetzen = 4; sck = 7; mosis = 3; Miso = 8;;

Vor dem Starten des AVRDUDE müssen wir den Mikrocontroller gemäß dem Schema mit dem Programmierer verbinden

DOS-Eingabeaufforderungsfenster öffnen.

1. Um die Liste der Programmierer anzuzeigen, die von avrdude unterstützt werden, geben Sie den Befehl avrdude -c c ein. Wenn alles in Ordnung ist, sollte die Liste die Programmierer-ID "ISPProgv1" haben.

2. Um die Liste der Atmel-Geräte anzuzeigen, die von avrdude unterstützt werden, geben Sie den Befehl avrdude -c ISPProgv1 ein. Die Liste sollte das Gerät m328p für Atmel ATMega 328P enthalten.

Geben Sie als Nächstes avrdude -c ISPProgv1 –p m328p ein, der Befehl tell avrdude, welcher Programmierer verwendet wird und welcher Atmel-Mikrocontroller angeschlossen ist. Es präsentiert die ATmega328P-Signatur in hexadezimaler Notation: 0x1e950f. Es präsentiert die Fuse-Bit-Programmierung derzeit im ATmega328P auch in hexadezimaler Schreibweise; in diesem Fall sind werksseitig Fuse-Bytes programmiert.

Geben Sie als Nächstes avrdude -c ISPProgv1 –p m328p –U lfuse:w:0xFF:m ein. Dies ist ein Befehl, um avrdude mitzuteilen, welcher Programmierer verwendet wird und welcher Atmel-Mikrocontroller angeschlossen ist, und das Fuse Low Byte auf 0xFF zu ändern.

Jetzt sollte das Taktsignal von einem Quarzoszillator mit geringer Leistung kommen.

Schritt 3: Brennen des Programms in den Speicher des ATMega328P-Mikrocontrollers

Brennen des Programms in den Speicher des ATMega328P-Mikrocontrollers
Brennen des Programms in den Speicher des ATMega328P-Mikrocontrollers
Brennen des Programms in den Speicher des ATMega328P-Mikrocontrollers
Brennen des Programms in den Speicher des ATMega328P-Mikrocontrollers

Kopieren Sie zuerst die Hex-Datei des Programms, das wir am Anfang der Anweisung erstellt haben, in das AVRDUDE-Verzeichnis.

Geben Sie dann im DOS-Eingabeaufforderungsfenster den Befehl avrdude –c ISPProgv1 –p m328p –u –U flash:w:[Name Ihrer Hex-Datei] ein.

Der Befehl schreibt eine Hex-Datei in den Speicher des Mikrocontrollers. Nun arbeitet der Mikrocontroller gemäß den Anweisungen unseres Programms. Schauen wir es uns an!

Schritt 4: Überprüfen Sie, ob der Mikrocontroller gemäß den Anweisungen unseres Programms funktioniert

Überprüfen Sie, ob der Mikrocontroller gemäß den Anweisungen unseres Programms funktioniert
Überprüfen Sie, ob der Mikrocontroller gemäß den Anweisungen unseres Programms funktioniert
Überprüfen Sie, ob der Mikrocontroller gemäß den Anweisungen unseres Programms funktioniert
Überprüfen Sie, ob der Mikrocontroller gemäß den Anweisungen unseres Programms funktioniert
Überprüfen Sie, ob der Mikrocontroller gemäß den Anweisungen unseres Programms funktioniert
Überprüfen Sie, ob der Mikrocontroller gemäß den Anweisungen unseres Programms funktioniert

Schließen Sie die Komponenten gemäß dem Schaltplan des AVR-Blinking-LED-Schaltkreises an

Zuerst brauchen wir Strom, wie alle AVR-Schaltungen. Etwa 5 Volt Strom reichen für den Betrieb des AVR-Chips aus. Diese erhalten Sie entweder über Batterien oder ein Gleichstromnetzteil. Wir verbinden +5V Strom mit Pin 7 und verbinden Pin 8 mit Masse auf dem Steckbrett. Zwischen beiden Pins platzieren wir einen 0,1μF Keramikkondensator, um die Stromversorgung des Netzteils zu glätten, damit der AVR-Chip eine glatte Stromleitung erhält.

Der 10KΩ-Widerstand wird verwendet, um das Gerät mit Power On Reset (POR) zu versorgen. Wenn die Stromversorgung eingeschaltet wird, ist die Spannung am Kondensator Null, so dass das Gerät zurückgesetzt wird (da Reset aktiv niedrig ist), dann lädt sich der Kondensator auf VCC auf und der Reset wird deaktiviert.

Wir verbinden die Anode unserer LED mit dem AVR-Pin PB0. Dies ist Pin 14 des ATMega328P. Da es sich um eine LED handelt, möchten wir den zur LED fließenden Strom begrenzen, damit sie nicht durchbrennt. Aus diesem Grund schalten wir einen 330Ω Widerstand in Reihe mit der LED. Die Kathode der LED wird mit Masse verbunden.

Ein 16-MHz-Quarz wird verwendet, um den Takt für den Atmega328-Mikrocontroller bereitzustellen, und 22pF-Kondensatoren werden verwendet, um den Betrieb des Quarzes zu stabilisieren.

Dies sind alle Anschlüsse, die zum Aufleuchten der LED erforderlich sind. Energieversorgung.

Okay. LED blinkt mit einer Sekunde Verzögerung. Die Arbeit des Mikrocontrollers entspricht unseren Aufgaben

Schritt 5: Fazit

Zugegeben, es war ein langer Prozess, nur eine LED zu blinken, aber die Wahrheit ist, dass Sie große Hürden erfolgreich genommen haben: Erstellen einer Hardware-Plattform zum Programmieren eines AVR-Mikrocontrollers Verwenden des Atmel Studio als integrierte Entwicklungsplattform, Verwenden von AVRDUDE als Software für Konfiguration und Programmierung eines AVR-Mikrocontrollers

Wenn Sie über meine Basis-Mikrocontroller-Projekte auf dem Laufenden bleiben möchten, abonnieren Sie mein YouTube! Das Ansehen und Teilen meiner Videos ist eine Möglichkeit, meine Arbeit zu unterstützen

YouTube FOG-Kanal abonnieren

Empfohlen: