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