Serielle Daten von ACM0 und ACM1 anzeigen.

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Moin Leute,

    nachdem ich jetzt über zwei stunden mit Xterm rumprobiert habe, und nichts hinbekommen habe,

    frage ich mal hier in die Runde:

    Habe zwei Arduino UNO R3 Boards, welche mit dem 16u4 über USB am RasPi hängen.

    Diese senden fleissig daten, mit 1200/8n1.

    Denn auf den boards sind die 328 MCUs entfernt, und sie sind nur noch "bessere" Seriell/USB wandler.

    Mit der Arduino IDE kann ich den datenstrom auch hübsch anschauen.

    Alles wunderbar.

    Nur ich möchte das "standalone".

    Der RasPi bekommt eine SD-karte die direkt in zwei Terminal-fenster bootet in denen ich diese Daten

    angezeigt bekomme, einmal die von ACM0 und dann die ACM1.

    LXTerm sollte das können, nur ist das wohl so mächtig das ich das nicht konfiguriert bekomme.

    Mir gelingt es noch nicht einmal LXTerm zu einer anzeige eines dieser ports zu bewegen.

    ls -ltr /dev|grep -i ttyACM0

    ergibt: crw-rw--w- 1 root dialout 166, 0 Jun 29 16:12 ttyACM0

    da ich vorher versucht habe mich in das dialout einzuklinken mit : sudo usermod -a -G dialout pi

    Allerdings sollte da doch auch der User "pi" auftauchen, oder nicht?

    Einen Teilerfolg hatte ich mit:

    stty -F /dev/ttyACM0 1200

    gefolgt von:

    cat /dev/ttyACM0

    was ein paar Zeichen ausgegeben hat. Allerdings will ich das nicht ständig aufrufen.

    Mit LXTerm bekomme ich nur Fehlermeldungen,

    in der Art:

    xterm -baudrate 1200 /dev/ttyACM0

    xterm: No absolute path found for shell: /dev/ttyACM0

    Auf meinem, viel zu Platzintensivem, Laptop mit TeraTerm geht es wunderbar,

    also sollte das auch auf einem RasPi gehen.

    Hintergrund ist: ich habe für zwei Labornetzteile eine vernünftige Lüftersteuerung

    entwickelt, welche den eingebauten Lüfter sanft aber lastabhängig hochregelt, und in Pausenzeiten alle 10min.

    mal kurz voll anläuft um einem evtl. Wärmestau vorzubeugen, sonst ist der Lüfter nämlich aus.

    An die Längsregel-Transistoren habe ich M3-Ösen-Thermistoren geschraubt.

    Da ich keinen großen 328 verwenden wollte, habe ich stattdessen ATTiny85 genommen, und einen der Pins

    als serielle Ausgabe genutzt, eben mit 1200-8n1.

    Vieleicht weis ja einer hier mehr als ich und kann mit der (L)Xterm config helfen.

    Danke,

    Tubical

  • Servus,

    also ich wüsste jetzt nicht, was das mit lxterm zu tun hat :conf:

    man stty ist Dein Freund, um die Schnittstellen-Parameter richtig einzustellen.

    cat zeigt nur die Daten an, die gerade im Puffer sind.

    Due könntest mal man tail probieren ... mit der Option -f beendet sich tail nicht bei leerem Puffer.

    cu,

    -ds-

  • Moin dreamshader und Leute,

    Im prinzip hast Du recht....allertdings

    kommen nach :

    pi@raspberrypi:~ $ stty -F /dev/ttyACM0 1200

    pi@raspberrypi:~ $ tail -f /dev/ttyACM0

    sensor = 471 FanPWM = 8 NoFan = 0 InterDuty = 14

    sensor = 47uty = 15

    nur eben diese paar bruchstückchen an, die Ausgabe stoppt und nur ctrl+c hilft.

    Ausserdem dachte ich lxterm kann auch ne VT100 Console nachbilden, so wie ich das von

    TeraTerm (PC) kenne: anschluss/baudrate wählen und evtl. noch CR, oder CR/LF oder newline und die ausgabe sieht dann so aus:

    sensor = 471 FanPWM = 8 NoFan = 0 InterDuty = 14

    (....)

    sensor = 528 FanPWM = 12 NoFan = 0 InterDuty = 56

    (...)

    sensor = 680 FanPWM = 98 NoFan = 0 InterDuty = 0

    (...)

    z.B.

    -----

    Linus:

    python hab ich auch probiert, irgendwo bei instructables hab

    ich sowas gesehen:

    #!/usr/bin/env python

    import serial

    import time

    ser = serial.Serial(

    port='/dev/ttyUSB0',

    baudrate = 1200,

    parity=serial.PARITY_NONE,

    stopbits=serial.STOPBITS_ONE,

    bytesize=serial.EIGHTBITS,

    timeout=1

    )

    counter=0


    while 1:

    x=ser.readline()

    print x


    das geht aber nicht.

    Auserdem hab ich noch nie was mit .py gemacht.

    Ich mach C/C++ (Atmel stk und arduino IDE) und ASM.

  • Hi,

    ahm ... Moment ... dann versuch mal die seriellen Schnitstellen auf RAW Modus umzustellen (u.a. VMIN=1, ...) und damit das ganze Handling von Steuerzeichen abzuschalten.

    Weil der Puffer beträgt afair um die 16 kbyte. Ohne Raw-Modus, werden die Daten gepuffer ...

    Vielleicht kommt da auch ein XOFF oder so ...

    Einstellungen zu RAW musst Du gurgeln ... auf der man-page zu tcsetattr könnten sie auch stehen ...

    //EDIT: vor langer Zeit habe ich so ein C-Programm mal für ps915 geschrieben. Das gibt die Zeichen aus, das es von der Schnittstelle liest. Der Sourcecode muss hier irgendwo im Forum zu finden sein: Stichwort "Soehnle Waage" ...

    cu,

    -s-

  • Das liegt imho aber nicht an screen ... denn das hat ja wohl mit der seriellen Schnittstelle nichts zu tun.

    Zumindest nicht nach meinem Verständnis - das ist imho lediglich ein Fenster-Manager für ASCII-sessions ....

    Also eine Erklärung, warum tail -f nicht, screen aber schon tut, habe ich jetzt nicht.

    Ich fürchte eher, dass das nach den verschiedenen Versuchen eher Zufall ist ...

    Aber .... ich lasse mich da gerne eines besseren belehren ...

    cu,

    -ds-

Jetzt mitmachen!

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