Mehrere Serielle Schnittstellen

  • Guten Tag,
    Ich hab einen raspberry pi Modell B und möchte wissen ob ich mehr als nur die eine Serielle Schnittstelle habe oder per Software erzeugen kann.


    Folgender Hintergrund :
    Ich habe vereinfacht gesagt zwei Arduino Stränge, auf dem einen Strang lauscht der raspberry nur was die Arduinos ihm sagen und am anderen sendet er selbst an andere Arduinos.


    Programmiert wird in Qt.


    Gruß


    Gesendet von meinem Redmi 3S mit Tapatalk

    Using Tapatalk

  • Hallo Lokführer,


    standardmäßig verfügt der Raspüberry Pi über eine serielle Schnittstelle über GPIO 14 und GPIO15 (Device /dev/ttyAMA0).


    Eine weitere ist über die USB-Schnitttstelle erreichbar (Device /dev/ttyACM0).


    Die Device können in Abhängigkeit von Betriebssytsem und Modell auch mal anders heißen. Das spielt aber erst mal keine Rolle.


    Wenn Du über die GPIO-Leiste mehrere serielle Schnittstellen benötigst, dann musst Du dies softwareseitig realisieren. Eine Lösung dazu ist hier mal vorgeschalganen worden. Soweit ich mich entsinnen kann, kommst Du damit nicht annähernd an die 115200 kBaud heran, wie bei den oben angegebenen. Außerdem steigt bei der softwareseitigen Umsetzung die CPU-Auslastung.


    Ich würde die ganze Sache an Deiner Stelle ganz anders angehen: Über ein Protokoll.


    Jeder Sender enthält in seinen gesendeten Daten eine Information über den vorgesehenen Empfänger. Jeder Empfänger lauscht und reagiert nur auf das für ihn bestimmte. Dann kommst Du je Gerät mit einer einzigen seriellen Schnittstelle bei minimaler CPU-Auslastung aus.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Eine weitere ist über die USB-Schnitttstelle erreichbar (Device /dev/ttyACM0).


    Also genaugenommen kannst Du über USB beliebig viele RS232 realisieren, die dann zumindest bei mir ttyUSB0, ttyUSB1... heissen, je nachdem wie viele USB-seriell-Konverter Du dranhängst, eventuell über einen USB-Hub.


    Du musst allerdings beachten, dass das dann "richtige" RS232 sind, mit Pegel -3..-12V für High und 3..12V für Low, wie es die Spezifikation vorsieht. Du brauchst also am Arduino wieder einen Pegelwandler (MAX232, MAX3232) auf Logikpegel. Dafür ist die Verbindung störunanfälliger.


    An den GPIOs 14 und 15 hast Du dagegen "Logikpegel" mit High 3.3V und Low 0V.


    Achja, und mit USB-seriell-Konverter sind das natürlich richtige Hardware-Schnittstellen, die Du von Programmseite genauso wie die an den GPIOs 14 und 15 ansprichst.

  • Es gibt auch USB-UART-Converter die geben RS232, 0-5V oder 0-3,3V aus.


    EXP TECH


    oder eine Platine selber machen, je nachdem,


    der IC ist ein FTDI FT230X


    Für die ICs gibt es eine standard Lib.

  • Hallo,
    Danke für die Antworten.
    Ja also das mit dem Protokoll muss ich machen. Ich kann aber die GPIO Schnittstelle nicht mit einbeziehen, da diese ein festes Protokoll mit einem Gerät spricht. Da darf ich nicht reinpfuschen.
    Über usb könnte ich gehen, stimmt.
    Gibts da was einfaches zum selber bauen auf rs 485?
    Weil ich denke einfach so nen max485 ran kanns ja nicht sein :D (oder doch?)


    Gruß


    Gesendet von meinem Redmi 3S mit Tapatalk

    Using Tapatalk

  • Gibts da was einfaches zum selber bauen auf rs 485?
    Weil ich denke einfach so nen max485 ran kanns ja nicht sein :D (oder doch?)


    Nö, natürlich nicht. Du brauchst immer zwei Bausteine: Den USB-seriell-Wandler, der die seriellen Daten bereitstellt, meist ein FTDI232 oder ein China-Nachbau. Und den Pegelwandler auf RS232 oder RS485, der die Daten auf die richtigen Pegel bringt, also ein MAX232, MAX3232 (3.3V), MAX485.


    https://www.amazon.de/In-Circuit-901-274-USB-RS485-Adapter/dp/B00I9H0998 (Affiliate-Link)


    Deswegen sagt "serielle Schnittstelle" auch erstmal nichts aus. Das war "früher"(tm) meistens eine RS232, inzwischen ist es oft eine logik-level Verbindung zwischen µCs, kann aber auch RS485 oder Stromschnittstelle sein.


    Bei RS485 hast Du noch das Problem: Wenn die bidirektional sein soll, musst Du die Richtung umschalten. Sollen die Daten nur in eine Richtung gehen, kannst Du die Umschaltung mit dem Lötkolben festlegen.


    Bei RS422 hast Du den Vorteil, dass Du gleichzeitig in beide Richtungen kommunizieren kannst, ohne Umschaltung, brauchst aber 2 Leitungen mehr.


    Und bei RS485 und RS422 immer GND mitführen, sonst kann es zu Gleichtaktstörungen kommen, die "unerklärliche" Fehler produzieren. Wird oft falsch gemacht.