Autor Tema: PROBLEMA COMUNICACION PIC-CELUAR  (Leído 2943 veces)

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

Desconectado hernanfire

  • PIC10
  • *
  • Mensajes: 32
PROBLEMA COMUNICACION PIC-CELUAR
« en: 08 de Abril de 2008, 13:24:30 »
Hola!! Tengo el problema que cuando quiero almacenar los caracteres lanzados por un celular por puerto serie el programa se cuelga.
Uso el proteus con un Virtual terminal y un compim (simulador de puerto serie) conectados
que quizas pueda haber problemas aqui!!! DUDO AL CONECTARLOS!!
El PIC conectado al COMPIM y al VT para ver que es lo que se envia y lo que almacena pero
larga el comando inical pero no almacena nada!!!!
Correctamente le mando AT+CNMI? y el celular responde con (CR) +cnmi:3,0,0,0,0 (CR) OK (CR)
yo solo quiero almacenar algo!! por eso que cuando aparece una ,(coma) quiero ver que sale!!
El codigo funciona si lo lo pruebo directo apretando teclas, por eso, no entiendo en que le pifio
quizas no sea el comando adecuado o este mal la conexion!!
Les dejo parte a ver si me ayudan con una solución!!!
#include <16f628.h>                          // Definiciones del PIC 16F628
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT  // Los Fuses de siempre
#use delay(clock=4000000)                     // Oscilador a 4 Mhz
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)// RS232 Estándar

// CONSTANTES //

int const lenbuff=10;                  // Longitud de buffer, Ajustable

// VARIABLES EN RAM //

int  xbuff=0x00;                       // Índice: siguiente char en cbuff
char cbuff[lenbuff];                   // Buffer
char rcvchar=0x00;                     // último caracter recibido
int1 flagcommand=0;                    // Flag para indicar comando disponible

// Declaración de Funciones //

void inicbuff(void);                   // Borra/Inicializa buffer
int  addcbuff(char c);                 // añade caracter recibido al buffer
void echos(char c);                    // Eco sobre RS232 (CON ESTO QUIERO VER POR VT )
void procesa_comando(void);            // Procesa comando

// INTERRUPCIONES //

#int_rda
void serial_isr() {                    // Interrupción recepción serie USART

   rcvchar=0x00;                       // Inicializo caracter recibido
   if(kbhit()){                        // Si hay algo pendiente de recibir
      rcvchar=getc();                  // recibo y almaceno en rcvchar
      addcbuff(rcvchar);               // agrego al buffer
      echos(rcvchar);                  // hago eco
   }
}

// Desarrollo de Funciones //

void echos(char c){                    // Echo selectivo ----------------------

      switch(c){
      default:   putc(rcvchar);     // Echo de cualquier otro caracter
      }
}

void inicbuff(void){                   // Inicia a \0 cbuff -------------------
   int i;

   for(i=0;i<lenbuff;i++){             // Bucle que pone a 0 todos los
      cbuff=0x00;                   // caracteres en el buffer
   }
   xbuff=0x00;                         // Inicializo el indice de siguiente
                                       // caracter
}

int addcbuff(char c){                  // Añade a cbuff -----------------------

      switch(c){
         case 0x2c :                    // Enter -> Habilita Flag para procesar
            flagcommand=1;             // Comando en Main
            break;
         default:
            cbuff[xbuff++]=c;          // Añade caracter recibido al Buffer
      }
}


// Programa Principal //

void main() {

   inicbuff();                                   // Borra buffer al inicio
   delay_ms(500);
   printf("at+cnmi?");  // Presenta menú
   putc(0x0d);
   enable_interrupts(int_rda);                   // Habilita Interrupción RDA
   enable_interrupts(global);                    // Habilita interrupciones

   do {

      if(flagcommand) procesa_comando();         // Si hay comando pendiente
                                                 // de procesar ... lo procesa.

   } while (TRUE);

}

// Procesador de Comandos //

void procesa_comando(void){

   int i;
   char arg[lenbuff];                   // Argumento de comando (si lo tiene)

   flagcommand=0;                       // Desactivo flag de comando pendiente.

   for(i=0;i<lenbuff;i++){             // Bucle que pone a 0 todos los
      arg=0x00;                     // caracteres en el argumento
   }

//   if(cbuff[0]==0x0d && cbuff[1]==0x0a ){  // Esto es para comparar y tomar acciones
                                             // segun el SMS que llega.... A FUTURO!!!
      printf("\r\n\Ingresado %s\r\n\ ",cbuff); // Muestro lo almacenado (AQUI el problema no me
                                               // muetra nada e el Virtual terminal
      inicbuff();                              // Borro buffer.

}

