![]() |
Trích:
|
Trích:
|
anh hay chị nào cho e biết kỹ về cách làm máy đo nhiệt độ sử dụng pic 16f877a ko ạ.về code,phần lập trình,.... e mới học thầy cho bài tập lớn rồi,hic e thank mọi ng trước nhá
|
gui cho minh voi nha ban!cam on
mail:lethanhtung41@gmail.com |
cac huynh xem giup e doan code roi cho em hoi vai cau:
1. em khong thay chuong trinh xuat gia tri nhiet do minh da tinh ra khi nao tren lcd ca ngoai cai lenh xuat dong lenh luc dau, va do la len nao vay? 2. va gia tri chia "x=x/2.049" lay so 2.049 o dau ra vay may huynh? 3. va doan code nay e lay tren mang xuong xem thay no chay dua ra gia tri khong dc dung lam, co huynh nao co the toi uu no hon giup e khong. E cam on cac huynh. #include <16F877a.h> #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #device 16F877*16ADC=10 #use delay(clock=4000000) #byte portb=0x06 #byte porta=0x05 #byte portc=0x07 #byte portd=0x08 #byte porte=0x09 #use fast_io(a) #use fast_io(b) #use fast_io(c) #use fast_io(d) #use fast_io(e) #bit rs=portd.0 #bit rw=portd.1 #bit e=portd.2 #byte lcd=portb const char mht[]={'0','1','2','3','4','5','6','7','8','9','-',' '}; const char nd0[]="nhiet do: do C"; const char tn[]="dungdt08B@gmail.com"; int8 i,chuc,dv,tram; int8 y; void doc_ADC(); void hienthi(); void ghilenh(); void ghidata(); void ghilcd(); void main() { float x; set_tris_e(0); set_tris_d(0); set_tris_b(0); lcd=0x80; ghilenh(); for(i=0;i<=15;i++) { lcd=nd0[i]; ghidata(); } lcd=0xc0; ghilenh(); for(i=0;i<=19;i++) { lcd=tn[i]; ghidata(); } while(1) { doc_ADC(); x= read_adc(); x=x/2.049; y=x; hienthi(); } } void hienthi() { if(y<100) { dv=y%10; chuc=y/10; tram=11; if(chuc==0) { chuc=11; } } if(y>=100) { tram=y/100; y=y-100; dv=y%10; chuc=y/10; } lcd =0x38; ghilenh(); lcd=0x0C; ghilenh(); LCD=0x89; ghilenh(); ghilcd(); } void ghilcd() { lcd=mht[tram]; ghidata(); lcd=mht[chuc]; ghidata(); lcd=mht[dv]; ghidata(); } void ghilenh() { rs=0; rw=0; e=1; e=0; delay_ms(10); } void ghidata() { rs=1; rw=0; e=1; e=0; delay_ms(10); } void doc_ADC() { set_tris_a(0b1); setup_ADC(ADC_clock_internal); setup_ADC_ports(AN0_AN1_AN2_AN3_AN4); set_ADC_channel(0); delay_us(1000); } |
Do sử dụng cảm biến đo nhiệt độ LM35 có độ nhạy 10mV/0C và bộ ADC 10 bit ,điện áp lấy mẫu 5V.
Q= 5 / 210 = 0.00488V = 4.88mV. Ứng với mỗi sự thay đổi 4.88mV giá trị đọc được từ cảm biến nhiệt độ thì thanh ghi lưu kết quả ADC thay đổi 1 đơn vị..như vậy để tính toán ra giá trị nhiệt độ thực ta chỉ việc lấy giá trị thanh ghi lưu kết quả ADC nhân với (10 / 4.88) = 2.049. |
her,
Trích:
chúc bạn thành công ! |
cam on ban nhieu nha. vay ban co the gui cho minh qua mail: thanhtuan.vo91@gmail.com dc khong. minh da lam cai mach do roi, va co khuech dai len 3.318 lan de len dc 5v. nhung no cung khong chinh xac lam. no cu nhay quanh mot gia tri xac dinh. nen khong thich lam. khong biet ban co biet cach khac phuc hien tuong do khong?
|
giúp e sửa lỗi đoạn code trên với...code báo sai chỗ void main :(
#include <16f877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #device ADC=10 #use delay(clock=200000000) #byte portb=0x06 #byte porta=0x05 #byte portd=0x08 #bit d0=portd.0 #bit d1=portd.1 #use fast_io(a) #use fast_io(b) #use fast_io(d) int8 const LED[]={0xc0,//0 0xc0,//0 0xf9,//1 0xa4,//2 0xb0,//3 0x99,//4 0x92,//5 0x83,//6 0xf8,//7 0x80,//8 0x98,//9 } void main() { int i; int8 x,read,hangchuc,hangdonvi; setup_adc(ADC_CLOCK_INTERNAL); setup_adc_ports(AN0_AN1_VREF_VREF); set_adc_channel(0); delay_us(10); while(1) { x= read_adc(); x= (int16) ((float)read_adc() * 500/1024); read=x; hangchuc=read/10; hangdonvi=read%10; for(i=0;i<=99;i++) { output_low(d0); output_b(LED[hangchuc]); delay_ms(10); output_low(d1); output_b(LED[hangdonvi]); delay_ms(10); } } } |
ta;l;lfhfldsl
|
tại sao lại la value = value -558.5 thế mọi người . mình chưa hiểu lắm
|
chào mọi người. mình dùng pic16f877a đo nhiệt độ từ 3 lm35 kết nối máy tính.trước tiến là phần vb.mình thiết kế giao diện và thực hiện đọc nhiệt độ như thế này.
Private Sub MSComm1_OnComm() t = MSComm1.Input If t <> "-" Then text = text + t Else Text1.text = Mid(text, 1, 2) Text2.text = Mid(text, 3, 2) Text3.text = Mid(text, 5, 2) text = "" End If End Sub các phần khai báo cổng com thì đã đúng hết.nhiệt độ 3 điểm được gán lên 3 ô text. code bên pic mikroC mình viết như sau unsigned int cb1, cb2, cb3; //khai bao 3 bien cam bien unsigned int cb4; //bien tong cua 3 cam bien unsigned char chuoi[6], ketqua[6]; //khai bao chuoi unsigned char j, i; // chuong trinh con void Text_To_Usart(unsigned char *n) //Khai bao ham goi mot chuoi thong qua USART. { i = 0; //Gan gia tri ban dau cho i =0 while(n[i] != 0) //Neu phan tu thu I cua chuoi ky tu khac 0 thi goi phan tu thu I cua chuoi qua UASRT. { Usart_Write(n[i]); // Goi phan tu thu I cua chuoi qua UASRT. i++; Delay_ms(10); //Cho 10 mili giay }} void main() //Khai bao chuong trinh chinh { ADCON1 = 0xE0; // Thiet lap cac ngo vao analog va dien ap tham chieu Vref = Vdd = 5V. ADCON0 = 0xC1;//Chon va cho phep xung clock PORTA = 0; //Gan gia tri ban dau cho cac chan cua PORT A = 0 TRISA = 0xFF; // Khai bao PORT A la ngo vao. Usart_Init(9600); // khoi tao usart while (1) //Vong lap vo tan de lap lai chuong trinh lien tuc. { cb1 = Adc_read(0); // Doc ket qua chuyen doi AD tu kenh 0. cb2 = Adc_read(1); // Doc ket qua chuyen doi AD tu kenh 1. cb3 = Adc_read(2); //doc ket qua chuyen doi ad tu kenh 2 Delay_ms(10); //Cho 100= mili giay cb1 = cb1/2; //Tinh gia tri nhiet do = gia tri doc chia cho he so chuyen doi (vi du: 2). cb2 = cb2/2; //Tinh gia tri nhiet do = gia tri doc chia cho he so chuyen doi (vi du: 2). cb3 = cb3/2; //Tinh gia tri nhiet do = gia tri doc chia cho he so chuyen doi (vi du: 2). cb4=((cb1*10000) + (cb2*100) + (cb3)); //tinh gia tri cb4 longtostr(cb4,chuoi); // chuyen tu so sang chuoi //Xu ly chuoi de loai bo cac khoang trang va luu ket qua xu ly vao bien ket qua. j=0; //Gan gia tri ban dau bang 0 cho bien j (phan tu cua bien ket qua). for(i=0;i<=6;i++) //Vong lap voi bien i chay 6 lan de quet cac phan tu cua bien chuoi {if (chuoi[i] != ' ') // Neu phan tu thu i cua chuoi khong phai la khoang trang thi { ketqua[j]=chuoi[i]; //Gan phan tu thu i cua chuoi cho phan tu thu j cua ket qua. j++; //Tang gia tri cua bien j len 1 }} Usart_write('-'); // them ky tu - vao day ket qua Text_to_usart(ketqua);// gui bien ket qua Delay_ms(100); //Cho 100 mili giay sau do truyen lai } } vậy mà khi hiển thị nó lại không đúng nhiệt độ. mình mới thử trên protess. các bác nào cao thủ giúp mình với.còn 5 ngày nữa mình phải nạp đồ án ùi!!! |
Trích:
còn nếu bạn vẫn sử dụng lm35 cho dễ học thì bạn măc lm35 như datasheet. sau đó đưa vào PIC biến đổi AD để chuyển thành kết quả. lấy kết quả đó gửi lên máy tính. gửi từng số 1 ( sử dụng hàm của thư viện rs232) điều khiển bằng máy tính thì bạn phải gửi ký tự gì đó về cho PIC. Khi đó mình lập trình cho PIC nhận được ký tự đó là phải thực hiện điều khiển. còn VB chắc bạn đã biết. Chúc may mắn!hi |
mình đang làm đồ án điều khiển tốc độ đông cơ hiển thị lên lcd giao tiếp máy tính băng Vb6 và chuẩn RS232 ai giúp minh với (minh sẻ trả với giá là 300k nếu ai viết code cho mình luôn sô đt cua mình là : 01686916750 gmail: truongbay91@gmail.com). minh đang cần mà giờ rối lắm rồi ko viết đươc ai viêtd đc code thi liên hệ với minh nha thanks....
|
Múi giờ GMT. Hiện tại là 04:41 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