Tuesday, April 22, 2014

Bài 7.(MSP430_Basic) ADC 10bit

Trước hết trước khi bắt đầu các bạn nếu chưa có datasheet của dùng MSP430 thì có thể download tại đây : http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=slaa559&fileType=pdf .
 Lưu ý Datasheet vẫn luôn là tài liệu quan trọng nhất khi bạn tiếp cận bất cứ dòng vi điều khiển nào , nên việc thành thạo tiếng Anh và khả năng đọc Datasheet vẫn là quan trọng nhất. 
Tài liệu được viết cho MSP430G2553,các chip khác có module khác mã sẽ không sử dụng được thư viện đi kèm.

1.        Giới thiệu chung ADC 10bit

Module ADC 10bit của MSP430x2xx là module chuyển tín hiệu tưng tự thành tín hiệu số 10bit , hỗ trợ việc đọc với tốc độ tối đa 200ksps(Tức là chu kỳ 200.000 lần lấy mẫu/s) ,có chế độ truyền dữ liệu DTC ( Truyền dữ liệu đến bất cứ đâu trong bộ nhớ mà không cần sự can thiệp của CPU).Đặc điểm cơ bản:
-       ADC 10 bit tốc độ lấy mẫu 200ksps
-       Chọn điện áp tham chiếu 1,5V hoặc 2,5V VCC hay điện áp tham chiếu ngoài
-       8 kênh chuyển đổi , kênh cảm biến nhiệt độ bên trong chip
-       Chuyển đổi đơn kênh,lặp 1 kênh,trình tự,lặp đi lặp lại
-       Tự động truyền dữ liệu vào bộ nhớ (Chức năng tượng tự DMA,ưu điểm so với các dòng VĐK đời cũ)


Sơ đồ khối:

Các chân có hỗ trợ chức năng ADC sẽ được ký hiệu Ax ,ví dụ A0 – Kênh ADC0 ; A1-Kênh ADC1
2.        Lõi ADC10
ADC 10bit có nhiệm vụ chuyển đổi điện áp đầu vào , so sánh với điện áp tham chiếu và xuất ra thanh ghi ADC10MEM . Điện áp tham chiếu là VR+ và VR- .Giá trị số hóa của điện áp đầu vào tính bằng công thức sau:
          Trong đó :    
o    Vin :Điện áp đầu vào
o   VR+:Điện áp tham chiếu mức dương (Có thể chọn bằng lập trình)
o   VR-: Điện áp tham chiếu mức âm (Có thể chọn bằng lập trình)
Khi tín hiệu đầu vào cao hơn hoặc bằng VR+ thì Nadc = 1023 và khi nhỏ hơn VR- thì bằng 0 .Kết quả có thể lưu ở dạng thường hoặc mã bù 2 . Lõi ADC được điều khiển bằng 2 thanh ghi ADC10CTL0 và ADC10CTL1 .Lõi chỉ hoạt động khi bit ADC10ON =1 . Bit ENC = 0 thì mới cho phép chỉnh sửa thông số các thanh ghi ADC và khi ENC =1 thì việc chuyển đổi mới được thực hiện .
3.        Chọn tốc độ chuyển đổi
ADC10 có thể dùng được cả nguồn xung nội và ngoại từ MCLK , SMCLK , ACLK , từ chân ADC10OSC bằng ADC10SEELx trong thanh ghi ADC10CTL1 .Các bạn cần chú ý khi dùng nguồn xung ngoại từ chân ADC10OSC là tần số cấp không được quá 5Mhz tuy dòng.
4.        Chọn cổng chuyển đổi
Thực chất trong mỗi chip MSP430 chỉ có một bộ chuyển đổi ADC,các cổng cần chuyển đổi ADC sẽ được lần lượt kết nối với bộ ADC qua một bộ MUX .Các cổng được phép chuyển đổi ADC có thể được chọn từ thanh ghi ADC10AEx,các bạn cần quan tâm đến các thanh ghi này vì các cổng khi được chọn ở chế độ ADC sẽ loại bỏ các bộ buffer input và output của chức năng GPIO,từ đo cho phép tiết kiệm điện.
5.        Điện áp tham chiếu
Điện áp tham chiếu của ADC có thể chọn rất đa dạng , từ nguồn cấp nội 1.5V 2.5V hay nguồn cấp ngoài VCC hoặc từ chân VREF+ và VREF - .
-       REFON = 1 , Điện áp tham chiếu nội được chọn.
o   REF2_5=1,Điện áp tham chiếu là 2.5V
o   REF2_5=0,Điện áp tham chiếu là 1.5V
-       REFOUT = 1 , Điện áp tham chiếu ngoài được sử dụng nếu chip có sẵn pin Vref+ và Vref-  tương ứng ở chân A4 và A3.
Khi sử dụng điện áp tham chiếu ngoại thì nên tắt nguồn điện áp tham chiếu nội để bảo vệ nguồn.
6.        Quá trình biến đổi và lấy mẫu

Biến đổi A-D được bắt đầu khi có xung cạnh lên của tín hiệu vào SHI. SHI được lựa chọn bởi bit SHSx từ các nguồn:
-       ADC10SC
-       Timer_Ax.1
-       Timer_Ax.0
-       Timer_Ax.2
Bit ISSH dùng để đảo chiều tín hiệu SHI. Bit SHTx dùng lựa chọn chu kỳ lấy mẫu là 4, 8, 16, hoặc 64 ADC10CLK. SAMPCON được điều khiển bằng bit ADC10SHTx và MSC trong thanh ghiADC10CTL0 (xem sơ đồ trên) . Tsample là thời gian lấy mẫu. Khi SAMPCON từ mức cao xuống thấp thì quá trình biến đổi A-D bắt đầu. Khi SAMPCON = 0 thì tất cả các ngã vào Ax có tổng trở cao. Khi SAMPCON = 1 thì ngã vào Ax giống như một bộ lọc thong thấp RC trong suốt thời gian lấy mẫu.
·         Thời gian lấy mẫu

Khi bit SAMPCON = 0 , tất cả các chân Ax được chọn từ ADC10AEx ở trạng thái trở kháng cao.Khi SAMPCON = 1, chân Ax được chọn giống như một bộ lọc thông thấp RC (là bộ giúp loại bỏ nhiễu tần số cao) trong thời gian Tsample, khi đó chân Ax được nối với trở Ri và tụ Ci . Nói chung phải cài đặt thời gian lấy mẫu Tsample và điện trở ngoài Rs sao cho BĐT sau thỏa mãn :
Với :  Sr = 1us/V khi ADC10SR=0 và 2us/V khi ADC10SR=1
          Vref : Điện áp tham chiếu ngoài

7.        Các chế độ hoạt động
Nói chung có 4 chế độ hoạt động cho ADC ,về chi tiết các bạn có thể xem trong datasheet , ở đây mình chỉ hướng dẫn đặc điểm từng chế độ và các cài đặt. Thay đổi bit CONSEQx (trong thanh ghi ADC10CTL1) để chọn chế độ hoạt động. Kết quả lưu trong ADC10MEM.
-       Biến đổi từng kênh
o   CONSEQx = 00
o   Kênh cần biến đổi ADC được chọn từ bit INCHx.Bit ADC10SC dùng để kích hoạt sự biến đổi.ENC phải được đảo trạng thái sau mỗi lần biến đổi.
-       Biến đổi 1 dãy kênh
o   CONSEQx = 01
o   Biến đổi 1 dãy kênh,bắt đầu ở kênh được chọn trong INCHx,kết thúc ở A0. Bit ADC10SC dùng để kích hoạt sự biến đổi.ENC phải được đảo trạng thái sau mỗi lần biến đổi.
-       Biến đổi từng kênh lặp lại
o   CONSEQx = 10
o   Kênh được chọn trong INCHx được lấy mẫu và biến đổi liên tục
-       Biến đổi dãy kênh lặp lại
o   CONSEQx = 11
o   Dãy kênh bắt đầu ở INCHx và kết thúc ở A0 được lấy mẫu và biến đổi lần lượt.
Khi MSC = 1 và CONSEQx > 0 thì cạnh lên đầu tiên của SHI sẽ kích hoạt biến đổi. Sự biến đổi vẫn tiếp tục cho đến khi dãy kênh được biến đổi xong mặc dù trong quá trình biến đổi xuất hiện những xung cạnh lên ở tín hiệu kích hoạt SHI. Chức năng của Bit ENC không thay đổi khi sử dụng Bit MSC.  

8.        Bộ điều khiển chuyển tiếp dữ liệu DCT
ADC10 có một bộ điều khiển chuyển giao dữ liệu ( DTC), nó sẽ tự động chuyển kết quả của biến đổi A-D từ thanh ghi ADC10MEM sang bộ nhớ của Chip. DTC được cho phép khi thiết lập thanh ghi ADC10DTC1 có giá trị khác 0. Khi DTC được cho phép, mỗi khi ADC10 hoàn thành việc biến đổi và lưu kết quả vào thanh ghi ADC10MEM thì việc chuyển giao dữ liệu được kích hoạt. Mỗi DTC yêu cầu một CPU MCLK. Không được sử dụng các bus có dữ liệu mà DTC truyền vào để tránh xung đột,nên để CPU ngừng chạy. DTC không được khởi tạo khi ADC10 đang bận.
Nếu bit ADC10CT được thiết lập thì chế độ DCT sẽ không dừng lại sau khi hoàn thành chuyển giao,mà sẽ reset và quay lại chuyển đổi trong chu kỳ mới.Ngược lại DCT sẽ dừng sau khi hoàn tất chu kỳ chuyển đổi.
8.1.              Chế độ chuyển giao 1 khối

Được kích hoạt khi Bit ADC10TB Reset. Giá trị n trong ADC10TC1 xác định số lương chuyển giao cho một khối. Địa chỉ bắt đầu của khối là thanh ghi 16 Bit ADC10SA. Địa chỉ kết thúc là ADC10SA + 2n – 2.
Địa chỉ con trỏ bên trong được khởi tạo bằng ADC10SA và bộ đếm chuyển giao được khởi tạo bằng ‘n’. DTC chuyển giao giá trị từ ADC10MEM sang địa chỉ con trỏ ADC10SA. Sau mỗi lần chuyển giao thì địa chỉ con trỏ tăng 2 và bộ đếm giảm 1. DTC tiếp tục chuyển giao từ ADC10MEM cho đến khi bộ đếm giảm xuống băng 0. Khi sử dung DTC trong chế độ chuyển giao một khối thì cờ ADC10IFG được Set sau mỗi khối được chuyển giao hoàn thành.

8.2.              Chế độ chuyển giao 2 khối

Được chọn khi Bit ADC10TB được Set. Giá trị n trong ADC10TC1 xác định số chuyển giao trong một khối. Địa chỉ đầu tiên trong thanh ghi ADC10SA. Địa chỉ kết thúc của khối đầu tiên là ADC10SA + 2n – 2. Dãy địa chỉ của khối thứ 2 được xác định từ SA + 2n đến SA + 4n – 2. Địa chỉ con trỏ bên trong được khởi tạo bằng ADC10SA và bộ đếm chuyển giao được khởi tạo bằng ‘n’. DTC chuyển giao giá trị từ ADC10MEM sang địa chỉ con trỏ ADC10SA. Sau mỗi lần chuyển giao thì địa chỉ con trỏ tăng 2 và bộ đếm giảm 1. DTC tiếp tục chuyển giao từ ADC10MEM cho đến khi bộ đếm giảm xuống bằng 0. Ở thời điểm này, khối thứ nhất đầy, cờ ADC10IFG và Bit ADC10B1 thì được Set. DTC tiếp tục với khối 2. Bộ đếm chuyển giao bên trong tự động nạp lại giá trị n. DTC bắt đầu chuyển kết quả biến đổi từ ADC10MEM sang khối 2. Sau n lần chuyển giao hoàn thành thì khối 2 đầy. Cờ ADC10IFG Set, Bit ADC10B1 được clear.

8.3.           Chu kỳ thời gian chuyển đổi DCT


9.        Ngắt ADC10
Một ngắt và một véc tơ ngắt được ghép với ADC10. Khi DTC không được sử dụng ( ADC10DTC1= 0), ADC10IFG được Set khi kết quả biến đổi A-D được tải xuống ADC10MEM. Khi DTC được sử dụng ( ADC10DTC1 > 0), ADC10IFG được Set khi sự chuyển giao một khối được hoàn thành và bộ đếm chuyển giao bằng 0. Nếu cả hai Bit ADC10IE và GIE được Set,ADC10IFG sẽ sinh ra một ngắt yêu cầu. Cờ ADC10IFG tự động Reset khi ngắt yêu cầu được duy trì hoặc có thể được Reset bằng phần mềm. 
10.  Tập thanh ghi
ADC10 của MSP430 có rất nhiều thanh ghi điều khiển,để xem chi tiết các bạn đọc thêm trong datasheet,ở đây mình không tiện liệt kê toàn bộ.


11.        Lập trình

          Các chế độ hoạt động của ADC10 rất phức tạp,nên rất khó viết thư viện ADC hoàn chỉnh , dưới đây mình thực hiện thử 2 đoạn chương trình đó là đọc ADC ở chế độ đơn kênh và chế độ đơn kênh lặp lại.
11.1.              Chế độ đơn kênh

Trong ví dụ này mình sẽ thực hiện đọc điện áp ở chân A0 và điện áp VCC/2 dùng điện áp tham chiếu nội 2.5V .Các bạn có thể nối 1 biến trở có đầu xoay nối với chân A0 ,2 đầu còn lại nối VCC và GND trên Kit
Bắt đầu các bạn nên viết hàm khởi tạo cho ADC.Các cài đặt cần làm
-       Set bit ENC=0 thì mới có thể chỉnh sửa được thanh ghi ADC10CTL0 và ADC10CTL1
-       Chọn các chân Ax có chuyển đổi ADC (ADC10AE0),mục đích của việc này đế tách các chân này khỏi khối GPIO.
-       Chọn tần số lấy mẫu,bật module ADC10
-       Chọn điện áp tham chiếu.Cần chú ý bit SREFx.Phân biệt giá trị Vref+ là các điện áp tham chiếu nội ,trong khi Veref+ và Veref- là 2 chân điện áp tham chiếu ngoài(Xem Sơ đồ chân).Khi muốn dùng điện áp tham chiếu nội thì Vr+ phải được nối với Vref+(vì thế ta chọn SREF_1).Khi muốn dùng điện áp tham chiếu ngoài có thể chọn SREF_2.
-       Khi muốn dùng điện áp tham chiếu ngoài ở các chân Veref thì phải set REFOUT=1
-       Cuối cùng là bật ENC và ADC10ON để cho phép module hoạt động
Code tham khảo như sau:

volatile unsigned char PORT_ADC=(BIT0+BIT3+BIT5);
//Chu y thach anh ngoai khong mo phong bang protues duoc
typedef enum { ON2_5V,                     //Dien ap tham chieu noi 2.5V
                        ON1_5V,                       //Dien ap tham chieu noi 2.5V
            VCC,//Dien ap nguon,luu y phai loc nhieu tot cho nguon neu dung che do nay
                        VeREF} Vref;
void ADC10_Init(V_tham_chieu)
{
            // Set ENC=0 thi moi chinh sua duoc cac thanh ghi
            ADC10CTL0 &= ~ENC;
            // Cho cho ADC ranh
            while(ADC10CTL1 & ADC10BUSY);
            //ADC10 Control Register 0

            //Noi cac chan voi cong tuong tu
            ADC10AE0=PORT_ADC;
            // Thoi gian lay mau 64xADC10CLK,200ksps,
            ADC10CTL0 = ADC10SHT_3 + MSC + ADC10ON;

            //Xoa cai dat cu
            //ADC10CTL0&=~(SREF_7 + REFOUT + REFON + REF2_5V);
            //Chon dien ap tham chieu
            switch(V_tham_chieu)
            {
                        case(ON2_5V):
                        {
                                    ADC10CTL0|= SREF_1 + REFON + REF2_5V ;
                                    break;
                        }
                        case(ON1_5V):
                        {
                                    ADC10CTL0|= SREF_1 + REFON ;
                                    break;
                        }
                        case(VCC):
                        {
                                    ADC10CTL0|= SREF_0;
                                    break;
                        }
                        case(VeREF):
                        {
                                    ADC10CTL0|= SREF_2 + REFOUT ;
                                    break;
                        }
            }          
            //Bien doi tung kenh
            ADC10CTL1  = CONSEQ_0;
            ADC10DTC0=0; //Tat DTC
            ADC10DTC1=0;
            // Cho phep chuyen doi
            ADC10CTL0 |= ENC;
            // Bat dau chuyen doi
            ADC10CTL0 |= ADC10SC;
}

Đây là hàm chọn cổng cần đo.Bởi vì ở chế độ đơn kênh,mỗi khi muốn đọc ADC chúng ta phải set bit ENC=1 ,đồng thời nếu muốn đọc cổng khác thì phải set lại bit INCH.

unsigned int ADC10_Read_Channel(unsigned char channel)
{
            //Neu kenh doc khac lan cuoi cung doc
            if(channel != Reading_channel)
            {
                        //Disable chuyen doi
                        ADC10CTL0&=~( ADC10SC + ENC );
                        //Thay doi kenh can chuyen doi-chi dung trong che do don kenh
                        ADC10CTL1 &= 0x0FFF;
                        ADC10CTL1|=(channel<<12);
                        Reading_channel = channel;

                        ADC10CTL0 &= ~ADC10IFG;                  //Tat co ngat
                        ADC10CTL0|= (ADC10SC + ENC);
                        //__bis_SR_register(CPUOFF + GIE); // Ngat CPU cho den khi chuyen doi xong
                        while(!(ADC10CTL0 & ADC10IFG));                   //Cho den khi chuyen doi xong
                        return ADC10MEM;                   //Lay gia tri ADC
            }
            else     //Neu channel giong channel da doc lan truoc
            {
                        ADC10CTL0 &= ~ADC10IFG;                  //Tat co ngat
                        ADC10CTL0|= (ADC10SC + ENC);           //Cho phep chuyen doi
                        //__bis_SR_register(CPUOFF  + GIE); // Ngat CPU cho den khi chuyen doi xong
                        while(!(ADC10CTL0 & ADC10IFG));                   //Cho den khi chuyen doi xong
                        return ADC10MEM;                   //Lay gia tri ADC
            }
}


Chương trình chính đo ADC và hiển thị UART ,nếu chưa biết các sử dụng UART thì bạn có thể đọc lại ở TUT trước.Từ kết quả đo các bạn có thể thấy một điều thú vị là điện áp nguồn cấp của kit launchpad là 3.55V .Mình đọc channel 11 có điện áp VCC/2.Các bạn có thể dùng công thức ở mục 2 để tính.

#include "msp430g2553.h"
#include "stdio.h"
#include "Library/Clock.h"
#include "Library/UART.h"
#include "Library/ADC.h"


unsigned int  Data;
void main()
{
            WDTCTL = WDTPW | WDTHOLD;           //Stop Watchdog
            Select_Clock(DCO_1MHZ);
            SMCLK_F=1000000;
            UART_Init();
            ADC10_Init(ON2_5V);
            while(1)
            {
                        Data=ADC10_Read_Channel(0);
                        UART_Write_Char(10);
                        UART_Write_String("Channel 0:");
                        UART_Write_Int(Data);

                        Data=ADC10_Read_Channel(11);
                        UART_Write_Char(10);
                        UART_Write_String("Channel 11:");
                        UART_Write_Int(Data);

                        _delay_cycles(1000000);
            }
}




11.2.              Chức năng DTC
Ở đây mình trình bày luôn chế độ chuyển đổi đa kênh kết hợp DTC.Nguyên nhân là vì ADC10 nếu không hoạt động ở chế độ DTC thì hầu như 3 chế độ quét còn lại của ADC(đơn kênh liên tục,đa kênh rời rạc,đa kênh liên tục) hoạt động không hiệu quả và bản thân chế độ CONSEQ_0 có thể đảm nhiệm luôn CONSEQ_1 .Chúng ta sẽ cài đặt chức năng DTC đa kênh liên tục.
Các bước cài đặt chế độ DTC:
-       Ngắt bít ENC để cho phép chỉnh sửa các thanh ghi ADC10CTL0 và ADC10CTL1
-       Cài đặt các cổng có chuyển đổi tương tự vào thanh ghi ADC10EA0
-       Chọn chế độ truyền dữ liệu liên tục từ ADC vào bộ nhớ
-       Cài đặt địa chỉ cho DTC
-       Cài đặt chế độ các thanh ghi ADC10CTL0 và ADC10CTL1 ,chú ý set bit MSC ở ADC10CTL0 và CONSEQ_x(2,3) ở ADC10CTL1 để chọn chuyển đổi đơn kênh hay đa kênh liên tục
-       Cho phép chuyển đổi ADC
Các bạn chú ý là khi làm việc vơid DTC thì ADC thực hiện chuyển đổi liên tục nên tốn pin,nên chế độ này khi sử dụng cho các ứng dụng cần dòng thấp cần cài đặt hết sức cẩn thận.Dưới đây là hàm khởi tạo DTC.
// Neu sequence = 0 thi ghi 1 gia tri cua channel vao *pointer
// Neu sequence = 1 thi cac gia tri ghi vao cua cac channel tu channel ->A0
// Quet tu channel A(channel) ->A0 , che 1 chuyen giao 1 block
// Chu y la A(channel) dc ghi vao pointer[0]
void ADC10_DTC(unsigned char channel,unsigned int pointer[], unsigned char  sequence)
{
          //Giam dien tieu thu ,dam bao an toan
          P1DIR &=~PORT_ADC;                 //Chon nhap du lieu
          P1OUT &=~PORT_ADC;     //Input
          P1REN &=~PORT_ADC;                //Khong co dien tro keo len

          // Set ENC=0 thi moi chinh sua duoc cac thanh ghi
          ADC10CTL0 &= ~ENC;
          // Cho cho ADC ranh
          while(ADC10CTL1 & ADC10BUSY);
          ADC10AE0=PORT_ADC;
          // Chon che do lay mau lap lai
          ADC10DTC0 = ADC10CT;
          // Chon so lan ghi vao trong 1 vong quet
          // Neu sequence = 0 thi cac gia tri ghi vao cua cung 1 channel
          // Neu sequence = 1 thi cac gia tri ghi vao cua cac channel tu channel ->A0
          ADC10DTC1 = sequence ? (channel+1) : 1;
          // Dia chi bien truyen qua DTC
          ADC10SA = ((unsigned int)pointer);
          // Thoi gian lay mau 1/64 ADC10CLK, Dien ap tham chieu noi 2_5V, Tu dong lay mau
          ADC10CTL0 |= ADC10SHT_3 | SREF_1 | REFON |REF2_5V|MSC|ADC10ON;
          // Chon Channel, ADC10CLK = 1/8 SMCLK , Lap lai lap lai nhieu kenh/1 kenh
          ADC10CTL1 = ((unsigned int)channel<<12) |ADC10DIV_7 | (sequence ? CONSEQ_3 : CONSEQ_2);
          // Cho phep chuyen doi
          ADC10CTL0 |= ENC;
          // Bat dau chuyen doi
          ADC10CTL0 |= ADC10SC;
}


Còn đây là chương trình chính,đọc các cổng A0 , A3 ->A7 ,sử dụng UART (9600) để hiển thị trên máy tính nên không đo các cổng A1 A2 .

////////////////////////////////////////////////////////////////////
// CHUONG TRINH TEST TEST ADC 10bit
// VIET BOI : PHAM VAN THUAN    DTVT07-K55
// Email:        terran991992@gmail.com
// Blog :        http://thuanbk55.blogspot.com/
// .................................................................
// AP DUNG CHO MACH UNG DUNG MSP430
//******************************************************************/
#include "msp430g2553.h"
#include "stdio.h"
#include "Library/Clock.h"
#include "Library/UART.h"
#include "Library/ADC.h"
 

unsigned int  Data[8];
void main()
{
          WDTCTL = WDTPW | WDTHOLD;  //Stop Watchdog
          Select_Clock(DCO_1MHZ);
          SMCLK_F=1000000;
          UART_Init();  //UART

          ADC10_DTC(7,&Data[0],1);
          //Doc cac ADC tu 0->7 tru A1 va A2 cho UART
          while(1)
          {
                   UART_Write_Char(10);
                   UART_Write_Int(Data[7]);
                   UART_Write_Char(' ');                   //Tab ngang
                   UART_Write_Int(Data[4]);
                   UART_Write_Char(' ');                   //Tab ngang
                   UART_Write_Int(Data[3]);
                   UART_Write_Char(' ');                   //Tab ngang
                   UART_Write_Int(Data[2]);
                   UART_Write_Char(' ');                   //Tab ngang
                   UART_Write_Int(Data[1]);
                   UART_Write_Char(' ');                   //Tab ngang
                   UART_Write_Int(Data[0]);
                   UART_Write_Char(10);
                   _delay_cycles(1000000);
          }
}



Các bạn có thể download Project đọc 1 ADC này ở đây: Code_Read1Channel_ADC10
Các bạn có thể download Project DTC tại đây : ADC10_DTC

Bài tiếp theo : Bài 8.(MSP430_Basic)I2C USCI

6 comments:

  1. Replies
    1. Bạn chờ tí bài này mình vẫn chưa viết xong :))

      Delete
  2. bạn ơi cho mình hỏi nếu tốc độ lấy mẫu là 200ksps thì có giải pháp nào để lấy mẫu video dc ko?

    ReplyDelete
    Replies
    1. Nếu là lấy mẫu âm thanh thì bạn dùng DTC là được,tần số lấy mẫu chỉ cần trên 8ksps là đủ

      Delete
  3. co ADC12posst len tham khao vs. tks

    ReplyDelete
    Replies
    1. Mình thấy ADC12 bit khá giống 10bit mà đều là SAR,hiện mình ko có chip nên chưa làm được,chỉ có ADC16bit với 24bit là khác tí thôi

      Delete

END COMMENT FACEBOOK-->