Desde ya muchas Gracias!!!
Hernanfire

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PROBLEMA COMUNICACION PIC-CELUAR
« Respuesta #1 en: 09 de Mayo de 2008, 08:59:17 »
Hernan, trataré de darte una mano.  Iré poniendo trozos de código y te haré los comentarios/sugerencias que crea conveniente y que espero te sean de utilidad.

Código: C
  1. #int_rda
  2. void serial_isr() {                    // Interrupción recepción serie USART
  3.    rcvchar=0x00;                       // Inicializo caracter recibido
  4.    if(kbhit()){                        // Si hay algo pendiente de recibir
  5.       rcvchar=getc();                  // recibo y almaceno en rcvchar
  6.       addcbuff(rcvchar);               // agrego al buffer
  7.       echos(rcvchar);                  // hago eco
  8.    }
  9. }
  10.  

rvchar = 0x00 : no es necesario inicializarlo, si luego lo "pisarás" con el getc()
echos(rcvchar):  si quieres por ahora simplemente haz algo así como TXREG=rcvchar o similar. La función eco que estas usando por ahora simplemente devuelve todo tal cual lo recibes así que no te la compliques ni le compliques la existencia al pic con tantas llamadas a subrutinas.  :)  Luego si anda bien, lo reactivas.


Código: C
  1. int addcbuff(char c){                  // Añade a cbuff -----------------------
  2.  
  3.       switch(c){
  4.          case 0x2c :                    // Enter -> Habilita Flag para procesar
  5.             flagcommand=1;             // Comando en Main
  6.             break;
  7.          default:
  8.             cbuff[xbuff++]=c;          // Añade caracter recibido al Buffer
  9.       }
  10. }
  11.  

El carácter 0x2C no es el enter sino una coma "," .  Ten cuidado con lo que quieres hacer en esta parte del código.  Esto terminará con la primer coma y no en el enter (que es el 0x0D).


Código: C
  1. // Programa Principal //
  2.  
  3. void main() {
  4.  
  5.    inicbuff();                                   // Borra buffer al inicio
  6.    delay_ms(500);
  7.    printf("at+cnmi?");  // Presenta menú
  8.    putc(0x0d);
  9.    enable_interrupts(int_rda);                   // Habilita Interrupción RDA
  10.    enable_interrupts(global);                    // Habilita interrupciones
  11.  
  12.    do {
  13.  
  14.       if(flagcommand) procesa_comando();         // Si hay comando pendiente
  15.                                                  // de procesar ... lo procesa.
  16.  
  17.    } while (TRUE);
  18.  
  19. }
  20.  

No olvides revisar si se enciende el bit OERR en el registro RCSTA.  Si éste bit se enciende dejarás de recibir datos de la usart! 


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 firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: PROBLEMA COMUNICACION PIC-CELUAR
« Respuesta #2 en: 09 de Mayo de 2008, 12:41:04 »
Saludos!  :-)
Este Mauricio si que es un verdadero maestro!  :D
Has dado una cátedra al amigo hernanfire...
Menos mal que contamos con expertos así en el foro, no es cierto hernanfire?   :-/
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PROBLEMA COMUNICACION PIC-CELUAR
« Respuesta #3 en: 09 de Mayo de 2008, 12:52:49 »
Saludos!  :-)
Este Mauricio si que es un verdadero maestro!  :D
Has dado una cátedra al amigo hernanfire...
Oh, no es para tanto, solo han sido pequeños consejos.


Menos mal que contamos con expertos así en el foro, no es cierto hernanfire?   :-/
Ok nos leemos!  :mrgreen:

Gracias, hay mucho conocimiento concentrado entre muchos de los miembros del foro y esa unión es la que hace la fuerza  :mrgreen:
- 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 firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: PROBLEMA COMUNICACION PIC-CELUAR
« Respuesta #4 en: 09 de Mayo de 2008, 12:55:47 »
Pero en serio tus explicaciones son geniales, amigo Mauricio!
Das clases de programación de pics en alguna universidad argentina?
Si no, deberías pensarlo eh...  :D
Tienes talento para las explicaciones!  :lol:
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PROBLEMA COMUNICACION PIC-CELUAR
« Respuesta #5 en: 09 de Mayo de 2008, 13:13:15 »
Pero en serio tus explicaciones son geniales, amigo Mauricio!
Das clases de programación de pics en alguna universidad argentina?
Sabes, hasta hace un par de años pensé que era malo para explicar pero esta pregunta que me acabas de hacer me la hicieron en varias ocasiones y tal vez no sea tan malo explicando como pensé que era

