Thông báo

Collapse
No announcement yet.

Thí nghiệm nho nhỏ với PIC/ AVR với RF

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

  • Thí nghiệm nho nhỏ với PIC/ AVR với RF

    Với đoạn code lệnh như sau đc viết trong ngắt ngoài của PIC/ AVR:
    Code:
    if((13*T_T)>>2 <=RF_time_copy && RF_time_copy< (15*T_T)>>2 && RF_check_start_bit==0)// 3.5bit
          {
          RF_check_start_bit=1;//Bao da nhan dc bit start
          RF_number_recive=0;//Dem so lan nhan data
          RF_shift_data=0;//Bat dau tinh so lan dich bit
          }
       
       //_____________________Vi tri bat dau o cuoi(1.5bit)____________________________________________
       else if((5*T_T)>>2 <=RF_time_copy && RF_time_copy < (7*T_T)>>2 && RF_check_start_bit==1 && RF_number_recive==0 && RF_end==0)
          {
          RF_end=1;//Xung canh len dau tien o vi tri end
          RF_middle=0;
          RF_number_recive=1;
          }
       //____________________Vi tri bat dau o giua(2bit)________________________________
       else if((7*T_T)>>2 <=RF_time_copy && RF_time_copy< (9*T_T)>>2 && RF_check_start_bit==1 && RF_number_recive==0 && RF_middle==0)
          {
          RF_middle=1;//Xung canh len dau tien o vi tri middle
          RF_end=0;
          RF_number_recive=1;
          }
      
       //_______________________________________________________________________
       else if((3*T_T)>>2 <=RF_time_copy && RF_time_copy< (5*T_T)>>2 && RF_end==1)//Neu do rong bit=1bit va bat dau la vi tri end
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x00;
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_end=1;//Xung canh len sau do o vi tri end
          RF_middle=0;
          }
       else if((3*T_T)>>2 <=RF_time_copy && RF_time_copy< (5*T_T)>>2 && RF_middle==1)//Neu do rong bit=1bit va bat dau la vi tri middle
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x01;
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_middle=1;//Xung canh len sau do o vi tri middle
          RF_end=0;   
          }
    
    
       //_______________________________________________________________________
       else if((5*T_T)>>2 <=RF_time_copy && RF_time_copy< (7*T_T)>>2 && RF_end==1)//Neu do rong bit=1.5bit va bat dau la vi tri end
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x00;
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_middle=1;//Xung canh len sau do o vi tri middle
          RF_end=0;
          }
       else if((5*T_T)>>2 <=RF_time_copy && RF_time_copy< (7*T_T)>>2 && RF_middle==1)//Neu do rong bit=1.5bit va bat dau la vi tri middle
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x01;
             RF_shift_data++;//Dem so lan dich bit
             }
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x00;//Xac dinh duoc them gia tri giai ma ke tiep      
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_end=1;//Xung canh len sau do o vi tri end
          RF_middle=0;
          }
       //_______________________________________________________________________
       else if((7*T_T)>>2 <=RF_time_copy && RF_time_copy< (9*T_T)>>2 && RF_middle==1)//Neu do rong bit=2bit va bat dau la vi tri middle
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x01;
             RF_shift_data++;//Dem so lan dich bit
             }
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x00;//Xac dinh duoc them gia tri giai ma ke tiep      
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_middle=1;//Xung canh len sau do o vi tri middle
          RF_end=0;
          }
       
       else if((9*T_T)>>2 <=RF_time_copy && RF_time_copy< (11*T_T)>>2)// Neu co Byte Stop// 2.5bit
          {
          if(RF_shift_data==8)//Neu du 8bit
             {
             //RF_data=RF_data_in;//Copy du lieu_Dam bao an toan du lieu da nhan duoc
             RF_Buffer[RF_counter]=RF_data_in;
             RF_data=RF_data_in;
             RF_counter++;// Overlow Buffer
             if(RF_counter==4)// Neu nhan du 4 gia tri
                {
                RF_Buffer_Overlow=1;// Overlow Buffer
                RF_counter=0;
                }
             }   
          //RF_data_in=0;//Xoa du lieu nhan
          RF_shift_data=0;
          RF_middle=0;
          RF_end=0;
          RF_time=0;
          RF_enable_time=1;
          RF_number_recive=0;
          RF_check_start_bit=0;
          }
      
       else//Neu du lieu nhan ko dung ma manchester
          {
          RF_data_in=0;//Xoa du lieu nhan
          RF_shift_data=0;
          RF_middle=0;
          RF_end=0;
          RF_time=0;
          RF_enable_time=1;
          RF_number_recive=0;
          RF_check_start_bit=0;
          RF_time_copy=0;
          }
    Mọi người đừng quan tâm code viết gì_Mà chỉ quan tâm viết như thế nào thôi nhé( Ko bàn tính tối ưu ở đây nhé)
    Chú ý màu xanh đậm, nếu viết dạng biểu thức thì PIC887 ko giải mã đc, AVR vẫn ok. Nếu mình tính toán hộ Pic887 thì Pic887 giải mã đc.
    Kết quả:
    AVR( Mega8) giải mã tốt với code trên.
    PIC 16F887 ko giải mã đc theo code trên.
    Anh em cứ chém tẹt ga để mọi người thêm kinh nghiệm và lựa chọn.
    Last edited by hoangdai; 19-04-2012, 18:15.


    Add: 97 Quán Nam - Lê Chân - Hải Phòng.
    Tel: 031 518648 Phone: 0904 283 505

  • #2
    Nguyên văn bởi hoangdai Xem bài viết
    Với đoạn code lệnh như sau đc viết trong ngắt ngoài của PIC/ AVR:
    Code:
    if((13*T_T)>>2 <=RF_time_copy && RF_time_copy< (15*T_T)>>2 && RF_check_start_bit==0)// 3.5bit
          {
          RF_check_start_bit=1;//Bao da nhan dc bit start
          RF_number_recive=0;//Dem so lan nhan data
          RF_shift_data=0;//Bat dau tinh so lan dich bit
          }
       
       //_____________________Vi tri bat dau o cuoi(1.5bit)____________________________________________
       else if((5*T_T)>>2 <=RF_time_copy && RF_time_copy < (7*T_T)>>2 && RF_check_start_bit==1 && RF_number_recive==0 && RF_end==0)
          {
          RF_end=1;//Xung canh len dau tien o vi tri end
          RF_middle=0;
          RF_number_recive=1;
          }
       //____________________Vi tri bat dau o giua(2bit)________________________________
       else if((7*T_T)>>2 <=RF_time_copy && RF_time_copy< (9*T_T)>>2 && RF_check_start_bit==1 && RF_number_recive==0 && RF_middle==0)
          {
          RF_middle=1;//Xung canh len dau tien o vi tri middle
          RF_end=0;
          RF_number_recive=1;
          }
      
       //_______________________________________________________________________
       else if((3*T_T)>>2 <=RF_time_copy && RF_time_copy< (5*T_T)>>2 && RF_end==1)//Neu do rong bit=1bit va bat dau la vi tri end
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x00;
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_end=1;//Xung canh len sau do o vi tri end
          RF_middle=0;
          }
       else if((3*T_T)>>2 <=RF_time_copy && RF_time_copy< (5*T_T)>>2 && RF_middle==1)//Neu do rong bit=1bit va bat dau la vi tri middle
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x01;
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_middle=1;//Xung canh len sau do o vi tri middle
          RF_end=0;   
          }
    
    
       //_______________________________________________________________________
       else if((5*T_T)>>2 <=RF_time_copy && RF_time_copy< (7*T_T)>>2 && RF_end==1)//Neu do rong bit=1.5bit va bat dau la vi tri end
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x00;
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_middle=1;//Xung canh len sau do o vi tri middle
          RF_end=0;
          }
       else if((5*T_T)>>2 <=RF_time_copy && RF_time_copy< (7*T_T)>>2 && RF_middle==1)//Neu do rong bit=1.5bit va bat dau la vi tri middle
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x01;
             RF_shift_data++;//Dem so lan dich bit
             }
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x00;//Xac dinh duoc them gia tri giai ma ke tiep      
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_end=1;//Xung canh len sau do o vi tri end
          RF_middle=0;
          }
       //_______________________________________________________________________
       else if((7*T_T)>>2 <=RF_time_copy && RF_time_copy< (9*T_T)>>2 && RF_middle==1)//Neu do rong bit=2bit va bat dau la vi tri middle
          {
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x01;
             RF_shift_data++;//Dem so lan dich bit
             }
          if(RF_shift_data<8)
             {
             RF_data_in=RF_data_in<<1;//Dich trai 1 bit
             RF_data_in=RF_data_in|0x00;//Xac dinh duoc them gia tri giai ma ke tiep      
             RF_shift_data++;//Dem so lan dich bit
             }
          RF_middle=1;//Xung canh len sau do o vi tri middle
          RF_end=0;
          }
       
       else if((9*T_T)>>2 <=RF_time_copy && RF_time_copy< (11*T_T)>>2)// Neu co Byte Stop// 2.5bit
          {
          if(RF_shift_data==8)//Neu du 8bit
             {
             //RF_data=RF_data_in;//Copy du lieu_Dam bao an toan du lieu da nhan duoc
             RF_Buffer[RF_counter]=RF_data_in;
             RF_data=RF_data_in;
             RF_counter++;// Overlow Buffer
             if(RF_counter==4)// Neu nhan du 4 gia tri
                {
                RF_Buffer_Overlow=1;// Overlow Buffer
                RF_counter=0;
                }
             }   
          //RF_data_in=0;//Xoa du lieu nhan
          RF_shift_data=0;
          RF_middle=0;
          RF_end=0;
          RF_time=0;
          RF_enable_time=1;
          RF_number_recive=0;
          RF_check_start_bit=0;
          }
      
       else//Neu du lieu nhan ko dung ma manchester
          {
          RF_data_in=0;//Xoa du lieu nhan
          RF_shift_data=0;
          RF_middle=0;
          RF_end=0;
          RF_time=0;
          RF_enable_time=1;
          RF_number_recive=0;
          RF_check_start_bit=0;
          RF_time_copy=0;
          }
    Mọi người đừng quan tâm code viết gì_Mà chỉ quan tâm viết như thế nào thôi nhé( Ko bàn tính tối ưu ở đây nhé)
    Chú ý màu xanh đậm, nếu viết dạng biểu thức thì PIC887 ko giải mã đc, AVR vẫn ok. Nếu mình tính toán hộ Pic887 thì Pic887 giải mã đc.
    Kết quả:
    AVR( Mega8) giải mã tốt với code trên.
    PIC 16F887 ko giải mã đc theo code trên.
    Anh em cứ chém tẹt ga để mọi người thêm kinh nghiệm và lựa chọn.

    Có gì đâu mà chém ? Nếu bí bách ... không làm được thì đi thuê người khác . Hiểu bản chất sự việc , vấn đề thì có nhiều cách giải quyết .

    Mà lại viết ở mục tâm tình này chứ ...

    Thuật toán đúng mà không chạy thì có nhiều nguyên nhân ... chứ không phải là MCU PIC hay AVR ... phải hỏi trình dịch và trình độ của mình thô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


    • #3
      Ẹc anh Dương bảo em ko viết ở đây thì ở đâu ạ? vào mục PIC hay AVR lớ ngớ bị đập chít vì tội so sánh_Để đây cho an toàn_ĐÚng là hơi chuối, lúc đầu ko chạy thấy nghi nghi, sau check mãi cũng thấy nó như thế. Mỗi anh DƯơng pm luồng này, đại ca nào test thử phát nhẩy? mô phỏng cũng ddc đấy.


      Add: 97 Quán Nam - Lê Chân - Hải Phòng.
      Tel: 031 518648 Phone: 0904 283 505

      Comment

      Về tác giả

      Collapse

      hoangdai Hoàng Đình Đại-Điện tự động công nghiệp Tìm hiểu thêm về hoangdai

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

      Collapse

      Đang tải...
      X