Forum: Mikrocontroller und Digitale Elektronik PIC12F1572: WS2812 Nachricht "durchleiten"?


von Christoph S. (mcseven)


Lesenswert?

Grüße *,

fasziniert von den WS2812 frage ich mich noch immer, warum es dafür 
keine High-Power Varianten gibt. Gesehen hab ich schon, daß jemand 
fettere Stromtreiber direkt am WS2811 Chip anschließt, dank fehlender 
Gamma-Korrektur der WS281? ist das aber keine Option.

Hätte ich einen PIC mit CLC, wäre das sehr einfach: Ich müßte "nur" den 
Client-Teil implementieren, und maskiere das Signal im CLC, solange ich 
bei den ersten drei Bytes bin. Danach würde IN=OUT und die Hardware 
piped die Bytes einfach durch.

Wie aber mache ich das auf so einer kleinen Kiste? Ich kann zwar senden 
per Bit-Bang, aber hat hier schon mal jemand erfolgreich empfangen? Bei 
125ns minimaler Instruction-Cycle muß ich sowas wie 2 Instructions 
zählen und alleine das Kopieren eines Zählerwertes dauert schon länger.

Hätte jemand eine Idee?

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Christoph S. schrieb:
> Hätte jemand eine Idee?

 Wie wäre es wenn du mal erklärst, was du überhaupt machen willst
 und warum ?

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Ein PIC12F1572 hat m.E. keine CLC. Meinst Du einen PIC12F1501?

Gamma-Korrektur ist keine schlechte Idee.

Das WS2812-Timing zu nutzen, macht z.B. dann Sinn, wenn man vorhandene 
Controller (ArtNet, sACN, DMX, …) mit '1-wire' nutzen will.

Christoph, ich nehme an, dass Du in etwa darauf hinaus willst. 
Allerdings finde ich 70ct pro 'RGB-Knoten' ohne Stromregler und ohne 
LEDs im Vergleich zum WS2811 ziemlich teuer, um z.B. längere Streifen 
oder gar Matrizen damit zu bauen.

Bei 20mA nimmt man Längsregler.

Bei HighPower-Leds (350/700mA) kann man schon fast über Buck-Regler 
nachdenken, dann stehen auch die Kosten für den PIC12F1501 nicht mehr so 
im Vordergrund.

: Bearbeitet durch User
von Carsten S. (dg3ycs)


Lesenswert?

Hi,

Torsten C. schrieb:
> Ein PIC12F1572 hat m.E. keine CLC. Meinst Du einen PIC12F1501?

Ich denke er meint schon den 1572, denn er schreibt er Sinngemäß
"Wenn ich einen PIC mit CLC HÄTTE, dann... Habe ich aber nicht"

Aber zur Frage:

Christoph S. schrieb:
> Wie aber mache ich das auf so einer kleinen Kiste? Ich kann zwar senden
> per Bit-Bang, aber hat hier schon mal jemand erfolgreich empfangen? Bei
> 125ns minimaler Instruction-Cycle muß ich sowas wie 2 Instructions
> zählen und alleine das Kopieren eines Zählerwertes dauert schon länger.
>
> Hätte jemand eine Idee?

Vorweg:

Es gibt gerade bei den Pics nicht DEN EINEN FÜR ALLES.
Im Gegenteil - gerade bei den PICs gibt es viele hochspezielle 
Bausteine.
Wenn dir die lösung mit dem einen Typ nicht so recht gelingen will, 
warum dann noch auf einen geeigneteren Ausweichen -> Beispielsweise den 
von Thorsten genannten 12F1501?
Das gilt aber unabhängig vom konkreten Projekt für ALLE Anwendunen wo µC 
drin vorkommen... Zumindst sollte man immer abklären ob das eine 
Sinnvolle Option ist oder ob estwas dagegenspricht (nicht beeinflussbare 
Vorgaben, Preis usw.)

Ansonsten:
Ich selber habe mit dem WS2812 noch nichts gemacht (Mit den beiden hier 
genannten Pics aber schon), jetzt nur schnell das Datenblatt überflogen:
Kann also sein das ich auf die schnelle etwas übersehen habe!
Auch habe ich jetzt nicht überprüft ob sich etwas gegenseitig 
ausschließt, z.b. wegen mehrfachbelegung der Timer...

Zuerst einmal:
Du musst ha nicht gleichzeitig Senden und Empfangene Bits auswerten, 
sondern nur entweder Empfangen und Auswerten, oder Empfangen und 
ungesehen weiterreichen mit der Prüfung auf ein SEHR SEHR langes Low.

Ansosonsten würde ich,wenn das mein Projekt wäre, die folgende Idee auf 
Machbarkeit prüfen. Unter der Annahme das die drei PWM Module ja schon 
für die LED Ansteuerung verbraten sind!

Das ganze wird über das ESUART im Syncronen Modus abgewickelt.

Zum Senden von vergleichbaren Telegrammen oder PWM ähnlichen Signalen 
mit einer Auflösung von 8 (9) Bit oder weniger ist das durchaus gängige 
Praxis. Man sendet ein SPI Telegram das elektrisch dem auszugebenden 
Puls entspricht. Die CLK-Leitung ignoriert man einfach.

Das ganze kann man natürlich noch etwas weiter treiben und versuchen 
auch den Empfang über dieses Modul abzuwickeln.
Dann muss man nur noch den empfangenen Wert mit einem Schwellenwert 
vergleichen und kann dann daraus schließen was gesendet wurde. Dafür hat 
man viel Zeit (10µs), denn der Empfang des nächsten Bytes läuft ja über 
die Hardware normal weiter. Für die ersten drei Bytes werden die Daten 
in ein Array geschrieben. Danach werden die Daten einfach um ein Bit 
zeitversetzt wieder ausgesendet. (ggf. nach Korrektur).

Ausserdem muss noch eine Prüfung erfolgen wie oft 00h ohne Unterbrechung 
empfangen wurde. Ist ein bestimmter Schwellenwert erreicht wird das als 
Reset betrachtet und die Daten werden ins PWM Register übernommen.

Das wirkliche Problem bei der ganzen Sache ist aber das gerade für den 
Empfang die Abweichungen zwischen der Clock des Senders und des 
Empfängers nicht zu groß sein dürfen. Dafür muss man sich ebenfalls 
etwas einfallen lassen - das wird vielleicht sogar am meisten 
Gehirnschmalz verbraten.
Eine Möglichkeit wäre evtl. dabei das DIN Signal noch an einen weiteren 
Pin zu legen und den Datenempfang bei jedem LOW-TO-HIGH Wechsel neu zu 
starten. So das die Gangabweichung jedesmal zurückgesetzt wird.
Aber vielleicht geht es mit ein wenig Nachdenken noch eleganter...
Soll ja nur eine Anregung sein.

Aber wie gesagt: Ich kann gerade auch völlig danebenliegen. Ist ne Idee 
ins Blaue hinein!

Gruß
Carsten

: Bearbeitet durch User
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.