1-Draht und 1 Pin

OP #1621115
Hallo Forum !

Für meine Applikation würde ich gerne einen Datenaustausch zwischen 
mehreren unterschiedlichen ATTinys (Slaves) und einem ATMega168 (Master) 
umsetzen. Es sollen je nach Einsatzort unterschiedliche Slaves verwendet 
werden, die kleinsten sind Tiny25.
Das Problem ist, das ich möglichst viele Port-Pins frei haben möchte. 
Deshalb möchte ich nur ein Portpin zur Kommunikation verwenden. Die 
Datenleitung wird zentral mit einem Pull-Up-Widerstand versorgt und 
jeder Slave kann die Datenleitung auf GND ziehen, wenn er Senden darf.
Das funktioniert super wenn ich das Port-Pin auf Eingang stelle und dann 
auf dem Bus zuhöre. Zum Senden wird das DDR umgeschaltet und 0 
ausgegeben.
Um die Störsicherheit zu erhöhen würde ich gerne den zentralen Pull-Up 
verkleinern. Das bedingt jedoch einen Transistor (oder Treiber), der den 
höheren Strom am Slave vertragen kann. Jedoch kann der Transistor jetzt 
nicht unterscheiden zwischen Senden und Empfangen.
Gibt es da irgend eine Schaltung oder einen Treiberschaltkeis, der 
automatisch erkennt, ob der µC-Ausgang Tristate hat und umgekehrt auch 
die Daten von aussen zum µC weiterleitet?
Randbedingungen: 5V-System, kein Stromsparen, sehr wenig Platz, Buslänge 
bis zu 3m, Datenrate 57600Baud (angestrebt, wenns nicht geht, dann muss 
es halt langsamer laufen), all zu teuer sollte es auch nicht werden

vielen Dank
OP #1621203
Ja, warum bin ich da nicht selber drauf gekommen. Einfach knallhart 
senden wenn man dran is. Da kann der Pull-Up relativ gross sein (1k) da 
er ohnehin nur benoetigt wird wenn keiner sonst sendet. Das Risiko einer 
Buskollision muss ich dann halt versuchen per Protokoll zuverringern.
Das werde ich mal testen und schauen wie lang und schnell mein Bus 
werden kann.
Gast #1621208
RS232 als OC mit 9bit Datenbit, wobei bit9 gesetzt = adressierung,
sowie CRC und Errorsignalisierung im Stop-Bit wie auch CSMA/CA oder
CSMA/CR. Aktiver pull-up, bei i2c kennt man sowas, mit einem 4066, der
einen stärkeren pull-up schaltet, geht recht gut und ist billig.
Ansonsten,
Use a current mirror.
Use a resistor to a higher voltage and a clamping diode to VDD 
(schottky).
LTC4311 could be used.
Gast #1621213
vllt. kann man auch vom master regelmässig alle µC timen (pinchange-int) 
und dann bekommt jeder Slave (einer nach dem anderen) ein bestimmtes 
zeitfenster was zu senden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.