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