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

64x64 P2.5 LED panels #120

Closed
KentWalker opened this issue Feb 29, 2016 · 83 comments
Closed

64x64 P2.5 LED panels #120

KentWalker opened this issue Feb 29, 2016 · 83 comments

Comments

@KentWalker
Copy link

I have had a quick look at some 64x64 P2.5 panels and discovered there is an additional decode line 'E' on the HUB75 interface. This is pin 8, which is currently pulled to ground on the Raspberry Pi adapter.

I would like to add this to the GPIO using either GPIO0 or GPIO1 (since we never are going to use the auto ID, I thought these might be safe). Earlier model B's have a P5 port which brought out GPIOs 28..31 but they don't seem accessible on the R.Pi 2 version. How do I go about mapping the GPIO (in the gpio.cc file) and what do I need to change in the framebuffer.cc file to add an extra row? (DumpToMatrix() only, or is there something else I need to do?)

U2 on the adapter board has a spare buffer (A0/B0), so not much to change on the PCB.

@jpasqua
Copy link

jpasqua commented Mar 8, 2016

I accidentally ended up with one of these as well. Any chance you'll be adding this as an option?

I'm using an Adafruit Hat with HW PWM using the jumper between pins 4 and 18.

@hzeller
Copy link
Owner

hzeller commented Mar 8, 2016

Sorry for the delay.

Interesting, I have not come across these panels yet. So they have essentially a 5 bit address for the rows [A, B, C, D, E] ?
I can give some generic advice below, but since I have not have hands on these yet, you have to do the experiments. Do you guys have a link to the vendor ? (I think I need to start to collect donations for rpi-rgb-led-matrix so that I can keep buying new panels :) ).

It sounds odd though, as I have seen the trend go more towards 1:8 multiplexing from 1:16. This would mean that there is 1:32 multiplexing so the refresh rate might suffer.

So what you need to do:

  • Choose which GPIO pin to use. I wasn't aware that GPIO0/GPIO1 can be mapped to the SDA0/SCL0 - if that is the case, then this might be fair game. The other (safe) alternative would be to use the only pin that I left free to the end RX (GPIO 15). It would have the advantage that it would be pin-compatible with RPi1 (which otherwise has its GPIO0/1 at some other place).
  • All these are already marked as usable bits, so no changes in gpio.cc should be necessary ( https://github.com/hzeller/rpi-rgb-led-matrix/blob/master/lib/gpio.cc#L85 ). However, if you choose the SDA0/SCL0, maybe something extra needs to be done for the pin-mapping, you might need to experiment.
  • In framebuffer-internal.h, name the pin you are using; e.g. rename unused_15 to 'e' ( https://github.com/hzeller/rpi-rgb-led-matrix/blob/master/lib/framebuffer-internal.h#L172 )
  • Search for the places in framebuffer.cc that use address mask (searching for "bits.a" is a good start), and add the respective changes for bits.e
  • Find possible other places that have the assumption built-in that 16 is the highest. So for instance the rows_ thing is assert()ed to never be more than 32, but in your case, it would be 64.

PCB changes should be simple. Yes, there is a spare buffer and we just need to free GND from the respective pin.

If this works, please send a patch or pull request, so that I can integrate that. And please, if you have a link to the source of that panel let me know so that I can get one for my experiments.

@jpasqua
Copy link

jpasqua commented Mar 8, 2016

Here's a link to the unit I bought:
http://www.aliexpress.com/item/p2-5-led-display-module-2-5mm-pixel-indoor-rgb-full-color-led-display-1-16/32533038333.html
It was originally labelled as 1/16 scan but when it arrived and I connected it, I found out otherwise. After contacting the seller he admitted that the ad was incorrect and updated it to say 1/32.

@hzeller
Copy link
Owner

hzeller commented Mar 8, 2016

Thanks for the update, I'll try to get one of these.
In the meantime, you could experiment with the suggestions above.

@jpasqua
Copy link

jpasqua commented Mar 8, 2016

I think we are local to one another. If you want it, you can have my module. I won't have a chance to work on this for quite some time. Feel free to contact me at joe AT noroomattheinn dot org.

@KentWalker
Copy link
Author

I originally bought a couple of these panels via AliExpress:
http://www.aliexpress.com/item/Free-Shipping-P2-5-LED-module-64x64-smd-led-p2-5-module-HD-Indoor-Full-Color/32538463676.html
It appears this company is no longer supplying P2.5 modules via AliExpress but are still available directly from them:
http://www.fullcolorled-display.com/sale-7549960-hd-p2-5-indoor-full-color-led-module-16-scan-smd-2121-3in1-rgb-160-160mm.html

I've just got my hands on a Raspberry Pi 3 so this will be a good candidate for testing as it is a 1.2GHz 64 bit quad core CPU. I'm not sure how that is going to affect the refresh rate or other timing yet. I guess I have a bit of reading and experimentation to do :) Will keep you all posted

@currentlysober
Copy link

Hi,
I have also bought the type 64x64 and I do not have line 'E'. Moreover, they do not have 'D' line.
The photo of connector below:

img_9577

So I changed one line because I was told that scan is 1/32:
assert(rows_ <= 64);
but I guess this is not enough because the result is like that (I wrote "HELLO" in 0,0 point):
type: 64, chain: 2, parallel: 1

img_9582

Any idea? :)
Regards

@hzeller
Copy link
Owner

hzeller commented May 5, 2016

@currentlysober your panel looks like a different panel even: it only has A and B, so it is actually 1:4 multiplexing; Can you try with -r 8 -c 8 to see what happens with the demos ?

@jpasqua Can you have a look at your panel on the back if it as well has only [A, B] marked or if it goes up to E ? The picture in your Alibaba listing looks like it only goes to B, so this might be what @currentlysober got.

@KentWalker Today, I want to implement the 'E' line support. Can you give me a picture of the connector on the back to double-check ? I want to know where the E line is connected so that I can put it on the right pin on the adapter board. You said it is Pin 8, so I suppose it is the opposite pin to B2, correct ? I ask because I got a picture from another user of the library where the E pin was on Pin 4 (and there was some strange 'BLK' - labelled pin which I don't know what it is).

hzeller added a commit that referenced this issue May 5, 2016
o (does not yet address adapter PCBs. Awaiting feedback where the
  outputs usually are).
@currentlysober
Copy link

currentlysober commented May 7, 2016

Hi!
Thanks, I did what you wrote me.

  1. when I put -r8 -c8, I didn't see anything on panel.
  2. then I put -r8 -c2 and I had this (text HELLO as previously):

r8c2

Moreover, I wrote to the company of led modules and they told me that it had 1/32 scanning (this is why I believed -r64 would be correct). It would be nice to make it working because with 3 parallel panels, it would look like LCD screen from longer distance. Do you have some idea?
We can see that the text is correct horizontally, but there is some problem perpendicularly.
Thank you!

@KentWalker
Copy link
Author

@hzeller Sorry taking so long, I'm in one place and the panels are in another. Will have a photo in a day or two

@hzeller
Copy link
Owner

hzeller commented Jun 15, 2016

I don't have such a module @currentlysober, so I can't play with it. Looks like you might almost have gotten it working but need to deduce the pixel-mapping by carefully crafting pixel patterns to understand the internal structure of how the panel is mapping its pixels, so that you can reverse map.

@ghost
Copy link

ghost commented Oct 3, 2016

Hello,

I got exactly the same panels as @currentlysober 's. I have tried many different options (chain. rows, subpanels etc.) but nothing seem to work. Maybe someone has resolved this issue?

@doldroyd
Copy link

doldroyd commented Dec 7, 2016

I just received a panel with identical markings as @currentlysober and @marcinzdunek . I have not connected it to anything electrically yet, but upon inspection of the board it appears that the address is controlled via shift register, with "A" being the clock and "B" the data. I do not have a "normal" board to play with to confirm the different control strategy, but I will be working on some control code (microcontroller, not rpi) for this over the next few weeks and will report back if I get it to work.

@hzeller
Copy link
Owner

hzeller commented Dec 7, 2016

That would be cool. If you have figured out the way things are controlled on these boards, I can add the relevant code in the library.

@VadimSotskov
Copy link

Hey! So have anyone dealt with the 64x64 led matrix? I'm using it with arduino uno, and connect this additional 'E' pin to the ground on my arduino (as for 32x32 leds), but the result is so far from what I've expected. I've expected to get one smile on the top left. But eventually it dublicates it to another section. Like it divides my matrix into four 32x32 sections. Is the problem with 'E' pin only? Or there is something else?
photo_2017-03-28_20-26-41

@hzeller
Copy link
Owner

hzeller commented Mar 29, 2017

What are the parameters you gave ? Note that the 64x64 display is essentially two chained displays 32 wide and 64 high. So you need to give --led-chain=2 as parameter.

@hzeller
Copy link
Owner

hzeller commented Jul 30, 2017

An update on this bug:

  • the 64x64 that work with an E-line is long fixed and working (including support in the adapter board )
  • it is still unclear how the 64x64 panels with only A and B line work. I don't have such a panel, so some documentation would be good.

@noorabrar1
Copy link

noorabrar1 commented Sep 6, 2017

Hello sir,

I'm working on HUB75 for a project, the connectivity with pi3, and i am using your client server code.
using 3 different scan rate HUB75 board each four 32x32 panel connected in series and parallel

code:

Server: sudo ./ft-server --led-parallel=2 --led-rows=64 -D64x64 --led-chain=2

Client: sudo ./send-text -g64X64+0-0+1 -h localhost "hello" -f fonts/6x12.bdf -c ff0000

  • HUB75 - P5-16S-32x32-B0 consist of ABCD data lines (Works absolutely fine with series and parallel connections)

*HUB75- P2.5-32S-64X64 consist of additional E data line, wiring is properly connected(Not working properly, some set of upper led wont glow even i made correction -D128x128)
*HUB75- P5-8S-32x32 ABC data lines(Not working properly, multiple prints appear )

Please help me to set different scan rate. is there any other libraries has to downloaded or any other arguments i need to give.. ??

@hzeller
Copy link
Owner

hzeller commented Sep 6, 2017

@noorabrar1 please don't hijack an existing thread with a completely different question, open a separate issue instead.

@maitredede
Copy link

Hi,

In my case, I have a single 64x64 matrix.
I don't know which arguments I have to configure to properly run the demos.

For wiring, I have plugged the panel's connector pins to gpio using "regular" pinout (pi 3 gpio).
Then I launched demo 0 (rotating square) with sudo ./demo --led-no-hardware-pulse --led-show-refresh --led-rows=64 --led-gpio-mapping=regular-pi1 --led-slowdown-gpio=2 -D 0 --led-chain=2.
You can see resulting video here : https://youtu.be/lv6C89j0i1M

What can be the problem, and how may I fix it ? Thanks.

@hzeller
Copy link
Owner

hzeller commented Sep 16, 2017

@maitredede this panel does not have the A, B, C, D, E address lines as usual with 64x64 panels, but according to the picture on aliexpress only A, B which indicates entirely different controlling.

It is known that these panels exist, but I don't have one to reverse engineer how that works, so they are not supported by this library. You want to get one with 1:32 multiplexing (and all the address lines) to work with this library.

@maitredede
Copy link

Thanks @hzeller, I am with the same kind of panel @currentlysober has (line A, B, and NC).

If I would like to start writing my own driver, do you know where I can found a doc explaining how theorically I have to play with pins to display something ? Thanks.

@hzeller
Copy link
Owner

hzeller commented Sep 17, 2017

If there was a documentation, it was simple. So you have to do reverse engineering to figure out how it works internally.

@maitredede
Copy link

I would be pleased to reverse engineer and make a pull request if I knew where to start. Even contribute to your wiki for docs, and also maintain a c# wrapper... I will try something when I am back home.
Does the data need to be constantly refreshed ? Or can it be transmitted once and the display stay "as is" ?

@hzeller
Copy link
Owner

hzeller commented Sep 17, 2017

The display constantly has to be refreshed (at least the ones that are supported currently; not sure how the A/B displays work, but pretty sure they have to be updated as well).

There is already a c# wrapper, check out bindings/c#.

@maitredede
Copy link

Sorry for bothering :) If you prefer to talk privately, or another channel (gitter ?)...

