Вы находитесь на странице: 1из 3

El circuito

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..

Este es el esquema del circuito. (hacer click sobre l para ampliarlo).

Principio de funcionamiento: Entradas


El funcionamiento es el siguiente: para leer los datos primero se pone a nivel alto la seal LOAD_CD4014 y a continuacin se aplica un pulso alto a CLK_CD4014, despues se pone a nivel bajo LOAD_CD4014. Con esta operacin hemos hecho que los registros CD4014memoricen en sus latch internos los datos que haba presentes en sus entradas paralelas P1 a P8.

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 }

Principio de funcionamiento: Salidas


Las salidas funcionan de forma parecida: Se pone en DATO_CD4094 el dato que queremos enviar al ultimo bit de los CD4094. Se aplica un pulso alto en CLK_CD4094 y este dato pasa al registro interno Q1, el dato que haba en Q1 a Q2 etc. El dato que haba en QS se enva al siguiente CD4094. De esta forma tras 64 pulsos (en este caso de 4 registros) el primer dato introducido ha llegado hasta Q8 del ltimo CD4094. Sin embargo los datos no estn presentes en las salidas, que permanecen fijas con los ltimos datos cargados, se encuentran en unos registros internos. Al aplicar un pulso alto en LOAD_CD4094 estos datos pasan de los

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.

Вам также может понравиться