Autor Tema: Recepcion serie  (Leído 1756 veces)

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

Desconectado josemapic

  • PIC10
  • *
  • Mensajes: 2
Recepcion serie
« en: 14 de Julio de 2006, 08:44:42 »
Hola amigos,
Resulta que tengo que hacer una práctica en la que tengo que recibir mediante un PIC una secuencia de bits que comienzan con un codigo de sincronismo y termina con un bit de stop
 ¿que debería usar? ¿Algun puerto especial o se implementa mediante software?

Espero que haya alguna persona amable que me conteste
Saludos

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Recepcion serie
« Respuesta #1 en: 14 de Julio de 2006, 09:27:58 »
Por UART asincrónico recibirás paquetes de 8 bits + 2 bits (1 de inicio+ 1 de stop).
Si el paquete ( sincronismo+datos) no llevan bit de stop y start por cada byte ( 8 bits) lo mejor es que lo implementes por software.

Por software : La línea de recepción en "descanso" ( léase sin recibir ) estará siempre en 0 o 1. Buscarás con un bucle el cambio de flanco para comenzar a leer bit a bit y rotando el byte hasta  contar 8 bits. Luego lo comparas con una constante del sincronismo que deberías recibir (ejemplo 0x55) y si está bien sigues leyendo. Si siguen llegando sincronismo no hacer nada. Sigues leyendo hasta que entre el byte de datos (que no es sincronismo) y lo guardas. Ahora... si vas rotando el byte y contando 8 bits no te sería necesario el bit de stop ya que desde que no encuentra 0x55 (sincronismo) comienza a contar paquetes de 8 bits.

Espero te sirva de algo el ejemplo.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado josemapic

  • PIC10
  • *
  • Mensajes: 2
Re: Recepcion serie
« Respuesta #2 en: 14 de Julio de 2006, 09:37:52 »
Gracias pibe por tu atencion,
para ser mas concreto tengo que recibir una trama compuesta por 9 bits todos a 1,seguidos por 50 bits de datos y terminado con un bit de cierre.
Se podria implementar en cualquiera de las entradas RB0,RB1,..?
Donde debería guardar los bits de datos para posteriormente trabajar con ellos?

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Recepcion serie
« Respuesta #3 en: 14 de Julio de 2006, 09:51:08 »
El mayor problema es la falta de sincronismo externo para saber cuanto dura cada bit. Para ello debrás conocer la velocidad de transmisión, para conocer cuanto dura cada bit. Sino leerás cualquier cosa.
Al no poseer un sincronismo externo (reloj) que te indique cuando puedes leer el bit entrante  (lo recomendable es leer el bit en la mitad de su duración) tendrás que averiguar cuanto dura cada bit para "aproximadamente" cada tanto tiempo leer el bit que te entra.
Puedes leerlo por cualquier pin. Lo configuras como entrada y listo. Te recomiendo cualquiera del puerto B antes que usar puerto A que a veces son analógicas.
Supongamos que al no haber señal recibes 0 volts. Luego llega esa cadena de nueve  1´s . Te quedas en un bucle testeando el pin (btfss PINDATO) si es 0 que siga esperando , cuando sea 1 que comience cada x tiempo (duración del bit) a contar hasta 9 bits. Una vez llegado a los 9 bits comienzas a leer los datos , bit a bit, rotando una variable (RLF VARIABLE) y cuando llegue a 8 (contador) guardarlos en la memoria (dato1, dato2.... dato50) con un contador hasta 50. Y te repito que si cuentas bien (se supone) tendrás los 50 bytes de datos guardados y no te hará falta el bit de stop.

Al menos yo lo encararía así...
Quizás algún forero tenga una mejor idea.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"