mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Parityfehler-Erkennung MSP430


Autor: Michael H (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael H (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Autor: Michael H (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.;-)

Autor: Michael H (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael H (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Gino B. (gin)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg S. (joerg-s)
Datum:

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

Autor: Gino B. (gin)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.