Forum: Mikrocontroller und Digitale Elektronik Drei open-drain logic outputs an einem µC-Pin


von Peter T. (peterteilt)


Lesenswert?

Hallo,

ich bin neu hier im Forum und auch ein ziemlicher Elektronik-Neuling 
(Hobbyist :-) ). Seit ein paar Tagen schlage ich mich mit folgendem 
Verständnisproblem herum:

Am verwendeten attiny habe ich nur noch einen Pin frei, der aber die 
Information eines anderen Chips entgegen nehmen soll, der über drei 
"open-drain logic outputs" verschiedene Zustände kommuniziert. Diese 
können entweder LOW oder HI-Z sein.

Wenn ich das Prinzip der drei Zustände (Input/Output/HI-Z) richtig 
verstanden habe, würde man den µC-Pin als Input verwenden und einen 
pull-up Widerstand an die 5V und die Leitung zwischen Chip und µC 
hängen.

Schaltet der Chip auf HI-Z nimmt er sich aus dem Rennen und am µC liegen 
5V an. Schaltet er auf LOW (open drain?, wieso nennt sich das Ding 
überhaupt output?), zieht er die Leitung auf 0V.

Richtig?

Nun das zweite Problem: Wie kann ich ohne shift-Register (zu teuer, zu 
groß) die drei outputs des Chips an dem einen µC-Pin auslesen?

Vielen Dank!
Peter

von Falk B. (falk)


Lesenswert?

@  Peter Teilt (peterteilt)

>Wenn ich das Prinzip der drei Zustände (Input/Output/HI-Z) richtig
>verstanden habe, würde man den µC-Pin als Input verwenden und einen
>pull-up Widerstand an die 5V und die Leitung zwischen Chip und µC
>hängen.

Ja, wobei man ggf. auch die internen Pull-Ups des AVRs nutzen kann.

>Schaltet der Chip auf HI-Z nimmt er sich aus dem Rennen und am µC liegen
>5V an. Schaltet er auf LOW (open drain?, wieso nennt sich das Ding
>überhaupt output?), zieht er die Leitung auf 0V.

>Richtig?

Ja, siehe Ausgangsstufen Logik-ICs

>Nun das zweite Problem: Wie kann ich ohne shift-Register (zu teuer, zu
>groß)

Teuer? Ein 74HC595 kostet vielelich 20 Cent. Wieviel Millionen Stück 
willst du produzieren?
Zu groß, naja, es gibt es auch in TSSOP.

> die drei outputs des Chips an dem einen µC-Pin auslesen?

GGf. mit einem Spannungsteiler und dann per ADC, wenn dein attiny einen 
hat. Ein DA-Wandler per Spannungsteiler.

von Michael (Gast)


Lesenswert?

Peter Teilt schrieb:
> Wenn ich das Prinzip der drei Zustände (Input/Output/HI-Z) richtig
> verstanden habe, würde man den µC-Pin als Input verwenden und einen
> pull-up Widerstand an die 5V und die Leitung zwischen Chip und µC
> hängen.

Jein.
Input = Information einlesen (Spannung liegt an ja/nein, ...)
Output = Information ausgeben (egal wie).

Der Input ist quasi ein (passiver) Zustand in dem eingelesen wird. Beim 
Output wird etwas nach aussen kommuniziert.

Der Unterschied zwischen OpenSource und OpenDrain kann man sich einfach 
als Flussrichtung der Elektronen vorstellen.
Beim OpenSource aus dem Pin raus nach Masse
Beim OpenDrain von + durch den Pin nach Massepin des Mikrocontrollers.

Peter Teilt schrieb:
> würde man den µC-Pin als Input verwenden und einen
NEIN. Wir wollen nicht den Pinstatus lesen (!)
> pull-up Widerstand an die 5V und die Leitung zwischen Chip und µC
> hängen.
schon eher:

+5V ----------------+------------
                    |
                    -
                   | | Pullup
                   | |
                    -
                    |
Signalleitung --+---+------------
                |
------------+   |
µC o.d. Pin |---+
------------+

µC Pin = OpenDrain -> Pin low: Pullup zieht Signalleitung nach +5V -> 
Pin high (Pin zieht Elektronen ein): 0V (GND)

von Udo S. (urschmitt)


Lesenswert?

Peter Teilt schrieb:
> Nun das zweite Problem: Wie kann ich ohne shift-Register (zu teuer, zu
> groß) die drei outputs des Chips an dem einen µC-Pin auslesen?

Digital gar nicht, du hast einen Eingang der 0 oder 1 detektieren kann 
aber 3 Ausgänge, die insgesamt 8 versch. Zustände annehmen können.
Das geht nur wenn du ein Eingangsmultiplexing machst oder wie Falk 
vorgeschlagen die 8 Zustände in entsprechende Spannungen wandelst und 
eben Analog mit einem A/D Wandler-Pin einliest.

von Peter T. (peterteilt)


Lesenswert?

Blöd gefragt: Wie mache ich Eingangsmultiplexing? (dachte Multiplexing 
erfordert immer Chips wie den 4051 auf beiden Seiten).

Ich werde mich mal in die Spannungswandler-Geschichte einlesen.

Michael schrieb:
> NEIN. Wir wollen nicht den Pinstatus lesen (!)

Doch, genau das will ich? Der uC liest, der Chip "auf der anderen Seite" 
schaltet entweder LOW oder HI-Z. Aber vielen Dank für deine Erklärung, 
jetzt verstehe ich dass bei opendrain/low = stromfluss = 5V bedeutet, 
nicht umgekehrt.

von Gregor B. (Gast)



Lesenswert?

Geht z.B. mit nem NE555 wie im Bild dargestellt.
Werte musst Du selber ausrechnen, ich hab das schnell ohne Durchrechnen 
zusammengeklickt, nur um das Prinzip zu erklären.
Die Transistoren sind Deine Open-Drain-Ausgänge.

NE555 ist als astabiler Multivibrator (Oszillator) beschaltet.

Alle Ausgänge Hi-Z: C5 sorgt für das Timing.

Ausgang T3 Low: C3+C5 (also 2*C) bestimmen das Timing

Ausgang T2 Low: C2+C5 (also 3*C) bestimmen das Timing

Ausgang T1 Low: C1+C5 (also 6*C) bestimmen das Timing

Ausgang T2 + T3 Low: C2+C3+C5 (also 4*C) bestimmen das Timing

Ausgang T1 + T3 Low: C1+C3+C5 (also 8*C) bestimmen das Timing

Ausgang T1 + T2 Low: C1+C2+C5 (also 9*C) bestimmen das Timing

Ausgang T1 + T2 + T3 Low: C1+C2+C3+C5 (also 10*C) bestimmen das Timing

Frequenz ausmessen, fertig.

von Gregor B. (Gast)


Angehängte Dateien:

Lesenswert?

Mist, Name des Bildes zu lang, daher kein Vorschaubild...

von Peter D. (peda)


Lesenswert?

Gregor B. schrieb:
> Geht z.B. mit nem NE555 wie im Bild dargestellt.

Der 555 ist vollkommen überflüssig. Man nimmt einfach den internen 
Komparator des AVR.

Problem ist aber die Toleranz und Temperaturdrift der Kondensatoren, 10% 
Typen reichen nicht aus.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

ohne irgendwas geht es nicht. Leider brauchst du zum Anschluss eines 
Multiplexers oder Schieberegisters auch mindestens 3 Pins, um die 
anzusteuern, du gewinnst also garnichts. Die einzige Möglichkeit ist die 
Analogisierung durch RC-Komponenten - ein paar Widerstände, wenn du den 
Eingang als ADC-Eingang schalten kannst, oder eine Lade/Entladeschaltung 
mit Widerständen und Kondensatoren, dazu musst du den Pin als Eingang 
und Ausgang umschalten. Wenn du aber wirklich meinst, schon ein 4051-IC 
wäre zu gross und zu teuer, gibt es überhaupt keine Lösung, dann lohnt 
sich weiteres Nachdenken nicht.

Gruss Reinhard

von Peter T. (peterteilt)


Lesenswert?

Ich würde im Zweifelsfall einfach einen größeren Mikrocontroller 
verwenden, bevor ich zusätzliche Bauteile verwende.

Aus den Ausführungen entnehme ich, dass ich sonst an einem 
Spannungsteiler oder komplexeren Aufbauten (wie mit dem 555) nicht 
vorbeikomme.

Vielen Dank für die qualifizierte und geduldige Hilfe!

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

endlich mal jemand, der sich tatsächlich was sagen lässt! Hatten wir 
lang nicht mehr. Grösserer Prozessor ist schon richtig, wenn das möglich 
ist, v.a. brauchst du dann keine Software-Verrenkungen zu machen, die 
sonst zusätzlich zu den externen Bauteilen noch nötig wären.

Gruss Reinhard

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.