Hallo, ich will zwischen 2 Controllern eine Kommunikation machen und zwar mit Bit-Bang... Echt simpel. Damit die Datenleitung und die "Clock" einigermassen niederohmig sind, will ich beide Leitungen zwischen den Controllern jeweils mit 1KOhm gegen Masse/Gnd abschließen. Wer wann sendet oder empfängt macht die Software. Frage, ist das gut so oder überflüssig? Oder machen mir die Controller beim Hochfahren nach Reset da Probleme? Gruß Rainer
Bidirektionale Kommunikation würde ich mit einem I²C Bus machen. Das kann man per Bitbanging tun. Besser sind aber Mikrocontroller mit entsprechenden Hardware Schnittstellen weil diese auch Filterschaltungen gegen Störungen bieten. I²C verwendet im Gegensatz zu deinem Entwurf Pull-Up Widerstände. Hat den Vorteil, dass sich die Kommunikationspartner nicht gegenseitig kaputt machen, wenn sie mit einem Partner "reden", dessen Stromversorgung noch aus geschaltet ist. Diese Pull-Up Widerstände sind typischerweise so ausgelegt, dass etwa 1-2mA fließen. Zum Beispiel 4,7kΩ bei 5V 2,2kΩ bei 3,3V An welche Leitungslängen und Taktfrequenzen dachtest du? I²C Spezifikation: https://www.nxp.com/docs/en/user-guide/UM10204.pdf
Rainer V. schrieb: > Oder machen mir die Controller beim Hochfahren nach Reset > da Probleme? Tun sie. Wenn ein Controller bereits Versorgungsspannung hat und deine Leitung auf High zieht, während der andere noch spannungslos ist, wird der Ausgang des ersten über eine Eingangsschutzdiode des zweiten kurzgeschlossen und es werden sämtliche Maximalwerte für den Strom gerissen.
Warum willst du terminieren? Was erhoffst du dir davon. Bei I2C oder LIN gibt es einen Pull-up-Widerstand und jeder Teilnehmer zieht den bei Aktivitäten herunter. So kann nie der Zustand entstehen in dem ein Teilnehmer den Bus high treibt während der andere ihn low treibt (das wäre ein Kurzschluss) da der Bus ja von den Teilnehmern nur low getrieben werden kann. Bei CAN und anderen differentiellen Übertragungsverfahren dient der Widerstand der Verhinderung von Reflexionen (Stichwort Wellenwiderstand). Zwischen 2 Mikrocontrollern würde ich SPI oder UART nutzen. Dort sind diese Widerstände sinnlos (da ordinäre Push-pull-Treiber an den Ausgägen). Wenn du Probleme mit den Signalen (Leitungslänge) dann würde ich auf RS422 umstellen.
Rainer V. schrieb: > zwar mit Bit-Bang... Echt simpel. Ist nicht simpel. Aber lehrreich, also nur zu. > Damit die Datenleitung und die "Clock" > einigermassen niederohmig sind, Sind sie auch so. 20mA@ 5V sind deutlich kleiner. > will ich beide Leitungen zwischen den > Controllern jeweils mit 1KOhm gegen Masse/Gnd abschließen. Das nennt sich pull down und ist ok, 10k an jedem Ende reichen auch. Pulldown hat den Nachteil, dass es von Kabelbruch nicht unterscheidbar ist. Aber zum lernen egal.
Rainer V. schrieb: > will ich beide Leitungen zwischen den > Controllern jeweils mit 1KOhm gegen Masse/Gnd abschließen. Viel wichtiger ist ein Serienwiderstand in jeder Verbindung. Damit verhinderst Du Beschädigungen falls die Pins der Controller beide als Ausgang fungieren und gegenteilige Pegel haben. Vom Wert mal mit 4,7 Kiloohm starten. Wenn die Geschwindigkeit nicht hoch ist, die Verbindung nicht zu lang, etc., kannst Du auch höher gehen, oder eben im Zweifel niedriger. Am schnellsten geht es für Dich einfach ausprobieren, und mit dem Oszi anschauen, wie die Pegel an den Eingängen der Controller aussehen. Einfach ein wenig experimentieren. Solang Du noch lernst, nicht unter 1 Kiloohm Serienwiderstand gehen, würde ich Dir empfehlen.
Ich finde es erstaunlich.... Es gibt derzeit dutzende von Schnittstellen, die auf allen Ebenen gut durchdefiniert sind. Und jetzt muss wieder eine neue Erfindung daherkommen. Da frage ich mich: Warum? Oder: Was soll die neue Erfindung besser können? Vielleicht sind die Anderen ja zu kompliziert? OK, aber wieso ist eine eigene Erfindung dann einfacher? Gut... Dem Eingangs Posting entnehme ich, dass der TO, in Sachen Kommunikation zwischen µC, nicht sattelfest ist. Darum wage ich zu behaupten, dass die Beschäftigung damit sehr viel Sinn macht. Auch die "Erfindung" von was neuem, mit all seinen Problemen und Irrtümern. Es kann Lehrreich sein. Aber im harten Feldeinsatz, wird man doch immer auf was bewährtes zurückgreifen, und sei es auch nur wegen der Stabilität und Kompatibilität.
EAF schrieb: > Es gibt derzeit dutzende von Schnittstellen, die auf allen Ebenen gut > durchdefiniert sind. > Und jetzt muss wieder eine neue Erfindung daherkommen. > Da frage ich mich: Warum? > Oder: Was soll die neue Erfindung besser können? Zum Beispiel funktioniert sie ohne spezielle, durchdefinierte Hardware. Ein bis zwei Pins, die sonst nichts können, reichen auch. > Vielleicht sind die Anderen ja zu kompliziert? > OK, aber wieso ist eine eigene Erfindung dann einfacher? Weil es seine eigene ist? Die er zu 100% versteht? Die genau (nur) das macht, was er braucht? Für die er keine fremde Hardware austricksen muss? Für die man ihm keine Library aufschwatzt die er dann erst debuggen muss? > Aber im harten Feldeinsatz, wird man doch immer auf was bewährtes > zurückgreifen, und sei es auch nur wegen der Stabilität und > Kompatibilität. Wenn man Kompatibilität braucht, macht man das natürlich. Aber beim ersten Mal ist I2C auch nicht bewährt und stabil, wenn du es noch nie benutzt hast.
Bauform B. schrieb: > Aber beim > ersten Mal ist I2C auch nicht bewährt und stabil, wenn du es noch nie > benutzt hast. Das Argument ist irgendwie unzulässig..... Denn man kann mit jeder Schnittstelle Mist bauen, wenn man sich nicht für die Doku/Prinzipien interessiert. I2C ist da keinesfalls eine Ausnahme. Die anderen Argumente sind auch recht zweifelhaft. Oder meinst du, dass jemand, welcher mit einem Pulldown terminieren möchte, in absehbarer Zeit, eine stabile/robuste Schnittstelle entwickeln wird? Wie schon gesagt: In Sachen Erkenntnisgewinn, habe ich keinerlei Einwände. Z.B. könnte man sich das OSI Schichtenmodell als Orientierungshilfe an die Wand tackern. -- Leider hören wir nichts zu Taktfrequenz, Spannungen, Entfernungen, µC Type usw., als wenn das egal wäre.
EAF schrieb: > Z.B. könnte man sich das OSI Schichtenmodell als Orientierungshilfe an > die Wand tackern. Für was? Um ein paar Bytes zwischen 2 Mikrocontroller auszutauschen? Was für ein sinnentleertes Ansinnen!
Danke für die Anregungen. Es geht mir rein ums Spielen...Die üblichen diversen Schnittstellen sind mir bekannt. Der Tip mit dem Serienwiderstand ist gut. Es geht übrigens um AVR, zB. 2313 und die Leitung wird ca. 10m lang sein, also von Zimmer zu Zimmer. Gruß Rainer
1) bei 10 m spielen Reflexionen eine Rolle. Daher Serienwiderstand an jeden Ausgang. Z.B. 80 Ohm wenn die uC-Ausgänge 20 Ohm Innenw. haben und das Kabel 100 Ohm Wellenw. 2) Schottky-Dioden zu den beiden Vcc, falls getrennt versorgt wird und die Vcc nicht gleichzeitig angehen, wie oben schon angemerkt wurde
Rainer V. schrieb: > Es geht übrigens um AVR, zB. 2313 und die > Leitung wird ca. 10m lang sein, also von Zimmer zu Zimmer. Damit fällt I²C schon mal raus, ebenso UART ohne Transceiver. Für solche Leitungslängen sind RS422 und RS485 gut. Dazu empfehle ich dir http://stefanfrings.de/mikrocontroller_buch/Einstieg%20in%20die%20Elektronik%20mit%20Mikrocontrollern%20-%20Band%202.pdf Kapitel 3.2 und Kapitel um, um einen ersten Überblick zu bekommen.
Ja danke Stefan...hab alle deine Sachen. Echt gut und bewundernswürdige Arbeit! Habe noch uralte Temperaturmodule, die ihre Werte über genau so eine einfache Schnittstelle rausschieben...da wird überhaupt nichts terminiert. Ist aber auch nicht für Leitungslänge gedacht. Anbindungsbeispiel für Z80... Gruß Rainer
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.