TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: carlodie en 24 de Julio de 2004, 12:24:00
-
Hola Amigos: Necesito transmitir el estado de 16 sensores mediante puerto serie, pero por puerto serie solo puedo transmitir 8 bits.
Me pueden ayudar?
Gracias.
Diego.
-
Usa el puerto paralelo para enviar paralelamente por cada linea el dato de cada sensor, yo creo que serviria, enlaza cada linea con un puerto del micro. Si andas falto de lineas, o bien usa un chip de expansion de puertos (tipo 8255) o sino un PIC que almacene los datos y los mande serialmente al host.
saludos
-
Con la puerta serie se puede hacer casi cualquier cosa.
Te indico en una pocas líneas cómo puedes codificar.
Habría que ver qué tipo de sensores, ¿analógicos o digitales? Voy a suponer la opción más sencilla y es que cada sensor solo indique un bit de información cero o uno.
Primero codificamos los sensores con un byte de información podríamos hacerlo con 4 bits, pero como la unidad mínima de transmisión de la información es un byte y como somos derrochadores de bits vamos a codificar con un byte.^Por otra parte queremos chequear lo que enviamos desde hiperterminal con lo que elegimos caracteres imprimibles para verlo sin problemas: Yo propongo la siguiente codificación
SENSOR---> ASCII --> Valor dec-->Valor Hex
sensor 1--> "1" 49 31
sensor 2--> "2" 50 32
sensor 3--> "3" 51 33
sensor 4--> "4" 52 34
........... ....... .......... ..........
sensor10--> ":" 49 3A
sensor11--> ";" 50 3B
........... ....... .......... ..........
sensor16--> "@" 64 40
Por otra parte codificamos la información en otro byte y como somos muy derrochadores codificamos un cero del sensor como un "0" Ascii que es un 48 en decimal y un uno del sensor como un "1" en Ascii que es un 40 en decimal.
Una vez codificados los sensores enviamos por la puerta serie 2 bytes por cada sensor: uno es el numero del sensor y otro su estado:
cuando queramos mandar el sensor 16 por la puerta serie mandaremos
@"1" si está a uno y @"0" si está a cero
Cuando recuperes la info sabes el número de sensor y su estado.
---------------------------
Ahora bien se puede refinar mucho más y es enviar el sensor y su estado en el mismo byte con lo que nos ahorramos la mitad de la información enviada (todo un logro). Como nos sobran 4 bits de cada octeto uno de ellos lo podemos usar para codificar el estado y solo deberíamos enviar 16 bytes para enviar toda la información.
-------------------------
Ahora más difícil todavía, se puede enviar todo la info en tan solo 2 bytes. Nosotros sabemos en qué orden hay que codificar y decodificar los bits de cada octeto, por ejemplo el primer octeto los primeros 8 sensores y el segundo octeto los restantes. Entonces solo enviamos en cada posición el estado de cada sensor y al recibir cada octeto lo decodificamos fácilmente.
--------------------
Probablemente alguien más sesudo que yo pueda seguir comprimiendo la información hasta dejarlo en nada.
Saludos
Ricky
Madrid-España
-
También puedes multiplexar las señales con Mux de 2x1, necesitarías solo 8. Claro también deberías sincronizarlos.
-
para una más clara lectura cada cifra debería ir bajo su columna, debe leerse así:
ASCII--> "1"
Decimal> 49
Hex-----> 31
y así sucesivamente.
-
Si la transmisión se va a realizar por un medio fiable que no provoque errores, yo me inclino por leer siempre los sensores en el mismo orden y enviar la información por el puerto serie siempre en el mismo orden. De esta forma, no habría que codificar el número del sensor en la comunicación, sólo los resultados de cada uno.
Sin embargo, si el canal puede provocar errores, lo mejor será enviar el código del sensor antes de la medida para que si alguno no llega a su destino, no arrastre el error a los siguientes.