Professional Documents
Culture Documents
Este circuito ya lo he utilizado antes con otros micros, su fiabilidad est fuera de toda duda. Se trata de un conjunto de registros paralelo/serie para leer datos y otro de serie/paralelo para escribir datos. Estos registros de desplazamiento son CMOS serie B convencionales, muy baratos. Para conectarlo al PIC bastan 5 pines libres, aunque hay otras configuraciones que usan ms. En este ejemplo he usado 4 circuitos integrados CD4014 para las entradas y 4circuitos integrados CD4094 para las salidas, que proporcionan un total de 64 bits de entrada y otros 64 de salida. Sera como tener unPIC de ms de 128 patas..
Tras este primer pulso el estado de DATO_CD4014 es el estado de P8 del primer CD4014. Ahora vamos aplicando pulsos altos aCLK_CD4014 con LOAD_CD4014 a nivel bajo. De esta forma, a cada pulso, los CD4014 desplazan sus datos de Pn a Pn+1. Al primer pulso sale por DATO_CD4014 el dato ledo de P7, despus P6 etc. Por la entrada SI de cada CD4014 introducimos el dato saliente Q8del CD4014 siguiente en la cadena. Los datos atraviesan en serie los registros que tienen a su derecha hasta llegar al programa los va agrupando de nuevo en bytes, en mi programa uso el array DatosCD4014[NumeroCD4014].
PIC, donde el
[editar]El
software
Este es un ejemplo de como implementar el software, utilizando CCS: // Primero carga TODOS los datos en paralelo en los registros output_high(LOAD_CD4014); // LOAD activo output_high(CLK_CD4014); // CLK activo, carga los datos en paralelo output_low(CLK_CD4014); // CLK inactivo output_low(LOAD_CD4014); // LOAD inactivo // Ahora vamos leyendo en serie en grupos de 8 bits N veces for (bytes = 0; bytes < NumeroCD4014; bytes++) { data = 0; for (bits = 0; bits < 8; bits++) { data <<=1; if (input (DATA_CD4014)) data|=0x01; output_high(CLK_CD4014); // CLK activo, desplaza output_low(CLK_CD4014); // CLK inactivo } DatosCD4014[bytes] = data; // Copiamos el dato compuesto al array }
registros internos a los registros de salida y aparecen, todos a la vez, en las patas Q8 a Q1 de los CD4094 para ser usados.
[editar]El
software
Esto puede hacerse as: for (bytes = NumeroCD4094; bytes > 0; ) { data = DatosCD4094[--bytes]; // Pre-decremento, la cuenta comienza en NumeroCD4094-1 for (bits = 0; bits < 8; bits++) { if (data & 0x80) output_high(DATA_CD4094); else output_low(DATA_CD4094); output_high(CLK_CD4094); // CLK activo, desplaza output_low(CLK_CD4094); // CLK inactivo data <<=1; } } // Ahora transfiero los datos enviados a las salidas output_high(LOAD_CD4094); // LOAD activo output_low(LOAD_CD4094); // LOAD inactivo
editar]Ampliaciones
Otra ventaja de este sistema es que es fcilmente ampliable, basta con aadir ms registros a la cadena. Por ejemplo pueden unirse varios como el del diseo de arriba conectando SL10 de uno con SL9 de otro, amplindolo as en grupos de 64+64 entradas/salidas.