Go Down

Topic: (Solved) Need Assistance with Max7219 and 4 Digit 7 Segment LED (Read 2152 times) previous topic - next topic


Nov 30, 2012, 03:36 am Last Edit: Nov 30, 2012, 04:03 am by SteveOr Reason: 1
I'm attempting to drive a 4 digit 7-segment LED using a MAX7219 shift register with the code below and schematic from 7.12 of the Arduino Cookbook.  It calls for the Max7221 but I thought I'd try it with a Max7219 (I'm new to this but I hope it doesn't make a difference with this simple sketch).  

Code: [Select]
#include <SPI.h> // Arduino SPI library introduced in Arduino version 0019
const int slaveSelect = 10; //pin used to enable the active slave
const int numberOfDigits = 2; // change these to match the number of digits wired up
const int maxCount = 99;
int number = 0;
void setup()
SPI.begin(); // initialize SPI
pinMode(slaveSelect, OUTPUT);
digitalWrite(slaveSelect,LOW); //select slave
// prepare the 7221 to display 7-segment data - see data sheet
sendCommand(12,1); // normal mode (default is shutdown mode);
sendCommand(15,0); // Display test off
sendCommand(10,8); // set medium intensity (range is 0-15)
sendCommand(11,numberOfDigits); // 7221 digit scan limit command
sendCommand(9,255); // decode command, use standard 7-segment digits
digitalWrite(slaveSelect,HIGH); //deselect slave
void loop()
// display a number from the serial port terminated by the end of line character
char ch = Serial.read();
if( ch == '\n')
number = 0;
number = (number * 10) + ch - '0'; // see Chapter 4 for details
// function to display up to four digits on a 7-segment display
void displayNumber( int number)
for(int i = 0; i < numberOfDigits; i++)
byte character = number % 10; // get the value of the rightmost decade
if(number == 0 && i > 0)
character = 0xf; // the 7221 will blank the segments when receiving value
// send digit number as command, first digit is command 1
sendCommand(numberOfDigits-i, character);
number = number / 10;
void sendCommand( int command, int value)
digitalWrite(slaveSelect,LOW); //chip select is active low
//2-byte data transfer to the 7221
digitalWrite(slaveSelect,HIGH); //release chip, signal end transfer

I believe I have set up the hardware correctly on my breadboard.  My problem is that nothing happens but more significantly is that the Arduino's on board LEDs all go dim.  When I disconnect the pins into ground or 5v the Arduino comes back to life.  I'm using 30 ohms for the resistor for the Max7219 per the table on this page:  http://arduino.cc/playground/Main/MAX72XXHardware#SelectRSet

I'm using this 4 digit 7 Segment LED: http://www.mouser.com/Search/ProductDetail.aspx?R=HDSP-B03Evirtualkey63050000virtualkey630-HDSP-B03E .   If someone can advise me where I went wrong I'd really appreciate it.

Edit:  Rookie mistake.  I had positive and negative jumpers reversed.

Go Up