Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

16 X 1024 LED Matrix Scanning

Status
Not open for further replies.

rajesh.shaw

Newbie level 6
Joined
Apr 11, 2007
Messages
13
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,394
Hi All,
I have P10 module arranged for 16 rows X 1024 columns matrix. To control, I am have to use ARM NXP LPC1768 Microcontroller with maximum frequency upto 100 MHz, for scrolling text display.
I am trying to understand scan rate for each column in order to update the display properly. What I read from internet resources that each LED column to be turned ON/OFF 200us.
I have to design timer to handle such frequency.
Can anyone suggest me in this regard about caculating frequency based on number of columns and rows ?
Any suggestion/reference post would be helpful for me.
Regards.
Raj S.
 

With an array of 16x1024, if each character has the size of 16x16 LEDs, the whole panel has 64 characters. It means that with a duty cycle of 200us for each column, the entire text will scroll in approximately 0,2s which is extremely fast to someone read something. Also, in order to avoid problems with the quality of the signal that drives the LEDs, you could multiply this time for a factor of 20 or even more.
 

I don't understand the 200 µs specification. P10 (and similar LED modules) are controlled with row multiplex, a full row is loaded in the module shift register and transferred to the output registers while activating the respective row.

Question is if all modules are driven from one data output or if you loading groups of modules in parallel. If each row is activated 200 µs, you have 16*0.2 = 3.2 ms mux cycle and 5.1 MHz shift clock for 1024 bit row length.
 

I want to use single data for entire 1024 columns. But will it be possible to achieve scrolling effect with 100 MHz clock with single data line? I need to understand refresh rate required for each column and rows.

Thanks.
Raj S.
 

Hi,

I think a 100MHz clock surely is fast enough, but I doubt the display can handle this frequency.

Klaus
 

LED modules are using serial display drivers similar to TLC2926 which handle up to 30 MHz shift clock. I see shift clocks of a few MHz with common driver cards. Shift clocks above 10 MHz might bring up timing problems with the serial signal chain due to delay skew, but I didn't yet test.

You need > 5 MHz clock to achieve the previously calculated 3.2 ms mux cycle respectively about 300 Hz refresh rate.

Fast scrolling would respectively require more than 1 column advance per update cycle. What's your intended scroll speed?
 

My intended speed would be like this or slower than this, as shown in below: https://youtu.be/EI17t16kbjo
. I am using ARM LPC1768 microcontroller to add additional features apart from scrolling. Can You please suggest how to calculate timer interrupt rate in order to achieve normal scrolling effect for character having the size of 16x16 LEDs ?
 

You should think a bit about suitable software organization. I would use DMA transfer to SPI interface, a full row (128 bytes) at once, advance the multiplexer on DMA end interrupt, setup the next transfer, repeat infinitely.

There will be 16 row buffers, each at least double the size of an actual display row.

Scrolling is performed by shifting the start index into the row buffer (8 pixel wise) + 0 to 7 pixels by sending additional clocks pulses after each DMA block transfer before the row strobe signal.

The text to display can be build in main code and copied to DMA buffer while the interrupt code is performing the display refresh.
 

So, I need to use DMA feature of the ARM. Using DMA, will it be enough for a single data line for 1024 column of P10 modules(32 pieces) ? Any method with single data line and without DMA? I have to decide whether with or without DMA to proceed.
Thanks.
 

DMA is a straightforward way to refresh the display smoothly. Another option is an interrupt driven SPI handler.
 

Let me work with interupt driven SPI handler to push data for 16 rows and 96 colums(16×96 matrix). But what is the strategy for updating the display in P10 module? My understanding is like this:
1. 16×8=128 bytes of data.
2. Latch data.
3. Enable P10.
4. Activate rows 1,5,9,13.
5. Disable P10.
My queries:
Which steps to be done in Timer interuupt handler snd which steps to be done in SPI interrpt handler?
To start with just 16X96 matrix and font size 16×16, what could be the timer frequency and spi clock?

Thanks.
 

Activate rows 1,5,9,13
I was incorrectly assuming that the P10 16x32 LED module implements a x16 mux scheme, but apparently it's a x4 mux scheme, with interleaved rows and 4x32=128 bits shifted at once. Some of my previous timing calculations are respectively incorrect.

I think you don't necessarily need a timer interrupt, you can set the scan speed by the SPI clock frequency implicitly. If the scan shift is ready, deactivate the previous row (EN=0), latch the row (store clock pulse) and activate the new row(s) (A,B selection, EN=1). Then start shifting out the next row data while the present row is displayed. Or use an explicit scan timer which must be slower than the maximum scan rate. Make the scan timer perform the row disable, latch, row select and enable. Then start a new data shift cycle.

- - - Updated - - -

Reviewing recent P10 threads at Edaboard,
https://www.edaboard.com/threads/356527/
https://www.edaboard.com/threads/357016/
I notice that some don't realize the LED module feature to shift new row data while a row is displayed. Others like the AVR project at digital-wizard.net are performing the SPI data output in a scan timer interrupt per bit-banging.

Of course, the suggested SPI interrupt makes only sense with hardware SPI so that you can perform other operations while the hardware is shifting data. And only if the complete SPI interrupt processing is considerably faster than 8 or 16 shift clocks (depending on the used SPI data size).
 

So considering your suggestion, one more thing would like to clarified regarding microcontroller selection. I am interested to use ARM LPC because of lot of integrated features & high frequency range, but will 8 bit microcontroller be enough to support 1024 columns and 32/64 rows at a time?
Say Atmega32 with 16 MHz clock.
Just thinking from design point of view the differences between these microcontroller.
Thanks.
Raj S.
 

will 8 bit microcontroller be enough to support 1024 columns and 32/64 rows at a time?

Although in C language you can handle variables of any size, for this case in particular where you need to manipulate a display with 16 rows, it is strongly recomended that you choose some microcontroler whose pinout can be direcly mapped into 16 bits GPIO's, otherwise you'll have to multiplex the variable that represents each character into 2 other ones.
 

I am using P10 module, so I have Data, clock, latch, A,B & EN signals to control rows and columns. So, I would like to understand is there any handling that I can do with ARM LPC, but cannot do with any 8051 for controlling scrolling text with 1024 columns and 32/64 rows at a time?
Regards.
Raj S.
 

but cannot do with any 8051 for controlling scrolling text with 1024 columns and 32/64 rows at a time?
You surely can, but at the price of complicating in the programming side. I did a similar stuff with a LED matrix having characters of 16x12 size controlled by 8-bit microcontroller. I don't recommend, use a 16bit microcontroler instead.
 

So, I would like to understand is there any handling that I can do with ARM LPC, but cannot do with any 8051 for controlling scrolling text with 1024 columns and 32/64 rows at a time?
When you say any 8051, you surely realize that it has insufficient memory for the display buffer. Also scan speed and respectively display refresh rate will be an issue.
 

I am done with displaying static text on a single P10 module of 16 rows x 32 columns. Now I want to make scroll effect from right to left for font size 8x8. I can understand that I need to update display buffer[row][col].
I am looking for some reference implementation on how to update the display buffer based on font matrix of 8x8.
Thanks.
Raj. S.
 

I have one more query I have. For a single p10 of 16 rows x 32 column, I declared displayBuffer[16][4]. No. of cols I made as 4 because of 8x8 font size.
Is my understanding correct?
Thanks.
 

I want to make scroll effect from right to left for font size 8x8. I can understand that I need to update display buffer[row][col]

Basically:
You have to create a variable string array in program having the size of the complete text. If you chose for example the panel with 256x8 dots, there would fit a text of 32 characters. Exactly as you said, you have to update buffer[row][col++], but after 8th bit, you scroll text 1 character.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top