Schaltung 1Wire Ansteuerung Schieberegister verstehen

Gast #4698936
Lesenswert?

Ich habe hier eine Platine auf der eine Reihe CD4094 Schieberegister 
kaskadiert sind. Diese werden mir einer 1Wire Datenleitung gefüttert.
Ich habe die Eingangsschaltung mit dem HEF4528 Multivibrator mal 
"abgemalt" und angehangen.

Kann mir bitte jemand helfen herauszufinden wie das Daten-Protokoll 
auszusehen hat?
Angehängte Dateien:
Gast #4698968
Lesenswert?

HEF4528 schrieb:
> Ich habe hier eine Platine auf der eine Reihe CD4094 Schieberegister
> kaskadiert sind.

So? Wo denn? Ich sehe nur einen 4094. Zum kaskadieren sind
aber mindestens zwei davon nötig. Du meinst vermutlich die 4528,
aber das sind zwei retriggerable-resetable monostable multivibrators
und keine Schieberegister.

> Diese werden mir einer 1Wire Datenleitung gefüttert.

Deine 1Wire-Datenleitung ist mit +5V über R6 verschaltet.
Daten werden hier nur geblockt.

> Ich habe die Eingangsschaltung mit dem HEF4528 Multivibrator mal
> "abgemalt" und angehangen.

... dabei hast du vermutlch ein paar Fehler mit eingebaut.
Kontrolliere das noch mal empirisch.

> Kann mir bitte jemand helfen herauszufinden wie das Daten-Protokoll
> auszusehen hat?

Das dürfte aufgrund der beiden Multivibratoren (4528) mit
unterschiedlichem Timing nicht so einfach sein. Hier könnte ein
digitales Laufzeitdiagramm vielleicht weiter helfen.

HEF4528 schrieb:
> den habe ich im Schaltplan weggelassen.

Anscheinend nicht das einzigste.
Gast #4698976
Lesenswert?

Inkognito schrieb:
> So? Wo denn? Ich sehe nur einen 4094. Zum kaskadieren sind
> aber mindestens zwei davon nötig. Du meinst vermutlich die 4528,
> aber das sind zwei retriggerable-resetable monostable multivibrators
> und keine Schieberegister.

Ich habe den Schaltplan bewusst auf das entscheidende reduziert ich 
schrieb ja auch, dass ich die "Eingangsschaltung" gezeichnet habe.

Dass da noch ein paar mehr 4094er sind sieht man auf dem Foto.

Gut, wenn dass was ich gezeichnet hat so nicht passen kann, dann schaue 
ich es mir noch einmal genau an.
Fürs Timing muss ich rstmal ausrechnen mit welcher Frequenz die 
Multivibratoren takten.
#4698988
Lesenswert?

R6 hängt wohl eher an der Basis des Ts. das ganze funktioniert als 
Inverter.
1. Monoflop liefert ca 5μs nach der der Fallenden Flanke eine 
ansteigende Flanke für den SR-Takt. 2. Monoflop erkennt nach 7,5ms 
ausbleibende Daten und übernimmt den SR-Stand in die Ausgangs-Latches.
Sieht wie WS2812-Protokoll aus nur langsamer.

Die Zeiten sind aus dem DB-Diagramm geschätzt.
#4699016
Lesenswert?

Eigentlich relativ einfach:
Das 4094 reagiert auf steigende Clockflanken.
Q# von IC2A geht bei Triggerung für eine definierte Zeit von high nach 
low und zurück.
D.h. die CLK des Schieberegisters übernimmt die Daten nach dieser Zeit.
Du kannst also eine Clock mit einem kurzen Eingangspuls triggern, und 
danach dann das Datenbit anlegen.
Wenn ich es richtig vermute, ist IC2A für 15us low.

Etwas unklar ist, wie diese Transistorschaltung funktionieren soll.
Vermutlich soll das ein Inverter sein.
Deswegen beziehe ich mich ab hier mit IN=high auf das Signal an IC2A 
Input A bzw. IC1 (D)
Ein kurzes high am Input (<15us) schiebt also eine 0 ins 
Schieberegister, ein längeres high (>15us) eine 1.
Sinnvollerweise nimmt man Zeiten, die sich deutlich von 15us 
unterscheiden (z.B 5us und 30us).

IC2B erzeugt das STROBE signal "automatisch".
Du musst einfach lange genug warten, bevor du das nächste Datenwort 
schickst.

Die Pulsbreiten von IC2A und IC2B misst du am besten mit einem 
Oszilloskop aus.
Gast #4699019
Lesenswert?

Danke. Das bringt mich alles große Schritte weiter.

Den Schaltplan habe ich überprüft.
E und C von Transistor sind vertauscht.

Also H und L unterscheiden sich in der Impulslänge,
Strobe kommt nach Pause automatisch.
Damit komme ich weiter.
Gast #4699243
Lesenswert?

Ich kann Erfolg vermelden.
Mein Dank an alle.

Wichtig war noch, dass der Abstand zwischen zwei Pulsen immer gleich 
sein muss. Nach einem kurzen Puls (für L) muss auch eine längere Pause 
bis zum nächsten Puls folgen. Nach einem langen Puls (für H) eben eine 
kürzere Pause.

Auch wenn Ihr jetzt sagt: ist doch logisch. Für mich aber erst jetzt.

Das Stichwort "WS2812 Protokoll" von Carl Drexler war richtig hilfreich.
Genauso waren die von Joe F. berechneten Pulszeiten verdammt dicht an 
der Realität.
#4699322
Lesenswert?

HEF4528 schrieb:
> Wichtig war noch, dass der Abstand zwischen zwei Pulsen immer gleich
> sein muss. Nach einem kurzen Puls (für L) muss auch eine längere Pause
> bis zum nächsten Puls folgen.

Klar. Du musst auf jeden Fall warten, bis die CLK wieder high geworden 
ist.
Am besten ist es, mit einer gleichbleibenden Bitbreite zu arbeiten.
Wenn dein Controller ein SPI Interface hat, kann man z.B. pro Bit 
einfach je ein Byte rausschicken, für eine 0 ein 8'b11000000 (0xC0) und 
für eine 1 ein 8'b11111100 (0xFC)...
Bitrate ca. 1/30us * 8 = 270KHz

Eines hatte ich übrigens übersehen: das Monoflop für das STROBE Signal 
ist retriggerbar.
D.h. die 15ms verlängern sich mit jedem gesendeten Bit.
Die 15ms Pause muss also nach Beginn des letzten Bits abgewartet werden.
Die Refreshrate reduziert sich entsprechend.
Auf der anderen Seite können so beliebig viele Bits übertragen werden.

Diese Schaltung kommt definitiv in meine Sammlung für gute Ideen... ;-)
Angehängte Dateien:
#4699328
Lesenswert?

Joe F. schrieb:
> D.h. die Daten für alle Schieberegister müssen innerhalb dieser 15ms
> übertragen sein.

Nö, der 4528 ist retriggerbar, die Zeit läuft also erst nach dem letzten 
Takt ab.
15ms sind daher sehr lang, 10-fach länger als ein Takt sollte dicke 
reichen, z.B. C2 = 220pF.
Auch das OE sollte fest auf high, sonst reduziert es nur unnötig die 
Helligkeit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren