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

                              • since0501
                                Trả lời cho Pin Li-FePO4 (pin sắt) rất dể hỏng! Các biện pháp ngăn ngừa.
                                bởi since0501
                                Mình đào mộ xíu, cho mình hỏi là pin của bác vẫn ok chứ? Mình vừa đóng khối pin 16 cell 40135 thì khi chạy điện áp nó sụt so với khi nghỉ như video mình dẫn link, vậy cho mình hỏi là dung lượng pin sẽ tính khi áp nghỉ hay áp đang hoạt động, và pin sụt áp như vậy là bình thường hay pin kém?
                                ht...
                                hôm nay, 17:56
                              • mèomướp
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi mèomướp
                                Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                                Hôm qua, 13:11
                              • tuyennhan
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi tuyennhan
                                Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                                Hôm qua, 09:25
                              • tuyennhan
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi tuyennhan
                                Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                                Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                                Hôm qua, 09:10
                              • Ng.Phuong.5
                                Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                                bởi Ng.Phuong.5
                                Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                                Mấy con...
                                09-01-2025, 19:44
                              • viettinh
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi viettinh
                                Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                                Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                                09-01-2025, 18:12
                              • nguyendinhvan
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi nguyendinhvan
                                Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                                Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                                Cách đơn giản...
                                09-01-2025, 00:04
                              • mèomướp
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi mèomướp
                                Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                                08-01-2025, 19:02
                              • tuyennhan
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi tuyennhan
                                Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                                08-01-2025, 15:43
                              • tuyennhan
                                Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                bởi tuyennhan
                                Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                                08-01-2025, 15:28
                              Đang tải...
                              X