Problem mit Minicom und weiteren Seriellen Ports

  • Hallo Zusammen,
    Ich habe meinen Raspbery Pi 3 heute neu eingerichtet und konfiguriert.
    Daraufhin wollte ich meinen USB zu Serial Adapter testen und habe gemerkt das da was nicht stimmt.
    Mit dem Befehl

    Code
    echo "B" > /dev/ttyUSB0

    konnte ich meinen USB zu Serial Adapter nicht davon überzeugen "etwas" zu senden. Auch nicht wenn ich den Befehl mit Root Rechten ausführe.
    Und ja das Gerät existiert in /dev und laut dmesg ist der Treiber erfolgreich geladen worden.
    Auf dem Adapterboard sind TX und RX LED's diese blinken beim versenden auch nicht.
    Das ganze funktioniert auf meinem Xubuntu Desktop ohne Probleme.
    Das zweite Problem ist das die eingebaute Serielle Schnittstelle genauso wenig funktioniert, ich habe über raspi-config die Konsole über Seriell abgeschaltet und einen Reboot durchgeführt.
    Sobald ich minicom öffne und lokales Echo aktiviert habe und dann einen Buchstabe eingebe "stürzt" minicom ab.
    Minicom lässt sich danach nicht mehr bedienen, der Raspi läuft aber noch ohne Probleme.
    Laut top verbraucht minicom beim Absturz 99% der CPU Zeit.
    Ich habe leider noch kein Log von minicom gefunden.
    dmesg:


    top wenn minicom abgestürtzt ist:

    Code
    1149   root      20   0    7284   5376   2204 R  100,0  0,6   0:28.82 minicom

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

    Einmal editiert, zuletzt von petit_miner (10. April 2016 um 19:03)

  • Hallo petit_miner,

    mir ist so, als wenn es da mal in der ersten Woche, in der der RPi 3B auf dem Markt war, bereits einige andere User über Probleme mit der seriellen Schnittstelle berichtet haben. Und mir ist auch so, dass man Problemlösungen gezielt finden kann, wenn man

    Code
    Raspberry Pi 3B UART BT problems


    in eine Suchmaschine eingibt.

    Und mir ist so, als wenn diese Artikel bereits in diesem Forum verlinkt worden wären... z.B. von Meigrafd.

    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

    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.

    Einmal editiert, zuletzt von Andreas (10. April 2016 um 20:52)

  • Andreas: Sein Problem betrifft aber nicht UART vom Pi selbst sondern ein extra/externes USB Gerät: /dev/ttyUSB0 und in seinem Fall ein USB2TTL Converter mit PL2303 Chip.... Also eigenlich unabhängig von /dev//ttyAMA0 oder ttyS0 ....

    Bei den alten Pi's war UART_0 die serielle Schnittstelle des Pis und bei Freischaltung als /dev/ttyAMA0 ansprechbar.
    Seit dem Pi3 wird UART_0 aber für Bluetooth verwendet und somit muss nun UART_1 für GPIO14&15 herhalten.
    Der Grund wieso das geändert wurde ist das UART_0 nicht von der core_freq Einstellung beeinflussbar ist und das für BT wichtig ist.

    Ein extra USB Gerät hat mit dem von dir angesprochenen ME nichts zu tun ...

  • meigrafd An dem Serial Adapter ist momentan ein Atmega328 angeschlossen.
    Auch wenn es über 30 Einstellungsmöglichkeiten bei RS232 gibt und da irgendwas "verstellt" ist müsste ja trotzdem die TX Led blinken was sie aber nicht tut.
    Ich vermute mal da liegt irgendwo ein Rechte Problem vor.
    Andreas
    Danke das werde ich mir mal ansehen.

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

    Einmal editiert, zuletzt von petit_miner (11. April 2016 um 07:50)

  • Und wie genau hast du den Atmega328 angeschlossen?
    TTL-TX muss an ATmega-RX
    TTL-RX muss an ATmega-TX
    Das was der ATmega sendet (TX) muss der TTL empfangen (RX).

    Hast du es denn auch schon mit einem Python Script probiert? Da hättest du direkten Einfluss auf die Einstellungen und sofern du am Sketch des ATmega nichts verstellt hast müsste folgendes funktionieren:

    [code=php]#!/usr/bin/python2
    # -*- coding: utf-8 -*-

    from __future__ import print_function
    import threading
    import serial
    import time
    import sys

    SerialPort = "/dev/ttyUSB0"
    SerialBaudrate = 38400

    #-------------------------------------------------------------------
    # serial docu: http://pyserial.sourceforge.net/pyserial.html
    #
    #initialization and open the port.
    #possible timeout values:
    # 1. None: wait forever, block call
    # 2. 0: non-blocking mode, return immediately
    # 3. x, x is bigger than 0, float allowed, timeout block call
    ser = serial.Serial()
    ser.port = SerialPort
    ser.baudrate = SerialBaudrate
    ser.bytesize = serial.EIGHTBITS #number of bits per bytes
    ser.parity = serial.PARITY_NONE #set parity check: no parity
    ser.stopbits = serial.STOPBITS_ONE #number of stop bits
    #ser.timeout = None #block read
    ser.timeout = 1 #non-block read
    #ser.timeout = 2 #timeout block read
    ser.xonxoff = False #disable software flow control
    ser.rtscts = False #disable hardware (RTS/CTS) flow control
    ser.dsrdtr = False #disable hardware (DSR/DTR) flow control
    ser.writeTimeout = 2 #timeout for write
    #-------------------------------------------------------------------

    #read from Arduino
    def Serial_read_Thread():
    print("Starte Thread: serial read")
    while True:
    try:
    # Remove newline character '\n'
    response = ser.readline().strip()
    #response = ser.readline()
    if response:
    print("from Arduino: "+response),
    ParseSerialInput(response)
    except serial.SerialException, e4:
    print("Could not open serial port '{}': {}".format(SerialPort, e4))
    except (KeyboardInterrupt, SystemExit):
    sys.exit()
    ser.close()

    #https://code.google.com/p/rpicopter/so…1c91a60fbdd9310
    #send to Arduino
    def send_serial_data(line):
    output = "%s\r\n" % (line)
    try:
    bytes = ser.write(output)
    except Exception, e3:
    print("Error sending via serial port: " + str(e3))
    # Flush input buffer, if there is still some unprocessed data left
    ser.flush() # Try to send old message
    #ser.flushInput() # Delete what is still inside the buffer


    if __name__ == '__main__':
    try:
    ser.open()
    except Exception, e:
    print("Error open serial port: " + str(e))
    exit()
    if ser.isOpen():
    try:
    ser.flushInput() #flush input buffer, discarding all its contents
    ser.flushOutput() #flush output buffer, aborting current output and discard all that is in buffer
    # Start Serial read Thread
    read_thread = threading.Thread(target=Serial_read_Thread)
    read_thread.start()
    print("read_Thread ist aktiv: %s" % read_thread.isAlive())
    # Start Serial Input loop
    while True:
    send_serial_data(raw_input("What to Send to Arduino? "))
    except Exception, e1:
    print("Error...: " + str(e1))
    except (KeyboardInterrupt, SystemExit):
    print("Schliesse Programm..")
    sys.exit()
    else:
    print("Cannot open serial port ")

    [/php]

    BTW: Wenn es ein Rechteproblem wäre müsste eine entsprechende Meldung kommen - root darf aber alles.

  • Die Sache mit dem USB zu Serial Adapter hat sich jetzt geklärt, es war einfach nur ein Stromproblem. :blush:
    Für alle die genau das gleiche Problem mit der internen RS232 Schnittstelle haben kann ich diese Seite empfehlen:
    LINK

    A: Was ist dein dunkelstes Geheimnis?
    B: Das kann ich dir nicht sagen.
    A: sudo was ist dein dunkelstes Geheimnis?

    Einmal editiert, zuletzt von petit_miner (14. April 2016 um 18:20)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!