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
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.
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
Post a Comment