serielle Kommunikation Arduino Pro Mini -> RPi Uart

  • Gebe es jetzt in diesem Format aus: [1111] 1 : 2 : 3

    Altes Schema. Erst läuft es - allerdings nur ein paar Sekunden. Dann schleichen sich Fehler ein die dann sicher auf die Baudratenfehler zurückzuführen sind und es werden auch wieder Absätze geschrieben.

    Allerdings sehe ich nun, dass tatsächlich immer mal wieder ein Wertepaar übersprungen wird, was aber gar nicht so dramatisch wäre, da es nur eins auf alle 50-100 Wertepaar ist.

    Code
    [1110]
    [1111]
    
    [1113]
    [1114]

    Via tail -f /dev/ttyS0 erhalte ich 5 Wertepaar nach etwa 5 Sekunden. Weiter passiert nichts. Diese werden aber mit Leerzeile ausgegeben.

    Nachdem ich nun screen installiert und deinen Befehl ausprobiert habe, erhalte ich keine seriellen Daten mehr. Habe screen wieder deinstalliert. Tut sich dennoch nichts... :geek: Arduino sendet weiter im eigenen seriellen Monitor.

    Ich würde sagen ich bringe das jetzt erstmal wieder zum Laufen (WIE? ||) und widme mich dann Python zum automatisierten Ändern der txt. Ich muss weiterkommen. :angel:

    Trotzdem toll, dass ihr mir derart helft! Dafür danke ich euch sehr! :danke_ATDE:

    EDIT: Laut Prozessorlast werden die Daten weiterhin ausgelesen, aber nicht bei minicom angezeigt.

  • serielle Kommunikation Arduino Pro Mini -> RPi Uart? Schau mal ob du hier fündig wirst!

  • Altes Schema. Erst läuft es - allerdings nur ein paar Sekunden. Dann schleichen sich Fehler ein die dann sicher auf die Baudratenfehler zurückzuführen sind und es werden auch wieder Absätze geschrieben.

    Allerdings sehe ich nun, dass tatsächlich immer mal wieder ein Wertepaar übersprungen wird, was aber gar nicht so dramatisch wäre, da es nur eins auf alle 50-100 Wertepaar ist.

    Hm ... ich würde vielleicht mal mit dem delay im loop rumspielen.

    Ich hab' die Baudrate bei den Arduinos meist mit 38.4 oder 57.6 eingestellt. Allerdings die 5V/16MHz Teile.

    Evtl. auch noch mal in der IDE checken, ob die passende 3V3 Variante eingestellt ist.

    Dass tail sich so merkwürdig verhält liegt vermutlich am buffering ...

    cu,

    -ds-

  • Hm ... ich würde vielleicht mal mit dem delay im loop rumspielen.

    Ich hab' die Baudrate bei den Arduinos meist mit 38.4 oder 57.6 eingestellt. Allerdings die 5V/16MHz Teile.

    Evtl. auch noch mal in der IDE checken, ob die passende 3V3 Variante eingestellt ist.

    In der IDE ist es richtig eingestellt.

    Habe das delay erstmal auf 50 gesetzt, wobei das für eine Vibration kaum ausreichen wird. Aber kann ich ja auch noch ändern.

    Um die Ausgabe via minicom wieder herzustellen, musste ich nur kurz rebooten.

  • Guten Abend,

    gerne greife ich das Thema nochmal auf, wenn ich meine Bachelorarbeit im Februar verteidigt habe. Ist ja blöde, wenns nicht klappt.

    Ich überspringe das jetzt und umgehe das Problem wie folgt, falls mal jemand auf diesen Thread stößt.

    Ich habe nun eine verunglückte Datei im 1. Anhang. Nun will ich jegliche Zeilen in denen das Muster ### ### ### nicht eingehalten wird, rauswerfen. Das Format kann man ändern, muss man dann aber in der Nutzung von der re lib berücksichtigen.

    Die Ausgangsdatei seht ihr stark übertrieben datafailed.txt.

    Diese Datei lese in folgendes Pythonskript ein:

    Code
    import re
    
    def accel_raw_edit():
    is_valid_line = re.compile(rb"\d{3} \d{3} \d{3}$").match
    with open('datafailed.txt', 'rb') as in_file:
    with open('output.txt', 'wb') as out_file:
    out_file.writelines(filter(is_valid_line, in_file))
    
    accel_raw_edit()

    Und am Ende erhalten wir daraus diese Datei output.txt.

    Damit beseitigen wir Startschwierigkeiten, eventuelle Baudübertragungsfehler und andere Macken.

  • Habe das delay erstmal auf 50 gesetzt,

    Ich hätte den mal höher gesetzt ...

    Du überträgst ohne Protokoll ... kann sein, dass da was überläuft.

    Das Nachbearbeiten wäre es fast wert, als Code-Snippet ins Python Subforum gestellt zu werden.

    cu,

    -ds-

  • Damit beseitigen wir Startschwierigkeiten, eventuelle Baudübertragungsfehler und andere Macken.

    Nein, das ist Kernschrott!

    Wenn Du Baudratenfehler hast, werden Bits falsch übertragen. Ohne Prüfsumme kannst Du nicht sicher sein, dass Deine übertragenen Daten überhaupt stimmen. Wenn das letzte Bit statt 1 als 0 gelesen wird, wird aus einer ASCII '1' eine '0', aus einer '3' eine '2', ... aus einer '9' eine '8'.

    Du weisst nicht, ob die Werte die Du empfängst überhaupt die Werte sind, die der Controller sendet. Bring das mit der Baudrate in Ordnung.

    Wenn Du den internen Takt verwendest, stelle auf Quarz um und wähle eine passende Baudrate. Wenn Du keinen Quarz hast, ermittle die Frequenz des internen Taktes und berechne die Baudratensettings für den AVR von Hand.

    Und ja, man kann bei internem Takt auch bei 9600baud danebenliegen, so genau ist der nicht, und temperaturabhängig auch noch.

  • Nein, das ist Kernschrott!

    Wenn Du Baudratenfehler hast, werden Bits falsch übertragen. Ohne Prüfsumme kannst Du nicht sicher sein, dass Deine übertragenen Daten überhaupt stimmen. Wenn das letzte Bit statt 1 als 0 gelesen wird, wird aus einer ASCII '1' eine '0', aus einer '3' eine '2', ... aus einer '9' eine '8'.

    Du weisst nicht, ob die Werte die Du empfängst überhaupt die Werte sind, die der Controller sendet. Bring das mit der Baudrate in Ordnung.

    Wenn Du den internen Takt verwendest, stelle auf Quarz um und wähle eine passende Baudrate. Wenn Du keinen Quarz hast, ermittle die Frequenz des internen Taktes und berechne die Baudratensettings für den AVR von Hand.

    Und ja, man kann bei internem Takt auch bei 9600baud danebenliegen, so genau ist der nicht, und temperaturabhängig auch noch.

    Füge ich noch ein. Danke für den Hinweis. Einfache Quersumme sollte ja reichen. Das ist ja wahrlich kein Akt, das noch hinzuzufügen.

    Ich besser es aus und schiebe es noch nach.

  • Hallo ossihmz,

    entschuldigt, dass ich mich jetzt noch einmische. Aber die empfangene Datei lässt nur den Schluss zu, dass sich das gesendete Signal mit dessen Echo mischt - und Kauderwelsch empfangen wird.

    Wenn Du ALLE Echo's der seriellen Schnittstelle deaktivierst, dann müsste es funktionieren.

    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.

  • Ja servus Andreas,

    Aber die empfangene Datei lässt nur den Schluss zu, dass sich das gesendete Signal mit dessen Echo mischt - und Kauderwelsch empfangen wird.

    Da hast Du vermutlich was missverstanden ... das "kaputte" Datenfile, das ossihmz als Beispiel -> hier <- gepostet hatte, ist absichtlich übertrieben kaputt und wohl händisch erstellt um seine Konvertierung zu testen. So hab' ich das jedenfalls verstanden. Die Originaldaten sehen wesentlich besser aus.

    //OT:

    Nett, mal wieder was von Dir gehört zu haben. Eine etwas umfangreichere mail ist in Arbeit ;)

    cu,

    -ds-

Jetzt mitmachen!

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