Thông báo

Collapse
No announcement yet.

Rắc rối với Module SIM300C và PIC16F887

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

  • Rắc rối với Module SIM300C và PIC16F887

    Hi mọi người,

    Mình đang thiết kế Module SIM300C kết nối với PIC16F887 để gửi nhận tin nhắn SMS. Mình kết nối 2 chân RX và TX của SIM300C tới VDK qua switch, còn chân RTS nối tới đất. Với cách nối này khi 2 chân RX và TX của SIM300C không nối với VDK mình thấy module SIM300C hoạt động rất ổn định. luôn tìm được mạng. Tuy nhiên khi SIM300C được nối với VDK, thì hoạt động không ổn định, không tìm được mạng nữa (Den led báo trạng thái cứ nháy 2 lần, rồi tắt 1 lúc rồi cứ lặp lại như vậy). Lỗi này lâu rồi mà mình chưa xử lý được. Mọi người chỉ giúp mình với.

    Thanks mọi người nhiều!

  • #2
    Chào bạn
    Theo mình thì phần tìm mạng của SIM300 ko phụ thuộc vào gì cả, nên bạn kiểm tra lại mạch xem:
    + Có chạm chập gì ko
    + Nguồn cung cấp có ổn định ko, lưu ý dòng cung cấp
    + Có bị nhiễu ko, cần có các tụ điện ở gần chân VBAT

    mà khi SIM300 ko tìm đc mạng thì nó nháy đều đều chứ nhỉ, còn tìm được thì nó sẽ nháy nhanh rồi tắt

    Comment


    • #3
      Nguyên văn bởi NMI Xem bài viết
      Chào bạn
      Theo mình thì phần tìm mạng của SIM300 ko phụ thuộc vào gì cả, nên bạn kiểm tra lại mạch xem:
      + Có chạm chập gì ko
      + Nguồn cung cấp có ổn định ko, lưu ý dòng cung cấp
      + Có bị nhiễu ko, cần có các tụ điện ở gần chân VBAT

      mà khi SIM300 ko tìm đc mạng thì nó nháy đều đều chứ nhỉ, còn tìm được thì nó sẽ nháy nhanh rồi tắt
      Xin lỗi vì hôm này mình mới gửi feedback được. 3 điều kiện kiểm tra của bạn mình đều thấy OK. Đùng là khi search được mạng thì đèn sẽ nháy đều 3s 1 lần( khi không nối với PIC), còn module của mình lại có hiện tượng nháy 2 lần liên tiếp rất nhanh rồi tắt khoảng 5s rồi lại lặp lại chu kỳ đó( Chỉ Khi nối với PIC mới có hiện tượng này). Trong specification của SIM300C cũng ko có hiện tượng này nên mình chưa biết lý giải sao

      Comment


      • #4
        Thế thì cũng lạ, mình có làm với modul này và nó chạy tốt, ko bị hiện tượng như bạn
        Hay là bạn nối vào cổng serial DEBUG?
        Bạn thử xóa PIC đi rồi nối dây phần cứng xem sao
        Khi ko nối với PIC, modul tìm được mạng bạn thử lấy điện thoại rồi gọi vào số của modul rồi quan sát nguồn xem sao

        Comment


        • #5
          @NMI: Mình kiểm tra kỹ rồi, modul DEBUG mình không có nối, mình nghĩ có thể là do cách giao tiếp với PIC của mình, mình dùng 3 chân của SIM300C, RX, TX và Clear to Send (nối đất). Bạn giao tiếp dùng những chân nào vậy

          Comment


          • #6
            Clear to Send nối với Request to Send.

            Comment


            • #7
              @david: Bạn có thể nói rõ hơn được không. Mình nối Clear to Send tới đất khi ko nối RX và TX với PIC vẫn chạy ngon lành mà.

              Comment


              • #8
                Có thể hơi thừa, nhưng bạn kiểm tra lại, RX của thằng này phải nối vào TX của thằng kia

                Comment


                • #9
                  @KnowMore: ah, mình đảm bảo là mình nối chéo nhau ấy ạ,

                  Comment


                  • #10
                    Mình cũng chỉ dùng 2 chân rx tx thôi.
                    Trên mạch mình nối đất cả 2 chân RTS, DTR. Có đoạn này trong datasheet:
                    "Module will automatically go into SLEEP mode if DTR is set
                    to high level and there is no on air or audio activity is required
                    and no hardware interrupt (such as GPIO interrupt or data on
                    serial port)."
                    Căn bản thấy thế nên nối đất luôn, chưa test nó có đúng vậy ko

                    Comment


                    • #11
                      Cả hai chân RTS, DTR mình nối vào 2 pin I/O của PIC và cũng set bằng 0. Mình đã giải quyết được vấn đề là Module SIM300C đã hoạt động ổn định. Tuy nhiên khi mình gửi lệnh AT đọc tin nhắn ở Module SIM300C thì khi nhận lên mình lại được cả lệnh AT gửi xuống và phản hồi của SIM300C gửi lên. Cái này mình đang không giải quyết được. Mọi người cho mình ý kiến với.
                      P/s: Ai có code cho phép đọc nội dung tin nhắn SMS trên SIM300C thì có thể up lên được ko?
                      Thanks all!

                      Comment


                      • #12
                        Nguyên văn bởi bluexylitol Xem bài viết
                        Cả hai chân RTS, DTR mình nối vào 2 pin I/O của PIC và cũng set bằng 0. Mình đã giải quyết được vấn đề là Module SIM300C đã hoạt động ổn định. Tuy nhiên khi mình gửi lệnh AT đọc tin nhắn ở Module SIM300C thì khi nhận lên mình lại được cả lệnh AT gửi xuống và phản hồi của SIM300C gửi lên. Cái này mình đang không giải quyết được. Mọi người cho mình ý kiến với.
                        P/s: Ai có code cho phép đọc nội dung tin nhắn SMS trên SIM300C thì có thể up lên được ko?
                        Thanks all!
                        Để bỏ phản hồi, bạn dùng lệnh sau: ATE0, ví dụ áp dụng:
                        printf( "ATE0\r");

                        Có đoạn code sau bạn có thể tham khảo


                        void bvhProcessSM()
                        {
                        restart_wdt();
                        // Check if a New message has arrived
                        sprintf(NumBuf, reSMReceive);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        // Read The Message
                        // Get the Message Position
                        delay_ms(100);
                        bvhCopyString(pos+11, 3, NumBuf);
                        bvhCopyString(pos+11, 3, SMPos);
                        bvhResetBuffer();
                        // Read the Message
                        sprintf(Command, atReadSM "%s\r", NumBuf);
                        sprintf(SetRespond, reOK);
                        bvhWaitRespond(10, FALSE);
                        delay_ms(100);


                        // Read OK, Now Parse the Message
                        restart_wdt();
                        // Copy and Save the Sender Number
                        sprintf(NumBuf, reUnread);
                        pos= bvhFindString(NumBuf);
                        bvhCopyString(pos+ 9, 16, NumBuf);
                        bvhSaveString(NumBuf, EEPROM_ADD_ADMN);
                        delay_ms(100);

                        //-------------------------------------------------------------------
                        // Find the Keywords and Process the Short Message
                        bvhModemState.SmSettings= 0; // No Setting Command found
                        bvhModemState.SmExecution= 0; // No Execution Command found

                        // Find SETA<Number1> Keyword
                        sprintf(NumBuf, SETA);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        bvhModemState.SmSettings= 1;
                        bvhCopyString(pos+4, 14, NumBuf);
                        // Save to EEPROM
                        bvhSaveString(NumBuf, EEPROM_ADD_SETA);
                        delay_ms(100);
                        }
                        // Find SETB<Number2> Keyword
                        sprintf(NumBuf, SETB);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        bvhModemState.SmSettings= 1;
                        bvhCopyString(pos+4, 14, NumBuf);
                        // Save to EEPROM
                        bvhSaveString(NumBuf, EEPROM_ADD_SETB);
                        }

                        // Find ALRM0
                        sprintf(NumBuf, ALRM0);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        bvhModemState.SmAlarm= 0;
                        bvhModemState.SmExecution= 1;
                        output_low(PIN_B0);
                        }
                        // Find ALRM1
                        sprintf(NumBuf, ALRM1);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        bvhModemState.SmAlarm= 1;
                        bvhModemState.SmExecution= 1;
                        output_high(PIN_B0);
                        }

                        // Find CAMR0
                        sprintf(NumBuf, CAMR0);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        bvhModemState.SmCamera= 0;
                        bvhModemState.SmExecution= 1;
                        output_low(PIN_B1);
                        }
                        // Find CAMR1
                        sprintf(NumBuf, CAMR1);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        bvhModemState.SmCamera= 1;
                        bvhModemState.SmExecution= 1;
                        output_high(PIN_B1);
                        }

                        // Find POWR0
                        sprintf(NumBuf, POWR0);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        bvhModemState.SmPower= 0;
                        bvhModemState.SmExecution= 1;
                        output_low(PIN_B2);
                        }
                        // Find POWR1
                        sprintf(NumBuf, POWR1);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        bvhModemState.SmPower= 1;
                        bvhModemState.SmExecution= 1;
                        output_high(PIN_B2);
                        }


                        // The mandatory and The last check: Password
                        // Check if the Message is from the ADMIN Number (Valid Password)
                        sprintf(NumBuf, UPAS);
                        bvhLoadString(&NumBuf[4], EEPROM_ADD_UPAS);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF) // Ok, from ADMIN
                        {
                        // Change Password if neccessary
                        // Find the CPAS<Password> Keyword
                        sprintf(NumBuf, CPAS);
                        pos= bvhFindString(NumBuf);
                        if(pos< 0xFF)
                        {
                        bvhModemState.SmSettings= 1;
                        bvhCopyString(pos+4, 14, NumBuf);
                        // Save to EEPROM
                        bvhSaveString(NumBuf, EEPROM_ADD_UPAS);
                        }
                        }
                        else
                        {
                        bvhModemState.SmSettings= 0;
                        bvhModemState.SmExecution= 0;
                        }


                        bvhResetBuffer();
                        // Check If The format is Valid
                        if(bvhModemState.SmSettings || bvhModemState.SmExecution)
                        {
                        // Send a Message
                        // To Administrator
                        bvhLoadString(NumBuf, EEPROM_ADD_ADMN);
                        sprintf(Command, atSendSM "%s\r", NumBuf);
                        delay_ms(50);
                        sprintf(SetRespond, reEnterSM);
                        bvhWaitRespond(1, TRUE);

                        // Report Settings
                        if(bvhModemState.SmSettings)
                        {
                        printf("Moderator:");
                        bvhLoadString(NumBuf, EEPROM_ADD_SETA);
                        if(NumBuf[0]!= '*')
                        {
                        printf(" %s", NumBuf);
                        }
                        bvhLoadString(NumBuf, EEPROM_ADD_SETB);
                        if(NumBuf[0]!= '*')
                        {
                        printf(" %s", NumBuf);
                        }
                        bvhLoadString(NumBuf, EEPROM_ADD_UPAS);
                        printf("\r\nPassword: %s", NumBuf);
                        }

                        // Report Executions
                        if(bvhModemState.SmExecution)
                        {
                        if(bvhModemState.SmAlarm)
                        {
                        printf("\r\nAlarm On");
                        }
                        else
                        {
                        printf("\r\nAlarm Off");
                        }

                        if(bvhModemState.SmCamera)
                        {
                        printf("\r\nCamera On");
                        }
                        else
                        {
                        printf("\r\nCamera Off");
                        }

                        if(bvhModemState.SmPower)
                        {
                        printf("\r\nPower On");
                        }
                        else
                        {
                        printf("\r\nPower Off");
                        }
                        }

                        printf("%c", CTRL_Z);

                        // Wait OK
                        Command[0]= 0x00;
                        sprintf(SetRespond, reOK);
                        bvhWaitRespond(254, TRUE);
                        bvhResetBuffer();


                        // Send Messages to Moderators
                        if(bvhModemState.SmSettings)
                        {
                        // To Moderator A
                        bvhLoadString(NumBuf, EEPROM_ADD_SETA);
                        if(NumBuf[0]!= '*') // Moderator Enabled
                        {
                        sprintf(Command, atSendSM "\"%s\"\r", NumBuf);
                        delay_ms(50);
                        sprintf(SetRespond, reEnterSM);
                        bvhWaitRespond(1, TRUE);

                        printf("So cua ban da duoc chon lam"
                        " Moderator A\r\n%c", CTRL_Z);
                        // Wait OK
                        Command[0]= 0x00;
                        sprintf(SetRespond, reOK);
                        bvhWaitRespond(254, TRUE);
                        }

                        // To Moderator B
                        bvhLoadString(NumBuf, EEPROM_ADD_SETB);
                        if(NumBuf[0]!= '*') // Moderator Enabled
                        {
                        sprintf(Command, atSendSM "\"%s\"\r", NumBuf);
                        delay_ms(50);
                        sprintf(SetRespond, reEnterSM);
                        bvhWaitRespond(1, TRUE);

                        printf("So cua ban da duoc chon lam"
                        " Moderator B\r%c", CTRL_Z);
                        // Wait OK
                        Command[0]= 0x00;
                        sprintf(SetRespond, reOK);
                        bvhWaitRespond(254, TRUE);
                        }
                        }

                        bvhResetBuffer();
                        }
                        else
                        {
                        // Send a Message
                        bvhLoadString(NumBuf, EEPROM_ADD_ADMN);
                        sprintf(Command, atSendSM "%s\r", NumBuf);
                        delay_ms(50);
                        sprintf(SetRespond, reEnterSM);
                        bvhWaitRespond(1, TRUE);

                        printf( "Tin nhan khong hop le.\r\n"
                        "Xin vui long thu lai.\r%c", CTRL_Z);
                        // Wait OK
                        Command[0]= 0x00;
                        sprintf(SetRespond, reOK);
                        bvhWaitRespond(254, TRUE);
                        bvhResetBuffer();
                        }

                        // Delete Messages for Future Use
                        restart_wdt();
                        sprintf(Command, atDeleteSM "%s\r", SMPos);
                        sprintf(SetRespond, reOK);
                        bvhWaitRespond(10, TRUE);

                        restart_wdt();
                        sprintf(Command, atDeleteSM "1\r");
                        sprintf(SetRespond, reOK);
                        bvhWaitRespond(10, TRUE);
                        restart_wdt();
                        sprintf(Command, atDeleteSM "2\r");
                        sprintf(SetRespond, reOK);
                        bvhWaitRespond(10, TRUE);
                        }
                        }


                        void main()
                        {
                        setup_psp(PSP_DISABLED);
                        setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); // 18.432Mz, Overflow every 0.0142s

                        // TODO: USER CODE!!
                        enable_interrupts(INT_TIMER0);
                        enable_interrupts(INT_RDA);



                        //================================================== ==========================

                        set_tris_b(0x00); // Port B as Output
                        set_tris_e(0xFF); // Port E as Input
                        set_tris_d(0xFF); // Port D as Input
                        bvhIoState= input_d();


                        // Check the Password and Init it
                        NumBuf[0]= 0xFF;
                        bvhLoadString(NumBuf, EEPROM_ADD_UPAS);
                        if(((unsigned char) NumBuf[0])>= 0x7F)
                        {
                        NumBuf[0]= '0';
                        NumBuf[1]= '4';
                        NumBuf[2]= '0';
                        NumBuf[3]= '2';
                        NumBuf[4]= 0x00;
                        bvhSaveString(NumBuf, EEPROM_ADD_UPAS);
                        }


                        bvhModemState.ModemOn= 0; // State is Off
                        bvhModemState.ModemConnected= 0; // State is Not Connected
                        bvhModemState.SmAlarm= 0; // Alarm Off
                        bvhModemState.SmCamera= 0; // Camera Off
                        bvhModemState.SmPower= 0; // Power Off

                        output_low(PWRKEY);
                        bvhResetBuffer();

                        enable_interrupts(GLOBAL);
                        delay_ms(1000);


                        while(1) // While 1
                        {
                        //---------------------------------------------------------
                        // Check if Modem is On
                        if(bvhModemState.ModemOn)
                        {
                        // Check if Modem is Connected
                        if(bvhModemState.ModemConnected) // Connected
                        {
                        // Check IO Ports
                        bvhCheckIO();

                        // Dismiss any Call
                        bvhDismissCalls();

                        // Wait for Short Messages
                        bvhProcessSM();
                        }
                        else // Not Connected
                        {
                        delay_ms(1000);
                        bvhConnectModem();
                        }
                        } // Modem Is On
                        } // While 1
                        }


                        Have Fun!

                        Comment


                        • #13
                          @bvhoang: Ok. Thanks bạn nhiều lắm. Mình không để ý lệnh ATE0. Đoạn code của bạn mình đang nghiên cứu.

                          Comment


                          • #14
                            Kiểm tra xem mức logic cua TX và RX của PIC có phải là 3V3 ko? Nguồn cấp cho PIC phải 3V3?
                            Thiết bị định vị ,hộp đen :

                            Comment


                            • #15
                              Nguyên văn bởi bluexylitol Xem bài viết
                              Cả hai chân RTS, DTR mình nối vào 2 pin I/O của PIC và cũng set bằng 0. Mình đã giải quyết được vấn đề là Module SIM300C đã hoạt động ổn định. Tuy nhiên khi mình gửi lệnh AT đọc tin nhắn ở Module SIM300C thì khi nhận lên mình lại được cả lệnh AT gửi xuống và phản hồi của SIM300C gửi lên. Cái này mình đang không giải quyết được. Mọi người cho mình ý kiến với.
                              P/s: Ai có code cho phép đọc nội dung tin nhắn SMS trên SIM300C thì có thể up lên được ko?
                              Thanks all!
                              vậy lỗi của bạn là bị sao thế.Nói cho mọi người rút kinh nghiệm.
                              Mình cũng đang làm bộ sim 300 ,sim đã nhận dc mạng mà gọi điện thoại tới thì không gọi dc.Bó tay,mạch không biết sai cái gì

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X