Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UCS8903 & UCS8904 don't have name specific method #817

Open
Makuna opened this issue Jul 20, 2024 · 8 comments
Open

UCS8903 & UCS8904 don't have name specific method #817

Makuna opened this issue Jul 20, 2024 · 8 comments
Labels

Comments

@Makuna
Copy link
Owner

Makuna commented Jul 20, 2024

Is your feature request related to a problem? Please describe.
While the UCS890x chips do have specifically named features, they do not have specifically named methods.

Describe the solution you'd like
Methods should be aliased to either Ws2812x (most compatible) or another than has the nearest reset timing.

@Makuna Makuna added the bug label Jul 20, 2024
@dimitre
Copy link
Contributor

dimitre commented Aug 2, 2024

I'm trying to control an individual UCS8904B using NeoPixelBus without success.
I'm using a Teensy 3.2 and a simple code to make it blink.
It behaves as it has no data incoming, only blue channel on, and the others off.
Thanks for any insight

#include <NeoPixelBus.h>
const uint16_t PixelCount = 10;
const uint8_t PixelPin = 11;
NeoPixelBus<NeoRgbw64Feature, Neo800KbpsMethod> strip(PixelCount, PixelPin);

void setup() {
	strip.Begin();
	pinMode(13, OUTPUT);
}

void loop() {
	Rgbw64Color cor(Rgbw64Color::Max, Rgbw64Color::Max, Rgbw64Color::Max, Rgbw64Color::Max);
	for (int a=0; a<NUMPIXELS; a++) {
		strip.SetPixelColor(a, cor);
	}
	strip.Show();
	digitalWrite(13, HIGH);

	delay(500);

	Rgbw64Color cor2(0, 0, 0, 0);
	for (int a=0; a<NUMPIXELS; a++) {
		strip.SetPixelColor(a, cor2);
	}
	strip.Show();
	digitalWrite(13, LOW);

	delay(500);
}

@Makuna
Copy link
Owner Author

Makuna commented Aug 2, 2024

Try using "NeoWs2812xMethod"

@dimitre
Copy link
Contributor

dimitre commented Aug 2, 2024

Thanks, I've tried and it didn't work

@Makuna
Copy link
Owner Author

Makuna commented Aug 2, 2024

Try the "NeoWs2805Method".

These ARM chips are painful to support. Its bitbang model (no hardware support) and the uC speed variances can affect the output. I would have to put it on the scope and I don't have my Arm chips with me to check it out right now.

@Makuna
Copy link
Owner Author

Makuna commented Aug 2, 2024

In your compiler output, look for one of these...
MK20DX128, MK20DX256, MK64FX512, or MK66FX1M0

The LC will have MKL26Z64

@dimitre
Copy link
Contributor

dimitre commented Aug 3, 2024

Great. None of them worked.
I kept testing and reading code here, it seems to be everything allright with the timing, if I use a ws2812 strip it is working great. I have a chip holder and if I use the chip UCS2903 which uses the same protocol as ws2812 it works great also, but with UCS8904B it appears as no incoming data (only blue channel on)

I'm sharing the data pin with an WS2812 strip and it is blinking correctly, even when using 16bit code.
I'm wondering now if startFrame and endFrame packet of both protocols are equal, since I've used another strip (HD108S) and it needed a different number of bytes there.

@Makuna
Copy link
Owner Author

Makuna commented Aug 3, 2024

NeoRgbw64Feature is for any chip that has 16bits per element with R,G,B, and a W channel. This will not work with a WS2812 as it is only 8 bits per color element. You would have to change it to NeoRgbFeature for it to work with a WS2812 as they are only R, G, and B also.

@dimitre
Copy link
Contributor

dimitre commented Sep 23, 2024

Everything is now solved.
The real issue was I was using a bidirectional level shifter and it was causing issues with the data.
I'm now using 74AHCT125 and it is working great with UCS8904B

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants