[Projekt verworfen] RS232 auf unkonventionelle Bd.-Rate setzen?

  • Hallo zusammen,

    ich versuche verzweifelt meine /dev/ttyAMA0 auf eine Bd.-Rate von 3200 Bd zu setzen, weil mein Datenlogger des Solar-Wechselrichters nur 3200 8N2 kann. Das kann auch nicht geändert werden.
    Unter Windows (mit Hardware-USART) funktioniert es sowie auch mit einem USB-Serialadapter an einem Netbook, auf dem Linux-Mint sowie WinXP installiert ist. Rein teoretisch sollte es ja auch klappen, denn 1.832 MHz / 576 = 3200 Bd, also ein ganzzahliger Teiler.

    Beim RaspPi erhalte ich bei "stty 3200 -F /dev/ttyAMA0" die Meldung "stty: ungültiges Argument 3200". Andere Bd.-Raten funktionieren.

    Weiß jemand, wie ich den RaspPi überreden kann, die 3200 zu akzeptieren? Gibt es evtl. einen Treiber, der so etwas kann? In Linux werden ja häufig Skripts verwendet, um Einstellungen zu tätigen. Kennt evtl. jemand die Stelle, wo die Bd.-Raten auf Gültigkeit überprüft werden?
    Die Ursache kann ja eigentlich nur in einer best. Software liegen, da die serielle Schnittstelle des Pi nur so realisiert ist. Der hat ja keinen Hardware-USART o.ä., oder?

    Es wäre toll, wenn mir jemand weiter helfen könnte. Sonst muss ich nämlich meine Idee, die Daten meines Solar-WR in FHEM einzulesen und zu verarbeiten, an den Nagel hängen.

    Viele Grüße und schönes Restwochenende noch

    Harald

    Einmal editiert, zuletzt von dk9jh (21. August 2014 um 14:41)

  • [Projekt verworfen] RS232 auf unkonventionelle Bd.-Rate setzen?? Schau mal ob du hier fündig wirst!

  • ist leider nicht definiert

    siehe

    vielleicht kann man das nachinstallieren, muss das Modul termios neu kompilieren

    evtl. können die Softies helfen ?

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (17. August 2014 um 17:04)

  • Hallo jar,

    besten Dank für's Antworten. Ich habe natürlich weiter gesucht und habe einiges über termios.h gefunden. Da steht tatsächlich die 3200 nicht drin. Wenn ich wüsste, wie ich die Datei neu compilieren und anschließen richtig einbinden kann, würde ich das mal testen, ob es funktioniert, wenn diese Bd-Rate im File hinzu füge.

    Naja, vielleicht findet sich noch jemand, der mir da helfen kann.

    Viele Grüße

    Harald

    .

  • ich gebe auf finde termios oder termios.c nicht in wheezy

    dabei sollte es doch da sein ? mit #include <termios.h> sonst hätte es keinen Sinn

    Code
    root@wheezypi:/# $ find / -name 'termios'
    -bash: $: command not found
    root@wheezypi:/# $ find -name "termios"
    -bash: $: command not found
    root@wheezypi:/# find / -name termios
    root@wheezypi:/# find / -name "termios" -print
    root@wheezypi:/# find / -name termios.c
    root@wheezypi:/#

    evtl. das Original neu einbinden ?
    http://www.math.unl.edu/~rdieter1/Soft…atlib/termios.c

    für mich wäre es leichter einen Atmel mit 2 serielle einzusetzen der als Baudraten Konverter arbeitet, 3200 rein 4800 raus

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (18. August 2014 um 11:37)

  • Hallo zusammen,

    ich hätte doch nicht an 2 Stellen Fragen zum gleichen Thema stellen sollen :blush: In anderen Foren gibt es Moderatoren, die sich hauptsächlich um einen bestimmten Bereich kümmern und evtl. Beiträge, die zwar ihren Schwerpunkt berühren, aber nicht in ihrem Bereich stehen, nicht finden. Deshalb habe ich jars Anregung befolgt und mein Anliegen bei den "softies" gepostet.
    Ich bitte um Entschuldigung! Ich werde mich bemühen, dass das nicht nochmal passiert :wallbash:

    So, nun zum Thema:

    Wie schon geschrieben, befinden sich die Bd.-Raten beim RaspPi in termbits.h, was in termios.h included ist. Hier könnte ich die 3200 einfügen. Aber was ist mit der dahinter stehenden Nummer (#define B2400<>0000013)? Ist das nur eine lfd. Nr. oder wird die beim compilieren irgend wozu verwendet? Darf sie geändert werden?

    Ich glaube nicht, dass Linux die Werte direkt zur Laufzeit aus diesen Dateien übernimmt. Das muss doch sicherlich nach der Änderung noch compiliert werden - aber wie? Vermutlich ist das ein Stück zu hoch für mich.

    Vielen Dank erstmal bei allen Postern für ihre Unterstützung.

    Viele Grüße

    Harald

    Einmal editiert, zuletzt von dk9jh (18. August 2014 um 18:38)


  • ,....Hier könnte ich die 3200 einfügen. Aber was ist mit der dahinter stehenden Nummer (#define B2400<>0000013)? Ist das nur eine lfd. Nr. oder wird die beim compilieren irgend wozu verwendet? Darf sie geändert werden?

    ich glaube da ist nur eine Tabelle hinter keine Berechnung weil das fortlaufende Nummern sind.

    wird also nix bringen.

    bei Atmel und Co wird an dieser Stelle wenigsten gerechnet

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (18. August 2014 um 18:44)

  • Hallo Harald,

    mit der Thematik termios. h hatte ich michheute vormittag auch beschäftigt.

    Die Datei termios.h befindet sich hier:

    Code
    pi@raspberrypi ~ $ whereis termios.h
    termios: /usr/include/termios.h /usr/share/man/man3/termios.3.gz

    In dieser gepackten Datei befindet sich aber nur termios.h.

    Ich vermute, dass termios.h neben vielen anderen Header-Dateien und anderen Dateien Bestandteil von etwas sehr viel Größerem ist.

    Das gibt Anlass zur Vermutung, dass aus dieser Datei während der Laufzeit garantiert nichts ausgelesen wird.

    Da mir die Quelle im o.a. Verzeichnis nicht bekannt ist, ist es auch sehr schwer zu sagen, ob die dort vorhandenen gepackten Datei auch "vollständig" sind, um nach Änderungen einzelner Dateien zu etwas funktionsfähigem compilieren können.

    Normalerweise befindet sich dort ein Makefile, aus dem erkennbar ist, zu was das Ganze compiliert - und mit welchen Optionen man ein bestimmtes Verhalten erzeugen kann... nicht so hier.


    Mehr kann ich leider dazu nicht beitragen - alles Andere wäre ein Riesenaufwand an möglicherweise zeit- und nervenaufreibendem Hin- und Hercompilieren.


    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.


  • Die Datei termios.h befindet sich hier:
    In dieser gepackten Datei befindet sich aber nur termios.h.

    wenn ich in geany gcc C-Progs mache include ich ja die .h

    dort muss irgendwie ein "Link" zum Objektfile gesetzt werden, aber egal ich denke auch der Weg daran zukommen ist zu mühsam. Ausserdem betrifft das dann nicht /dev/ttyAMA0 denke ich.


    Ich vermute, dass termios.h neben vielen anderen Header-Dateien und anderen Dateien Bestandteil von etwas sehr viel Größerem ist.

    Mehr kann ich leider dazu nicht beitragen - alles Andere wäre ein Riesenaufwand an möglicherweise zeit- und nervenaufreibendem Hin- und Hercompilieren.

    leichter ein Baudratenkonverter zu bauen, käuflich finde ich nix

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hallo Jar,

    wenn man das Teil wirklich programmieren möchte, neige ich fast zu Assembler. Dort kann man die Baudrate zielgenau programmieren und muss sich nicht mit irgendwelchen Problemchen höherer Programmiersprachen herumärgern.

    Leider kann ich kein ARM-Assembler.

    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.


  • Hallo Jar,
    wenn man das Teil wirklich programmieren möchte, neige ich fast zu Assembler.

    ach ich dachte an einen zwischengeschalteten Atmel, Arduino o.ä.

    gibt genung Libs in C, ASM oder was auch immer, ist ja nur rein raus, evtl. noch etwas Ringbuffer, notfalls spendiert man noch 2 Ports für RTS und CTS.

    Einan AVR mit 16MHz dürften die 3200 BD nicht überfordern und es werden vermutlich auch keine ellenlange Bibel übertragen.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)


  • ach ich dachte an einen zwischengeschalteten Atmel, Arduino o.ä.

    Oder so...

    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.

  • Fehlerrate am Atmel in Abhängigkeit von Taktrate
    Taktfrequenz des Controllers in MHz
    Baud 1,00 2,00 4,00 7,373 8,00 11,059 14,318 14,746 16,00 18,432 20,00
    2400 0,2% 0,2% 0,2% 0,0% 0,2% 0,0% 0,0% 0,0% -0,1% 0,0% 0,0%
    4800 0,2% 0,2% 0,2% 0,0% 0,2% 0,0% 0,2% 0,0% 0,2% 0,0% 0,2%

    und 3200 Bd liegt dazwischen so das bei jeder Taktrate der Fehler vernachlässigbar ist

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • arduino micro dafür keine 2,50€ leichter gehts kaum .....

    oh sind teuerer geworden 2,82€ :mad_GREEN:
    http://www.ebay.de/itm/viele-Mini…=item58ad3d88ba

    Hi jar,

    Dir ist schon klar, dass das, was Du da verlinkt hast, Pro Mini sind?
    Die haben nämlich keinen usb-Anschluss.
    cu,
    -ds-


  • Hi jar,
    Dir ist schon klar, dass das, was Du da verlinkt hast, Pro Mini sind?
    Die haben nämlich keinen usb-Anschluss.

    jau, aber der wird einmal programmiert und gut ist, es gibt dafür passende Adapter

    ich könnte mir sogar vorstellen das der im sleepmodus nur bei Daten aufwacht und von DTR DSR gespeist wird, ne echte gute treibt auf jeder Leitung 20mA, das zu 5V sollte für einen Atmel reichen.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (20. August 2014 um 00:04)

  • Hallo zusammen,

    ich bin wieder im Lande und habe Eure Beiträge gelesen.

    Erstmal vielen Dank dafür, dass ihr Euch so viele Gedanken gemacht habt, um mir zu helfen. Meine eigenen Erkenntnisse und Eure Ausführungen haben mich zu der Entscheidung gebracht, mein Vorhaben, die Solardaten mittels RaspPi zu sammeln und in FHEM zu verarbeiten, fallen zu lassen.
    Den RasPi so anzupassen, dass er die 3200 Bd. verarbeiten kann, macht wohl so tiefgreifende Änderungen erforderlich, dass das doch min. eine Nummer zu groß für mich.
    Einen Baudratenwandler zu bauen, würde mich (glaube ich) auch etwas überfordern. Dazu sind meine Programmierkenntnisse wohl nicht ausreichend.

    Ich habe ja die damals mitgelieferte Software, die zwar einige Wünsche nicht erfüllt (Tages-,Monats-, Jahressumme im Balkendiagramm u.a. fehlen), aber einigermaßen brauchbare Ergebnisse unter Windows bringt. Dort ist die serielle Schnittstelle problemlos auf 3200 Bd. einstellbar und die Datensammlung klappt ohne Probleme.
    Ich habe auch den Datenlogger geöffnet. Darin befindet sich ein quatratischer Prozessor, der vom WR-Hersteller für diese Aufgebe programmiert wurde. Der über nimmt alle Steuerungs- und Speicheraufgaben im Datenlogger. Somit ist die Datenrate nicht ohne weiteres einstellbar.

    Nochmals herzlichen Dank für Eure Bemühungen und ein schönes Wochenende

    Harald

    Einmal editiert, zuletzt von dk9jh (23. August 2014 um 20:36)


  • Fehlerrate am Atmel in Abhängigkeit von Taktrate
    Taktfrequenz des Controllers in MHz
    Baud 1,00 2,00 4,00 7,373 8,00 11,059 14,318 14,746 16,00 18,432 20,00
    2400 0,2% 0,2% 0,2% 0,0% 0,2% 0,0% 0,0% 0,0% -0,1% 0,0% 0,0%
    4800 0,2% 0,2% 0,2% 0,0% 0,2% 0,0% 0,2% 0,0% 0,2% 0,0% 0,2%

    und 3200 Bd liegt dazwischen so das bei jeder Taktrate der Fehler vernachlässigbar ist

    Deshalb taktet man den AVR mit nem externen Quarz. ;):D

    ;) Gruß Outi :D
    Pis: 2x Pi B (Rente) / 1x Pi B+ (Rente) / 1x Pi 2 B (Rente) / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 (B. Lite) / 2x Pi Zero 1.3 (B. Lite) / 2x Pi Zero W 1.1 (B. Lite) / 1x Pi Zero 2 (mal so, mal so) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (BW Lite (Webserver)) / Pi 400 (BW) / 1x Pi 5 (BW) / 2x Pi Pico / 2x Pi Pico W
    Platinen: Sense HAT / HM-MOD-RPI-PCB / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT / Pi 5 Kühler HAT
    Kameras: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • aus der setserial manpage

    Zitat


    spd_cust
    Use the custom divisor to set the speed when the application
    requests 38.4kb. In this case, the baud rate is the baud_base
    divided by the divisor. This parameter may be specified by a
    non-privileged user.

    kleines beispiel:
    # setserial -G /dev/ttyUSB0 baud_base 24000000
    # setserial -G /dev/ttyUSB0 spd_cust
    # setserial -G /dev/ttyUSB0 divisor 2307

    (mit den divisor und baud_base werten wirst du wohl rumexperimentieren müssen, und deine Software muss die Schnittstelle mit 38,4kb abfragen.)


  • Deshalb taktet man den AVR mit nem externen Quarz. ;):D

    bestimmt nicht deswegen, erst recht nicht bei 3200 BD

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

Jetzt mitmachen!

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