Forum: Mikrocontroller und Digitale Elektronik Netzwerkprobleme mit MAX485


von Danilo (Gast)


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?

von A.K. (Gast)


Lesenswert?

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

von Uli (Gast)


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.

von A.K. (Gast)


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.

von Falk (Gast)


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

von A.K. (Gast)


Lesenswert?

Mangels Scope nicht. Aber als ich direkt mit TXC den Transmitter 
freigab, gab es unschöne Fehler, die verschwanden nachdem ich ein 
bischen wartete.

von Danilo (Gast)


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.

von Falk (Gast)


Lesenswert?

@Danilo

>wartet das Programm sogar noch 50 ms. Selbst da kommt beim Slave schon
>ein Interrupt an.

Hast du die richtigen Pins verdrahtet? Kurzschluss von RE oder DE nach 
A/B?

MfG
Falk

von G. Nicht (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.