I am trying to figure the principle of how a HUB75 should work. I found this page that may explain the bases.

If I understand well, a physical panel is divided in half (because of two RGB lines). The lines A, B, C... are the address of a row. In my case, I have only A and B, so only 4 rows can be addressed. The data I can send to the panel is only pixel "on" or "off". This bit is transmitted each rise on clock signal. I transmit one full data row (64 bits) on each 4 addresses. Then I pulse a latch to "go one row down", so in my case, all 4 rows are shifted down by 4. The OE signal is up when displaying image, and down when shifting data.
Do you aggree ? :)

@hzeller
Copy link
Owner

hzeller commented Sep 18, 2017

In the regular panels OE can also be on while you shift data, but not while switching rows. Also you use the lenght of the OE to do the PWM simulation. In general, the description is right with the A,B,C,... lines, but I don't know how the A, B lines behave.

@maitredede
Copy link

Hi,
My investigations so far for the 64x64 panel, 1/32 scan, with A, B and NC line :

  • Panel is divided in 2 parts of 32 rows.
  • RGB + clock transmits rows data.
  • NC seams to be a sort of clocking signal, I am trying to figure how it works...

@hzeller
Copy link
Owner

hzeller commented Jan 20, 2018

So I haven't heard anything about the library test changes of panels with AB address mode, so I've now submitted my changes, switchable via the flag --led-row-addr-mode=1.

