PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نیاز به راهنمایی برای راه اندازی sim900 یا PIc



meysam.z
03-06-2013, 17:05
سلام دوستان:0013:
من شروع کردم به کار با sim900 ....
اولین برنامه ای که نوشتم هنوز جواب نداده ....
ماژول داغ نمیکنه و پایه net sim900 هم 3 ثانیه روشن و چند میلی ثانیه خاموش می مونه ....
بگید خوب :mrgreen: پس سخت افزار سالمه ولتاژ تغذیه هم 4.5 ولت
من یه برنامه نوشتم که فقط یک پیامک به خط من بفرسته ولی دریغ از حتی یک تک زنگ :mrgreen:
کار نمیکنه .... استید کسی تجربه داره راجع به برنامه کمکم کنه....... اینم برنامه ام




#include <relay test.h>
#use delay(clock = 4000000)

#define ctrl_z 0x1A
#define ctrl_r 0x0D

#use rs232(baud=9600, xmit=PIN_c5,rcv=PIN_c6)

void main()
{
int i=0xAA,j=0x55;
set_tris_d(0x00); // SET PORTD OUTPUT
set_tris_B(0xFF);

while(TRUE)
{
output_low(pin_d0);
delay_ms(1);
delay_ms(3000);
output_high(pin_d0);
delay_ms(1);

printf("AT+CMGF=1");
putchar(ctrl_r);
printf("AT+CMGS="+989396824406"\r");
putchar(ctrl_r);
printf("in the name of god");

putchar(ctrl_z);




delay_ms(1000);


}

}
:(

morteza_rk
03-06-2013, 20:32
سلام مهندس

اون ctrl_r کارش چیه اینجا؟

morteza_rk
03-06-2013, 20:37
راستی خود شماره هم باید بین دبل کوتیشن باشه.

منظورم اینه که وقتی می ره توی ماژول باید با دبل کوتیشین بره. اینجوری که شما داری می فرستی فقط شماره میره بدون دبل کوتیشن هاش!

قبلا یه آموزش با ماژول SIM300cz گذاشته بودم. اونو پیدا کن از همین سایت و به مثال کدویژنش نگاه کن.

meysam.z
04-06-2013, 01:10
مهندس جان
برنامه رو به این صورت تغییر دادم
بازم جواب نداد ..... داستان چیه واقعا کلافم کرده ...


#include <relay test4.h>


#use delay(clock = 4000000)

#define ctrl_z 0x1A
#define ctrl_r 0x0D


#use rs232(baud=9600, xmit=PIN_c5,rcv=PIN_c6)

void main()
{

int i=0xAA,j=0x55;
set_tris_d(0x00); // SET PORTD OUTPUT
set_tris_B(0xFF);
char c;
char at_cmgs[]=
{'A','T','+','C','M','G','S','=','"','+','9','8','9','1','1','6','7','6','0','9','6', '9','"','\r'};

char at_cmgda[]=
{'A','T','+','C','M','G','F','=','1','\r'};

while(1)
{
output_HIGH(PIN_D0);
delay_ms(500);
output_lOW(PIN_D0);
delay_ms(500);
output_HIGH(PIN_D1);
delay_ms(500);
output_LOW(PIN_D1);
delay_ms(500);
output_HIGH(PIN_D2);
delay_ms(500);
output_LOW(PIN_D2);
delay_ms(500);

printf(at_cmgda);
delay_ms(100);
printf(at_cmgs);
delay_ms(100);
printf("in the name of god");
delay_ms(100);





delay_ms(1000);


}



}

sigma-mx
04-06-2013, 01:31
اولا تا از یک ارسال جواب درست نگرفتی ، تو حلقه ننداز ... این کار باعث سر در گمی میشه .. ممکنه چند تا با هم ارسال بشه و تا برسه به دستت ، داری یه تست دیگه میکنی ، تازه چندتای قبلی میرسه ! فکر میکنی که داری جواب میگیری !!!! اگر هم تو حلقه می خوای بندازی لااقل فواصل رو زیادتر بگیر ....

مورد بعد اینکه فرمت printf نوشته شده صحیح نیست . برای نوشتن دابل کوتیشن داخل printf باید اونو دوبار بنویسی ...
اینو تست کن :


printf("AT+CMGF=1\r\n");
delay_ms(10);
printf("AT+CMGS=""+989396824406""\r\n");
delay_ms(10);
printf("* This is a test *");
printf("%c\r\n",26);

meysam.z
04-06-2013, 01:36
مهندس جان الان شما ببین این برنامه ای که نوشتی از delay_ms تا اخر بصورت قرمز نوشته شده
یعنی کامپایلر ارور می ده .......

sigma-mx
04-06-2013, 01:38
متوجه نمیشم !! چی اشتباهه ؟

meysam.z
04-06-2013, 01:45
بازم جواب نداد مهندس .... من بردم یه جوری که نمیشه به کامپیوتر وصلش کرد ....
الان با یه خط دیگه به خطم زنگ زدم زنگ خورد .....
ولی اس مس نمی ره که نمیره
به نظر شما مشکل نرم افزاریه ؟

sigma-mx
04-06-2013, 01:57
جواب تمام سوالات ، تو هایپر ترمینال هست ! هر طوری شده باید ترمینال رو ببینی که داره چه اتفاقی توش میوفته ! کجا خطا میده ..



*** راستی من یادم رفت آخرش یه اینتر دیگه بزنم . دوباره کد بالا رو وارد کن . فکر کنم مشکلت حل بشه :mrgreen:

morteza_rk
04-06-2013, 02:23
اونی که من گفتم مال کدویژنه برای میکروکنترلر AVR هستا! ولی چون با زیبان سی هست گفتم به اون رجوع کنی.

delay_ms دستور تاخیره. توی PIC و کامپایلرش من نمی دونم چی میشه معادلش. اونو بذار.

meysam.z
04-06-2013, 17:55
مهندسین عزیز من وصلش کردم به هایپر ترمینال ....
لحظه ی اول که روشن میشه چهار تا iiii میفرسته ....
بعدش من هایپر ترمینالم دریافت میکنه ولی وقتی می خوام بفرستم صفحه ی هایپر ترمینالم NOT RESPONDING..... میشه چرا ؟
بعد یه چیز جالب هاپر ترمینالم با باود ریت 9600 نمی تونست دریافت کنه ولی 115200 رو IIII دریافت می کرد .... واقعا گیچ سدم مگه این ماژول خودکار خودش رو تنظیم نمی کنه ؟
البته ماژول من SIM900A هست من ماژول رو از یه فروشگاه که نوشته بود برد راه انداز SIM900 خریدم دقت کنید برد راه انداز SIM900.... بعد از این که خریدم متوجه شدم SIM900A روشه

مشکل کجا میتونه باشه؟

sigma-mx
04-06-2013, 19:10
فکر کنم شما مشکل باود ریت داری . باید اول باود رو ،رو یه عدد مثل 9600 فیکس کنی و save کنی . از تو تاپیک sim900 میتونی آموزششو پیدا کنی ..

در ضمن ، مثل اینکه بازار کلاهبرداری داغه !!! sim900A که چند هزار تومن از 900 ارزونتره ! جای اون بهت دادن !!؟؟؟

morteza_rk
04-06-2013, 21:49
ببین دادا

این ماژول ها با دریافت حرف بزرگ A می تونن باودریت خودشونو با هایپرترمینال ست کنن. شما باید از طریق میکرو یا هایپر ترمینال حرف بزرگ A رو 4 -5 بار (مثلا هر 250 میلی ثانیه 1 بار) بفرستی به ماژول تا ماژول باودریتش با باودریت میکرو یا هایپرترمینال ست بشه.

از اون به بعد بهتره با استفاده از دستور AT+IPR=x باودریت ماژول رو ثابت کنی روی یه عدد خاص ، مثلا 115200.

اکثر مواقع من با هایپر ترمینال نمی تونم حرف بزرگ A رو بفرستم به ماژول ولی با میکرو و باودریت 57600 می تونم بفرستم. و از طریق همون میکرو هم باودریت رو فیکس می کنم.

meysam.z
04-06-2013, 23:26
مهندس sigma-mx (You can see links before reply)بله جای SIM900 دادن بهم (You can see links before reply)
مهندس morteza_rk (You can see links before reply) من بنامه رو اینجوری تغییر دادم دریغ از یک SMS



for(i=0;i<5 ;i++){
printf("AT+A");

delay_ms(250);
}

for(i=0;i<5 ;i++){
printf("A");

delay_ms(250);
}



printf("AT+IPR=115200""\r\n");
delay_ms(10);
printf("AT+CMGF=1""\r\n");
delay_ms(10);
printf("AT+CMGS=""+989116760969""\r\n");
delay_ms(10);
printf("* This is a test *""\r\n");




چرا اخه اینقدر دردسر داره ....

morteza_rk
04-06-2013, 23:41
شما بیا یه متغیر از نوه char تعریف کن به نام Enter ، بعد اونو مساوی عدد 13 قرار بده.
بعد دستور زیر رو بفرست به ماژول ببین چی میشه؟


char Enter=13;
printf("A%c",Enter);
delay_ms(250);


بعدش بیا بجای فرستادن پیامک یه زنگ به گوشیت بزن ببین میشه یا نه!


printf("ATD09357725275;%c",Enter);

sigma-mx
05-06-2013, 02:27
اگه هنوز مشکلت حل نشده ، دیگه با میکرو کار نکن . اول تو هایپر ترمینال با تایپ کردن دستور جواب بگیر بعدا برو سراغ میکرو ...... اینطوری مشکل پیدا نمیشه !

مهمترین کار قبلا گفتم فیکس کردن باود ریته ! اگه یکبار اینکار رو بکنی ، دیگه هیچ وقت این مشکلات پیش نمیاد ...

meysam.z
05-06-2013, 05:48
:o:018::wink:
اقا مرتضی زنگ خورد .....با کمک شما و دوست خوبمون سیگما حل شد..... حل شد ..... دمتون گرم ...
حالا فقط اس مس فرستاده نمیشه ..... مشکل کجا بود که زنگ می خورد ولی اس مس فرستاده نمی شه ؟
به نظرتون از ENTER ش هست؟

meysam.z
05-06-2013, 15:04
دوستان قسمت فرستادن sms هم حل شد ....
مشکل رو می گم چطوری حل شد تا یکی مثل خودم اماتور دوباره این راه رو نره .... اقا مرتضی گفته بودند یه enter تعریف کنم(نکته کلیدی حل مشکل) و باقی داستان....خوب حتما ctrz هم باید تعریف بشه .... پس تعریفش کردم فوقعه ما وقعه (شد انچه باید می شد :o) جواب میده عین بلبل......:o:wink:
حالا نمی دونم مشکل سخت افزاریه یا نرم افزاری دستور printf نمی تونست n\ رو بفرسته پس برای حل مشکل باید بصورت دستی enter=13 و Ctrlz=24 رو تعریف کنیم

sigma-mx
05-06-2013, 16:22
خب مهندس خوبه که جواب گرفتی ولی سعی کن حتما دلیل کار نکردن رو دربیاری ...
printf که بعیده \r\n کار نکنه ! برنامه رو بزار ببینیم چی کار کردی !

morteza_rk
05-06-2013, 23:56
printf که بعیده \r\n کار نکنه ! برنامه رو بزار ببینیم چی کار کردی !

بله ، در کل باید جواب بده.

meysam.z
07-06-2013, 02:28
برنامه ی من ایجوری شد


char Enter=13,Ctrlz=26;
printf("AT+CMGF=1%c",Enter);
printf("*this is gsm test*%c",Ctrlz);

ایجوری عمرا جواب بده



printf("AT+CMGF=1\r\n");
delay_ms(10);
printf("* This is a test *");
printf("%c\r\n",26);

کار من حسابی راه افتاده .....
دست گل همتون درد نکنه .....
در ضمن ماژول حروف فارسی رو ساپورت نمیکنه ....؟
من هر چی عدد انگلیسی فرستادم جواب داد ولی فارسی رو اصلا .....
چرا ؟
راه حلی داره ؟

sigma-mx
07-06-2013, 13:10
مهندس برنامه بالا و پایین تقریبا یکی هستند . فقط تو پایینی \r\n داره که مثل اینکه شما فقط با enter جواب گرفتی یعنی \n . پس اگه تو برنامه پایین فقط \n بزاری دقیقا میشه همون برنامه شما .


برای حروف فارسی باید از حالت PDU استفاده کنی . یعنی همون CMGF=0 باشه و کد حروف فارسی رو طبق یه جدول بنویسی. بگردی قبلا این کار انجام شده و مثالش هست ...

meysam.z
07-06-2013, 14:14
مهندس جان من هرچی تو نت گشتم اخرش ختم شد به:
You can see links before reply
که لینک همه جا خرابه ......
می دونم توضیح چند صفحه ای نیاز داره ولی اگه کسی این مقاله رو در اختیار داره لطف کنه اپلود کنه
با تشکر

mohammad_sth
07-06-2013, 21:47
سلام بر دوستان و مهندسان عزیز فقط من خودم به یک مشکل برخوردم و حلش کردم خواستم به بقیه هم یک توضیح بدهم اونم این بودش که قسمت rx ماژول رو باید حتما 3 ولتش کنید البته بگم با تقسیم ولتاژ نمیشه یک مدار کوچک می خواهد که اگر مدارش رو می خواهید بگید تا بگردم تو سیستمم پیداش کنم بگذارم تو همین قسمت

morteza_rk
08-06-2013, 02:21
اونم این بودش که قسمت rx ماژول رو باید حتما 3 ولتش کنید البته بگم با تقسیم ولتاژ نمیشه

من و چنتا از عزیزان همین سایت با تقسیم مقاومتی جواب گرفتیم. بعضی از دوستان هم با دیود زنر.

ممنون از اینکه قصد دارید تا تجربیات خودتونو به اشتراک بذارید.

meysam.z
08-06-2013, 03:29
چرا باید 3 ولت باشه ؟
اگه ولتاژ تغذیه ماژول و میکرو هم ولتاژ باشه (تغذیه میکرو= تغذیه ماژول = 4.3 ولت ) باز هم اینکار لازمه ؟

morteza_rk
08-06-2013, 11:58
گه ولتاژ تغذیه ماژول و میکرو هم ولتاژ باشه (تغذیه میکرو= تغذیه ماژول = 4.3 ولت ) باز هم اینکار لازمه ؟

در اینصورت لازم نیست. برای من که تا به حال مشکلی پیش نیومده.

meysam.z
09-06-2013, 06:38
دوستان در دریافت مشکل پیدا کردم ....
وقتی دریافت می کنم یه سری حروف نامربوط نمایش داده می شه بعضی ها انگلیسی و بعضی ها مریخی(عجیب غریب) :mrgreen:
دیشب تا همین الان دارم روش کار می کنم نشد که نشد..... مشکل چی می تونه باشه
برنامه گیرنده ام


PRINTF("ATE0%C",ENTER);
delay_ms(2000);


for(k=0 ;k<61;k++){
sms[k]=0;
delay_ms(10);
}


IF(!input(PIN_C7)){
lcd_gotoxy(1,1);
printf(LCD_PUTC, "SMS1= ");
I=0;
J=0;
b=0;
c=0;
g=0;

PRINTF("AT+CMGR=1%C",ENTER);
while(J==0){
b=getc();
SWITCH(b){
CASE 0:
BREAK;

CASE 10:
IF(SMS[0]!=0){
J=1;
};

BREAK;
CASE 13:
IF(SMS[0]!=0){
J=1;
};

BREAK;

DEFAULT:
sms[i]=b;
i++;




};

};
lcd_gotoxy(2,2);
printf(LCD_PUTC, "sm= %u ",i);
delay_ms(2000);
for(i=0;i<49;i++){
lcd_gotoxy(1,1);

printf(LCD_PUTC, "sm=%C",sms[i]);
lcd_gotoxy(2,2);
printf(LCD_PUTC, "sm= %u ",i);
delay_ms(3000);
}
}

}



سپاس فراوان

meysam.z
09-06-2013, 19:26
دوستان جوااااااااااااااااب گرفتم..... مشکل رو پیدا کردم البته دوتا مشکل
مشکل اول : کریستال میکرو رو 11059200 برای باود ریت 115200 قرار دادم
مشکل دوم : هیچ وقت هیچ وقت هیچ وقت از دستور نرم افزاری برای ارتباط سریال استفاده نکنید همیشه از همون uart سخت افزاری defult رو استفاده کنید.
ببینید به اینصورت :


#use rs232(baud=115200, UART1,ERRORS)
//Sets the XMIT= and RCV= to the chips first hardware UART

من اولش اینجوری استفاده می کردم که 10 ساعت وقتمو گرفت (ازمون و خطا)
این روش غلطه :


#use rs232(baud=115200, xmit=PIN_c6,rcv=PIN_c7,ERRORS)

این روش غلطه من از این روش برای ارتباط دوتا میکرو استفاده می کردم و جواب میداد ولی ارتباط میکرو و ماژول فقط ارسال میشه و لی میکرو دریافت نمیکنه.

mohammad_sth
03-08-2013, 23:00
سلام آقا میثم منم برای دریافت به مشکل بر خوردم می خواستم بپرسم برای دریافت چی کار کردی دقیقا ؟ من sim900 رو با avr راه اندازی کردم ولی با pic به مشکل برخوردم با ccs هم دارم می نویسم.

