Forum: Mikrocontroller und Digitale Elektronik AND-Wired Bus auch so möglich?


von Daniel (Gast)


Lesenswert?

Hallo,

Ich habe eine grundsätzliche Frage zur Realisierung.
Setup A,B,C Komponenten möchten kommunizieren. Ob multimaster
oder nur ein Master, soll offen sein bzw in Software implementiert
werden.

Erste saubere Methode, die ich mir vorstelle, ist:
Jeder Teilnehmer muss 2 I/O Pins entbehren. Einer davon wird
als Input konfiguriert und lauscht/pollt an der/die gemeinsame/n
Datenleitung. Der andere wird als Output konfiguruert und steuert
einen Transistor oder MOSFET, der die Datenleitung zur Masse
zieht, wenn durchgesteuert. Sind alle Transistoren gesperrt,
zieht ein Widerstand Datenleitung auf Vdd.

Diese Methode finde ich sauber und ist denke ich mal den meisten
gut bekannt.

Was ich mich frage ist, ob eine derartige Verbindung auch mit
einem Pin auskommen kann, der abwechselnd als Input/Output
umkonfiguriert wird. Folgendermassen soll es implementiert werden:
Datenleitung hängt auch über R an Vdd. Im Idle stellen alle
auf Input und pollen(in welchen Abständen auch immer) die Leitung,
auf Startkondition wartend. Will nun einer senden, stellt er
seinen Pin Output, und sendet. Bevor er das tut lauscht er natürlich,
und stellt sicher, dass die Leitung auf '1' ist.
Wie sauber ist diese Methode?

Bei beiden wird die Kollisionvermeidung in Software implementiert.
Vom Kommunikationsprotokol sehe ich keine Unterschiede.

Grüsse, Daniel

von (prx) A. K. (prx)


Lesenswert?

Klar geht das. Allerdings muss der Pin natürlich als Open Drain 
arbeiten, also ohne aktivem Pullup. Obacht: Je nach Typ des Controllers 
wird es vielleicht nicht möglich sein, den tatsächlichen Zustand eines 
solchen Pins zu erfahren, was hier aber zwingend notwendig ist.

von Daniel (Gast)


Lesenswert?

>Klar geht das. Allerdings muss der Pin natürlich als Open Drain
>arbeiten, also ohne aktivem Pullup.

Ist Open Drain bzw Open Collector nicht gerade dadurch charakterisiert,
dass Pullup Widerstand da ist?
Wenn ich nach diesem Einwand überlege, so ist der Pullup nicht
zwingend notwendig. Im Hinterkopf habe ich allerdings die Aussage,
dass es besser ist, Busse auf definierte Spannungspegel zu legen,
da ein schwebender Bus ("floating") anfällig für elektromagnetische
Strahlung ist. Wenn alle Teilnehmer auf Input schalten, so ist das
doch gleichwertig mit tristate, oder? Dh der Bus schwebt dann, wenn
kein Pullup da ist.

>Obacht: Je nach Typ des Controllers
>wird es vielleicht nicht möglich sein, den tatsächlichen Zustand eines
>solchen Pins zu erfahren, was hier aber zwingend notwendig ist.

Welche Controller sind nicht in der Lage dazu?
Vom PIC weiss ich, dass er das liest, was tatsächlich auf der
Leitung ist und nicht den vorher eingeschriebenen Wert. Also
wenn Pin auf Output konfiguriert ist und 1 treibt, aber die
Leitung viel niederohmiger irgendwo zur Masse geht, gewinnt die 0.
Beim Lesen wird 0 erkannt.
Was macht ein AVR, atmega8 in diesem Fall?

Grüsse, Daniel

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
Noch kein Account? Hier anmelden.