If you look at my first light post there is a glorious picture of a blank breadboard hooked up to a Raspberry Pi. I got it to flip a bit on the GPIO (#21) but I really wanted to see something. I’d like to do that classic project, lighting an LED, but with a more useful twist. Rather than hooking the LED up directly I want to use a 4-Wire-Intefaced 20-Port LED Display Driver and I/O Expander (MAX6957) to light my LED. By doing this I would learn how to control the SPI interface and I should be able to expand my drivers to accommodate my eventual pinball display.
Setting up the hardware
I needed to connect my MAX6957 to my Raspberry Pi thorugh the SPI interface. The Adafruit T-Cobbler Plus made doing that a dream once I figured out that MOSI meant Master Out Slave In which corresponded to the MAX6957’s DIN port. After that the rest was easy. My schematic looks like this:
I used a 150 Ohm resistor to current limit the LED to about 17mA. The MAX6957 also controls the current limit but I wanted some hardware reassurance. I might remove it later. We’ll see. I quickly hooked it up; it’s a thing of beauty!
Next, on to the software.
Setting up the software
I took a look at the excellent blog post on 100 Random Tasks called Simple SPI on Raspberry Pi. This pointed me in the right direction of how to enable the Linux Kernel module by removing it from the blacklist. The blacklist is used to disable certain kernel modules and becuase Debian has SPI turned off by default you need to enable it. You can enable it by editing /etc/modprobe.d/raspi-blacklsit.conf
sudo vi /etc/modprobe.d/raspi-blacklsit.conf
Once in the file I commented out the blacklist command for the SPI driver. It now looks like this:
# blacklist spi and i2c by default (many users don't need them)
# I want to use the SPI interface so I need to turn it on.
After a quick reboot I could see that the module was present by doing an lsmod
Module Size Used by
snd_bcm2835 18169 0
snd_soc_bcm2708_i2s 5486 0
regmap_mmio 2818 1 snd_soc_bcm2708_i2s
snd_soc_core 128166 1 snd_soc_bcm2708_i2s
regmap_spi 1913 1 snd_soc_core
snd_pcm_dmaengine 5481 1 snd_soc_core
snd_pcm 81518 3 snd_bcm2835,snd_soc_core,snd_pcm_dmaengine
snd_page_alloc 5168 1 snd_pcm
regmap_i2c 1657 1 snd_soc_core
snd_compress 8136 1 snd_soc_core
snd_seq 54581 0
snd_timer 20353 2 snd_pcm,snd_seq
snd_seq_device 6485 1 snd_seq
leds_gpio 2055 0
led_class 4119 1 leds_gpio
snd 61518 7 snd_bcm2835,snd_soc_core,snd_timer,snd_pcm,snd_seq,snd_seq_device,snd_compress
spi_bcm2708 4808 0
It’s down there on the bottom and listed as spi_bcm2708. But how to use it?!?!?!