Gast
#200473
Hallo, folgendes Problem: Ich sende mit einem AVR ATmega16 (mit externem Quarz ohne Beschaltung direkt angeschlossen) per serieller Schnittstelle einzelne Bytes, im Abstand von einer einstellbaren Pausenzeit. Diese Daten kommen auch am PC an, werden also im Terminalprogramm richtig angezeigt. Nun möchte ich diese Daten in mit einem C++ Programm verwenden. Also einfach nur: immer wenn ein Byte auf der RS232 ankommt, soll das Programm es aufnehmen und speichern. Ich habe dazu ein Programm geschrieben, was genau diese Aufgabe auch erfüllt. (siehe empfangenPC.cpp im Anhang zum Beitrag) ABER: Das klappt nur, wenn die Bytes in großem zeitlichen Abstand ankommen. Wenn ich den Abstand verringere, sind die empfangenen Bytes nur manchmal richtig, bei sehr kleinem Abstand fast immer falsch. Es werden also falsche Zahlen abgespeichert und ausgegeben. Damit meine ich nicht die Veränderung der Baudrate!! Bei 1200 und 9600 Baud tritt derselbe Fehler auf, wobei im Terminalprogramm immer alles richtig ankommt. Hat jemand eine Idee, woran das liegen könnte? Ich habe scheinbar noch nicht alles verstanden, eingefallen ist mir nur, folgende Befehle in verschiedenen Kombinationen mit einzufügen (teilweise gefunden bei der Forenrecherche), was aber bisher alles nicht zum Erfolg führte: ------------ SetCommMask (com1port, EV_RXCHAR); ------------ //if (WaitCommEvent(com1port, &dwCom1Status, 0)) //{ // ReadFile (com1port, txt, 1, &bytes_read, NULL); //} ------------ ClearCommError(com1port, &dwError, NULL); if (WaitCommEvent(com1port,&dwCom1Status, NULL)) { ReadFile (com1port, txt, 1, &bytes_read, NULL); } else cout << "\nFehler bei WaitCommEvent"; break; ------------ //if (dwCom1Status & EV_RXCHAR) //{ // ReadFile (com1port, txt, 1, &bytes_read, NULL); //} Ich würde mich sehr freuen, wenn mir jemand einen Tipp geben kann. Vielen Dank! Martin