Autor Tema: Codificador 16 a 8  (Leído 2803 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado carlodie

  • PIC10
  • *
  • Mensajes: 10
Codificador 16 a 8
« 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.

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: Codificador 16 a 8
« Respuesta #1 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

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: Codificador 16 a 8
« Respuesta #2 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

Desconectado Carlete71

  • PIC18
  • ****
  • Mensajes: 433
RE: Codificador 16 a 8
« Respuesta #3 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.

Desconectado RGL

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 634
RE: Codificador 16 a 8
« Respuesta #4 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.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Codificador 16 a 8
« Respuesta #5 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.


 

anything