Learning   Examples | Foundations | Hacking | Links

Paso de Paralelo a Serial Parallel con un CD4021BE

Iniciado por Carlyn Maw y Tom Igoe Ene, '07

Desplazamiento y el CD4021B

Algunas veces acabarás necesitando más entradas digitales que las 13 que posee tu placa Arduino. El usar un registro de desplazamiento que sea paralelo a serial te permite recibir información de 8 pines usando solo 3.

Un ejemplo de este tipo de registros es el CD4021BAn, algunas veces llamado Registro de Desplazamiento Estatico de 8 Estados. Eso significa que puedes leer el estado de las 8 entradas digitales conectadas al registro a la vez. A esto se le conoce como Entrada Paralela Asíncrona. Entrada porque estás recibiendo información. Paralela porque lees todos a la vez, como al escuchar una nota musical. Asíncrona porque el CD4021B está recibiendo la información a su ritmo sin coordinación por parte del Arduino.

Eso es lo que pasa en el próximo pasa cuando esos 8 estados de cada pin se traducen a una serie de HIGH Y LOW (Niveles altos y bajos) en el pin de salida serial del registro de desplazamiento. Este pin debería se conectado a un pin de entrada de tu placa Arduino, al que llamaremos pin de datos. La transferencia de la propia información se llama Salida Serial Síncrona porque el registro de desplazamiento espera para enviar los datos hasta que el Arduino se lo pide. La comunicación Serial Síncrona, de entrada o salida, depende mucho de lo que se denomina pin de reloj. Eso es lo que la hace síncrona. El pin de reloj es el metrónomo de la conversación entre el registro de desplazamiento y el Arduino. Cada vez que el Arduino pasa el pin de reloj de nivel bajo a nivel alto, le esta diciendo al registro de desplazamiento cambia el estado de tu salida Serial y dame el dato sobre la siguiente entrada.

El tercer pin conectado al Arduino es un pin de Control Paralelo a Serial. Puedes verlo como un 'pin latch (pin de bloqueo). Cuando el pin latch esta en nivel alto el registro de desplazamiento esta escuchando en sus 8 entradas paralelas. Cuando el pin latch esta a nivel bajo está escuchando al pin del reloj y pasando datos al Arduino. Eso significa que cada vez que el pin latch pase de nivel alto a nivel bajo el registro de desplazamiento empezará a pasar su información de entradas más actual.

El pseudo-código para coordinar todo esto es algo así:

  1. Asegurarte que el registro tiene la utima información de las entradas en paralelo (p.e. que el pin latch este a nivel alto)
  2. Dile al registro que estoy listo para recibir información a través del pin de comunicación (pin latch a nivel bajo)
  3. Para cada una de las entradas que espero recibir, envío un pulso al pin de reloj y compruebo en el pin de datos si está a nivel alto o a nivel bajo.

Este es el diagrama básico:

                _______		
interruptor ->  |     |
interruptor ->  |  C  |
interruptor ->  |  D  |
interruptor ->  |  4  | -> Datos serial hacia el Arduino
interruptor ->  |  0  | 
interruptor ->  |  2  | 
interruptor ->  |  1  | <- Reloj de datos desde el Arduino
interruptor ->  |_____| <- Pin Latch desde el Arduino

Si al conectar un registro con 8 entradas digitales no es suficiente para tu proyecto puedes conectar un segundo CD4021 al primer CD4021 el cual ahora pasará la información de los 16 bits al Arduino. Si sabes que necesitarás utilizar muchos registros de desplazamiento como este comprueba que los que compres puedan soportar Entradas Serial Síncronas así como Salidas Serial Síncronas. Las Entradas Serial Síncronas es la capacidad que le permite al registro de desplazamiento recibir y transmitir salida serial de un segundo registro conectado a ese. El segundo ejemplo hace referencia a esa situación. Puedes conectar en cadena dentro de lo razonable todos los registros que quieras para conseguir todas las entradas que necesites.

                _______		
