Forum: PC-Programmierung Serial-Bibliothek von Ramon de Klein


von Owen S. (senmeis)


Lesenswert?

Hello,

ich verwende gerade die overlapped Methode der Bibliothek von Ramon de 
Klein 
(http://www.codeproject.com/KB/system/serial.aspx?msg=3519759#xx3519759xx) 
für die serielle Schnittstelle mit Visual Studio 2008.

Das Problem ist, manchmal meldet sich die Warnung: "Input parity error" 
beim Empfangen obwohl die Übertragung in Ordnung ist.

Der Code:
1
if (eEvent & CSerial::EEventError)
2
        {
3
          printf("\n### ERROR: ");
4
          switch (serial.GetError())
5
          {
6
          case CSerial::EErrorBreak:    printf("Break condition");      break;
7
          case CSerial::EErrorFrame:    printf("Framing error");      break;
8
          case CSerial::EErrorIOE:    printf("IO device error");      break;
9
          case CSerial::EErrorMode:    printf("Unsupported mode");      break;
10
          case CSerial::EErrorOverrun:  printf("Buffer overrun");      break;
11
          case CSerial::EErrorRxOver:    printf("Input buffer overflow");  break;
12
          case CSerial::EErrorParity:    printf("Input parity error");    break;
13
          case CSerial::EErrorTxFull:    printf("Output buffer full");    break;
14
          default:            printf("Unknown");          break;
15
          }
16
          printf(" ###\n");
17
        }

Hat jemand Erfahrung gemacht?
MfG
Senmeis

von U.R. Schmitt (Gast)


Lesenswert?

Einfach mal ne dumme Idee:
könnte es sein, daß Dein serieller Takt an der Grenze zur zulässigen 
Abweichung liegt? Je weiter 'hinten' ein Bit übertragen wird, desto 
stärker summiert sich der Taktfehler auf. So könnte es sein, daß die 
Daten noch korrekt rüberkommen aber das Parity Bit ab und an falsch ist.

von Owen S. (senmeis)


Lesenswert?

Kaum möglich würde ich sagen, da ich 2400bps verwende. Sicherlich liegt 
das an der Bibliothek, aber vielen Dank trotzdem.

Senmeis

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Owen Senmeis schrieb:
> Kaum möglich würde ich sagen, da ich 2400bps verwende.

Nein, damit hat das nichts zu tun. Sondern damit, wie Du auf der dem PC 
gegenüberliegenden Seite diese Baudrate erzeugst.

Wenn das z.B. ein Microcontroller ist, der mit einem internen 
RC-Oszillator arbeitet, dann ist die Chance hoch, mit der Baudrate 
"daneben" zu liegen.

Das geht sogar mit einem quarzstabilisierten Oszillator, wenn der Quarz 
kein sogenannter "Baudratenquarz" ist (und die UART-Hardware des µC kein 
Feintuning zulässt). Dabei tritt eine vom Teilungsverhältnis abhängige 
systematische Abweichung vom Soll auf - ist die deutlich größer als 1%, 
gibt es Empfangsfehler.

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.