I am trying to control seven segment displays with MAX 7219 and SPI on MEGA 2560. My goal is to make a count down or count up clock. This should be easy but it isn't working. The compiles and loads to the board with no errors. I have tried other sketch examples and confirmed the board I have is working.
#define DIN 51
#define CSpin 53
#define CLK 52
unsigned long counterValue = 0;
byte digits[8];
void displayCounter();
void setup() {
SPI.setClockDivider(SPI_CLOCK_DIV2);
SPI.setDataMode(SPI_MODE0);
SPI.setBitOrder(MSBFIRST);
digitalWrite(CSpin, HIGH);
pinMode(CSpin, OUTPUT);
SPI.begin();
digitalWrite(CSpin, LOW);//come out of shutdown
SPI.transfer(0x0C);
SPI.transfer(0x01);
digitalWrite(CSpin, HIGH);
digitalWrite(CSpin, LOW);//decode 8 digits
SPI.transfer(0x09);
SPI.transfer(0xFF);
digitalWrite(CSpin, HIGH);
for (int i = 1; i < 9; i++) {//set all digits OFF
digitalWrite(CSpin, LOW);//digit 0
SPI.transfer(i);
SPI.transfer(0x0F);
digitalWrite(CSpin, HIGH);
}
digitalWrite(CSpin, LOW);//intensity MIN
SPI.transfer(0x0A);
SPI.transfer(0x00);
digitalWrite(CSpin, HIGH);
digitalWrite(CSpin, LOW);//scan limit - all 8
SPI.transfer(0x0B);
SPI.transfer(0x07);
digitalWrite(CSpin, HIGH);
}
void loop() {
displayCounter();
counterValue++;
// for (byte num = 0; num < 10; num++) {
// for (byte i = 1; i < 9; i++) {
// digitalWrite(CSpin, LOW);//digit 0
// SPI.transfer(i);
// SPI.transfer(num);
// digitalWrite(CSpin, HIGH);
// delay(1);
// }
// delay(500);
// }
}
void displayCounter() {
unsigned long digitsCounter = counterValue;
for (int i = 0; i < 8; i++) {
digits[i] = digitsCounter % 10;
if(counterValue< pow(10,i))// 1, 10, 100, 1000....
digits[i] = 0x0F;
digitsCounter /= 10;
PORTD &= ~(1<<CSpin);
SPI.transfer(i + 1);
SPI.transfer(digits[i]);
PORTD |= (1<<CSpin);
}
}