interruptor ->  |     |
interruptor ->  |  C  |
interruptor ->  |  D  |
interruptor ->  |  4  | -> Datos serial hacia el Arduino
interruptor ->  |  0  | 
interruptor ->  |  2  | <- Reloj de datos desde el Arduino
interruptor ->  |  1  | <- Pin Latch desde el Arduino
interruptor ->  |_____| <------
                              |
                              |           
                              |
                _______       |  Datos serial hacia el		
interruptor ->  |     |       |  primer registro.
interruptor ->  |  C  |       |
interruptor ->  |  D  |       |
interruptor ->  |  4  | ______| 
interruptor ->  |  0  | 
interruptor ->  |  2  | <- Reloj de datos desde el Arduinoo
interruptor ->  |  1  | <- Pin Latch desde el Arduino
interruptor ->  |_____| 


Existe más información acerca de los registros de desplazamientos en el tutorial ShiftOut,y antes de empezar a conectar cables en la pacla mira el diagrama del CD4021 Datasheet de Texas Instruments

PINES 1,4-7, 13-15 P1 & P8 (Pins 0-7) Entradas Paralelas
PINES 2, 12, 3 Q6, Q7, Q8 Pines de Salida Serial de distintos pasos de la secuencia. Q7 es un pulso detras de Q8 y Q6 es un pulso detrás de Q7. Q8 es el único utilizado en estos ejemplos.
PIN 8 Vss GND
PIN 9 P/S C Control Paralelo/Serial (pin latch)
PIN 10 RELOJ Pin de reloj del registro de desplazamiento
PIN 11 Entrada SERIE Pin de entrada de datos Serie
PIN 16 VDD Entrada alimentación CC

Ejemplo 1: Un registro de desplazamiento

El primer paso es extender tu Arduino con un registro de desplazamiento.

El Circuito

1. Conexiones de alimentación

Make the following connections:

  • GND (pin 8) a masa,
  • VDD (pin 16) a 5V

2.Conecta al Arduino

  • Q8 (pin 3) al pin Digital 9 del Arduino (cable azul)
  • RELOJ (pin 10) al pin Digital 7 del Arduino (cable amarillo)
  • P/S C (pin 9) al pin Digital 8 del Arduino (cable verde)

Desde ahora en adelante a esos nos referiremos como pin de datos, pin del reloj y pin latch respectivamente.

3. Añade 8 Interruptores

Diagrama

The Code

Code Sample 1.1 � Hello World
Code Sample 1.2 � What is Pressed?
Code Sample 1.3 � Button Combination Check
Code Sample 1.4 � Is it pressed? (sub-function)

Example 2: En Cadena

En este ejemplo se añadirá un segundo registro de desplazamiento, doblando así en número de pines de entradas mientras seguimos usando el mismo número de pines de la placa Arduino.

The Circuito

1. Añadir un segundo registro de desplazamiento.

2. Conectar los dos registros.

Dos de estas conexiones simplemente extienden la señal de reloj y latch de el Arduino al segundo registro de desplazamiento(cables amarillos y verdes). El cable azul se conectará desde la salida serial del primer registro de desplazamiento (pin 9) a la entrada serial del segundo registro de desplazamiento (pin 14).

3. Añade un segundo grupo de interruptores.

Ten en cuenta que hay un pulsador y el resto son interruptores de palanca. Esto es porque los códigos de ejemplos usaran los interruptores conectados al segundo registro de desplazamiento se usarán para configurar, como un archivo de preferencias, en vez de usarlos para detectar un evento. El pulsador dirá al microcontrolador que los interruptores han sido cambiados.

Diagram

The Código

Código de ejemplo 2.1 Hola Mundo
Código de ejemplo 2.2 Usando el segundo byte para configuración, Imprime todo
Código de ejemplo 2.3 Usando el segundo byte para configuración, Imprime solo los encendidos (Usa subfunciones)

Share