help interfacing with max6960 led matrix

Hi Eeddgar,

I´m using the eval board from maxim.

O.k. So, now i understand why you are setting up 4xMax6960 in the Cascaded Device Register.

//Number of Cascaded Devices Register
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(0x0e);
  spi_transfer(0x03);
  digitalWrite(SLAVESELECT,HIGH);

I forgot to comment in the code the last write, but in fact, the last one, is a writing to light up two leds:

oh, i c :sunglasses:

the max chip is still not showing anything on my display... maybe i should also get an evkit board for trying out the code ... they seem to be not really easy available. you can buy them only directly through maxim, isn't it?

i was cleaning up your code a bit and put send/read functions for better overview.. could you try it out on your arduino? especially i am curious if the read functions are working!

#define DATAOUT 11      //MOSI
#define DATAIN  12      //MISO
#define SPICLOCK  13    //SCK
#define SLAVESELECT 10  //SS
#define RESET 9         //Reset

byte clr;

void spi_transfer(volatile char data)
{
  SPDR = data;                    // Start the transmission
  while (!(SPSR&_BV(SPIF))) { }
 }

uint8_t spi_receive() {
  uint8_t val = 0;
  SPDR = 0x00; // Start clock
  while (!(SPSR&_BV(SPIF))) { }
    val = SPDR;
  return val;
}

void write8(uint8_t payload) {
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(payload);
  digitalWrite(SLAVESELECT,HIGH);
}

void write16(uint16_t payload) {
  payload &= 0xEFFF; // zero out the factory reserved bit / datasheet page 11
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(payload>>8);
  spi_transfer(payload&0xff);
  digitalWrite(SLAVESELECT,HIGH);
}

void write24(uint32_t payload) {
  payload &= 0xEFFF; // zero out the factory reserved bit / datasheet page 11
  digitalWrite(SLAVESELECT,LOW);
  spi_transfer(payload>>16);
  spi_transfer(payload>>8);
  spi_transfer(payload&0xff);
  digitalWrite(SLAVESELECT,HIGH);
}

uint8_t read16(uint16_t payload) {
  write16(payload);
  return spi_receive();
}

uint8_t read24(uint32_t payload) {
  write24(payload);
  return spi_receive();
}

void setup()
{
  Serial.begin(9600);
  Serial.println("booting...");
  
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK,OUTPUT);
  pinMode(SLAVESELECT,OUTPUT);
  pinMode(RESET,OUTPUT);

  // SPCR register
  // SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
  //  D7  D6  D5   D4   D3    D2   D1   D0

  //interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
  //sample on leading edge of clk,system clock/4 rate (fastest)
  SPCR = (1<<SPE)|(1<<MSTR);

  clr=SPSR;
  clr=SPDR;
  delay(10);

  digitalWrite(SLAVESELECT,HIGH);
  digitalWrite(RESET,HIGH);
  delay(5);
  digitalWrite(RESET,LOW);
  delay(5);
  digitalWrite(RESET,HIGH);
  delay(200);
 
  //Panel Configuration Register
  write16(0x0d01);

  //Panel Intensity Register
  write16(0x0230);

  //Number of Cascaded Devices Register
  write16(0x0e03);

  //Number of Display Rows Register
  write16(0x0f01);
  
  delay (500);

  //light up two leds, the first and the fifth, of the first row of the matrix
  write24(0x000088);
}

void loop()
{
while (1);
  {
  };

}

THUMBS UP ++ BIG THANKS for sharing your code :slight_smile:
ritzdank