Servus, ich habe eine merkwürdige Sache bei der RS232-Kommunikation zw. AT90CAN128 und Terminal V1.90b gefunden. Am Anfang konfiguriere ich das RS232 von den beiden wie folgendes: Baudrate = 9600; Datebits = 8; Parity = none und die Komminikation ist in Ordnung. Dann mache ich jeweils eine Änderung von Parity entweder bei AT90CAN128 oder bei PC. Hier die Ergebnisse: PC = odd und MCU = no => PC nach MCU richtig, MCU nach PC falsch; PC = no und MCU = odd => PC nach MCU falsch, MCU nach PC richtig; PC = odd und MCU = even => PC nach MCU richtig, MCU nach PC richtig; PC = even und MCU = odd => PC nach MCU richtig, MCU nach PC richtig; Frage 1: Ist es so, ein Gerät wird nicht das Parity-Bit überprüfen wenn diese Funktionalität ausgeschaltet ist, ohne die Daten zu verfälschen (Zeilen 1 und 2)? Frage2: Was ist mit odd und even parity? Diese Überprüfung arbeitet nicht (Zeilen 3 und 4). Hat jemand sowas erfahren? Danke Senmeis
Beim Zuschalten der Paritätsüberprüfung wird die Bitfolge bei der Übertragung um ein Bit länger. Die die Folge abschließende Stop-Flanke kommt natürlich um ein Bit später. Wenn man auf die Paritätsprüfung verzichtet, entfällt die Kontrolle der Übertragung. Meist läuft die aber einwandfrei, also kann man in den meisten Fällen auf Paritätskontrolle verzichten. Bei einem Datenwort kann die Zahl der Einsen gerade(even) oder ungerade (odd) sein. Das Paritätsbit ergänzt, wenn es auf odd gestellt ist, die Anzahl der Einsen auf ungerade. Hat z.B das Datenbyte ungerade Zahl von Einsen, dann kommt im Paritätsbit keine dazu. Ist im Datenbyte die Zahl der Einsen gerade, ergänzt das P- Bit mit einer Eins auf ungerade. Auf der Empfängerseite kommt bei fehlerfreier Übertragung immer ein Satz von 9 Bit mit ungerader Zahl Einsen an. Das kann mit einem einfachen Schieberegister +Logik (oder einem toggle-Flip-Flop) kontrolliert werden.
Vielen Dank. Ich hatte gedacht, die empfangenen Datenbits werden falsch angezeigt falls die Paritätsbits von den beiden Enden verschieden eingestellt sind. Nun erkenne ich: die Datenbits werden immer korrekt dargestellt werden wenn alle Bits auf dem Kanal ungestört übertragen werden, obwohl die Paritätsbits verschieden sind! Wenn so ist, muss der Empfänger etwas machen, wenn die Paritätsüberprüfung scheitert, oder? Was macht der Empfänger normalerweise? Eine Wiederholung anfordern? Danke Senmeis
>Wenn so ist, muss der Empfänger etwas machen, wenn die >Paritätsüberprüfung scheitert, oder? >Was macht der Empfänger normalerweise? >Eine Wiederholung anfordern? Der Empfänger macht das erforderliche, so wie es im vereinbarten Protokoll vorgegeben ist. Das hängt natürlich von der Anwendung ab. Beim Übertragen einer Uhrzeit im Sekundentakt ist es vielleicht unnötig, die letzte Uhrzeit erneut zu übertragen, da ja in der nächsten Sekunde die nächste Übertragung stattfindet. Überträgt man aber z. B. Konfigurationsdaten, sollten diese natürlich stimmen und bei einem Fehler erneut angefordert/übertragen werden.
Also ich benutze ein mega128 mit STK500+501. Über ein in VB 2005 geschriebenes Programm (mit serialport-komponente) möchte ich mit dem MC kommunizieren. Übertragung mitels USART funktioniert auch in beide Richtungen. Wegen der Datensicherheit möchte ich die Übertragung mit einem Parity-Bit machen. Aber dies funktioniert igendwie nicht so recht :/ USART-Einstellung MC: baud 38400 (U2X, doppelte geschwindigkeit von eingestellten 19200) 8 databits 1 stopbit PC: baud 38400 8 databits 1 stopbit Wenn ich in MC und VB odd-parity (oder even) einstelle, dann ist beim senden von PC zum MC immer das Parity_error-bit gestzt. das komische ist aber, dass die daten richtig ankamen muss ich vielleicht auf 9 bits umsteigen um das parity-bit auszuwerten oder wo könnte das Problem liegen? zur eionstellen d. parity habe ich die bits UPM00 bzw UPM01 im UCSR0C gesetzt (wie im Datenblatt beschrieben)
Die Übermittlung des Parity-Bits bei einer seriellen Übertragung funktioniert nur dann wie gewünscht, wenn Sender und Empfänger passend darauf eingestellt sind. Bei halbwegs nach Norm funktionierenden Schnittstellen (AVR-MEGA-Serie) oder auch PCs, ist das Parity-Bit ein Zusatz-Bit, das übertragen wird, aber nicht die Anzahl der DATEN-Bits ändert. Bei funktionierenden Anwendungen sind Sender und Empfänger AUF DIE GLEICHE WEISE (!) konfiguriert. Das Parity-Bit wird beim Sender automatisch eingefügt und beim Empfänger überprüft. Die empfangenen DATEN-Bits werden vom Empfänger dem weiterverarbeitenden Programm bereitgestellt und bei Übertragungsfehlern wird gleichzeitig gemeldet, wenn ein Parity-Error vorliegt. Sende ich 9 Daten-Bits ohne Parity wird der Empfänger das letze Daten-Bit als Parity-Bit bewerten. Ob das passt, ist reiner Zufall... Wie dann der Fehler behandelt wird, ist Sache des Programmierers! ----------------------------------------------------------------- Also noch mal nachschauen: Sind Sender und Empfänger richtig konfiguriert? Gruß Ralli
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.