Forum: Mikrocontroller und Digitale Elektronik Mikrocontroller mit Python auswerten


von Hanna (hannah_66)


Angehängte Dateien:

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

: Bearbeitet durch User
von G. K. (zumsel)


Lesenswert?

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

Schau mal nach XON/XOFF bzw. HW-Handshake oder das Ding wartet auf 
DTR/CD.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Hanna (hannah_66)


Angehängte Dateien:

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Statt der exotischen Baudrate von 1.000.000 Baud nimm doch mal einen 
Standard, wie z.B. 921.600 Baud. Möglicherweise erlaubt dein Python 
solche aussergewöhnlichen Baudraten nicht und es kommt nur ein Byte 
sauber durch.

von Hanna (hannah_66)


Lesenswert?

>Statt der exotischen Baudrate von 1.000.000 Baud nimm doch mal einen
Standard, wie z.B. 921.600 Baud.

Habe auch mit anderen Baudrate versucht, ändert nichts :/

von Sebastian R. (sebastian_r569)


Lesenswert?

Hanna schrieb:
> Habe auch mit anderen Baudrate versucht, ändert nichts :/

Wenn zwischen Controller und PC nur USB und an keiner Stelle RS232 oder 
TTL-UART stattfindet, ist die Baudrate auch egal. Die Daten kommen in 
USB-Frames, da gibt's keine Baudrate.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sebastian R. schrieb:
> Wenn zwischen Controller und PC nur USB

Ja, wenn. Das Medium zwischen MC und PC wird ja nirgends beschrieben.

von Hanna (hannah_66)


Lesenswert?

>Ja, wenn. Das Medium zwischen MC und PC wird ja nirgends beschrieben.
Stimmt, war mein Fehler, sorry. Der Controller und PC sind nur mit USB 
verbunden

von Rahul D. (rahul)


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.

von Monk (roehrmond)


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.

von Hanna (hannah_66)


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?

von Hanna (hannah_66)


Lesenswert?

Rahul D. schrieb:
> Du hast also Probleme, die Daten von der Schnittstelle mit python
> einzulesen, oder was ist die Frage?

Ja, genau. Ich vermute im Skript stimmt was nicht bzw. ist etwas nicht 
dran, denn andere Gründen fallen weg, wenn es mit derselben 
Schnittstelle und Einstellungen schon in HTerm funktioniert

von Monk (roehrmond)


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.

von Hanna (hannah_66)


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

von Monk (roehrmond)


Lesenswert?

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

Dann kann es nicht an der Konfiguration des COM Portes liegen, denke 
ich.

von Hanna (hannah_66)


Lesenswert?

Monk schrieb:
> Dann kann es nicht an der Konfiguration des COM Portes liegen, denke
> ich.

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

von Rahul D. (rahul)


Lesenswert?

Hanna schrieb:
> Sehe ich ähnlich. Bleibt nur das Python Skript, da bin ich jetzt lost.

Demnach ist das Programm nicht von dir.
Viel Spaß mit der Codeanalyse!
[Offtopic]
Ich mag weder python, noch Programme ohne sinnvolle Kommentare, noch 
python-Programme ohne sinnvolle Kommentare.
[/Offtopic]

von Harald K. (kirnbichler)


Lesenswert?

Rahul D. schrieb:
> Ich mag weder ...

Da wirst Du Dich aber "boomer"-Vorwürfen aussetzen. Denn Python ist ja 
der heilige heiße Scheiß, Python hat einen CoC, und überhaupt ...

von Rahul D. (rahul)


Lesenswert?

Harald K. schrieb:
> Da wirst Du Dich aber "boomer"-Vorwürfen aussetzen. Denn Python ist ja
> der heilige heiße Scheiß, Python hat einen CoC, und überhaupt ...

Und der Entwickler war definitiv bekifft, als er sich die Sprache 
ausdachte.
Zumindest lässt seine Herkunft das vermuten:
https://de.wikipedia.org/wiki/Guido_van_Rossum

von Harald K. (kirnbichler)


Lesenswert?

Rahul D. schrieb:
> Zumindest lässt seine Herkunft das vermuten:

Ach, das ist ein bisschen arg plump.

von N. M. (mani)


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...

von Re D. (re_d228)


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.

von Monk (roehrmond)


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.

: Bearbeitet durch User
von Ein T. (ein_typ)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.