If you have a 64x64 panel that only has AB in the address lines, try if this allow to make it working. It works for the panel I have tested here, but maybe it needs tweaks for other panels ?

(If you need tweaks and have figured out the protocol needed via a scope or otherwise, change class ShiftRegisterRowAddressSetter in lib/framebuffer.cc and let me know)

@alexgithub56
Copy link

alexgithub56 commented Jan 20, 2018 via email

@AsafFisher
Copy link

AsafFisher commented Jan 22, 2018

I have the 64x64 panel but from what I saw there are A, B and C not only A and B...
Here is the information the seller provides:

Signal name Pin number Description
A 9 The lowest bit of row address
B 10 The second lowest bit of row address
C 11 The  highest bit of row address
LE 14 Latch of row
CLK 13 Clock
EN 15 Enable
R1 1 Red data 1
R2 5 Red data 2
G1 2 Green data 1
G2 6 Green data 2
B1 3 Blue data 1
B2 7 Blue data 2
GND 4,812,16 Grounding

I tried to use your original wiring, looks like that:
sudo ./demo --led-rows=64 --led-cols=64 --led-no-hardware-pulse -t 10 -D 0
output:
img_7020

Seems like only 2/4 of the panel works for some reason.

When I added the tag --led-row-addr-mode=1 the screen does not work.

@AsafFisher
Copy link

I tried to move a pixel down vertically it seems like the middle part and the lower part are shifted up 1/4 (overriding the upper and second mid part)

@hzeller
Copy link
Owner

hzeller commented Jan 23, 2018

@AsafFisher

So looks like you have a standard 64x64 display with [A, B, C, D, E], but your supplier did not specify that properly in the documentation.
Your problem is that E is not connected, so everything in the second half folds itself up to the top again because E is kept to zero. This is why you see these strips overlay each other.

How did you connect the panel ? If you have connected it via the wiring description, you need to make sure to also connect the E line either to Pin 4 or Pin 8 wherever it is on your panel (might need to try).

If you are using the adapter, you can choose it via a jumper.

If you are using the Adafruit HAT, you have to make a little hardware mod so that it works.

@erice194
Copy link

erice194 commented Jan 23, 2018

