Gast
#417510
Hallo zusammen. Ich habe ein Problem. Ich möchte mit einer C-Routine Daten durch eine RS232 Schnittstelle empfangen und in einem Zahlenfeld speichern. Das Versenden der Daten funktioniert bereits. Stand der Dinge: Ich habe einen Controler (ATMEGA168) mit welcchem ich mit einer eingestellte Baudrate ein einfaches String z.B. 'R' versende. Es ist eine Dauerschleife, so daß der Controller dauernd 'R' sendet. Mit einem Terminal kann ich die daten empfangen, dauernd nur 'R'. Habe mich mit der RS232 Schnittstelle beschäftigt. Befor man Daten mit dieser Empfangen kann gilt es zunächst einige einstellungen durchzuführen. HANDLE OpenComm(char* Port) { // Öffnet den Port und gibt ein Handle zurück HANDLE hCom = CreateFile(Port, // z.B. "COM1", GENERIC_READ|GENERIC_WRITE, //zum Senden und Empfangen 0, // Für comm devices exclusive- // access notwendig 0, // Keine security attributes OPEN_EXISTING, // Für comm devices notwendig 0, // Kein overlapped I/O 0); // Für comm devices muss NULL sein if (hCom == INVALID_HANDLE_VALUE) ShowLastError("CreateFile: "+AnsiString(Port)); return hCom; void SetDCB(HANDLE hCom) { DCB dcb; // Device ControlBlock BOOL fSuccess = GetCommState(hCom, &dcb); // DCB lesen if (!fSuccess) ShowLastError("GetCommState"); dcb.BaudRate = 9600; // Baudrate=9600 dcb.ByteSize = 8; // 8 Datenbits dcb.Parity = NOPARITY; // keine Parity dcb.StopBits = ONESTOPBIT; // 1 Stopbit // SetCommState konfiguriert die serielle Schnittstelle fSuccess = SetCommState(hCom, &dcb); if (!fSuccess) ShowLastError("SetCommState"); void SetReadTimeouts(HANDLE hCom) { COMMTIMEOUTS t; // Alle Wert in Millisekunden // Werte für ReadFile: t.ReadIntervalTimeout=100; // Zeit zwischen zwei Zeichen t.ReadTotalTimeoutMultiplier=0; // pro Zeichen t.ReadTotalTimeoutConstant=1; // Werte für WriteFile: wenn beide 0 sind, kein Timeout // beim Schreiben t.WriteTotalTimeoutMultiplier=0; t.WriteTotalTimeoutConstant=0; if (!SetCommTimeouts(hCom,&t)) ShowLastError("SetCommTimeouts"); Diese Einstellungen muß man zum emfangen von Daten machen. Ich habe Einstellungen beim Controller von : Baudrate 115400 Baud 8 Datenbits keine Parity 1 Stopbit Und möchte die Daten mit der Routine ReadFile(hComReceive, // handle des Com-Ports Data, // Adresse des Datenpuffers n, // Anzahl der zu lesenden Bytes &NumberOfBytesRead, // Adresse übergeben 0); // kein overlapped I/O empfanengen und das Data Datenpuffer in ein Zahlen feld speichern. Ich hatte bis jetzt keinen Erfolg. Kann mir jemand sagen, welche Einstellungen ich noch zu meinen Controllereinstellungen am PC vornehmen muß bei den Enstellroutinen? Was hat es mit der Funktion SetTimeouts auf sich? David