Zitat Zitat von Ferdinand Beitrag anzeigen
kannst du mir nochmal ein beispil bringen, wie könnte ich das umsetzen ich habe mir das schonmalüberlegt wolte mit einem Funkmodul von Conrad was senden seriel mit hilfe von nem manchaster code also einer XOR verknüpfung hab das bit weise senden der variablen inhalte aber nicht an einen pin bekommen da ich da wol einen knotten im kopf habe ich was das es den IC2 und den UART gibt möchte es erstmal so noch lernen bis ich C richtig verstehe.
Du musst jedes Bit einzeln und nacheinander auf dem Pin ausgeben.

Nun kommt das Problem, wie erkennt der Empfänger das richtig und kann es wieder zusammensetzen?

i2C macht eine synchrone Übertragung.
Zusätzlich zur Datenleitung gibt es noch eine Takt-Leitung. Wen z.B. der Takt von 0 auf 1 wechselt übernimmt der Empfänger das Bit.
Allerdings brauchst du zusätzlich noch einen Mechanismus um den Anfang der Bit-Sequenz zu erkennen.


z.B. RS-232 verwendet eine asynchrones Protokoll.
Sender und Empfänger verwenden dazu je einen Oszillator, wobei beide mit der selben Frequenz arbeiten müssen. Dieser Takt bestimmt dann die Bit- bzw. Baud-Rate.
Die Leitung hat einen definierten Ruhezustand z.B. 0, welcher für eine unbegrenzte Zeit anliegen kann, wen z.B. keine Daten gesendet werden..
Der Sender fängt dann seine Übertragung mit einem Start-Bit, welches den Pegel 1 hat.
Dann folgen die Daten-Bits. Am Ende wird dann eine 0 als Stop-Bit angehängt.
Wichtig ist, dass die Bits mit einem konstanten Timing ausgegeben werden.

Der Empfänger wartet bis er ein Startbit findet. Dann liest er die Datenbits, d.h. er liest die Leitung in festen zeitlichen Intervallen, entsprechend der Baud-Rate, ein und kontrolliert ob ein Stop-Bit folgt.

Praktisch tastet der Empfänger z.B. mit der 16-fachen Baud-Rate, die Leitung ab.
Erkennt er eine Flanke, welche ein Start-Bit sein könnte, wird nach 8 Takten nochmals abgetastet, dies wäre dann mitten in der Bitzelle. Liest er nach 8 Takten wieder eine 0, war die Flanke eine Störung und es wird wieder auf eins Start-Bit gewartet.
Ist das Start-Bit OK, wird alle 16 takte, also immer mitten in der Bit-Zelle ein Datenbit eingelesen.
Zu Letzt wird dann das Stop-Bit auch noch geprüft.

Praktisch gibt es verschiede gebräuchliche Format, wie z.B. "8,n,1".

Nach dem Startbit folgen 8 Daten-Bits. (Gebräuchlich sind 5-9 Bits, 5 Bits waren bei den Fernschreibern üblich, 8 ist Standard und bei 9 hat man noch ein Bit für zusätzliche Aufgaben).
n bedeutet, dass kein Parity-Bit übertragen wird. ( Das Parity kann entfallen (n), die Gesamtzahl der 1 inklusive dem Parity muss gerade sein (even) oder Ungerade (odd)
1 ist die Anzahl an Stop-Bits. (Üblich sind 1, 1,5 oder 2.)


1.5 und 2 Stop-Bits lassen dem Empfänger etwas Zeit für die Verarbeitung. Ein Telex war eine elektromagnetisches Gerät ohne einen Zwischenspeicher. Nach dem Empfang musste das Zeichen erst gedruckt werden, bevor das nächste empfangen werden konnte. Aber auch bei µCs und hohen Bit-Raten braucht es manchmal etwas Zeit.

Wenn z.B. bei einem Display einzelne Zeichen verloren gehen, kann man den Sender auf 2 Stop-Bits konfigurieren und den Empfänger auf nur eines. Der Empfänger ignoriert das zweite Stop-Bit, kann aber in dieser Zeit die Daten auswerten.
Dies ist die einzige Variante, bei welcher Sender und Empfänger unterschiedliche Parameter haben dürfen, alle anderen unterschiedlichen Kombinationen funktionieren nicht, bzw. erzeugen im Empfänger Fehler.

Der Manchester-Code sendet Daten und Takt in einem einzigen Signal, man kann aus dem Datenstrom den Takt wieder zurückgewinnen. So bekommt man im Prinzip eine synchrone Übertragung. Der Manchester-Code wurde ursprünglich bei Band- und Plattenlaufwerken verwendet. Bei beiden Geräten hat man das Problem, dass der Vorschub, bzw. Drehzahl. nicht wirklich konstant sind. Anfangs hatte man eine eigene Spur für das Taktsignal verwendet, das benötigt aber einen zusätzlichen Lesekopf und Speicherkapazität. Ein Problem ist nun, dass man eine riesigen Datenstrom bekommt und keine Ahnung hat wo dieser anfängt, weil man keine Start- und Stop-Bits verwenden kann.
Mit 8 Bit kann man 256 unterschiedliche Zeichen übertragen, der Trick besteht nun darin, dass man eine Regel aufstellt, welche z.B. nur maximal 4 Nullen direkt nacheinander erlaubt, auch zwischen zwei übertragenen Bytes. Hätte das Zeichen 5 Nullen hintereinander fügt man einfach eine zusätzliche 1 ein. OK, für diese Zeichen braucht man dann 1 Bit mehr. Der Empfänger eliminiert dann einfach nach 4 Nullen die nächste 1.
Die nun ungültigen Zeichen, mit z.B. 5 oder mehr Nullen hintereinander, kann man dann als Steuerzeichen verwenden.
Damit markiert man dann den Anfang eines z.B. 256 Byte langen Blocks. Mit einem anderen kann man dann das Ende auch noch markieren.
Liest man jetzt eine Spur einer Festplatte wartet man bis man solch ein Steuerzeichen im Datenstrom entdeckt. Typischerweise folgt dann nach dieser Markierung die Spur-, Kopf und Sektor-Nummer. Hat man die richtige Stelle gefunden, liest man die Daten dahinter ein, sonst wartet man auf den nächsten Sektor. Die Spur-Nummer benötigt man um Positionier-Fehler erkennen zu können.

MfG Peter(TOO)