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
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.
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.
>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.
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.
>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 :/
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.
Sebastian R. schrieb: > Wenn zwischen Controller und PC nur USB Ja, wenn. Das Medium zwischen MC und PC wird ja nirgends beschrieben.
>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
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.
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.
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?
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
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.
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
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.
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.
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]
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 ...
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
Rahul D. schrieb: > Zumindest lässt seine Herkunft das vermuten: Ach, das ist ein bisschen arg plump.
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...
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.