[fpc-pascal] Pascal Neopixels

Anthony Walter sysrpl at gmail.com
Sun Jul 29 16:19:16 CEST 2018


I'm not sure what would be the correct list for this question since it
involves writing Pascal code and not Lazarus, so here goes ...

Can anyone offer me any advice or refer me to helpful resources on the
subject of using Pascal code to control WS2128 led strips
<https://www.youtube.com/watch?v=fh2QcmcBRpQ>, or neopixels, from a
Raspberry Pi?

I've wired up a some neopixels
<https://www.amazon.com/gp/product/B072N7VGK6/ref=oh_aui_detailpage_o02_s01?ie=UTF8&psc=1>
and
am able to control them by way of PWM (pulse wave modulation) on GPIO 18
(pin 12 on a Pi 3) using this rpi_ws281x git repository
<https://github.com/jgarff/rpi_ws281x>. It works great either in C or using
Python bindings, and I am able to create effects in C code easily. But
obviously I'd prefer to interface with the neopixels using Pascal.

I've seen some Pascal libraries for both GPIO access, and DMA pin mapping,
but the communication protocol for controlling neopixels is a bit more
complex than writing a 24 bit value to a pin. Each pixel can be controlled
in both brightness and color, though I'm unsure how the wx281x library is
doing this.

Assuming I was to do this in from scratch  Pascal, that is control the
colors and brightness of many pixels withing an entire neopixel strip, I
believe I need to do the following in psuedo code.

  // open device memory
  fd = open('/dev/mem')
  // map the file descriptor to the memory address of gpio18
  gpio18 = mmap(fd, ...)
  // fd is no longer needed
  close(fd)

  [ then write to gpio18 in some loop as a data structure ]

  // cleanup
  unmap(gpio18)

If that psuedo code is the correct way to do things, I would need to know
what is the offset and page size for PWM GPIO18, what flags to use with
mmap, and finally what memory locations inside of the gpio18 pointer
control which pixel, what is the brightness memory location and size, what
is the color memory location and size for each pixel. Also, is there any
other memory location inside gpio18 that is of importance or relevance,
such as an on/off bit?

Does anyone have any insight into this subject that might be useful? After
I get something that works I'll be sure to share the resulting Pascal code
and a video plus tutorial.

TIA
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20180729/f37e3dd9/attachment.html>


More information about the fpc-pascal mailing list