Ceos
04.05.2009, 16:10
ich habe nen RS485 bus, den ich mit 1MBaud betreibe, beide controller lauefn auf 16MHz und tauschen sich master slave mäßig untereinander aus, der master sagt dem slave über eine enableleitung wann er senden darf
jetzt ist das problem, dass der master beim empfangen scheinbar probleme hat, er schaltet die enableleitung aus, noch bevor das byte überhaupt komplett da ist.
die warteschleife ist ganz einfach
while(!(UCSRA0 & RXC0))
{
if(timeout) return;
}
das timeout tritt todsicher NICHT ein, hab schon mit pin toggle und oszi nachgeprüft
auch hab cih mit dem oszi die empfangsseite des master beobachtet, JEDES byte kommt gleichmäßig an, nur bekommt der master hin und wieder scheinbar was in den falschen hals und kotzt dann rum, dann gehts wieder ein paar mal und dann wieder zerhäckselt
die RS485 controller tausche ich jetzt nochmal aus, hatte anfänglich einen dabei, der ein problem hatte das potetial am DO auf high zu halten, der ist einfach zusammengebrochen, nachdem man die /RE auf high gezogen hat... folglich war das nächste empfangene byte schrott ... irgendwie hab ich das gefühl, dass es sich hier ähnlich verhält, aber irgendwie müsstren dann 2 kapuute bytes bei rauskommen oder ?
oder kann es sein, dass bei einem übertragungsfehler das RXC flag (uns error flags)gesetzt ABER das UDR mit KEINEN neuen daten belegt wird ? (ich sozusagen noch das byte vom letzten mal auslese ?)
jetzt ist das problem, dass der master beim empfangen scheinbar probleme hat, er schaltet die enableleitung aus, noch bevor das byte überhaupt komplett da ist.
die warteschleife ist ganz einfach
while(!(UCSRA0 & RXC0))
{
if(timeout) return;
}
das timeout tritt todsicher NICHT ein, hab schon mit pin toggle und oszi nachgeprüft
auch hab cih mit dem oszi die empfangsseite des master beobachtet, JEDES byte kommt gleichmäßig an, nur bekommt der master hin und wieder scheinbar was in den falschen hals und kotzt dann rum, dann gehts wieder ein paar mal und dann wieder zerhäckselt
die RS485 controller tausche ich jetzt nochmal aus, hatte anfänglich einen dabei, der ein problem hatte das potetial am DO auf high zu halten, der ist einfach zusammengebrochen, nachdem man die /RE auf high gezogen hat... folglich war das nächste empfangene byte schrott ... irgendwie hab ich das gefühl, dass es sich hier ähnlich verhält, aber irgendwie müsstren dann 2 kapuute bytes bei rauskommen oder ?
oder kann es sein, dass bei einem übertragungsfehler das RXC flag (uns error flags)gesetzt ABER das UDR mit KEINEN neuen daten belegt wird ? (ich sozusagen noch das byte vom letzten mal auslese ?)