Hallo gibt es einen Bausten für RS485 der automatisch auf Senden umschaltet wenn am DI Pin Daten empfangen werden. Bei dem Max485 CPA521 muss man die RE und DE Leitung vor jedem Senden auf high schalten.
dann muss ich aber je nach Bautrate das Monoflop umändern um unnötige Wartezeit zu verhindern.
@ Mike (Gast) >dann muss ich aber je nach Bautrate das Monoflop umändern um unnötige >Wartezeit zu verhindern. Ja, woher soll den eine Schaltung auch wissen, wann sie wieder auf Empfangen/Senden umschalten soll? Sinnvollerweise macht das der uC an dem der Tranceiver hängt selber, denn der weiss, wann er was will (sofer der Programmierer das weiss ;-) MfG Falk
Hi Das ist richtig. Aber irgendwann wirst du dich doch auf eine Baudrate geeinigt haben. Eine Alternative wäre, statt RS485-Treiber Can-Bus-Treiber zu verwenden. PCA82C250/251 haben so etwas schon eingebaut. So habe ich das Problem gelöst. MfG Spess
Direkt nach dem Senden darf ich diese Leitung ja noch nicht abschalten, da die Hardware UART ja noch sendet. Kann ich irgendwie abfragen wann die UART alles übertragen hat?
@ Mike (Gast) >Direkt nach dem Senden darf ich diese Leitung ja noch nicht abschalten, >da die Hardware UART ja noch sendet. Richtig erkannt. > Kann ich irgendwie abfragen wann die UART alles übertragen hat? Ja, der AVR hat zwei Interrupts. UDRE wenn der FIFO leer ist, TXC (Transmit complete) wenn das letzte Byte komplett übertragen wurde. Andere Controller haben sicher ähnliches. MfG Falk
> ... wenn das letzte Byte komplett übertragen wurde. Da gibt es leider die tollsten Auswüchse. Die PIC18F setzen den transmit complete wenn die Datenbits weg sind und das Stopbit anfängt. Nun ist zwar das Stopbit sowieso die Ruhelage aber schön ist es nicht, den Sender mitten im Bit abzuschalten oder man muss sich extra eine baudratenabhängige Wartezeit erzeugen.
...und in manchen RS485-Umgebungen ist es auch noch notwendig, den Sender eine gewisse Zeit VOR dem Senden der Nutzdaten einzuschalten. Dann wird's mit der einfachen Monoflop-Schaltung eng, das geht dann nur noch mit P-Logik (P wie "probability" - wahrscheinlich kommen gleich Sendedaten.... ;-)) Man wird um eine gewisse Intelligenz beim Programmieren des steuernden µCs also kaum herumkommen :)
@ Dieter Werner (dds5) >Da gibt es leider die tollsten Auswüchse. >Die PIC18F setzen den transmit complete wenn die Datenbits weg sind und >das Stopbit anfängt. Nun ist zwar das Stopbit sowieso die Ruhelage PIC eben . . .;-) >aber schön ist es nicht, den Sender mitten im Bit abzuschalten oder man >muss sich extra eine baudratenabhängige Wartezeit erzeugen. Denke ich nicht. Die meisten RS485 Busse haben ja eh eine Failsafe -Pull-up Schaltung, da wird der Bus auf HIGH gehalten. Damit passt es schon, wenn gleich es etwas unschön ist. MFG Falk
Dieter Werner wrote: >> ... wenn das letzte Byte komplett übertragen wurde. > > Da gibt es leider die tollsten Auswüchse. > > Die PIC18F setzen den transmit complete wenn die Datenbits weg sind und > das Stopbit anfängt. Nun ist zwar das Stopbit sowieso die Ruhelage > aber schön ist es nicht, den Sender mitten im Bit abzuschalten oder man > muss sich extra eine baudratenabhängige Wartezeit erzeugen. Ebend, Daten raus muss nicht das Stopbit beinhalten, da sollte man sich genau die verwendete UART angucken. Non-driven RS485 muss zwar highpegel annehmen, aber einen Glitch kann man sich damit immer noch erzeugen. Wichtig ist bei Multimasterbetrieb eine saubere Protokollabsicherung, wenn mal mehr als einer den Bus nehmen will. Selber am Rx mitzuhorchen geht nicht, weil bei langen Leitungen die so gegeneinander treiben, dass jeder trotzdem sauber seine eigenen Sendedaten hören kann. Da hilft nur ein ACK durch den Slave, und per Zufallsgenerator für jeden Master unterschiedliche und inkrementale Retrydelays, sonst können die schön in einen Deadlock reinlaufen (zwei Master versuchen immer wieder nach der gleichen Zeit den Bus zu nehmen).
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.