Autor Tema: me urge ejemplos en asm de comunicacion usart diferenciar entre dato y direccion  (Leído 3193 veces)

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

Desconectado IMASD

  • PIC10
  • *
  • Mensajes: 7
    • http://www.daselectrics.es
hola que tal ;
necesito ejemplos de algun programa en asm que el pc mande a la usart del pic
bit start,direccion,dato,stop
el bit de start y stop ya los pone el hardware segun tengo entendido ,pero me falta saber como puedo estructurar el programa
para que el primer byte que le llegue sepa el pic  que es una direccion y el segundo byte un dato para almacenar en esa direccion

ando loco buscando algun ejemplo asi que este completo pero lo mas que encontrado es lo basico una usart que recibe datos

si alguien puede hecharme una mano
necesitaria ejemplos bastante completos de almacenar muchos datos en las direcciones que le manden
uso el pic 16f876 aunque tambien me valen ejemplos del 16f877 
muchisimas gracias y espero me hechen una mano

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: me urge ejemplos en asm de comunicacion usart diferenciar entre dato y direccion
« Respuesta #1 en: 18 de Septiembre de 2011, 10:38:33 »
Talvez enviando dos bytes:
bit_de_start + direccion + bit_de_stop
bit_de_start + dato + bit_de_stop
@fabianjsm is on twitter

Desconectado IMASD

  • PIC10
  • *
  • Mensajes: 7
    • http://www.daselectrics.es
Re: me urge ejemplos en asm de comunicacion usart diferenciar entre dato y direccion
« Respuesta #2 en: 18 de Septiembre de 2011, 12:04:20 »
si eso de  enviar byte de direccion y byte de datos eso ya lo se
mi pregunta es como se puede estructurar para que el pic sepa cada vez que
es una direccion y que es un dato

gracias por contestar
un saludo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: me urge ejemplos en asm de comunicacion usart diferenciar entre dato y direccion
« Respuesta #3 en: 18 de Septiembre de 2011, 14:07:06 »
Como en la mayoría del resto de los protocolos: armando una estructura de paquete.

La más básica para tu caso podrías ser enviar:

BOP(Begin Of Package) un valor constante prepactado entre emisor-receptor. A mi me gusta utilizar el valor 0xA3 por ejemplo.
Dirección
Dato
Chechsum(mediante truncamiento, XOR o bien algo más complejo como CRC8 por ejemplo).

Ejemplo de paquete:
0xA3,0x81,0x01,0x23

El Cheksum 0x23 fue calculado utilizando XOR y se calculó haciendo: 0xA3 XOR 0x81 XOR 0x01.

Del otro lado te tocará detectar el BOP, y a partir de allí acumular los próximos 3 bytes. Luego verificar si el Checksum es correcto. Si lo es, ya sabes donde buscar los datos.

Opcionalmente, algunos uC poseen módulos de puerto serie con la capacidad de agregar un noveno bit a la trama de envío para poder hacer precisamente lo que necesitás, diferenciar dirección de dato.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: me urge ejemplos en asm de comunicacion usart diferenciar entre dato y direccion
« Respuesta #4 en: 18 de Septiembre de 2011, 14:11:08 »
Envia dos bytes, el primero siempre es direccion y el segundo siempre es dato.
Te recomiendo q busques protocolos simples como i2c o modbus, a ver si te ayudan a entender como funcionan.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: me urge ejemplos en asm de comunicacion usart diferenciar entre dato y direccion
« Respuesta #5 en: 18 de Septiembre de 2011, 14:13:48 »
Ojo gera con hacerlo tan sencillo. Si por algún motivo llegás a perder un byte en la  comunicación, vas a invertir la interpretación de lo que es dirección y lo que es dato. Lo ideal es que el protocolo pueda autosincronizarse en posteriores paquetes si hay una falla.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado IMASD

  • PIC10
  • *
  • Mensajes: 7
    • http://www.daselectrics.es
Re: me urge ejemplos en asm de comunicacion usart diferenciar entre dato y direccion
« Respuesta #6 en: 19 de Septiembre de 2011, 03:56:48 »
Hola que tal gracias por contestar la verdad en esto de estructurar el protocolo de comunicacion aun ando verde pero es uno de los temas que mas me apasiona de los pics

entonces para entenderme que haria ,
el pc manda un paquete de datos
y el pic cada vez que recibe un byte incrementa un contador
segun el byte que sea lo almaceno en una posicion cuando sea 4 el contador ,reseteo este y le mando un byte al pc diciendole
que ya ha recibido la trama para que el pc sepa si puede seguir transmitiendo
mas o menos seria asi la forma de estructurarlo?

ahora bien eso del checksum que es truncar los 3 primeros bytes correcto que sea 23,
pero eso variará segun el dato y la direccion ,entonces de que sirve el pic que verifique el checksum
si antes no tiene prefijados los resultados que dará no termino de entender para que sirve esto de verificar mediante un XOR ese resultado,
por cierto ;si saben de algun ejemplo o enlace del foro donde pueda verificar ejemplos se lo agradeceria

un saludo y gracias

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: me urge ejemplos en asm de comunicacion usart diferenciar entre dato y direccion
« Respuesta #7 en: 19 de Septiembre de 2011, 09:02:15 »
Si existe la posibilidad de que pierdas datos, tarde o temprano los perderás. El checksum te sirve para corroborar la veracidad de la información, así podrás validar o descartar un paquete. Te muestro un ejemplo sencillo:

   “0xff, direccion, dato, chk”

Tu programa estará a la espera del carácter de cabecera de paquete, en este caso 0xFF. Cuando lo recibas, los próximos tres bytes siguientes serán dirección, dato y verificación, en ese orden (o el establecido por tu protocolo). Ahora tomas la dirección y el dato y aplicas la operación  XOR (o una suma, una resta, o lo que quieras, basta que sea la misma operación que realizo el transmisor), y si no coincide con el tercer valor descartas el paquete. Si quieres un algoritmo más elaborado puedes utilizar un CRC, acá BrunoF lo explica: http://www.todopic.com.ar/foros/index.php?topic=25627 (incluso rutinas en C y ASM).
« Última modificación: 19 de Septiembre de 2011, 09:04:23 por fabianjsm »
@fabianjsm is on twitter

Desconectado IMASD

  • PIC10
  • *
  • Mensajes: 7
    • http://www.daselectrics.es
Re: me urge ejemplos en asm de comunicacion usart diferenciar entre dato y direccion
« Respuesta #8 en: 19 de Septiembre de 2011, 09:25:56 »
hola que tal ;
perfecto gracias por la explicacion ya lo entendi bien lo de que el 4 byte checksum lo manda el pc y cuando llega al pic hace la operacion Xor para comprobar que es correcto lo que le ha llegado anteriormente
hasta ahi esta todo claro

pero a la hora de almacenar datos :
ejemplo me llega el primer paquete 4 bytes y que se haria de la siguiente forma: ???
empiezan a entrar los datos y vamos incrementando con cada byte un contador y segun el valor del contador el byte lo posicionamos en una direccion de memoria ,cuando el contador sea 4 comprobamos la operacion xor y si es correcta mandamos los datos a su espacio de almacenaje  y le mandamos un byte a pc para que siga transmitiendo.

lo hariais asi tal cual lo describo o implementariais el protocolo de otra forma???

muchisimas gracias por vuestra ayuda