Reference   Language (extended) | Libraries | Comparison | Changes

shiftOut()

Descripción

Desplaza un byte de datos bit a bit. Empieza desde el bit más significante (el de más a la izquierda) o el menos significante (el más a la derecha). Cada bit se escribe siguiendo su turno en un pin de datos, después de conmutar un pin de reloj (señal de reloj) para indicar que el bit está disponible.

Esto es conocido como protocolo serie síncrono y es la forma común que utilizan los microcontroladores para comunicarse con sensores y con otros microcontroladores. Ambos dispositivos permanecen sincronizados, y se comunican a velocidades cercanas a las máximas, hasta que ambos compartan la misma linea de reloj. En la documentación del harware interno de los chips se hace referencia a menudo a esta característica como Serial Peripheral Interface (SPI).

Sintaxis

shiftOut(pinDatos, pinReloj, ordenBits, valor)

Parametros

pinDatos: el pin en el cual extraer cada bit (int)

pinReloj: el pin que hay que conmutar cada vez que a un pinDatos le ha sido enviado el valor correcto (int)

ordenBits: en qué orden desplazar los bits; si hacia el MSBFIRST (bit más significante primero) o hacia el LSBFIRST (bit menos significante primero).
valor: los datos que rotar. (byte)

Retorno

Ninguno

Nota

El pinDatos y pinReloj deben estar ya configurados como salida con una llamada previa a pinMode().

shiftOut se encuentra actualmente configurada para extraer un byte (8 bits) por lo que necesita realizar una operación de dos pasos para extraer valores más grandes de 255.

// Haz esto para una comunicación serie MSBFIRST (primero el bit más significativo)
int datos = 500;
// rota el byte más alto
shiftOut(pinDatos, pinReloj, MSBFIRST, (datos >> 8));  
// rota el byte más bajo
shiftOut(datos, pinReloj, MSBFIRST, datos);

// O haz esto para una comunicación serie LSBFIRST (primero el bit menos significativo)
datos = 500;
// rota el byte más bajo
shiftOut(pinDatos, pinReloj, LSBFIRST, datos);  
// rota el bit más alto 
shiftOut(pinDatos, pinReloj, LSBFIRST, (datos >> 8)); 

Ejemplo

Para ver el circuito asociado a este ejemplo, ver el tutorial para controlar un registro de desplazamiento 74HC595.

//**************************************************************//
//  Name    : shiftOutCode, Hello World                         //
//  Author  : Carlyn Maw,Tom Igoe                               //
//  Date    : 25 Oct, 2006                                      //
//  Version : 1.0                                               //
//  Notes   : Código para utilizar un registro de desplazamiento//
//          :  74HC595 para contar de 0 a 255                   //
//****************************************************************

//Pin conectado al pin ST_CP del 74HC595
int latchPin = 8;
//Pin connectado al pin SH_CP del 74HC595
int clockPin = 12;
////Pin conectado al pin DS del 74HC595
int dataPin = 11;

void setup() {
  // Configura como salida los pines que se direccionan en el bucle principal (loop)
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  //rutina de conteo
  for (int j = 0; j < 256; j++) {
    //pone a nivel bajo el latchPin y lo mantienen a nivel bajo todo el tiempo que estés transmitindo
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);   
    //vuelve a poner el latchPin a nivel alto para señalizar que
    //no sigue siendo necesario eschuchar más información
    digitalWrite(latchPin, HIGH);
    delay(1000);
  }
} 

Página principal Referencia

Correcciones, sugerencias, y nueva documentación deberán ser publicadas en el Foro (castellano) o en el Foro (inglés).

El texto de la referencia de Arduino está publicado bajo la licencia Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0. Los ejemplos de código de la referencia están liberados al dominio público.

Share