Archiv verlassen und diese Seite im Standarddesign anzeigen : Senden und Empfangen von Daten an einem Pin
Ferdinand
30.08.2017, 22:03
Senden und Empfangen von Daten an einem Pin von einem Port so das man die anderen Pins noch, für was anderes benutzen kann,
ich habe schon überlegt, ob man das mit Schiften und ARYS machen kann.
Bisher konnte ich nur ganze PORTx oder PINx verwenden wie mach ich das wen ich von einem Port ein TX und ein RX Pin bestimme und dort meine Kommunikation passiert.
siehe 1-wire z.B.
https://de.wikipedia.org/wiki/1-Wire
oder
I2C / TWI
oder vlt zu grundlage auch mal das Datenblatt nach DDRx (Data direktion register )
2017 und hier immer noch kein https...
Peter(TOO)
31.08.2017, 02:32
Hallo,
Was soll es genau werden?
Eine Kommunikation zwischen µCs oder nur eine Porterweiterung, weil du zu wenig Pins hast.
Die Kommunikation nimmt man z.B. das UART, welches dann allerdings das Format bestimmt.
Eine andere Möglichkeit ist es I2C zu verwenden, da gibt es jede Menge ICs, auch welche die als Port funktionieren.
Eine Porterweiterung kann man aber auch mit normalen Schiebe-Registern bewerkstelligen.
MfG Peter(TOO)
Hallo Ferdinand,
in den Grundlagen Tutorials zu MC Programmierung ist das ausführlich und auch für Einsteiger gut nachvollziehbar beschrieben.
Kurz zusammen gefasst:
Mit den Datenrichtungsregistern kannst du einzelne Pins unabhängig von einander als Ausgang oder Eingang definieren.
Das gezielte Schreiben und Lesen geht mit bitweisen Undverknüpfungen und Oderverknüpfungen. Bei Bedarf shiftest du das benötigte Bit an die richtige Stelle.
Ferdinand
31.08.2017, 19:26
Hallo Ferdinand,
in den Grundlagen Tutorials zu MC Programmierung ist das ausführlich und auch für Einsteiger gut nachvollziehbar beschrieben.
Kurz zusammen gefasst:
Mit den Datenrichtungsregistern kannst du einzelne Pins unabhängig von einander als Ausgang oder Eingang definieren.
Das gezielte Schreiben und Lesen geht mit bitweisen Undverknüpfungen und Oderverknüpfungen. Bei Bedarf shiftest du das benötigte Bit an die richtige Stelle.
ok das hört sich doch mal gut an das mit den daten richtungen brauch ich ja nur ein mal das kan ja den zur not so bleiben, was für mich eher interisant ist, ist die frage wie stelle ich es an ohne fiel aufwand variablen oder werte erst mal unabhäni vom wert und inhalt darauf mus ich dan schon noch achten und den takt natürlich nicht zu vergessen an einen pin zu setzen und im gegen zug wie bau ich das dan wider zusammen
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.
PS: es gibt sicherlich noch mer beispile was man damit machen kann wie das mit dem Funkmodul.
Hallo Ferdinand,
die passenden Beispiel gibt es in diesen guten Einsteiger Tutorials zur Mikrocontroller Programmierung. Du brauchst nur nach einem zu suchen, das auch zu deinem Mikrocontroller und zu deiner Programmiersprache passe. Da gibt es ein paar gute Tutorials mit guten Beispielen.
Peter(TOO)
01.09.2017, 19:24
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)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.