![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#11 |
Đệ tử 1 túi
Tham gia ngày: Sep 2011
Bài gửi: 12
: |
mọi người giúp phần adc
e đang học con 18f4620,có làm mạch đo nhiệt độ dùng adc trong của pic hiển thị ra led 7 thanh hoặc lcd.Mọi người xem hộ xem lỗi ở đâu mà nó k hiển thị đc.E nghĩ dữ liệu k truyền đc từ adc ra nhưng k hiểu vì sao.E lập trình bằng C18
phần code hiển thị ra led 7 thanh: Code:
#include "p18f4620.h" #include "delays.h" #include "adc.h" #pragma config OSC=HS, WDT=OFF const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int a,b,n,doC,dvi,chuc,tram; void convert(int a) { tram=a/100; a=a%100; chuc=a/10; dvi=a%10; } void hienthi() // quet led { for(n=0;n<10;n++) { PORTB=dig[dvi]; PORTD=0x01; //bat led 1 Delay100TCYx(20); // tre 100us PORTB=dig[chuc]; PORTD=0x02; // bat led 2 Delay100TCYx(20); PORTB=dig[tram]; PORTD=0x04; // bat led 3 Delay100TCYx(20); } } void main(void) { TRISB=0; // chon cong B la cong ra TRISD=0; // chon cong D la cong ra TRISAbits.TRISA0=1; // chon cong A la cong vao ADCON0=0x03; //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh ADCON1=0x0E; //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref- ADCON2bits.ACQT2=1; // ADCON2bits.ACQT1=0; // ADCON2bits.ACQT0=0; //3 bits lua chon thoi gian thu thap du lieu TAD ADCON2bits.ADCS2=1; // ADCON2bits.ADCS1=0; // ADCON2bits.ADCS0=1; //3 bits lua chon tan so chuyen doi Delay10TCY(); b = ReadADC(); doC = (b-558.558)/2.048; //tùy ADC 8bit hay 10 bit tính toán giá tri a = doC; convert((int)a); Delay10TCY(); while(1) { b = ReadADC(); doC = (b-558.558)/2.048; convert((int)a); hienthi(); } } và phần ra LCD Code:
#include "p18f4620.h" #include "delays.h" #include "adc.h" #pragma config OSC=HS, WDT=OFF char adc; long s; float doC; unsigned char li,lj; #define rs LATDbits.LATD0 #define rw LATDbits.LATD1 #define en LATDbits.LATD2 void delay (unsigned char time ) // ham co tac dung delay thoi gian lon { for ( li=0 ; li<80; li++ ) for ( lj=0 ; lj<time; lj++) {} } void lenh_LCD (unsigned char s) // ham dua 1 lenh ra ngoai LCD { LATC=s; rs=0; // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh rw=0; en=1; delay(1); en=0; delay(1); } void data_LCD (unsigned char s) // ham dua 1 lenh ra ngoai LCD { LATC=s; TRISD=0xF8 ; // cho 3 bit thap nhat duoc lam cong ra rs=1; // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh rw=0; en=1; delay(1); en=0; } void main(void) { int kq; INTCON=0x00; TRISAbits.TRISA0=1; //cong A0 lam dau vao tu cam bien TRISC=0x00; //cong C lam cong ra du lieu TRISD=0xF8; //3 bit thap nhat lam cong ra dieu khien lenh_LCD(0x38); // dua ra LCD gia tri hang cot la 5*7 lenh_LCD(0x0C); // hien con tro // lenh_LCD(0x01); // xoa man hinh LCD ADCON0=0x00; //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh ADCON1=0x0E; //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref- ADCON2bits.ACQT2=0; // ADCON2bits.ACQT1=0; // ADCON2bits.ACQT0=1; //3 bits lua chon thoi gian thu thap du lieu TAD ADCON2bits.ADCS2=1; // ADCON2bits.ADCS1=0; // ADCON2bits.ADCS0=0; //3 bits lua chon tan so chuyen doi Delay10TCY(); ADCON0bits.ADON=1; while(1) { ADCON0bits.GO=1; Delay10TCYx(2); ADCON0bits.GO=0; adc = ReadADC(); doC=(adc-558.558)/2.048; // ADC 10 bit tính toán giá tri lenh_LCD(0x01); delay(100); kq=(int)doC; data_LCD((int)doC); data_LCD('.'); kq=(doC-kq)*100; data_LCD((unsigned char)kq); data_LCD('d'); data_LCD('o'); data_LCD('C'); delay(100); } } mạch ở file kèm theo thay đổi nội dung bởi: eethn, 04-10-2011 lúc 09:51 PM. |
![]() |
![]() |
|
|