![]() |
|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#5 |
Đệ tử 1 túi
Tham gia ngày: May 2008
Bài gửi: 21
: |
Em còn gặp 1 trường hợp như thế này. Em có chương trình như thế này :
#include <p30f4011.h> #include "ADC.h" #include "LCD.h" #include <math.h> unsigned int ADCValue,t,t1; void Init_ADC10(void) { TRISB=0x0001; ADPCFG = 0xFFFE; //Cac chan khac la digital, chan AN0/RB0 la analog ADCON1 = 0x00E0; // Cham dut lay mau ADC //viec chuyen doi A/D ADCON2 = 0; // Lua chon kenh 0 cho tin hieu dau vao ADCHS = 0x0000 ; //Kenh 0 doc tin hieu giua AN0 va AVss ADCSSL =0x0000; //Khong quet cac ngo vao ADCON3 = 0x0103; //Dung 1 TAD cho lay mau, dung clock he thong, Tad = 2 x Tcy = 250ns _ADIF = 0; //Xoa co ngat ADC _ADIE = 1; //Cho phep ngat ADC _ADON = 1; //Bat module ADC _ASAM = 1; //Khoi dong che do tu dong lay mau } //Khoi dong che do tu dong lay mau void _ISR _ADCInterrupt(void) { ADCValue = ADCBUF0;// Get gia tri ADC _ADIF = 0; } void calc_temperature() { t1 = ADCValue-559; // Tinh luon gia tri ADC t=t1*4.9; LCD_Position(1,1); LCD_WriteString("Temp:"); Delay_ms(1); LCD_Position(1,6); LCD_WriteNumber(t/10); Delay_ms(1); LCD_Position(1,9); LCD_WriteNumber(t%10); Delay_ms(1); LCD_Position(1,10); LCD_WriteString("C"); Delay_ms(1); LCD_Position(1,8); LCD_WriteString("."); Delay_ms(1); LCD_Position(2,1); LCD_WriteNumber(ADCValue); Delay_ms(1); LCD_Position(2,5); LCD_WriteNumber(263); } Khi em để tần số thực thi lệnh là 8MPis thì kết quả tính ra giá trị t phù hợp với giá trị ADC đo được. Khi em chuyển sang tân số thực thi lệnh là 16MPis thì kết quả ADC vẫn như vậy nhưng giá trị t của mình lại ko đúng theo công thức.(GIá trị t bị sai so với công thức trong chương trình) |
![]() |
![]() |
|
|