Hallo zusammen, ich bin auf der Suche nach einem Output Expander. Ich habe ein externes device, bei dem ich nur einen Ausgangspin zur Verfügung habe (ein Eingangspin wäre auch vorhanden). Mit dem Ausgangspin würde ich gerne mindestens 3 Ausgänge eines Output Expanders Schalten. Welcher wäre dafür geeignet? Ich habe 12V und 5V zur Versorgung und als Ausgangspegel zur Verfügung. Das ganze darf beliebig langsam sein (keine Geschwindigkeitsanforderungen). Das entsprechende Protokoll müsste ich eh durch pin togglen implementieren, deswegen bin ich da recht offen (uart, 1wire, ..?). Wichtig ist, dass die Signale erst gesetzt werden, wenn alle Informationen vorhanden sind. Also erst den Ausgang definieren (z.B. High Low High) und dann soll das für alle Ausgänge übernommen werden. Ich glaube, dass dadurch ein klassisches Shiftregister entfällt. Wäre ggf. der DS2408 geeignet? Ich hab nur kurz ins Datenblatt geschaut aber ich konnte nicht direkt erkennen, wann die Ausgänge geschaltet werden. Beste Grüße
Irgendo hier gabs doch den 1wire-bus von Peter Dannegger, scheint mit perfekt dafür. Empfänger wäre dann ein Tiny25 o.ä. Keine besonderen Anforderungen ans timing, der interne Oszillator reicht völlig.
Lks schrieb: > Wäre ggf. der DS2408 geeignet? Ich hab nur kurz ins Datenblatt geschaut > aber ich konnte nicht direkt erkennen, wann die Ausgänge geschaltet > werden. Dafür sind Datenblätter aber da ... -> Seite 17 "Channel-Access Write [5Ah]" Die Ausgänge werde gleichzeitig geändert nachdem der neue Zustand und der invertierte neue Zustand übertragen wurden. Die Ausgänge werden nur geändert wenn wenn beide übereinstimmen. Der Baustein ist also geeignet wenn die Ausgänge passen (Open Drain, max 20mA insgesamt)
Vor kurzem hatte jemand hier einen Bus anhand der Hardware zu "reengenieren", der wie die RGB-LED's funktionierte. Zyklus beginnt mit einer Flanke, nach n μ-/m-sec wird gesampled, d.h. z.B. eine 0 wird zu: _|-|___|... ^ ^ ^ eine 1 wird zu: _|---|_|... ^ ^ ^ a b c a: Anfang einer Bit-Zelle b: Sample-Zeitpunkt c: Anfang nächste Bitzelle Die Daten werden in ein Schieberegister geschoben. Nach einer Pause von 5..10 Bitzeiten werden die Daten in die Ausgangs-Latches des SR übernommen. Notfalls reicht, neben dem SR, ein retrigferbares Dual-Monoflop aus. Mit μC natürlich auch sehr easy. Beitrag "Schaltung 1Wire Ansteuerung Schieberegister verstehen"
Carl D. schrieb: > Vor kurzem hatte jemand hier einen Bus anhand der Hardware zu > "reengenieren" Genau diesen Beitrag möchte auch ich empfehlen. Da der Stromlaufplan im Beitrag leider ein paar Fehler hat, anbei eine "aufgeräumte" Version. Mit den 3 Signalen DATA, CLK und STROBE steuerst du dann ein CD4094 Schieberegister an (oder auch mehrere hintereinander).
:
Bearbeitet durch User
Aufräumen will gelernt sein. Der vorherige Stromlaufplan enthält einen Fehler (A und Cx des 2. Monoflops gehören natürlich nicht verbunden). Anbei die korrigierte Version. C2 kann nach eigenem Ermessen dimensioniert werden. 33n kam uns ein wenig zu gut gemeint vor. 1n reicht sicherlich auch und macht eine höhere Refreshrate möglich.
:
Bearbeitet durch User
Joe F. schrieb: > Carl D. schrieb: >> Vor kurzem hatte jemand hier einen Bus anhand der Hardware zu >> "reengenieren" > > Genau diesen Beitrag möchte auch ich empfehlen. > Da der Stromlaufplan im Beitrag leider ein paar Fehler hat, anbei eine > "aufgeräumte" Version. > > Mit den 3 Signalen DATA, CLK und STROBE steuerst du dann ein CD4094 > Schieberegister an (oder auch mehrere hintereinander). Man braucht allerdings nicht unbedingt 1% Widerstände aus der E96-Reihe, wenn man Standard-C's mit 20% Toleranz benutzt. Es tun auch 470k, bzw etwas Fehlerrechnug, um das Timing in jedem Extremfall einzuhalten.
Wenn man statt "diskreter" Hardware mehrere kleine Mikrocontroller benutzt, könnte man auch gleich das Daisy-Chain Prinzip der WS2812-LEDs benutzen. - Lange/kurze Impuls = 1/0 (wie oben) - der Mikrocontroller behält die ersten N Impulse für sich (seine N Digitalausgänge) und gibt die folgenden Impulse, auf definierte Impulslänge aufgefrischt, an seinem Ausgang wieder aus, wo dann der nächste µC dranhängt. - kommen für eine gewisse Zeit keine weiteren Impulse, beginnt mit dem nächsten Impuls eine neue Übertragung. Vorteil des Daisy-Chainings: es können beliebig viele, gleiche Controller, mit dem gleichen Programm, verkettet werden. Die Bit-Adressen ergeben sich aus der Verschaltung, d.h. es braucht keine Addressierung und auch keinen unterschiedlichem Code für die einzelnen Controller.
Nimm eine fertige Bitbang-UART-Implementation und sende die Daten damit. Dann brauchst Du auf der Seite Deines µCs nicht erst groß was entwickeln. Empfangen würde ich die Daten mit dem UART-Eingang eines einfachen µC der dann die entsprechenden Portpins bei sich setzt. Den UART-RX auf Seite Deines µCs lässt Du weg, den TX auf Seite des Portexpanders lässt Du einfach offen. Damit brauchst Du nur einen Pin. Bei mir wäre der Portexpander-µC wohl ein STM32F030F4, es gehen aber natürlich auch andere Modelle wie z.B. Attiny. Wobei die Tinys halt meist keinen fertigen Hardware-UART haben. Vorteile der Lösung sehe ich darin: - fertiger Code zum Senden gut verfügbar - fertiger Code für den Empfang gut verfügbar - sehr verbreitetes Protokoll, fertige Decoder in Oszis und Logic-Analyzern vorhanden - sehr flexibel, Du kannst Deine Anforderung daß alle Pins auf einmal gesetzt werden locker umsetzen - kann auch später leicht erweitert werden, wenn z.B. ein Pin jetzt ein PWM-Signal ausgeben soll statt nur dauerhaft 0/1 - ein STM32F030F4 kostet weniger als ein Dallas-1wire-IC oder I2C-Portexpander
:
Bearbeitet durch User
Gerd E. schrieb: > Bei mir wäre der Portexpander-µC wohl ein STM32F030F4, Der hat in der Applikation aber einige Nachteile: - läuft nicht mit 5V (ok, ich weiß nicht, ob das für den TO eine Rolle spielt) - Gehäuseform nix für Grobmotoriker (ok, ich weiß nicht, ob das für den TO eine Rolle spielt) - der interne Oszi ist für einen UART zu ungenau -> extra Quarz oder Resonator notwendig, - braucht relativ viel Strom Ich würde evtl. einen kleinen PIC nehmen. Der läuft auch mit 5V, braucht <<1mA, hat Hardware-UART und einen internen Oszi, der ohne User-Calibration genau genug ist. Und es gibt ihn auch als DIP.
Thomas E. schrieb: >> Bei mir wäre der Portexpander-µC wohl ein STM32F030F4, > > - der interne Oszi ist für einen UART zu ungenau -> extra Quarz oder > Resonator notwendig, das stimmt so nicht. Der interne Oszillator HSI ist 8MHz und auf 1% (bei 25°C) genau. Das reicht für langsamere UART-Übertragung mit z.B. 19200 Bps vollkommen aus. Und falls Du dennoch jemals Probleme in die Richtung bekommen solltest, kannst Du immernoch die Autobaud-Funktion nehmen und damit die Baudrate genau an die des Senders anpassen.
:
Bearbeitet durch User
Gerd E. schrieb: > das stimmt so nicht. Der interne Oszillator HSI ist 8MHz und auf 1% (bei > 25°C) genau. Das reicht für langsamere UART-Übertragung mit z.B. 19200 > Bps vollkommen aus. Das eine Prozent gilt aber lt. Datenblatt nur für "with User Calibration", d.h. man müsste erstmal selbst einen Kalibrierungs-Wert ermitteln und speichern. Da sind mir die 2% ohne Kalibrierungs-Zinober vom PIC lieber. Billiger ist der PIC außerdem auch noch, die Port-Ansteuerung kriegt man noch ohne HAL hin, und den Takt für den Port einzuschalten kann man auch nicht vergessen...
:
Bearbeitet durch User
Auf einen uC wollte ich gerne verzichten (=> Flash Aufwand). Der Hinweis von Timo ist sehr wertvoll, dann werde ich mir den IC mal näher anschauen. Zu "Nimm eine fertige Bitbang-UART-Implementation und sende die Daten damit. Dann brauchst Du auf der Seite Deines µCs nicht erst groß was entwickeln." Mein "uC" ist ein zugekauftes device, welches einen FPGA drauf hat über den ich nur einen Ausgangspin steuern kann (der FPGA läuft mit einer festen, vom Hersteller gelieferten Firmware). Da wird es wohl nichts fertiges geben. Der Hinweis auf die 1Wire Ansteuerung eines Schieberegisters werde ich mir anschauen, sollte ich mit dem DS2408 nicht glücklich werden. Danke für die vielen konstruktiven Antworten.
Hier hat noch jemand die Monoflops "wegoptimiert". DATA und STROBE werden einfach durch RC-Glieder "verzögert". Die (wichtige) Flankensteilheit von CLK bleibt erhalten. Diese Sparvariante sollte man natürlich nur wählen, wenn man mit einer gewissen Fehlerrate leben kann (z.B. an den Ausgängen hängen nur Anzeige-LEDs, und das Schieberegister wird in kurzen Abständen immer wieder aktualisiert). http://www.romanblack.com/shift1.htm
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.