TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: soymoe en 18 de Mayo de 2016, 18:28:06

Título: No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 18 de Mayo de 2016, 18:28:06
Hola como andan, estoy aprendiendo a manejar el modulo con sis 900 y quiero mandar un mensaje pero no lo hace
Código: [Seleccionar]
while(1){
   printf("AT\r\n");
   delay_ms(4000);
   printf("AT+CMGS=543xxxxxxx\r\n");
   delay_ms(4000);
   printf("HOLA DESDE PIC"+0X1A);
   Delay_ms(4000);
   }         
A ver si me dan una mano. Gracias
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: RICHI777 en 18 de Mayo de 2016, 19:21:17
Checkeaste que el baud-rate sea el correcto ?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 18 de Mayo de 2016, 19:33:15
Checkeaste que el baud-rate sea el correcto ?
si porque me deja llamar
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: KILLERJC en 18 de Mayo de 2016, 19:40:18
Te fijaste que te responde ?
Podrias determinar cual es el problema mirando eso.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 18 de Mayo de 2016, 21:02:50
Te fijaste que te responde ?
Podrias determinar cual es el problema mirando eso.
El problema es que tengo que poner comillas y no se como ponerlas en el string tengo que poner, o mandar: AT+CMGS="543496508790"
pero no se como se ponen las comillas dentro del printf para que lo tome como un caracter mas
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 18 de Mayo de 2016, 21:22:34
fprintf(SIM900,"AT+CMGS=\"%s\"\r",num); // Teléfono al cual le enviaremos el mensaje.

por ejemplo

fprintf(SIM900,"AT+CMGS=\"336xxxxxxx\"\r");

saludos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 19 de Mayo de 2016, 09:27:18
printf("AT+CMGS=\"543496xxxxx\"\r");
   //delay_ms(3000);
   printf("HOLA DESDE PIC\r\n");
Pongo esto pero no me funciona
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 19 de Mayo de 2016, 09:33:10
para finalizar el mensaje tenes que enviar el caracter CTRL+z o 0x1A

agregá esto al final:
printf("%c", 0x1A);

saludos!
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 19 de Mayo de 2016, 10:10:34
para finalizar el mensaje tenes que enviar el caracter CTRL+z o 0x1A

agregá esto al final:
printf("%c", 0x1A);

saludos!
donde puedo encontrar info sobre el fprint?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 19 de Mayo de 2016, 10:22:48
en google  ;-)




printf("format", args) is used to print the data onto the standard output which is often a computer monitor.

sprintf(char *, "format", args) is like printf. Instead on displaying the formated string on the standard output i.e. a monitor, it stores the formated data in a string pointed to by the char pointer (the very first parameter). The string location is the only difference between printf and sprint syntax.

fprintf(FILE *fp, "format", args) is like printf again. Here instead on displaying the data on the monitor, or saving it in some string, the formated data is saved on a file which is pointed to by the file pointer which is used as the first parameter to fprintf. The file pointer is the only addition to the syntax of printf.

If stdout file is used as the first parameter in fprintf, its working is then considered equivalent to that of printf.


yo normalmente uso sprintf para armar la cadena que quiero enviar en un buffer. Luego con alguna funcion propia de la uart se lo mandas al SIM. Si ya tenes configurado el prinf para que use la uart como salida, es buena opcion tambien. El fprintf no lo uso casi nunca, en el ejemplo que te envié usa fprintf, pero no es mio ese código.

saludos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 19 de Mayo de 2016, 10:23:45
para finalizar el mensaje tenes que enviar el caracter CTRL+z o 0x1A

agregá esto al final:
printf("%c", 0x1A);

saludos!

te funcionó esto?

sds.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 19 de Mayo de 2016, 17:56:50
para finalizar el mensaje tenes que enviar el caracter CTRL+z o 0x1A

agregá esto al final:
printf("%c", 0x1A);

saludos!

te funcionó esto?

sds.
si funciono ahora trato de activar algo al recibir un mensaje de sms desde un telefono celular pero no me sale y encima no veo cual es el problema, porque no puedo monitoriar el puerto que tengo conectado a la sis900
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 19 de Mayo de 2016, 20:45:32
Aqui parte del codigo para leer el primer mensaje
Código: [Seleccionar]
while(1){
   delay_ms(1000);
   IF(!(BIT_TEST(PORTA,5)))
   {
   printf("AT+CMGS=\"543xxxxxx\"\r");
   delay_ms(3000);
   printf("HOLA DESDE PIC\r\n");
   printf("%c", 0x1A);
   IF ((Cadena[0]=='+'))
      {
         printf("AT+CMGR=1\r"); //leer sms
         delay_ms(500);//espero a que conteste
         if(Cadena[0]=='P')output_high(PIN_B1);
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 19 de Mayo de 2016, 22:55:47
Código: C
  1. printf("AT+CMGR=1\r"); //leer sms

ese comando no es para leer los mensajes SMS, lo que hace es poner el modo SMS en modo texto.
quizà esto te sirva:
http://www.theengineeringprojects.com/2015/02/receive-sms-commands-using-sim900-arduino.html

la ultima parte del còdigo te lo venden jajaja, pero seguro vas a poder implementar lo que explican. Te manejas bien con el ingles?

sds.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 20 de Mayo de 2016, 11:27:36
Código: C
  1. printf("AT+CMGR=1\r"); //leer sms

ese comando no es para leer los mensajes SMS, lo que hace es poner el modo SMS en modo texto.
quizà esto te sirva:
http://www.theengineeringprojects.com/2015/02/receive-sms-commands-using-sim900-arduino.html

la ultima parte del còdigo te lo venden jajaja, pero seguro vas a poder implementar lo que explican. Te manejas bien con el ingles?

sds.
che gracias por responder, me fije en el manual de la sis900 y ese es el comando para leer pero como ya lo configure para que tire el mensaje como el ejemplo que me diste no lo necesito lo que pasa es que algo esta mal con la recepcion de la cadena de caracteres porque no detecta nada de lo que recibo solo detecto la interrupcion de la uart
Código: [Seleccionar]
void rd_isr(void)//función de interrupción por recepción de datos USART
{
   ch=getc();
   Cadena[i]=ch;
  // putc(ch);
   output_toggle(PIN_B0);
   i++;
   if(i>60)i=0;
}
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   set_tris_b(0x04);            //portb como salida
   set_tris_a(0x20);   //porta como Entrada
   enable_interrupts(int_rda);
   enable_interrupts(GLOBAL);   //activadas interrupciones
   output_Low(PIN_B1);
   output_Low(PIN_B0);
   while(1){
         if((Cadena[0]=='+')&&(Cadena[1]=='C')&&(Cadena[2]=='M')&&(Cadena[3]=='T'))output_high(PIN_B1);
   }
 }
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 20 de Mayo de 2016, 11:41:39
no lo tengo probado, pero yo leo esto:

 AT + CMGF = 1 – This command will convert the message style to text. In other words we are telling our shield that we are expecting a text message.
AT+CNMI=1,2,0,0,0 – This command will alert our GSM shield and now whenever it will receive message, it will automatically send an alert on the serial port.

o sea que para que el módulo te alerte que te ha llegado un mensaje tenes que mandar el comando AT+CNMI=1,2,0,0,0

AT+CNMI: New Message indication to TE

Luego de ese comando el celular queda a la espera de mensaje nuevo y te alertará con algo así:

+CMT: "+14038310195","","14/02/03,13:21:37-28"
y el mensaje

aún no he tenido tiempo de probar todo esto. Si puedo el finde pruebo y te comento como me fue.

sds.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 20 de Mayo de 2016, 17:10:49
El comando es AT+CMGR y el tuyo es AT+CMGF no son los mismos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 20 de Mayo de 2016, 19:50:13
ahhhh, es cierto ahi vi el comando.
Lo unico que se me ocurre es que estes guardando los mensajes una de las memorias y estes tratando de leer en otra memoria.
Estas seguro que tenes mensajes recividos?
yo te sugiero que primero pruebes todo con un terminal serie y luego pases al PIC. O sea, conecta el sim900 con un FTDI (usb a uart) y en la PC ejecuta y prueba los comandos. Luego cuando veas que todos funcionan, pasa al PIC...

saludos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 22 de Mayo de 2016, 18:54:28
GRACIAS por responder ahora estoy tratando de detectar la llegada de un mensaje para ello trato de detectar el + del principio pero no anda, cual es el caracter que manda la sis900 despues de cada linea es el 0x0d o el 0x1a? no entendi lo que dice sobre eso la pagina que me recomendaste
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 23 de Mayo de 2016, 08:53:13

Next thing I need to do is make sure that I have got the complete string, that was really a tricky part as there’s no end character in the string.
So, I used “\n” null character for that. If you check the string then you can see that we are getting two null characters in complete string.


Por lo visto hay dos caracteres fin de linea \n en la respuesta del modulo... Mas tarde voy a ver si armo el shield y lo pruebo...

Saludos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 23 de Mayo de 2016, 18:59:54
Fijate si lo poder resolver y me avisas, estoy estancado con eso
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: KILLERJC en 23 de Mayo de 2016, 19:21:31
Fijate si lo poder resolver y me avisas, estoy estancado con eso

Y no podes conectarlo a un USB/TTL y ver el hexa que te da cuando te envia algo? para saber que caracteres de mas envia ?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 24 de Mayo de 2016, 10:18:03
Si puedo ver que manda pero como son caracteres no imprimibles no se lo que envia al final de cada linea
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 24 de Mayo de 2016, 11:21:27
Ahí probe el módulo para recivir SMS
Yo lo conecté con un FTDI a la PC y con un programa terminal envío comandos.
Esta es la captura de pantalla:

https://www.dropbox.com/s/ljofiuyz0v8n2ll/Captura%20de%20pantalla%202016-05-24%2011.17.24.png?dl=0

Primero pido que me diga cuanta señal tengo y me responde con 6 (poca señal)
Luego configuro los SMS en modo texto
Luego pido que me alerte cuando llega un mensaje nuevo y me responde OK
Finalmente con el celu mío mando un SMS y al rato, sin que toque nada en el terminal me aparece el mensaje.
El carctaer de fin de línea es \n

Espero te sirva.
Sino, vas a tener que poner el código completo para que lo veamos y podamos ayudarte mejor.

Sds.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 24 de Mayo de 2016, 12:29:05
 codigo completo
Código: [Seleccionar]
#include <16F88.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES PUT                      //Power Up Timer
#FUSES PROTECT                  //Code protected from reads
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#byte PORTA=0X05
#use delay(int=4000000,RESTART_WDT)
#use rs232(uart1, baud=9600)//usart1 -->ajuste de XMIT y RCV para la USART 1
int i=0,j=0;
char Cadena[60]="";
char ch;
int1 LineaPresente=0;
#int_rda
void rd_isr(void)//función de interrupción por recepción de datos USART
{
   output_toggle(PIN_B0);
   LineaPresente=0;
   ch=getc();
   Cadena[i]="";
   Cadena[i]=ch;
   i++;
   if(i>=60)i=0;
   if(ch==0x1a)
   {
   i=0;
   LineaPresente=1;
   }
}

void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   set_tris_b(0x04);            //portb como salida
   set_tris_a(0x20);   //porta como Entrada
   enable_interrupts(int_rda);
   enable_interrupts(GLOBAL);   //activadas interrupciones
   output_Low(PIN_B1);
   output_Low(PIN_B0);
   while(1){
   delay_ms(500);
   if((LineaPresente==1)&&(Cadena[0]=='+'))output_high(PIN_B1);
   putc(Cadena[0]);
  }
 }
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 24 de Mayo de 2016, 13:28:30
me parece que tenes que esperar por '\n' en vez de por 0x1A como indicador de fin de línea:

Código: C
  1. if(ch==0x1a)
  2.    {
  3.       i=0;
  4.       LineaPresente=1;
  5.    }

por esto:

Código: C
  1. if(ch=='\n')
  2.    {
  3.       i=0;
  4.       LineaPresente=1;
  5.    }

no me termina de cerrar la forma de ese if para detectar línea presente y luego ver si Cadena[0] es el símbolo +...
el tema es que cuando vos pones LineaPresente en 1 pones i en 0, entonces si en el main vos estas en el delay 500 cuando sucede esto, el proximo caracter que entre se va a grabar en Cadena[0], pisando el caracter + que habías almacenado antes.

no se si me explico bien en esta parte...

Cual sería la funcionalidad completa de tu sistema, más que nada la parte del SIM900?

Saludos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 24 de Mayo de 2016, 18:55:51
por el mometo es solo un codigo de prueba pero la idea es poder activaer algo con un sms y cosas como esa, me voy a fijar lo que me decis y te aviso. gracias
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 25 de Mayo de 2016, 09:57:49
cambie el codigo como me propusieron pero no funciono, como harian la deteccion de la cadena de caracteres?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 25 de Mayo de 2016, 10:03:04
si ejecutas el comando AT+CMGL="ALL" que te devuelve?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 25 de Mayo de 2016, 10:36:16
Primero hay que entender como funciona la llegada de los mensajes SMS.
Para eso está el comando AT-CNMI:
AT+CNMI: New Message indication to TE

Tiene cinco parámetros y si bien no entiendo bien todos ellos, puedo decirte que con los primeros 2 configuras la accion que va a tomar el SIM cuando llegue un mensaje nuevo.
El primer parámetro dice los siguiente:
Código: C
  1. <mode>:
  2. 0: buffer in TA;
  3. 1: discard indication and reject new SMs when TE-TA link is reserved; otherwise forwarddirectly;
  4. 2: buffer new Sms when TE-TA link is reserved and flush them to TE after reservation; otherwise forward directly to the TE;
  5. 3: forward directly to TE;

Creo que TE refiere al terminal Serie del SIM900. Entonces poniendo el código 2 o 3 como primer parámetro va a hacer que al llegar un nuevo mensaje, se transmita al puerto serie (que vos estás monitoreando) tal cual como llega. En el caso del 2 hay alguna consideracion, pero no vale la pena explicarlo creo.

El segundo parámetro dice:
Código: C
  1. <mt>:
  2. 0: no SMS-DELIVER are routed to TE;
  3. 1: +CMTI: <mem>,<index> routed to TE;
  4. 2: for all SMS_DELIVERs except class 2: +CMT: .... routed to TE;
  5. class 2 is indicated as in <mt>=1;
  6. 3: Class 3: as in <mt>=2;
  7. other classes: As in <mt>=1;
No entiendo bien que es Class 2 o 3, pero poniendo el valor 2 o 3 como segundo parámetro va a hacer que se te envíe "+CMT: "SM", 1....." al puerto serie.

Entonces si o si, en la configuracion del modem ni bien lo encendes tenes que ejecutar 2 comandos:

AT + CMGF = 1
AT+CNMI=2,2,0,0,0

sin esto nada te va a funcionar como corresponde.

Luego tenes que nota que hay 2 tipos de mensajes que el SIM900 te va a dar por el puerto serie.
Un tipo es la respuesta a un comando que vos mandaste y que generalmente es OK o ERROR. Este tipo de respuesta lo vas a esperar siempre despues de enviar un comando al SIM900. De cierta forma es sincrònico con tu aplicacion, vos mandas un mensaje y enseguida esperas la respuesta.
El otro tipo de mensaje es asincrónico y puede llegar en cualqueir momento. Es la llegada de un nuevo mensaje. Esos datos que va arecivir el puerto serie van a llegar en culquier momento.

Otro tema es el fin de línea del SIM900. Al poner el terminal en la PC en modo HEX, yo veo que cuando el módulo manda OK en realidad manda OK + 13 + 10 (en decimal) que corresponedn a CR y LF o '\n' y '\r'. O sea que el final de cada línea de mensjae del SIM está determinado por esos 2 caracteres.

Bueno, ahora yo para arrancar no usaría interrupcion para el puerto serie. Porque usar interrupcion te obliga a llevar buffer's, analizarlos despues, resetearlos, etc.

Yo usaría las funciones de CCS que te permitan leer de a 1 línea completa, creo que gets es la funcion en CCS.

Entonces en las primeras lineas del codigo configuraría el SIM enviando los dos comandos que te comenté arriba y despues de cada uno de esos comandos leería una línea del puerto serie y verificaría si reciví OK o ERROR.
Por ejemplo

respuesta[100];
mensaje[100];
puts("AT + CMGF = 1\n") o printf o lo que uses para sacar datos por el puerto serie
respuesta=gets()
if(respuesta[0]=='O' && respuesta[1]== 'K')
   puts("AT+CNMI=2,2,0,0,0\n") o printf o lo que uses para sacar datos por el puerto serie
   respuesta=gets()
   if(respuesta[0]=='O' && respuesta[1]== 'K')
       respuesta=gets() // Acá el programa se va a quedar clavado esperando una línea en el puerto serie
       if(respuesta[0]=='+' && respuesta[1]== 'C'... 'M' .....  'T')
          //Reciví un mensaje, en la siguiente línea del puerto serie viene el mensaje
          mensaje=gets();
          if(mensaje[0]=='#' && respuesta[1]== 'A'... '0')
             // si el mensaje enviado es #A0 apago la salida A0
          ............
         ............
else
   error

bueno, esa es la idea... hay que pasarla a código CCS... si lo vas haciendo y probando avisanos y lo revisamos.

Saludos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 25 de Mayo de 2016, 17:39:36
Aca esta el codigo para detectar el ring de una llamada entrante:
Código: [Seleccionar]
#include <16F88.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES PUT                      //Power Up Timer
#FUSES PROTECT                  //Code protected from reads
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#byte PORTA=0X05
#use delay(int=4000000,RESTART_WDT)
#use rs232(uart1, baud=9600)//usart1 -->ajuste de XMIT y RCV para la USART 1
int i=0,j=0;
char Mensaje[60]="",Respuesta[60]="";
char ch;
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   set_tris_b(0x04);           
   set_tris_a(0x20);   
   output_Low(PIN_B1);
   output_Low(PIN_B0);
   while(1){
   printf("AT+CMGF=1\n");
   gets(Respuesta);
   if((respuesta[0]=='O')&&(respuesta[1]=='K'))printf("AT+CNMI=2,2,0,0,0\n");
   if((respuesta[0]=='O')&&(respuesta[1]=='K'))gets(Respuesta);
   if (Respuesta[0]=='R')output_high(PIN_B1);///detecta llamada entrante
   //if((respuesta[0]=='+' && respuesta[1]=='C')&&(respuesta[2]=='M')&&(respuesta[3]=='T'))gets(Mensaje);
   //if(mensaje[0]=='P')output_high(PIN_B1);
     }
 }
como vos me lo diste
conecte el pic al adaptador usart y probe y se queda estancado en el OK que no reconoce nunca hace at+cnmi=2,0,0,0
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 25 de Mayo de 2016, 18:41:38
por que a veces usas respuesta y otras veces Respuesta? no te da error eso?

Esa forma de còdigo es la que yo te digo que es la màs facil. Mandas comando y luego haces un gets para recivir la respuesta. Ojo que yo no sé si es gets la orden en CCS para recivir una linea completa por el uart.

El primer ejemplo bàsico que tenes que hacer es enviar el comando AT solo y esperar el OK del SIM900. Si haces andar eso ya tendrìas la base para el resto.

Saludos!
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 26 de Mayo de 2016, 18:47:15
por que a veces usas respuesta y otras veces Respuesta? no te da error eso?

Esa forma de còdigo es la que yo te digo que es la màs facil. Mandas comando y luego haces un gets para recivir la respuesta. Ojo que yo no sé si es gets la orden en CCS para recivir una linea completa por el uart.

El primer ejemplo bàsico que tenes que hacer es enviar el comando AT solo y esperar el OK del SIM900. Si haces andar eso ya tendrìas la base para el resto.

Saludos!
No me da error
este codigo a veces anda si simulo la sis900 con un adaptador uart
Código: [Seleccionar]
#include <16F88.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES PUT                      //Power Up Timer
#FUSES PROTECT                  //Code protected from reads
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#byte PORTA=0X05
#use delay(int=4000000,RESTART_WDT)
#use rs232(uart1, baud=9600)//usart1 -->ajuste de XMIT y RCV para la USART 1
int i=0, j=0;
char Cadena[60]="";
char ch;
int1 LineaPresente=0;
#int_rda
void rd_isr(void)//función de interrupción por recepción de datos USART
{
   output_toggle(PIN_B0);
   LineaPresente=0;
   ch=getc();
   Cadena[i]=0x00;
   Cadena[i]=ch;
   i++;
   if(i>=60)i=0;
}

void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   set_tris_b(0x04);            //portb como salida
   set_tris_a(0x20);   //porta como Entrada
   enable_interrupts(int_rda);
   enable_interrupts(GLOBAL);   //activadas interrupciones
   output_Low(PIN_B1);
   output_Low(PIN_B0);
   while(1){
   printf("AT\n");
   delay_ms(2000);
   if((Cadena[0]=='O')&&(Cadena[1]=='K'))
   {
   for (j=1;j<=60;++j)Cadena[j]=0x00;
   output_toggle(PIN_B1);
   }
  }
 }
pero si conecto la sis no anda
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 26 de Mayo de 2016, 19:03:01
no entiendo. que sería simular la SIS con un adaptor uART?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 26 de Mayo de 2016, 20:40:15
no entiendo. que sería simular la SIS con un adaptor uART?
tengo un conversor uart a ttl y lo uso para ver lo que manda la sis900 o simularla, donde puedo ver lo que le manda el pic y responderle en algunos casos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 26 de Mayo de 2016, 21:43:31
te funciona algun ejemplo conectando SIM900 al uC?

sds.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 27 de Mayo de 2016, 09:46:28
Si me funciona, puedo hacer llamadas y mandar mensajes con el pic pero no puedo detectar el ok de la sis
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 27 de Mayo de 2016, 09:53:18
Un problema que he detectado es que si el sis me envia otros caracteres antes del OK no lo detecta al OK
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 27 de Mayo de 2016, 09:55:40
podrías poner el código que usas para hacer llamadas?
Una foto del conexionado tambien ayudaría a ver donde puede estar el problema. Estas conectando Tx del SIM al Rx del uC y el Rx del SIM al Tx del micro y unis los GND, verdad?
Aparentemente podes enviar comandos con el uC al SIM, pero no podes leer lo que el SIM te responde... Como si una de las conexiones del puerto serie no esten bien... Por favor, pone esas dos cosas asi vemos si lo resolvemos.

