Page 1 of 5

### Dot Matrix Display

Posted: Sun Dec 18, 2011 6:35 am
Would it be possible to set up a page on the Forum for the Dot Matrix Display along with some more sample code or a library for rolling text.

This product totally rocks but I cant seem to find any reference code I can experiment with other than the demo program.

Many Thanks

### Re: Dot Matrix Display

Posted: Mon Dec 19, 2011 7:06 am
I'm busting to start using my Dot Matrix Display, but where the hell do you find a regulated 5V power supply capable of up to 40 Amps???
That's one stack of 7805 ganged together, if that's at all possible.

Cheers,
ptera

### Re: Dot Matrix Display

Posted: Mon Dec 19, 2011 8:50 pm
Hi,

I thought the same until I plugged it into my UNO ( powered just via USB) and it is plenty bright enough. In fact unless I gang a few together I dont expect that I would need an external power supply, however I am interested to see how bright they get.

As I am just learning to program I just there was more sample code around to hack and learn with,

Cheers

### Re: Dot Matrix Display

Posted: Tue Dec 20, 2011 1:28 am
You can get 40A lab supplies that will do 5V out, but that's not quite useful in a fixed setting, plus they're usually \$200+.

For \$40-50ish, you can get 5V fixed voltage 40A power supplies from eBay (eg: from Asia Engineer).

Note: I don't specifically endorse Asia Engineer. It was just the first hit on an eBay search. Make sure to do your own checking into who you are buying from, their reputation, etc.

### Re: Dot Matrix Display

Posted: Wed Dec 21, 2011 1:47 pm
I can't understand how it could be 40A per board, that seems huge.

512 * 20 mA per LED equals 10.24 A. (20 mA is a conservative high number, for a LED). Let's be extra conservative and allow plenty of extra current for the control logic... if I had to guess how much supply current capacity you would need per board I would have guessed about 15 A would be plenty. That's also assuming that all LEDs are on 100% of the time.

Anyway, for a cheap, common standard power supply that you can obtain anywhere in the world that could give you high current 5V I would recommend using a standard ATX PC power supply.

I've got two laying around here at the moment, a cheapo Codegen 350W one which claims a rating of 30A at 5V and a more upmarket expensive TopPower 420W one which claims a rating of 42A at 5 V.

### Re: Dot Matrix Display

Posted: Sun Dec 25, 2011 8:21 am
I am keen to see a forum topic for the matrix display also. We have sold a few of these boards to customers who want to gang them together, however the current library only supports single display. Perhaps if a new forum topic is available then we can discuss how to do this?

### Re: Dot Matrix Display

Posted: Sun Dec 25, 2011 9:25 am
TechnicaOne wrote:I am keen to see a forum topic for the matrix display also. We have sold a few of these boards to customers who want to gang them together, however the current library only supports single display. Perhaps if a new forum topic is available then we can discuss how to do this?
Since this is a module, you could create a thread in the Module Support forum.

Note: If it leads to enough posts/threads, I'm sure Jon will have no objection about creating a whole forum for it.

PS: While I am an admin, I won't create new forums without at least some preliminary 'ok' from Jon.

### Re: Dot Matrix Display

Posted: Sun Dec 25, 2011 9:36 am
I would suggest that there is interest in this topic and since it is designed to extend to multiple displays then Jon may look at adding a topic for this to support the product. While I am involved in reselling these there has been disappointment that the module is not well documented in relation to the advertised feature. I hope that this forum is designed to enhance product support. Lets see what Jon or Marc think.

### Re: Dot Matrix Display

Posted: Mon Dec 26, 2011 9:08 am
Hi,

Having originally initiated this post I thought it would help if I contributed some code to help others that want to make the most from the DMD.

Attached (hopefully) is a notepad txt file which can be copied into Arduino. If you have a Uno with a DMD attached it will display a rolling text message. Upon examination of the code it should be very easy for you to create your own message. Mind you its tricky to get the sequence right.

This is my first attempt at Arduino coding and I have created this by just hacking the demo code that comes with the DMD. I have learnt a lot from doing this and in a way am happy that I had to learnt to do this myself. However I have posted this code to help those who want a kick start on how to start using the DMD to its potential.

If you have a better way of creating a rolling text message, or to use the DMD in other ways, please post the code.

This is why we want a dedicated page for the DMD so that we can all start sharing its potential.

Enjoy

Buzbot.

### Re: Dot Matrix Display

Posted: Mon Dec 26, 2011 9:17 am
Ok,

So it looks like the attachment didnt work. I am sorry to have to do this but below is the code.I didn't want to clug this up with such a long post

// This program will display a rolling message on one line in the middle of the DMD
// This code has been created from modifying the example dmd_demo code which is downloaded from the Freetronics website for use with their DMD
// This code uses the ascii set and format provided in the dmd_demo library. No changes have been made to the code in this library
// In the dmd_demo code there are two lines of text. In this program the second line of code has been removed and the top line has
// been lowered from the top position "0" to the middle of the display, position "4"
// This code uses the various library components which must be downloaded from Freetronics to make the DMD operate
// To set up, firstly get your Freetronics dmd to work with the Freetronics dmd_demo code. This will confirm that the library is set up corectly
// To create your own message you just need to change the text in the pattern that has been created in the code below
// I have selected a 150 ms delay but you can vary the delay to change the pace of the message display.
// Lastly, this is my first attempt at Arduino coding, there is probably more efficient code to create a rolling text message using the Freetronics dmd
// If you can improve on it please post your code on the Freetronics forum
// Enjoy, this is a great product with heaps of potential !!

// This code is the bare minimum code from the Freetronics dmd_demo library that is required to make the dmd operate
// Dont delete any of this, otherwise it wont work

#include <SPI.h> //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)
#include <DMD.h> //
#include <TimerOne.h> //

DMD dmd; //Fire up the DMD library as dmd

void ScanDMD()
{
dmd.scanDisplayBySPI();
}

void setup(){
Timer1.attachInterrupt( ScanDMD ); //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()
}

// Below is the text of the rolling message
// In the dmd_demo code there are two lines of text. In this program the second line of code has been removed and the top line has
// been lowered from the top position "0" to the middle of the DMD position "4"
// Note that the code begins with the first character beginning on 27 (furthest right hand side)
// Each other character of the message is built from the right so that it reads from left to right
// It is necessary to build each character of the message in this way hence the repitition as each character drops off the left side of the DMD

void loop()
{
// 1st set of text
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 27+0, 4, 'T', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 22+0, 4, 'T', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'h', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 17+0, 4, 'T', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'h', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'e', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 12+0, 4, 'T', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'h', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'e', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, ' ', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 7+0, 4, 'T', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'h', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'e', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'q', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'T', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'h', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'e', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'q', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'u', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
// 2nd set of text
dmd.drawCharacter_5x7( 2+0, 4, 'h', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'e', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'q', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'u', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'i', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'e', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'q', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'u', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'i', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'c', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'e', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'q', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'u', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'i', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'c', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'q', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'u', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'i', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'c', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'k', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
// 3rd set of text
dmd.drawCharacter_5x7( 2+0, 4, 'q', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'u', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'i', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'c', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'k', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, ' ', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'u', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'i', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'c', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'k', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'b', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'i', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'c', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'k', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'b', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'r', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'c', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'k', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'b', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'r', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'o', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'k', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'b', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'r', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'o', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'w', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'b', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'r', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'o', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'w', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'n', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'b', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'r', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'o', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'w', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'n', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, ' ', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'r', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'o', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'w', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'w', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'f', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'o', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'w', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, 'n', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'f', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'o', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );
dmd.drawCharacter_5x7( 2+0, 4, 'w', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 7+0, 4, 'n', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 12+0, 4, ' ', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 17+0, 4, 'f', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 22+0, 4, 'o', GRAPHICS_NORMAL );
dmd.drawCharacter_5x7( 27+0, 4, 'x', GRAPHICS_NORMAL );
delay( 150 );
dmd.clearScreen( true );