View Single Post
Old 19-11-2014, 10:33 PM   #1
Soi Dien
Nhập môn đệ tử
 
Tham gia ngày: Nov 2014
Bài gửi: 3
:
Ghép nối dsPic30f4011 với cảm biến nhiệt độ LM35

Chào các bạn, mình đang làm 1 đề tài ghép nối dsPic30f4011 với cảm biến LM35, chuyển đổi ADC và hiển thị giá trị nhiệt độ lên LCD. Mình đã viết 1 chương trình nhưng kết quả hiển thị lên LCD bị sai,nó hiển thị 'Nhiet Do: 500", mọi người cho mình ý kiến, mình nghĩ có lẽ do chương trình chuyển đổi ADC mình viết sai.
Đầu ra của cảm biến mình nối vào chân AN0(RB0)

#include<p30f4011.h>

_FOSC(CSW_FSCM_OFF & HS); // Set up for Crystal
_FWDT(WDT_OFF); // Turn off the Watch-Dog Timer
_FBORPOR(MCLR_EN & PWRT_OFF); // Enable MCLR reset pin and turn off the power-up timers

#define port_lcd4 LATBbits.LATB5
#define port_lcd5 LATBbits.LATB6
#define port_lcd6 LATBbits.LATB7
#define port_lcd7 LATBbits.LATB8
#define rs LATBbits.LATB1
#define rw LATBbits.LATB3
#define e LATBbits.LATB4


unsigned int adc_data,adc_data1;
unsigned char adc_tram,adc_chuc,adc_donvi,adc_thapphan;

void delay_ms(int delay)
{
int i,j;
for(i=0;i<delay;i++)
for(j=0;j<250;j++)
{;}
}

void lcd_send4bits(unsigned char byte)
{

port_lcd4=(byte>>4)&1;
port_lcd5=(byte>>5)&1;
port_lcd6=(byte>>6)&1;
port_lcd7=(byte>>7)&1;
e=1;
delay_ms(100);
e=0;


port_lcd4=byte&1;
port_lcd5=(byte>>1)&1;
port_lcd6=(byte>>2)&1;
port_lcd7=(byte>>3)&1;
e=1;
delay_ms(100);
e=0;


}

void lcd_init()
{
rs=0;
rw=0;
lcd_send4bits(0x28);
lcd_send4bits(0x06);
lcd_send4bits(0x0c);
lcd_send4bits(0x01);
lcd_send4bits(0x02);


}

void lcd_cmd(unsigned char cmd)
{
rs=0;
rw=0;
e=1;
lcd_send4bits(cmd);


}

void lcd_data(unsigned char data)
{
rs=1;
rw=0;
lcd_send4bits(data);
delay_ms(1000);
}

void khoitao_adc()
{
ADPCFG=0xFFFF;
ADPCFGbits.PCFG0=0;//tao chan RB0 lam cong vao
ADCON3bits.ADCS=63;//////////////T =22Tcy
ADCON1bits.SSRC=0;// Clearing SAMP bit ends sampling and starts conversion
ADCON1bits.ASAM = 0;//no auto-lau mau
ADCHSbits.CH0SA=2;
ADCON2bits.ALTS=0;
ADCON2bits.VCFG=3;
ADCON1bits.FORM=0;
ADCHS = 0x0000; //ADCHS Register
//Set up A/D Channel Select Register to convert AN0 on Mux A
//input of CH0 and CH1 S/H amplifiers

ADCSSL = 0x0000;//Channel Scanning is disabled. All bits left to their default state
ADCON1bits.ADON=1;//start


}
void start_adc()
{
ADCON1bits.SAMP=1;
delay_ms(10);
ADCON1bits.SAMP = 0; // start Converting
while(!ADCON1bits.DONE);
{ adc_data1=ADCBUF0;
adc_data=adc_data1/2.046;





adc_tram=adc_data/100;
adc_data=adc_data-adc_tram*100;
adc_chuc=adc_data/10;
adc_data=adc_data-adc_chuc*10;
adc_donvi=adc_data;
}

}
void main()
{
TRISBbits.TRISB0=1;
TRISBbits.TRISB1=0;
TRISBbits.TRISB3=0;
TRISBbits.TRISB4=0;
TRISBbits.TRISB5=0;
TRISBbits.TRISB6=0;
TRISBbits.TRISB7=0;
TRISBbits.TRISB8=0;


lcd_init();
khoitao_adc();
start_adc();

lcd_data('N');
lcd_data('h');
lcd_data('i');
lcd_data('e');
lcd_data('t');
lcd_data(' ');
lcd_data('D');
lcd_data('o');
lcd_data(':');
lcd_data(adc_tram+'0');
lcd_data(adc_chuc+'0');
lcd_data(adc_donvi+'0');
}
Soi Dien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn