Autor Tema: Enviar y Comparar caracteres entre 2 pic  (Leído 2877 veces)

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

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Enviar y Comparar caracteres entre 2 pic
« en: 10 de Agosto de 2015, 23:53:15 »
 hola amigos tengo un problema que necesito resolver urgente. hice un programa en pic para un  sistema en el que necesito que un pic envie un codigo de confirmacion a otro para que este ejecute una tarea.

 para diferenciarlo de los demas datos decidi que envie un caracter via rs232, asi el otro pic lo recibe y lo compara con el que esta pregrabado, algo como un codigo. use el comando printf para imprimir el caracter, vamos a suponer "Ejemplo123".

 este pic realiza bien su tarea ya que lo simule en isis y envia el caracter correcto. lo que no puedo conseguir es que el 2do pic lo compare con el que tiene pregrabado utilizando una sentencia if o while o lo que sea. si me pueden ayudar se los agradesco.

 en resumen:

valor=getc();
if(valor=="ejemplo123"){
 accion a realizar;
 }
//fin

 no entiendo por que no funciona
« Última modificación: 11 de Agosto de 2015, 00:52:04 por marcoscab1166 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Enviar y Comparar caracteres entre 2 pic
« Respuesta #1 en: 11 de Agosto de 2015, 00:49:52 »
Imagino que tenes un caracter de final de trama. y Tal ves uno de inicio. Entonces haces un buffer y en la interrupcion del RX de la UART vas guardando uno a uno los caracteres.

Cuando llega al ultimo comparas con lo que necesitas. Y comenzas a llenar el buffer de 0.


Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re: Enviar y Comparar caracteres entre 2 pic
« Respuesta #2 en: 11 de Agosto de 2015, 00:53:05 »
disculpa edite la pregunta, en realidad no es gran cosa lo que quiero hacer pero no funciona

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Enviar y Comparar caracteres entre 2 pic
« Respuesta #3 en: 11 de Agosto de 2015, 01:22:02 »
Eso es imposible. Por que un string en C es un array de caracteres. es decir

"ejemplo" tenes que guardarlo en un array

entonces seria algo asi:

Código: C
  1. texto_a_comparar[10]="ejemplo";
que es lo mismo que :
Código: C
  1. texto_a_comparar[8]= {'e','j','e','m','p','l','o',\0'};

Tu programa haria algo de esta forma:

Código: C
  1. valor[j]=getc();
  2. j++
  3. if(valor[j]==0xFF) {
  4.    if(comparar()) { // Coincide };
  5.    j=0;
  6. }
  7. //fin

entonces mientras va llegando datos los va guardando en valor[j] , cuando se detecto el caracter final ( en este caso le puse 0xFF ) procede a comparar y ponen a 0 a j. Para que se empieze a llenar de nuevo.

Para comparar 2 strings tenes que comparar 1 por uno los valores, hay mejores formas de hacerlo:

Código: C
  1. int comparar() {
  2.  for(j=0;j<8;j++)
  3.  {
  4.    if(valor[j] != texto_a_comparar[j]) { return 0 }
  5.  }
  6.  return 1
  7. }

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re: Enviar y Comparar caracteres entre 2 pic
« Respuesta #4 en: 11 de Agosto de 2015, 12:58:56 »
gracias por la ayuda, pero hay un par de cosas que no entiendo.
en esta parte, el programa tiene que estar leyendo el string recibido todo el tiempo e ir grabandolo en las posiciones de "valor"? porque si es asi no me sirve porque el primer pic manda el caracter 1 sola vez.

valor[j]=getc();
j++
if(valor[j]==0xFF) {
   if(comparar()) { // Coincide };
   j=0;
}

otra cosa, donde coloco la accion a realizar en tu codigo?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Enviar y Comparar caracteres entre 2 pic
« Respuesta #5 en: 11 de Agosto de 2015, 13:43:16 »
Vuelvo a decirte, si queres enviar un "texto" ( una string ) entonces tenes que enviar VARIOS datos.

la palabra "ejemplo" requiere enviar 7 bytes como minimo.

Es decir deberias enviar:
0x65 0x6a 0x65 0x6d 0x70 0x6c 0x6f

Ahora si solo vas a recibir 1 solo dato ( 1 solo byte ) podes compararlo como lo hiciste en tu codigo, pero va a ser algo asi:

if(valor==0x12)

Es decir lo comparas con un valor decimal (97), hexa (0x61), o un caracter ( 'a' ). Pero no toda una string como hiciste vos.
Si queres enviar un string, y recibirlo sin problemas entonces vas a tener que aprender a usar interrupciones (Que es lo que se deberia hacer SI o SI, pero no te lo obligo). Esto te va a permitir que la recepcion nunca se interrumpa, y cuando ya llegaron todos los valores, o el valor, pongas a uno una bandera para que tu programa comienze a procesar lo que llego.

Asi que, aca queda en vos lo que queres hacer y que vas a enviar/recibir.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Enviar y Comparar caracteres entre 2 pic
« Respuesta #6 en: 11 de Agosto de 2015, 13:47:29 »
para que el pic RX pueda procesar la trama recibida, tiene que confirmarle al pic TX primero,

y cuando digo confirmar, me refiero a que TX esté seguro de que RX haya recibido correctamente la trama, esto implica que hasta código de detección de errores para la trama hay que implementar.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re: Enviar y Comparar caracteres entre 2 pic
« Respuesta #7 en: 11 de Agosto de 2015, 19:02:11 »
gracias KILLERJC, ahora entiendo mejor. Me podrias mostrar como seria el codigo que envia caracter por caracter del pic transmisor?
yo habia pensado en algo asi:
Código: [Seleccionar]
char dato_a_enviar[10]="ejemplo"

for(i=0;i<=8;i++){
 putc(dato_a_enviar[i]);}

lo que me preocupa es la sincronisacion entre los pic, por lo que pienso que sera necesario poner un delay despues del comando "putc" para darle tiempo al segundo pic a grabar el dato.

Desconectado marcoscab1166

  • PIC12
  • **
  • Mensajes: 57
Re: Enviar y Comparar caracteres entre 2 pic
« Respuesta #8 en: 11 de Agosto de 2015, 19:26:30 »
lo acabo de simular en proteus y no me funciona

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Enviar y Comparar caracteres entre 2 pic
« Respuesta #9 en: 11 de Agosto de 2015, 20:20:12 »
Esta bien el codigo pero usa el printf, asi no tenes que hacer el for

Sino tendrias que modificarlo un poco

Código: C
  1. for(i=0;dato_a_enviar[i]=='\0';i++){
  2.  putc(dato_a_enviar[i]);}

Igual esto te trae problemas en el lado del receptor por que no sabes cuando es que va a terminar tus datos. Es decir si vas a recibir 1, 2, o 10 bytes.

Citar
lo que me preocupa es la sincronisacion entre los pic, por lo que pienso que sera necesario poner un delay despues del comando "putc" para darle tiempo al segundo pic a grabar el dato.

Si lo haces con interrupciones al receptor no vas a tener problemas. Y si crees que tarda mucho en "procesar" el dato, entonces cuando se termina de recibir, que lo copie a otro array, asi puede seguir recibiendo y guardando en un array, y trabajando con otro.


 

anything