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ần gíup đỡ về việc đọc ADC từ lm35DZ và hiển thị trên 2 led 7 đoạn (http://www.picvietnam.com/forum/showthread.php?t=4116)

tienchuan 14-05-2009 05:44 PM

Cần gíup đỡ về việc đọc ADC từ lm35DZ và hiển thị trên 2 led 7 đoạn
 
1 Attachment(s)
mình mới bắt đầu học pic,nhưng ngặt nỗi mình lại chọn đề tài mạch đo nhiệt độ dùng LM35DZ hiển thị trên 2 led 7 đoạn (dùng pic16f877a).Định đọc tài liệu của anh Linhnc,sau đó sửa lại cái code,nhưng khi thực hiện thì phát sinh nhiều vấn đề quá.Nói tóm lại là mình đã test chương trình trên board ,nhưng khi chạy thì nó hiển thị chỉ 2 số 0 tròn chỉnh.
Mong các đàn anh đi trước chỉ giáo giùm !
CODE:
// |||||||||||| KET NOI PHAN CUNG ||||||||||||||||
//++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++
//| RB0->7 KET NOI DEN CAC CHAN A,B,C,D,E,F,G CUA 2 LED 7 DOAN ANODE CHUNG.
//| CHAN 8(VCC) CUA 2 LED 7 D0AN DUOC DIEU KHIEN BOI 2 BJT THUAN PNP: A1015
//| CHAN C CUA 2 BJT NOI VOI CHAN VCC CUA 2 LED 7 DOAN DE DIEU KHIEN 2 LED THONG QUA VIEC DIEU KHIEN BJT
//| CHAN E CUA BJT NOI VOI NGUON
//| CHAN B CUA BJT HANG CHUC VA DON VI NOI LAN LUOT VOI CHAN RD0,RD1

#include<16f877a.h>
#include <def_877a.h>
#device *=16 ADC=10
#include <math.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
#use delay(clock=12000000)

byte const maled[]={0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X9 0};
int16 hc,hdv;

void hienthi();
void convert_bcd(int16 x);


void main()
{
float value ;
int16 i;

// KHOI TAO CAC CHAN I/O
trisb=0x00;
trisd=0x00;
trisa=0xff;

// KHOI TAO ADC
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(20);
value=(float)read_adc();
value = value/2.048;
convert_bcd((int16)value);


while (1)
{

i++;
value = (float)read_adc();
value = value/2.048;

if (i=65000)

{
convert_bcd((int16)value);
i=0;
}
hienthi();


}
}
void hienthi()

{


OUTPUT_B(maled[hdv]);
OUTPUT_LOW(PIN_D1);
delay_us(500);
OUTPUT_HIGH(PIN_D0);

OUTPUT_B(maled[hc]);
OUTPUT_LOW(PIN_D0);
delay_us(500);
OUTPUT_HIGH(PIN_D1);
}

void convert_bcd(int16 x)
{

hc=x/10;
hdv=x%10;
}

tienchuan 15-05-2009 10:58 AM

sao ko co ai giup minh voi!

tienchuan 17-05-2009 05:12 PM

ko ai giup minh=the la toi roi!

phandinh 17-05-2009 05:29 PM

Bạn có chắc chắn rằng bạn đã đọc được ADC ?

tienchuan 17-05-2009 11:14 PM

cho cong thuc doc ADC minh viet hinh nhu chua dung,con LM35 Thay doiu 10mV/ do C
trong khi dung dung adc 10 bit,dien ap tham chieu 5V,nen 1V=1000mV se thay doi 1024/5 don vi,
ADC= (1024/5)/(10*10^-3)
cac ban coi minh tinh nhu the co dung ko?

phandinh 17-05-2009 11:34 PM

ADC 10 bit --> 1 mức lượng tử tương ứng = 5V/1024 = 4.883 mV.

LM35 thay đổi 10 mV/ C. Do đó mức lượng tử thay đổi là 10 mV / 4.883 mV = 2.048

==> Độ C = Giá trị ADC đọc được / 2.048 .

Mình đã làm như vậy để hiển thị LCD, giao tiếp PC và đã chạy tốt.
Và tất nhiên bạn muốn hiển thị được thì bạn phải làm từ bước đơn giản nhất.
Chẳng hạn như thay LM35 bằng biến trở xuất ra led đơn,Xem biến đổi ADC có tưng ứng không ?.
Rồi mới tính đến hiển thị cái gì. Bạn sẽ rất dễ dàng gỡ rối chương trình.
Chúc thành công

tienchuan 18-05-2009 07:13 AM

1 Attachment(s)
cam on ban Phan Dinh minh se sua lai chuong trinh va test tren board xem sao, ah cho minh hoi them cach cam con LM35DZ,vao chan AN0 minh thay co cam them con tro 1k tu chan so 2 cua lm35 roi moi vao PIC,tu chan AN0 doc ADC cung cam them tu 104.Minh doc ADC nhung chua hieu?

Mong cac bac dan anh chi giup!

tienchuan 22-05-2009 11:51 AM

sao khong thay ai giup minh voi?
cac huynh,hay truong lao dau het roi!


Múi giờ GMT. Hiện tại là 04:02 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