Netzwerkprobleme mit MAX485

Gast #517174
Lesenswert?

Ich habe mir ein kleines Netzwerk mit ATMEGA8 und MAX485 (DIL) 
aufgebaut. Im Moment habe ich nur 2 Teilnehmer (Master/Slave), welche 
später mal halbduplex miteinander reden sollen. Beim MAX485 habe ich Pin 
2 und 3 gebrückt. Der Slave reagiert mittels UART-Interrupt auf 
ankommende Bytes. Die Kommunikation funktioniert auch soweit ganz gut. 
Der Master sendet aller 5 sek. 10 Bytes. Es kommen aber immer 11 Bytes 
beim Slave an.

Ich habe inzwischen auch herausgefunden warum 11 Bytes ankommen. Jedes 
mal wenn der Master den Bus wieder frei gibt (also Pin 2 und 3 beim 
MAX485 auf low legt) wird irgendeine Störung auf die Leitungen A-B 
gelegt, welche den UART-Interrupt des Slave dazu veranlaßt darauf zu 
reagieren.

Muß der MAX485 noch irgendeine externe Beschaltung erhalten oder müssen 
bestimmte Voraussetzungen erfüllt sein wenn man den Bus frei gibt. Die 
120 Ohm am Ende sind dran. Ich habe auch verschiedene Test mit den 
Pullups/Pulldowns der A-B-Leitung gemacht - ohne Erfolg. Ich glaube 
nicht, dass es an meinem Programm liegt. Wie gesagt die Kommunikation 
der 10 Bytes funktioniert fehlerfrei. Hat jemand eine Idee?
Gast #517207
Lesenswert?

Der Txinterrupt(UDRE) kommt wenn das schieberegister leer ist. Dann muss 
das byte aber noch geschoben werden. Wenn man nun den anderen 
Txinterrupt(TXC) nimmt, wird der ausgeloest bevor das Stopbit draussen 
ist.
Gast #517230
Lesenswert?

Fast richtig. UDRE kommt wenn das Pufferregister leer ist, das 
Schieberegister kann aber zu diesem Zeitpunkt noch Arbeit haben. TXC 
kommt, wenn nun auch das Schieberegister leer ist - aber schon während 
er noch mit dem Stopbit kämpft.
Gast #517251
Lesenswert?

@A.K.

>Du schaltest den Transmitter möglicherweise zu früh ab. Ich hatte
>ähnliche Effekte, offenbar kommt der TXC Interrupt ein bischen zu früh.

Das glaube ich kaum. Hast du das mal mit den Scope nachgemessen?

MfG
Falk
Gast #517340
Lesenswert?

Danke erstmal für die Antworten. Ich habe mittlerweile die Schaltung 
soweit zurück gebaut, dass gar nicht mehr gesendet wird sondern wirklich 
nur noch die Enable-Pins (2 und 3) geschalten werden. Zwischen durch 
wartet das Programm sogar noch 50 ms. Selbst da kommt beim Slave schon 
ein Interrupt an.
Gast #521090
Lesenswert?

>TXC kommt, wenn nun auch das Schieberegister leer ist - aber schon während
>er noch mit dem Stopbit kämpft.

Das habe ich einmal getestet: TXC kommt erst dann, wenn das Stopbit 
vollständig ausgegeben ist. Irgendeine Wartezeit nach TXC-Int ist somit 
nicht notwendig.
Wenn Übertragungsfehler auftreten, muß daher woanders gesucht werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren