Hallo, ich verwende als Master einen FT232RL mit MAX485, als Slaves verwende ich ATTINY2313 mit MAX485. Nun versuche ich schon verzweifelt das hinzukriegen aber das will irgendwie garnicht. 2-Draht A,B,GND verbunden. Ich habe mich auch totgegoglt, laut diesem Schaltplan sind die SLAVES DI<->TXD und RO<->RXD verbunden stimmt denn das so? Beim SLAVE ziehe ich DE und RE/ auf 5V wenn ich Daten schicken will, aber das Teil will nicht was mache ich falsch? Danke schon mal.
> Teil will nicht was mache ich falsch?
Ein gern gemachter Fehler besteht darin den Ausgangstreiber zu frueh
abzuschalten. Du musst ja jedesmal nach dem senden eines Bytes die
Treiber wieder in den Lesemodus schalten. Dazu musst du in deinem
Controller ja irgendein Bit abfragen damit du weisst das dein Byte
gesendet wurde.
Aber es muss eben auch wirklich ganz gesendet sein und es darf nicht so
sein das lediglich der Buffer der Senderoutine frei ist, aber das Byte
gerade rausgetaktet wird.
Olaf
Und wie ist der RS485-Treiber an den FT232RL angeschlossen? Im Schaltplan taucht der FT232RL nicht auf.
Olaf schrieb: > Aber es muss eben auch wirklich ganz gesendet sein und es darf nicht so > sein das lediglich der Buffer der Senderoutine frei ist, aber das Byte > gerade rausgetaktet wird. Dafür wurde beim AVR der TX-Interrupt erfunden. ;-)
Der TX-Int feuert aber schon wenn der Puffer frei ist, die UART-Hardware sendet da noch (wahrscheinlich gerade das Startbit). Moeglichkeit 1: RC-Glied in den Steuerleitungen, Werte an die Baudrate angepasst, Moeglichkeit 2: die Steuerleitung laenger Aktiv halten, mindestens so lange, wie das Zeichen gesendet wird: Puffer frei (Flag oder Interrupt): Starte Timer Timer deffinierten Wert erreicht: schalte Steuerleitungen, Moeglichkeit3: ein Zeichen mehr senden, dieses kommt aber eventuell beim Enpfaenger nicht richtig an, eventuelle Fehlerflags beim Empfaenger behandeln. mfg Frank
@frankn (Gast) >Der TX-Int feuert aber schon wenn der Puffer frei ist, die UART-Hardware >sendet da noch (wahrscheinlich gerade das Startbit). Nö. Das ist der UDRE-Interrupt. Gemeint ist der TXC (Transmit Complete) Siehe Artikel Interrupt. MFG Falk
R8C29 hat uebrigens wirklich ein Bit mit dem er sagen will das er mit dem Senden fertig ist. :-P Ich musste aber auch feststellen das dies nicht 100% zuverlaessig ist. Genauer gesagt setzt er das nicht immer, aber manchmal schon wenn er das Stopbit ausgibt. Das fuehrt dann dazu das man den Treiber etwa beim halben Stopbit abschaltet wenn man nicht drauf achtet. Olaf
Schalte bei Halbduplexbetrieb (wie RS485) grundsätzlich den jeweils inaktiven Interrupt aus und lösche vor der Aktivierung das Interruptflag, dann feuert nix mehr. Also vor dem Senden RX-INT abschalten und TX-INT-FLAG löschen. Beim Empfang umgekehrt. Einfacher gesagt: immer nur das direkt vorher aktivieren (und das INT-Flag löschen), was gebraucht wird.
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.