Inhaltsverzeichnis:
- Schritt 1: Was brauchen wir?
- Schritt 2: Hardwareverbindungen
- Schritt 3: Python-Software
- Schritt 4: Mikrocontroller-Software
- Schritt 5: Fazit
Video: PIC-MCU und serielle Python-Kommunikation - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Hallo Leute! In diesem Projekt werde ich versuchen, meine Experimente zur PIC-MCU und zur seriellen Python-Kommunikation zu erklären. Über das Internet gibt es viele Tutorials und Videos zur Kommunikation mit der PIC-MCU über ein virtuelles Terminal, was sehr nützlich ist. In meinem Hauptprojekt besteht jedoch eine der Anforderungen darin, eine serielle Kommunikation zwischen der PIC-MCU und Python herzustellen, was ich kein gutes Tutorial finden konnte. Also lasst uns anfangen:)
Schritt 1: Was brauchen wir?
Sehen wir uns also zunächst einmal an, was wir brauchen. Was die Hardware angeht:
- Sicherlich PIC-MCU, die in meinem Fall PIC16f877a ist (Sie benötigen diese Platine nicht. Dies dient dazu, einige schmutzige Verbindungen zu vereinfachen)
- USB-zu-TTL-Konverter zur Kommunikation mit der PIC-MCU über den USB-Port unter Verwendung von TX- und RX-Pins.
- MCU-Programmierer, in meinem Fall K150-Programmierer, aber Sie können PicKit 2, 3 oder etwas anderes verwenden.
- Und endlich ein Computer:)
Was die Software angeht:
- Eine IDE, um Python-Code zu schreiben, der in meinem Fall Pycharm ist, aber Sie können auch normale Python-IDE verwenden.
- Eine Umgebung zum Programmieren der MCU, die in meinem Fall MPLAB X IDE mit CCS C Compiler ist.
Schritt 2: Hardwareverbindungen
Im Bild beigefügte Hardware-Verbindungen sind zwischen PIC MCU und USB-TTL-Konverter wie folgt angegeben:
RC7 (RX) ------------- TXD
RC6 (TX) ------------- RXD
GND -------------- GND
Sie müssen den VCC-Pin des USB-TTL-Konverters nicht anschließen (wenn Sie möchten, können Sie dies jedoch tun). Diese 3 Anschlüsse reichen vollkommen aus.
Schritt 3: Python-Software
Beginnen wir damit, Software für die Python-Seite zu schreiben, die in unserem Fall der Sender ist, da sie den String an die MCU sendet.
import serial #import serial librarydata = '24' #Daten, die wir senden werden data = a+'\0' ser = serial. Serial('COM17', baudrate=9600, timeout=1) #mit dem Port verbinden ser.write(a.encode()) #sende die Daten
Zunächst wird die serielle Bibliothek importiert, um ihre Futures zu verwenden. Wir möchten eine Beispiel-String-Daten senden, um im MCU-Code zu bestätigen, dass wir sie akzeptiert haben. Ich möchte hier eines anmerken. Aus diesem Grund haben wir dem String '\0' hinzugefügt. Dies liegt daran, dass es auf der MCU-Seite unmöglich ist, den String vollständig zu lesen. Es wird Zeichen für Zeichen gelesen. Wir möchten also das Ende der Zeichenfolge kennen, um mit dem Lesen aufzuhören. Also fügen wir dem String '\0' hinzu, der das Ende des Strings anzeigt. Dann verbinden wir uns mit dem Port, der mit der MCU verbunden ist. Sie können diesen Port ermitteln, indem Sie im 'Geräte-Manager' suchen. Achten Sie also darauf, dass Sie sich auf demselben Port befinden. Schließlich senden wir die Daten an die MCU. ".encode()" sollte den Stringdaten hinzugefügt werden, um sie an den Empfänger senden zu können.
Schritt 4: Mikrocontroller-Software
Sehen wir uns also unseren Code für MCU an. Zuerst möchte ich Ihnen die "config.h"-Datei zeigen, die nicht benötigt wird, aber ich habe es der Einfachheit halber getan. Ändern Sie hier einfach die Frequenz Ihrer MCU.
#ifndef CONFIG_H#define CONFIG_H
#enthalten
#device ADC=16
#FUSES NOWDT //Kein Watchdog-Timer
#FUSES NOBROWNOUT //Kein Brownout-Reset #FUSES NOLVP //Keine Niederspannungs-Prgming, B3 (PIC16) oder B5 (PIC18) für E/A verwendet
#Verzögerung verwenden (Kristall=6000000)
Sehen wir uns nun den Hauptcode an:
#enthalten
#enthalten
#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)
#define LED_RED PIN_D0
Zeicheneingang; Zeichen cmp_="24"; Zeichenpuffer [3];
#int_rda
Void serial_communication_interrupt () {disable_interrupts (int_rda); unsigned int i = 0; inp = getc(); putc(inp); while(inp != '\0') { Puffer = inp; inp = getc(); putc(inp); i++; } }
Leere Haupt (Leere) {
set_tris_d(0x00); Ausgabe_d(0xFF); enable_interrupts(GLOBAL); while(1) { enable_interrupts(int_rda); if(strcmp(buffer, cmp_) == 0) output_low(LED_RED); sonst output_high (LED_RED); } }
Zu Beginn fügen wir eine String-Bibliothek hinzu, die uns bei String-Operationen behilflich sein wird, die in unserem Fall String-Vergleichsoperationen (strcmp) sind. Unser Zweck in diesem Code besteht also darin, die mit dem Pin D0 verbundene LED einzuschalten, wenn der übertragene Wert mit unserem angegebenen Wert übereinstimmt, der "cmp_" gleich "24" ist.
Zuerst aktivieren wir den Interrupt "rda", der einen Interrupt verursacht, wenn Daten übertragen werden.
Sehen wir uns zweitens das Innere von ISR (Interrupt Service Routine) an, das als "serial_communication_interrupt" bezeichnet wird. Im Inneren deaktivieren wir zunächst das Interrupt-Flag, um den empfangenen Wert zu lesen und einen weiteren Interrupt zu verursachen. Danach lesen wir die Zeichenkette Zeichen für Zeichen, bis wir '\0' erreichen. Beim Lesen innerhalb des Strings schreiben wir auch jedes Zeichen in den Puffer, um den empfangenen String zu erhalten.
Am Ende kommen wir noch einmal hinein während. Hier vergleichen wir unseren Pufferstring, der empfangen wird, und cmp_string, um zu sehen, ob wir den String richtig erhalten. Wenn sie gleich sind, schalte ich die LED ein, ansonsten schalte ich aus.*
* Im Code habe ich umgekehrt, weil mein Board die D-Port-Pin-Werte invertiert. Ändern Sie es in Ihrem Code in:
if(strcmp(buffer, cmp_) == 0) output_high(LED_RED);else output_low(LED_RED);
Kompilieren Sie es schließlich und laden Sie es auf Ihre MCU hoch und führen Sie dann den Code in Python aus. Sie sollten sehen, dass die LED eingeschaltet ist.
Schritt 5: Fazit
Wir haben eine Aufgabe erfolgreich abgeschlossen. Ich hoffe, dass es für Sie nützlich sein wird. Wenn Sie Fragen haben, zögern Sie bitte nicht zu fragen:) Bis zum nächsten Projekt.
Empfohlen:
So erstellen Sie Ihre erste einfache Software mit Python – wikiHow
So erstellen Sie Ihre erste einfache Software mit Python: Hallo, willkommen zu diesem Instructables. Hier werde ich erzählen, wie Sie Ihre eigene Software erstellen. Ja, wenn Sie eine Idee haben… aber wissen, wie Sie neue Dinge umsetzen können oder daran interessiert sind, Neues zu schaffen, dann ist es das Richtige für Sie
COVID19-Dashboard auf Weltkarte (mit Python) – wikiHow
COVID19-Dashboard auf der Weltkarte (mit Python): Ich weiß, dass fast alle von uns die meisten Informationen über COVID19 kennen , ich habe das Programm zum Github-Repository hinzugefügt: https://github.co
Experimente in der erweiterten Datenprotokollierung (mit Python): 11 Schritte
Experimente in der erweiterten Datenprotokollierung (mit Python): Es gibt viele Anleitungen zur Datenprotokollierung. Als ich also ein eigenes Protokollierungsprojekt erstellen wollte, habe ich mich bei einem Haufen umgesehen. Einige waren gut, andere nicht so sehr, also beschloss ich, einige der besseren Ideen aufzunehmen und meine eigene Bewerbung zu machen. Dieses Ergebnis
Einen Würfel mit Python würfeln – wikiHow
So würfeln Sie mit Python: Die folgenden Anweisungen zeigen Ihnen, wie Sie ein Python-Modul zum „Würfeln“erstellen. Dieses Modul generiert Zufallszahlen aus diesen computerisierten Würfeln. Ich werde Funktionen bereitstellen, die zum Erstellen des Moduls erforderlich sind und eine Beschreibung als
So erstellen Sie eine While-Schleife in Python – wikiHow
So erstellen Sie eine While-Schleife in Python: Es gibt Momente in der Programmierung, in denen Sie eine Reihe von Schritten wiederholen müssen, um ein Problem zu lösen. Mit einer while-Schleife können Sie einen Codeabschnitt durchlaufen, ohne wiederholten Code schreiben zu müssen. Beim Programmieren immer wieder den gleichen Code schreiben