Moin zusammen.
Ich habe folgende Aufgabenstellung:
Es soll ein Attiny gesteuert werden, der einen Gerätetest durchführt und Daten sammelt. Diese sollen dann via RS232 an einen Rechner übertragen werden.
Momentan erfolgt die RS232 Routine im Attiny mittels Software, bei 15Mhz, 19200Baud und Polling. Die Steuerung erfolgt mit Asciizeichen.
Der PC pingt zuerst "P" im Sekundentakt, bis der Controller das P zurückgibt. Dieser pollt nach dem Reset seine Rx Leitung, bis er ein P erkennt und antwortet mit 2ndem P. Damit erkennt der PC, dass ein Gerät vorhanden ist.
Bis hierhin klappt alles.
Danach sendet der PC ein "O" um die Einstellungen zu setzen, der µC antwortet mit "S?" woraufhin der PC einen Parameter sendet. Danach passiert das noch 2x bis die Konfiguration abgeschlossen ist. Also immer Frage vom µC "S?", "T?", "N?". Der Rechner antwortet mit dem Datenbyte.
Es ist nun so geregelt, das der Rechner auf die Frage wartet, der µC auf das Datenbyte. Hierbei scheint es nun zu passieren, dass der PC oder Controller den Einsatz verpasst, und beide warten auf den anderen (Deadlock).
Die Abfrage, ob der Controller geantwortet hat, erfolgt folgendermaßen:
Do Until Me.SerialPort1.ReadChar()="S?"
Loop
Eigentlich müssten doch alle Zeichen im Buffer des Ports liegen, oder? Dennoch bekommt der PC die Sendung fast immer nicht mit. Ich denke das Problem liegt in der PC Schleife, hat jemand eine Ahnung oder Lösung?
Ich arbeite dabei in einem separaten Thread, damit die zweite Schnittstelle einen anderen Tester bedienen kann.
Lesezeichen