PDA

View Full Version : Anyone see this new toy from sparkfun?



A Marchini
07-16-2010, 09:24 AM
Kinda a shortcut to some LEDtriks action... if not influenced directly, which I didn't check.

Its called the MondoMatrix


http://www.sparkfun.com/commerce/product_info.php?products_id=9972

Tony M.

oldcqr
07-16-2010, 09:59 AM
Wow, that's a bit expensive...

First you need this for $70: http://www.sparkfun.com/commerce/product_info.php?products_id=9970

Then the display board for $95:
http://www.sparkfun.com/commerce/product_info.php?products_id=9972

And then a 100 LEDs pack for $60:
http://www.sparkfun.com/commerce/product_info.php?products_id=9985

$225 and only 192 channels. (64 RGB or 192 single color).

A Marchini
07-16-2010, 10:43 AM
Wow, that's a bit expensive...

First you need this for $70: http://www.sparkfun.com/commerce/product_info.php?products_id=9970

Then the display board for $95:
http://www.sparkfun.com/commerce/product_info.php?products_id=9972

And then a 100 LEDs pack for $60:
http://www.sparkfun.com/commerce/product_info.php?products_id=9985

$225 and only 192 channels. (64 RGB or 192 single color).

Well it looks like you could get away without the Arduino , i didn't realize it used 9 bit encoding. You should be able to simulate it with a UART , though not generally easy to do.

Have to look up the protocol used.

Don't necessary have to buy the LEDs from sparkfun either too.

The nice thing about this is that you can get there with less work.

Tony M.

LabRat
07-16-2010, 11:20 AM
The communication between the boards is via Rs485, so there's no real requirement to have that first USB Arduino thingy board. We just need to understand the protocol/handshake over the serial lines.

Which I believe that they have kindly provided for us in their released code.



void MatrixNet::setTransmit()
{
//wait for empty transmit buffer
while(!(UCSR1A & (1 << UDRE1)));

digitalWrite(DirControlPin, 1);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}

void MatrixNet::setReceive()
{
while(!(UCSR1A & (1 << TXC1)));
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
digitalWrite(DirControlPin, 0);
}

void MatrixNet::sendAddressByte(unsigned char DataByte)
{
//wait for empty transmit buffer
while(!(UCSR1A & (1 << UDRE1)));

//set the 9th bit
UCSR1B |= (1 << TXB81);

UDR1 = DataByte;
UCSR1A |= _BV(TXC1);
while(!(UCSR1A & (1 << UDRE1)));
}

void MatrixNet::sendDataByte(unsigned char DataByte)
{
//wait for empty transmit buffer
while(!(UCSR1A & (1 << UDRE1)));

//clear the 9th bit
UCSR1B &= ~(1 << TXB81);

UDR1 = DataByte;
UCSR1A |= _BV(TXC1);
while(!(UCSR1A & (1 << UDRE1)));
}

void MatrixNet::changeLED(unsigned char BoardNumber, unsigned char LEDNumber, unsigned char Red, unsigned char Green, unsigned char Blue)
{
this->setTransmit();
this->sendAddressByte(BoardNumber);
this->sendDataByte(2);
this->sendDataByte(LEDNumber);
this->sendDataByte(Red);
this->sendDataByte(Green);
this->sendDataByte(Blue);
this->setReceive();
}


Creating a DMX "front end" would be almost trivial. :)

budude
07-16-2010, 11:27 AM
Just wondering about the interface speed though:

Data interface: approx. 115.2 kbps (113.636kbps actual), 1 start bit, 1 stop bit, 9 data bits, MatrixNet V1 protocol

Can it run at 250kbps?

LabRat
07-16-2010, 01:10 PM
I don't think it needs to. Sure it would be nice to make this understand DMX natively, but if we're going to make an interface device, then we need only speak DMX speeds in our device. The downstream side (to this board) would run at 115.2, but need only track 192 channels. Oh wait.. if we're tied to their protocol, we may have issues (as they add the overheard of board and channel address to every 3 channels.)

Ok.. I think we need to look at what CPU it's running, and whether we can tweak the firmware.

n1ist
07-17-2010, 04:14 PM
While I couldn't find the schematic, the LEDMatrix has a 20MHz oscillator and a processor in the Atmega168 family. The picture is a bit fuzzy, but I would guess that the LEDs are driven eith a TLC59116 or similar (there's a resistor for each one, probably setting the current). In that case, the processor is just translating RS485 to I2C, so it should be easy to rewrite the code for DMX. I'm a little confused by the 10k termination on the RS485 bus, however :-)

As for "approx. 115.2 kbps (113.636kbps actual)", it's because of the 20MHz rock. 250k would work out perfectly.


/mike