hi! momentan bastle ich an einem rs485-koppler. über schalter kann man u.a. parity anpassen (ja/nein ; even/odd). jetzt zur frage: ist der msp430f1611 in der lage parityfehler in irgendeiner weise zu detektieren, oder muss das von hand zu fuß gemacht werden? wenn vom bus daten mit parity kommen und der schalter am koppler auf "parity aus" steht, soll das mit einer led als fehler angezeigt werden.
Im Register UxRCTL gibt es die Statusbits FE (framing error), PE (parity error) und OE (overrun error). Das ist im User's Guide (slau049f.pdf) auf Seite 13-24 (273) beschrieben.
Hallo, habe ich zwar noch nicht gemacht, allerdings hat er MSP430F1611 eine automatische Paritygeneration (PEV Bit - UxCTL). Die Fehlererkennung wird im Kapitel: Automatic Error Detection Seite 13-8 User Guide. Das PE Bit zeigt demnach einen Parity Error an. mfg Alex
Danke für die schnelle Antwort! Kapitel 13 bin ich durchgegangen...keine Ahnung, warum ich das vorher nicht registriert habe. Mal wieder den Wald vor lauter Bäumen nicht gesehen. ;-)
So ich hab das mal getestet (mit RS232 Treiber, UART-Mode) und alles läuft wie es soll...aber irgendwie wird das PE bit nicht gesetzt. Also am MSP ist PENA auf 0 gesetzt , über HTerm schicke ich Daten mit "Parity even". Am Empfänger steht Parity auf none. Natürlich kommt beim Empfänger nur Müll an, aber das PE bit in UxRCTL wird nicht gesetzt. Hier mal die entsprechende Codezeile: if ((U0RCTL & PE) || (U1RCTL & PE)) { P5OUT |= 0x01; //Parityfehler-LED } Im Users Guide findet man bei PE : "When PENA = 0, PE is read as 0." Was will mir das sagen? Arbeite zum ersten Mal mit einem Mikrocontroller und bin deshalb noch sehr unerfahren solche Informationen zu deuten.;-)
Hab gerade noch etwas merkwürdiges festgestellt: Gleiche Einstellungen wie oben beschrieben. Wenn ich "hallo" mit parity even sende kommt "ha" an, wenn ich mit parity odd sende kommt "llo" an. Für die Buchstaben die nicht ankommen wird kein RX-Interrupt ausgelöst. Kann mir das jemand erklären? Es wird doch trotzdem in RXBUF geschrieben, auch wenn die Parity nicht stimmt. Es müsste doch zumindest ein Interrupt ausgelöst werden und irgendwas beim Empfänger ankommen.
> Also am MSP ist PENA auf 0 gesetzt , über HTerm schicke ich Daten mit > "Parity even". Am Empfänger steht Parity auf none. Natürlich kommt beim > Empfänger nur Müll an, aber das PE bit in UxRCTL wird nicht gesetzt. Wenn am MSP die Parity ausgeschaltet ist, kann es auch kein Parity Error geben. Eigentlich logisch, oder?
> wenn vom bus daten mit parity kommen und der schalter am koppler auf > "parity aus" steht, soll das mit einer led als fehler angezeigt werden. Man kann nicht 100%ig erkennen ob die Daten die gesendet wurden stimmen oder nicht. UART ist halt asynchron, d.h. man ist darauf angewiesen das Sender und Empfänger identisch eingestellt sind. Sind sie es nicht, kann man evt. Fehler erkennen (Parity Error, Framing Error) das ist aber Zufall und hängt von den Daten ab die reinkommen.
Auszug aus bereits erwähnter Dokumentation: PE Bit 6 Parity error flag. When PENA = 0, PE is read as 0 0 No error 1 Character received with parity error
Das Problem mit den ausbleibenden Interrupts lag einfach nur daran, dass URXEIE nicht initialisiert war. Noch ein dummer Anfängerfehler. Sorry! @Jörg: Hmm ok. Also wenn der MSP auf even steht und odd reinbekommt wird PE jetzt auch gesetzt. Umgekehrt geht auch. Danke für die Hilfe!
Der Thread ist zwar uralt beschreibt aber genau mein Problem, daher möchte ich ihn nochmal aufgreifen. Das Nachrichtenprotokoll was ich verwende benutzt "Parity Odd". Eines der Bytes innerhalb dieser Nachricht hat eine manipulierte Parity. Diese muss erkannt werden. Leider erhalte ich kein Interrupt wenn ich Bytes mit fehlerhafter parity bekomme. Also genauso wie der Kollege vor mir. Interrupts sind aber eingeschaltet. Die ganze Kommunikation funktioniert soweit. Nur erhalte ich kein Parity Error wenn ich ein byte mit even parity sende und kann somit auch keinen Fehler zurückliefern. U1CTL = CHAR | PENA; /*!< 8bits, odd parity, one stop bit */ geprüft wird auf if (URCTL1 & PE) Bin auch nur für interesannte Gedankenansätze dankbar.
>geprüft wird auf > if (URCTL1 & PE) Und das Bit wird ständig in einer Schleife geprüft?
Jörg S. schrieb: >>geprüft wird auf >> if (URCTL1 & PE) > Und das Bit wird ständig in einer Schleife geprüft? Nein. Bei jedem Rx-Interrupt. Will ja nicht pollen. So wie ich das verstehe müsste ja auch bei falscher Parity ein Interrupt ausgelöst werden.
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.