MAX7219 Matrix 8x32 - how to print text at specific position?

Question: Is there a way, with maybe the MD_Max72XX library, or other, to use the
Max7219 4-in-1 8x32 Matrix modules as a cursor addressable text output device?

I have created a great Clock Project (Dual-TimeZone Using GPS to discipline an RTC), and
currently displaying just fine on a 20x4 Blue/White Character addressable I2C LCD.
But everyone that I show it to asks for larger display.

To save time between "second" ticks, to keep the clock accurate, I use the character addressable
display LCD so that I can save time and ONLY print the text that changes. So I print by setting
a cursor location and then lcd.print the variable or text.

Do any of the Max72XX, or Parola, or MaxPanel libraries have the capability for printing
text at a specific character position on the 8x32 matrix displays?

I am very new to Arduino, and so far have found and tested the examples for
scrolling text, or static text that always starts at the beginning of the display.

Any ideas, pointers, or mentoring would be helpful and appreciated.

Cheers,

Neal - N6YFM

So I print by setting a cursor location and then lcd.print the variable or text.

That technique works for an LCD because there is logic inside the LCD to accommodate this. It is also needed because the LCD is a relatively slow device so minimising the amount of data sent to it.

That technique is not suitable for an LED matrix controlled by a chain of Max7219 chips, because to change anything you have to send all the data to the chip again. The amount of data you have to send is the same if the change is just one LED or all of them. So just send all the data again, you do not need the concept of a cursor.

OK, so I think I might understand that you are saying the SPI interface to these matrix modules is so much faster than the I2C for the small character LCD, that I should not worry too much about the time to write the one line of data to the matrix display.

I will try using the text mode of library MD_MAX72xx to simply write the entire display line when each
second turns over, and see what happens.

I suppose for the second timezone, I can simply use a second string of the matrix displays on a different
port, and write to one string or the other, depending on what I want to display.

Thanks for the tip.

Neal

so I think I might understand that you are saying the SPI interface to these matrix modules is so much faster than the I2C for the small character LCD, that I should not worry too much about the time to write the one line of data to the matrix display.

While SPI is faster than I2C what I am saying is that with the SPI interface of 4 Max7219 chips, there is no way you can avoid sending all the data to the display every time you make a change, so don't think that only altering one thing is going to make writing any faster.

I think you are worrying about something that is not a problem.

As Mike says, it is just not possible to send the data for just the 'changed' LEDs. You have to, effectively, refresh the entire display every time, as the MAX72xx chips are in a serial 'line' and every chip in the line needs to be updated. So the intelligent thing to do is to buffer all the changes and 'refresh' the display all at once, rather that every time one pixel changes, to get a solid looking display.

If you are just trying to display time, then updating once a second is definitely no big deal. You can actually update the 4 module display like you are using much much more frequently (as per the Parola text effects).

Guys, although what you say is correct and certainly the best answer to his question, I believe it is possible to address each led separately, I did it in a tennis game I play on a screen made of two 8x32 matrices.
I use the MD_MAX72xx library to which I added a function to read the value of a single 'pixel' and change it if necessary.
So it should be possible to address each individual led and thus draw anything on the display.

You are correct, technically you can update and address each individual pixel, but this is only in the MD_MAX72xx display buffer. The display update of that pixel occurs because the entire display is re-sent to the MAX72xx chips. The fact you can't tell this is happening is a testament to the speed of the update.

This negates the purpose of just updating a section of the display (used with the LCD display) as there is no 'saving' of any sort. In fact, probably complicates the code somewhat compared to just a whole screen redraw.