Thông báo

Collapse
No announcement yet.

Xin hỏi dùng timer tạo xung rồi đếm thời gian nhận ?

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

  • Xin hỏi dùng timer tạo xung rồi đếm thời gian nhận ?

    Em đang làm project đo k/c dùng sóng siêu âm với 2 con thu, phát siêu âm. Em định dùng timer 2 để tạo xung 40Khz (25uS) và dùng Input capture của timer 1 để nhận tín hiệu phản hồi Từ đó tính ra thời gian. Các bước em làm như sau:
    1. Dùng timer 2 tạo xung (chế đọ Fast PWM) f= 1Mhz (ko hệ số). với TCNt2= 230 và OCR2 = 245
    2. Dùng ngắt khi tràn bộ đệm của timer 2 để khởi tạo lại giá trị TCNT2
    3. Dùng chế độ Input Capture của timer 1 và gặp xung lên thì ngắt .
    4. Trong chương trình ngắt Input Capture . Em cho biến timer = ICR1. Tắt timer 1, 2. Delay khoảng 100 ms. Sau đó bật lại timer 1, 2.
    5. Trong hàm main em xuất ra LCD gá trị thời gian.

    Các bác xem em làm vậy có ổn không ? Đây là code của em. Em dùng At8. f= 1Mhz. timer ko có hệ số

    Code:
    #include <mega8.h>
    #include <delay.h>
    volatile unsigned int time;
    interrupt [TIM1_CAPT] void timer1_capt_isr(void)
    {
    time =(unsigned int) ICR1H*256+ICR1L;
    //Tat timer 1,2
    TCCR2=0;
    TCCR1B=0;
    delay_ms(100);
    //Bat lai timer 2 
    TCCR2=0x69;
    TCNT2=0xE6;
    //Bat lai timer 1
    TCCR1B=0xC1;
    TCNT1H=0x00;
    TCNT1L=0x00;
    }
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
    TCNT2=0xE6;}
    void main(void)
    {
    PORTB=0x08;     // PB3 (OC2) is Output
    DDRB=0x08;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 1000.000 kHz
    // Mode: Normal top=FFFFh
    // Noise Canceler: On
    // Input Capture on Rising Edge
    // Input Capture Interrupt: On
    TCCR1A=0x00;
    TCCR1B=0xC1;       // 1100 0001 ICNC1= ICES1=1 (raising edge). CS10=1 (NO prescale)
    
    TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock value: 1000.000 kHz
    // Mode: Fast PWM top=FFh
    // OC2 output: Non-Inverted PWM
    ASSR=0x00;
    TCCR2=0x69;   //   0110 1001   WGM20 = COM21 = WGM21 = CS20 = 1 (Fast PWM & NO prescale)
    TCNT2=0xE6;  // T = 230 -> 255 ( 25uS)
    OCR2=0xF5;  //  duty cycle = 230 -> 245 (15uS)
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x60;      // 0110 0000   TOIE2 = TICIE1 = 1 (cho phep ngat input capture & ngat tran timer 2)
    ACSR=0x80;
    SFIOR=0x00;
    // Global enable interrupts
    #asm("sei")
    while (1)     {   };
    }
    Các bác cho em hỏi là code viết vậy đã ổn chưa ?(do hiện giờ em chưa có sensor nên chưa test được,đành viết code trước thôi ).
    Nếu làm mạch thì nên khuyếch đại thu và phát như thế nào ? (em định dùng LM324 cho cả thu và phát).

    Thank các bác nhiều

  • #2
    Theo mình banj làm như này cho nhanh nhé_Kiếm hẳn 1 cái modul thu phát siêu âm_Nó có chân enable và chân out.Để dùng đc nó bạn chỉ cần đưa tín hiệu logic vào chân enable rồi kiểm tra tín hiệu ra ở chân out.Đo thời gian từ lúc đưa tín hiệu cho phép đến khi có tín hiệu ở chân out.Tần số phát đã biết và thời gian cũng đã có--->>khoảng cách tính ngon.Goodluck!


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

    Comment


    • #3
      Nguyên văn bởi hoangdai Xem bài viết
      Theo mình banj làm như này cho nhanh nhé_Kiếm hẳn 1 cái modul thu phát siêu âm_Nó có chân enable và chân out.Để dùng đc nó bạn chỉ cần đưa tín hiệu logic vào chân enable rồi kiểm tra tín hiệu ra ở chân out.Đo thời gian từ lúc đưa tín hiệu cho phép đến khi có tín hiệu ở chân out.Tần số phát đã biết và thời gian cũng đã có--->>khoảng cách tính ngon.Goodluck!
      Hix được tự chọn như bác nói thỉ còn gì tốt hơn. Vấn đề ở đây là em ko được tự chọn module bác ạ. Bắt buộc phải dùng cặp sensor thu phát

      Comment


      • #4
        Thế đến giờ anh đã làm được chưa. em cũng đang phải làm với cái cặp tx/rx này đây nếu làm được anh cho em xin mạch va code nhe

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X