Diferencia entre revisiones de «shiftOut()»

De ArduWiki
Saltar a: navegación, buscar
(Retorna)
(Referencias)
 
(No se muestran 22 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
Desplaza en un byte de datos un bit a cada vez. Comienza a partir del bit más significativo (más a la izquierda) o menos significativo (más a la derecha). Cada bit se escribe a su vez en un pin de datos, después de lo cual un pulso de reloj se activa (pasa a nivel alto, y a continuación, a nivel bajo) para indicar que el bit está disponible.
+
Envia en un byte de datos un bit a cada vez por el pin indicado. Comienza a partir del bit más significativo (más a la izquierda)(MSB) o menos significativo (más a la derecha)(LSB) dependiendo del parámetro bitOrden. Cada bit se escribe a su vez en un pin de datos, después de lo cual un pulso de reloj se activa (pasa a nivel alto, y a continuación, a nivel bajo) para indicar que el bit está disponible.
 +
 
 +
{{Nota|Si está interactuando con un dispositivo que está administrado por bordes ascendentes (RISING), deberá asegurarse de que el pin del reloj esté bajo antes de la llamada '''shiftOut()''', por ejemplo, con una llamada a [[digitalWrite()|digitalWrite(clockPin, LOW)]].}}
  
 
== Sintexis ==
 
== Sintexis ==
Línea 8: Línea 10:
  
 
== Parámetros ==
 
== Parámetros ==
;dataPin:
+
;dataPin: el pin en el que se muestra cada bit [[int]]
;clockPin:
+
;clockPin: el pin para alternar una vez que el dataPin se ha establecido en el valor correcto [[int]]
;bitOrder:
+
;bitOrder: qué orden desplazar los bits; ya sea MSBFIRST o LSBFIRST. (Bit más significativo primero, o, bit menos significativo primero)
 +
;value: los datos para desplazarse. [[byte]]
  
 
== Retorna ==
 
== Retorna ==
La función '''shiftOut()''' escribe en la salida 1 byte (8 bits) por lo que requiere una operación de dos pasos para valores de salida mayores que 255.
+
La función '''shiftOut()''' escribe en la salida 1 byte (8 bits) por lo que requiere una operación de dos pasos para valores de salida mayores que 255 osea variables de 2 bytes tipo [[int]].
  
 
== Advertencias ==
 
== Advertencias ==
* Los dataPin y clockPin deben estar ya configurados como salida con [[pinMode()]].  
+
* Los dataPin y clockPin deben estar ya configurados como salida con [[pinMode()]].
* La función '''shiftOut()''' escribe en la salida 1 byte (8 bits) por lo que requiere una operación de dos pasos para valores de salida mayores que 255.
+
 
 +
== Ejemplo 1 ==
 +
En este ejemplo conectamos un 74x595 con 7 LED. Vcc(16)=MR(10)=+5V, GND(8)=OE(13)=GND.
 +
 
 +
<syntaxhighlight lang="c++">
 +
const byte dataPin = 8;    //Pin 14 de 74x595
 +
const byte clockPin = 9;    //Pin 11 de 74x595
 +
const byte latchPin = 10;  //Pin 12 de 74x595
 +
void setup() {
 +
  pinMode(latchPin, OUTPUT);
 +
  pinMode(clockPin, OUTPUT);
 +
  pinMode(dataPin, OUTPUT);
 +
}
 +
void loop() {
 +
  for (byte i=0; i<256; i++) {
 +
      digitalWrite(latchPin, LOW);
 +
      shiftOut(dataPin, clockPin, LSBFIRST, i); 
 +
      digitalWrite(latchPin, HIGH);  //Muestra
 +
      delay(500);
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 
 +
== Ejemplo 2 ==
 +
En este ejemplo conectamos un 74x595 con un display 7 segmentos de cátodo comun.  Vcc(16)=MR(10)=+5V, GND(8)=OE(13)=GND.
  
== Ejemplo ==
 
 
<syntaxhighlight lang="c++">
 
<syntaxhighlight lang="c++">
int latchPin = 8;
+
const byte dataPin = 8;     //Pin 14 de 74x595
int clockPin = 12;
+
const byte clockPin = 9;    //Pin 11 de 74x595
int dataPin = 11;
+
const byte latchPin = 10;  //Pin 12 de 74x595
 +
const byte dig[10]={
 +
  252,  //0
 +
  96,  //1
 +
  218,  //2
 +
  242,  //3
 +
  102,  //4
 +
  182,  //5
 +
  190,  //6
 +
  224,  //7
 +
  254,  //8
 +
  230  //9
 +
};
 
void setup() {
 
void setup() {
  pinMode(latchPin, OUTPUT);
+
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
+
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
+
  pinMode(dataPin, OUTPUT);
 
}
 
}
 
void loop() {
 
void loop() {
  for (int j=0; j<256; j++) {
+
  for (byte i=0; i<10; i++) {
    digitalWrite(latchPin, LOW);
+
      digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, j);   
+
      shiftOut(dataPin, clockPin, LSBFIRST, dig[i]);   
    //devuelve el latch pin a nivel alto indicando que ya no necesita escuchar la información
+
      digitalWrite(latchPin, HIGH); //Muestra
    digitalWrite(latchPin, HIGH);
+
      delay(500);
    delay(1000);
 
 
   }
 
   }
 
}  
 
}  
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== Vea tambien ==
+
== Vea también ==
* [[tone()]]
+
<categorytree mode=all>Funciones bit y byte</categorytree>
* [[noTone()]]
+
<categorytree mode=all>Operador bit a bit</categorytree>
* [[pulseIn()]]
 
* [[pulseLnLong()]]
 
* [[shiftIn()]]
 
* [[sizeof()]]
 
  
 
== Referencias ==
 
== Referencias ==
 
+
* [https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/ Guia de referencia]
[[Category:Funciones]]
+
* [https://www.prometec.net/funciones1/ Funciones de Arduino] - Prometec
 +
* [https://www.youtube.com/watch?v=mV-JAVocaLs Registro de desplazamiento 74595] - Editronikx
 +
* [https://arduino.perut.org/e_35.htm Shift register]  Apuntes de Arduino
 +
[[Category:Funciones bit y byte]]

Revisión actual del 03:16 15 mar 2020

Descripción

Envia en un byte de datos un bit a cada vez por el pin indicado. Comienza a partir del bit más significativo (más a la izquierda)(MSB) o menos significativo (más a la derecha)(LSB) dependiendo del parámetro bitOrden. Cada bit se escribe a su vez en un pin de datos, después de lo cual un pulso de reloj se activa (pasa a nivel alto, y a continuación, a nivel bajo) para indicar que el bit está disponible.

Nota: Si está interactuando con un dispositivo que está administrado por bordes ascendentes (RISING), deberá asegurarse de que el pin del reloj esté bajo antes de la llamada shiftOut(), por ejemplo, con una llamada a digitalWrite(clockPin, LOW).


Sintexis

shiftOut(dataPin, clockPin, bitOrder, valor);

Parámetros

dataPin
el pin en el que se muestra cada bit int
clockPin
el pin para alternar una vez que el dataPin se ha establecido en el valor correcto int
bitOrder
qué orden desplazar los bits; ya sea MSBFIRST o LSBFIRST. (Bit más significativo primero, o, bit menos significativo primero)
value
los datos para desplazarse. byte

Retorna

La función shiftOut() escribe en la salida 1 byte (8 bits) por lo que requiere una operación de dos pasos para valores de salida mayores que 255 osea variables de 2 bytes tipo int.

Advertencias

  • Los dataPin y clockPin deben estar ya configurados como salida con pinMode().

Ejemplo 1

En este ejemplo conectamos un 74x595 con 7 LED. Vcc(16)=MR(10)=+5V, GND(8)=OE(13)=GND.

const byte dataPin = 8;     //Pin 14 de 74x595
const byte clockPin = 9;    //Pin 11 de 74x595
const byte latchPin = 10;   //Pin 12 de 74x595
void setup() {
   pinMode(latchPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
}
void loop() {
   for (byte i=0; i<256; i++) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, LSBFIRST, i);   
      digitalWrite(latchPin, HIGH);  //Muestra
      delay(500);
  }
}

Ejemplo 2

En este ejemplo conectamos un 74x595 con un display 7 segmentos de cátodo comun. Vcc(16)=MR(10)=+5V, GND(8)=OE(13)=GND.

const byte dataPin = 8;     //Pin 14 de 74x595
const byte clockPin = 9;    //Pin 11 de 74x595
const byte latchPin = 10;   //Pin 12 de 74x595
const byte dig[10]={
   252,  //0
   96,   //1
   218,  //2
   242,  //3
   102,  //4
   182,  //5
   190,  //6
   224,  //7
   254,  //8
   230   //9
};
void setup() {
   pinMode(latchPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
}
void loop() {
   for (byte i=0; i<10; i++) {
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, LSBFIRST, dig[i]);   
      digitalWrite(latchPin, HIGH);  //Muestra
      delay(500);
  }
}

Vea también


Referencias