- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: 8 Byte über RS232 | Protokoll?

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253

    8 Byte über RS232 | Protokoll?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Tagchen!

    Ich muss vom PC 4 Word-Variablen (16-bit) auf nen Atmega übertragen und mache mir gerad Gedanken über ein Protokoll. Habe hier im Forum und im Rest des Netzes nicht wirklich was finden können. Also, es ist so dass ich auf meinem Atmega8 ein 4-fach-PWM laufen, deren Duty-Cycle halt vom PC vorgegeben werden soll. Die Zahlen liegen da zwischen 47104 und 65535 für 0% bis 100%. Ich will also immer 4 Zahlen übertragen, die jeweils 2 Bytes benötigen. Dies kann öfter mal vorkommen. Damit ich sehe wo eine Bytekombination anfängt, muss ich nen Header realisieren. Aber: Wie finde ich jetzt eine Header-Bitkombination, die nicht in den Datenbytes vorkommen kann? Ich hab mittlerweile eine ziemliche Denkblockade, also interpretiert diesen Beitrag als Hilferuf!

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Rage_Empire
    Registriert seit
    10.03.2005
    Ort
    Pforzheim
    Beiträge
    710
    Ich wüßte da ein Protokoll:

    http://www.hth.com/snap/

    ...vieleicht hilfts dir. Es gibt auch eine Dll zum download, also dürfte das realisieren kein Problem sein.

    Ansonsten kannst du dir ja dein eigenes protokoll schreiben.....(warum auch nicht?)

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    Hi,
    du könntest die Zahlen als String übertragen und an den Anfang einen Buchstaben stellen..
    Ich übertrage Werte gerne als Strings, da kann ich mir sie prima zum Test in einem Terminalprogramm anschauen.
    Geht natürlich auch als Hexzahlen.
    Also zB: H07FD

    Ist halt etwas länger..

    Gruß
    Christopher

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Ort
    Potsdam
    Beiträge
    190
    Schick doch ein neuntes Byte mit - in dem steht dann welche Byte's geändert werden müssen.
    Das ist freilich nicht sonderlich flexibel wenn es mehr werden sollte, bietet aber den Vorteil das minimal nur zwei Bytes gesendet werden müssen.

    P.S.: Hat das Gekritzel meiner PN etwas gebracht?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    @rage-empire:

    Ich muss mich nur um das prog auf dem AVR kümmern. den rest macht jemand anders. ich kann mir allerdings das protokoll aussuchen.

    @chr-mt: was macht dich denn so sicher, dass die der anfangsbuchstabe nicht im rest des strings vorkommt?

    @e-fan: ja, hat mir ein wenig gebracht, danke. das mit dem neunten byte ist auch nix, weil dieses imho nicht von den andern bytes unterscheidbar wäre.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2004
    Ort
    Potsdam
    Beiträge
    190
    Dann musst Du eine Reihenfolge festlegen in der die Bytes kommen müssen.
    Beim DMX- oder NRMA-DCC-Signal ist das auch so.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    was macht dich denn so sicher, dass die der anfangsbuchstabe nicht im rest des strings vorkommt?
    Es geht doch nur um das Übertragen von Werten, oder ?
    Naja, wenn ich Dezimalzahlen als string sende, kommt doch logischerweise kein Buchstabe vor
    Wie gesagt, Hex geht auch, im Beispiel ist das Startzeichen das "H"
    Das kommt nun mal nicht in den Hex Zahlen vor .
    Es gibt ja nur 0-F, dann ist Schluss.
    Man kann das "H" dann als Startbedingung nehmen und den restlichen String mit hexval wieder zurückwandeln

    Dim S As String * 5
    Dim O As Word
    Dim I As Word

    '******* Hin *******
    O = 535
    S = Hex(o)
    S = "H" + S 's = "H0127"

    '******* Zurück ********
    s = Right(s , 4)
    I = Hexval(s) 'I=535

    Wenn Du zB. 4 Werte übertragen willst, geht das naürlich auch so.
    Mußt dann halt noch ein Zeichen mehr übertragen, zB. so:

    "HA23DA"
    "HB0342"
    "HC677C"
    "HDF02A"

    und dann die Adresse mit "MID"rausfummeln
    Adresse = Mid(s,2,1)
    Da gehen als Adresse dann alle Zeichen, bis auf'"H", logischerweise.
    Du kannst die Strings natürlich auch aneinanderhängen und jeweils mit Mid
    rausziehen.
    "H23DA0342677CF02A"

    Ist kein "supertolles Protokoll mit allem Schnickschnack",
    funzt aber wunderbar und ist einfach.

    Viele Digitalmultimeter etc. mit RS232 senden ihre Werte zB. auch einfach als Text an die zugehörige Software.

    Gruß
    Christopher

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    das problem ist dann natürlich dass ich dann pro datensatz 20 bytes + header brauche, statt 8 bytes pro header. das sind bei 115200 baud immernoch 5485,7 Datensätze pro Sekunde (mit einem Headerbyte). ... Optimal ist das nicht...

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    Hi,
    das sind bei 115200 baud immernoch 5485,7 Datensätze pro Sekunde
    Reicht das nicht ??

    Klar ist das nicht optimal jedes Byte in zwei Characters zu wandeln.

    Gruß
    Christopher

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    @Goblin: Schau mal, es gibt da schon auch andere methoden
    https://www.roboternetz.de/wissen/in...#Byte-Stuffing
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests