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

Sigh, new panels: ABC with fm6126A (128x64) #823

Closed marcmerlin closed 1 year ago

marcmerlin commented 5 years ago

This is starting to get annoying... I get output on them after sending the fm26126A init sequence, but the output is all wrong given the line addressing having changed again. It seems that you only select one of 8 lines, and push 4 times 128 pixels to reach the other 3 rows after filling the first one. Why, oh why do "they" have to keep changing how to do things? I got those as replacements for a perfectly working ABCDE panel

IMG_20190525_143255 IMG_20190525_143240

arash1221 commented 4 years ago

Hello @hzeller , First of all thanks for your awesome code and project, please anyone can help me with my problem!!! My problem is when I'm add another panel to the output of the first panel the screen shows me different output but alone with just 1 led panel everything is okay! and also I using the same led panel!! panel IC is ------> FM6126A_ 64*128 I tried these command flags also not work --led-chain=2 && --led-chain=1 I also set col to 256 and also dosen't work!!!,And also I'm not using any hat, direct to raspberry pi GPIO! Everything is ok when its just only 1 panel no more chain!!!!!

Please Somebody Help! Appreciate!

arash1221 commented 4 years ago

First Image Only 1 led Panel --It works Correct

Untitled-2

Second Image chain second panel !!!

Untitled-3

mcpgza commented 4 years ago

First Image Only 1 led Panel

Second Image two chain panel !!!

Yeah, tipical, you need a level shifter, you need a hat.

arash1221 commented 4 years ago

No way to use hat?? I don't want to make them parallel I just want to extend my led in a row! if i'm not wrong i think level shifter is used for two different output

arash1221 commented 4 years ago

@mcpgza thanks for the answer, can you please guide me how to control any pixel of led panel, very simple code.

hzeller commented 4 years ago

@arash1221 Please don't hijack an existing issue with an unrelated problem; open a new issue.

To your problem: try to gpio slowdown your output (--led-slowdown-gpio) depending on the internal wiring you're increasing the load on the gpio pins, which will make them switch slower.

Also, you really want a level shifter, as not only will be the digital voltage correct (and right now you're just essentially playing jeopardy if it might work), but also, you can't really drive long lines with the GPIO pins directly.

arash1221 commented 4 years ago

Thanks @hzeller I recall it.

xsrf commented 4 years ago

Thanks @mcpgza . I'll probably pay a bit more for pristine panels, I don't want missing pixels for my setup :)

985 explains why ABC is slower than ABCDE. In a nutshell, ABC panels are ABCDE panels with 2 address lines missing, so it takes longer to send the 5 bits of addresses over 3 bits.

you can benchmark this yourself with ~/rpi-rgb-led-matrix/examples-api-use/demo --led-rows=64 --led-cols=128 --led-chain=1 --led-show-refresh --led-parallel=3 --led-pwm-dither-bits=1 --led-pwm-bits=7 --led-panel-type=FM6126A --led-row-addr-type=0 -D0 and then use led-row-addr-type=3 You can do the speed test even without the right panels and look at the Hz value you get.

Hey, I've seen your discussion about ABC being slower than ABCDE. This is because the code is not using the Shift-Register that is connected to the row selection as it is meant to be used (I guess).

To select one out of N rows, you are shifting out N-1 zeroes and one one out to the display. Of course this needs more than N clock cycles which is way longer on 1/16 or even 1/32 panels than just setting 5 GPIOs at once.

However: This is actually not necessary if you scan your rows incrementally, which is usually what is done. In this case you actually do only have to shift out one bit for every cycle. You shift out 1 for row 0 and 0 otherwise.

Here is the code I contributed to PxMatrix few days ago: https://github.com/2dom/PxMatrix/blob/178054b3021892cb9185c3a92051ba2b2afc8977/PxMatrix.h#L1012

If you don't require random row access, it boils down to:

      // Just shift the row mux by one for incremental access
      digitalWrite(_C_PIN, (value==0) ); // Shift out 1 for line 0, 0 otherwise
      digitalWrite(_A_PIN, HIGH); // Clock out this bit
      digitalWrite(_A_PIN, LOW);

Hope this may also help you :)

hzeller commented 4 years ago

Nice, thanks xsrf

hzeller commented 4 years ago

Nice, thanks @xsrf . Could someone who has such a panel (I Ithink I don't have any if these in mystash) implement and test that in the rpi-rgb-led-matrix library and send me a pull request (e.g. @marcmerlin :) I could implement it blindly, but it is better with a board to test that it actually works :)

mcpgza commented 4 years ago

@hzeller please implement it, i will test and fix it if necessary. I dont know how to translate that code to your library api.

marcmerlin commented 4 years ago

So, I do have ABC panels somewhere in my garage, but I'm not using them, as my main array is ABCDE, so honestly my enticement to spend time on them for a small improvement that i won't see because I don't use them, is kind of limited :) That said, I'm happy to confrim that new code works on them if that helps.

javiervalero31 commented 4 years ago

Hi. I read your comments to try to solve my problem but could not solve it. I have 4 LED arrays with 32x16 size. I want the image or Demos to be centered in my panels but I have not been able to configure the parameters to achieve this.

Each matrixs connected in a only matrix of 64x32 size... IMG_20200622_134157

The closest thing to what I want (DEMO 0).... IMG_20200622_141029

Any idea?

marcmerlin commented 4 years ago

I believe those panels are not ABC, so this is not the place to ask for him on those panels. Unfortunately there isn't a support group yet for this library, @hzeller was consideirng options, otherwise for now try to file a new issue with all the details on your panels, how they are wired, what command line options you used to run the demo, etc.

marcmerlin commented 3 years ago

@javiervalero31 actually there is a support group now, I just created one :) https://rpi-rgb-led-matrix.discourse.group/

Sl-Alex commented 2 years ago

@xsrf I implemented it in my code and after that I found your message.

Here is the code I contributed to PxMatrix few days ago: https://github.com/2dom/PxMatrix/blob/178054b3021892cb9185c3a92051ba2b2afc8977/PxMatrix.h#L1012

If you don't require random row access, it boils down to:

      // Just shift the row mux by one for incremental access
      digitalWrite(_C_PIN, (value==0) ); // Shift out 1 for line 0, 0 otherwise
      digitalWrite(_A_PIN, HIGH); // Clock out this bit
      digitalWrite(_A_PIN, LOW);

Hope this may also help you :)

If you implement it like this then it also fixes the problem with the black line in the middle of the module (which was reported many times in this issue). I also have the panel with ABC row addressing and I found something interesting today. Just look at ICND2019 datasheet. The control sequence is exactly the same as you proposed. Also it seems that B line could be used in order to configure some extended register (haven't tried it yet). Here is a line from the datasheet: For control card, SDI is the C of 3-8 decoder, DCK is the A of 3-8 decoder, RCK is the B of 3-8 decoder

marcmerlin commented 1 year ago

this has been fixed for a while, closing