hzeller / rpi-rgb-led-matrix

Controlling up to three chains of 64x64, 32x32, 16x32 or similar RGB LED displays using Raspberry Pi GPIO
GNU General Public License v2.0
3.63k stars 1.15k forks source link

Multiple pixel lit #278

Closed agoesssss closed 6 years ago

agoesssss commented 7 years ago

Hi there, is there anyone ever experienced multiple vertical pixel lit when trying to SetPixel single pixel. I'm trying to turn on single pixel but I always got 4 vertical pixel lines.

Can anyone address this issue?

Thank you

agoesssss commented 7 years ago

image

That is what I got when doing SetPixel(0, 0, 255, 255, 255);

And there is also CS PIN on the HUB75 is there any connection?

hzeller commented 7 years ago

This is interesting, does that happen on any pixel, eg. if you choose one in row 2, does it go from row 2 to 6 ?

This might be a slightly different panel control. CS sounds suspicious (this abbreviation usually means 'Chip Select', used to tell a subsystem to accept or ignore data). It can be detrimental if that is floating (i.e. not connected). Try to set that to 5V in one experiment and to GND in another (I expect the panel to not show anything in one of these experiments).

Can you take a good readable picture of the connector on the back of the panel and post here ?

It could also be a different issue in which it does multiplexing a bit differently, which we have to find out.

agoesssss commented 7 years ago

I guess that's nothing to do with the chip select that I also suspect earlier, because when I tried to pulse that CS then my system freeze and nothing happened when I set to ground, and then I realized that CS is shorted to the ground. I guess there's issues with multiplexing

these is what I got when doing matrix->SetPixel(0, 0, 255, 0, 0); matrix->SetPixel(1, 1, 0, 255, 255); matrix_->SetPixel(2, 2, 0, 0, 255); image

matrix->SetPixel(1, 0, 255, 0, 0); matrix->SetPixel(2, 0, 0, 255, 255); matrix_->SetPixel(3, 0, 0, 0, 255); image

matrix->SetPixel(0, 1, 255, 0, 0); matrix->SetPixel(0, 2, 0, 255, 255); matrix_->SetPixel(0, 3, 0, 0, 255); capture

Also attached below the pinout capture

Thank you for your support

agoesssss commented 7 years ago

Attached below the video while doing sweep test using the option "--led-rows=16 --led-chain=2"

for( int sweepY = 0; sweepY < 16; sweepY = sweepY + 1 ){ for( int sweepX = 0; sweepX < 64; sweepX = sweepX + 1 ){ matrix_->SetPixel(sweepX, sweepY, 255, 255, 255); usleep(10000); } } VID_20170208_091053.zip

hzeller commented 7 years ago

Looks like this is a different kind of panel that has a different multiplexing. I heard that these exists, but have not had my hands on them to see what can be implemented. If anyone has a datasheet or description, that would be great.

agoesssss commented 7 years ago

This is the product website http://www.qiangliled.com/products-63.html

Arvindace commented 7 years ago

Did we figure out a solution to this problem. I am using the same panel and facing the same issue. please help. thanks!

vapiper commented 6 years ago

Hello Henner! I bought the same matrix and got the same result as described above. img_2221 I have got LED screen controller Onbon BX-5Q1+. The matrix is working correctly with this controller. Here is a chart from HUB75 of the controller (2 matriсes 32x16 in 1 chain, CH0..CH5 color bits): 2018-01-11_18-43-56

And here is the chart from Rpi+Adafruit Hat (rows=16, chain=1): 2018-01-12_13-28-54

The pin CS is connected to GND inside the matrix ( When I applied +5V I got a short circuit). If I understand correctly, in the matrix multeplexing chip is missing and rows are selected directly by the lines A, B, C, D. This weekend I will try to make changes in methods Framebuffer::InitGPIO and Framebuffer::DumpToMatrix.

vapiper commented 6 years ago

My assumption was correct! Now matrix Qiangli X10 is working properly. This is a graph after making changes to the code were made (rows=8, chain=2): 2018-01-12_17-12-47 I made the following changes in the code of methods. In Framebuffer::InitGPIO: // !!! We are using 4 row lines for matrix 32x16 all_used_bits |= h.a; all_used_bits |= h.b; all_used_bits |= h.c; all_used_bits |= h.d;

In Framebuffer::DumpToMatrix: row_address = row_mask; switch (d_row % 4) { case 0: row_address ^= h.a; break; case 1: row_address ^= h.b; break; case 2: row_address ^= h.c; break; case 3: row_address ^= h.d; break; }

hzeller commented 6 years ago

So looks like @vapiper has fixed this one with the #509 pull request resulting in commit https://github.com/hzeller/rpi-rgb-led-matrix/commit/b6892aa85666c21e7e9a9392285a278f795755e5