Hallo zusammen,
ich möchte von einer automotive Komponente mit LIN Anschluss ein Telegramm anfordern und den Inhalt auf dem PC (Laptop) darstellen. Ich habe einen LIN auf RS232 Wandler (nur Pegelanpassung und Splitter auf zwei Adern Rx, Tx).
Mein Problem: Meine Applikation auf dem Laptop spielt LIN Master und muss also das Telegramm einleiten (siehe auch [1]). Das bedeutet, dass ich die Sequenz:
[sync break] [sync field] [id+parity]
senden muss. Jetzt ist es blöderweise so, dass das sync break aus 13 konsekutiven Nullen besteht (gefolgt von einer geringen Anzahl Einsen). Das bedeutet, dass ich das Stop-Bit (eine 1) ausschalten muss, sonst kann ich nicht mehr als 8 konsekutive Nullen senden. Sobald ich aber [sync field] und [id+parity] sende, muss das StopBit wieder aktiv sein. Die Vorgehensweise wäre also Folgende:
Comport.NumStopBits := 0; Comport.Send(0x001F); // sync break bestehend aus 1 Startbit (eine 0), 8 Nullen, ein Startbit, 3 Nullen, 5 folgende unvermeidbare Einsen
Comport.NumStopBits := 1; Comport.Send(0x55); // sync field Comport.Send(0xD6); // id + parity
Leider funktioniert das nicht. Durch das Umschalten des StopBits nach dem Senden des Sync-Break entsteht eine Verzögerung, die bestimmt 10 Bit lange ist. Der Slave antwortet nicht. Ich nehme zumindest an an, dass es daran liegt, sonst fällt mir im Moment nichts ein. Ich habe auch schon überlegt nur ein einziges Byte als Sync Break zu senden, aber mit einer geringeren Baudrate. Aber auch hier entsteht beim anschließenden Umschalten der Baudrate eine größere Verzögerung.
Habt Ihr schon mal etwas ähnliches gemacht? Wie seid Ihr vorgegengen?
Danke im Voraus,
Gruß,
Gerhardt Hohn
[1]