PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   cách sử dụng cùng lúc 3 bộ adc với pic 16f887 (http://www.picvietnam.com/forum/showthread.php?t=8061)

cuongdkz88 14-03-2011 06:46 PM

cách sử dụng cùng lúc 3 bộ adc với pic 16f887
 
em đang làm đồ án sử dụng 3 biến trở làm đầu vào cho 3 kênh adc. em sử dụng setup_adc_ports( RA0_RA1_RA3_ANALOG );

nhưng em chưa hiểu adc=read_adc() thì làm thế nào để đọc được kết quả của 3 kênh ạ.
xin các tiền bối giúp em với.

000007 18-03-2011 05:09 PM

Bạn dùng hàm set_ADC_channel() để chọn ADC cần dùng.

akatsu 19-03-2011 01:48 PM

bạn có thể làm như thế này mình ví dụ dùng 2 kênh adc thôi nha.còn lại bạn làm tương tự nhá. đây là code đo adc 2 kênh dùng để tính Công Suất= UxI. Thân
/////////////////////////////////////////////////////////////////////////////////////
#include <16F877A.h>
#include <def_877a.h>
#device adc=8
#FUSES HS
#use delay(clock=8000000)

#include <lcd1_doan.c>

int16 giatriadc0,giatriadc1;
float tong,von,ampe;

void channel_0();
void channel_1();
void congsuatP();

#int_rda

void main()
{
set_adc_channel(1);
setup_adc(adc_clock_internal);
setup_adc_ports(ALL_ANALOG);
enable_interrupts(int_rda) ;
enable_interrupts(global) ;
lcd_init();
printf(lcd_putc,"*DH-CNTPHCM_HUI*");
while(1)
{
channel_0();
delay_ms(100);
channel_1();
delay_ms(10);
congsuatP();
lcd_gotoxy(1,2);
printf(lcd_putc,"%3.1f",tong);
lcd_gotoxy(7,2);
lcd_putc("KW");
}
}
void channel_0()
{
set_adc_channel(1);
giatriadc0=read_adc();
von=(float)giatriadc0*76/51;
}

void channel_1()
{
set_adc_channel(2);
giatriadc1=read_adc();
ampe=(float)giatriadc1/51;
}

void congsuatP()
{
tong=(float)von*ampe/1000;
}
/////////////////////////////////////////////////////////////////////

cuongdkz88 30-03-2011 08:09 AM

thank đại ca

th43v3r89 01-11-2011 10:28 PM

Bạn ơi cho mình hỏi. tại sao mình dùng 2 kênh adc. 1 kênh đọc nhiệt độ LM 35, 1 kênh nối với quang trở . chạy mô phỏng proteus thì OK rồi. nhưng khi chạy mạch thật thì nó bị lỗi. giá trị trả về của 2 kênh adc bị ảnh hưởng lẫn nhau, khi che quang trở đi thì nhiệt độ bị thay đổi. nhiệt độ cứ nhảy loạn xạ hết cả lên. ko giống như mô phỏng. mình để delay giữa 2 lần đọc ADC 2 kênh cỡ ms. code giống như trên. thanks!

cau am chen 17-10-2013 03:58 PM

loi nay la j vay cac anh oi
 
loi nay la j vay cac anh oi

phuphuongbk 19-10-2013 11:30 PM

Trích:

Nguyên văn bởi th43v3r89 (Post 51102)
Bạn ơi cho mình hỏi. tại sao mình dùng 2 kênh adc. 1 kênh đọc nhiệt độ LM 35, 1 kênh nối với quang trở . chạy mô phỏng proteus thì OK rồi. nhưng khi chạy mạch thật thì nó bị lỗi. giá trị trả về của 2 kênh adc bị ảnh hưởng lẫn nhau, khi che quang trở đi thì nhiệt độ bị thay đổi. nhiệt độ cứ nhảy loạn xạ hết cả lên. ko giống như mô phỏng. mình để delay giữa 2 lần đọc ADC 2 kênh cỡ ms. code giống như trên. thanks!

Mô phỏng chỉ là 1 phần nhỏ thôi.nó là trong điều kiện hoàn hoản rồi.Còn thực tế ms xảy ra nhiều vấn đề. Đừng tin quá nhiều vào mô phỏng bạn ak. Ko biết code bạn thế nào nh theo t thì nên thêm 1 lệnh delay (khoảng 1ms) khi chuyển kênh.


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam