اطلاعیه

Collapse
No announcement yet.

ماژول sim900 اس ام اس دریافت نمیکند

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ماژول sim900 اس ام اس دریافت نمیکند

    سلام دوستان.
    با کمک های شما خیلی جلو رفتم تا جایی که تونستم ب وسیله میکرو با sim900 اس ام اس بفرستم ولی نتونستم اس ام اس دریافت نکردم.
    یعنی اس ام اس میفرستم ب گوشیم ولی نمیتونم از گوشی به sim900 بفرستم.
    مشکل از کجاس؟

    #2
    پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

    نوشته اصلی توسط mm1m
    سلام دوستان.
    با کمک های شما خیلی جلو رفتم تا جایی که تونستم ب وسیله میکرو با sim900 اس ام اس بفرستم ولی نتونستم اس ام اس دریافت نکردم.
    یعنی اس ام اس میفرستم ب گوشیم ولی نمیتونم از گوشی به sim900 بفرستم.
    مشکل از کجاس؟
    آقا شما اول SIM رو وصل کن به PC و بش SMS بده
    ببین ماژولمیگه که من SMS رو گرفتم
    یه پیام روی ترمینال مینویسه مثل : +CM = 4
    یعنی SMS گرفته و شماره 4 هست
    بعد با دستور AT+CMGR = 4 میتونی SMS رو بخونی اگه این دستور رو دادی و متن SMS رو نشون داد بعد میریم ببینیم مشکل با میکرو چییه
    ولی اگه تا اینجا جواب نگرفتی باید مشکلو توی ماژول جستوجو کنیم
    درایور شبکه و nRF24L01
    کاتالوگ محصولات
    کنترلر CNC شش محوره برای پرینتر 3D و Pick n Place
    شبیه ساز تک تیرانداز و سیبل دیجیتال با پردازش تصویر
    فروش اسیلوسکوپ GWinstek GOS-630FC

    دیدگاه


      #3
      پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

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

      دیدگاه


        #4
        پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

        نوشته اصلی توسط mm1m
        با پورت سریال وصل میکنم اس میاد بعد شماره و زمان و متن رو نشون میده.
        ولی با میکرو نه
        خب پس ماژول درسته
        مشکلی که داری اینه که دیتا رو از UART ماژول نمیتونی بخونی
        اول این که باید چک کنی ببینی دیتا درست روی خط میاد یا نه ( اگه اسکوپ داری ببین روی TX ماژول دیتا میاد و باز ببین روی RX میکرو دیتا هست )
        اگه نمیاد که باید اتصالات رو چک کنی ولی اگر دیتا داری باید Baud Rate رو در 2 طرف میکرو و ماژول یکی کنی
        بعد باید برنامه خوندن از UART رو چک کنی ببینی کلا با میکرو میتونی درست دیتای روی UART رو بخونی یا نه
        با چه میکرو و چه زبونی کار میکنی؟!!!
        درایور شبکه و nRF24L01
        کاتالوگ محصولات
        کنترلر CNC شش محوره برای پرینتر 3D و Pick n Place
        شبیه ساز تک تیرانداز و سیبل دیجیتال با پردازش تصویر
        فروش اسیلوسکوپ GWinstek GOS-630FC

        دیدگاه


          #5
          پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

          اسکوپ ندارم.
          atmega 8 و codevision زبان c

          دیدگاه


            #6
            پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

            نوشته اصلی توسط mm1m
            اسکوپ ندارم.
            atmega 8 و codevision زبان c
            خب کاری نداره پس
            توی تنظیمات ویزارد کدویژن UART رو فعال کن
            اینتراپت ریسیو رو هم فعال کن
            بافر رو هم مثلا 128 بذار که همه رو بتونه ذخیره کنه
            تا اینجا اینجوری میشه
            کد:
            #define FRAMING_ERROR (1<<FE)
            #define PARITY_ERROR (1<<UPE)
            #define DATA_OVERRUN (1<<DOR)
            #define DATA_REGISTER_EMPTY (1<<UDRE)
            #define RX_COMPLETE (1<<RXC)
            
            // USART Receiver buffer
            #define RX_BUFFER_SIZE 128
            char rx_buffer[RX_BUFFER_SIZE];
            
            #if RX_BUFFER_SIZE <= 256
            unsigned char rx_wr_index,rx_rd_index,rx_counter;
            #else
            unsigned int rx_wr_index,rx_rd_index,rx_counter;
            #endif
            
            // This flag is set on USART Receiver buffer overflow
            bit rx_buffer_overflow;
            
            // USART Receiver interrupt service routine
            interrupt [USART_RXC] void usart_rx_isr(void)
            {
            char status,data;
            status=UCSRA;
            data=UDR;
            if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
              {
              rx_buffer[rx_wr_index++]=data;
            #if RX_BUFFER_SIZE == 256
              // special case for receiver buffer size=256
              if (++rx_counter == 0) rx_buffer_overflow=1;
            #else
              if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
              if (++rx_counter == RX_BUFFER_SIZE)
               {
               rx_counter=0;
               rx_buffer_overflow=1;
               }
            #endif
              }
            }
            
            #ifndef _DEBUG_TERMINAL_IO_
            // Get a character from the USART Receiver buffer
            #define _ALTERNATE_GETCHAR_
            #pragma used+
            char getchar(void)
            {
            char data;
            while (rx_counter==0);
            data=rx_buffer[rx_rd_index++];
            #if RX_BUFFER_SIZE != 256
            if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
            #endif
            #asm("cli")
            --rx_counter;
            #asm("sei")
            return data;
            }
            #pragma used-
            #endif
            بعد دستور AT+CMGR رو بده که SMS رو بخونه
            خودش میریزه توی بافر
            بعد برو بافرتو بخون
            کد:
            /*========Read SMS========*/
            
            void Read_SMS(void)
            {
            int i,j=0;
            Buffer_Cleaner ();
            Clear_TXT();
            Clear_Num();
            
            printf("AT+CMGR=1\r");
            delay_ms(1000);
            i=0;
            درایور شبکه و nRF24L01
            کاتالوگ محصولات
            کنترلر CNC شش محوره برای پرینتر 3D و Pick n Place
            شبیه ساز تک تیرانداز و سیبل دیجیتال با پردازش تصویر
            فروش اسیلوسکوپ GWinstek GOS-630FC

            دیدگاه


              #7
              پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

              ممنون.
              ببخشید فقط ی سوال منظورتون از این که بافرتو بخون چیه؟
              چجوری باید اینکارو انجام بدم؟

              دیدگاه


                #8
                پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

                بعدش ی چیز دیگه با کدویزارد اون کدهارو درست کردم ولی اون قسمت دومی رو که گذاشتین من متوجه نمیشم ک کجا باید بنویسم؟
                بعد از (while(1 ?
                یعنی هموجایی که نوشته place your code ؟
                یا جای دیگهو
                ممنون

                دیدگاه


                  #9
                  پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

                  فعلا شما این تاپیک ها رو بخون
                  یکم باید برای تازه واردا قوانین رو بیشتر تذکر داد
                  بعد میریم سر مسایل علمی ( هم تعلیم داریم هم تربیت )


                  http://www.eca.ir/forum2/index.php?topic=80331.0

                  http://www.eca.ir/forum2/index.php?topic=88646.0
                  درایور شبکه و nRF24L01
                  کاتالوگ محصولات
                  کنترلر CNC شش محوره برای پرینتر 3D و Pick n Place
                  شبیه ساز تک تیرانداز و سیبل دیجیتال با پردازش تصویر
                  فروش اسیلوسکوپ GWinstek GOS-630FC

                  دیدگاه


                    #10
                    پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

                    نوشته اصلی توسط mm1m
                    ممنون.
                    ببخشید فقط ی سوال منظورتون از این که بافرتو بخون چیه؟
                    چجوری باید اینکارو انجام بدم؟
                    بافر یه آرایه هست که کاراکترها به ترتیب توش ذخیره میشن
                    با دادن شماره آرایه داخل براکت جلوی اسم بافر میتونی بخونی
                    مثلا : buffer[5] = i
                    این میاد مقدار 5 ام بافر رو میربزه توی متغییر i
                    درایور شبکه و nRF24L01
                    کاتالوگ محصولات
                    کنترلر CNC شش محوره برای پرینتر 3D و Pick n Place
                    شبیه ساز تک تیرانداز و سیبل دیجیتال با پردازش تصویر
                    فروش اسیلوسکوپ GWinstek GOS-630FC

                    دیدگاه


                      #11
                      پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

                      نوشته اصلی توسط mm1m
                      بعدش ی چیز دیگه با کدویزارد اون کدهارو درست کردم ولی اون قسمت دومی رو که گذاشتین من متوجه نمیشم ک کجا باید بنویسم؟
                      بعد از (while(1 ?
                      یعنی هموجایی که نوشته place your code ؟
                      یا جای دیگهو
                      ممنون
                      بستگی به سبک برنامه نویسیت داره
                      این به صورت فانکشن تعریف شده و زیر کل برنامه ها نوشته میشه
                      بعد باید هرجا نیاز داری call کنی تابع رو
                      ولی متن داخلشو تپی while هم میشه نپشن
                      درایور شبکه و nRF24L01
                      کاتالوگ محصولات
                      کنترلر CNC شش محوره برای پرینتر 3D و Pick n Place
                      شبیه ساز تک تیرانداز و سیبل دیجیتال با پردازش تصویر
                      فروش اسیلوسکوپ GWinstek GOS-630FC

                      دیدگاه


                        #12
                        پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

                        اقا ممنون این مشکلمم حل شد.
                        الان اس میدم و میگیرم و روی LCD نمایش میده.
                        حالا میخوام وقتی کلمه R1 رو قرستادم یکی از پورت ها تغییر وضعیت بده.
                        دستورش چجوری؟
                        ممنون

                        دیدگاه


                          #13
                          پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

                          نوشته اصلی توسط mm1m
                          اقا ممنون این مشکلمم حل شد.
                          الان اس میدم و میگیرم و روی LCD نمایش میده.
                          حالا میخوام وقتی کلمه R1 رو قرستادم یکی از پورت ها تغییر وضعیت بده.
                          دستورش چجوری؟
                          ممنون
                          عالیه
                          خیلی خوب داری پیش میری
                          خب دیگه کاری نداره شما وقتی میتونی نمایش بدی متن SMS رو روی LCD با یه شرط ساده میگی اگر این مقدار که از SMS خونده شده با کاراکتر R1 برابر بود فلان پایه رو 1 کن یا 0 کن
                          کد:
                          if ( (rx_buffer[i]=='R') && (rx_buffer[i+1]=='1')) PORTB.0 = 1;
                          این رو بطور مثال گفتم
                          الان میتونی کدتو بذاری هم اگر اشکالی داشته باشه بچه ها اصلاح میکنن برات هم این که زحمتی کشیدی دیگران که تازه میخوان شروع کنن میتونن از پست شما کلی یاد بگیرن ، اینجاست که تعامل یادگیری و یاد دادن بین همه بچه ها برقرار میشه
                          همه اعضای سایت هم مثل شما و من روز اول از یه پرسش شروع کردیم و کم کم با به اشتراک گذاشتن دانشمون تونستیم به اینجایی که هستیم برسیم

                          همیشه موفق باشی
                          درایور شبکه و nRF24L01
                          کاتالوگ محصولات
                          کنترلر CNC شش محوره برای پرینتر 3D و Pick n Place
                          شبیه ساز تک تیرانداز و سیبل دیجیتال با پردازش تصویر
                          فروش اسیلوسکوپ GWinstek GOS-630FC

                          دیدگاه


                            #14
                            پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

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

                            دیدگاه


                              #15
                              پاسخ : ماژول sim900 اس ام اس دریافت نمیکند

                              دوستان من با این برنامه دوتا مشکل دارم.
                              1-وقتی اس میاد باید بنویسه Reach SMS اما نمینویسه.
                              2-همونطوری مه میبینین من وقتی ک pind.4==1 باید portb.0=1 بشه ولی روی lcd اس رو مینویسه ولی پورت رو یک نمیکنه.
                              اینم برنامم.اگه برنامه واضح نبود بگین تا بیشتر توضیح بدم.ممنون
                              کد:
                              #include <mega8.h>
                              #include <alcd.h>
                              #include <stdlib.h>
                              #include <delay.h>
                              
                              #define ctrl_z 0x1a
                              #define enter 0x0d
                              
                              unsigned char Size,Masseg[16],Masseg_Copy[16],buffer,i;
                              unsigned char Number[13],mount[1];
                              
                              void cmgr();
                              void cmti();
                              void wait(char ch);
                              void Selection();
                              void Display();
                              
                              #ifndef RXB8
                              #define RXB8 1
                              #endif
                              
                              #ifndef TXB8
                              #define TXB8 0
                              #endif
                              
                              #ifndef UPE
                              #define UPE 2
                              #endif
                              
                              #ifndef DOR
                              #define DOR 3
                              #endif
                              
                              #ifndef FE
                              #define FE 4
                              #endif
                              
                              #ifndef UDRE
                              #define UDRE 5
                              #endif
                              
                              #ifndef RXC
                              #define RXC 7
                              #endif
                              
                              #define FRAMING_ERROR (1<<FE)
                              #define PARITY_ERROR (1<<UPE)
                              #define DATA_OVERRUN (1<<DOR)
                              #define DATA_REGISTER_EMPTY (1<<UDRE)
                              #define RX_COMPLETE (1<<RXC)
                              
                              // USART Receiver buffer
                              #define RX_BUFFER_SIZE 8
                              char rx_buffer[RX_BUFFER_SIZE];
                              
                              #if RX_BUFFER_SIZE <= 256
                              unsigned char rx_wr_index,rx_rd_index,rx_counter;
                              #else
                              unsigned int rx_wr_index,rx_rd_index,rx_counter;
                              #endif
                              
                              // This flag is set on USART Receiver buffer overflow
                              bit rx_buffer_overflow;
                              
                              // USART Receiver interrupt service routine
                              interrupt [USART_RXC] void usart_rx_isr(void)
                              {
                              char status,data;
                              status=UCSRA;
                              data=UDR;
                              if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
                                {
                                rx_buffer[rx_wr_index++]=data;
                              #if RX_BUFFER_SIZE == 256
                                // special case for receiver buffer size=256
                                if (++rx_counter == 0) rx_buffer_overflow=1;
                              #else
                                if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
                                if (++rx_counter == RX_BUFFER_SIZE)
                                 {
                                 rx_counter=0;
                                 rx_buffer_overflow=1;
                                 }
                              #endif
                                }
                              }
                              
                              #ifndef _DEBUG_TERMINAL_IO_
                              // Get a character from the USART Receiver buffer
                              #define _ALTERNATE_GETCHAR_
                              #pragma used+
                              char getchar(void)
                              {
                              char data;
                              while (rx_counter==0) Selection();
                              data=rx_buffer[rx_rd_index++];
                              #if RX_BUFFER_SIZE != 256
                              if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
                              #endif
                              #asm("cli")
                              --rx_counter;
                              #asm("sei")
                              return data;
                              }
                              #pragma used-
                              #endif
                              
                              #include <stdio.h>
                              
                              void main(void)
                              {
                              PORTB=0x00;
                              DDRB=0xFF;
                              
                              PORTC=0x00;
                              DDRC=0x00;
                              
                              PORTD=0x18;
                              DDRD=0x00;
                              
                              // USART Baud Rate: 9600
                              UCSRA=0x00;
                              UCSRB=0x98;
                              UCSRC=0x86;
                              UBRRH=0x00;
                              UBRRL=0x33;
                              
                              // RS - PORTb Bit 5
                              // RD - PORTc Bit 0
                              // EN - PORTC Bit 1
                              // D4 - PORTC Bit 2
                              // D5 - PORTC Bit 3
                              // D6 - PORTC Bit 4
                              // D7 - PORTC Bit 5
                              lcd_init(16);
                              
                              #asm("sei");
                              Display();
                              while (1)
                                {
                                buffer=getchar();       
                                if(buffer=='+') 
                                { 
                                 buffer=getchar(); 
                                 if(buffer=='C') 
                                 { 
                                 buffer=getchar(); 
                                 if(buffer=='M') 
                                 { 
                                  buffer=getchar(); 
                                  if(buffer=='T') 
                                  { 
                                  buffer=getchar(); 
                                  if(buffer=='I') 
                                  { 
                                   buffer=getchar();
                                   if(buffer==':') cmti();
                                  } 
                                  }
                                  else if(buffer=='G')
                                  {
                                  buffer=getchar(); 
                                  if(buffer=='R') 
                                  {
                                   buffer=getchar(); 
                                   if(buffer==':') cmgr(); 
                                  }
                                  }
                                 }
                                 }
                                }   
                                }
                              }
                              
                              void cmgr()
                                {
                                for(i=0;i<3;i++) wait('"');
                                gets(Number,13);
                                wait('\n');        
                                for(i=0;i<16;i++) 
                                 {
                                 Masseg[i]='\0'; 
                                 } 
                                for(i=0;i<16;i++) 
                                 {
                                 Masseg[i]=getchar(); 
                                 if(Masseg[i]==13)
                                 {
                                 Masseg[i]='\0';
                                 break; 
                                 } 
                                 } 
                                for(i=0;i<16;i++) 
                                 { 
                                 Masseg_Copy[i]=Masseg[i]; 
                                 } 
                                lcd_clear();
                                lcd_puts(Number);
                                lcd_gotoxy(0,1);
                                lcd_puts(Masseg_Copy); 
                                delay_ms(4000);
                                Display();
                                }  
                                
                              void cmti()
                                {
                                wait('+');
                                gets(mount,1);
                                Size=atoi(mount); 
                                lcd_clear();
                                lcd_putsf("<<<Reach SMS>>> ");
                                delay_ms(2000); 
                                Display();
                                }
                                
                              void wait(char ch)
                                {
                                while(ch != getchar()); 
                                }  
                              
                              void Selection()
                                {
                                 if(PIND.3==0)
                                 {
                                 lcd_clear();
                                 lcd_putsf("SEND SMS ...");
                                 printf("AT");
                                 putchar(enter);
                                 delay_ms(1000); 
                                 printf("AT+CMGF=1");
                                 putchar(enter);
                                 delay_ms(1000); 
                                 printf("AT+CMGS=\"09355072334\"");
                                 putchar(enter);
                                 delay_ms(1000);
                                 printf ("SMS SEND TEST ");
                                 putchar(ctrl_z); 
                                 delay_ms(500); 
                                 Display();
                                 } 
                                 
                                if(PIND.4==0)
                                 { 
                                 lcd_clear();
                                 lcd_putsf("READ SMS ...");
                                 printf("AT");
                                 putchar(enter);
                                 delay_ms(1000); 
                                 printf("AT+CMGF=1");
                                 putchar(enter);
                                 delay_ms(1000); 
                                 printf("AT+CMGR=1");
                                 putchar(enter); 
                                 if((rx_buffer[1]=='R')&&(rx_buffer[2]=='1'))PORTB.1=1; 
                                 }
                                 
                                } 
                                
                              void Display()
                                {
                                lcd_clear();
                                lcd_putsf("Send/Receive SMS");
                                }

                              دیدگاه

                              لطفا صبر کنید...
                              X