mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schaltung 1Wire Ansteuerung Schieberegister verstehen


Autor: HEF4528 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: HEF4528 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein Foto der Platine. Der 8 Beiner oben ist nur ein Optokoppler, 
der ist ja unkritisch, den habe ich im Schaltplan weggelassen.

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HEF4528 schrieb:
> Ich habe die Eingangsschaltung mit dem HEF4528 Multivibrator mal
> "abgemalt" und angehangen.

Da wirst du noch mal nacharbeiten müssen.
Das Eingangssignal geht bei dir einfach über den 4.7K auf +5V.
Da ist dann Ende mit jeglicher Funktion... ;-)

Autor: Inkognito (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: HEF4528 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Carl Drexler (jcw2)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
Autor: HEF4528 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach deinem Schaltplan dürfte die Zeit für das Strobe Signal bei ca. 
15ms liegen.
D.h. die Daten für alle Schieberegister müssen innerhalb dieser 15ms 
übertragen sein.
Und die Updaterate muss < 1/15ms = ca. 65 Hz sein.

Autor: HEF4528 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe F. (easylife)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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... ;-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe F. (easylife)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter D. schrieb:
> Auch das OE sollte fest auf high, sonst reduziert es nur unnötig die
> Helligkeit.

Zustimmung.

Ausserdem sehe ich gerade, dass STROBE sinnvollerweise an Q# gehört, und 
nicht an Q.
Meine Waveform bezieht sich auf Q#.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.