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
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
ritzdank