Thông báo

Collapse
No announcement yet.

[Help] Thắc mắc code sim900

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • [Help] Thắc mắc code sim900

    Chào mọi người. Mình đang làm về đề tài sim900. Khi có SMS đến thì sim900 trả về chuỗi +CMTI. Mình đã kiểm tra nó trong ngắt nhận. Song khi test trên mạch Pic, thì chỉ gửi được SMS đầu là nó báo có sms. Sau đó, gửi tin thì nó ko báo gì nữa. Dù mình đã reset tất cả rồi nhưng vẫn không được. Mọi người xem tại sao giúp mình với.
    Code của mình đây. Thanks mọi người nhé.
    Code:
    #include <16f877a.h>
    #fuses nowdt,hs,noput,noprotect,nodebug,nobrownout,nolvp, nocpd,nowrt
    #use delay(clock=20000000)
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
    #include <lcd_lib_4bit.c>
    
    char sms[80];
    char c=0x00,c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
    int8 new_sms=0,i=0,j=0;
    
    #INT_RDA
    void ngat()
    {
       c=getc();
       if(c=='+') c1=c;
       if(c=='C') c2=c;
       if(c=='M') c3=c;
       if(c=='T') c4=c;
       if(c=='I') c5=c;
       if(c1=='+' && c2=='C' && c3=='M' && c4=='T' && c5=='I') new_sms=1;
       sms[i]=c; i++;
    }
    
    void delete_sms()
    {
       printf("AT+CMGD=1,4");//delete all message
       putc(13);delay_ms(500);
    }
    
    void reset()
    {
       i=0;
       new_sms=0;
       c=0x00,c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
       for(j=0;j<90;j++) //Xoa sms[]
          {sms[j]=0;}
    }
    
    
    void main()
    {
       enable_interrupts(global);
       enable_interrupts(int_rda);
       lcd_init();printf(lcd_putchar,"Seting....");delay_ms(2000);lcd_putcmd(0x01);
       reset();
       delete_sms();
       reset();
       printf(lcd_putchar,"Start");delay_ms(3000);lcd_putcmd(0x01);
       while(true)
       {
          if(new_sms==1)
          {
             reset();
             printf(lcd_putchar,"New message");delay_ms(3000);lcd_putcmd(0x01);
    //         printf("at+cmgs=\"0922609003\"\r\n");
    //         delay_ms(500);printf("Da nhan duoc sms");delay_ms(500);putc(26);delay_ms(500);
             reset();
          }
       }
    }
    Last edited by BachHoNB; 26-09-2012, 00:00.

  • #2
    Mình làm xong rồi nhé. Thanks mọi người.

    Comment


    • #3
      cho mình ké chút.
      mình thấy có sim900, sim900A,SIM900B....
      vậy các sim đó khác nhau ở điểm gì vậy các bạn?
      mà mình thấy sim900z bán đắt hơn cả là sao?
      cám ơn!

      Comment


      • #4
        bạn giúp mình về đề tài này với , gmail : truongspkt2008@ gmail.com thank ban nhieu

        Comment


        • #5
          Nguyên nhân là gì vậy bạn.chia sẻ kinh nghiệm cho mọi người được ko?
          Nguyên văn bởi BachHoNB Xem bài viết
          Chào mọi người. Mình đang làm về đề tài sim900. Khi có SMS đến thì sim900 trả về chuỗi +CMTI. Mình đã kiểm tra nó trong ngắt nhận. Song khi test trên mạch Pic, thì chỉ gửi được SMS đầu là nó báo có sms. Sau đó, gửi tin thì nó ko báo gì nữa. Dù mình đã reset tất cả rồi nhưng vẫn không được. Mọi người xem tại sao giúp mình với.
          Code của mình đây. Thanks mọi người nhé.
          Code:
          #include <16f877a.h>
          #fuses nowdt,hs,noput,noprotect,nodebug,nobrownout,nolvp, nocpd,nowrt
          #use delay(clock=20000000)
          #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
          #include <lcd_lib_4bit.c>
          
          char sms[80];
          char c=0x00,c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
          int8 new_sms=0,i=0,j=0;
          
          #INT_RDA
          void ngat()
          {
             c=getc();
             if(c=='+') c1=c;
             if(c=='C') c2=c;
             if(c=='M') c3=c;
             if(c=='T') c4=c;
             if(c=='I') c5=c;
             if(c1=='+' && c2=='C' && c3=='M' && c4=='T' && c5=='I') new_sms=1;
             sms[i]=c; i++;
          }
          
          void delete_sms()
          {
             printf("AT+CMGD=1,4");//delete all message
             putc(13);delay_ms(500);
          }
          
          void reset()
          {
             i=0;
             new_sms=0;
             c=0x00,c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
             for(j=0;j<90;j++) //Xoa sms[]
                {sms[j]=0;}
          }
          
          
          void main()
          {
             enable_interrupts(global);
             enable_interrupts(int_rda);
             lcd_init();printf(lcd_putchar,"Seting....");delay_ms(2000);lcd_putcmd(0x01);
             reset();
             delete_sms();
             reset();
             printf(lcd_putchar,"Start");delay_ms(3000);lcd_putcmd(0x01);
             while(true)
             {
                if(new_sms==1)
                {
                   reset();
                   printf(lcd_putchar,"New message");delay_ms(3000);lcd_putcmd(0x01);
          //         printf("at+cmgs=\"0922609003\"\r\n");
          //         delay_ms(500);printf("Da nhan duoc sms");delay_ms(500);putc(26);delay_ms(500);
                   reset();
                }
             }
          }

          Comment


          • #6
            Chào các bạn. Mình cũng đang làm với Sim900, các lệnh mình viết trên asm nên không giúp được cho code C.
            Mình thì gặp phải vấn đề với sim900 là ở chỗ nó chỉ hoạt động tốt với sim của Beeline, các sim khác như Vina thì chạy được 1 lúc thì tự động tắt mà không có cảnh báo gì, sim Viettel thì còn tệ hơn là rất khó khởi động (đèn status bật được 1 lúc, trong khi đèn Netlight đang báo dò mạng thì bị tắt), khởi động được cũng chỉ chạy được 1 lúc rồi tắt ngấm. Mình đã chạy thử với 2 cái sim900 rồi, như nhau cả. Bạn nào có kinh nghiệm chia sẻ với mình 1 chút được không? Rất cảm ơn các bạn.
            |

            Comment


            • #7
              Nguyên văn bởi kiemkhach10 Xem bài viết
              Nguyên nhân là gì vậy bạn.chia sẻ kinh nghiệm cho mọi người được ko?
              Nguyên nhân là do không đủ thời gian nghỉ. Nếu mình cho thêm lệnh "delay_ms(3000)" vào sau while(true) thì nó sẽ đúng. Tức là nếu có sms thì nó sẽ báo luôn, 1 lần, 2 lần.....100 lần cũng vậy.
              Mà mình làm xong về đề tài với việc xử lý sms rồi. Về GPRS thì mình chưa thử. Bạn nào cần giúp đỡ gì thì liên hệ với mình nhé
              Last edited by BachHoNB; 05-12-2012, 16:33.

              Comment


              • #8
                Nguyên văn bởi kiemkhach10 Xem bài viết
                Nguyên nhân là gì vậy bạn.chia sẻ kinh nghiệm cho mọi người được ko?
                Nguyên nhân là do không đủ thời gian nghỉ. Nếu mình cho thêm lệnh "delay_ms(3000)" vào sau while(true) thì nó sẽ đúng. Tức là nếu có sms thì nó sẽ báo luôn, 1 lần, 2 lần.....100 lần cũng vậy.
                Code đúng của nó là:

                Code:
                #include <16f877a.h>
                #fuses nowdt,hs,noput,noprotect,nodebug,nobrownout,nolvp, nocpd,nowrt
                #use delay(clock=20000000)
                #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
                #include <lcd_lib_4bit.c>
                
                char sms[80];
                char c=0x00,c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
                int8 new_sms=0,i=0,j=0;
                
                #INT_RDA
                void ngat()
                {
                   c=getc();
                   if(c=='+') c1=c;
                   if(c=='C') c2=c;
                   if(c=='M') c3=c;
                   if(c=='T') c4=c;
                   if(c=='I') c5=c;
                   if(c1=='+' && c2=='C' && c3=='M' && c4=='T' && c5=='I') new_sms=1;
                   sms[i]=c; i++;
                }
                
                void delete_sms()
                {
                   printf("AT+CMGD=1,4");//delete all message
                   putc(13);delay_ms(500);
                }
                
                void reset()
                {
                   i=0;
                   new_sms=0;
                   c=0x00,c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
                   for(j=0;j<90;j++) //Xoa sms[]
                      {sms[j]=0;}
                }
                
                
                void main()
                {
                   enable_interrupts(global);
                   enable_interrupts(int_rda);
                   lcd_init();printf(lcd_putchar,"Seting....");delay_ms(2000);lcd_putcmd(0x01);
                   reset();
                   delete_sms();
                   reset();
                   printf(lcd_putchar,"Start");delay_ms(3000);lcd_putcmd(0x01);
                   while(true)
                   {
                      delay_ms(3000);
                      if(new_sms==1)
                      {
                         reset();
                         printf(lcd_putchar,"New message");delay_ms(3000);lcd_putcmd(0x01);
                //         printf("at+cmgs=\"0922609003\"\r\n");
                //         delay_ms(500);printf("Da nhan duoc sms");delay_ms(500);putc(26);delay_ms(500);
                         reset();
                      }
                   }
                }

                Comment


                • #9
                  t cũng bị như thế nhưng sửa như bạn bảo mà vẫn không được bạn biết tại sao chỉ hộ tớ cái

                  sđt:01656228458

                  gmail:lollipophd791991gmail.com

                  Comment


                  • #10
                    Nguyên văn bởi lollipop_hd1 Xem bài viết
                    t cũng bị như thế nhưng sửa như bạn bảo mà vẫn không được bạn biết tại sao chỉ hộ tớ cái

                    sđt:01656228458

                    gmail:lollipophd791991gmail.com
                    Cái này khó. Bởi vì bài của mình như thế, chỉ thêm một dòng delay nhỏ để pic nó có thời gian xử lý. Mình vẫn dùng code đó phát triển thêm để bảo vệ đồ án tốt nghiệp của mình mà. Có gì bạn cứ sent mail cho mình.

                    Đây là Video clip đồ án của mình:
                    Last edited by BachHoNB; 07-03-2013, 14:25.

                    Comment


                    • #11
                      Ko nhìn nhầm thì cái module SIM kia mua ở Hoàng Phát :-"
                      Web:
                      ->Nhận thiết kế, hoàn thiện dự án, sản phẩm điện tử<-
                      -->Giải pháp GSM/GPRS/GPS - Công nghệ RFID<--

                      Comment


                      • #12
                        Nguyên văn bởi demon52 Xem bài viết
                        Ko nhìn nhầm thì cái module SIM kia mua ở Hoàng Phát :-"
                        Đúng rồi đó. Ban đầu mình dùng Breakout sim900 này:

                        Click image for larger version

