Mọi người giúp mình lỗi sau vơi.
Mình đang làm mạch vơi Pic 16F887 sử dụng 4 kenh ADC, san0,san1,san2,san3,san4. các chan ADC đều có trở kéo mass 10k. nhưng trong một số mạch của mình có hiện tượng(chỉ một số mạch bị) khi có tín hiệu đầu vào từ san3 thì doc san0 cũng có giá trị nhỏ(giá trị 8 bit =1->3)( mà chân này chưa có tín hiệu vào).
Chưong trình của mình như sau(Minh dung ccs c):
#include<16f887.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device ADC=8
#use delay(clock=10000000)
//#include<lcd.c>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
//Phân khai báo cong mình ko dưa vào
void init(){
int8 i,k=0;
trisd=0x00;
trisb=0xff;
trisa=0xff;
SETUP_ADC_PORTS(sAN0|sAN1|sAN2|sAN3|sAN4|VSS_VDD );
setup_adc( ADC_CLOCK_INTERNAL );
}
Đây là chương trình con dọc adc
void sampling(){
int16 i;
int8 a,b,c,r,m;
max=0;max1=0;max2=0;r=0;
for(i=0; i<=200; ++i) {
delay_us(300);//delay_us(200);
set_adc_channel(0);
a = Read_ADC();
if(a>max)
max=a;
set_adc_channel(1);
delay_us(300);
b = Read_ADC();
if(b>max1)
max1=b;
set_adc_channel( 2);
delay_us(300);
c = Read_ADC();
if(c>max2)
max2=c;
}
if(max<=1){
set_adc_channel( 3);
for(i=0;i<=10;i++){
m = Read_ADC();
if(m>r)r=m;
delay_us(50);
}
}
}
Mình đang làm mạch vơi Pic 16F887 sử dụng 4 kenh ADC, san0,san1,san2,san3,san4. các chan ADC đều có trở kéo mass 10k. nhưng trong một số mạch của mình có hiện tượng(chỉ một số mạch bị) khi có tín hiệu đầu vào từ san3 thì doc san0 cũng có giá trị nhỏ(giá trị 8 bit =1->3)( mà chân này chưa có tín hiệu vào).
Chưong trình của mình như sau(Minh dung ccs c):
#include<16f887.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device ADC=8
#use delay(clock=10000000)
//#include<lcd.c>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
//Phân khai báo cong mình ko dưa vào
void init(){
int8 i,k=0;
trisd=0x00;
trisb=0xff;
trisa=0xff;
SETUP_ADC_PORTS(sAN0|sAN1|sAN2|sAN3|sAN4|VSS_VDD );
setup_adc( ADC_CLOCK_INTERNAL );
}
Đây là chương trình con dọc adc
void sampling(){
int16 i;
int8 a,b,c,r,m;
max=0;max1=0;max2=0;r=0;
for(i=0; i<=200; ++i) {
delay_us(300);//delay_us(200);
set_adc_channel(0);
a = Read_ADC();
if(a>max)
max=a;
set_adc_channel(1);
delay_us(300);
b = Read_ADC();
if(b>max1)
max1=b;
set_adc_channel( 2);
delay_us(300);
c = Read_ADC();
if(c>max2)
max2=c;
}
if(max<=1){
set_adc_channel( 3);
for(i=0;i<=10;i++){
m = Read_ADC();
if(m>r)r=m;
delay_us(50);
}
}
}