jbobdobbs

Member Since: January 9, 2011

Country: United States

  • Tutorial - Controlling RGB Matrices with Arduino | about 3 years ago

    I’ve got an Uno, so I thought I wasn’t able to upload the firmware. I stumbled on a patch for ArduinoISP here:
    http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1286589145
    I applied the patch manually, saved it as a new sketch. Then, I did this:
    1. Uploaded the patched ArduinoISP.
    2. Unplugged from USB.
    3. Disabled the autoreset.
    4. Connected the Matrix ISP pins in the prescribed manner.
    5. Connected the USB cable and let the Arduino boot.
    6. Ran the following from a terminal:
    avrdude -P /dev/tty.usbmodem621 -b 19200 -c avrisp -p m328p -F -v -e -U flash:w:RGB_Backpack_v5.hex
    And it worked. The firmware uploaded. Once it was done, I
    7. Unplugged the USB cable to power off the Arduino.
    8. Removed the disable of the autoreset.
    No more “tearing” letters, no off-by-one problems.

  • Tutorial - Controlling RGB Matrices with Arduino | about 3 years ago

    I’m confused. My understanding from the datasheet is that you have to do this:
    1. Take SS low.
    2. Wait 500 microseconds.
    3. Write to the SPI.
    4. Take the SS high.
    5. Wait 500 microseconds.
    I just had a look into the library and the code that initialises the board seems to skip the timing on the datasheet. For example:
    //Make sure the RGB matrix is deactivated
    digitalWrite(SLAVESELECT,HIGH);
    //Send the command mode character
    digitalWrite(SLAVESELECT, LOW);
    spiTransfer(‘%’);
    digitalWrite(SLAVESELECT, HIGH);
    delay(100);
    //Configure the correct number of boards
    digitalWrite(SLAVESELECT, LOW);
    spiTransfer(num_boards);
    digitalWrite(SLAVESELECT, HIGH);
    delay(100);
    Shouldn’t it be more like:
    //Make sure the RGB matrix is deactivated
    digitalWrite(SLAVESELECT,HIGH);
    //Send the command mode character
    digitalWrite(SLAVESELECT, LOW);
    delayMicroseconds(500);
    spiTransfer(‘%’);
    digitalWrite(SLAVESELECT, HIGH);
    delayMicroseconds(500);
    //Configure the correct number of boards
    digitalWrite(SLAVESELECT, LOW);
    delayMicroseconds(500);
    spiTransfer(
    num_boards);
    digitalWrite(SLAVESELECT, HIGH);
    delayMicroseconds(500);
    There seem to be other examples in ::display() and ::scrollBuffer.
    Or maybe that’s being handled elsewhere? Please de-confusify me.

No public wish lists :(