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?
Du schaltest den Transmitter möglicherweise zu früh ab. Ich hatte ähnliche Effekte, offenbar kommt der TXC Interrupt ein bischen zu früh.
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.
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.
@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
Mangels Scope nicht. Aber als ich direkt mit TXC den Transmitter freigab, gab es unschöne Fehler, die verschwanden nachdem ich ein bischen wartete.
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.
@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
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.