Encuesta

Como mostrar y almacenar caracteres ingresados por RS232

AAAAA
0 (0%)
BBBBB
0 (0%)

Total de votos: 0

Votación cerrada: 22 de Junio de 2007, 15:56:53

Autor Tema: Comunicacion con PIC por RS232  (Leído 3591 veces)

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

Desconectado hernanfire

  • PIC10
  • *
  • Mensajes: 32
Comunicacion con PIC por RS232
« en: 15 de Junio de 2007, 15:56:53 »
hola! Soy nuevo en C y les cuento que estoy tratando de pasar un codigo asm a c para un PIC 16F628, el tema esta cuando tengo que mostrar una cadena de caracteres (algo previamente ingresado) y tambien cuando quiero almacenar una cadena de caracteres ingresando por rs232, segun esta cadena de caracteres se enciende un Led a la salida la idea es comparar la cadena ingresada y si son iguales enciendo y sino no!!
Mire diferentes ejemplos de VsZeNer o de RedPic pero no logro dar con la tecla! Necesitaria una ayuda con el codigo un manual o un LinK en este foro!! que lo explique, uso el CCS para compilar y el Proteus para simular.
Desde ya muchas Gracias a todos!
SALU2

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Comunicacion con PIC por RS232
« Respuesta #1 en: 15 de Junio de 2007, 17:11:25 »
¿El código en ASM hacía lo que pretendes que haga?
 ¿Tienes problemas con la migración del código de ASM a C ? o tienes problemas en que no sabes cómo comparar 2 cadenas de datos?

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado hernanfire

  • PIC10
  • *
  • Mensajes: 32
Re: Comunicacion con PIC por RS232
« Respuesta #2 en: 16 de Junio de 2007, 15:42:21 »
EXACTAMENTE! tengo problemas en comparar dos cadenas de datos, 1ro, no se como ingresar una cadena de datos a una posicion de memoria para que quede almacenada en el pic y me la muetre por RS232 para comprobar que lo que ingrese esta bien, y 2do quiero comparar esa cadena con algo que ingresa por RS232 y decidir si son iguales o no.
El proyecto es in CELULAR conectado al PIC, la cadena del mensaje de texto que debe llegar ya la conozco (que seria la ingresada en la memoria del pic) pero me falta la comparacion (que es el SMS que llega al celu)para ejecutar alguna accion o no. Es por eso que pido un link en este foro o un manual o alguna ayuda con el codigo igual sigo buscando.
Muchas Gracias Maunix por responder tan rapido y a todos!

Salu2

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Comunicacion con PIC por RS232
« Respuesta #3 en: 16 de Junio de 2007, 15:56:49 »
hernanfire es que si estás en C, no te importa donde está el dato. 

Según veo yo debieras tener un vector de chars, donde guardar los datos que te vienen y luego compararlo con otro vector de chars (probablemente estos últimos en ROM ya que son fijos).

Al ir recibiendo datos por la usart vas guardando los datos en el vector y te hará falta tener un puntero o un indice que te diga qué byte es el que has recibido.

Una vez que terminas de recibir, haces la comparación.  Si quieres la puedes ir haciendo byte a byte, pero lo veo menos eficiente salvo que si un byte ya no coincide tengas que directamente cancelar todo.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado hernanfire

  • PIC10
  • *
  • Mensajes: 32
Re: Comunicacion con PIC por RS232
« Respuesta #4 en: 16 de Junio de 2007, 19:44:51 »
Eso es lo que quiero hacer, pero la cuestion es como arranco con el codigo  para tener una ayuda!  algun ejemplo de los que hay, para poder ver como lo genero (la parte de los datos fijos en rom la dejo para mas adelante ya que todavia estoy aprendiendo) solo me gustaria saber como ingreso un dato fijo en el pic (en una variable) y comparar lo que entre por rs232 con este.  Estoy leyendo algo de redPic (una demo de String) para familiarizarme con la programacion!
Gracias otra vez maunix!

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Comunicacion con PIC por RS232
« Respuesta #5 en: 17 de Junio de 2007, 18:44:03 »
La cadena patrón la pretendes ingresar en el PIC en tiempo de programación (insertada en el código) o en tiempo de ejecución (una vez el PIC ya esté funcionando).

Si es la primera opción basta con crear una cadena constante en tu código y luego leer el RS-232, ir almacenando las letras de la cadena leída en otra variable y comparar ambas cadenas.

En el segundo caso es hacer dos veces la segunda parte.

En los ejemplos de RedPic y Nocturno tienes cómo leer cadenas por el RS-232. Una vez las tengas guardadas en dos varibales es ir recorriéndolas y verificando si son o no iguales.

Desconectado hernanfire

  • PIC10
  • *
  • Mensajes: 32
Re: Comunicacion con PIC por RS232
« Respuesta #6 en: 17 de Junio de 2007, 20:40:43 »
Voy a estudiar mas a ver si lo puedo solucionar, ejemplos de RedPic consegui unos cuantos de manejo de caracteres me faltaria de Nocturno para comenzar.......
Gracias  DarkVect!!
Salu2

Desconectado Jorge Aurelio

  • PIC10
  • *
  • Mensajes: 1
