Pages: [1]   Go Down
Author Topic: SPI interface  (Read 515 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

As I understand it pin 10 is used as data latch (chip select). Now while using the SPI library in a sketch I want to use three other pins to a 238 to generate 8 data latches for 8 seperate devices having the data-in and data-clk chained together. 

1. do I have the concept of pin 10 use correctly
2. with the setup I would like to do  is it feasible with the software
Logged

Massachusetts, USA
Offline Offline
Tesla Member
***
Karma: 208
Posts: 8822
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

SPI devices act like one or more 8-bit shift registers.  The SS signal going LOW latches the data and enables the shifting.  Each clock pulse (on SCK) moves one bit out of MOSI and one bit into MISO.  After 8 clocks, one byte has gone out and one byte has come in.

You can use 1-bit latches to implement 8-bit shift registers so, yes, you can use the SPI hardware to control your eight 1-bit devices.  The software shiftOut() function could be used instead but will be slower than the 8 Megabit rate of the SPI hardware.
Logged

Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

UK
Offline Offline
Faraday Member
**
Karma: 99
Posts: 4153
Where is your SSCCE?!?!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

The way the Arduino's SPI works, it doesn't like working without D10 being used.

The best thing you can do is to use D10 as a master "enable" pin going to either G2A or G2B of the '238 (the other G2x linked to ground, and the G1 to Vcc).  Then, have your other three pins, say D7/D8/D9 to the A B and C pins.

All the outputs of the '238 will be low until you select the output to use with D7/D8/D9, and then send D10 low, which will send the output you selected high.

Now, that high is the opposite of what SPI devices expect - the chip select is (pretty much always) active low.  So, you will need to invert the outputs either using one-and-a-bit hex inverter chips ('04), or switch to using a '138 chip which has an inverted output (it also has only 1 inverted G input G2).
Logged

Get 10% off all 4D Systems TFT screens this month: use discount code MAJENKO10

Global Moderator
Boston area, metrowest
Offline Offline
Brattain Member
*****
Karma: 533
Posts: 26934
Author of "Arduino for Teens". Available for Design & Build services. Now with Unlimited Eagle board sizes!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

"The way the Arduino's SPI works, it doesn't like working without D10 being used."
Not only that, D10 Must be set as an OUTPUT.
Otherwise, the Arduino will act as an SPI slave.
Logged

Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

Pages: [1]   Go Up
Jump to: