Wednesday, July 16, 2014

Thư viện ADC10 của MSP430x2xx

         ADC 10bit là module rất phổ biến và cơ bản trong hệ thống vào ra của MSP430.Để sử dụng module này trước tiên chúng ta cần khởi tạo các thanh ghi cho module bằng hàm ADC10_Init(Vref); Cài đặt thông số Vref phù hợp với điện áp tham chiếu mà bạn sử dụng.Một số điểm cần chú ý khi sử dụng
        - Cài đặt lại thông số biến PORT_ADC phù hợp với các cổng ADC mà bạn sử dụng.Ví dụ dùng cổng ADC A1,A2 A4 thì PORT_ADC=(BIT1+BIT2+BIT4);
        - Có hai chế độ hoạt động được sử dụng trong thư viện này là chuyển đổi từng kênh và chuyển đổi liên tục.Không thể sử dụng đồng thời cả hai chế độ.
        - Với chế độ chuyển đổi từng kênh,mỗi khi muốn đọc giá trị ADC,chúng ta gọi hàm ADC10_Read_Channel( ... ).Khi đó hàm này sẽ thực hiện lấy mẫu,và lấy dữ liệu ADC mới nhất ra.Việc này sẽ mất vài chục uS .


        - Với chế độ chuyển đổi đa kênh,module ADC sẽ lần lượt đọc tất cả các giá trị ADC ở các kênh có cài đặt chức năng ADC và chuyển dữ liệu vào 1 mảng định trước ( Dùng chức năng DTC) .Ưu điểm là có thể đọc được nhiều kênh cùng lúc mà không cần sự can thiệp của CPU,vì vậy tốc độ thực thi nhanh hơn.DTC là chức năng chuyển tiếp dữ liệu từ thanh ghi vào bộ nhớ,gần giống DMA.Để sử dụng hàm này các bạn cần tạo 1 mảng kiểu Int có độ dài ít nhất bằng số kênh ADC chuyển đổi,ví dụ như:
         unsigned int  Data[8];
        Sau đó chỉ cần khai báo hàm  "ADC10_DTC(channel,pointer[],sequence); " một lần ,dữ liệu từ các cổng ADC sẽ liên tục được cập nhật và chuyển trực tiếp vào các biến.Công việc của chúng ta chỉ là đọc các biến đó thôi.
       - Hàm void ADC10_DTC(channel,pointer[],sequence);
               + Nếu sequence = 0 thì ghi  giá trị của kênh thứ Channel vào *pointer
               + Nếu sequence = 1 thì các giá trị ADC sẽ được lần lượt ghi vào *pointer từ A(channel) đến A0.
               + Chú ý là A(channel) được ghi vào pointer[0].


2 comments:

  1. Anh ơi , sao em lấy thư viện của anh về dùng thì cứ báo lỗi các dòng có : V_tham_chieu anh giải thích giúp em với !
    Cảm ơn anh nhiều !

    ReplyDelete
    Replies
    1. Em thay void ADC10_Init(V_tham_chieu) ở chỗ Function bằng void ADC10_Init(Vref V_tham_chieu) nhé,thực ra anh debug ko thấy báo lỗi,cũng lạ thật

      Delete

END COMMENT FACEBOOK-->