Thông báo

Collapse
No announcement yet.

code cho PIC 16f887 chức năng giống PT 2262 -2272

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

  • code cho PIC 16f887 chức năng giống PT 2262 -2272

    em đang làm đồ án điều khiển thiét bị trong nhà dùng RF, nếu dùng pt thì đơn giản quá thầy ko chịu, nên phải dùng pic viết code gởi lên module phát, vậy cho e hỏi vài điều
    1. mã dataout của con PT 2262 là chuỗi bit hay sao ạh , và cụ thể như thế nào
    2. dùng pic thì viét code như thế nào để thực hiện giống như con PT, em câ điều khiển 8 kênh on/off thôi
    3. e dùng module thu phát rf như trong hình thì chỉ cần suất 1 chuỗi bit vào nó là phát được hay phải làm sao, ???
    Chốt là e học bên tự động hix, chọn trúng cái đề tài này toàn sóng sánh nên chịu , xin máy bác giúp nhiệt tình chút , tks ạh
    Click image for larger version

Name:	-font-b-RF-b-font-wireless-font-b-receiver-b-font-font-b-module-b.jpg
Views:	1
Size:	13.4 KB
ID:	1419494
    CK6C -HUI

  • #2
    Nguyên văn bởi minhtri0405 Xem bài viết
    em đang làm đồ án điều khiển thiét bị trong nhà dùng RF, nếu dùng pt thì đơn giản quá thầy ko chịu, nên phải dùng pic viết code gởi lên module phát, vậy cho e hỏi vài điều
    1. mã dataout của con PT 2262 là chuỗi bit hay sao ạh , và cụ thể như thế nào
    2. dùng pic thì viét code như thế nào để thực hiện giống như con PT, em câ điều khiển 8 kênh on/off thôi
    3. e dùng module thu phát rf như trong hình thì chỉ cần suất 1 chuỗi bit vào nó là phát được hay phải làm sao, ???
    Chốt là e học bên tự động hix, chọn trúng cái đề tài này toàn sóng sánh nên chịu , xin máy bác giúp nhiệt tình chút , tks ạh
    [ATTACH=CONFIG]77529[/ATTACH]

    Được sài PIC ( mcu ) thì ngon quá rồi còn gì ... PT2262/PT2272 làm gì nữa cho mệt ? !

    Cách viết mã hóa/ giải mã thì rất đơn giản ... tự nghĩ ra cũng được . Có thể tham khảo ở trong website của mình ... Welcome to Que Duong Electronics weBSite ! ! ! mục Support ( có đầy mã nguồn C đó ).
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #3
      Nhớ ngày xưa cách đây chác vài năm cũng viết cho em nào đó ở Quảng Ninh , Hải Phòng ... cái đề tài tương tự ... mò trong máy tính được cái này :
      Điều khiển 8 led nút bấm ( PIC16F877A) --- CCS nhé.
      ( cách thức hoạt động : Gạt switch ... bấm nút send ... bên thu sẽ sáng led tương ứng --- Có mã nguồn C ở bên dưới ... pố tùy ý sửa code theo ý muốn nha ! )

      Click image for larger version

Name:	LED_SEND.jpg
Views:	2
Size:	92.3 KB
ID:	1388011

      Phát :

      Code:
      #include <16F877A.h>
      #device adc=8
      #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT_50%
      #use delay(clock=4000000)
      
      #define TX_ID 0x30    // Transmitter ID
      #define TX PIN_C6     // Chan phat xung ma hoa
      #define Button PIN_D0 // nut bam
      #define Led PIN_D1    // Power led
      unsigned char TX_packet[3];
      unsigned char i,j;
      unsigned int checksum;
      void Transmitter();
      void main()
      {
      
         setup_adc_ports(NO_ANALOGS);
         setup_adc(ADC_OFF);
         setup_comparator(NC_NC_NC_NC);
      
         set_tris_c(0b10111111);
         output_c(0x00);
         set_tris_a(0x00);
         output_a(0x00);
         set_tris_d(0xFD); // rd1 output
         output_high(Led);
      while(TRUE)
      {
       if(!input(Button))
       {
         
         do
           {
              // Dong goi du lieu //  ( data packet )
               checksum=0;
               TX_packet[0]=TX_ID;      //  Transmitter ID
               checksum+= TX_packet[0];
               TX_packet[1]=input_b();  // doc trang thai port b
               checksum+= TX_packet[1];
               TX_packet[2]=checksum;   // goi du lieu  ( Tong ( Sum ) ) 
             // gui du lieu qua chan TX
              Transmitter();
           }
         while(!input(Button));
         delay_ms(200);  // Chong rung phim
          
       }   
      }
         
      
      }
      ///////////////// functions ////////////////////////
      void Transmitter()
          {
      
             
             for (i=0;i<32;i++)        // send preamble
              {
                output_high(TX);
                delay_us(416);  // Delay 416 uS
                output_low(TX);
                delay_us(416);  //
              }
                delay_us(1248);  // delay 1248 uS or 3Te for syn bit
               
      
                //-----------------
                output_high(TX);        // start bit
                delay_us(416);
                output_low(TX);
                delay_us(416);
      
                //-----------------
             for (j=0;j<3;j++)       // 3 bytes packet transmitter
              {
      
                for(i=0;i<8;i++)
                   {
                     if ((TX_packet[j] & 0x80) == 0x80)
                       {
                        output_high(TX);
                        delay_us(416);
                        output_low(TX);
                        delay_us(416);
      
                       }
                      else
                      {
                        output_low(TX);
                        delay_us(416);
                        output_high(TX);
                        delay_us(416);
      
                      }
                      TX_packet[j]=TX_packet[j]<<1;
      
                   }
              }
              //------ send stop bit -------
              output_high(TX);
              delay_us(416);
              output_low(TX);
              delay_us(416);
      
              delay_ms(20);        // delay gaurd
      
      
          }
      //////////////////////////////

      Thu :
      Code:
      #include <16F877A.h>
      #device adc=8
      #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT_50%
      #use delay(clock=4000000)
      
      #define RX_ID 0x30    // Receiver ID
      #define RX PIN_C7     // Chan nhan xung ma hoa
      #define Led PIN_D1    // power led
      unsigned char RX_packet[3],x;
      int1 rx_bit;           // rx_bit range value : 0 or 1 
      unsigned int checksum;
      int1 Receiver(unsigned char *buff);
      
      void main()
      {
      
         setup_adc_ports(NO_ANALOGS);
         setup_adc(ADC_OFF);
         setup_comparator(NC_NC_NC_NC);
          
        set_tris_b(0x00);  // Port b all out put
        output_b(0x00);  // port b all low
        set_tris_c(0xFF); // port C all input   ( RC7 input) 
        set_tris_d(0xFD);
        output_high(Led);
        
        while(TRUE)
       {
        
         
         checksum=0;
         while(Receiver(RX_packet));
         for(x=0;x<2;x++)
         checksum+= RX_packet[x];
         checksum&= 0x0FF;
         if(checksum==RX_packet[2])   // Kiem tra tong cua goi du lieu (packet)
         {
          if(RX_packet[0]==RX_ID)    // Kiem tra ID
          {
             output_b(RX_packet[1]);  // Xuat ra port b
          }
         }
        
       }  // End while(1)
      }
      
      
      //////////////////////////// Functions  ////////////////////////////
      int1 Receiver(unsigned char *buff)
        {
          unsigned char i,j,T0,count;
          i=32;
          count=0;
          setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);    // setup timer 0 div 2
            while(--i)        // wait preamble
             {
          
            #asm
            NOP;  
            NOP; 
            NOP; 
            #endasm
              
               while(input(RX));
               set_timer0(0);   // reset timer0 = 0
              #asm  
              NOP; 
              NOP; 
              NOP; 
              #endasm
      
               while(!input(RX));
               T0=get_timer0();  // doc timer 0
               if (T0==0xFF) {return 1;}      // error
               if ((T0>=198) && (T0<=218))          // check pulse 396us --> 436us (OK )
                {
                  count++;
                  if ((count>=1)|| (i==0)) break;
                }
      
             }
           if ((count==0)&&(i==0)) {return 1;} // error
           setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);  //  setup time0 div 16
           T0=0;
           while (!((T0>=94) && (T0<=114)))             // 1504 - 1824 uS it OK. syn bit for 4Te or 1664 uS
            {
              #asm  
              NOP; 
              NOP; 
              NOP; 
              #endasm
      
              while(input(RX));        // wait syn
              set_timer0(0);   // reset timer0 = 0
              #asm  
              NOP; 
              NOP; 
              NOP; 
              #endasm
      
              while(!input(RX));
              T0=get_timer0();  // doc timer 0
            }
      
           while(input(RX));                         //wait start bit go low
           delay_us(624);         // delay before sampling (1.5Te)
           for (j=0;j<3;j++)     // build packet bytes  ( 3 bytes)
            {
      
              i=8;              // build paket bit  (8 bits )
              buff[j]=0;
              while(i--)
               {
                 buff[j]=buff[j]<<1;
                 rx_bit=input(RX);        // check logic (0,1) chan RX
                 buff[j]=buff[j] | rx_bit;
                 if (rx_bit==0)
                 while(!input(RX));
                 else
                 while(input(RX));
                 delay_us(624);         // delay for 1,5Te
      
               }
      
            }
      
          if (rx_bit==0)
          if (!input(RX)) return 1; // error (no stop bit found)
          else
          if (!input(RX)) return 1; // error (no stop bit found)
          return 0;
       }

      --- Thôi ... hết rồi . Đi ngủ cho khỏe !
      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

      Comment


      • #4
        Nguyên văn bởi queduong Xem bài viết
        Được sài PIC ( mcu ) thì ngon quá rồi còn gì ... PT2262/PT2272 làm gì nữa cho mệt ? !

        Cách viết mã hóa/ giải mã thì rất đơn giản ... tự nghĩ ra cũng được . Có thể tham khảo ở trong website của mình ... Welcome to Que Duong Electronics weBSite ! ! ! mục Support ( có đầy mã nguồn C đó ).
        Nguyên văn bởi queduong Xem bài viết
        Nhớ ngày xưa cách đây chác vài năm cũng viết cho em nào đó ở Quảng Ninh , Hải Phòng ... cái đề tài tương tự ... mò trong máy tính được cái này :
        Điều khiển 8 led nút bấm ( PIC16F877A) --- CCS nhé.
        ( cách thức hoạt động : Gạt switch ... bấm nút send ... bên thu sẽ sáng led tương ứng --- Có mã nguồn C ở bên dưới ... pố tùy ý sửa code theo ý muốn nha ! )

        [ATTACH=CONFIG]77578[/ATTACH]

        Phát :

        Code:
        #include <16F877A.h>
        #device adc=8
        #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT_50%
        #use delay(clock=4000000)
        
        #define TX_ID 0x30    // Transmitter ID
        #define TX PIN_C6     // Chan phat xung ma hoa
        #define Button PIN_D0 // nut bam
        #define Led PIN_D1    // Power led
        unsigned char TX_packet[3];
        unsigned char i,j;
        unsigned int checksum;
        void Transmitter();
        void main()
        {
        
           setup_adc_ports(NO_ANALOGS);
           setup_adc(ADC_OFF);
           setup_comparator(NC_NC_NC_NC);
        
           set_tris_c(0b10111111);
           output_c(0x00);
           set_tris_a(0x00);
           output_a(0x00);
           set_tris_d(0xFD); // rd1 output
           output_high(Led);
        while(TRUE)
        {
         if(!input(Button))
         {
           
           do
             {
                // Dong goi du lieu //  ( data packet )
                 checksum=0;
                 TX_packet[0]=TX_ID;      //  Transmitter ID
                 checksum+= TX_packet[0];
                 TX_packet[1]=input_b();  // doc trang thai port b
                 checksum+= TX_packet[1];
                 TX_packet[2]=checksum;   // goi du lieu  ( Tong ( Sum ) ) 
               // gui du lieu qua chan TX
                Transmitter();
             }
           while(!input(Button));
           delay_ms(200);  // Chong rung phim
            
         }   
        }
           
        
        }
        ///////////////// functions ////////////////////////
        void Transmitter()
            {
        
               
               for (i=0;i<32;i++)        // send preamble
                {
                  output_high(TX);
                  delay_us(416);  // Delay 416 uS
                  output_low(TX);
                  delay_us(416);  //
                }
                  delay_us(1248);  // delay 1248 uS or 3Te for syn bit
                 
        
                  //-----------------
                  output_high(TX);        // start bit
                  delay_us(416);
                  output_low(TX);
                  delay_us(416);
        
                  //-----------------
               for (j=0;j<3;j++)       // 3 bytes packet transmitter
                {
        
                  for(i=0;i<8;i++)
                     {
                       if ((TX_packet[j] & 0x80) == 0x80)
                         {
                          output_high(TX);
                          delay_us(416);
                          output_low(TX);
                          delay_us(416);
        
                         }
                        else
                        {
                          output_low(TX);
                          delay_us(416);
                          output_high(TX);
                          delay_us(416);
        
                        }
                        TX_packet[j]=TX_packet[j]<<1;
        
                     }
                }
                //------ send stop bit -------
                output_high(TX);
                delay_us(416);
                output_low(TX);
                delay_us(416);
        
                delay_ms(20);        // delay gaurd
        
        
            }
        //////////////////////////////

        Thu :
        Code:
        #include <16F877A.h>
        #device adc=8
        #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT_50%
        #use delay(clock=4000000)
        
        #define RX_ID 0x30    // Receiver ID
        #define RX PIN_C7     // Chan nhan xung ma hoa
        #define Led PIN_D1    // power led
        unsigned char RX_packet[3],x;
        int1 rx_bit;           // rx_bit range value : 0 or 1 
        unsigned int checksum;
        int1 Receiver(unsigned char *buff);
        
        void main()
        {
        
           setup_adc_ports(NO_ANALOGS);
           setup_adc(ADC_OFF);
           setup_comparator(NC_NC_NC_NC);
            
          set_tris_b(0x00);  // Port b all out put
          output_b(0x00);  // port b all low
          set_tris_c(0xFF); // port C all input   ( RC7 input) 
          set_tris_d(0xFD);
          output_high(Led);
          
          while(TRUE)
         {
          
           
           checksum=0;
           while(Receiver(RX_packet));
           for(x=0;x<2;x++)
           checksum+= RX_packet[x];
           checksum&= 0x0FF;
           if(checksum==RX_packet[2])   // Kiem tra tong cua goi du lieu (packet)
           {
            if(RX_packet[0]==RX_ID)    // Kiem tra ID
            {
               output_b(RX_packet[1]);  // Xuat ra port b
            }
           }
          
         }  // End while(1)
        }
        
        
        //////////////////////////// Functions  ////////////////////////////
        int1 Receiver(unsigned char *buff)
          {
            unsigned char i,j,T0,count;
            i=32;
            count=0;
            setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);    // setup timer 0 div 2
              while(--i)        // wait preamble
               {
            
              #asm
              NOP;  
              NOP; 
              NOP; 
              #endasm
                
                 while(input(RX));
                 set_timer0(0);   // reset timer0 = 0
                #asm  
                NOP; 
                NOP; 
                NOP; 
                #endasm
        
                 while(!input(RX));
                 T0=get_timer0();  // doc timer 0
                 if (T0==0xFF) {return 1;}      // error
                 if ((T0>=198) && (T0<=218))          // check pulse 396us --> 436us (OK )
                  {
                    count++;
                    if ((count>=1)|| (i==0)) break;
                  }
        
               }
             if ((count==0)&&(i==0)) {return 1;} // error
             setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);  //  setup time0 div 16
             T0=0;
             while (!((T0>=94) && (T0<=114)))             // 1504 - 1824 uS it OK. syn bit for 4Te or 1664 uS
              {
                #asm  
                NOP; 
                NOP; 
                NOP; 
                #endasm
        
                while(input(RX));        // wait syn
                set_timer0(0);   // reset timer0 = 0
                #asm  
                NOP; 
                NOP; 
                NOP; 
                #endasm
        
                while(!input(RX));
                T0=get_timer0();  // doc timer 0
              }
        
             while(input(RX));                         //wait start bit go low
             delay_us(624);         // delay before sampling (1.5Te)
             for (j=0;j<3;j++)     // build packet bytes  ( 3 bytes)
              {
        
                i=8;              // build paket bit  (8 bits )
                buff[j]=0;
                while(i--)
                 {
                   buff[j]=buff[j]<<1;
                   rx_bit=input(RX);        // check logic (0,1) chan RX
                   buff[j]=buff[j] | rx_bit;
                   if (rx_bit==0)
                   while(!input(RX));
                   else
                   while(input(RX));
                   delay_us(624);         // delay for 1,5Te
        
                 }
        
              }
        
            if (rx_bit==0)
            if (!input(RX)) return 1; // error (no stop bit found)
            else
            if (!input(RX)) return 1; // error (no stop bit found)
            return 0;
         }

        --- Thôi ... hết rồi . Đi ngủ cho khỏe !
        perfect quá, tks bác quế dương nhiêu lắm
        CK6C -HUI

        Comment


        • #5
          Câu hỏi có lẽ hơi ngốc vì em chưa rõ về cái vấn đề này lắm, em ko biết dùng module RF gì? Và nối vào chân nào của PIC như theo sơ đồ hình trên? Có phải chân dữ liệu của module phát nối với chân TX, chân dữ liệu module thu nối với chân RX ko vậy anh. Em cảm ơn vì bài viết hữu ích này!
          Nguyên văn bởi queduong Xem bài viết
          Nhớ ngày xưa cách đây chác vài năm cũng viết cho em nào đó ở Quảng Ninh , Hải Phòng ... cái đề tài tương tự ... mò trong máy tính được cái này :
          Điều khiển 8 led nút bấm ( PIC16F877A) --- CCS nhé.
          ( cách thức hoạt động : Gạt switch ... bấm nút send ... bên thu sẽ sáng led tương ứng --- Có mã nguồn C ở bên dưới ... pố tùy ý sửa code theo ý muốn nha ! )

          [ATTACH=CONFIG]77578[/ATTACH]

          Phát :

          Code:
          #include <16F877A.h>
          #device adc=8
          #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT_50%
          #use delay(clock=4000000)
          
          #define TX_ID 0x30    // Transmitter ID
          #define TX PIN_C6     // Chan phat xung ma hoa
          #define Button PIN_D0 // nut bam
          #define Led PIN_D1    // Power led
          unsigned char TX_packet[3];
          unsigned char i,j;
          unsigned int checksum;
          void Transmitter();
          void main()
          {
          
             setup_adc_ports(NO_ANALOGS);
             setup_adc(ADC_OFF);
             setup_comparator(NC_NC_NC_NC);
          
             set_tris_c(0b10111111);
             output_c(0x00);
             set_tris_a(0x00);
             output_a(0x00);
             set_tris_d(0xFD); // rd1 output
             output_high(Led);
          while(TRUE)
          {
           if(!input(Button))
           {
             
             do
               {
                  // Dong goi du lieu //  ( data packet )
                   checksum=0;
                   TX_packet[0]=TX_ID;      //  Transmitter ID
                   checksum+= TX_packet[0];
                   TX_packet[1]=input_b();  // doc trang thai port b
                   checksum+= TX_packet[1];
                   TX_packet[2]=checksum;   // goi du lieu  ( Tong ( Sum ) ) 
                 // gui du lieu qua chan TX
                  Transmitter();
               }
             while(!input(Button));
             delay_ms(200);  // Chong rung phim
              
           }   
          }
             
          
          }
          ///////////////// functions ////////////////////////
          void Transmitter()
              {
          
                 
                 for (i=0;i<32;i++)        // send preamble
                  {
                    output_high(TX);
                    delay_us(416);  // Delay 416 uS
                    output_low(TX);
                    delay_us(416);  //
                  }
                    delay_us(1248);  // delay 1248 uS or 3Te for syn bit
                   
          
                    //-----------------
                    output_high(TX);        // start bit
                    delay_us(416);
                    output_low(TX);
                    delay_us(416);
          
                    //-----------------
                 for (j=0;j<3;j++)       // 3 bytes packet transmitter
                  {
          
                    for(i=0;i<8;i++)
                       {
                         if ((TX_packet[j] & 0x80) == 0x80)
                           {
                            output_high(TX);
                            delay_us(416);
                            output_low(TX);
                            delay_us(416);
          
                           }
                          else
                          {
                            output_low(TX);
                            delay_us(416);
                            output_high(TX);
                            delay_us(416);
          
                          }
                          TX_packet[j]=TX_packet[j]<<1;
          
                       }
                  }
                  //------ send stop bit -------
                  output_high(TX);
                  delay_us(416);
                  output_low(TX);
                  delay_us(416);
          
                  delay_ms(20);        // delay gaurd
          
          
              }
          //////////////////////////////

          Thu :
          Code:
          #include <16F877A.h>
          #device adc=8
          #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT_50%
          #use delay(clock=4000000)
          
          #define RX_ID 0x30    // Receiver ID
          #define RX PIN_C7     // Chan nhan xung ma hoa
          #define Led PIN_D1    // power led
          unsigned char RX_packet[3],x;
          int1 rx_bit;           // rx_bit range value : 0 or 1 
          unsigned int checksum;
          int1 Receiver(unsigned char *buff);
          
          void main()
          {
          
             setup_adc_ports(NO_ANALOGS);
             setup_adc(ADC_OFF);
             setup_comparator(NC_NC_NC_NC);
              
            set_tris_b(0x00);  // Port b all out put
            output_b(0x00);  // port b all low
            set_tris_c(0xFF); // port C all input   ( RC7 input) 
            set_tris_d(0xFD);
            output_high(Led);
            
            while(TRUE)
           {
            
             
             checksum=0;
             while(Receiver(RX_packet));
             for(x=0;x<2;x++)
             checksum+= RX_packet[x];
             checksum&= 0x0FF;
             if(checksum==RX_packet[2])   // Kiem tra tong cua goi du lieu (packet)
             {
              if(RX_packet[0]==RX_ID)    // Kiem tra ID
              {
                 output_b(RX_packet[1]);  // Xuat ra port b
              }
             }
            
           }  // End while(1)
          }
          
          
          //////////////////////////// Functions  ////////////////////////////
          int1 Receiver(unsigned char *buff)
            {
              unsigned char i,j,T0,count;
              i=32;
              count=0;
              setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);    // setup timer 0 div 2
                while(--i)        // wait preamble
                 {
              
                #asm
                NOP;  
                NOP; 
                NOP; 
                #endasm
                  
                   while(input(RX));
                   set_timer0(0);   // reset timer0 = 0
                  #asm  
                  NOP; 
                  NOP; 
                  NOP; 
                  #endasm
          
                   while(!input(RX));
                   T0=get_timer0();  // doc timer 0
                   if (T0==0xFF) {return 1;}      // error
                   if ((T0>=198) && (T0<=218))          // check pulse 396us --> 436us (OK )
                    {
                      count++;
                      if ((count>=1)|| (i==0)) break;
                    }
          
                 }
               if ((count==0)&&(i==0)) {return 1;} // error
               setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);  //  setup time0 div 16
               T0=0;
               while (!((T0>=94) && (T0<=114)))             // 1504 - 1824 uS it OK. syn bit for 4Te or 1664 uS
                {
                  #asm  
                  NOP; 
                  NOP; 
                  NOP; 
                  #endasm
          
                  while(input(RX));        // wait syn
                  set_timer0(0);   // reset timer0 = 0
                  #asm  
                  NOP; 
                  NOP; 
                  NOP; 
                  #endasm
          
                  while(!input(RX));
                  T0=get_timer0();  // doc timer 0
                }
          
               while(input(RX));                         //wait start bit go low
               delay_us(624);         // delay before sampling (1.5Te)
               for (j=0;j<3;j++)     // build packet bytes  ( 3 bytes)
                {
          
                  i=8;              // build paket bit  (8 bits )
                  buff[j]=0;
                  while(i--)
                   {
                     buff[j]=buff[j]<<1;
                     rx_bit=input(RX);        // check logic (0,1) chan RX
                     buff[j]=buff[j] | rx_bit;
                     if (rx_bit==0)
                     while(!input(RX));
                     else
                     while(input(RX));
                     delay_us(624);         // delay for 1,5Te
          
                   }
          
                }
          
              if (rx_bit==0)
              if (!input(RX)) return 1; // error (no stop bit found)
              else
              if (!input(RX)) return 1; // error (no stop bit found)
              return 0;
           }

          --- Thôi ... hết rồi . Đi ngủ cho khỏe !

          Comment


          • #6
            Nguyên văn bởi quangdien030 Xem bài viết
            Câu hỏi có lẽ hơi ngốc vì em chưa rõ về cái vấn đề này lắm, em ko biết dùng module RF gì? Và nối vào chân nào của PIC như theo sơ đồ hình trên? Có phải chân dữ liệu của module phát nối với chân TX, chân dữ liệu module thu nối với chân RX ko vậy anh. Em cảm ơn vì bài viết hữu ích này!
            Module này là loại ASK/OOK rẻ tiền có bán trên thị trường . Bên phát thì nối chân MCU ( gọi là mã hóa ) vào chân data in ..... để phát dữ liệu ( tín hiệu ) đi .... Bên thu ( module thu RF sau khi thu được tín hiệu này thì nó đưa ra 1 đầu gọi là data out ) ... từ đầu này ta lại nối vào MCU ( PIC ) ( gọi là giải mã ) ... và thực hiện theo ý đồ của người lập trình .

            ( Ví dụ bật tắt led, bật tắt đèn từ xa , điều khiển mô hình, robot , thiết bị, máy móc từ xa , truyền dữ liệu ..v..v )
            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

            Comment


            • #7
              Cho em hỏi tí ạ, em đang dùng con píc6f877a để hiển thị dữ liệu analog lấy từ chân an0 và an1 lên lcd. Vấn đề hiển thị em đã giải quyết xong rồi, chỉ còn vấn đề là em muốn sử dụng phím bấm để chọn dữ liệu từ 1 trong 2 chân trên để hiển thị mà ko biết làm thế nào cả, mong được sự giúp đỡ của các anh chị. Tiện đây cho em hỏi luôn, em đang cần cái adapter ICSP để nạp PIC mà ko mua dc ở đâu cả, anh/chị nào có có thể cho em bán lại cho em (hoặc mượn/thuê) được ko ạ. Em cảm ơn!

              Comment


              • #8
                Nguyên văn bởi ceriselove Xem bài viết
                Cho em hỏi tí ạ, em đang dùng con píc6f877a để hiển thị dữ liệu analog lấy từ chân an0 và an1 lên lcd. Vấn đề hiển thị em đã giải quyết xong rồi, chỉ còn vấn đề là em muốn sử dụng phím bấm để chọn dữ liệu từ 1 trong 2 chân trên để hiển thị mà ko biết làm thế nào cả, mong được sự giúp đỡ của các anh chị. Tiện đây cho em hỏi luôn, em đang cần cái adapter ICSP để nạp PIC mà ko mua dc ở đâu cả, anh/chị nào có có thể cho em bán lại cho em (hoặc mượn/thuê) được ko ạ. Em cảm ơn!
                Bạn qua MỤC PIC hỏi cái này nhé , có cả chuyên mục riêng rành cho lập trình PIC !
                Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                Comment


                • #9
                  Nếu bây giờ không sử dụng PIC 16F bên phát mà đổi lại PIC 18F bên phát thì liệu bên thu có thu được không? Và code cần thay đổi nhữg gì vậy a?
                  Nguyên văn bởi queduong Xem bài viết
                  Module này là loại ASK/OOK rẻ tiền có bán trên thị trường . Bên phát thì nối chân MCU ( gọi là mã hóa ) vào chân data in ..... để phát dữ liệu ( tín hiệu ) đi .... Bên thu ( module thu RF sau khi thu được tín hiệu này thì nó đưa ra 1 đầu gọi là data out ) ... từ đầu này ta lại nối vào MCU ( PIC ) ( gọi là giải mã ) ... và thực hiện theo ý đồ của người lập trình .

                  ( Ví dụ bật tắt led, bật tắt đèn từ xa , điều khiển mô hình, robot , thiết bị, máy móc từ xa , truyền dữ liệu ..v..v )

                  Comment


                  • #10
                    Nguyên văn bởi quangdien030 Xem bài viết
                    Nếu bây giờ không sử dụng PIC 16F bên phát mà đổi lại PIC 18F bên phát thì liệu bên thu có thu được không? Và code cần thay đổi nhữg gì vậy a?
                    PIC, dspic, pic32 ...v.v. nào mà chẳng được , miễn là lập trình đúng cách đồng bộ mã hóa/ giải mã... lập trình đúng thì 89 , AVR , ARM , 68HC , 48HR , EMP47 , FPGA , PSOC ..... đều chạy được hết , miễn là loại có thể lập trình.

                    COde thì chẳng thay đổi gì nhiều ... có thay đổi ở cách config , cách đưa dữ liệu ra chân I/O .

                    Biết cách bật tắt 1 con led ở 1 chân I/O là có thể làm được !

                    Hỏi câu gì mà chán quá đi . !
                    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                    Comment


                    • #11
                      Hehe. Tại em đang dư một con PIC18F
                      Nguyên văn bởi queduong Xem bài viết
                      PIC, dspic, pic32 ...v.v. nào mà chẳng được , miễn là lập trình đúng cách đồng bộ mã hóa/ giải mã... lập trình đúng thì 89 , AVR , ARM , 68HC , 48HR , EMP47 , FPGA , PSOC ..... đều chạy được hết , miễn là loại có thể lập trình.

                      COde thì chẳng thay đổi gì nhiều ... có thay đổi ở cách config , cách đưa dữ liệu ra chân I/O .

                      Biết cách bật tắt 1 con led ở 1 chân I/O là có thể làm được !

                      Hỏi câu gì mà chán quá đi . !

                      Comment


                      • #12
                        Em sửa code lại cho PIC18F2550 ở phía phát, phía thu em vẫn là 16F877a, khi dịch thì ko có lỗi, khi mô phỏng thì có xung ra nhưng sao bên nhận không nhận được vậy a? Anh giúp em với!
                        #include <18F2550.h>
                        #device adc=8
                        #FUSES NOWDT, XT, PUT, NOPROTECT,NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT
                        #use delay(clock=4000000)

                        #define TX_ID 0x30 // Transmitter ID
                        #define TX PIN_C6 // Chan phat xung ma hoa
                        #define Button PIN_A0 // nut bam
                        //#define Led PIN_D1 // Power led
                        unsigned char TX_packet[3];
                        unsigned char i,j;
                        unsigned int checksum;
                        void Transmitter();
                        void main()
                        {

                        setup_adc_ports(NO_ANALOGS);
                        setup_adc(ADC_OFF);
                        setup_comparator(NC_NC_NC_NC);

                        set_tris_c(0b10111111);
                        output_c(0x00);
                        set_tris_a(0xff);
                        while(TRUE)
                        {
                        if(!input(Button))
                        {

                        do
                        {
                        // Dong goi du lieu // ( data packet )
                        checksum=0;
                        TX_packet[0]=TX_ID; // Transmitter ID
                        checksum+= TX_packet[0];
                        TX_packet[1]=input_b(); // doc trang thai port b
                        checksum+= TX_packet[1];
                        TX_packet[2]=checksum; // goi du lieu ( Tong ( Sum ) )
                        // gui du lieu qua chan TX
                        Transmitter();
                        }
                        while(!input(Button));
                        delay_ms(200); // Chong rung phim

                        }
                        }


                        }
                        ///////////////// functions ////////////////////////
                        void Transmitter()
                        {


                        for (i=0;i<32;i++) // send preamble
                        {
                        output_high(TX);
                        delay_us(416); // Delay 416 uS
                        output_low(TX);
                        delay_us(416); //
                        }
                        delay_us(1248); // delay 1248 uS or 3Te for syn bit


                        //-----------------
                        output_high(TX); // start bit
                        delay_us(416);
                        output_low(TX);
                        delay_us(416);

                        //-----------------
                        for (j=0;j<3;j++) // 3 bytes packet transmitter
                        {

                        for(i=0;i<8;i++)
                        {
                        if ((TX_packet[j] & 0x80) == 0x80)
                        {
                        output_high(TX);
                        delay_us(416);
                        output_low(TX);
                        delay_us(416);

                        }
                        else
                        {
                        output_low(TX);
                        delay_us(416);
                        output_high(TX);
                        delay_us(416);

                        }
                        TX_packet[j]=TX_packet[j]<<1;

                        }
                        }
                        //------ send stop bit -------
                        output_high(TX);
                        delay_us(416);
                        output_low(TX);
                        delay_us(416);

                        delay_ms(20); // delay gaurd


                        }
                        //////////////////////////////
                        Nguyên văn bởi queduong Xem bài viết
                        PIC, dspic, pic32 ...v.v. nào mà chẳng được , miễn là lập trình đúng cách đồng bộ mã hóa/ giải mã... lập trình đúng thì 89 , AVR , ARM , 68HC , 48HR , EMP47 , FPGA , PSOC ..... đều chạy được hết , miễn là loại có thể lập trình.

                        COde thì chẳng thay đổi gì nhiều ... có thay đổi ở cách config , cách đưa dữ liệu ra chân I/O .

                        Biết cách bật tắt 1 con led ở 1 chân I/O là có thể làm được !

                        Hỏi câu gì mà chán quá đi . !

                        Comment


                        • #13
                          Nguyên văn bởi quangdien030 Xem bài viết
                          Em sửa code lại cho PIC18F2550 ở phía phát, phía thu em vẫn là 16F877a, khi dịch thì ko có lỗi, khi mô phỏng thì có xung ra nhưng sao bên nhận không nhận được vậy a? Anh giúp em với!
                          #include <18F2550.h>
                          #device adc=8
                          #FUSES NOWDT, XT, PUT, NOPROTECT,NODEBUG, BROWNOUT, NOLVP, NOCPD, WRT
                          #use delay(clock=4000000)

                          #define TX_ID 0x30 // Transmitter ID
                          #define TX PIN_C6 // Chan phat xung ma hoa
                          #define Button PIN_A0 // nut bam
                          //#define Led PIN_D1 // Power led
                          unsigned char TX_packet[3];
                          unsigned char i,j;
                          unsigned int checksum;
                          void Transmitter();
                          void main()
                          {

                          setup_adc_ports(NO_ANALOGS);
                          setup_adc(ADC_OFF);
                          setup_comparator(NC_NC_NC_NC);

                          set_tris_c(0b10111111);
                          output_c(0x00);
                          set_tris_a(0xff);
                          while(TRUE)
                          {
                          if(!input(Button))
                          {

                          do
                          {
                          // Dong goi du lieu // ( data packet )
                          checksum=0;
                          TX_packet[0]=TX_ID; // Transmitter ID
                          checksum+= TX_packet[0];
                          TX_packet[1]=input_b(); // doc trang thai port b
                          checksum+= TX_packet[1];
                          TX_packet[2]=checksum; // goi du lieu ( Tong ( Sum ) )
                          // gui du lieu qua chan TX
                          Transmitter();
                          }
                          while(!input(Button));
                          delay_ms(200); // Chong rung phim

                          }
                          }


                          }
                          ///////////////// functions ////////////////////////
                          void Transmitter()
                          {


                          for (i=0;i<32;i++) // send preamble
                          {
                          output_high(TX);
                          delay_us(416); // Delay 416 uS
                          output_low(TX);
                          delay_us(416); //
                          }
                          delay_us(1248); // delay 1248 uS or 3Te for syn bit


                          //-----------------
                          output_high(TX); // start bit
                          delay_us(416);
                          output_low(TX);
                          delay_us(416);

                          //-----------------
                          for (j=0;j<3;j++) // 3 bytes packet transmitter
                          {

                          for(i=0;i<8;i++)
                          {
                          if ((TX_packet[j] & 0x80) == 0x80)
                          {
                          output_high(TX);
                          delay_us(416);
                          output_low(TX);
                          delay_us(416);

                          }
                          else
                          {
                          output_low(TX);
                          delay_us(416);
                          output_high(TX);
                          delay_us(416);

                          }
                          TX_packet[j]=TX_packet[j]<<1;

                          }
                          }
                          //------ send stop bit -------
                          output_high(TX);
                          delay_us(416);
                          output_low(TX);
                          delay_us(416);

                          delay_ms(20); // delay gaurd


                          }
                          //////////////////////////////
                          Đã test thử nghiệm code của bạn trên mô phỏng , nó chạy tốt ! Nên xem lại trình độ mô phỏng mô phẻo của mình , tốt nhất nên làm mạch thật , không khuyến khích dùng mô phỏng gây hoang mang ảo giác . Theo kinh nghiệm qua nhiều thế hệ sinh viên công nghệ thi trượt hay không thuyết trình nổi cái mạch điện, đề tài... quá lạm dụng mô phỏng sẽ không phát triển được tư duy và kỹ năng thực tế. Chớ nên quá lạm dụng mô phỏng !
                          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                          Comment


                          • #14
                            Anh xem giúp em với, chứ em mô phỏng như bình thường mà, đo xung tại chân TX cứ 2 lần ấn nút lại cho 2 chuỗi xung khác nhau. File mô phỏng em kèm theo luôn. Làm mạch thật thì em chưa có đủ tiền để mua tất cả, vã lại muốn mua thì phải gửi tận HCM luôn, chứ chỗ em đâu có bán, nên mo phỏng chạy thì em mới yên tâm. làm. File mo phong: dientuvn.zip
                            Nguyên văn bởi queduong Xem bài viết
                            Đã test thử nghiệm code của bạn trên mô phỏng , nó chạy tốt ! Nên xem lại trình độ mô phỏng mô phẻo của mình , tốt nhất nên làm mạch thật , không khuyến khích dùng mô phỏng gây hoang mang ảo giác . Theo kinh nghiệm qua nhiều thế hệ sinh viên công nghệ thi trượt hay không thuyết trình nổi cái mạch điện, đề tài... quá lạm dụng mô phỏng sẽ không phát triển được tư duy và kỹ năng thực tế. Chớ nên quá lạm dụng mô phỏng !

                            Comment


                            • #15
                              Nguyên văn bởi quangdien030 Xem bài viết
                              Anh xem giúp em với, chứ em mô phỏng như bình thường mà, đo xung tại chân TX cứ 2 lần ấn nút lại cho 2 chuỗi xung khác nhau. File mô phỏng em kèm theo luôn. Làm mạch thật thì em chưa có đủ tiền để mua tất cả, vã lại muốn mua thì phải gửi tận HCM luôn, chứ chỗ em đâu có bán, nên mo phỏng chạy thì em mới yên tâm. làm. File mo phong: [ATTACH]78746[/ATTACH]
                              Bên chương trình thu PIC16F877A sử dụng thạch anh 4 Mhz mà để 1Mhz ( trong mô phỏng ) thì nó chạy = niềm tin là đúng rồi . Sửa lại thành 4Mhz nó sẽ chạy !
                              Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X