Forum: Mikrocontroller und Digitale Elektronik Parityfehler-Erkennung MSP430


von Michael H (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Alex (Gast)


Lesenswert?

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

von Michael H (Gast)


Lesenswert?

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. ;-)

von Michael H (Gast)


Lesenswert?

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.;-)

von Michael H (Gast)


Lesenswert?

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.

von Jörg S. (Gast)


Lesenswert?

> 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?

von Jörg S. (Gast)


Lesenswert?

> 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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Michael H (Gast)


Lesenswert?

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!

von Gino B. (gin)


Lesenswert?

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.

von Jörg S. (joerg-s)


Lesenswert?

>geprüft wird auf
>  if (URCTL1 & PE)
Und das Bit wird ständig in einer Schleife geprüft?

von Gino B. (gin)


Lesenswert?

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
Noch kein Account? Hier anmelden.