meysam.z
04-08-2013, 04:36
سلام برنامه تو بذار .....مشکلت دقیقا چیه ؟
ماژولت sim900 یا sim900a ?
یه شماتیک هم بذار

mohammad_sth
04-08-2013, 11:07
سلام دوباره برنامه خواصی ننوشتم هنوز چون هنوز جواب درست راستی نگرفتم اما تا الان این شده

#include <16F883.h>
#fuses HS, NOWDT, NOPROTECT, NOLVP, PUT, MCLR
#use delay(clock=11059200)


#include <stdio.h>
#include <STRING.h>
#INCLUDE <stdlib.h>
#include <LCD.C>
#define use_portb_lcd TRUE

//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, stream=PC)
#use rs232(baud=9600, UART1,ERRORS)

#define ENABLE_PIN B0
#define RS_PIN B1
#define RW_PIN B2
#define Data4 B4
#define Data5 B5
#define Data6 B6
#define Data7 B7
#include <LCD.C>


#define ctrl_z 0x1a
#define enter 0x0d
char c[];
int a=0,b=0;


#int_RDA
void RDA_isr(void)
{
c=getc();
if(c=='C'){
a=1;
}
if(c=='A'){
b=1;
}
}


void main(){

output_low(PIN_A5);
delay_ms(100);
output_high(PIN_A5);
delay_ms(1000);
output_low(PIN_A5);

delay_ms(9000);

lcd_init();
enable_interrupts(int_rda);
enable_interrupts(global);


lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc("SEND SMS ...");

printf("AT");
putchar(enter);
delay_ms(1000);
printf("AT+CMGF=1");
putchar(enter);
delay_ms(1000);
printf("AT+CMGS=\"0912301xxxx\"");
putchar(enter);
delay_ms(1000);
printf("Hello");
putchar(ctrl_z);
lcd_gotoxy(1,2);
lcd_putc("SENT");
delay_ms(3000);
lcd_putc('\f');
while(TRUE){

if(kbhit()){
lcd_gotoxy(1,1);
lcd_putc("OK");
}


if(a==1){
lcd_gotoxy(1,2);
lcd_putc("C");
}
if(b==1){
lcd_gotoxy(2,2);
lcd_putc("A");
}

meysam.z
04-08-2013, 16:52
این برنامه ای که راحت جواب میده.... تست شده هست 100 در 100 ....اگه جواب نگرفتی مطمئن باش مشکل :
1- سخت افزارته
2- باود ریت


char Enter=13,Ctrlz=26;
char DOUBLE_quote=34;
.
.
.
.
.
.
.
.
.
.
.
.

while(1){

printf("A%c",Enter);
delay_ms(250);


printf("AT+CMGF=1%c",Enter);
delay_ms(500);
printf("AT+CMGS=%C09394824406%c%c",DOUBLE_quote,DOUBLE_quote,Enter);
delay_ms(500);
printf("*this is gsm test*%c",Ctrlz);
delay_ms(10);
}

mohammad_sth
04-08-2013, 17:34
سلام دوباره آقا میثم من تو ارسال مشکل ندارم تو دریافت مشکل دارم یعنی می توانم اس ام اس ارسال کنم ولی اطلاعات رو نمی تونم از ماژول درست بخونم (ماژولمم sim 900 هستش)

ghazalak_5218
19-09-2013, 15:31
سلام دوستان:0013:
من شروع کردم به کار با sim900 ....
اولین برنامه ای که نوشتم هنوز جواب نداده ....
ماژول داغ نمیکنه و پایه net sim900 هم 3 ثانیه روشن و چند میلی ثانیه خاموش می مونه ....
بگید خوب :mrgreen: پس سخت افزار سالمه ولتاژ تغذیه هم 4.5 ولت
من یه برنامه نوشتم که فقط یک پیامک به خط من بفرسته ولی دریغ از حتی یک تک زنگ :mrgreen:
کار نمیکنه .... استید کسی تجربه داره راجع به برنامه کمکم کنه....... اینم برنامه ام




#include <relay test.h>
#use delay(clock = 4000000)

#define ctrl_z 0x1a
#define ctrl_r 0x0d

#use rs232(baud=9600, xmit=pin_c5,rcv=pin_c6)

void main()
{
int i=0xaa,j=0x55;
set_tris_d(0x00); // set portd output
set_tris_b(0xff);

while(true)
{
output_low(pin_d0);
delay_ms(1);
delay_ms(3000);
output_high(pin_d0);
delay_ms(1);

printf("at+cmgf=1");
putchar(ctrl_r);
printf("at+cmgs="+989396824406"\r");
putchar(ctrl_r);
printf("in the name of god");

putchar(ctrl_z);




delay_ms(1000);


}

}
:(











دوست عزیز میشه فایل پروژه ای که انجام دادی به طور کامل در سایت بذاری هم شماتیکش هم کدش
فایل پروتیوسشم داری؟!
:(:(

900425052
22-10-2013, 23:59
سلام دوست عزیز

بین هر قسمتیش یک تاخیر 10 میکرو ثانیه بزاری بهتره به راحتی جواب میده .

esi_52000
24-10-2013, 21:33
سلام به همه ی دوستان عزیز.من تونستم راه اندازی ماژول رو انجام بدم و راحت باهاش اس ام اس میفرستم .اما میخوام بدونم چطور میتونم از پیام ارسال شده delivery بگیرم. یعنی از کجا بفهمیم پیام رسالی از ماژول به گیرنده رسیده یا نه.ممنون میشم کمک کنین