- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Probleme mit RS 485 Bus

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Anzeige

    LiFePo4 Akku selber bauen - Video
    jaja, kleine Ursache ....
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  2. #12
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    361
    Ich habe mir jetzt den reduzierten Code angesehen und versucht zu verstehen was da genau vorsich geht. Arbeite zum ersten mal mit RS-485.

    Ich würde den hier gezeigten Code gerne so modifizieren, dass 3 verschiedene Bits übertragen werden. Ich habe einen Sender und einen Empfänger und möchte am Empfänger 3 Relais schalten.

    Also z.B. Bit A,B,C
    Jedes steht für den Zustand von einem Relais.

    Ich muß dam im Sende und Empfangsprogramm A,B und C als Bit dimensionieren. Richtig?

    Mit Printbin A sende ich das Bit A dann vom Sender zum Empfänger.

    und wie empfange ich es dann?

    A = UDR?

    Falls jemand einige Zeilen hat damit ich das verstehe wäre ich sehr dankbar.

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    das kommt immer drauf an, was du genau möchtest.
    ist es nur ne simplexverbindung und es macht nix
    wenn auch mal n falsches relais anzieht
    gehts am einfachsten.
    senden mit udr=zustaende,
    empfangen mit zustaende=udr

    ist aber was "wichtiges" dran, sodass fehlschaltungen
    unbedingt unterbunden sein müssen brauchts ne
    prüfsumme um die korrekte übermittlung zu checken.
    nur, woher weiß der controller, das das übertragene
    byte kein datenbyte ist, sondern ne prüfsumme
    und auch so behandelt werden muss ...
    es gibt auch da mehrere wege.
    zum einen kann man auch mit der 9-bit-uart arbeiten
    und das neunte bit als marker verwenden
    oder man bastelt sich n protokoll, das definierte
    startzeichen, endzeichen und/oder definierte paketlängen
    hat.
    soll der bus um zusätzliche mitglieder erweitert werden
    brauchts noch mindestens ne empfängeradresse.
    dann hätten wir schon mindestens 2 bytes zu übertragen,
    so in etwa 1.byte mit 9 bit, paketstart, zweites byte empfänger.
    sinnigerweise währen aber 3 byte, also start, empfänger, anweisung.
    das währ dann bei 8-bit-uart. bei 9-bit kann man sich das erste byte
    wieder schenken, weil da das 9. bit als startzeichen herhalten kann,
    als erstes zeichen 8-bit empfänger, neuntes bit ist paketstart.
    zweites zeichen, ist dann 8-bit, ist dann die anweisung.

    bei wichtiger fehlerlosigkeit käme dann noch die entsprechende
    prüfsumme als byte mit hinten dran.
    das kann man dann noch ausbauen mit zeichenzähler für datenpakete
    unterschiedlicher länge, mit endzeichen usw. usw.

    ein recht komplexes protokoll findest du z.b.
    unter https://www.roboternetz.de/phpBB2/fi...tabellev12.pdf
    beschrieben

    es sind dir da schon viele möglichkeiten gegeben, was du brauchst
    weißt nur du alleine.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  4. #14
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    361
    Kann man die Sicherheit auch erhöhen wenn jedes Bit z.B. 5 mal hintereinander empfangen werden muß damit das richtige Relais anspricht? Die Geschwindigkeit ist in meinem Fall total unkritisch. Selbst wenn es 500msec dauert bis am Empfänger etwas passiert wäre das egal.

    Das mit UDR verstehe ich leider total nicht
    Hat jemand für mich einige Zeilen Code damit ich verstehe was da passiert?

    Danke für eure Hilfe.

  5. #15
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    also,

    das UDR ist nur n Register, ne Speicherzelle könnte man sagen,
    die genau ein Byte fasst.
    Bevor man es verwendet muss man aber erst die
    UART, also die serielle Schnittstelle konfigurieren.
    Üblicherweise ist die Konfiguration
    z.B. 19200,8,n,1
    19200 ist die Baudrate, also die Übertragungsgeschwindigkeit
    8 ist die Paketlänge, also 8 BIT, nicht Byte, also 1 Byte
    n steht für "no parity" also kein Paritätsbit
    1 steht für ein Stopbit.

    ist die UART konfiguriert stellt sie verschiedene Flags
    Interrupts und Register bereit, die man verwenden
    kann.
    Da gibts z.B. das RXC also das receive complete Flag,
    es zeigt an, dass ein Zeichen ganz empfangen wurde.
    Es kann auch ein entsprechender Interrupt ausgelöst
    werden, das währe dann der URXC-Interrupt.
    Äquivalent gibts das auch zum Senden,
    da nennt sich das dann TXC, also Sendeübertragung complete-Flag
    und UTXC also Zeichen gesendet Interrupt.

    Wird nun ein Zeichen empfangen wird dies in der
    UDR-Speicherstelle abgelegt und kann dort dann ausgelesen
    werden. Die Anweisung währe dann:
    beliebige_variable = UDR
    Zum Senden schreibt man einfach ein Zeichen, also ein
    Byte in das gleiche Register, also:
    UDR=beliebiges_byte

    das wars auch schon.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress