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

      • Andrea14
        Vấn đề về tốc độ quay
        bởi Andrea14
        Chào mọi người,

        Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
        12-12-2025, 12:42
      • bqviet
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi bqviet
        Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
        06-12-2025, 17:17
      • nguyendinhvan
        Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
        bởi nguyendinhvan
        Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
        05-12-2025, 19:59
      Đang tải...
      X