Hi,
ich bastle an einem kleinen RPI Projekt. Das Ziel des ganzen ist es, den Raspberry per RS485 mit ein paar ATmegA Controllern zu vernetzen. Der Raspberry soll dabei als Master agieren. Ein Protokoll habe ich schon implementiert.
Hardwaremäßig verwendet ich einen MAX3485 und alle Teilnehmer mit 3,3V. Der MAX ist mit der seriellen Schnittstelle des RPI verbunden. Um sehen zu können, was auf meinem Bus passiert habe ich einen USB - Seriell Wandler mit RS485 Receiver, am Laptop angeschlossen somit kann ich die Kommunikation recht gut nachverfolgen.
Soweit funktioniert das auch. Der Raspberry sendet, der ATmegA antwortet. Am PC ist alles wunderbar. Nur der Raspberry empfängt immer wieder falsche Bytes, mitten in einem Telegram. Ich habe keine Ahnung warum. Da ich zuerst am RS485 Transceiver gezweifelt habe, habe ich auch mal die Daten zwischen Transceiver --> Raspberry abgegriffen. Alles wunderbar.
Das ganze ist bisher recht rudimentär programmiert.
Hier mal der Code wie ich einen request an den ATmegA sende:
public int[] read(int device, int readData, int count) /*throws ErrorClass*/{
// fest 8 Bytes zurückgeben
int[] returnData = new int[this.PAY_LOAD];
try{
//Daten Anfordern
this.readComplete = false;
write(device, readData,0,0);
// Warten das übertragung beendet, besser wäre eigener Thread
long startTime = System.currentTimeMillis();
while((!this.readComplete) && ((startTime + this.receiveTimeout)>System.currentTimeMillis())){
//Thread.sleep(1);
}
if(!this.readComplete){
System.out.println("Timeout occured while receiving data");
return null;
}
}catch(Exception exp){
this.trace.exception(this.alias, exp);
return null;
}
return(returnData);
}
Alles anzeigen
Beim empfangen wird ein event ausgelöst, das sieht so aus:
this.rs485Bus.addListener(new SerialDataListener() {
@Override
public void dataReceived(SerialDataEvent event) {
//Write Data to receive Buffer
receive(event.getData().getBytes());
// print out the data received to the console
//System.out.print(event.getData());
}
});
Hatte jemand mal ein ähnliches Problem oder kann mir einen Typ geben, was ich noch versuchen kann? Ich verstehe nicht wie auf dem Bus die richtigen Daten anliegen können, der Raspberry jedoch die falschen einliest...
Schonmal Danke und viele Grüße
Matthias