- Erforderliche Materialien:
- Flash-Speicher:
- ICSP (In Circuit Serial Programming):
- Schaltung und Hardware:
- Brennen des Codes mit MPLAB IPE:
In unseren beiden vorherigen Tutorials haben wir uns mit den ersten Schritten mit PIC unter Verwendung des MPLABX- und XC8-Compilers befasst. Außerdem haben wir unser erstes LED-Blinkprogramm mit PIC erstellt und durch Simulation überprüft. Jetzt ist es Zeit für uns, die Hardware in die Hand zu nehmen. In diesem Tutorial bauen wir eine kleine Schaltung auf einer Perf-Platine zum Blinken der LED mit PIC auf. Wir werden das Programm auf unseren PIC-Mikrocontroller übertragen und das Blinken der LED überprüfen. Zum Programmieren der PIC-MCU verwenden wir MPLAB IPE.
Erforderliche Materialien:
Wie in unserem vorherigen Tutorial beschrieben, benötigen wir die folgenden Materialien:
- PicKit 3
- PIC16F877A IC
- 40 - Pin IC Halter
- Perf Board
- 20 MHz Crystal OSC
- Weibliche und männliche Bergstickstifte
- 33pf Kondensator - 2Nos, 100uf und 10uf Kappe.
- 680 Ohm, 10K und 560 Ohm Widerstand
- LED jeder Farbe
- 1Lötsatz
- IC 7805
- 12V Adapter
Was passiert, wenn wir einen Mikrocontroller "verbrennen" !!
Es ist üblich, den Code in eine MCU hochzuladen und in der MCU zum Laufen zu bringen.
Um dies zu verstehen, werfen wir einen Blick auf unser Programm
Wie wir sehen können, ist dieser Code in C-Sprache geschrieben und macht für unsere MCU keinen Sinn. Hier kommt der Teil unseres Compilers ins Spiel. Ein Compiler konvertiert diesen Code in eine maschinenlesbare Form. Dieses maschinenlesbare Formular wird als HEX-Code bezeichnet. Jedes von uns erstellte Projekt verfügt über einen HEX-Code, der sich im folgenden Verzeichnis befindet
** Ihr Standort ** \ Blink \ Blink.X \ dist \ default \ Production \ Blink.X.production.hex
Wenn Sie wissen möchten, wie dieser HEX-Code aussieht, öffnen Sie ihn einfach mit dem Notizblock. Für unser Blink-Programm sieht der HEX-Code folgendermaßen aus:
: 060000000A128A11FC2F18: 100FAA008316031386018312031386018312031324: 100FBA0086150D30F200AF30F100C130F000F00BB1: 100FCA00E42FF10BE42FF20BE42F0000831203133A: 100FDA0086110D30F200AF30F100C130F000F00B95: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107: 060FFA000A128A11D52F36: 02400E007A3FF7: 00000001FF
Es gibt Möglichkeiten, dies zu lesen und es zu verstehen und wieder in die Assemblersprache umzukehren, aber es ist völlig außerhalb des Rahmens dieses Tutorials. Also, um es einfach auf den Punkt zu bringen; Der HEX ist das endgültige Software-Ergebnis unserer Codierung. Dies wird von MPLAB IPE zum Brennen der MCU gesendet.
Flash-Speicher:
Der HEX-Code wird in der MCU an einem Ort namens Flash-Speicher gespeichert. Der Flash-Speicher ist der Ort, an dem unser Programm in der MCU gespeichert und von dort ausgeführt wird. Sobald wir das Programm in unserer MPLABX kompiliert haben, hätten wir die folgenden Informationen über den Speichertyp auf der Ausgabekonsole erhalten
Da wir gerade ein kleines LED-Blinkprogramm kompiliert haben, zeigt die Speicherzusammenfassung, dass wir gerade 0,5% des verfügbaren Programmspeichers und 1,4% des Datenspeichers belegt haben.
Der Speicher des PIC16F877-Mikrocontrollers ist grundsätzlich in drei Typen unterteilt:
Programmspeicher: Dieser Speicher enthält das Programm (das wir geschrieben haben), nachdem wir es gebrannt haben. Zur Erinnerung: Der Programmzähler führt nacheinander im Programmspeicher gespeicherte Befehle aus. Da wir ein sehr kleines Programm geschrieben haben, haben wir nur 0,5% des gesamten Speicherplatzes verbraucht. Dies ist ein nichtflüchtiger Speicher, dh die gespeicherten Daten gehen nach dem Ausschalten nicht verloren.
Datenspeicher: Dies ist der RAM-Speichertyp, der spezielle Register wie SFR (Special Function Register) enthält, die Watchdog-Timer, Brownout Reset usw. und GPR (General Purpose Register) enthalten, die TRIS und PORT usw. enthalten. Die gespeicherten Variablen im Datenspeicher während des Programms werden nach dem Ausschalten der MCU gelöscht. Jede im Programm deklarierte Variable befindet sich im Datenspeicher. Dies ist auch ein flüchtiger Speicher.
Daten-EEPROM (elektrisch löschbarer programmierbarer Nur-Lese-Speicher): Ein Speicher, in dem die Variablen beim Brennen des geschriebenen Programms gespeichert werden können. Wenn wir beispielsweise eine Variable "a" zuweisen, um einen Wert von 5 darin zu speichern und im EEPROM zu speichern, gehen diese Daten auch dann nicht verloren, wenn das Gerät ausgeschaltet wird. Dies ist ein nichtflüchtiger Speicher.
Programmspeicher und EEPROM sind nichtflüchtige Speicher und werden als Flash-Speicher oder EEPROM bezeichnet.
ICSP (In Circuit Serial Programming):
Wir werden unseren PIC16F877A mit der ICSP-Option programmieren, die in unserer MCU verfügbar ist.
Was ist ICSP?
ICSP ist eine einfache Methode, mit der wir eine MCU auch dann programmieren können, wenn sie in unserer Projektplatine platziert ist. Es ist keine separate Programmierkarte erforderlich, um die MCU zu programmieren. Wir benötigen lediglich 6 Verbindungen vom PicKit3-Programmierer zu unserer Karte wie folgt:
1 |
VPP (oder MCLRn) |
Programmiermodus aufrufen. |
2 |
Vcc |
Power Pin 11 oder 32 |
3 |
GND |
Erdungs- PIN 12 oder 31 |
4 |
PID - Daten |
RB7. PIN40 |
5 |
PGC - Uhr |
RB6. PIN 39 |
6 |
PGM - LVP aktivieren |
RB3 / RB4. Nicht verpflichtend |
ICSP ist für alle PIC-Pakete geeignet. Alles, was wir brauchen, ist, diese fünf Pins (der 6. Pin PGM ist optional) von der MCU zu Pickit3 herauszuziehen, wie in der Abbildung unten gezeigt.
Schaltung und Hardware:
Jetzt haben wir unseren HEX-Code bereit und wissen auch, wie wir unser PicKit 3 mithilfe von ICSP mit unserer PIC-MCU verbinden können. Lassen Sie uns also fortfahren und die Schaltung mit Hilfe der folgenden Schemata löten:
In der obigen Schaltung habe ich einen 7805 verwendet, um den Ausgang 5V zu meiner PIC-MCU zu regeln. Dieser Regler wird von einem 12-V-Wand-Mart-Adapter gespeist. Die ROTE LED zeigt an, ob der PIC mit Strom versorgt wird. Der Anschluss J1 wird für die ICSP-Programmierung verwendet. Die Stifte sind wie in der obigen Tabelle beschrieben verbunden.
Die erste Pin-MCLR muss standardmäßig mit Hilfe von 10k hoch gehalten werden. Dadurch wird verhindert, dass die MCU zurückgesetzt wird. Um die MCU zurückzusetzen, muss der Pin MCLR gegen Masse gehalten werden, was mit Hilfe des Schalters SW1 erfolgen kann.
Die LED ist über einen Widerstand mit einem Wert von 560 Ohm mit dem Pin RB3 verbunden (siehe LED-Widerstandsrechner). Wenn nach dem Hochladen unseres Programms alles in Ordnung ist, sollte diese LED je nach Programm blinken. Die gesamte Schaltung wird auf Perfboard aufgebaut, indem alle Komponenten darauf verlötet werden, wie Sie im Bild oben sehen können.
Brennen des Codes mit MPLAB IPE:
Führen Sie die folgenden Schritte aus, um den Code zu brennen:
- Starten Sie das MPLAB IPE.
- Verbinden Sie ein Ende Ihres PicKit 3 mit Ihrem PC und das andere Ende mit Ihren ICSP-Pins auf der Perf-Karte.
- Stellen Sie eine Verbindung zu Ihrem PIC-Gerät her, indem Sie auf die Schaltfläche Verbinden klicken.
- Suchen Sie nach der Blink HEX-Datei und klicken Sie auf Programm.
Wenn alles wie geplant verläuft, sollte die Erfolgsmeldung auf dem Bildschirm angezeigt werden. Überprüfen Sie den Code und das Video unten für eine vollständige Demonstration und verwenden Sie im Zweifelsfall den Kommentarbereich.
Vielen Dank!!!
Treffen wir uns im nächsten Tutorial, wo wir mit mehr LEDs und einem Schalter spielen werden.