Thông báo

Collapse
No announcement yet.

em xin hỏi về ADC trong AVR?

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

  • em xin hỏi về ADC trong AVR?

    chào các anh chị trong diễn đàn, em đang làm một hệ thống điều khiển, mà ở đây em phải dùng con cảm biến áp suất, vậy giờ em muốn chuyển đổi tín hiệu từ con cảm biến này, và lưu trữ thông tin áp suất trong avr. nhưng có một vấn đề là: em đặt cho avr một áp suất cố định, và em muốn so sánh áp suất cố định này với áp suất từ cảm biến, nhưng áp suất ở cảm biến liên tục thay đổi, vậy cái gì sẽ update thông tin áp suất tại cảm biến? hướng đi và cách giải quyết bài toán này như thế nào ạ?
    mong các anh chị giúp đỡ ạ! em xin cảm ơn nhìu lắm ^^

  • #2
    Đọc thoáng qua thì thấy câu hỏi của bạn hơi khó hiểu, đọc lại vài lần thì OK hiểu rồi, còn hiểu đúng hay ko thì hên xui thôi. Bắt đầu:
    _ Bộ ADC của avr nhận tín hiệu analog (0-5V) từ các cảm biến ngoại vi rồi chuyển sang digital mà bạn đọc được, trong trường hợp của bạn thì giá trị áp suất sẽ được chuyển thành dạng tín hiệu mà bộ ADC của AVR nhận được, phần này chắc bạn làm tốt.
    _ bạn nói là bạn đặt cho AVR 1 áp suất cố định là ko đúng, mà phải chính xác là bạn thiết lập 1 biến so sánh chứa giá trị cố định biểu thị cho mức áp suất mà bạn muốn so sánh với các giá trị áp suất được trả về từ cảm biến.
    _Vì là cảm biến áp suất đương nhiên là nó cập nhật liên tục giá trị áp suất từ môi trường rồi nên đương nhiên là nó liên tục thay đổi, và bạn yên tâm là con AVR nói riêng và các dòng vdk phổ thông nói chung có 1 hệ thống các thanh ghi lưu trữ giá trị ADC từ cảm biến trả về và nó tự động update giá trị liên tục với tần số cao, đảm bảo đáp ứng nhanh. Vì thế việc của ta đơn giản chỉ là đọc giá trị đã được digital hóa từ các thanh ghi này và so sánh với cái giá trị chuẩn mà ta đã khởi tạo trước để quy định khi nào là áp suất quá cao hoặc quá thấp và lúc đó thì xử lý thế nào thì tùy vào việc bạn lập trình.
    _Và để có được giá trị chính xác thì bạn cần hiển thị giá trị ADC đọc được lên led 7 đoạn hoặc lcd để tiện theo dõi xem có nhiễu, trôi.. hay ko để còn cân chỉnh.
    Last edited by hoahauvn2; 18-03-2013, 00:18.
    Làm sao mà bạn dám nói là không làm được khi bạn chưa từng thử một lần nào.
    Ngay cả khi bạn đã làm 1 lần và thất bại bạn cũng không có quyền nói là không làm được vì bạn chưa làm lần thứ 2,3...

    Comment


    • #3
      Nguyên văn bởi hoahauvn2 Xem bài viết
      Đọc thoáng qua thì thấy câu hỏi của bạn hơi khó hiểu, đọc lại vài lần thì OK hiểu rồi, còn hiểu đúng hay ko thì hên xui thôi. Bắt đầu:
      _ Bộ ADC của avr nhận tín hiệu analog (0-5V) từ các cảm biến ngoại vi rồi chuyển sang digital mà bạn đọc được, trong trường hợp của bạn thì giá trị áp suất sẽ được chuyển thành dạng tín hiệu mà bộ ADC của AVR nhận được, phần này chắc bạn làm tốt.
      _ bạn nói là bạn đặt cho AVR 1 áp suất cố định là ko đúng, mà phải chính xác là bạn thiết lập 1 biến so sánh chứa giá trị cố định biểu thị cho mức áp suất mà bạn muốn so sánh với các giá trị áp suất được trả về từ cảm biến.
      _Vì là cảm biến áp suất đương nhiên là nó cập nhật liên tục giá trị áp suất từ môi trường rồi nên đương nhiên là nó liên tục thay đổi, và bạn yên tâm là con AVR nói riêng và các dòng vdk phổ thông nói chung có 1 hệ thống các thanh ghi lưu trữ giá trị ADC từ cảm biến trả về và nó tự động update giá trị liên tục với tần số cao, đảm bảo đáp ứng nhanh. Vì thế việc của ta đơn giản chỉ là đọc giá trị đã được digital hóa từ các thanh ghi này và so sánh với cái giá trị chuẩn mà ta đã khởi tạo trước để quy định khi nào là áp suất quá cao hoặc quá thấp và lúc đó thì xử lý thế nào thì tùy vào việc bạn lập trình.
      _Và để có được giá trị chính xác thì bạn cần hiển thị giá trị ADC đọc được lên led 7 đoạn hoặc lcd để tiện theo dõi xem có nhiễu, trôi.. hay ko để còn cân chỉnh.
      Hay quá, em cũng đang tìm hiểu về vấn đề này, em xin hỏi bác một chút.
      Em định dùng hàm ngắt của ADC để nó có thể tự động cập nhật liên tục kết quả chuyển đổi và hiện thị ra LCD rồi điều khiển động cơ .
      Em đinh quét liên tục 2 cảm biến, dùng đoạn code sau.
      PHP Code:
      #define FIRST_ADC_INPUT 0
      #define LAST_ADC_INPUT 2
      unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
      #define ADC_VREF_TYPE 0x60

      // ADC interrupt service routine
      // with auto input scanning
      interrupt [ADC_INTvoid adc_isr(void)
      {
      static 
      unsigned char input_index=0;
      // Read the 8 most significant bits
      // of the AD conversion result
      adc_data[input_index]=ADCH;
      // Select next ADC input
      if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
         
      input_index=0;
      ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE 0xff))+input_index;
      // Delay needed for the stabilization of the ADC input voltage
      delay_us(10);
      // Start the AD conversion
      ADCSRA|=0x40;

      Nhưng nếu theo em hiểu thì sau khi AVR nó chuyển đổi ADC xong thì nó sẽ nhảy vào ngắt của ADC để cập nhật kết quả(8bit) rồi lại trở về chuyển đổi tiếp.
      Vậy nó lấy đâu ra time để làm những việc khác .

      Comment


      • #4
        cảm ơn bác nhiều lắm!

        Comment


        • #5
          Nguyên văn bởi gaconhamhoc Xem bài viết

          Nhưng nếu theo em hiểu thì sau khi AVR nó chuyển đổi ADC xong thì nó sẽ nhảy vào ngắt của ADC để cập nhật kết quả(8bit) rồi lại trở về chuyển đổi tiếp.
          Vậy nó lấy đâu ra time để làm những việc khác .
          Bạn nói rất chính xác là sau khi chuyển đổi ADC xong AVR sẽ nhảy vào ngắt ADC để cập nhật kết quả (8 hoặc 10 bit tùy bạn chọn, mình thì 10 bit cho nó lâu nhưng thật ra rất nhanh), nhưng nó sẽ ko quay về cập nhật tín hiệu mới ngay lập tức mà sẽ chờ 1 khoảng thời gian ứng tần số cập nhật giá trị mà mình thiết lập cho nó ban đầu (trong cái bảng thiết lập ADC của codevisionAVR vì mình dùng phần mềm này), trong khoảng thời gian đó nó tiếp tục làm những công việc ko liên quan đến ADC mà ko ảnh hưởng gì. Vì thế nếu muốn ưu tiên đáp ứng ADC nhanh thì chọn tần số cập nhật cao, muốn ưu tiên chương trình chính thì chọn tần số vừa phải thôi.
          Làm sao mà bạn dám nói là không làm được khi bạn chưa từng thử một lần nào.
          Ngay cả khi bạn đã làm 1 lần và thất bại bạn cũng không có quyền nói là không làm được vì bạn chưa làm lần thứ 2,3...

          Comment


          • #6
            Nghe có bài bản đó .
            ct đáp ứng ngắt adc sẽ làm các việc:
            nạp adc> so sánh với giá trị cho trước > kết quả > phục hồi sreg> về.
            nếu có hiển thị lcd thì thêm vào.

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X