Si no, deberías pensarlo eh...  :D

Je, podría ser, aunque debiera dedicarle un tiempo que no se si dispongo actualmente.  De todas formas, soy un amante de la educación, creo que los problemas del mundo se solucionan con educación... y no estaría mal ser más partícipe del tema y no tanto como observador.

Creo que hay que pasar la semilla del conocimiento a los más menores para que hagan de este mundo uno mejor que el que hicimos nosotros y si logramos hacer eso sucesivamente... con suerte nuestros nietos vivirán mucho mejor.  Un mundo con 50% de gente que no tiene acceso a diario a la comida me parece sencillamente que en 'algo' le estamos errando  :(

Tienes talento para las explicaciones!  :lol:

De nuevo gracias, lo tomaré como un cumplido y veré si otros opinan igual y si se da que pueda dar alguna materia en algún lado, etc.  :mrgreen: :mrgreen:
- 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 firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: PROBLEMA COMUNICACION PIC-CELUAR
« Respuesta #6 en: 09 de Mayo de 2008, 13:23:11 »
De todas formas, soy un amante de la educación, creo que los problemas del mundo se solucionan con educación... y no estaría mal ser más partícipe del tema y no tanto como observador.

Pues ya somos dos! A mí también me encanta enseñar... si no, de qué ha valido lo que has aprendido, si no lo transmites?
Yo dí clases en la universidad donde estudié por un tiempo, pero no de pics sino de matemática y electrónica de potencia... hubiese querido enseñar de pics pero el profesor que está actualmente en esa área (que me dió clases a mí) es un tremendo experto en la materia, como se dice por acá "el papá de los helados"...
Lo triste es que no muchos son los que se aprovechan de todo ese conocimiento que el con tanto gusto imparte...
Esa es la parte desagradable de la educación... pero por supuesto, nada es perfecto!  :D

Bueno anímate amigo Mauricio... ya se te verá por alguna buena universidad de la Argentina  :)
Claro cuando tengas más tiempo... porque de que puedes, puedes!  :-/
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: PROBLEMA COMUNICACION PIC-CELUAR
« Respuesta #7 en: 09 de Mayo de 2008, 15:15:52 »
Pues ya somos dos! A mí también me encanta enseñar... si no, de qué ha valido lo que has aprendido, si no lo transmites?
Yo dí clases en la universidad donde estudié por un tiempo, pero no de pics sino de matemática y electrónica de potencia... hubiese querido enseñar de pics pero el profesor que está actualmente en esa área (que me dió clases a mí) es un tremendo experto en la materia, como se dice por acá "el papá de los helados"...
Bueno, suele pasar, por eso también hay incertidumbre.  Depende quien esté enseñando, si es por concurso, por puntaje docente (quien más años lleva en el tema, más puntaje tiene, etc).  Por ello lo que pueden ser primero una idea, para luego tener ganas puede que luego no se de en la realidad. :)


Lo triste es que no muchos son los que se aprovechan de todo ese conocimiento que el con tanto gusto imparte...
Esa es la parte desagradable de la educación... pero por supuesto, nada es perfecto!  :D


Si, claro, suele pasar.  A veces hay que estar "preparado"  para aprender ciertas cosas, a veces nos damos cuenta lo que nos quisieron enseñar un tiempo después cuando tomamos un estado de situación de algo similar a lo que nos quisieron enseñar.

Bueno anímate amigo Mauricio... ya se te verá por alguna buena universidad de la Argentina  :)
Claro cuando tengas más tiempo... porque de que puedes, puedes!  :-/

Gracias, ya veré que hago, igual por ahora la excusa es que no tengo tiempo jiji así que con eso calmo mi conciencia  :mrgreen: :mrgreen: , pero ya veré que hago.

Para hacer algo así le debo dedicar mucho tiempo y sobre todo debo estar con ganas ¿porqué? porque en argentina la docencia está bastante mal paga entonces se hace más que nada por gusto o bien porque no queda otra.  Muchos profesores terminan cansándose e imparten conocimientos a desgano y yo no quiero que eso me toque a mí, es decir, no por dinero (que supongo lo haría en alguna empresa) pero sí por falta de energía.  Los alumnos se merecen el mejor profesor  :)

- 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 firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: PROBLEMA COMUNICACION PIC-CELUAR
« Respuesta #8 en: 09 de Mayo de 2008, 15:18:38 »
Pues Mauricio, estoy de acuerdo contigo en todo!
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web


 

anything