This leaves me with digital pins 9 and 10 free, as well as RX0 and TX1, and all of the analog pins. I want to use an SD card module which will require 4 pins.
My Question: Can I use the Analog pins as digital pins to drive some of these modules? or do RX0 and TX1 act as digital pins?
I'm happy to start the reading to see the 'how' this would work, but don't want to waste my time digging if it's not possible. I understand that if using analog as digital I may need to reshuffle the pin allocations potentially (for MISO and MOSI compatibility).
Hi Whadall, thanks for the quick reply. I intend to attached this to 11, 12 and 13, for MOSI, MISO and CLK, doesn't this also require an SS pin though, so I will need 2 additional pins? I'm hoping I can just move the data pins from the shift registers to the analog pins (one is currently in 13), then move 11 and 12 to free pin 9 and 10 making room for the SD module
I only have 2 pins free at the moment, which is 9 and 10, and the SD card will require 4 pins to be connected, hence the 2 additional pins.
I didn't realise you could have multiple components connected to the SPI pins. I'm fairly new to the Arduino, so I am using the digital pins as a basic input/output, I haven't learned what the different types of pins there are yet as there hasn't seemed to be a need. I'm happy to read up on this and learn about it rather than asking a million questions, but with the sheer amount of information online (and a lot of it contradicting at that), I want to make sure I'm at least on the right track before researching.
The SPI interface acts a lot like a 74HC165 and 74HC595 in parallel. They share an Enable/Select/Latch line and they share a clock line. When the Enable/Select/Latch line is LOW, every clock on the clock line shifts a bit out of the 74HC165 to the data input line and shifts a bit from the data output line into the 74HC595. When the Enable/Select/Latch line is HIGH the shift register output should get off the bus, so you may need a tri-state driver to enforce that.
Because SPI devices act like shift registers, you can connect most shift registers (MAX7219, 74HC165, and 74HC595) to the SPI bus and you only need one additional pin per device for the Enable/Select/Latch.
You could do something like:
All devices share MOSI, MISO, and SCLK, then each has its own Enable/Latch/Select pin:
Pin 10: 2x MAX7219 daisy chained
Pin 8: 2x 74HC165's daisy chained
Pin 7: 2x 74HC595's daisy chained
Pin 4: SD Card
That uses 7 pins, total. It leaves Pins 9, 6, 5, and 3 for PWM. It leaves Pins 3 and 2 for external interrupts. It leace Pins 0 and 1 for Serial. And it leaves A0-A5 for analogRead or Wire.
You can add more devices to each chain without needing more pins... Just send and/or receive more bytes.