First, thank you so much for taking all the time you do to continue to help everyone. If you have a donation link, please share!

I have the same panels and problems as AsafFisher. However, I only realized the Adafruit tutorial and github link were outdated... after I started. I have a RaspPi3B and an Adafruit RGB Matrix HAT. I have already soldered the GPIO and HUB75 connectors to the HAT. Pardon the newbie question as I am a cable solderer and not used to working with PCB, but do I need to desolder the HUB connector so I can solder a bridge from 24->4 Could I make that connection from underneath the board? How can I be sure I'm supposed to go to 4 and not 8? Can I go to both and sever each connection from the rest of the board?

I see the illustration pictures in the 64x64 with E-line on Adafruit HAT section, but do you happen to have a picture of the completed mod? Again, many, many thanks!

@erice194
Copy link

Maybe Ill just sell these displays and buy easier ones to work with.

@hzeller
Copy link
Owner

hzeller commented Jan 23, 2018

@erice194

If you directly connect the wire, you don't have to unsolder the HUB connector, just scratch the tiny GND connection as shown in the hardware mod.

You can test if pin 8 or pin 4 works if the 'E' line is not marked on your matrix board. There is no big harm in trying and then you see.

The completed mod is essentially having a wire from the source to the destination. The issue with this is of course, that that line will not be voltage adapted to 5V, so if you are really fancy then you lift a leg of the HCT245 and wire that up, but this is a little more advanced.

I really suggest to just solder up an adapter whose plans are provided in this project.

If you get another board that only does A,B, be aware that I have only ever tested one of these, they might be different, but would work directly with the Adafruit HAT at least electrically.

The Adafruit HAT only does four address lines, so typically you're limited to 32x32 or 64x32 panels. If you want to have the fastest update rate, use 32x32 with 1:8 multiplexing or 32x16 with 1:8 or 1:4.

@AsafFisher
Copy link

AsafFisher commented Jan 23, 2018

I have a (might not small) question for you @hzeller wonder if you could help.
How do you in general reverse engineer such product? How do you know how the clock works with byte transfare? I’d like to reverse engineer this pcb just for the experience and understanding. Thank you.
So for example to play with this board can I set clock to whatever speed I want for example?

THANK YOU very much for your time sir!

@hzeller
Copy link
Owner

hzeller commented Jan 23, 2018

@AsafFisher
Mostly educated guesses and experimenting. It helps that the inputs are typically marked, so R1, G1, B1 is pretty clear and CLK an Strobe as well; experimenting with that then reveals that A, B, C, D set addresses in sub-panels. Also putting yourself in the egineers' shoes and thinking "how would I build such thing" or "what would be a reasonable approach", then testing hypothesis is helpful.

Reverse engineering on the chip level often works, but is hard for these panels: they often have specific chips for which there are no datasheets anywhere online. So you might find some things, but it is probably not worth it. These panels typically work all very similar. The one you have seems to be a standard one with A-E addressing. If you measure between pin4 or pin8 to GND, you can also see which is grounded, so which is then probably the E.

Regarding clock speed: you'd assume (and see in this case) that these are standard 74x TTL chips, so clocking is probably limited into the few tens of Mhz range. Then you know that this can be long chains and observe that the signals are not differential, so that as well gives a clue that this can not be overly fast. And yes, turns out these panels typically can't really get much faster than 10-30Mhz depending on the panel.

@hzeller
Copy link
Owner

hzeller commented Jan 23, 2018

@maitredede
Can you test your panel with this --led-row-addr-mode=1 change ? It is essentially the last patch I had made accessible with a flag. I think last time you reported that you still some glitches with my previous patches, so if you can have a look and maybe modify ShiftRegisterRowAddressSetter so that it works with your panel, that would be great. Maybe we then can get a universal version that should work typically with these A/B panels.

Thanks!

@maitredede
Copy link

Hi @hzeller
I would be pleased to test it :) I saw the updates, but I did not had spare time yet to give it a hand. I will report as soon as I give it a hand (within the next days).

@erice194
Copy link

Is there anywhere to buy the Active-RPi-3xHub75-Adapter E-Line fully built?

https://github.com/hzeller/rpi-rgb-led-matrix/raw/master/img/three-parallel-panels-soic.jpg

@maitredede
Copy link

maitredede commented Jan 25, 2018 via email

@maitredede
Copy link

Hi @hzeller
Guess what ? 😄

sudo ./demo --led-no-hardware-pulse -D 0 --led-rows=64 --led-cols=64 --led-row-addr-type=1

... with the electrodragon board...

Working flawlessly 🥇

Thanks for your time :)

@birdtechstep
Copy link

I have P4 64x64 (icn2038s) HUB75E now not work display blank.
http://pmod86499.pic35.websiteonline.cn/upload/Q4F32V1.pdf

@hzeller
Copy link
Owner

hzeller commented Feb 27, 2018

How did you connect it @birdtechstep ? This one needs the E-line connected to pin 8.

@birdtechstep
Copy link

@hzeller Yes. I connect E-line to pin 8

@hzeller
Copy link
Owner

hzeller commented Feb 27, 2018

if the display is dark, then there are other problems. Power ? Does the panel have proper voltage on its 5V input ? Did you connect all the GNDs ?

@birdtechstep
Copy link

Yes. I use active-3 set pin 4 to GND, pin 8 to E-line power 5V 40A

P5 64x32 (connect pin 8 to GND work)

@hzeller
Copy link
Owner

hzeller commented Feb 27, 2018

So if your panel is an icn2038, probably this is similar to #466 - please continue on that issue with this.
Apparently these panels don't work, but I haven't seen such a panel.

@birdtechstep
Copy link

Thanks you. @hzeller

@MartyMacGyver
Copy link

@AsafFisher Did you ever get your 64x64 panel working? (The one that says it's (A,B,C) but probably isn't?)

@alm3dga
Copy link

alm3dga commented Aug 25, 2019

@hzeller Hi. I have the same problem with strips. , I haven't found solutions. May you check my setup?
1)Strips issue screen:
https://clip2net.com/clip/m47983/03a52-clip-323kb.jpg
https://clip2net.com/clip/m47983/661c9-clip-483kb.jpg
https://clip2net.com/clip/m47983/2776f-clip-617kb.jpg
https://clip2net.com/clip/m47983/d7f11-clip-89kb.jpg

2)My 64x64 2.5mm S32 led model https://aliexpress.com/item/32733178058.html
https://clip2net.com/clip/m0/8984d-clip-59kb.jpg
I have no info about type of adress lines (ABCDE or AB)
3) I use this RPi3 module as hat http://wiki.amperka.ru/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B:rgb-led-matrix-driver-cap
hub75 pins of this module https://clip2net.com/clip/m47983/40907-clip-15kb.png
https://clip2net.com/clip/m47983/9c3cc-clip-127kb.png

Please help. I tested 4 panels and have the same issue with of them. I don't know the way to fix that. Is it possible that all 4 led panels are defective?

@embedded-creations
Copy link

I'm trying to add support for AB address panels to SmartMatrix Library, but I have some hardware limitations that mean I can't use the exact same signal timing that this library does. I can only toggle the AB lines while the latch signal is high, so I would have to shift my pixel data out, set latch high, toggle the AB lines, set latch low. Does anyone know if that would work with these panels?

(If anyone is interested in the details, to save pin count and RAM, the address lines are toggled by the RGB lines, and their state is stored in a transparent latch IC controlled by the Latch signal. See IC2 in the schematic)

I would love to be able to answer this question for myself, but I've had a hard time buying AB address panels for testing. Ironically these only seem to be sent to people that don't want them, while I've tried a few Aliexpress listings shared by people that got AB address panels and always been sent ABCDE address panels. If anyone can recommend a vendor that will sell and actually ship AB address panels, or is willing to sell, donate, or loan me a panel, I'd be grateful. I'm in the UK, but occasionally visit the US.

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

No branches or pull requests