~ubuntu-branches/ubuntu/precise/arduino/precise

« back to all changes in this revision

Viewing changes to reference/ShiftOut.html

  • Committer: Bazaar Package Importer
  • Author(s): Scott Howard
  • Date: 2010-04-13 22:32:24 UTC
  • Revision ID: james.westby@ubuntu.com-20100413223224-jduxnd0xxnkkda02
Tags: upstream-0018+dfsg
ImportĀ upstreamĀ versionĀ 0018+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
2
<html>
 
3
<head>
 
4
  <title>Arduino - ShiftOut </title>
 
5
  <link rel='stylesheet' href='arduino.css' type='text/css' />
 
6
  <meta name="verify-v1" content="TtxFIEJAB6zdJ509wLxjnapQzKAMNm9u0Wj4ho6wxIY=" />
 
7
</head>
 
8
<body>
 
9
<div id="page">
 
10
<!--PageHeaderFmt-->
 
11
<div id="pageheader">
 
12
  <div class="title"><a href="http://www.arduino.cc"/>Arduino</a></div>
 
13
  <div class="search">
 
14
    <!-- SiteSearch Google -->
0
15
   <FORM method=GET action="http://www.google.com/search">
1
16
   <input type=hidden name=ie value=UTF-8>
2
17
   <input type=hidden name=oe value=UTF-8>
3
18
   <INPUT TYPE=text name=q size=25 maxlength=255 value="">
4
19
   <INPUT type=submit name=btnG VALUE="search">
5
20
   <input type=hidden name=domains value="http://www.arduino.cc/">
 
21
    <input type=hidden name=sitesearch value="http://www.arduino.cc/">
 
22
    </FORM>
6
23
   <!-- SiteSearch Google -->
 
24
  </div>
 
25
</div>
 
26
<!--/PageHeaderFmt-->
 
27
<!--PageLeftFmt-->
 
28
<div id="pagenav" style="text-align: right">
 
29
  <div style="float: left;">
 
30
  <p><a class='wikilink' href='http://arduino.cc/en/Main/Buy'>Buy</a>
 
31
|
 
32
<a class='wikilink' href='http://arduino.cc/en/Main/Software'>Download</a>
 
33
|
 
34
<a class='wikilink' href='Guide_index.html'>Getting Started</a>
 
35
|
 
36
<a class='wikilink' href='http://arduino.cc/en/Tutorial/HomePage'>Learning</a>
 
37
|
 
38
<a class='wikilink' href='index.html'>Reference</a>
 
39
|
 
40
<a class='wikilink' href='http://arduino.cc/en/Main/Hardware'>Hardware</a>
 
41
|
 
42
<a class='wikilink' href='FAQ.html'>FAQ</a>
 
43
</p>
 
44
<p class='vspace'></p>
 
45
 
 
46
  </div>
 
47
  <a class="urllink" href="http://www.arduino.cc/blog/" rel="nofollow">Blog &raquo;</a> |
 
48
  <a class="urllink" href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl" rel="nofollow">Forum &raquo;</a> |
 
49
  <a class="urllink" href="http://www.arduino.cc/playground/" rel="nofollow">Playground &raquo;</a>
 
50
</div>
 
51
<!--/PageLeftFmt-->
 
52
<div id="pagetext">
 
53
<!--PageText-->
 
54
<div id='wikitext'>
 
55
<p><strong>Reference</strong> &nbsp;  <a class='wikilink' href='index.html'>Language</a> (<a class='wikilink' href='Extended.html'>extended</a>) | <a class='wikilink' href='Libraries.html'>Libraries</a> | <a class='wikilink' href='Comparison.html'>Comparison</a> | <a class='wikilink' href='Changes.html'>Changes</a>
 
56
</p>
 
57
<p class='vspace'></p><h2>shiftOut()</h2>
 
58
<h4>Description</h4>
 
59
<p>Shifts out a byte of data one bit at a time.  Starts from either the most (i.e. the leftmost) or least (rightmost) significant bit.  Each bit is written in turn to a data pin, after which a clock pin is toggled to indicate that the bit is available.
 
60
</p>
 
61
<p class='vspace'></p><p>This is known as synchronous serial protocol and is a common way that  microcontrollers communicate with sensors, and with other microcontrollers. The two devices stay synchronized, and communicate at close to maximum speeds, since they both share the same clock line. This is often referred to in chip hardware documentation as <a class='urllink' href='http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus' rel='nofollow'>Serial Peripheral Interface (SPI)</a>. 
 
62
</p>
 
63
<p class='vspace'></p><h4>Syntax</h4>
 
64
<p>shiftOut(dataPin, clockPin, bitOrder, value)
 
65
</p>
 
66
<p class='vspace'></p><h4>Parameters</h4>
 
67
<p>dataPin: the pin on which to output each bit (<em>int</em>)
 
68
</p>
 
69
<p class='vspace'></p><p>clockPin: the pin to toggle once the <strong>dataPin</strong> has been set to the correct value (<em>int</em>)
 
70
</p>
 
71
<p class='vspace'></p><p>bitOrder: which order to shift out the bits; either <strong>MSBFIRST</strong> or <strong>LSBFIRST</strong>.<br />(Most Significant Bit First, or, Least Significant Bit First) 
 
72
</p>
 
73
<p class='vspace'></p><p>value: the data to shift out. (<em>byte</em>)
 
74
</p>
 
75
<p class='vspace'></p><h4>Returns</h4>
 
76
<p>None
 
77
</p>
 
78
<p class='vspace'></p><h4>Note</h4>
 
79
<p>The <strong>dataPin</strong> and <strong>clockPin</strong> must already be configured as outputs by a call to <a class='wikilink' href='PinMode.html'>pinMode</a>().
 
80
</p>
 
81
<p class='vspace'></p><p><strong>shiftOut</strong> is currently written to output 1 byte (8 bits) so it requires a two step operation to output values larger than 255.
 
82
</p><pre>
 
83
// Do this for MSBFIRST serial
 
84
int data = 500;
 
85
// shift out highbyte
 
86
shiftOut(dataPin, clock, MSBFIRST, (data &gt;&gt; 8));  
 
87
// shift out lowbyte
 
88
shiftOut(data, clock, MSBFIRST, data);
 
89
 
 
90
// Or do this for LSBFIRST serial
 
91
data = 500;
 
92
// shift out lowbyte
 
93
shiftOut(dataPin, clock, LSBFIRST, data);  
 
94
// shift out highbyte 
 
95
shiftOut(dataPin, clock, LSBFIRST, (data &gt;&gt; 8)); 
 
96
</pre>
 
97
<p class='vspace'></p><h4>Example</h4>
 
98
<p><em>For accompanying circuit, see the <a class='wikilink' href='http://arduino.cc/en/Tutorial/ShiftOut'>tutorial on controlling a 74HC595 shift register</a>.</em>
 
99
</p>
 
100
<p class='vspace'></p><pre>//**************************************************************//
 
101
//  Name    : shiftOutCode, Hello World                         //
 
102
//  Author  : Carlyn Maw,Tom Igoe                               //
 
103
//  Date    : 25 Oct, 2006                                      //
 
104
//  Version : 1.0                                               //
 
105
//  Notes   : Code for using a 74HC595 Shift Register           //
 
106
//          : to count from 0 to 255                            //
 
107
//****************************************************************
 
108
 
 
109
//Pin connected to ST_CP of 74HC595
 
110
int latchPin = 8;
 
111
//Pin connected to SH_CP of 74HC595
 
112
int clockPin = 12;
 
113
////Pin connected to DS of 74HC595
 
114
int dataPin = 11;
 
115
 
 
116
void setup() {
 
117
  //set pins to output because they are addressed in the main loop
 
118
  pinMode(latchPin, OUTPUT);
 
119
  pinMode(clockPin, OUTPUT);
 
120
  pinMode(dataPin, OUTPUT);
 
121
}
 
122
 
 
123
void loop() {
 
124
  //count up routine
 
125
  for (int j = 0; j &lt; 256; j++) {
 
126
    //ground latchPin and hold low for as long as you are transmitting
 
127
    digitalWrite(latchPin, LOW);
 
128
    shiftOut(dataPin, clockPin, LSBFIRST, j);   
 
129
    //return the latch pin high to signal chip that it 
 
130
    //no longer needs to listen for information
 
131
    digitalWrite(latchPin, HIGH);
 
132
    delay(1000);
 
133
  }
 
134
 
135
</pre>
 
136
<p class='vspace'></p><p><a class='wikilink' href='index.html'>Reference Home</a>
 
137
</p>
 
138
<p class='vspace'></p><p><em>Corrections, suggestions, and new documentation should be posted to the <a class='urllink' href='http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?board=swbugs' rel='nofollow'>Forum</a>.</em>
 
139
</p>
 
140
<p class='vspace'></p><p>The text of the Arduino reference is licensed under a
 
141
<a class='urllink' href='http://creativecommons.org/licenses/by-sa/3.0/' rel='nofollow'>Creative Commons Attribution-ShareAlike 3.0 License</a>.  Code samples in the reference are released into the public domain.
 
142
</p>
 
143
</div>
 
144
 
 
145
</div>
 
146
<!--PageFooterFmt-->
 
147
<div id="pagefooter">
 
148
  <a href='#'>Edit Page</a> | <a href='#'>Page History</a> | <a href='#' target='_blank'>Printable View</a> | <a href='http://arduino.cc/en/Site/AllRecentChanges'>All Recent Site Changes</a>
 
149
</div>
 
150
<!--/PageFooterFmt-->
 
151
</div>
 
152
</body>
 
153
</html>