Re: Comunicacion con PIC por RS232
« Respuesta #7 en: 18 de Junio de 2007, 12:27:21 »
Hola a todos!! Amigos tengo una pregunta quiero comunicar un pic con la maquina por 232 sólo quisiera saber si alguno de ustedes podría decirme si existe una interrupción por 232!!!! Para que el pic esté haciendo otras cosas y al llegar un dato tomarlo y comenzar un ciclo de nuevo, estý programando en C así que estoy apenas entendiendo!! Ahora para ingresar un dato que instrucción es exactamente?? Estoy probando en hyperterminal de la máquina así que no estoy seguro de poder visualizar!!!!! AYUDA PORFAVOR!!!!!

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Comunicacion con PIC por RS232
« Respuesta #8 en: 18 de Junio de 2007, 13:18:45 »
Hola Jorge Aurelio, efectivamente hay una interrupción para la comunicación RS 232. Todo depende del compilador que utilices, se definirá de una forma u otra. En el caso de CCS es:

#INT_RDA

Busca en la ayuda de tu compilador.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado hernanfire

  • PIC10
  • *
  • Mensajes: 32
Re: Comunicacion con PIC por RS232
« Respuesta #9 en: 19 de Junio de 2007, 22:12:07 »
Aqui he puesto el codigo que quiero usar para comparar una cadena de caracteres, el problema es que no funciona correctamente la comparacion, ya que al ingresar 11111 como caracteres de entrada siempre la comparacion es incorrecta. Use 2 puertos serie solo para mostrar lo que  ingresaba.
Dejo el codigo para escuchar diferentes aclaraciones de la comparacion y que estoy haciendo mal!! GRACIAS A TODOS!

///////////////////////////////////////////////////
//
// Comparacion de carateres.
//
///////////////////////////////////////////////////
#include <16F648a.h>
#use delay(clock=4000000)
#fuses HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT
#use rs232(baud=9600, xmit=PIN_B2,rcv=PIN_B1,stream=GPS)
#use rs232(baud=9600, xmit=PIN_A1,rcv=PIN_A0,stream=PC)

// Constantes y definiciones ///////////////////////////////////////////////////
int const lenbuff=5;  // Tamaño del buffer de recepción

// Variables Globales //////////////////////////////////////////////////////////
char smsbuff[lenbuff]; // Buffer GPS
char latitud[lenbuff];
char longitud[lenbuff];
char SMS1[6]={'1','1','1','1','1'};

// Declaracion de Funciones ////////////////////////////////////////////////////
void inicbuff(void); // Borra el buffer de recepción
void inicia_sms(void); // Inicia SMS
void comando(void); // Comando para comparar

void inicbuff(void){  // Inicia a \0 cbuff
int i;
for(i=0;i<lenbuff;i++) // Bucle que pone ...
       {               
        smsbuff=0;   // a 0 smsbuff
       }
}
void comando(void){
int  i;
printf("INGRESE:%s ",SMS1,PC);
   while(kbhit(GPS)); // tomo las teclas presionadas
      {
      for(i=0;i<lenbuff;i++) //incremento contador para almacenar
         {
         smsbuff=fgetc(GPS); // almaceno
         }
       }
      printf("\r\n INGRESADO %s ",smsbuff,GPS); //muestro lo ingresado como SMS

    if(SMS1==smsbuff){ // quiero comparar lo ingresado con lo fijo
    printf("\r\nClave\nCorrecta!\r\n",PC); //si son iguales... Correcto
    }
    else
    {
    printf("\r\nClave\nNO!!!!!!\r\n",PC); //sino incorrecto...
    }
}
void main()
   {
   printf("Esperando SMS...\r\n",GPS); // Señal de que funciona
   delay_ms(100);
   inicbuff(); // Funcion que inicia el SMS en 0
   comando(); // llamando al comando que compara
}


Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Comunicacion con PIC por RS232
« Respuesta #10 en: 19 de Junio de 2007, 22:29:51 »
Las cadenas no se pueden comprar directamente. Hay que utilizar una función de comparación de cadenas. Para el compilador de CCS:

Código: C
  1. cresult=strcmp(s1, s2) Compare s1 to s2

En la ayuda de tu compilador traerá las funciones de cadena y su uso:

Código: C
  1. ptr=strcat (s1, s2) Concatenate s2 onto s1
  2.  
  3. ptr=strchr (s1,  c) Find c in s1 and return &s1[i]
  4.  
  5. ptr=strrchr  (s1,  c) Same but search in reverse
  6.  
  7. cresult=strcmp  (s1, s2) Compare s1 to s2
  8.  
  9. iresult=strncmp  (s1, s2, n) Compare s1 to s2 (n bytes)
  10.  
  11. iresult=stricmp  (s1, s2) Compare and ignore case
  12.  
  13. ptr=strncpy (s1, s2,  n) Copy up to n characters s2->s1
  14.  
  15. iresult=strcspn  (s1, s2) Count of initial chars in s1 not in s2
  16.  
  17. iresult=strspn  (s1, s2) Count of initial chars in s1 also in s2
  18.  
  19. iresult=strlen  (s1)  Number of characters in s1
  20.  
  21. ptr=strlwr (s1) Convert string to lower case
  22.  
  23. ptr=strpbrk (s1, s2) Search s1 for first char also in s2
  24.  
  25. ptr=strstr  (s1, s2) Search for s2 in s1
  26.  
  27. ptr=strncat(s1,s2) Concatenates up to n bytes of s2 onto s1
  28.  
  29. iresult=strcoll(s1,s2) Compares s1 to s2, both interpreted as appropriate to the current locale.
  30.  
  31. res=strxfrm(s1,s2,n) Transforms maximum of n characters of s2 and places them in s1, such that strcmp(s1,s2) will give the same result as strcoll(s1,s2)
  32.  
  33. iresult=memcmp(m1,m2,n) Compare m1 to m2 (n bytes)
  34.  
  35. ptr=memchr(m1,c,n) Find c in first n characters of m1 and return &m1[i]

Un saludo

 
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús