Ich habe WS2812B LED mit einem LPC1347 per SPI angesteuert. Fertige wsDrive von mbed.org, hatte auf Anhieb funktioniert. Dann habe ich das Gleiche mit dem LPC812 gemacht, funktioniert nicht. Bei der Fehlersuche mit LA viel sofort auf das der MOSI Ruhepegel unterschiedlich ist: beim LPC1347 ist er low und die Ansteuerung damit ok, beim LPC812 ist er high und das verstehen die LED nicht. Ich habe alle CPOL/CPHA Modi probiert, die ändern am MOSI Ruhepegel aber nichts. Kennt hier jemand die LPC8xx so gut und weiss ob und wie man den MOSI Ruhepegel umdrehen kann? Habe dazu im Usermanual nichts finden können.
CPOL=1 sollte deine Freund sein. Besteht die Möglichkeit, dass du einen Opencollektor/-drain Ausgang hast?
Danke, aber CPOL beeinflusst nur den 'rest state of the clock (between transfers)'. Für die LED Ansteuerung wird nur der MOSI verwendet, der SPI Takt auf 2,4 MHz gestellt und dann wird ein WS2812 bit aus drei SPI bits gebildet. Damit ist das SPI zweckentfremdet, bei 'bestimmungsgemässen' Gebrauch ist der Ruhezustand der MOSI Leitung eigentlich egal. Open drain sind nur PIO0_10 und _11, die verwende ich nicht. Ansonsten kann der MOSI auf einen beliebigen anderen IO Pin gelegt werden.
habe es hinbekommen. Die Lib benutzt eine BurstSPI Implementierung die für SPI write only ist. Das HW SPI im LPC8xx hat wieder neue Features und der Treiber hat nach dem Senden ein EOT Flag gesetzt. Das schaltet dann das SPI ab. Für 'richtiges' SPI ok, für WS2812 Ansteuerung nix gut.
1 | void BurstSPI::fastWrite(int data) { |
2 | while (!(_spi.spi->STAT & (1 << 1))); |
3 | |
4 | _spi.spi->TXDAT = (data & 0xffff); |
5 | // set receive ignore flag
|
6 | _spi.spi->TXDATCTL |= (1 << 22); |
7 | }
|
Jetzt muss ich nur herausfinden warum meine Endlosschleife im main() nach 72s zu Ende ist...
Hat zwar nicht direkt mit deinem Anliegen zu tun, aber kennst Du das hier: https://www.lpcware.com/content/forum/controlling-ws2812-led-strips-lpc810
Ja, Danke. Das passt schon, benötigt aber zusätzlich den SCT timer als Hardware Ressource. Da die SPI Variante mit dem LPC1347 sofort gut funktionierte dachte ich das geht auf dem kleinen Bruder 8xx genau so gut. Aber trotz gleichem Hersteller ist die SPI Unit doch neuer und nur dann kompatibel wenn man es richtig macht :-/
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.