Thông báo

Collapse
No announcement yet.

thắc mắc cảm biến nhiệt độ lm35 ?

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • thắc mắc cảm biến nhiệt độ lm35 ?

    Mình có xem một đoạn code phần chuyển đổi ADC của con pic, nhưng có vài chỗ ko hiểu? Mong mọi người giúp mình với
    Code:
    #include <16f877a.h>
    #include <def_877a.h>
    #device ADC=10
    #fuses nowdt,noprotect,nolvp,hs
    #use delay(clock=4000000)
    const unsigned char ma7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
    int16 kqadc;
    int dem,dv,ch,tr,ng,i;
    unsigned char mdv,mch,mtr,mng;
    void giaima7doan(int16 tam)
    {
    	ng=tam/1000;
    	tam=tam%1000;
    	tr=tam/100;
    	tam=tam%100;
    	ch=tam/10;
    	dv=tam%10;
    	mng=ma7[ng];
    	mtr=ma7[tr];
    	mch=ma7[ch];
    	mdv=ma7[dv];
    	mch=mch&0x7f;
    }
    //hien thi quet led
    void hienthi()
    {
    	output_d(mdv);	output_low(pin_b2);	delay_us(100);	output_high(pin_b2);
    	output_d(mch);	output_low(pin_b3);	delay_us(100);	output_high(pin_b3);
    	output_d(mtr);	output_low(pin_b4);	delay_us(100);	output_high(pin_b4);
    	output_d(0x9c); output_low(pin_b1);	delay_us(100);	output_high(pin_b1);
    	output_d(0xc6);	output_low(pin_b0);	delay_us(100);	output_high(pin_b0);	
    }
    void main()
    {
    	set_tris_A(0b00000001);
    	set_tris_D(0x00);
    	set_tris_b(0x00);
    	output_b(0xff);
    	setup_ADC(ADC_clock_div_32);
    	setup_adc_ports(AN0);
    	set_adc_channel(0);
    	while(1)
    		{
    			kqadc=read_adc();
    			kqadc=kqadc*4.887;
    			giaima7doan(kqadc);
    			for(i=0;i<=30;i++)
    			{
    				hienthi();	
    			}
    		}
    	
    }
    với ADC 10 bit tại sao lại có dòng kqadc=kqadc*4.887;
    và nếu mình sử dụng adc 8 bit thì hệ số có còn là 4.887 nữa hay ko?Mong nhận được sự giúp đỡ của mọi người

  • #2
    Nguyên văn bởi loveboom3012 Xem bài viết
    Mình có xem một đoạn code phần chuyển đổi ADC của con pic, nhưng có vài chỗ ko hiểu? Mong mọi người giúp mình với
    Code:
    #include <16f877a.h>
    #include <def_877a.h>
    #device ADC=10
    #fuses nowdt,noprotect,nolvp,hs
    #use delay(clock=4000000)
    const unsigned char ma7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
    int16 kqadc;
    int dem,dv,ch,tr,ng,i;
    unsigned char mdv,mch,mtr,mng;
    void giaima7doan(int16 tam)
    {
    	ng=tam/1000;
    	tam=tam%1000;
    	tr=tam/100;
    	tam=tam%100;
    	ch=tam/10;
    	dv=tam%10;
    	mng=ma7[ng];
    	mtr=ma7[tr];
    	mch=ma7[ch];
    	mdv=ma7[dv];
    	mch=mch&0x7f;
    }
    //hien thi quet led
    void hienthi()
    {
    	output_d(mdv);	output_low(pin_b2);	delay_us(100);	output_high(pin_b2);
    	output_d(mch);	output_low(pin_b3);	delay_us(100);	output_high(pin_b3);
    	output_d(mtr);	output_low(pin_b4);	delay_us(100);	output_high(pin_b4);
    	output_d(0x9c); output_low(pin_b1);	delay_us(100);	output_high(pin_b1);
    	output_d(0xc6);	output_low(pin_b0);	delay_us(100);	output_high(pin_b0);	
    }
    void main()
    {
    	set_tris_A(0b00000001);
    	set_tris_D(0x00);
    	set_tris_b(0x00);
    	output_b(0xff);
    	setup_ADC(ADC_clock_div_32);
    	setup_adc_ports(AN0);
    	set_adc_channel(0);
    	while(1)
    		{
    			kqadc=read_adc();
    			kqadc=kqadc*4.887;
    			giaima7doan(kqadc);
    			for(i=0;i<=30;i++)
    			{
    				hienthi();	
    			}
    		}
    	
    }
    với ADC 10 bit tại sao lại có dòng kqadc=kqadc*4.887;
    và nếu mình sử dụng adc 8 bit thì hệ số có còn là 4.887 nữa hay ko?Mong nhận được sự giúp đỡ của mọi người
    Bạn phải xem là cái biến kqadc nó hiện thị số gì? Ở đây, tác giả muốn hiện thị số volt ở chân AN0 nên mới nhân thêm 4.887 vào là nguyên nhân sau:
    Khi dùng ADC 10 bít:
    +Nếu chân AN0 có mức điện áp 0V thì biến read_adc() nhận giá trị 0
    +Nếu AN0 có mức điện áp 5V thì biến read_adc() nhận giá trị 2^10 =1024
    Nhưng tác giả muốn hiện thị giá trị điện áp vào chân AN0, ví dụ đặt biến điện áp đó là x, thì x =(read_adc() * 5)/1024 volt=read_adc() * 4,887 milivolt.
    Khi đó, nếu dùng ADC 8 bít, thì nếu điện áp ở chân AN0 =5V thì read_adc = 2^8 = 256. Khi đó giá trị 4,887 sẽ thay đổi =5*1000/256
    Mình cũng mới học về Pic, mong mọi người chỉ thêm.
    Mua bán thiết bị điện công nghiệp tại Hà Nội, toàn quốc.
    http://diencongnghiep360.com/
    http://tudienhathe.vn/

    Comment

    Về tác giả

    Collapse

    loveboom3012 Tìm hiểu thêm về loveboom3012

    Bài viết mới nhất

    Collapse

    Đang tải...
    X