Forum: Projekte & Code WS2812B mit SAMD51 PORT/DMA (OctoWS2811 Prinzip)


von Thomas F. (thomas_fr)


Angehängte Dateien:

Lesenswert?

Hallo,

da beim "Adafruit Metro M4 feat" Board die NeoPixel LED nicht
auf einen brauchbaren Pin(PB22) liegt, auf den man ohne Bit-Banging
die LED ansteuern kann, habe ich das Prinzip der "OctoWS2811 Lib"
auf den SAMD51 portiert.

Das Prinzip kann man hier nachlesen.
https://www.pjrc.com/teensy/td_libs_OctoWS2811.html


Bei einem Stresstest mit folgenden parallelen DMAs
hatte der Jitter keine Auswirkungen auf die Funktion.
2 DMAs abwechselnd 38400 Bytes PCC->RAM 6MBaud
  und RAM->UART 3MBaud (Beat size word)
1 DMA 1k RAM->RAM (Beat size byte)
1 DMA 1k RAM->RAM (Beat size word)

Zusätzlich wurde auf dem gleichen Port auf dem die WS Daten geschrieben 
wurden noch ein Pin zyklisch in der main getoggelt.


Das Programm wurde mit 2*240 LEDs getestet.

2000 LEDs 100Hz - 20000 LEDs 10Hz sind möglich.

Das ganze wurde mit Atmel Studio 7 in C auf Registerebene umgesetzt.

von Thomas F. (thomas_fr)


Angehängte Dateien:

Lesenswert?

Hallo,

in der Konvertierung der RGB-Daten zu DMA-Daten war noch ein Fehler.
Nicht benutzte Pins im Port-Byte wurden zurückgesetzt. Im Anhang ist das
geänderte Programm.


Anbei noch ein Video "Port/DMA in Action" und der Hardware Aufbau. :-(

Hardware:
Adafruit ItsyBitsy M4
Adafruit Ethernet FeatherWing (W5500)

LED-Matrix 9 * 240 (2160) LEDs (1 * Port/DMA + 1 * SPI/IRQ)
Die Daten kommen vom PC via LAN und Art-Net Protokoll.


Gruß Thomas

Beitrag #5643785 wurde vom Autor gelöscht.
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.