Sds.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 27 de Mayo de 2016, 11:03:14
si tengo conectadas las masas y rx con tx, aqui el codigo para llamar:
Código: [Seleccionar]
#include <16F88.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //Internal RC Osc
#FUSES PUT                      //Power Up Timer
#FUSES PROTECT                  //Code protected from reads
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#byte PORTA=0X05
#use delay(int=4000000,RESTART_WDT)
#use rs232(uart1, baud=9600)//usart1 -->ajuste de XMIT y RCV para la USART 1
int i=0;
char Cadena[60]="";
char ch;
#int_rda
void rd_isr(void)//función de interrupción por recepción de datos USART
{
   ch=getc();
   Cadena[i]=ch;
   putc(ch);
   output_toggle(PIN_B0);
   i++;
   if(i>60)i=0;
}
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   set_tris_b(0x06);            //portb como salida
   set_tris_a(0x20);   //porta como Entrada
   enable_interrupts(int_rda);
   enable_interrupts(GLOBAL);   //activadas interrupciones
   output_Low(PIN_B1);
   output_Low(PIN_B0);
   while(1){
   delay_ms(1000);
   IF(!(BIT_TEST(PORTA,5)))
   {
   printf("ATD03496xxxxxx0;\r\n");
   }
no pongo foto de la placa porque esta todo conectado con cables y no se va a distinguir nada
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 27 de Mayo de 2016, 11:29:09
Proba esto:

Código: C
  1. #include <16F88.h>
  2. #FUSES NOWDT                    //No Watch Dog Timer
  3. #FUSES INTRC                    //Internal RC Osc
  4. #FUSES PUT                      //Power Up Timer
  5. #FUSES PROTECT                  //Code protected from reads
  6. #FUSES NOBROWNOUT               //No brownout reset
  7. #FUSES NOMCLR                   //Master Clear pin used for I/O
  8. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  9. #FUSES NOCPD                    //No EE protection
  10. #byte PORTA=0X05
  11.  
  12. #use delay(int=4000000,RESTART_WDT)
  13. #use rs232(uart1, baud=9600)//usart1 -->ajuste de XMIT y RCV para la USART 1
  14.  
  15. int i=0;
  16. char Cadena[60]="";
  17. char ch;
  18.  
  19. #int_rda
  20. void rd_isr(void)//función de interrupción por recepción de datos USART
  21. {
  22.         ch=getc();
  23.         Cadena[i]=ch;
  24.         output_toggle(PIN_B0);
  25.         i++;
  26.         if(i>60)
  27.                 i=0;
  28. }
  29.  
  30. void main()
  31. {
  32.         setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  33.         setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
  34.         setup_timer_2(T2_DISABLED,0,1);
  35.         setup_ccp1(CCP_OFF);
  36.         setup_comparator(NC_NC_NC_NC);
  37.         set_tris_b(0xDC);                       //portb como salida
  38.         set_tris_a(0x20);               //porta como Entrada
  39.         enable_interrupts(int_rda);
  40.         enable_interrupts(GLOBAL);   //activadas interrupciones
  41.        
  42.         output_Low(PIN_B1);
  43.         output_Low(PIN_B0);
  44.        
  45.         printf("AT\r\n");
  46.         i=0;
  47.         delay_ms(1000);
  48.         if(Cadena[0] == 'O' && Cadena[1] == 'K')
  49.                 output_high(PIN_B1);
  50.        
  51.         while(1)
  52.         {
  53.         }
  54. }

EDITADO: Corregi el TRIS_B para que tengas las salidas/entradas bien configuradas
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 27 de Mayo de 2016, 11:54:53
no me funciona.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 27 de Mayo de 2016, 13:05:47
me podrías decir que cosas tienes conectado a cada pin del micro?

sds.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 27 de Mayo de 2016, 13:40:41
podrias adjuntar el archivo 16F88.h por favor?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 27 de Mayo de 2016, 13:46:45
si tengo conectadas las masas y rx con tx...

tenes 3 cables conectados, verdad?
GND uC -> GND SIM
TX uC -> Rx SIM
y Rx uC -> Tx SIM, verdad?

saludos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 27 de Mayo de 2016, 19:17:30
me podrías decir que cosas tienes conectado a cada pin del micro?

sds.
el micro tiene conectado un pulsador a vss en a5 y de los pines de uart del micro sale al sis 900 rx con tx y viceversa, las masas las uni la vss del micro con gnd de  sis
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 27 de Mayo de 2016, 19:19:52
El archivo del 16f88.h es el que viene por defecto en el compilador
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 27 de Mayo de 2016, 22:02:25
Tenés los led conectados en B0 y B1?
Que pin es RX del micro y que pin TX en el micro?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 28 de Mayo de 2016, 09:46:16
Tengo conectado 2 leds a rb0 y rb1, los pines del micro son rb2 rx y rb5 tx, no hay duda de que esta funcionando la uart porque si le conecto el adaptador al uC este me tira el comando AT que esta programado
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 28 de Mayo de 2016, 11:44:20
Vamos por parte dijo Jack...

Proba esto:

Código: C
  1. #include <16F88.h>
  2. #FUSES NOWDT                    //No Watch Dog Timer
  3. #FUSES INTRC                    //Internal RC Osc
  4. #FUSES PUT                      //Power Up Timer
  5. #FUSES PROTECT                  //Code protected from reads
  6. #FUSES NOBROWNOUT               //No brownout reset
  7. #FUSES NOMCLR                   //Master Clear pin used for I/O
  8. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  9. #FUSES NOCPD                    //No EE protection
  10. #byte PORTA=0X05
  11.  
  12. #use delay(int=4000000,RESTART_WDT)
  13. #use rs232(uart1, baud=9600)//usart1 -->ajuste de XMIT y RCV para la USART 1
  14.  
  15. int i=0;
  16. char Cadena[60]="";
  17. char ch;
  18.  
  19. #int_rda
  20. void rd_isr(void)//función de interrupción por recepción de datos USART
  21. {
  22.         ch=getc();
  23.         Cadena[i]=ch;
  24.         output_toggle(PIN_B0);
  25.         i++;
  26.         if(i>60)
  27.                 i=0;
  28. }
  29.  
  30. void main()
  31. {
  32.         setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  33.         setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
  34.         setup_timer_2(T2_DISABLED,0,1);
  35.         setup_ccp1(CCP_OFF);
  36.         setup_comparator(NC_NC_NC_NC);
  37.         set_tris_b(0b11011100);    //RB0 y 1 como salida para LED. RB5 como salida para Tx
  38.         set_tris_a(0x20);               //porta como Entrada
  39.         enable_interrupts(int_rda);
  40.         enable_interrupts(GLOBAL);   //activadas interrupciones
  41.        
  42.         output_high(PIN_B1);      // Testeo de los LED funcionando
  43.         output_high(PIN_B0);
  44.         delay_ms(1000);
  45.         output_toggle(PIN_B1);    // Testeo de toggle
  46.         output_toggle(PIN_B0);
  47.        
  48.         printf("AT\r\n");
  49.         i=0;
  50.         delay_ms(1000);
  51.         if(Cadena[0] == 'O' && Cadena[1] == 'K')
  52.                 output_high(PIN_B1);
  53.        
  54.         while(1)
  55.         {
  56.         }
  57. }

a 9600 bps tenes que cada bit tarda 104useg, Recibir la letra O lleva 10 bits -> 10mseg. O sea que cuando recivas el OK el led va a encenderse por 10mseg y luego a apagarse otra vez. Presta atension a ver si se enciende...
Si el led no se enciende, entonces no te esta andando la recepcion de caracteres, que es lo que creo que no te funciona. Si no notas que el led se enciende y se apaga enseguida entonces cambia a esto:

Código: C
  1. #include <16F88.h>
  2. #FUSES NOWDT                    //No Watch Dog Timer
  3. #FUSES INTRC                    //Internal RC Osc
  4. #FUSES PUT                      //Power Up Timer
  5. #FUSES PROTECT                  //Code protected from reads
  6. #FUSES NOBROWNOUT               //No brownout reset
  7. #FUSES NOMCLR                   //Master Clear pin used for I/O
  8. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  9. #FUSES NOCPD                    //No EE protection
  10. #byte PORTA=0X05
  11.  
  12. #use delay(int=4000000,RESTART_WDT)
  13. #use rs232(uart1, baud=9600)//usart1 -->ajuste de XMIT y RCV para la USART 1
  14.  
  15. int i=0;
  16. char Cadena[60]="";
  17. char ch;
  18.  
  19. #int_rda
  20. void rd_isr(void)//función de interrupción por recepción de datos USART
  21. {
  22.         ch=getc();
  23.         Cadena[i]=ch;
  24.         output_high(PIN_B0);
  25.         i++;
  26.         if(i>60)
  27.                 i=0;
  28. }
  29.  
  30. void main()
  31. {
  32.         setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  33.         setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
  34.         setup_timer_2(T2_DISABLED,0,1);
  35.         setup_ccp1(CCP_OFF);
  36.         setup_comparator(NC_NC_NC_NC);
  37.         set_tris_b(0b11011100);    //RB0 y 1 como salida para LED. RB5 como salida para Tx
  38.         set_tris_a(0x20);               //porta como Entrada
  39.         enable_interrupts(int_rda);
  40.         enable_interrupts(GLOBAL);   //activadas interrupciones
  41.        
  42.         output_high(PIN_B1);      // Testeo de los LED funcionando
  43.         output_high(PIN_B0);
  44.         delay_ms(1000);
  45.         output_toggle(PIN_B1);    // Testeo de toggle
  46.         output_toggle(PIN_B0);
  47.        
  48.         printf("AT\r\n");
  49.         i=0;
  50.         delay_ms(1000);
  51.         if(Cadena[0] == 'O' && Cadena[1] == 'K')
  52.                 output_high(PIN_B1);
  53.        
  54.         while(1)
  55.         {
  56.         }
  57. }

de ese modo cuando recivas un caracter se va a encender el led y quedará encendio.

Arrancá con eso y si el led en el RB0 no hace lo que esperamos vemos como seguir.

sds.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: MGLSOFT en 28 de Mayo de 2016, 11:51:29

a 9600 bps tenes que cada bit tarda 104useg, Recibir la letra O lleva 10 bits -> 10mseg. O sea que cuando recivas el OK el led va a encenderse por 10mseg y luego a apagarse otra vez. Presta atension a ver si se enciende...


En realidad va a encender 1 milisegundo (104 useg x 10 = 1040 useg, igual a 1 mseg) solamente, no creo que puedas ver ese destello, es muy poco tiempo, aunque ya lo eran 10 mseg.
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 28 de Mayo de 2016, 11:58:12

a 9600 bps tenes que cada bit tarda 104useg, Recibir la letra O lleva 10 bits -> 10mseg. O sea que cuando recivas el OK el led va a encenderse por 10mseg y luego a apagarse otra vez. Presta atension a ver si se enciende...


En realidad va a encender 1 milisegundo (104 useg x 10 = 1040 useg, igual a 1 mseg) solamente, no creo que puedas ver ese destello, es muy poco tiempo, aunque ya lo eran 10 mseg.

bien ahi!!! entonces proba directamente el segundo programa, el que al recivir un caracter enciende y deja encendido el LED....

La otra es probar con esto:

Código: C
  1. #include <16F88.h>
  2. #FUSES NOWDT                    //No Watch Dog Timer
  3. #FUSES INTRC                    //Internal RC Osc
  4. #FUSES PUT                      //Power Up Timer
  5. #FUSES PROTECT                  //Code protected from reads
  6. #FUSES NOBROWNOUT               //No brownout reset
  7. #FUSES NOMCLR                   //Master Clear pin used for I/O
  8. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  9. #FUSES NOCPD                    //No EE protection
  10. #byte PORTA=0X05
  11.  
  12. #use delay(int=4000000,RESTART_WDT)
  13. #use rs232(uart1, baud=9600)//usart1 -->ajuste de XMIT y RCV para la USART 1
  14.  
  15. int i=0;
  16. char Cadena[60]="";
  17. char ch;
  18.  
  19. #int_rda
  20. void rd_isr(void)//función de interrupción por recepción de datos USART
  21. {
  22.         ch=getc();
  23.         putc(ch);
  24. }
  25.  
  26. void main()
  27. {
  28.         setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  29.         setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_4 );
  30.         setup_timer_2(T2_DISABLED,0,1);
  31.         setup_ccp1(CCP_OFF);
  32.         setup_comparator(NC_NC_NC_NC);
  33.         set_tris_b(0b11011100);    //RB0 y 1 como salida para LED. RB5 como salida para Tx
  34.         set_tris_a(0x20);               //porta como Entrada
  35.         enable_interrupts(int_rda);
  36.         enable_interrupts(GLOBAL);   //activadas interrupciones
  37.        
  38.         output_high(PIN_B1);      // Testeo de los LED funcionando
  39.         output_high(PIN_B0);
  40.         delay_ms(1000);
  41.         output_toggle(PIN_B1);    // Testeo de toggle
  42.         output_toggle(PIN_B0);
  43.              
  44.         while(1)
  45.         {
  46.         }
  47. }

con un FTDI... lo que que escrivas en el terminal se te reenviará... de ese modo podes ver que funcionen las dos lineas... pero siempre esta el posible problema que el TX del SIS no llegue al conector donde pones el cable que va al RX del uC...
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 28 de Mayo de 2016, 16:18:42
Probe los dos programas,el primero no me dio resultado, con el segundo de elgarbe el led de b0 queda prendido
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 28 de Mayo de 2016, 16:25:49
al arrancar los dos led encienden luego se apagan y finalente se enciende solo el B0?

sds
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 28 de Mayo de 2016, 17:04:15
al arrancar los dos led encienden luego se apagan y finalente se enciende solo el B0?

sds
Si pasa eso
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 28 de Mayo de 2016, 17:08:26
si sacas el sis900 y pones un ftdi al arrancar el prograa en la terminal te aparece el mensaje AT?
si es así si en la terminal una vez recivido AT tu envías OK no se enciende el led B1?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 28 de Mayo de 2016, 17:39:53
si sacas el sis900 y pones un ftdi al arrancar el prograa en la terminal te aparece el mensaje AT?
si es así si en la terminal una vez recivido AT tu envías OK no se enciende el led B1?
NO enciende el led pero no me deja mandar nada al puerto solo se ve el comando at al principio a lo mejor esta quemado el pic
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 28 de Mayo de 2016, 17:56:11
Cambie de PIC y tampoco funciona
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 28 de Mayo de 2016, 19:25:13
NO enciende el led pero no me deja mandar nada al puerto

que significa que n te deja mandar nada al puerto????
que software terminal estas usando?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 28 de Mayo de 2016, 19:49:08
eS Como que no me deja mandar nada , uso el sscom32
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 31 de Mayo de 2016, 18:39:19
hola a todos despues de mucho probar de avanzar y retroceder logre que encienda el led al prender la sis 900, seguire avanzando, gracias a todos
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: elgarbe en 31 de Mayo de 2016, 18:55:05
la solucion cual fue?
Título: Re:No puedo MANDAR mensajes desde modulo gprs
Publicado por: soymoe en 01 de Junio de 2016, 10:27:20
la solucion cual fue?
Volvi a armar todo de nuevo en la protoboard y recurri a un codigo que me habia funcionado a medias antes igual todavia me queda poder leer un sms