-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Serielle Verbindung: Wie auf Bytes synchronisieren?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    31.05.2009
    Ort
    Ingolstadt
    Beiträge
    82

    Serielle Verbindung: Wie auf Bytes synchronisieren?

    Anzeige

    Hallo Ihr,

    nachdem ich Wikipedia etc. gewälzt habe ohne Ende und keine Antwort gefunden habe, frag ich mal hier. Ich will auf meinem ATtiny13 eine serielle Datenübertragung (TTL-Level-RS232) implementieren. (Ja, gibt's schon als Codebeispiel, ich wollte es aber zum Lernen gerne selbst machen, und ist ja grundsätzlich auch nicht so schwer.)

    Was ich noch nicht verstanden habe, ist die Synchronisation auf Byte-Ebene: Wie finde ich in einem längeren Bitstrom heraus, was das Start- und was das Stopbit ist? Gerade dadurch, daß die Pause zwischen Start- und Stopbit Null sein kann. Nehmen wir an, der Kommunikationspartner schickt ständig Bytes mit dem Binärwert 10101010. Füge ich ein Startbit (0) und ein Stopbit (1) an, ergibt sich ein kontinuierlicher Strom 01010101010101010101... Wo finde ich hier den Anfang?

    Danke im Voraus!
    Björn

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Hallo,

    ich hatte vor einiger Zeit das gleiche Problem und hab mir damit beholfen, dass ich ein Startbyte eingeführt habe. Dieses Byte hatte einen Wert, welcher von den anderen Bytes niemals erreicht werden konnte. Somit wartet mein Programm immer auf diesen Wert, um sich von selbst zu Synchronisieren.

    Gruß
    Chris

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    31.05.2009
    Ort
    Ingolstadt
    Beiträge
    82
    Nein, das reicht nicht bzw. ist die zweite Stufe -- ich will ja wissen, wo ich in einem Bitstrom den Anfang der Bytes finde. Solange ich den nicht kenne, kann ich auch den Wert der Bytes nicht bestimmen und also auch das Startbyte nicht erkennen. Wenn ich aus dem Bit- erstmal sauber einen Bytestrom gemacht habe, brauche ich noch ein Startbyte.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    Wenn du ganze Bytes überträgst, kannst du doch auch nur an jedem Anfang die Syncronisation starten. Der Lese Befehl braucht ja schließlich ganze Bytes, oder hast du dir da etwas selbst geschrieben, was bits empfängt?
    Alternativ kannst du auch eine best. Bitfolge als Start/Stop befehle definieren, du musst nur darauf achten, dass diese Bitfolge sonst nicht vorkommen kann! Mit nur einem Bit wirds schwierig, das würde ich höchstens mit einem zweiten Pin (Int) machen, aber ich würde schon mehrere Bits als Start/Stop Kondition verwenden.

    Gruß
    Chris

    EDIT:
    In welcher Sprache willst du dass den machen?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von bjoerng Beitrag anzeigen
    Nein, das reicht nicht bzw. ist die zweite Stufe -- ich will ja wissen, wo ich in einem Bitstrom den Anfang der Bytes finde. Solange ich den nicht kenne, kann ich auch den Wert der Bytes nicht bestimmen und also auch das Startbyte nicht erkennen. Wenn ich aus dem Bit- erstmal sauber einen Bytestrom gemacht habe, brauche ich noch ein Startbyte.

    Du sendest ja 10 0der 11 (bei 2 Stop) Bits 1 Start 8 Data 1 oder 2 Stop Bit. Nach 10 0der 11 Bit ist ein Byte fertig das musst Du halt festlegen. Wenn jetzt mitten im Byte gestartet wird kommt halt Müll dafür wurde CRC erfunden. Das selber basteln ist möglich aber nicht empfehlenswert, Hartware RS 232 fragt jedes BIT ca. 16 x ab ob es H oder L ist, bei mehr H als L gild das Bit dann als H sonst als L. Mit ASM habe ich es allerdings nur so gemacht.....

    1 Länge vom Startbit ermitteln + 1/2 der Zeit dann nächstes Bit (in der Mitte testen) + Startbit Zeit nächsten Bit (in der Mitte Testen)............ Durch die Startbit Zeit hatte ich babei gleich eine Automatische Baudraten Erkennung. Mühselig das überläßt man besser die Hartware. Nach 10 Bit kommt das nächste Start Bit.....
    Hat super geklappt.

    Gruß Richard

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    31.05.2009
    Ort
    Ingolstadt
    Beiträge
    82
    Zitat Zitat von Richard Beitrag anzeigen
    Wenn jetzt mitten im Byte gestartet wird kommt halt Müll dafür wurde CRC erfunden.
    Genau das ist mein Problem. Wenn mitten im Byte gestartet wird, kommt Müll -- das kann ich aber erst eine Ebene höher erkennen und dann bitten, daß die unterste Schicht auf die nächste steigende Flanke als Startbit aufsetzen soll. RS232 erkennt das aber irgendwie direkt, und ich verstehe nicht, wie das möglich sein soll.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von bjoerng Beitrag anzeigen
    Genau das ist mein Problem. Wenn mitten im Byte gestartet wird, kommt Müll -- das kann ich aber erst eine Ebene höher erkennen und dann bitten, daß die unterste Schicht auf die nächste steigende Flanke als Startbit aufsetzen soll. RS232 erkennt das aber irgendwie direkt, und ich verstehe nicht, wie das möglich sein soll.
    jede Übertragung hat einen Anfang Ende Pause Anfang... wenn schön mit gezählt wird klappt das sehr gut, jedenfalls damals bei mir. ansonsten Suche einmal nach
    Bit-Arbitrierung mir ist das etwas zu hoch... Unter http://de.wikipedia.org/wiki/Controller_Area_Network ist da etwas zu verlinkt.

    Gruß Richard

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Du müsstest nach jedem potentiellen Start-Bit ( 1-->0 Übergang ) schauen, ob das 10-Bit dann eine Stoppbit (1) sein kann. Das müsstest du theoretisch machen, bis du keine Framing-Errors mehr dazwischen hast (wo das eben nicht der Fall ist).

    Ist aber IMHO eine recht theoretische Situation. Meistens werden ja doch sowas wie Messages gesendet, und wenn zwischen zwischen solchen messages auch nur 1 Byte lang Pause ist, ist dein Quer-einsteiger-empfänger schon wieder dabei.

    Übrigens, wenn z.B USASCII gesendet wird (Text ), ist auch der Stopp-Bit-übergang immer 0-->1
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wenn die Daten mit nur 1 Stopbit und ohne extra Pausen gesendet werden, kann man Pech haben und es dauert eine ganze Weile bis man die richtigen Startbits gefunden hat. Je nach den übertragenen Daten verschiebt sich das angenommene Startbit etwas, bis man an der richtigen Stelle landet. Bei 2 oder mehr Stopbits geht es schneller und braucht höchstens 8 - 10 Bytes bis man richtig liegt.

  10. #10
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo!

    Ich habe mal mehrere Bits ohne Start- und Stopbits dazwischen versendet, wobei im ersten Byte wurde die Anzahl der nachfoldenden Bits kodiert (1 bis FFh). Die Pakete ("bursts") haben natürlich am Anfang und Ende Start- und Stoppbits und bei mehreren nötige Pausen dazwischen.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. RNControll Serielle Verbindung mit linux
    Von totix800 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 21
    Letzter Beitrag: 09.07.2010, 14:28
  2. Serielle Verbindung (UART) von mehreren ATmega32
    Von baumagnat im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 11.01.2010, 06:12
  3. RP6 über serielle Verbindung
    Von mexxmilian im Forum Robby RP6
    Antworten: 8
    Letzter Beitrag: 02.12.2007, 13:50
  4. meshcube, serielle verbindung zu servo controller
    Von trinix im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 23.05.2007, 09:53
  5. Serielle Verbindung 2er Atmeg8535 ????
    Von xlostx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 24.03.2006, 21:10

Berechtigungen

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