PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 02-12-2008, 10:19 PM   #1
ketxanh
Đệ tử 3 túi
 
ketxanh's Avatar
 
Tham gia ngày: Aug 2008
Bài gửi: 53
:
Dùng nhiều kênh ADC của PIC để đo

Xin hỏi mọi người rằng, nếu trong một chương trình cho PIC mà mình muốn dùng nhiều kênh ADC để đo thì mình phải có ý tưởng sao ta?????????????????. Em đang bị bí chõ này, sài một kênh thì em làm được rồi mà nhiều kênh thì em làm hoài mà không được
__________________
Hãy cho trước khi nhận
ketxanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-12-2008, 11:05 PM   #2
nguyenquoctoan
Đệ tử 6 túi
 
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: BK TP HCM
Bài gửi: 136
:
bạn xài kênh 0 thì set kênh 0 ,muốn xài thêm kênh 1 thi set thêm, pic có 1 số kênh đó AN0,AN1,AN2..
setup_adc_ports(AN0);
set_adc_channel(0); //kenh 0 chan so2

setup_adc_ports(AN1);
set_adc_channel(1); //kenh 1 chan so3
nguyenquoctoan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-12-2008, 09:40 AM   #3
linhnc308
Đệ tử 5 túi
 
Tham gia ngày: Oct 2005
Bài gửi: 117
:
Tại một thời điểm bạn chỉ có thể đọc được một kênh ADC vì trong PIC có một bộ ADC mà thồi, việc có nhiều kênh chẳng qua là PIC dùng thêm bộ MUX tương tự để lấy dữ liệu từ các kênh khác nhau đưa vào ADC và đo. Để đọc nhiều kênh ADC liên tiếp nhau, bạn có thể code như sau:

Khai báo biến
Code:
#define MAX_CH_ADC  8
int8 adc_buffer[MAX_CH_ADC];

// Hàm đọc nhiều kênh ADC

void read_mult_adc(int8 Num_Ch){
int8 i;
 for(i=0;i< Num_Ch;i++){
   set_adc_channel(i); //kênh adc thứ i
   delay_us(10);  // Sau khi set kênh thì cần đợi 10us, đọc help CCS phần về adc
   adc_buffer[i]= read_adc();
}
}
Đoạn code trên sẽ đọc adc 8bit về. Nếu muốn đọc adc 10bit thì khai báo mảng adc_buffer là 16bit và thiết lập ADC hoạt động ở chế độ 10bit (ngay dưới code #include, thêm #device adc=10)
Khi không đọc các kênh liên tiếp nhau, bạn dùng hàm set_adc_channel(ten_kenh_adc); delay_us(10); để chuyển đổi đến kênh adc cần đo và gọi hàm read_adc() để lấy giá trị kênh đó về, lưu vào buffer.
__________________
CallerID, Ethernet-RS232, PICWEB, Cảnh báo BTS
Giải pháp toàn diện giám sát - điều khiển từ xa qua GSM/Internet
0988006696

http://linhnc308.blogspot.com
linhnc308@gmail.com
linhnc308 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-12-2008, 10:45 AM   #4
ketxanh
Đệ tử 3 túi
 
ketxanh's Avatar
 
Tham gia ngày: Aug 2008
Bài gửi: 53
:
Cảm ơn bac Linhnc308 nhiều. Nhờ bác em đã làm được rùi, bữa nào em làm hoàn thiện em sẽ post bài của em lên để mọi người cùng tham khảo.
__________________
Hãy cho trước khi nhận
ketxanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 06:24 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam