Hello to all,
I'm trying to interface arduino with the max6954 led driver. The only thing that i can do, is to enter and exit in display test mode (not every time,sometimes, when i send the command, nothing happens) all other commands don't works at all.
Can someone help me? Thanks!!
Here is the code that i'm using:
#define DATAOUT 11//MOSI
#define DATAIN 12//MISO
#define SPICLOCK 13//sck
#define SLAVESELECT 10//
char recbuf;
char spi_transfer(volatile char data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
{
};
return SPDR; // return the received byte
}
void setup() {
byte i;
byte clr;
Serial.begin(9600); // intitialize the serial port
pinMode(DATAOUT, OUTPUT);
pinMode(DATAIN, INPUT);
pinMode(SPICLOCK,OUTPUT);
pinMode(SLAVESELECT,OUTPUT);
digitalWrite(SLAVESELECT,HIGH); //disable device
SPCR = (1<<SPE)|(1<<MSTR)|(0<<DORD)|(0<<SPR1)|(1<<SPR0);
clr=SPSR;
clr=SPDR;
delay(10);
}
byte write_pot(byte address, byte value)
{
digitalWrite(SLAVESELECT,LOW);
//2 byte opcode
spi_transfer(address);
spi_transfer(value);
digitalWrite(SLAVESELECT,HIGH); //release chip, signal end transfer
Serial.println("OK");
delay(5);
}
void loop() {
recbuf=Serial.read();
switch (recbuf){
case 'a':
Serial.println ("Enter in disp test mode");
write_pot(B00000111,B00000001);
break;
case 'b':
Serial.println ("Exit display mode");
write_pot(B00000111,B00000000);
break;
case 'c':
Serial.println ("Enable decoding");
write_pot(B00000100,B00000001);
break;
case 'd':
Serial.println ("Writing C");
write_pot(B01101000,B00000001);
break;
}
}