- Vorbereitungen für die Programmierung:
- Erstellen eines neuen Projekts mit MPLAB-X:
- Kennenlernen der Konfigurationsregister:
- Festlegen der Konfigurationsbits in MPLAB-X:
- Programmieren des PIC zum Blinken einer LED:
- Schaltplan und Proteus-Simulation:
Dies ist das zweite Tutorial unserer PIC Tutorial-Reihe. In unserem vorherigen Tutorial Erste Schritte mit PIC Microcontroller: Einführung in PIC und MPLABX haben wir die grundlegenden Dinge über unseren PIC-Mikrocontroller gelernt, die erforderliche Software installiert und einen neuen PicKit 3-Programmierer gekauft, den wir in Kürze verwenden werden. Jetzt können wir mit unserem ersten LED-Blinkprogramm mit dem PIC16F877A beginnen. In diesem Tutorial erfahren Sie auch mehr über Konfigurationsregister.
In diesem Tutorial wird davon ausgegangen, dass Sie die erforderliche Software auf Ihrem Computer installiert haben und einige gute Grundlagen zur PIC-MCU kennen. Wenn nicht, kehren Sie bitte zum vorherigen Tutorial zurück und beginnen Sie von dort aus.
Vorbereitungen für die Programmierung:
Da wir uns für den PIC16F877A entschieden haben, können wir mit dem XC8-Compiler mit dem Datenblatt beginnen. Ich empfehle jedem, das PIC16F877A-Datenblatt und das XC8-Compiler-Handbuch herunterzuladen, da wir im Verlauf unseres Tutorials häufig darauf verweisen werden. Es ist immer eine gute Praxis, das vollständige Datenblatt einer MCU zu lesen, bevor wir mit der Programmierung beginnen.
Bevor wir unser MPLAB-X öffnen und mit der Programmierung beginnen, müssen einige grundlegende Dinge beachtet werden. Wie auch immer, da dies unser erstes Programm ist, möchte ich Sie nicht mit viel Theorie ansprechen, aber wir werden hier und da aufhören, während wir programmieren, und ich werde Ihnen die Dinge als solche erklären. Wenn Sie nicht genug Zeit haben, um all dies durchzulesen, werfen Sie einen Blick darauf und springen Sie in das Video unten auf der Seite.
Erstellen eines neuen Projekts mit MPLAB-X:
Schritt 1: Starten Sie die MPLAB-X-IDE, die wir in der vorherigen Klasse installiert haben. Nach dem Laden sollte sie ungefähr so aussehen.
Schritt 2: Klicken Sie auf Dateien -> Neues Projekt oder verwenden Sie den Hotkey Strg + Umschalt + N. Sie erhalten das folgende POP-UP, aus dem Sie Standalone-Projekt auswählen und auf Weiter klicken müssen.
Schritt 3: Jetzt müssen wir unser Gerät für das Projekt auswählen. Geben Sie daher im Dropdown-Abschnitt Gerät auswählen den Wert PIC16F877A ein. Sobald dies erledigt ist, sollte es so sein und dann auf Weiter klicken.
Schritt 4: Auf der nächsten Seite können wir das Tool für unser Projekt auswählen. Dies wäre PicKit 3 für unser Projekt. Wählen Sie PicKit 3 und klicken Sie auf Weiter
Schritt 5: Auf der nächsten Seite werden Sie aufgefordert, den Compiler auszuwählen, den XC8-Compiler auszuwählen und auf Weiter zu klicken.
Schritt 6: Auf dieser Seite müssen wir unser Projekt benennen und den Ort auswählen, an dem das Projekt gespeichert werden soll. Ich habe dieses Projekt als Blink bezeichnet und auf meinem Desktop gespeichert. Sie können es auf Ihre bevorzugte Weise benennen und speichern. Unser Projekt wird als Ordner mit der Erweiterung .X gespeichert, die direkt von MAPLB-X gestartet werden kann. Klicken Sie auf Fertig stellen, wenn Sie fertig sind.
Schritt 7: Das war's !!! Unser Projekt wurde erstellt. Das Fenster ganz links zeigt den Projektnamen (Here Blink). Klicken Sie darauf, damit wir alle darin enthaltenen Verzeichnisse anzeigen können.
Um mit der Programmierung zu beginnen, müssen wir eine C-Hauptdatei in unserem Quelldateiverzeichnis hinzufügen. Klicken Sie dazu einfach mit der rechten Maustaste auf die Quelldatei und wählen Sie Neu -> C Hauptdatei, wie in der Abbildung unten gezeigt.
Schritt 8: Das folgende Dialogfeld wird angezeigt, in dem der Name der C-Datei angegeben werden muss. Ich habe wieder in Blink benannt, aber die Wahl bleibt Ihnen überlassen. Benennen Sie es in der Spalte Dateiname und klicken Sie auf Fertig stellen.
Schritt 9: Sobald die C-Hauptdatei erstellt wurde, öffnet die IDE sie für uns mit einigen Standardcodes, wie unten gezeigt.
Schritt 10: Jetzt können wir mit der Programmierung unseres Codes in der C-Hauptdatei beginnen. Der Standardcode wird in unseren Tutorials nicht verwendet. Löschen wir sie also vollständig.
Kennenlernen der Konfigurationsregister:
Bevor wir mit der Programmierung eines Mikrocontrollers beginnen, müssen wir dessen Konfigurationsregister kennen.
Was sind diese Konfigurationsregister, wie und warum sollten wir sie einstellen?
Die PIC-Geräte haben mehrere Positionen, die die Konfigurationsbits oder -sicherungen enthalten. Diese Bits spezifizieren grundlegende Gerätefunktionen wie den Oszillatormodus, den Watchdog-Timer, den Programmiermodus und den Codeschutz. Diese Bits müssen korrekt gesetzt sein, um den Code auszuführen, da wir sonst ein nicht laufendes Gerät haben . Daher ist es sehr wichtig, diese Konfigurationsregister zu kennen, bevor wir mit unserem Blink-Programm beginnen.
Um diese Konfigurationsregister verwenden zu können, müssen wir das Datenblatt lesen und verstehen, welche Arten von Konfigurationsbits verfügbar sind und welche Funktionen sie haben. Diese Bits können basierend auf unseren Programmieranforderungen unter Verwendung eines Konfigurationspragmas gesetzt oder zurückgesetzt werden.
Das Pragma hat die folgenden Formen.
#pragma config settings = state-value #pragma config register = value
Dabei ist die Einstellung ein Konfigurationseinstellungsdeskriptor, z. B. WDT, und der Status eine Textbeschreibung des gewünschten Status, z. B. AUS. Betrachten Sie die folgenden Beispiele.
#pragma config WDT = ON // Watchdog-Timer einschalten #pragma config WDTPS = 0x1A // Geben Sie den Postscale-Wert des Timers an
ENTSPANNEN!!….. ENTSPANNEN !!…. ENTSPANNEN !!…...
Ich weiß, es ist uns zu viel in den Kopf gegangen und das Setzen dieser Konfigurationsbits scheint für einen Neuling etwas schwierig zu sein !! Aber es ist trotzig nicht mit unserem MPLAB-X.
Festlegen der Konfigurationsbits in MPLAB-X:
Microchip hat diesen anstrengenden Prozess durch die Verwendung grafischer Darstellungen der verschiedenen Arten von Konfigurationsbits erheblich vereinfacht. Um sie jetzt einzustellen, müssen wir einfach die folgenden Schritte ausführen.
Schritt 1: Klicken Sie auf Fenster -> PIC-Speicheransicht -> Konfigurationsbits. Wie nachfolgend dargestellt.
Schritt 2: Dies sollte das Fenster "Konfigurationsbits" unten in unserer IDE öffnen, wie unten gezeigt. Dies ist der Ort, an dem wir jedes der Konfigurationsbits gemäß unseren Anforderungen setzen können. Ich werde jedes der Bits und seinen Zweck erklären, während wir die Schritte durchlaufen.
Schritt 3: Das erste Bit ist das Oszillatorauswahlbit.
Der PIC16F87XA kann in vier verschiedenen Oszillatormodi betrieben werden. Diese vier Modi können durch Programmieren von zwei Konfigurationsbits (FOSC1 und FOSC0) ausgewählt werden:
- LP Low-Power-Kristall
- XT Kristall / Resonator
- HS Hochgeschwindigkeitskristall / Resonator
- RC Widerstand / Kondensator
Für unsere Projekte verwenden wir einen 20-MHz-Osc, daher müssen wir den HS aus der Dropdown-Box auswählen.
Schritt 4: Das nächste Bit ist unser Aktivierungsbit für den Watchdog-Timer.
Der Watchdog-Timer ist ein frei laufender On-Chip-RC-Oszillator, für den keine externen Komponenten erforderlich sind. Dieser RC-Oszillator ist vom RC-Oszillator des OSC1 / CLKI-Pins getrennt. Dies bedeutet, dass der WDT auch dann ausgeführt wird, wenn die Uhr an den OSC1 / CLKI- und OSC2 / CLKO-Pins des Geräts gestoppt wurde. Während des normalen Betriebs erzeugt ein WDT-Timeout einen Geräte-Reset (Watchdog Timer Reset). Das TO-Bit im Statusregister wird nach einer Zeitüberschreitung des Watchdog-Timers gelöscht. Wenn der Timer in unserer Software-Codierung nicht gelöscht wird, wird die gesamte MCU bei jedem WDT-Timer-Überlauf zurückgesetzt. Der WDT kann durch Löschen des Konfigurationsbits dauerhaft deaktiviert werden.
Wir verwenden WDT nicht in unserem Programm. Lassen Sie es uns also löschen, indem Sie im Dropdown-Feld AUS auswählen.
Schritt 5: Das nächste Bit ist das Einschalt-Timer-Bit.
Der Einschalt-Timer bietet eine feste nominelle Zeitüberschreitung von 72 ms beim Einschalten nur über das POR. Der Powerup-Timer arbeitet mit einem internen RC-Oszillator. Der Chip bleibt zurückgesetzt, solange die PWRT aktiv ist. Die Zeitverzögerung des PWRT ermöglicht es VDD, auf ein akzeptables Niveau anzusteigen. Ein Konfigurationsbit wird bereitgestellt, um die PWRT zu aktivieren oder zu deaktivieren.
Wir werden solche Verzögerungen in unserem Programm nicht brauchen, also lassen Sie uns das auch ausschalten.
Schritt 6: Das nächste Bit ist die Niederspannungsprogrammierung.
Das LVP-Bit des Konfigurationsworts ermöglicht die Niederspannungs-ICSP-Programmierung. In diesem Modus kann der Mikrocontroller über ICSP mit einer VDD-Quelle im Betriebsspannungsbereich programmiert werden. Dies bedeutet nur, dass VPP nicht zu VIHH gebracht werden muss, sondern bei der normalen Betriebsspannung belassen werden kann. In diesem Modus ist der RB3 / PGM-Pin der Programmierfunktion zugeordnet und ist kein Allzweck-E / A-Pin mehr. Während der Programmierung wird VDD an den MCLR-Pin angelegt. Um in den Programmiermodus zu gelangen, muss VDD an den RB3 / PGM angelegt werden, sofern das LVP-Bit gesetzt ist.
Schalten wir LVP aus, damit wir RB3 als E / A-Pin verwenden können. Dazu einfach diesen drehen OFF die Drop - Down - Box verwenden.
Schritt 7: Die nächsten Bits sind EEPROM- und Programmspeicher-Schutzbits. Wenn dieses Bit aktiviert ist, wird nach dem Programmieren der MCU niemand unser Programm von der Hardware abrufen. Aber jetzt lassen wir alle drei ausgeschaltet.
Sobald die Einstellungen wie angewiesen vorgenommen wurden, sollte das Dialogfeld ungefähr so aussehen.
Schritt 8: Klicken Sie nun auf Quellcode für Ausgabe generieren. Unser Code wird jetzt generiert. Kopieren Sie ihn einfach zusammen mit der Header-Datei und fügen Sie ihn in unsere Blink.c C-Datei ein, wie unten gezeigt.
Damit ist unsere Konfigurationsarbeit erledigt. Wir können diese Konfiguration für alle unsere Projekte haben. Aber wenn Sie interessiert sind, können Sie später mit ihnen herumspielen.
Programmieren des PIC zum Blinken einer LED:
In diesem Programm verwenden wir unseren PIC-Mikrocontroller, um eine an einen E / A-Pin angeschlossene LED zu blinken. Werfen wir einen Blick auf die verschiedenen E / A-Pins, die auf unserem PIC16F877A verfügbar sind.
Wie oben gezeigt, verfügt der PIC16F877 über 5 grundlegende Eingangs- / Ausgangsanschlüsse. Sie werden normalerweise mit PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) und PORT E (RE) bezeichnet. Diese Ports werden für die Eingabe / Ausgabe-Schnittstelle verwendet. In dieser Steuerung ist "PORT A" nur 6 Bit breit (RA-0 bis RA-5), "PORT B", "PORT C", "PORT D" sind nur 8 Bit breit (RB-0 bis RB-7), RC-0 bis RC-7, RD-0 bis RD-7), ”PORT E” ist nur 3 Bit breit (RE-0 bis RE-2).
Alle diese Ports sind bidirektional. Die Richtung des Ports wird mithilfe von TRIS (X) -Registern gesteuert (TRIS A zum Einstellen der Richtung von PORT-A, TRIS B zum Einstellen der Richtung von PORT-B usw.). Durch Setzen eines TRIS (X) -Bits '1' wird das entsprechende PORT (X) -Bit als Eingabe gesetzt. Durch Löschen eines TRIS (X) -Bits '0' wird das entsprechende PORT (X) -Bit als Ausgabe gesetzt.
Für unser Projekt müssen wir den Pin RB3 von PORT B als Ausgang verwenden, damit unsere LED daran angeschlossen werden kann. Hier ist der Code für das Blinken der LED mit dem PIC-Mikrocontroller:
#einschließen
Zuerst haben wir die externe Kristallfrequenz mit #define _XTAL_FREQ 20000000 angegeben. Dann haben wir in der Funktion void main () unsere MCU angewiesen, den RB3 als Ausgangspin (TRISB = 0X00;) zu verwenden . Dann endlich eine unendliche während Schleife so verwendet wird, dass die LED für immer geht auf zu blinken. Um eine LED zu blinken, müssen wir sie einfach mit einer merklichen Verzögerung ein- und ausschalten.
Erstellen Sie nach Abschluss der Codierung das Projekt mit dem Befehl Ausführen -> Hauptprojekt erstellen. Dies sollte Ihr Programm kompilieren. Wenn alles in Ordnung ist (wie es sein sollte), zeigt eine Ausgabekonsole am unteren Bildschirmrand die Meldung BUILD SUCCESSFUL an, wie in der folgenden Abbildung dargestellt.
Schaltplan und Proteus-Simulation:
Sobald wir ein Projekt erstellt haben und die Erstellung erfolgreich war, wurde im Hintergrund unserer IDE eine HEX-Datei generiert. Diese HEX-Datei befindet sich im folgenden Verzeichnis
Es kann für Sie variieren, wenn Sie an einem anderen Ort gespeichert haben.
Lassen Sie uns nun Proteus, das wir zuvor installiert haben, schnell öffnen und Schaltpläne für dieses Projekt erstellen. Wir werden nicht erklären, wie dies außerhalb des Rahmens dieses Projekts zu tun ist. Aber keine Sorge, es wird im Video unten erklärt. Sobald Sie den Anweisungen folgen und die Schaltpläne erstellen, sollte sie ungefähr so aussehen
Um die Ausgabe zu simulieren, klicken Sie nach dem Laden der Hex-Datei auf die Wiedergabetaste in der unteren linken Ecke des Bildschirms. Die an RB3 der MCU angeschlossene LED sollte blinken. Wenn Sie ein Problem haben, schauen Sie sich bitte das Video an. Wenn es immer noch nicht behoben ist, verwenden Sie den Kommentarbereich, um Hilfe zu erhalten.
Jetzt haben wir unser erstes Projekt mit dem PIC-Mikrocontroller durchgeführt und die Ausgabe mit einer Simulationssoftware überprüft. Gehen Sie mit dem Programm herum und beobachten Sie die Ergebnisse. Bis wir uns bei unserem nächsten Projekt treffen.
Ohh warte !!
In unserem nächsten Projekt werden wir lernen, wie dies auf einer tatsächlichen Hardware funktioniert. Dafür benötigen wir die folgenden Tools, um sie bereit zu halten. Bis dahin HAPPY LEARNING !!
- PicKit 3
- PIC16F877A IC
- 40-poliger IC-Halter
- Perf Board
- 20 MHz Crystal OSC
- Weibliche und männliche Bergstickstifte
- 33pf Kondensator - 2Nos
- 680 Ohm Widerstand
- LED jeder Farbe
- Lötkit.