fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

[Problema] Transmisión de datos

15 Respuestas
8 Usuarios
0 Reactions
6,596 Visitas
seinkraft
Respuestas: 6
Topic starter
(@seinkraft)
Active Member
Registrado: hace 17 años

Bueno saludos antes que nada 😛

Hace ya varias semanas (unas cuantas en realidad) se me ah cruzado un gran problema. "Como transmitir datos de forma serial a x dispositivo?"

Estoy acostumbrado a trabajar con circuitos puramente digitales y esto me ah traído varios problemas porque "Como sabe cuando empezar a leer los datos?"

Pensé en hacer un encabezado previo como por ejemplo en una señal serial de 8 bits en el cual si comienza con
10110000

En el cual el circuito detecte que 1011 es la instrucción para empezar a leer los bits que ingresan que sucedería si esa secuencia se repite en la sección de datos 0000?

La sección de encabezado serviría para sincronizar el clock del receptor con el del emisor por así decirlo.

Y la utilización de un solo "cable" de datos es para poder hacer la trasferencia mediante una vía radial mediante un solo transmisor, o vía IR o cualquier otra vía que no utilice sistema alambrico.

Gracias ante todo.

Wiii! mi primer post xD

Responder
14 respuestas
heli
Respuestas: 748
 Heli
(@heli)
Ardero
Registrado: hace 19 años

Seinkraft, el problema que tienes es muy común en la transmisión série asíncrona.
La idea del código (o bloque) de fin es buena, pero tienes que tener en cuenta que si falla la comunicación en medio de una transmisión y el receptor no recibe el fin se quedará esperándolo por siempre y no aceptará otro "inicio". Tendrías que implementar timeouts para prevenir esto.
Yo he usado muchos protocolos "caseros" para comunicación série. Si usas un protocolo binario (como el que tu pretendes) los datos de control del protocolo pueden confundirse con los datos de usuario (que es lo que realmente quieres transmitir).
Yo te recomiendo que uses un protocolo ASCII, es decir, que codifiques tus datos binarios (8 bits) con dos caracteres ASCII (2 bytes). De esta forma aumenta al doble la cantidad de información que transmites pero es fiable al 100%. Para transmitir 11000011 enviarías C3. los caracteres en el campo de DATOS solo serían 0-9 y A-F y tienes el resto de caracteres ASCII para control ya que NUNCA aparecerán en el campo de DATOS. Lo más común es usar los códigos ASCII < 32 para control. Yo suelo usar SYN (0x16) para sincronismo, STX (0x02) para inicio de transmisión, EOT (0x04) para final etc. Además es importante usar algún tipo de comprobación (checksum o CRC) para asegurarse de que los datos son correctos.
Una trama típica sería SYN STX (unidad de destino) (numero de DATOS a transmitir) (DATOS) (checksum) EOT
El protocolo Modbus ASCII funciona de forma parecida.

Responder
seinkraft
Respuestas: 6
Topic starter
(@seinkraft)
Active Member
Registrado: hace 17 años

Hay...con eso me voy a tener que poner u.u. La verdad es que soy "adicto" a los circuitos digitales por así decirlo y creo que es mi mejor manera de comprensión y mas divertido jajaja.

Siempre trabaje con circuitos binarios y cuando me hablas de transmisión de en hexadecimal me matas ._.

En cuanto al tiempo de espera antes de dar de baja la operación de lectura ante una falla lo había pensado ya que si sigue leyendo por medio del ck del receptor y no tiene señal tomaría la entrada como si fuera un "0" por lo que pensé hacer que el ck dependiera de la entrada de datos.

Es decir, poner un flip flop asincrónico que de la salida q fuera directamente a la entrada de datos mientras que q negado salga a la entrada de ck pasando por unas compuertas inversoras con histéresis para evitar que el ck llegue antes que el dato al micro o al circuito que fuera.

Y en el caso de que el pulso de ck sea 0 hacer lo mismo que antes pero agregando un inversor mas. Y antes de ser conectados las dos salidas que actuarían como ck mandarlas a una or y de la salida al micro o el circuito que fuere.

Habría que ver como poner un sistema de pull down así no esta siempre la entrada de ck en estado 1 en el micro o circuito.

Disculpen si no se entiende mucho, lo estoy armando en mi cabeza a medida que escribo 😛

Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 19 años

seinkraft, te estas haciendo la picha un lío. Coge el modelo de capas y empieza a definir la física, una vez la hayas hecho y resuelto los problemas sigue con la siguiente.

La electrónica para implementarlo dejala para el final.

Este comentario te añade más info.

S2

Ranganok Schahzaman.

Responder
_jm_
Respuestas: 961
 JM
(@_jm_)
Prominent Member
Registrado: hace 19 años

Has pensado en usar los protocolos de los mandos IR comerciales?. Yo ahora mismo estoy en controlar un bot con un mando de estos, el 1 o 0 va por tiempo, te pongo un ejemplo de un botón de un mando jvc que estoy capturando, a ver si se puede ver bien aquí.

1618482589 7a511ea8da b

Como puede ver la señal comienza cuando baja la línea, con un pulso de 8.4 ms seguido de uno de 4.2 ms, esto sólo se realiza una vez para indicar que se ha pulsado el botón, y diferenciar de cuando se mantiene pulsado, la señal se repite cada 50 ms, esta vez sin el pulso de inicio de 8 y 4 ms.

Para diferencia entre 1 y 0 se mide el tiempo que pasa entre dos flancos de bajada, 1 ms corresponde a un 0 y 2.1 ms a un 1, en este ejemplo se mandan 16 bits (8 de dirección y 8 de dato). Recibirlo con el pic es sencillo, sólo tienes que ir contando el tiempo mediante la interrupción de algún timer por ejemplo (contando tics) para saber si ha pasado un 1 o un cero, si se excede un tiempo máximo puedes salir dando lugar a una condición de error, tb puedes capturar dos señales antes de salir y comparar para evitar errores, o buscar el primer flanco de bajada y medirlo para saber que estas ante el inicio de una transmisión, bueno 1000 cosas, como se te ocurra hacerlo.

La mayoría de fabricantes de mandos a distancia usan algo parecido a esto, así que no debe ser una mala idea. S2

Responder
seinkraft
Respuestas: 6
Topic starter
(@seinkraft)
Active Member
Registrado: hace 17 años

Oh, gracias por todas las respuestas, mañana tratare de ponerme en ello.

Saludos.

Responder
Página 3 / 3
Compartir: