Hallo, ich würde gerne wissen, ob meine Lösung zufällig funktioniert, oder auf lange Sicht Bauteile zerstört :-) Im Forum habe ich zu diesem Ansatz nichts finden können. Aufbau: (drei teilnehmende Bauteile: Arduino, Bauteil, PC; jeweils zwei verbunden) Batteriebetrieb: Arduino Pro Mini mit ATMEGA328p auf 3,2V --- schreibt Daten auf Bauteil über serielle Schnittstelle ---> Bauteil. Angeschlossen über USB: Bauteil <--- schreib und Lesezugriff über serielle Schnittstelle ---> PC Problembeschreibung: Das Problem besteht darin, dass mein Bauteil nur eine serielle Schnittstelle anbietet. Die Verbindung wird über einen FTDI hergestellt. Wenn ich den FTDI anschließe, müsste der genau so geschaltet sein, wie der Arduino, also zum Bauteil TX -> RX und umgekehrt. Ich möchte mir zusätzliche Hardware sparen duck, also habe ich ins Datenblatt des ATMEGA geguckt und gesehen, dass die Pins für die USART Schnittstelle auch als Eingang im Tri-State geschaltet werden können (Tabelle 13.1 Seite 77). Mein Ansatz setzt also, beim Einstecken des FTDI (irgendein Port zeigt mir an, was gesteckt ist), die Register DDRD0 und DDRD1, sowie PORTD0 und PORTD1 auf 0x00. Damit sollte meiner Meinung nach der Arduino von den Leitungen getrennt sein. Verbunden ist jetzt also [PC, ARDUINO, BAUTEIL] [TX, TX, RX] und [RX, RX, TX], wobei der Arduino seine Ports im Tri-State hat. Die Kommunikation zwischen dem Bauteil und dem PC funktioniert. Fragen: Kann ich das dauerhaft so betreiben? Werde ich Probleme bekommen, weil der Arduino beim Einschalten erst den Bootloader startet und damit die serielle Schnittstelle aktiviert, die dann falsch verbunden ist (macht es was kaputt, wenn TX mit TX und RX mit RX verbunden ist?)? Vom PC muss ich da noch nichts senden, sondern warte auf ein "Hallo" des Bauteils. Wenn es nicht geht würde ich mich über eine kurze Erklärung freuen :-) Vielen Dank schon mal im Voraus für die Unterstützung!!! Thomas
Moin, da du wahrscheinlich nicht weisst, wann einer deiner Master(PC, µC) auf das "unbekannte" Bauteil zugreift, wäre ein wired or Anschluss angebracht. Also an die TX Ausgänge der Master ne Diode und nen Pullup an den RX Eingang des "unbekannten" Bauteils. Gruß
Hallo Jean Player, danke für die schnelle Antwort :-) Ich weiß sehr genau wann ich lesen / schreiben möchte. uC: Wenn die Batterie angeschlossen ist. -> Dann ist der PC [mit FTDI] nicht angeschlossen, er wird über den gleichen Anschluss wie die Batterie angesteckt. Im Stecker zur Batterie gibt es eine Brücke, die einen Pin auf Masse zieht (sonst über internen Pullup auf High). PC: Wenn der FTDI angeschlossen ist. -> Dann ist die oben genannte Brücke offen und der Pin per Pullup auf High. Die Schutzschaltung, die Du beschreibst, ist aber wahrscheinlich eine gute Idee, da am Anfang der Bootloader des Arduino auf dem uC zu kommunizieren versucht. Ist das nur "unschön" oder macht die Beschaltung TX auf TX Probleme? Gruß zurück, Thomas
Wenn die beiden Ausgänge unterschiedliche Pegel haben (und das passiert, wenn einer der beiden sendet) hast du eigentlich einen satten Kurzschluss. Eine Diode oder zumindest ein Schutzwiderstand der den Strom auf verträgliche Werte reduziert, sind mehr als angebracht. 300 Ohm dürften recht gut passen und je nach Baudrate durchaus verträglich sein. Bei Openkollektor-Ausgängen mit externem Pullup wäre es egal. Push-Pull-Ausgänge wie du sie bei einem AVR und FTDI hast, dürfen nicht parallel betrieben werden.
Hallo me, danke für die Antwort :-) Ich verstehe Jean und Dich so, dass ich auf jeden Fall eine Diode bei beiden TX Pins benötige. Muss das so aussehen? (hinter den tx Pins am uC und Pc eine Diode, später zusammengeführt an rx, des Bauteils) (+) | [r] [ ] PC (tx) --->|--- | >------- (rx) Bauteil uC (tx) --->|--- Wenn ich die Dioden einbaue, würde ich auch gleich den Pullup Widerstand beim RX des Bauteils einsetzen, wenn es zur Stabilität beiträgt (ich verstehe nicht, wofür der gebraucht wird). Ist mein Szenario mit dem Tristate am AVR generell unklug? Ich dachte der Tristate Zustand verhindere den Kurzschluss. Dauert es zu lange bis der Tristate aktiv ist, weshalb ich noch Kurzschlüsse habe? Wenn ich auf den Bootloader verzichte und die Pins wie oben beschrieben setze, sendet nur der FTDI, der AVR bleibt stumm. Bin ich in dem Fall sicher? Welche Diode sollte man einsetzen? 1N5817? Vielen Dank nochmal, hoffe die übrigen Fragen können noch beantwortet werden. Dieses Forum ist wirklich toll :-) Thomas
Wenn du ohne Bootloader arbeitest und Kollisionen mit dem FTDI auschließen kannst, kannst du natürlich auch den AVR-Pin Tristate oder Pullup schalten. Du musst allerdings zu jeder Zeit verhindern, dass einer der ICs Highpegel treibt und der andere Low zieht. Du darfst mit dem AVR daher nicht senden solange der FTDI in deiner Schaltung steckt. Da Programmfehler nie auszuschließen sind, würde ich dir immer zu 100-300 Ohm als Schutzbeschaltung in einer der beiden TX-Leitungen raten. Wie Peter Diener ja bereits gesagt hat, gehören die Dioden umgedreht. Die TX-Pins ziehen die Leitung nur mehr auf Low. High wird über den Pullup erreicht (falls dein unbekanntes Bauteil nicht ohnehin einen Pullup an RX hat). Die Dioden verhindern, dass Strom aus den ICs heraus fließen kann und verhindern so die Kurzschlussgefahr. (+) | [R] [ ] PC (tx) ---|<|--- | >--------- (rx) Bauteil uC (tx) ---|<|--- oder (wenn du erkennen kannst, dass der FTDI in deiner Schaltung ist): PC (tx) --------- >--------- (rx) Bauteil uC (tx) ---[R]---
Wow, super, danke für die vielen guten Antworten! Und vielen Dank für die Zusammenfassung, me!!! Ihr habt mir sehr weiter geholfen! Ich werde mir meinen Aufbau nochmal ansehen, wenn genügend Platz ist, werde ich die Dioden einbauen. Danke auch dafür, dass ich mich jetzt von dem falschen Gedanken trennen konnte die TX-Leitungen würden Impulse "Senden" :-s Manchmal lohnt es sich doch Dinge nicht einfach zu verwenden, sondern auch mal nachzusehen, wie sie funktionieren... . Werde mir RS-232 mal durchlesen :-) Schönen Gruß, Thomas
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.