View Single Post
Old 17-11-2009, 03:35 PM   #5
hang1988
Đệ 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)
hang1988 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn