Mikrocontroller mit Python auswerten

OP #7727330
Lesenswert?

Guten Tag Leute,

Ich habe derzeit ein Programm am Laufen und gehe irgendwie nicht voran. Die Grundidee ist ein Mikrocontroller(STM32F723IEK6), der die Werten von 4 ADCs einliest und auf 1 DAC ausgibt, zu programmieren. Erstmal easy, habe mit STMCubeIDE programmiert und schon die Werte auf HTerm angezeigt bekommen. Jetzt muss ich das alles mit Python (Spyder) anzeigen lassen. Das Grundprogramm habe ich für ein Signal, es muss nur auf 4 erweitert werden (Pulse- Echo und Doppler Messungen können ignoriert werden). Nun aber wenn es schon erweitert ist, bekomme ich irgendwie ein Plot von eine Linie auf 0. Die Port COM6 muss eigentlich einwandfrei hier verbunden werden können, denn es bei HTerm auch funktionierte. Die Baudrate, Parität usw. stimmen überein.

Hat jemand von euch schon mal sowas ähnliches gemacht? Bzw. habt ihr Ideen woran es noch liegen kann?

Danke im Voraus. Viele Grüße, Hannah

Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #7727342
Lesenswert?

Hanna schrieb:

Bzw. habt ihr Ideen woran es noch liegen kann?

Schreib doch mal, was du von deinem Programm erwartes, was stattdessen passiert und wie du das feststellst.

Das Grundprogramm habe ich für ein Signal

Und das Grundprogramm funktiontiert? Wie sieht dieses Grundprogramm aus?

Nun aber wenn es schon erweitert ist

Was hast du geändert?

es muss nur auf 4 erweitert werden

Hört sich ein wenig an wie: "Einen Ball kann ich schon jonglieren. Ich muss das jetzt nur mit 4 machen!"

habt ihr Ideen

Ich würde das Problem einfach mal auf einen "Dreizeiler" reduzieren und nur die Daten korrekt zu empfangen. Denn es hat noch nie funktioniert, ein Programm komplett fertig zu schreiben und zu erwarten, dass es dann auf Anhieb läuft.

OP #7727349
Lesenswert?

Schreib doch mal, was du von deinem Programm erwartes, was stattdessen passiert und wie du das feststellst.

ich habe eine ADC Eingang mit 3.3V angeschlossen und es einfach so laufen gelassen. Jetzt will ich, dass diese Werte als Signale sich anzeigen lassen. Also grob gesagt, die Werte im Bild als Plot darstellen

Und das Grundprogramm funktiontiert? Wie sieht dieses Grundprogramm aus? Ja, es funktioniert, aber wie gesagt nur für ein ADC. Ich habe es auch als Datei eingefügt

Ich würde das Problem einfach mal auf einen "Dreizeiler" reduzieren und nur die Daten korrekt zu empfangen. Yep, bin jetzt dabei den Code manuell mit Console durchzugehen. Danach reduziere ich es maximal und versuche neu.

Angehängte Dateien:
#7727740
Lesenswert?

Hanna schrieb:

Das Grundprogramm habe ich für ein Signal, es muss nur auf 4 erweitert werden (Pulse- Echo und Doppler Messungen können ignoriert werden).

Du hast also Probleme, die Daten von der Schnittstelle mit python einzulesen, oder was ist die Frage? Mein Grund / Testprogramm sähe so aus, dass ich die Schnittstelle öffnen würde und mir die empfangenen Daten anzeigen ließe.

Der hTerm-Test beweist doch eigentlich nur, dass dein STM-Bord funktioniert, indem es Daten (in einem geheimen Protokollformat) liefert.

Gast #7727794
Lesenswert?

Rahul D. schrieb:

Der hTerm-Test beweist doch eigentlich nur, dass dein STM-Bord funktioniert, indem es Daten (in einem geheimen Protokollformat) liefert.

Nächster Schritt wäre die Kontrolle, ob diese Daten auch richtig sind.

Um das zu vereinfachen, könnte man auf dem STM-Board ein Programm starten, das bekannte simulierte Daten ausgibt. Dann ist klar, was am PC ankommen muss.

OP #7727802
Lesenswert?

Monk schrieb:

Um das zu vereinfachen, könnte man auf dem STM-Board ein Programm starten, das bekannte simulierte Daten ausgibt. Dann ist klar, was am PC ankommen muss.

ich will erstmal mindestens etwas bekommen. Zurzeit sieht mein Plot immer noch wie oben aus, also 0, obwohl da sicher Daten hin- und hergeschickt wurden. Scheinbar habe ich was in dem Python Skript übersehen oder verpasst. Wie wahrscheinlich ist es dass die COM-Port nicht richtig konfiguriert bzw. angesprochen werden kann?

