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:
- 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).
- Filtern Sie die Ausgabe mit zwei verschiedenen Filtern:
- Ein Tiefpassfilter, der nur alles unterlässt, sagen wir 1,2 kHz, ein RC wird
- Ein Bandpassfilter, der 2 kHz durchlässt, jedoch weder 1 kHz noch 3 kHz.
ol>
- Gleichrichtung und Tiefpassfilterung des Ausgangs dieser beiden Filter. Tada, Sie haben einen 2-Tone 2FSK-Empfänger gebaut, wenn Sie dazu neigen.
- Dies sind Ihre beiden Ausgangssignale. Verwenden Sie eine Schwellenwertvorrichtung, einen "Diskriminator" (Zenerdiode, Komparator), um sie in binäre 0 oder 1 umzuwandeln.
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:
- Ausgangsarbeitszyklus> 50%
- Ausgabeänderungen überhaupt
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.