UART unter Python auslesen

  • Moin moin


    Um das schon mal am Anfang zu sagen : Ich bin ein totaler Neuling was den Raspberry Pi und das Programmieren in Python angeht....


    Mein Problem :


    Ich habe vor die UART Schnittstelle beim Pi zu benutzen, doch Ich habe mir mal ein Test-Code geschrieben der aber leider keine Werte liefert.


    Das Eingangssignal ist eine Schleife von 3 Byte, die ich auszugeben versuche. (Habe mittels Oszilloskop getestet ob auch wirklich was ankommt).


    Der Code läuft zwar Problemlos, doch gibt er keine Werte wieder :(


    Hat jemand ne Ahnung was ich Falsch mache ? :helpnew:



    Hier mein Code :


  • Was meinst du mit Rx und Tx gekreuzt?
    (Der Pi soll nichts senden... er soll nur ein bestehendes Signal empfangen)
    Und ist UART nicht normalerweise auf 5V Pegel genormt???

  • Hi,


    Was meinst du mit Rx und Tx gekreuzt?


    na die Tx-Leitung des "Senders" muss mit der Rx-Leitung des Empfängers (in diesem Fall Dein RPi) und vice versa verbunden werden ...



    ...
    Und ist UART nicht normalerweise auf 5V Pegel genormt???


    Nö, wo hast Du das denn her?
    Alle IOs des Raspi vertragen nur 3V3 ... notfalls Spannungsteiler oder Levelshifter verwenden, wenn Du länger Freude an Deinem RPi haben willst.


    cu,
    -ds-

  • Am Tx Pin hab ich gar nichts dran weil ich gar nicht vorhabe eine Antwort zu senden.


    Das mit den 3,3 V werde ich mal ausprobieren...
    Automatisch zusammengefügt:[hr]
    Hab mal nen Spannungsteiler vrogebaut: jetzt kommen die 3 Byte/sek. Impulse mit 3,3V.


    Aber ich bekomme immer noch kein Input angezeigt...
    Automatisch zusammengefügt:[hr]
    Ich hab jetzt mal versucht über Tx was auszugeben und über den Oszi zu Visualisieren:


    Es kommt scheinbar nichts raus :s


    Code
    1. import serial
    2. UART = serial.Serial("/dev/ttyAMA0", 4800)
    3. UART.write("0xFF")


    Wenn ich das Prog ausführe passiert nichts und ich muss es dann über strg+shift+c beenden.

    Edited once, last by Jinzo48 ().

  • Die quelle ist ein Steuergerät für eine Bogensport-Anzeige über RS232 und dann auf 0-5V (bzw. jetzt auf 3,3V)


    Aber Ich glaube langsam das irgendwelche Einstellungen bei meinem Pi nicht stimmen.
    Das ausgeben läuft nämlich auch nicht und wenn ich die Console über Uart wieder einschalten kann ich beim boot über den Oszi den Datenstrom sehen.

  • Und die Verkabelung passt jetzt ... also Rx->Tx und Tx->Rx ?
    Lass mal Dein Python-Programm aussen vor. Das ist eine weitere Fehlerquelle.
    Ruf mal minicom ( notfalls nachinstallieren ) auf und setz die Parameter passend ( /dev/ttyAMA0, 4800, 8N1 ) und schau mal, was da passiert ...


    Ach ja: Massen verbunden?

    cu,
    -ds-

  • Hast du ggf. einen getty Prozess auf dem UART laufen? Der ist laut Internet (auch die Forumssuche hier sollte dazu was hergeben) in der /etc/inittab konfiguriert, eine telnet ueber UART zu starten.

  • Ist das normal das wenn ich minicom starte die Tastatur nicht mehr geht?
    Wenn ich minicom richtig vertehe sollte ich doch damit die Eingaben über ttyAMA0 ausgeben.


    Zu deets: Wie kann ich denn überprüfen ob ein getty Prozess läuft.



    Ich bitte um Entschuldigung wenn ich dumme Fragen stelle. Ich versuche einfach nur da durchzusteigen...

  • Durch die Nutzung von ps zB.


    Code
    1. pi@pi:~$ ps aux | grep getty
    2. root 1055 0.0 0.0 4116 132 tty1 Ss+ Apr01 0:00 /sbin/agetty --noclear tty1 linux


    Automatisch zusammengefügt:[hr]
    Und "Tastatur nicht geht" ist ja nicht so riesig verwunderlich - du schickst die Zeichen ja ins Nirvana, was soll da beim druecken eines "a" passieren? Es gibt die Terminal-Einstellung "local echo" (oder so aehnlich), dann sieht man auch etwas auf dem Bildschirm.

  • Hi,
    das kommt Dir nur so vor, als ginge die Tastatur nicht mehr ;) ...


    Code
    1. pi@rpi-lcurr ~ $ minicom -D /dev/ttyAMA0


    falls Du eine Fehlermeldung bekommst ( z.B. permission denied ) sudo davor setzen


    dann CTRL+A o[ptions] siehe screenshot


    Mit CTRL+A q[uit] beenden.


    -> Hier <- ist zudem was zum Thema minicom nachzulesen ...


    Viel wichtiger: nochmal ... hast Du die Massen verbunden?


    cu,
    -ds-

  • Ins minicom komme ich rein. Aber wie gesagt weder strg+a+z noch q funktioniert.
    ich muss den Pi immer neu starten um wieder zurück zu kommen...


    Und ja die Massen sind verbunden.



    Danke erstmal für eure Hilfe, bin ab jetzt bis heute abend nicht mehr am Rechner. Wäre super nett wenn ihr heute abend die Zeit finden könntet mir zu helfen.

  • Vielleicht noch als weiteren Test:
    Rx und Tx des Raspi verbinden, minicom wie oben ( -D /dev/ttyAMA0 ) aufrufen.
    Jetzt sollten alle eingetippten Zeichen zurückkommen.
    Und wenn /dev/ttyAMA0 als serielle Konsole aktiviert sein sollte, müsste eine login-Aufforderung erscheinen ... (vorher vielleicht ein-, zweimal ENTER drücken)
    Wenn das auch nicht funktioniert, ist was anderes faul.


    cu,
    -ds-

  • Dein Gerät (Bogensport-Anzeige) sendet über TX (Transmit) und der Pi muss das über RX (Receive) empfangen.


    Wenn du zuvor nicht sichergestellt hast das dein Gerät (Bogensport-Anzeige) wirklich nur einen 3V3 Pegel auf TX hat und das direkt auf den Pi gegeben hast, könnte nun dein Pi beschädigt sein, da alle I/O's nur max 3V3 verkraften und ungebuffert direkt vom SoC kommen. Wenn dein Gerät (Bogensport-Anzeige) ein 5V Pegel hat brauchst du einen Levelshifter.

  • Hi meigrafd,



    ... nur max 3V3 verkraften ...


    hatte wir -> bereits im ersten Posting <- schon. ;)


    Und angekommen ist es wohl auch:


    Die quelle ist ein Steuergerät für eine Bogensport-Anzeige über RS232 und dann auf 0-5V (bzw. jetzt auf 3,3V)
    ...


    cu,
    -ds-

  • Wenn dein Gerät (Bogensport-Anzeige) ein 5V Pegel hat brauchst du einen Levelshifter.


    Momente mal! Wenn das Gerät eine RS232 hat, dann hat die auch invertierten Pegel mit -3..-12V für high und +3..+12V für low. (RS232)


    Ohne invertierenden RS232-Wandler mit MAX232 oder MAX3232 (3.3V kombatibel) geht da gar nichts. Ein Levelshifter reicht da nicht.

  • ...der Punkt ist, wenn er das zuvor nicht beachtet aber bereits angeschlossen hat => ist sein Pi jetzt geschrottet.
    Und da er schreibt er hätte mit python und minicom bereits rumprobiert glaub ich das sein Pi bereits beschädigt ist. Es spielt dann keine Rolle mehr welche minicom Einstellungen etc verwendet werden... Vor allem dann wenn das was Timm schreibt zutrifft: 12V wird der Pi keinesfall mögen.

  • Das mit dem Rs232 Wandler ist gar nicht das Problem... Mir war von Anfang an klar dass der Pi keine 12V verträgt. und weil ich bei den Mikrocontrollern mit denen ich gearbeitet habe, beim an der Schnittstelle einen Pegel von 5V hatte habe ich das mit dem Pi auch gemacht.
    Und nach meinem Wissen kann der Pi das Problemlos verkraften. Und wie schon gesagt : wenn ich den Oszi an Tx klemme und den Pi (mit aktivierter serieller Schnittstelle) starte, kann ich den "Bytestrom" am Oszi sehen. => Volglich glaube ich nicht das ich meinen Pi gehimmelt habe.


    Um auf den Beitrag von Dreamshader zurück zu kommen :


    (Rx und Tx verbinden, minicom starten und iwas eintippen)
    Ich kann nichts eintippen, der Pi schluckt die Tastatur nicht mehr.


    Ich werde es mal übe Putty über SSH versuchen.

  • -12V/+12V ist/war doch das berühmt-berüchtigte V24 Teil, wenn ich mich nicht irre.
    Ist afaik - mal abgesehen von Industrie-Anlagen, weil da oft mit 24V gearbeitet wird - mittlerweile doch auch eber unüblich.
    Der Regelfall ist m.E. TTL-Level 0 ... +5V


    Ausserdem hatte er doch gemessen ... vorher 0 oder 5V, jetzt 0 oder 3V3 ... also alles im grünen Bereich.
    Was jetzt nicht heissen soll, dass es die IOs mit den ersten Versuchen nicht doch zerlegt hat.
    Deshalb ja der Test mit dem Brücken der Pins :)


    Alles gut ;)
    -ds-


    //EDIT:
    ------------


    ... Und nach meinem Wissen kann der Pi das Problemlos verkraften.
    ...


    woher hast Du denn die Weisheit? :s
    Ich hab' bisher überall nur gelesen, dass die IOs nicht 5V-tolerant sind.



    ...
    (Rx und Tx verbinden, minicom starten und iwas eintippen)
    Ich kann nichts eintippen, der Pi schluckt die Tastatur nicht mehr.
    ...


    wenn das nicht geht, dann sehe ich schwarz ... egal ob Dein Oszi einen Datenstrom anzeigt oder nicht.
    Kann ja sein, dass der Empfänger-Pin ( und das ist ja auch der, der den Saft abbekommen hat ) hinüber ist. Dann sendet der brav ( weil der Tx-Pin ja noch ok ist ) ... nur der Rx ist halt hinüber ( weil der vermutlich die 5V nicht überlebt hat).




    ...
    Ich werde es mal übe Putty über SSH versuchen.


    Und was versprichst Du Dir davon?


    cu,
    -ds-