TODOPIC
FORO TÉCNICO => Telefonía, GPS y Microcontroladores => Mensaje iniciado por: paulo199 en 01 de Abril de 2008, 21:36:55
-
Hola amigos del foro, espero no molestarlos. Mi duda es la siguiente, estoy realizando un prototipo el cual deve tomar lecturas(humedad, Tº y pH), la idea es q estas lecturas llegen a un telefono movil atraves de msm pre-establecidos, el problema es que este proyecto esta orientado para estar en la interperie mas especificamente entre alguna plantacion. Mi idea seria comunicar el pic con el modem gsm(se puede??, y si es asi como hago para enviar los msm?, donde los guardo??)), no me interesa recibir nada solo enviar los datos
les agradecere mucho su ayuda :-/
-
Hola, si se puede, necesitas una UART en el micro y con comandos AT lo manejas, es bastante sencillo. Que Modem tenes ?
Saludos !
-
como le comento el colega Richi777, aplicando comandos at se puede enviar sms via modem y mejor aun todo lo puedo testiar con su modem y el hyperterminar de windows, luego que tenga todo claro de como funciona los comando at puede empezar hacer las pruebas con el pic y como ya es dicho con el colega richi777 tuiene que usar protocolo serial entre el pic y el modem.
saludos y aca estamos a la ordem para continuar.
-
hola gente: estoy empezando en esto de usar un modem GSM con PIC y ando buscando ejemplos basicos de programas para enviar y recibir mensajes de texto mediante un pic (de la gama 16F o 18F) con un modem motorola g24, tengo en claro que esto se debe hacer mediante el puerto serie del pic con comandos AT,o en su defecto con una aplicacion JAVA cargada en el modem pero no tengo en claro como es la secuencia basica de comandos para lograr esto, si alguien me puede dar una idea de donde puedo encontrar algun ejemplo de programa en JAVA o en comandos AT se lo agradeceria. desde ya muchas gracias
-
hola gente: estoy empezando en esto de usar un modem GSM con PIC y ando buscando ejemplos basicos de programas para enviar y recibir mensajes de texto mediante un pic (de la gama 16F o 18F) con un modem motorola g24, tengo en claro que esto se debe hacer mediante el puerto serie del pic con comandos AT,o en su defecto con una aplicacion JAVA cargada en el modem pero no tengo en claro como es la secuencia basica de comandos para lograr esto, si alguien me puede dar una idea de donde puedo encontrar algun ejemplo de programa en JAVA o en comandos AT se lo agradeceria. desde ya muchas gracias
hola,
tienes algún sdk de motorola o alguna forma de conectar tu modem a la serial de tu PC o adaptador serie?
s2.
-
hola,
tienes algún sdk de motorola o alguna forma de conectar tu modem a la serial de tu PC o adaptador serie?
s2.
todavia no tengo el modem pq lo compre via internet y no me ha llegado , pero si contaria con una conexion a la pc via puerto serie para usar un sdk de motorola y poder programarlo
-
entonces una ves lo tengas conectado la midad del trabajo ya esta hecho
cuando se hace una machina de estado para comunicarse con un modem hay que tener en cuenta los tiempos de respuesta del modem
por esto siempre hay que probar bien el modem atreves de el puerto serie de tu PC
una vez tengas las ideas claras sobre como comunicarte con el puedes trasladar el código a tu PIC
no es una tarea compleja y empezare por pasarte algo de código porque te hagas una idea
estos son los comandos basicos para iniciar configurar y enviar un SMS
#define GSM_CMD_AT (0x8000) //AT
#define GSM_CMD_DEFAULT (0x8201) //AT&F (Default configuration)
#define GSM_CMD_SAVE (0x8202) //AT&W (save the configuration)
#define GSM_CMD_RESET (0x8407) //AT$RESET (Reset Stack Module)
#define GSM_RQST_GSMREG_STATUS (0xA103) //AT+CREG? (status GSM registration)
#define GSM_SET_GSMREG_STATUS (0x9103) //AT+CREG=x (status GSM registration)
#define GSM_SETNUM_SMS (0x9104) //AT+CMGS="xx" (set SMS number)
#define GSM_WRITE_SMS (0x5000) //xxx ^z (write SMS text + send)
#define GSM_SERVICE_NR (0x9109) //AT+CSCA="xxx.."(set service number)
#define GSM_ECHO_OFF (0x8005) //ATE0 (ECHO OFF COMMAND)
#define GSM_SEARCH_SIM (0xA106) //AT+CPIN? (REQUEST PIN MODE)
#define GSM_SET_PIN (0x9106) //AT+CPIN="XXXX" (SEND PIN VALUE)
#define GSM_IMEI (0x8108) //AT+GSN (REQUEST IMEI NUMBER)
UInt16 maskATcmd[8]={ 0x8000,
0x0100,
0x0200,
0x0400,
0x0800,
0x1000,
0x2000,
0x4000};
//80 01 02 02 08 10 20 40
const char *GSMstaticSet[7]={"AT","+","&&","$","%","=","?"};
const char *GSMmacro[10]={"\0", //00
"F\0", //01
"W\0", //02
"CREG\0", //03
"CMGS\0", //04
"E0\0", //05
"CPIN\0", //06
"RESET\0", //07
"GSN\0", //08
"CSCA\0" //09
};
const char *GSMmacroIn[8]={" \0", //00
"OK\0", //01
"ERROR\0", //02
"SIM PIN\0", //03
"READY\0", //04
"+CREG:\0", //05
"SIM\0", //06
"PIN\0" //07
};
este es el sintetizador de comandos es un methodo que uso en mis maquinas
void GSMsendCmd(UInt16 cmd, UInt16 delay, Pointer value, UInt8 len,Bool isStr)
{
char _tempStr[200]={0x0};
UInt8 _tempIdx=0;
UInt8 ix=0;
Byte _idxMacro=0;
Pointer _tempChar=0;
Pointer _savePointer1= (Pointer) GSMstaticSet;
breakpoint();
ResetGSMallqueueList();
if(cmd & maskATcmd[GSM_IDXCMD1])
{//AT
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD1];
_tempStr[_tempIdx++]=*_savePointer1++;
_tempStr[_tempIdx++]=*_savePointer1++;
}
if(cmd & maskATcmd[GSM_IDXCMD2])
{ //+
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD2];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(cmd & maskATcmd[GSM_IDXCMD3])
{//&
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD3];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(cmd & maskATcmd[GSM_IDXCMD4])
{//$
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD4];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(cmd & maskATcmd[GSM_IDXCMD5])
{//%
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD5];
_tempStr[_tempIdx++]=*_savePointer1;
}
_idxMacro = (Byte)cmd & 0x00FF;
if(_idxMacro)
{
_tempChar = (Pointer) GSMmacro[_idxMacro];
for(ix=0;ix<6;ix++)
{
if(isPrint(*_tempChar))
_tempStr[_tempIdx++]=*_tempChar++;
else break;
}
}
if(cmd & maskATcmd[GSM_IDXCMD6])
{
if(!(cmd & maskATcmd[GSM_IDXCMD8]))
{//=
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD6];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(isStr)_tempStr[_tempIdx++]='"';
while(len--)//import value
{
if(isPrint(*value))
_tempStr[_tempIdx++]=*value++;
}
if(isStr)_tempStr[_tempIdx++]='"';
}
breakpoint();
if(cmd & maskATcmd[GSM_IDXCMD7])
{//?
_savePointer1= (Pointer) GSMstaticSet[GSM_IDXCMD7];
_tempStr[_tempIdx++]=*_savePointer1;
}
if(cmd & maskATcmd[GSM_IDXCMD8])//^z
_tempStr[_tempIdx++]=GSM_SUB;
else
_tempStr[_tempIdx++]=GSM_CR;//\r
breakpoint();
#if defined (_GSMDEBUG_)
DputsRS485(_tempStr);
#endif
GSM_CTS(1);
putsUART2(_tempStr);
while(BusyUART2());
GSM_CTS(0);
secureON=False;
if(delay)DelayMs(delay);
breakpoint();
}
y con añadir una pequeña machina de estado puedes enviar los comandos que quieres a tu modem
aqui un ejemplo de envio sms
GSMsendCmd(GSM_SETNUM_SMS,0,"00391112223344",14,True);
GSMsendCmd(GSM_WRITE_SMS,0,"hola soy yo",11,False);
asi de simple
veras que una vez conectado tu modem y siguiendo los pasos de el manual consigues en pocos minutos enviar tu sms
saludos
-
Gracias por la ayuda micronoob, estudiare el codigo que me diste y en cuanto me llegue el modem comienzo con las pruebas
Saludos :lol:
-
Gracias por la ayuda micronoob, estudiare el codigo que me diste y en cuanto me llegue el modem comienzo con las pruebas
Saludos :lol:
de nada
recuerda que es solo una parte del codigo y hay llamadas a defines y funciones no publicadas
cuando llege tu modem me comentas y seguimos
Saludos.
-
Yo tengo listo mi modem(huawei) y mi pic(16F876A) listo; mi pregunta que pines del modem uso; el modem solo tiene cuatro pines(conector usb) VCC, GND, D+ y D-; ya hice pruebas con aplicacion que me hice para enviar sms desde la pc y todo va de maravilla. Este modem trabaja de forma serial; pero tiene conector usb
Ahora me pregunta es necesito el max 232 para conectarlo al pic o lo conecto directamente a los pines de TX y RX, y si es asi; cuales pines del modem lo conecto.
El modem es de este tipo:
http://ren-ben.en.alibaba.com/product/385564685-200183795/Huawei_e173_3g_usb_modem_hsdpa.html
-
Estimado Coarites.
Me temo que el modem que has adquirido no lo puedes conectar a un PIC 16F876A.
Para tu conocimiento todo USB trabaja en forma serial, pero el protocolo con el cual trabaja difiere enormemente del protocolo serial RS-232 que usa el PIC.
Desgraciadamente no podras conectarlo a un PIC, ni con un MAX232 ni directamente. :?
Salud 8)