Gast #7727808
Lesenswert?

Hanna schrieb:

Scheinbar habe ich was in dem Python Skript übersehen oder verpasst. Wie wahrscheinlich ist es dass die COM-Port nicht richtig konfiguriert bzw. angesprochen werden kann?

Dann schreibe mal ein einfaches Script ohne grafische Ausgabe, dass einfach nur die Empfangenen Daten im Textmodus ausgibt. Dabei kannst du dich leichter auf genau die Teile konzentrieren, die du verdächtigt hast.

OP #7727813
Lesenswert?

Monk schrieb:

Dann schreibe mal ein einfaches Script ohne grafische Ausgabe, dass einfach nur die Empfangenen Daten im Textmodus ausgibt. Dabei kannst du dich leichter auf genau die Teile konzentrieren, die du verdächtigt hast.

in Textmodus bekomme ich die Daten mit Console nebenbei auch, es geht nur um die noch als Graph darzustellen

#7728176
Lesenswert?

Hanna schrieb:

Bleibt nur das Python Skript, da bin ich jetzt lost.

Dann setz halt Mal ein paar Breakpoints.

Wird die serielle Schnittstelle geöffnet? Wird der Empfangs-Callback aufgerufen? Passen die Daten die im Callback empfangen wurden? Werden diese richtig konvertiert? Landen die Daten in deinem Chart? Muss man das noch irgendwie aktualisieren damit es angezeigt wird?

Einfach Mal nacheinander abarbeiten...

Gast #7728209
Lesenswert?

Hanna schrieb:

in Textmodus bekomme ich die Daten mit Console nebenbei auch, es geht nur um die noch als Graph darzustellen

Was soll das bedeuten? Im Skript werden die Daten nicht ausgeben. Die ist schon klar, das immer nur 1 Programm auf die Schnittstelle zugreifen kann?

Als erstes lass dir doch mal die Daten in der Methode run von DAQThread ausgeben.

Gast #7728222
Lesenswert?

Monk schrieb:

Scheinbar habe ich was in dem Python Skript übersehen

Dann schreibe mal ein einfaches Script ohne grafische Ausgabe, dass einfach nur die Empfangenen Daten im Textmodus ausgibt.

Hanna schrieb:

in Textmodus bekomme ich die Daten mit Console nebenbei auch, es geht nur um die noch als Graph darzustellen

Re D. schrieb:

Was soll das bedeuten?

Ich verstehe das so, dass Hanna das Python Script inzwischen geändert hat, so dass es Ausgaben in die Console schreibt. Falls nicht, mache das mal, Hanna.

#7728240
Lesenswert?

Hanna schrieb:

ich will erstmal mindestens etwas bekommen. [...]

So ganz grundsätzlich macht Dein bisheriges Programm ja mehrere Dinge: es sollen Daten von der Seriellen gelesen, in einen Pandas-Dateframe geladen, weiterhin ein GUI aufgebaut und am Ende ein Plot aus dem Dataframe darin angezeigt werden. Das Problem, daß Du nichts siehst, kann da an mehreren Stellen liegen: beim Einlesen der Daten, beim Laden in den Dataframe, beim Rendern des Plot... und dazwischen werden auch noch die binären Strukturen dekodiert. Bisher siehst Du jedoch lediglich Nullen, was möglicherweise an "np.zeros()" liegen könnte, aber nicht muß.

Insgesamt muß ich allerdings bedauerlicherweise sagen, daß ich den Code mit all den "global"s irgendwie nicht so richtig elegant finde, IMHO gehören die in ein Configfile. Aber auch wenn Du diese Dinge nicht in eine Konfiguration packen möchtest, empfehle ich, das Programm so umzuschreiben, daß Du diese ganzen "global"s nicht mehr brauchst.

So ganz grundsätzlich würde ich Dir nun empfehlen, den vorhandenen Code erst einmal Code sein zu lassen, und zunächst ein kleines Kommandozeilenprogramm zu schreiben, das die Daten von der Seriellen liest und ausgibt -- ohne Pandas, GUI, und Plotting. Wenn dieses Programm erst einmal läuft und Daten ausgibt, dann weißt Du zumindest, daß (und wie) Du die Daten empfängst. Erst wenn der Datenempfang funktioniert, dann wäre der nächste Schritt, die Daten in einen Pandas-Dataframe zu laden und ihn auszugeben. Wenn das klappt, kannst Du die anderen Dinge angehen: GUI aufbauen, DataFrame plotten, und so weiter.

Viel Spaß, Glück und Erfolg bei Deinem Projekt!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren