Frage:
Erhalten von zwei (oder eineinhalb) Ausgängen von einem einzelnen Pin
Paolo Bonzini
2017-10-15 21:34:40 UTC
view on stackexchange narkive permalink

Ich mache ein Projekt mit einem ATtiny85 und natürlich fehlen mir die E / A-Pins.Eine Idee, die ich hatte, war, einen einzelnen Pin für zwei Ausgänge zu verwenden (nennen wir sie EN und DATA).

schematic

simulieren diese Schaltung - Schema erstellt mit CircuitLab sup>

Ich weiß, dass DATA keine Rolle spielt, wenn EN = 0 ist.Mit anderen Worten, diese beiden Ausgänge können nur die Werte EN = 0 / DATA = x, EN = 1 / DATA = 0, EN = 1 / DATA = 1 annehmen.Gibt es eine einfache Möglichkeit, beispielsweise 0 auf EN = 0 / DATA = x, 1 auf EN = 1 / DATA = 1, Z (Eingangspin) auf EN = 1 / DATA = 0 abzubilden?Der Stromverbrauch ist nur wichtig, wenn EN = 0.

Nicht von einem Binäreingang.Wenn Sie einen ADC-Eingang verwenden, können Sie.
Ich bin verwirrt!Der Titel sagt: "* Erhalten einer 0 und einer 1 von einem schwebenden Eingang *", aber die Frage sagt: "* Verwenden Sie einen einzelnen Pin für zwei Ausgänge *".Welches ist es?
@Transistor: Ich möchte zwei Ausgänge (insgesamt drei Zustände) von meiner Karte erhalten, indem ich einen einzelnen GPIO-Pin vom Mikrocontroller und eine Klebelogik auf der Karte verwende.Meine Idee war, dass der Mikrocontroller den Pin als Ausgang-Niedrig / Ausgang-Hoch / Eingang konfigurieren kann, um die gewünschten Zustände zu erhalten.
@Trevor: mit einem PWM-Ausgang anstelle des Floating-Eingangs ist möglicherweise möglich, da ich keinen verwende, aber wie würde ich das tun?;)
@Paulo: Es ist immer noch nicht klar.Versuchen Sie, einen Pin für zwei * Ausgänge * zu verwenden, oder versuchen Sie, zwei Signale an einem Eingangspin zu überwachen?In der Editor-Symbolleiste befindet sich eine schematische Schaltfläche.Skizzieren Sie es aus.Sie müssen Ihre Frage bearbeiten.
@Transistor: ein Pin für zwei Ausgänge, fügte einen Schaltplan hinzu
Es ist viel einfacher, 5 Ausgänge von 4 Pins zu erhalten, als 2 Ausgänge von 1 Pin zu erhalten.Vielleicht stellen Sie die falsche Frage.
Sie haben 3 Ausgangszustände: 0, 1 und hi-Z;Verwenden Sie also 2 Rs, um die Hi-Z-Spannung auf halbem Weg einzustellen, und dann 2 Komparatoren, um 00, 01 (oder 10) und 11 zu erhalten.
Ich bezweifle, dass die PWM-Lösungen genau das sind, wonach Sie suchen, aber mein erster Gedanke ist Telefonie.Telefone übertragen alle Nummern auf der Tastatur über ein einziges Kabel (plus Rückgabe).Und ich bin mir sicher, dass es dafür Hardware gibt =)
Sie haben drei verschiedene Zustände.Könnten Sie etwas mit Pin Low für einen Zustand, Pin High für den nächsten Zustand und Pin Low-to-High-Low für den dritten Zustand sehr schnell tun?
Sieben antworten:
Marcus Müller
2017-10-15 22:09:24 UTC
view on stackexchange narkive permalink

Ehrliche Wahrheit: Was Sie versuchen, ist einfacher zu implementieren, indem Sie einen Mikrocontroller mit genügend Pins verwenden.Es ist wahrscheinlich sogar billiger als ein Attiny85.Wer weiß.

Aber: Wenn Sie wirklich müssen, können Sie verschiedene Dinge tun, um mehr Ausgabe aus einer einzelnen Zeile herauszuholen:

  • Kaufen Sie einen IO-Expander, der den 1-Wire (Pseudo) -Standard verwendet, und implementieren Sie einen 1-Wire-Sender auf dem Attiny
  • Ein UART-Gerät könnte das auch, aber ich kenne keine Single-Wire-UART-zu-IO-Adapter, die eigentlich nicht nur ein anderer programmierter Mikrocontroller sind
  • Implementieren Sie einen DAC, gefolgt von einem ADC
    • DAC durch PWMing Ihrer Ausgabe,
    • Einspeisen der PWM in ein RC-Tiefpassfilter, wodurch eine "glatte" variable Spannung erhalten wird
    • Kaufen Sie einen günstigen ADC mit parallelem Ausgang, or
    • Implementieren Sie Ihren eigenen ADC mit parallelem Ausgang mit Zenerdioden
Das könnte in der Tat eine Lösung sein (Kauf eines anderen Mikrocontrollers :) oder einfach nur PB5 und einen Hochspannungsprogrammierer).Es handelt sich hauptsächlich um eine Lernübung in der Elektronik, bei der mein eigener E / A-Expander mit möglichst wenig Programmierung und diskreter Klebelogik erstellt wird.Ich dachte daran, Widerstände und Dioden zu verwenden, konnte es aber nicht zum Laufen bringen.
Upvoted.Ich habe eine Lösung, von der bekannt ist, dass sie funktioniert, aber es ist erforderlich, dass der betreffende Stift unnatürlich vorgerückt ist.
Marcus Müller
2017-10-15 23:07:22 UTC
view on stackexchange narkive permalink

Natürlich bin ich ein Nerd, daher sind hier Lösungen, die von Ihnen weniger wahrscheinlich implementiert werden, aber zum Spaß erwähnenswert:

Shift Register-basierte Shenanigans

Die folgenden Ideen basieren auf Seriell-Parallel-Schieberegistern.

Ausgangspin -> Dateneingang

Sie können Ihre Daten einfach in die serielle Dateneingabe Ihres Schieberegisters verschieben.

Problem: -Schieberegister benötigen eine Uhr, um zu wissen, wann der Eingang "abgetastet" werden soll.

Solution: Erzeugt einen Taktimpuls, wenn sich der Eingang ändert.

New Problem: OK, wir können dies mit einem einfachen logischen UND-Gatter tun, das Ihre DataIN und eine minimal verzögerte Version seiner Ausgabe kombiniert (Verzögerung durch diskrete Komponenten, z. B. ein RC-Filter). Aber: Dann können wir nur abwechselnde Bitmuster haben.

Solution: Die Ausgabesequenz Ihres Pins muss immer

sein

0->1 [lang] ->B [kurz] ->0 .

Was hier passiert, ist, dass der erste 1 einen Kondensator lädt (daher der "lange" 1). Die Spannung an dieser Kappe löst einen verzögerten One-Shot aus (z. B. über einen NE555), wenn es überschreitet eine Schwelle, die dann einen Takt für das Schieberegister verursacht.

In dem Moment, in dem der Impuls auftritt, haben Sie bereits das gewünschte Ausgangsbit B auf den Ausgang gesetzt. Das muss kürzer als die "feste" 1 sein, um zu vermeiden, dass der Takt erneut ausgelöst wird.

Sie führen die obigen Schritte zweimal aus, um zwei verschiedene Bits B1 und B2 in das Schieberegister zu verschieben.

Sie können das obige Schema senden

implementieren
  0b1111BB00
 

mit der UART-Einheit (falls Ihr Mikrocontroller über eine solche verfügt).

Wenn Sie genau hinschauen, ist dies sehr ähnlich zu dem, was die WSxxxx-Neopixel-Dinger für die Kommunikation tun: 0->1 markiert den Beginn einer Periode und die Menge von 1 legt innerhalb dieses Zeitraums fest, ob es sich um eine logische 0 oder 1 handelt.

Polynomial Passive Popular Pulsing

Dies erforderte einen reimenden Titel. In aller Wahrheit sollte dies wahrscheinlich als "lineare Rückkopplungsschieberegistererzeugung einer Ausgangssequenz" oder so bezeichnet werden.

Die Idee ist, dass Sie, wenn Sie ein Schieberegister verwenden und seinen Eingang mit einer logischen Kombination seiner internen Zellen verbinden, etwas erstellen können, das alle möglichen Ausgangszustände durchläuft (wenn Sie die Rückkopplungsfunktion entsprechend auswählen). Ich würde das hier erklären, aber meh, faul, also lesen Sie den Wikipedia-Artikel über lineare Rückkopplungsschieberegister.

Imbiss: Wenn Sie einen solchen LFSR haben können, können Sie durch Umschalten des clock alle Ausgaben erzielen (nur die richtige Anzahl von Malen umschalten).

Doh '. Das ist schön, aber schwerer zu erklären als ein Zähler

Natürlich ist das oben Genannte sehr cool (weil es zahlreiche Anwendungen hat, z. B. für die Kommunikation, die Überprüfung der Datenintegrität usw.), und es ist sehr effektiv in Bezug auf die Anzahl der Gates, die Sie dafür benötigen, aber:

Sie können genauso gut einen 2-Bit-Zähler (oder mehr) kaufen oder bauen. Und zählen Sie die Schalter Ihres Attiny-Pins. Der parallele Bitausgang des Zählers kann Ihre 2 Ausgangspins (oder mehr) sein.

Ich denke, es sagt viel aus, dass ich zuerst an LFSRs anstatt an Zähler gedacht habe.

Frequenzbasierte Diskriminierung

Filterbank mit zwei diskreten Frequenzen

Idee ist einfach:

  1. Erzeugen Sie mit dem Pin zwei verschiedene Frequenzen, indem Sie ihn beispielsweise mit einer Frequenz von 1 kHz umschalten (dh alle 1 ms, die der Ausgang wiederholt, müssen Sie alle 500 us umschalten) oder mit 2 kHz (umschalten alle 250 us) oder dem logische Summe beider Schwingungen (etwas schwer im Kopf zu machen, aber es läuft darauf hinaus, abwechselnd lange und kurze Hochperioden zu haben).
  2. Filtern Sie die Ausgabe mit zwei verschiedenen Filtern:
    1. Ein Tiefpassfilter, der nur alles unterlässt, sagen wir 1,2 kHz, ein RC wird
    2. Ein Bandpassfilter, der 2 kHz durchlässt, jedoch weder 1 kHz noch 3 kHz.
    3. ol>
  3. Gleichrichtung und Tiefpassfilterung des Ausgangs dieser beiden Filter. Tada, Sie haben einen 2-Tone 2FSK-Empfänger gebaut, wenn Sie dazu neigen.
  4. Dies sind Ihre beiden Ausgangssignale. Verwenden Sie eine Schwellenwertvorrichtung, einen "Diskriminator" (Zenerdiode, Komparator), um sie in binäre 0 oder 1 umzuwandeln.
  5. ol>

    Bonus

    Wenn Sie nicht 1 und 2 kHz, sondern einige MHz verwenden, können Sie Ihr Verbindungskabel tatsächlich durch geeignete Antennen ersetzen und diese Übertragung über Funk durchführen. Sie würden auch gegen das Gesetz verstoßen, indem Sie Frequenzen missbrauchen, für die Sie keine Lizenz haben.

    PWM das

    Idea: wie oben, jedoch einfacher.

    Es gebe zwei unabhängige Informationen:

    1. Ausgangsarbeitszyklus> 50%
    2. Ausgabeänderungen überhaupt
    3. ol>

      Sie können den Arbeitszyklus> 50% entweder durch

      haben
  • Schalten Sie den Pin konstant hoch (100% Tastverhältnis) oder niedrig (0%) oder um
  • Stellen Sie die PWM-Einheit so ein, dass Sie einen Arbeitszyklus von 25% oder 75% erhalten.

Dann liefert wie oben ein Tiefpassfilter, gefolgt von einem Diskriminator, der im halben Ausgangsspannungsbereich schaltet, das erste Ausgangsbit.

Ein Hochpassfilter, gefolgt von einem Gleichrichter, einem Kondensator und einem Diskriminator, gibt Ihnen das zweite Bit.

frarugi87
2017-10-16 16:59:28 UTC
view on stackexchange narkive permalink

Sie können zwei Komparatoren und die High-Input-Low-Werte verwenden. Zum Beispiel:

schematic

simulieren diese Schaltung - Schema erstellt mit CircuitLab sup>

Die beiden Komparatoren geben eine logische 1 aus, wenn die Spannung am Eingang höher als 3/4 * Vcc (DATA one) oder 1/4 * Vcc ist (EN eins).

Wenn der Attiny-Pin nach unten gezogen wird, wird die Spannung auf 0 V festgelegt. Die Komparatoren haben dann die Werte 0 und 0. Wenn der Pin frei bleibt (als Eingang eingestellt), geht die Spannung aufgrund der beiden Widerstände auf Vcc / 2; Die Komparatoren zeigen 1 für die EN, 0 für die DATA. Wenn der Stift hochgezogen wird, wird die Spannung auf Vcc festgelegt; Beide Komparatoren zeigen eine 1. Zusammenfassung:

  Pin-Status | DE | DATEN
------------------------
  OUT 0 | 0 | 0
  EINGABE | 1 | 0
  OUT 1 | 1 | 1
 

Beachten Sie, dass dies im Gegensatz zu den Lösungen mit PWM oder Port Expander nicht skalierbar ist. Wenn Sie mehr Pins benötigen, ist es möglicherweise besser, ein Schieberegister zu erstellen und ihm zwei Pins zuzuweisen (Takt und Daten). Auf diese Weise erhalten Sie bei Bedarf mehr Ausgänge.

BEARBEITEN: Eine andere Lösung, bei der keine ICs, sondern nur diskrete Komponenten verwendet werden, ist die folgende:

schematic

simulieren diese Schaltung sup>

In diesem Fall müssen Sie die MOS auswählen, damit sie mit Vcc / 2 eingeschaltet werden können. Beachten Sie, dass die Werte der Widerstände auch erhöht werden können, wenn weniger Strom fließen soll. Sie können den P-MOS auch mit einem PNP und den N-MOS mit einem NPN ändern, aber Sie müssen einen Strombegrenzungswiderstand an ihrer Basis hinzufügen (und ich bin nicht sicher, wie dies die drei Zustände beeinflusst) / p>

In jedem Fall ist hier die Tabelle mit den Status

  Pin-Status | DE | DATEN
------------------------
  OUT 0 | 1 | 1
  EINGABE | 1 | 0
  OUT 1 | 0 | 0
 
Eleganter als meine Lösung.Ich habe die Tri-State-Option vergessen.+1.
Dies ist das, woran ich gedacht habe.Bei Vcc = 3,3 V sollten BSS84 und BSS138 für die MOSFETs funktionieren.Um den Stromverbrauch für EN = 0 zu reduzieren, könnte ich zwei Dioden zwischen R1 und R2 hinzufügen und den Eingang zwischen den Dioden und den Gates auf beiden Seiten verbinden.Dann kann der rechte Teil der Schaltung CMOS-Inverter verwenden.Wenn der Eingang schwebend ist, sollten sie auf 0 (für DATA) bzw. 1 (für EN) gehen.
@PaoloBonzini Beachten Sie, dass Sie möglicherweise leicht außerhalb der Spezifikationen arbeiten, da die Schwellenspannung sehr nahe an Vcc / 2 liegt ... Warum sollte der Diodenverbrauch bei den Dioden verringert werden?Sie können (und sollten wahrscheinlich) den Wert der Widerstände auf einige hundert Kiloohm erhöhen.Beachten Sie bei CMOSs, dass der Bereich zwischen 0,8 V und 2,0 V verboten ist (1,65 V sind daher für CMOS-Ports nicht in Ordnung).
Die Dioden würden für beide eine unterschiedliche Spannung an den Gates anstatt 1,65 V liefern, so dass ich CMOS-Inverter (diskret, nicht 7404) verwenden und den statischen Stromverbrauch verringern kann.Ist das überhaupt sinnvoll?
Transistor
2017-10-15 22:36:50 UTC
view on stackexchange narkive permalink

schematic

simulieren diese Schaltung - Schema erstellt mit CircuitLab sup>

Abbildung 1. Eine einfache binäre 3-Zustands-Codierung, die durch ein Tiefpassfilter geleitet und von zwei Komparatoren überwacht wird, um die Daten zu extrahieren.Beachten Sie, dass viele Komparatoren einen Open-Collector-Ausgang haben und einen Pull-up-Widerstand erfordern.

Sie werden vor einigen Herausforderungen stehen, wenn Sie die richtige Zeitkonstante R1-C1 finden.

Ja, schön, das ist eine der möglichen ADC-Implementierungen, die in meiner [ersten Antwort] (https://electronics.stackexchange.com/a/334574/64158) erwähnt wurden.
TLW
2017-10-16 00:21:37 UTC
view on stackexchange narkive permalink

Eine (schlechte) Lösung lautet wie folgt:

data = gpio
schwacher invertierender Schmitt-Trigger von GPIO zu GPIO.
invertiert retriggerbar monostabil von gpio nach en.

Die Grundidee ist, dass wenn der Ausgang tristiert ist, der Schmitt bewirkt, dass er schwingt, was vom Monostabil aufgenommen wird, um den Ausgang zu deaktivieren.Dies wird jedoch beim Deaktivieren der Ausgabe fehlerhaft sein.Und hat Stromverbrauch, wenn deaktiviert.

Eigentlich ist das keine schlechte Idee.Ich habe beim Schreiben meiner Antwort die Tri-State-Option vergessen.Führen Sie es in einen RC-Debouncer am Eingang des anderen Chips ein.Der zweite Chip kann den Eingangsstatus lesen, den Eingang auf einen Ausgang umschalten und versuchen, ihn auf die andere Logikstufe zu ziehen, ihn freizugeben und zu prüfen, ob er dort bleibt.Wenn dies der Fall ist, wird der erste Chip dreifach angegeben.Wenn nicht, dann sind es Daten.Erhöhen Sie Ihre Antwort.
Um das Problem mit dem Stromverbrauch zu beheben, könnte ich einfach die Richtung von EN und DATA umkehren.
Nick Gammon
2017-10-17 00:53:37 UTC
view on stackexchange narkive permalink

Wenn Sie keine Aufgabe ausführen, in der ausdrücklich angegeben ist, dass Sie einen Attiny85 verwenden müssen, egal was passiert, besteht die bei weitem einfachste Lösung darin, einen Chip mit mehr Pins zu verwenden (z. B. den Atmega328P). Die Kosten wären praktisch gleich (z. B. 2,00 USD im Vergleich zu 1,50 USD).

Einige der anderen Antworten, die die Verwendung eines Ein-Draht-Protokolls, von Schieberegistern, Schmitt-Triggern, Komparatoren usw. vorschlagen, fügen ohnehin einfach mehr Teile (und Kosten) hinzu. Es wäre viel einfacher, einen Mikroprozessor zu verwenden, der tatsächlich das tut, was Sie wollen, als zusätzliche Chips hinzuzufügen, um seine Funktionalität auf weniger benutzerfreundliche Weise zu erweitern.


Eine weitere Möglichkeit: Der / RESET-Pin kann als allgemeiner IO-Pin konfiguriert werden. Auf diese Weise können Sie einen zusätzlichen Stift erhalten. Seien Sie gewarnt, dass eine spätere Neuprogrammierung schwieriger sein wird. Trotzdem ist es nicht unmöglich. Ich habe einen Beitrag über die Hochspannungsprogrammierung von Chips wie dem Attiny85 mit einem anderen Prozessor (in diesem Fall einem Arduino Uno). Einige Teile ermöglichen das Einschalten der 12 V an den / RESET-Pin zum richtigen Zeitpunkt.

AaronD
2017-10-17 01:46:40 UTC
view on stackexchange narkive permalink

Ausgehend vom zweiten Beispiel von @ frarugi87 ( https://electronics.stackexchange.com/a/334700/53375) könnten Sie mit Optoisolatoren etwas Ähnliches tun:

schematic

simulieren diese Schaltung - Schema erstellt mit CircuitLab sup>

Der Vorteil dieser Version besteht darin, dass sie nur sehr wenig Strom verbrauchen kann, wenn die Durchlassspannung der Optos (einschließlich zusätzlicher Dioden in Reihe, um dies sicherzustellen) mehr als die Hälfte der Versorgung beträgt.Natürlich kann es nicht mehr als die volle Versorgung sein, sonst werden sie überhaupt nicht auftauchen.

OUT0 und OUT1 können die entsprechenden Namen und Pull-up / down-Widerstände haben, um die gewünschte Kombination von Signalen zu erzeugen.

Das ist ordentlich, aber seien Sie vorsichtig, dass mit dem GPIO dreifach angegeben wird, dass beide LEDs etwas leitend sind.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...