Hallo Zusammen, ich interessiere mich dafür, wie bei meinem Arduino Uno R3 mit dem Atmel 328P die Abtastung beim Empfangen über UART funktioniert. Ich habe auch schon einiges gesucht und bin dabei darauf gestoßen, dass es sich hier um einen "major vote" handelt, d.h. jedes bit wird 3 mal abgetastet. Die Intervalle zwischen den drei Abtastungen hängen natürlich von der baud-rate ab. Als Wert wird das weitergegeben, was mindestens 2 mal getastet wurde (major vote), also high oder low. Soweit so gut. Aber das reicht mir nicht. Ich würde gerne noch mehr darüber wissen. Wann wird jeweils abgetastet? Zählt z.B. eine fallende Flanke als erster Abtastwert? Oder wird (evtl abhängig von der Baud-rate) z.B. 1µs nach der fallenden Flanke das erste mal abgetastet? und wann wird das zweite und das dritte mal abgetastet während der Dauer eines Bits? Bzw. wie ist es, wenn zwei low-bits hinter einander folgen, dann gibt es ja garkeine fallende Flanke, was ja eher dafür sprechen würde, dass nach dem Startßbit, bei dem ja auch die synchronisierung stattfindet durchgehend mit einer konkreten clock abgetastet wird. Aber wie ist diese Abtastung aufgeteilt? Welche Zeiträume sind zwischen den einzelnen Abtastungen, bzw. zwischen "beginn" eines Bits und der ersten Abtastung? Wie gesagt, dass diese Zeiten abhängig von der Baud-Rate sind ist mir klar, aber ich würde trotzdem gerne mich genauer darüber informieren, was für Zeiträume das konkret sind. Ich wäre sehr dankbar, wenn mir jemand irgend welche Literaturempfehlungen, Datasheets oder Application notes geben könnte, worin dies erklärt ist. Ich lese die auch gerne durch, verlange jetzt von keinem, dass er hier einen Vortrag über die Abtastweise von UART schreibt. Nur meine Suche über derartige Quellen war leider ziemlich erfolglos, weshalb ich nun hoffe dass hier jemand ein paar gute Quellen kennt, wo ich mich darüber informieren kann. Schon mal Danke vorab :)
noob schrieb: > Zählt z.B. eine fallende Flanke als erster Abtastwert? Dazu müsste die Flanke mit dem UART-Taktgenerator synchronisiert sein, kann sie aber nicht, weil der Sende-UART keine Ahnung vom Clock des Empfänger-UARTs hat.
Wie wäre es, wenn du mit dem Datenblatt des Controllers anfängst? Im Kapitel "USART0" stehen jede Menge Informationen, speziell im Abschnitt "Asynchronous Data Reception".
noob schrieb: > aufgeteilt? Welche Zeiträume sind zwischen den einzelnen Abtastungen, > bzw. zwischen "beginn" eines Bits und der ersten Abtastung? Wie gesagt, > dass diese Zeiten abhängig von der Baud-Rate sind ist mir klar, aber ich > würde trotzdem gerne mich genauer darüber informieren, was für Zeiträume > das konkret sind. Rx wird mit 16xBaud abgetastet, das ergibt 16 samples pro bit. Wenn Rx idle ist, wird die erste Abtastung mit Log. 0 als Anfang des Startbits gesehen. Danach werden (beim Startbit) die Samples 8, 9 und 10 auf Log. 0 verglichen. Wenn zwei oder mehr Log.1 sind, wird der Startbit verworfen. Beim Databits werden die Samples 8, 9 und 10 miteinander verglichen und der Wert von mindestens 2 gleichen Samples wird als Bitwert genommen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.