Hi again,
OK, setting aside fastLED for now and just focusing on teensy4 and the octows2811 library. I need to limit the number of pins the octosw2811 library uses, so using the code provided in the examples folder (i.e. Teensy4_PinList.ino) I specified only the 3 pins I need (2, 5 & 6). Everything looks good on pin 2, but for pin 5 the first 2 LEDs are stuck, and on pin 6 the first 5 pins are stuck. I don't have this issues with other examples in the library (since these share 3 of the 8 octo pins). No stuck LEDs. All signal lines are shifted to 5V with 100Ohm resistors in series. All components on a custom PCB, so no issues with breadboarding/bad wires.
I'm using the code from the example, but including it here with the mods for the pins I want to use.
Code:
/* OctoWS2811 Teensy4_PinList.ino - Demonstrate use of any pins
http://www.pjrc.com/teensy/td_libs_OctoWS2811.html
With Teensy 4.x, you can use any group of pins. You are not limited
to only 8 fixed pins as with Teensy 3.x. This example shows how to
use only 4 pins, which are the 4 pins of the Octo28 shield which do
not conflict with the Audio shield.
Required Connections
--------------------
pin 2: LED Strip #1
pin 14: LED strip #2
pin 6: LED strip #5
pin 5: LED strip #8
*/
#include <OctoWS2811.h>
// Any group of digital pins may be used
const int numPins = 3;
byte pinList[numPins] = {2, 5, 6};
const int ledsPerStrip = 186;
// These buffers need to be large enough for all the pixels.
// The total number of pixels is "ledsPerStrip * numPins".
// Each pixel needs 3 bytes, so multiply by 3. An "int" is
// 4 bytes, so divide by 4. The array is created using "int"
// so the compiler will align it to 32 bit memory.
DMAMEM int displayMemory[ledsPerStrip * numPins * 3 / 4];
int drawingMemory[ledsPerStrip * numPins * 3 / 4];
const int config = WS2811_GRB | WS2811_800kHz;
OctoWS2811 leds(ledsPerStrip, displayMemory, drawingMemory, config, numPins, pinList);
void setup() {
leds.begin();
leds.show();
}
#define RED 0xFF0000
#define GREEN 0x00FF00
#define BLUE 0x0000FF
#define YELLOW 0xFFFF00
#define PINK 0xFF1088
#define ORANGE 0xE05800
#define WHITE 0xFFFFFF
// Less intense...
/*
#define RED 0x160000
#define GREEN 0x001600
#define BLUE 0x000016
#define YELLOW 0x101400
#define PINK 0x120009
#define ORANGE 0x100400
#define WHITE 0x101010
*/
void loop() {
int microsec = 2000000 / leds.numPixels(); // change them all in 2 seconds
// uncomment for voltage controlled speed
// millisec = analogRead(A9) / 40;
colorWipe(RED, microsec);
colorWipe(GREEN, microsec);
colorWipe(BLUE, microsec);
colorWipe(YELLOW, microsec);
colorWipe(PINK, microsec);
colorWipe(ORANGE, microsec);
colorWipe(WHITE, microsec);
}
void colorWipe(int color, int wait)
{
for (int i=0; i < leds.numPixels(); i++) {
leds.setPixel(i, color);
leds.show();
delayMicroseconds(wait);
}
}
Anyone else seen this or have an idea how I can troubleshoot and provide more information?
Thank you!
David