Forum: Mikrocontroller und Digitale Elektronik Präzisions Monoflop zur Erzeugung von Pulsen im Bereich von 200-800ns


von Leo B. (luigi)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich bin momentan auf der Suche nach einer Schaltung, mit der es möglich 
ist LED-Strips mit dem WS2811 Chip drauf per SPI anzusteuern.
Ich habe mir auch schon eine nette Schaltung ausgedacht (Anhang) nur 
leider basiert sie auf 2 RC-Gliedern und ich musste nun feststellen, 
dass sie SEHR abhängig von der Versorgungsspannung ist. (Hätte ich auch 
früher merken können). Die Pulsdauer der beiden Monoflops steigt bei 
sinkender Versorgungsspannung...

Jetzt suche ich halt wieder und im Moment bin ich so verfahren in obiger 
Sackgasse, dass ich keine neuen sinnvollen Ideen habe. Vielleicht kann 
mir gerade ja jemand helfen.

Genaue Anforderung des WS2811 Protokolls sind:
800kBaud, eine Datenleitung, kein Takt
eine "1" wird durch ein 0.6µs langen 5 Volt gefolgt von 0.65µs 0 Volt 
dargestellt, eine "0" wird durch einen 0.25µs 5 Volt-Puls gefolgt von 
1µs 0 Volt dargestellt...
Im Datenblatt Seite 3 und 4
http://www.adafruit.com/datasheets/WS2811.pdf

Ich bin gerade Dankbar für alles was mir neue Kreativität ins Hirn 
bringt
Vielen Dank
Gruß Leo

von MaWin (Gast)


Lesenswert?

Sieht doch aus wie 2 MonoFlops, die sind zeitstabil auch bei 
schwankender Versorgungsspannung, aber du schreibst ja nicht welcher IC 
es ist, 74HC123.

von (prx) A. K. (prx)


Lesenswert?

SPI schnell genug takten. Je ein Byte-Pattern für 0 und für 1 so wählen, 
dass die Zeiten passen. Gibt 1 übertragenes Bit pro SPI-Byte. Mit etwas 
Toleranz auch 2.

von Leo B. (luigi)


Lesenswert?

Sorry MaWin, im Eifer des Gefechts ist mir diese Information irgendwie 
verloren gegangen. Das Gatter am Ausgang ist ein 74HC1G00.

Aber nach meiner LT-Spice-Simulation ändert sich die Pulsdauer mit der 
Versorgungsspannung.
Einen echten Baustein habe ich leider nicht vorrätig. Ist bei der 
Simulation etwa der Fehler?

@A. K. (prx)
Danke für den Tip. Aber genau das möchte ich nicht tun. Ich möchte schon 
die Bytes 1:1 übertragen können.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Wer stellt denn die notwendigen Daten in der Geschwindigkeit bereit?

Ansonsten kann man das mit einem Schieberegister erzeugen, welches
mit 8 MHz getaktet wird: ein 1-Bit wird mit 5/5 Takten high/low
codiert, ein 0-Bit mit 2/8 Takten high/low.  Kann man ja fast noch
als PWM mit einem AVR ausgeben lassen. ;-)

von (prx) A. K. (prx)


Lesenswert?

Leo B. schrieb:
> Sorry MaWin, im Eifer des Gefechts ist mir diese Information irgendwie
> verloren gegangen. Das Gatter am Ausgang ist ein 74HC1G00.

Ich glaub er meinte das andere IC. ;-)

von Leo B. (luigi)


Lesenswert?

Jörg Wunsch schrieb:
> Wer stellt denn die notwendigen Daten in der Geschwindigkeit bereit?

Ein Mikrocontroller, wahrscheinlich ein Mega88, aber damit der die Daten 
auch schnell genug generieren kann muss er noch relativ viel Rechenzeit 
frei haben, daher auch die Auslagerung auf Hardware...

von (prx) A. K. (prx)


Lesenswert?

Wenn du bei einem Byte-Takt von 100kHz nebenbei noch reichlich andere 
Dinge erledigen willst, dann wär DMA schon ganz nützlich.

Braucht das ein festes Zeitraster von ebd. 800kHz, oder stört es nicht, 
wenn zwischen den Bytes variable Pausen <<50µs liegen? Das SPI der AVRs 
ist nicht grad sonderlich gut gepuffert.

von Leo B. (luigi)


Lesenswert?

kleine pausen stören nicht.
nunja, recht viel weiter bin ich jetzt leider nicht. Dennoch Danke

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Wie wär es mit einem zweiten kleinen AVR, der diese Aufgaben erledigt?

Kostet dann natürlich ein bisschen Zeit, die Software dafür zu 
schreiben...

von Leo B. (luigi)


Lesenswert?

Markus Weber schrieb:
> Wie wär es mit einem zweiten kleinen AVR, der diese Aufgaben erledigt?
>
> Kostet dann natürlich ein bisschen Zeit, die Software dafür zu
> schreiben...

Ja ich glaube fast, dass das die eine sinnvolle Lösung ist. Denn bis ich 
bei den 74HC123 die richtign RC-Glieder ermittelt habe (Simulation und 
Datenblatt decken sich hier zu 0%) und bis das alles sinnvoll läuft, da 
ist die Software für den 2. AVR dann schon 100mal schneller geschrieben 
und bei Fehlern kann man auch leicht ein Update machen...

von Axel S. (a-za-z0-9)


Lesenswert?

Leo B. schrieb:

> ... nach meiner LT-Spice-Simulation ändert sich die Pulsdauer mit der
> Versorgungsspannung.

Und? Erwartest du nennenswerte Änderungen der Versorgungsspannung?

> Einen echten Baustein habe ich leider nicht vorrätig. Ist bei der
> Simulation etwa der Fehler?

Simulation ist immer fragwürdig. Und natürlich hängt das Verhalten 
auch stark vom IC bzw. der Logikfamilie ab. So hat bspw. 74HC 
Schaltschwellen, die ca. proportional zur Versorgungsspannung sind, was 
eine relativ geringe Abhängigkeit der Impulslänge von der 
Versorgungsspannung ergibt. Standard 74er oder 74HCT sind da 
problematischer.

Ganz konkret aus dem Datenblatt des 74HC123 von ST; mit R=10K, C=100pF 
bekommt man 1.4µs @ 2V, 1.2µs @ 4.5V und 1.1µs @ 6V (alles typische 
Werte). Das ist m.M.n. ganz ordentlich.

Viel gravierender dürfte sein, daß deine 250ns schon recht nahe an den 
minimalen Werten für die Pulslänge liegen (für 74xx123). Bzw. du eine 
große Abhängigkeit von parasitären Kapazitäten bekommst. Insofern liegt 
eine volldigitale Erzeugung der Pattern nahe. SPI ist natürlich am 
einfachsten.


XL

von Ulrich (Gast)


Lesenswert?

Für den Fall das die Zeiten zu sehr von der Versorgungsspannung abhängen 
gibt es Spannungsregler, und entsprechende ICs, die auch mit 2 oder 3 V 
laufen. Die Lösung per µC hat einfach das Problem, dass die Abtastrate 
eher zu klein ist, und man dadurch Fehler in der Größenordnung 50-200 ns 
bekommt. Das geht analoge deutlich präziser bei so kurzen Zeiten.

Wenn man es auf die Spitze Treiben will, könnte man 2 analoge Monoflops 
haben, eines stellt die Funktion dar, und das andere wird angeglichen.

von Tim  . (cpldcpu)


Lesenswert?

Irgendwie verstehe ich die Problemstellung nicht. Das Protokoll ist 
ziemlich schnell - gerade einmal 30µs pro LED. Damit kann man 50 LEDs 
100x in der Sekunde updaten und hat trotzdem noch 85% der Rechenzeit 
frei. In diesen 85% kann die Berechnung erfolgen. Mit SPI wird kaum mehr 
rechenzeit übrig bleiben.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

A. K. schrieb:
> Das SPI der AVRs
> ist nicht grad sonderlich gut gepuffert.

Der Mega88 beherrscht das Master-SPI im UART-Modus. Damit kann man 
mittels UDR-Empty-Interrupt immer das nächste Byte aus einem Puffer 
holen. Vollautomatisch sozusagen. Der Mega88 kann sicher mit 25Mhz 
getaktet werden. Damit ist er dann auch fix genug, um noch andere Dinge 
zu erledigen. Zeitkritische Sachen in Assembler machen und globale 
Variablen nutzen. Das geht am schnellsten.

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
Noch kein Account? Hier anmelden.