shiftOut()

[Speciális I/O]

Leírás

Bitenként tol el egy bájt adatot. A legnagyobb (azaz a balszélső) vagy a legkisebb (jobbszélső) helyiértékű bittől indul. Minden bit felváltva egy adatkivezetésre íródik, ami után egy órajel pulzál (HIGH, majd LOW), jelezve, hogy a bit elérhető.

Megjegyzés: ha olyan eszközzel csatlakozik, amelynek az órajele emelkedő élekkel rendelkezik, akkor a shiftOut() hívás előtt meg kell győződnie arról, hogy az clockPin alacsonyan van, pl. a digitalWrite(clockPin, LOW) hívásával.

Megjegyzés: ez egy szoftveres megvalósítás; Az Arduino egy SPI-könyvtárat is biztosít, amely a hardveres implementációt használja, amely gyorsabb, de csak meghatározott kivezetéseken működik.

Szintaxis

shiftOut(dataPin, clockPin, bitOrder, value)

Paraméterek

dataPin: a kivezetés, amelyre az egyes biteket ki kell vinni. Engedélyezett adattípusok: int.
clockPin: kivezetés az dataPin-ről történő olvasás jelzéséhez. Engedélyezett adattípusok: int.
bitOrder: milyen sorrendben kell eltolni a biteket; vagy MSBFIRST vagy LSBFIRST. (A legnagyobb helyiértékű bit először, vagy a legkisebb helyiértékű bit először).
value: az eltolandó adat. Engedélyezett adattípusok: byte.

Visszatérési érték

Nincs.

Példa

A kísérő áramkört lásd a 74HC595 váltóregiszter vezérléséről szóló oktatóanyagban.

//**************************************************************//
//  Name    : shiftOutCode, Hello World                         //
//  Author  : Carlyn Maw,Tom Igoe                               //
//  Date    : 25 Oct, 2006                                      //
//  Version : 1.0                                               //
//  Notes   : Kód a 74HC595 léptetőregiszter használatához      //
//          : 0-tól 255-ig számolni                            //
//****************************************************************

//a kivezetés a 74HC595 ST_CP lábára csatlakozik 
int latchPin = 8;
//a kivezetés a 74HC595 SH_CP lábára csatlakozik
int clockPin = 12;
//a kivezetés a 74HC595 DS lábára csatlakozik
int dataPin = 11;

void setup() {
  //állítsa be a kivezetést kimenetre, mert a fő ciklusban vannak megcímezve
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  //felfelé számoló rutin
  for (int j = 0; j < 256; j++) {
    //latchPin földelve, és tartsa alacsonyan mindaddig, amíg ad
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);
    //visszaállítja a latchPint magasra, hogy jelezze a chipnek, hogy már nincs szüksége információra
    digitalWrite(latchPin, HIGH);
    delay(1000);
  }
}

Megjegyzések és figyelmeztetések

A dataPin-t és a clockPin-t már kimenetként kell konfigurálni a pinMode() meghívásával.

A shiftOut jelenleg 1 bájt (8 bit) kimenetre van írva, így kétlépcsős művelet szükséges a 255-nél nagyobb értékek kimenetéhez.

// Ezt csináld az MSBFIRST sornál
int data = 500;
// a magasabbik byte eltolása
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
// a alacsonyabbik byte eltolása
shiftOut(dataPin, clock, MSBFIRST, data);

// vagy ezt csináld LSBFIRST sornál
data = 500;
// az alacsonyabbik byte eltolása
shiftOut(dataPin, clock, LSBFIRST, data);
// a magasabbik byte eltolása
shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

Lásd még