Name:	Breakout sim900.jpg
Views:	1
Size:	152.7 KB
ID:	1375498

                        Và đây là mạch sim của mình

                        Click image for larger version

Name:	PIC217.jpg
Views:	1
Size:	56.2 KB
ID:	1375499

                        Đúng gần hôm bảo vệ tốt nghiệp thì hỏng nên mình mượn module sim900A

                        Comment


                        • #13
                          Anh cho hỏi@@ đây là cả code gửi tin đó ạ? sao e thử mà k hiện tượng gì, e có cho thêm hàm cấu hình GSM mà cũng k ăn thua k hiện tượng gì là hoạt động cả. Anh có thể send code cho e tham khảo thêm không ah? a send mail: Vuhuutai90@gmail.com

                          void gsm_config()
                          {
                          delay_ms(2000);
                          printf("at\r\n");
                          delay_ms(500);
                          printf("at\r\n");
                          delay_ms(500);
                          printf("at\r\n");
                          delay_ms(500);
                          printf("at\r\n");
                          delay_ms(500);
                          printf("ate0\r\n");
                          delay_ms(500);
                          printf("at+cmgf=1\r\n");
                          delay_ms(500);
                          printf("at+cmgd=1\r\n");
                          delay_ms(500);
                          }

                          thanks @@
                          Last edited by mr_taivu; 30-03-2013, 01:16.

                          Comment


                          • #14
                            Nguyên văn bởi mr_taivu Xem bài viết
                            Anh cho hỏi@@ đây là cả code gửi tin đó ạ? sao e thử mà k hiện tượng gì, e có cho thêm hàm cấu hình GSM mà cũng k ăn thua k hiện tượng gì là hoạt động cả. Anh có thể send code cho e tham khảo thêm không ah? a send mail: Vuhuutai90@gmail.com

                            void gsm_config()
                            {
                            delay_ms(2000);
                            printf("at\r\n");
                            delay_ms(500);
                            printf("at\r\n");
                            delay_ms(500);
                            printf("at\r\n");
                            delay_ms(500);
                            printf("at\r\n");
                            delay_ms(500);
                            printf("ate0\r\n");
                            delay_ms(500);
                            printf("at+cmgf=1\r\n");
                            delay_ms(500);
                            printf("at+cmgd=1\r\n");
                            delay_ms(500);
                            }

                            thanks @@
                            Em dùng luôn code này đi:
                            #include <16f877a.h>
                            #fuses nowdt,hs,noput,noprotect,nodebug,nobrownout,nolvp, nocpd,nowrt
                            #use delay(clock=20000000)
                            #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
                            #include <lcd_lib_4bit.c>

                            char sms[80];
                            char c=0x00,c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
                            int8 new_sms=0,i=0,j=0;

                            #INT_RDA
                            void ngat()
                            {
                            c=getc();
                            if(c=='+') c1=c;
                            if(c=='C') c2=c;
                            if(c=='M') c3=c;
                            if(c=='T') c4=c;
                            if(c=='I') c5=c;
                            if(c1=='+' && c2=='C' && c3=='M' && c4=='T' && c5=='I') new_sms=1;
                            sms[i]=c; i++;
                            }

                            void delete_sms()
                            {
                            printf("AT+CMGD=1,4");//delete all message
                            putc(13);delay_ms(500);
                            }

                            void reset()
                            {
                            i=0;
                            new_sms=0;
                            c=0x00,c1=0x00,c2=0x00,c3=0x00,c4=0x00,c5=0x00;
                            for(j=0;j<90;j++) //Xoa sms[]
                            {sms[j]=0;}
                            }


                            void main()
                            {
                            enable_interrupts(global);
                            enable_interrupts(int_rda);
                            lcd_init();printf(lcd_putchar,"Seting....");delay_ ms(2000);lcd_putcmd(0x01);
                            reset();
                            delete_sms();
                            reset();
                            printf(lcd_putchar,"Start");delay_ms(3000);lcd_put cmd(0x01);
                            while(true)
                            {
                            delay_ms(3000);
                            if(new_sms==1)
                            {
                            reset();
                            printf(lcd_putchar,"New message");delay_ms(3000);lcd_putcmd(0x01);
                            // printf("at+cmgs=\"0922609003\"\r\n");
                            // delay_ms(500);printf("Da nhan duoc sms");delay_ms(500);putc(26);delay_ms(500);
                            reset();
                            }
                            }
                            }
                            Mấy cái config đó ko quan trọng đâu, bỏ đi cũng được. Nó chỉ gửi tập lệnh AT và lệnh xóa sms ở ngăn 1 mà thôi. Trong code của anh cũng có rồi đó.
                            Em thay số điện thoại ở trên bằng số của em. Rồi nạp vào pic. Nhắn tin đến số mà gắn vào sim900, nó nhận được và hiển thị lên màn hình LCD sau đó có gửi lại cho em 1 sms trả lời đó.
                            Nếu mạch của em ko chạy thì phần cứng có vấn đề. Xem lại mạch, và xem tx,rx của vđk và sim900 đã thông nhau chưa.

                            Comment


                            • #15
                              oki thanks a, để e test thử

                              Comment

                              Về tác giả

                              Collapse

                              BachHoNB Tìm hiểu thêm về BachHoNB

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X