TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: carlodie en 24 de Julio de 2004, 12:24:00

Título: Codificador 16 a 8
Publicado 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.
Título: RE: Codificador 16 a 8
Publicado por: manex_1987 en 25 de Julio de 2004, 18:50:00
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
Título: RE: Codificador 16 a 8
Publicado por: RGL en 25 de Julio de 2004, 20:28:00
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
Título: RE: Codificador 16 a 8
Publicado por: Carlete71 en 25 de Julio de 2004, 20:29:00

También puedes multiplexar las señales con Mux de 2x1, necesitarías solo 8. Claro también deberías sincronizarlos.
Título: RE: Codificador 16 a 8
Publicado por: RGL en 25 de Julio de 2004, 20:31:00
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.
Título: RE: Codificador 16 a 8
Publicado por: Nocturno en 26 de Julio de 2004, 04:12:00
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.