MAX7219 with Arduino


im having trouble trying figure out how set max7219 chip, in startup routine....  see there supposed ledcontrol.h file supposed help.  arduino compliler says there no such library though....


any suggestions on how can thing programed , through start section?


thanks!

zack

here's did. don't use libraries lot, preferring read data sheet & understand what's going on. doesn't make greatest code sometimes, , there's plenty of room improvement.

you'll have variable declarations too.
code: [select]

// addresses max7221, , values/ranges write in

#define decode_mode 0x09 // write data 0xff, code b decode digits
#define intensity_address 0x0a // 0x07 start, half intensity. valid 0x00 (min) 0x0f (max)
#define scanlimit_address 0x0b // 0xff, 8 digits on
#define shutdown_address 0x0c  // 0x01, normal operation (0x01 = shutdown) - powers in shutdown mode

#define displaytest_address 0x0f // 0x01 = lights on full, 0x00 = normal ops
#define leftscore_tens_address 0x01 // digit 0, leftscore_tens+left_yellow, fill right hand byte data display
// data = 0-9, a='-', b='e', c='h', d='l', e='p', f=blank
#define leftscore_ones_address 0x02 // digit 1, leftscore_ones+right_yellow
#define rightscore_tens_address 0x03 // digit 2, rightscore_tens+right_red
#define rightscore_ones_address 0x04 // digit 3, rightscore_ones+right_yellow
#define minutes_tens_address 0x05 // digit 4, minutes_tens+colon
#define minutes_ones_address 0x06 // digit 5, minutes_ones+left_priority
#define seconds_tens_address 0x07 // digit 6, seconds_tens+right_priority
#define seconds_ones_address 0x08 // digit 7, seconds_ones+swap



void setup() // stuff runs once before looping forever
{
 // start spi talk max7221
 spi.begin(); // nothing in () because master
 pinmode(ss, output);  // slave select spi  <--- need here before spi writes

 //  max7221: write shutdown register  
 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(shutdown_address);  // select address,
 spi.transfer(0x00);      // select data, 0x00 = outputs turned off
 digitalwrite(ss,high);   // take ss pin high de-select chip:
 // serial.println("shutdown register, dislays off");

 // put known values max7221 doesn't have weird display when turned on
 // 0x0f = blank digit
 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(leftscore_tens_address);  // select address,   <<< these addresses of 8 data registers
 spi.transfer(0x0f);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip

 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(leftscore_ones_address);  // select address,
 spi.transfer(0x0f);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip

 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(rightscore_tens_address);  // select address,
 spi.transfer(0x0f);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip  

 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(rightscore_ones_address);  // select address,
 spi.transfer(0x0f);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip

 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(minutes_tens_address);  // select address,
 spi.transfer(0x0f);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip

 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(minutes_ones_address);  // select address,
 spi.transfer(0x0f);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip

 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(seconds_tens_address);  // select address,
 spi.transfer(0x0f);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip  

 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(seconds_ones_address);  // select address,
 spi.transfer(0x0f);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip

 //  max7221:
 //  write intensity register
 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(intensity_address);  // select address,
 spi.transfer(intensity);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip:
 //serial.println("intensity register ");

 // write scanlimit register
 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(scanlimit_address);  // select address,
 spi.transfer(0xff);      // select data - ff = 8 digits
 digitalwrite(ss,high);   // take ss pin high de-select chip:
 //serial.println("scanlimit register ");

 // write decode register
 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(decode_mode);  // select address,
 spi.transfer(0xff);      // select data - ff = 8 digits
 digitalwrite(ss,high);   // take ss pin high de-select chip:
 //serial.println("decode register ");

 //display test
 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(displaytest_address);  // select address,
 spi.transfer(0x01);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip:
 //serial.println("digit display test on ");
 delay (100);

 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(displaytest_address);  // select address,
 spi.transfer(0x00);      // select data
 digitalwrite(ss,high);   // take ss pin high de-select chip:
 //serial.println("digit display test off ");
 delay (100);

 // write shutdown register normal display operations
 digitalwrite(ss,low);  // take ss pin low select chip:
 spi.transfer(shutdown_address);  // select address,
 spi.transfer(0x01);      // select data, 0x01 = normal ops
 digitalwrite(ss,high);   // take ss pin high de-select chip:
 //serial.println("shutdown register, displays on ");

}


Arduino Forum > Using Arduino > General Electronics > MAX7219 with Arduino


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial