PT2262/2272 Lập trình mã hóa/giải mã với PIC C

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • cskiller
    Đệ tử 4 túi
    • Aug 2008
    • 89

    #1

    PT2262/2272 Lập trình mã hóa/giải mã với PIC C

    Cặp chip PT2262/2272 được sử dụng rất phổ biến trong việc điều khiển từ xa các thiết bị sử dụng RF. Việc sử dụng vi điều khiển để thay thế chức năng mã hóa/giải mã của PT2262/PT2272 sẽ giúp các thiết kế mạch đơn giản bằng việc sử dụng phần mềm để thay thế chức năng của nó.
    Tài liệu này cung cấp 1 trong các cách phân tích phương thức mã hóa/giải mã của PT2262/2272 và hiện thực bằng ngôn ngữ CCS C với vi điều khiển PIC thông dụng.
    Regards

    Downloads:
    Code:
    [URL="http://forum.suno.vn/attachment.php?attachmentid=1025&stc=1&d=1244708356"]PT2262/2272 Lap trinh va Ung dung voi PIC C.pdf[/URL]
    Quang báo RG/RGB 6/8/12/16 bits màu
    Phone No: 0905.034.086
    Email: lmquyen@gmail.com
  • cskiller
    Đệ tử 4 túi
    • Aug 2008
    • 89

    #2
    Updated new link.
    Attached Files
    Quang báo RG/RGB 6/8/12/16 bits màu
    Phone No: 0905.034.086
    Email: lmquyen@gmail.com

    Comment

    • vu son
      Nhập môn đệ tử
      • Aug 2009
      • 5

      #3
      Thank bác ''cskiller'' nhiều em đang làm về cái này.

      Comment

      • khaidang27
        Nhập môn đệ tử
        • Oct 2010
        • 6

        #4
        Nguyên văn bởi cskiller View Post
        Updated new link.
        Chân thành cảm ơn anh rất nhiều, tài liệu tuy chưa đọc (đang chờ down xong), nhưng có lẽ rất là quý hiếm. Cảm ơn sự chia sẽ của anh rất nhiều. hihihihi

        Comment

        • picvn_letruyen
          Nhập môn đệ tử
          • Jan 2011
          • 1

          #5
          cảm ơn bạn đã chia sẽ tài liệu, chúc bạn thành công.
          truyenle
          --------------------------------------------
          nenhuongyeu

          Comment

          • kenburo
            Nhập môn đệ tử
            • Mar 2011
            • 1

            #6
            Thanks bác vô cùng chúc bác thành công

            Comment

            • motu
              Đệ tử 4 túi
              • Oct 2007
              • 79

              #7
              Thank bác nhiều lắm, dù bài viết đã lâu nhưng gãi đúng chỗ ngứa của em .
              Dao nao cung la dao, dao cao dai cung la dao.

              Comment

              • motu
                Đệ tử 4 túi
                • Oct 2007
                • 79

                #8
                e đọc tài liệu này cả tháng nay mới hiểu được chút chút, có mấy thắc mắc không tài nào hiểu được, mong ae chỉ giúp.
                1. Mấy dòng lệnh này có nghĩa gì:
                Code:
                #ifndef PT_SPEED
                #error "not define PT_SPEED"
                #endif
                Code:
                #define PT_MCU_CLOCK   getenv("CLOCK")
                PT_MCU_CLOCK sẽ = bao nhiêu????
                2. Về phần tính toán giá trị timing của tốc độ truyền:
                Code:
                #define PT_TIMER   (((((PT_MCU_CLOCK/4)/8)/(PT_SPEED/4))))
                signed long PT_TX_TIMER = -(PT_TIMER/1);
                em hiểu thế này không biết có đúng o
                PT_MCU_CLOCK/4 là do 4 xung pic thực hiện 1 lệnh
                PT_SPEED/4 cũng do 4 xung tạo thành 1 bit trong thuật toán mã hóa.
                PT_TX_TIMER = -(PT_TIMER/1) dấu - là do đếm từ PT_TX_TIMER đến 65535, /1 là hệ số prescale mặc định là 1.
                còn (PT_MCU_CLOCK/4)/8 e không hiểu tại sao có /8 ở chỗ này??? ae nào giải thích dùm e, e nghĩ hoài không ra.
                3. Cái remote của e có Rosc = 4M3, vậy mình chọn PT_SPEED là bao nhiêu, e gà không biết cách đọc datasheet.
                Thk cả nhà, chúc vui.!
                Dao nao cung la dao, dao cao dai cung la dao.

                Comment

                • motu
                  Đệ tử 4 túi
                  • Oct 2007
                  • 79

                  #9
                  Không ai giúp e với. .
                  Dao nao cung la dao, dao cao dai cung la dao.

                  Comment

                  • motu
                    Đệ tử 4 túi
                    • Oct 2007
                    • 79

                    #10
                    Chào cả nhà, dựa theo bài viết trên, e đã viết code cho con pic877a như sau:
                    Code:
                    #include <16F877A.H>
                    #include <def_877a.h>
                    #FUSES NOWDT, HS, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
                    #use delay(clock=4000000)
                    #define PT_MCU_CLOCK          getenv("CLOCK")
                    #define PT_SPEED              (9600)
                    #define PT_MAX_FRAME_CHECK    2
                    #define PT_TX_PIN             PIN_B0
                    #define PT_RX_PIN             PIN_B1
                    #define PT_TIMER              (((((PT_MCU_CLOCK/4)/8)/(PT_SPEED/4))))
                    #define PT_BIT_0              0b00010001
                    #define PT_BIT_1              0b01110111
                    #define PT_BIT_F              0b01110001
                    #define PT_SENDING            0
                    #define PT_IDLE               1
                    const char PT_BIT_TABLE[3]={PT_BIT_0,PT_BIT_1,PT_BIT_F};
                    signed long PT_TX_TIMER = -(PT_TIMER/1);
                    unsigned long TIME_0a_75_BIT = (float)(PT_TIMER)*(float)0.75;
                    unsigned long TIME_1a_25_BIT = (float)(PT_TIMER)*(float)1.25;
                    unsigned long TIME_2a_75_BIT = (float)(PT_TIMER)*(float)2.75;
                    unsigned long TIME_3a_25_BIT = (float)(PT_TIMER)*(float)3.25;
                    unsigned long TIME_30a_75_BIT = (float)(PT_TIMER)*(float)30.75;
                    unsigned long TIME_31a_25_BIT = (float)(PT_TIMER)*(float)31.25;
                    unsigned long data, addr;
                    unsigned int Pt2262BuffCurrent, Pt2262BuffCounter, Pt2262LoopCounter;
                    char PtBuff[16];
                    int1 PtState;
                    
                    void Pt2262TxCheck()
                       {
                        unsigned short b;
                        
                        if (Pt2262BuffCurrent!=Pt2262BuffCounter)
                         {
                          b = PtBuff[Pt2262BuffCurrent>>3]>>(Pt2262BuffCurrent&0x07);
                          output_bit(PT_TX_PIN,b);
                          Pt2262BuffCurrent++;
                         }
                        if (Pt2262BuffCurrent==Pt2262BuffCounter)
                         {
                          if (--Pt2262LoopCounter>0)
                           {
                            Pt2262BuffCurrent=0;
                           }
                          else
                           {
                            Pt2262BuffCurrent=0;
                            Pt2262LoopCounter = 4;
                            output_low(PT_TX_PIN);
                            clear_interrupt(INT_EXT);
                            enable_interrupts(INT_EXT);
                            PtState = PT_IDLE;
                           }
                         }
                       }  
                       
                    #int_timer1
                    void Timer1_ISR()
                       {
                        set_timer1(PT_TX_TIMER);
                        if(PtState==PT_SENDING)
                         {
                          Pt2262TxCheck();
                         }
                        else
                         {
                          PtState=PT_IDLE;
                         }
                       } 
                    
                    void main()
                       {
                        int i;
                        set_tris_b(0b00000010);
                        portB=0x00;
                        addr = 22222222;
                        data = 1111;
                        for (i=0;i<8;i++)
                         {
                          PtBuff[i] = PT_BIT_TABLE[(addr%10)%3];
                          addr = addr/10;
                         }
                        PtBuff[8] = ((data>>3)&0x01)?PT_BIT_1:PT_BIT_0;
                        PtBuff[9] = ((data>>2)&0x01)?PT_BIT_1:PT_BIT_0;
                        PtBuff[10] = ((data>>1)&0x01)?PT_BIT_1:PT_BIT_0;
                        PtBuff[11] = ((data>>0)&0x01)?PT_BIT_1:PT_BIT_0;
                        PtBuff[12] = 0b00000001;
                        PtBuff[13] = PtBuff[14] = PtBuff[15] = 0b00000000;
                        PtState = PT_IDLE;
                        enable_interrupts(global);
                        enable_interrupts(int_timer1);
                        setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
                        set_timer1(PT_TX_TIMER);
                        Pt2262BuffCurrent=0;
                        Pt2262BuffCounter = 16*8;
                        Pt2262LoopCounter = 4;
                        while(1)
                         {    
                          PtState = PT_SENDING;
                         }
                       }
                    không biết sai sót chỗ nào mà mạch thu không nhận được tín hiệu, pic dùng thạch anh 4MHz, mạch thu dùng pt2272, Rosc = 820K. Ai giúp e với, thk.
                    Dao nao cung la dao, dao cao dai cung la dao.

                    Comment

                    • sontvak42
                      Đệ tử 2 túi
                      • May 2012
                      • 30

                      #11
                      Chào anh motu! Hiện tại em cũng mới đang nghiên cứu về phần trên và đang còn gặp phải nhiều vướng mắt về các lệnh đó, chắc anh cũng đã từng làm qua rồi nên có thể giải thích cho em về các dòng lệnh đó cái được không ạ. Nếu có code mẫu phiền anh gửi lên cho em tham khảo chút được không ạ!
                      Em cám ơn nhiều
                      Tâm bất biến giữa dòng đời vạn biến!
                      ____fxn_vst____

                      Comment

                      Working...