|
Tài trợ cho PIC Vietnam |
Analog - Bộ nhớ - Bảo mật - Cảm biến nhiệt độ Thảo luận việc sử dụng và thay thế các sản phẩm Analog, Memory, KEELOG và cảm biến nhiệt độ của Microchip cho các thiết kế |
|
Ðiều Chỉnh | Xếp Bài |
10-04-2012, 09:15 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Apr 2012
Bài gửi: 9
: |
Cảm biến nhiệt độ và áp suất. 16f877a
Phần này là sode của em đang làm, phần em đang gặp rắc rối là làm sao cho:
Nếu áp suất đo được nhỏ hơn 50 Pascal thì động cơ máy nén chạy với vận tốc 100%, nếu 50<P<70 Pascal thì động cơ máy nén chạy với vận tốc 70%, nếu 70<P<90 Pascal thì động cơ máy nén chạy với vận tốc 50%. Nếu P>90 Pascal thì động cơ máy nén chạy với vận tốc 30%. Dưới đây là yêu cầu đề bài của em và code mong các pro chữa dùm em. #define chay PORTD.0 //Khai bao chan RB0 la ngo dieu khien quay thuan. #define dung PORTD.1 //Khai bao chan RB1 la ngo dieu khien quay nghich. //sbit chay at RD0_bit; //sbit dung at RD1_bit; void main() //Khai bao chuong trinh chinh. { unsigned long nhietdo; //Khai bao bien nhiet do chua gia tri nhiet do doc duoc. unsigned long apsuat; unsigned char chuoi[12]; //Khai bao bien chuoi dang mang 1 chieu co 12 phan tu. Moi phan tu chinh la mot ky unsigned char chuoi1[12]; unsigned char i,j,ketqua[5]; //Khai bao bien i, j de chay vong lap xu ly chuoi. Bien ketqua la mang 1 chieu co 5 unsigned char k,m,ketqua1[5]; TRISB = 0; trisc=0; portc=0; trisd=0; portd=0; Lcd_Init(&PORTB); // LCD duoc noi voi PORTB theo cac chan mac dinh la ADCON1 = 0x80; // Thiet lap cac ngo vao analog va dien ap tham chieu Vref = Vdd = 5V. ADCON0 = 0xC1;//Chon va cho phep xung clock TRISA = 0xff; PORTA=0; //Gan gia tri ban dau cho cac chan cua PORT A = 0 //Hien thi loi gioi thieu Lcd_Cmd(LCD_CLEAR); //Xoa man hinh LCD Lcd_Cmd(LCD_CURSOR_OFF); //Tat hien thi con tro Lcd_Out(1,1,"nhietdo,apsuat"); //Hien thi dong chu "Chuong trinh do nhiet do" ra LCD tai vi tri 1x1. Delay_ms(1000); //Cho 2000 mili giay Lcd_Cmd(LCD_CLEAR); //Xoa man hinh LCD while(1) //Vong lap vo tan de lap lai chuong trinh { //Doc nhiet do nhietdo=Adc_read(0); // Doc ket qua chuyen doi AD tu kenh 0. Delay_ms(100); //Cho 200 mili giay nhietdo=nhietdo/2; //Tinh gia tri nhiet do = gia tri doc chia cho he so chuyen doi (vi du: 2). LongToStr(nhietdo,chuoi); //Chuyen gia tri cua bien nhiet do sang dang chuoi va luu trong bien 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<=11;i++) //Vong lap voi bien i chay 12 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 } } //doc ap suat apsuat=Adc_read(1); // Doc ket qua chuyen doi AD tu kenh 0. Delay_ms(100); //Cho 200 mili giay apsuat=apsuat/2; //Tinh gia tri nhiet do = gia tri doc chia cho he so chuyen doi (vi du: 2). LongToStr(apsuat,chuoi1); //Chuyen gia tri cua bien nhiet do sang dang chuoi va luu trong bien chuoi. //Xu ly chuoi de loai bo cac khoang trang va luu ket qua xu ly vao bien ket qua. m=0; //Gan gia tri ban dau bang 0 cho bien j (phan tu cua bien ket qua). for(k=0;k<=11;k++) //Vong lap voi bien i chay 12 lan de quet cac phan tu cua bien chuoi { if(chuoi[k]!=' ') // Neu phan tu thu i cua chuoi khong phai la khoang trang thi { ketqua1[m]=chuoi1[k]; //Gan phan tu thu i cua chuoi cho phan tu thu j cua ket qua. m++; //Tang gia tri cua bien j len 1 } } if(ketqua<30 ) { portc=0b00000001; } if(ketqua>50) { portc=0b00000001; } if(Adc_read(1)<512) { unsigned char duty_cycle; pwm_init(5000); // khoi tao modul pwm voi tan so 5Kz pwm_start(); // khoi dong ham pwm for(duty_cycle=253; duty_cycle<255; duty_cycle++) /* bien duty_cycle tang tu 0 den 51 de tang toc do tu 0 den 20 vong/phut*/ { pwm_change_duty(duty_cycle); // DIEU RONG XUNG VOI DUTY_CYCLE LA BIEN //if(dung==1)goto restart; //NHAN NUT DUNG THI NHAY TOI NHAN RESTART delay_ms(1); // TAO THOI GIAN TRE 0.19S sau } } else if(512<Adc_read(1)<717) { unsigned char duty_cycle; pwm_init(5000); // khoi tao modul pwm voi tan so 5Kz pwm_start(); // khoi dong ham pwm for(duty_cycle=177; duty_cycle<178; duty_cycle++) /* bien duty_cycle tang tu 0 den 51 de tang toc do tu 0 den 20 vong/phut*/ { pwm_change_duty(duty_cycle); // DIEU RONG XUNG VOI DUTY_CYCLE LA BIEN //if(dung==1)goto restart; //NHAN NUT DUNG THI NHAY TOI NHAN RESTART delay_ms(1); // TAO THOI GIAN TRE 0.19S sau } } else if(717<Adc_read(1)<922) { unsigned char duty_cycle; pwm_init(5000); // khoi tao modul pwm voi tan so 5Kz pwm_start(); // khoi dong ham pwm for(duty_cycle=126; duty_cycle<127; duty_cycle++) /* bien duty_cycle tang tu 0 den 51 de tang toc do tu 0 den 20 vong/phut*/ { pwm_change_duty(duty_cycle); // DIEU RONG XUNG VOI DUTY_CYCLE LA BIEN //if(dung==1)goto restart; //NHAN NUT DUNG THI NHAY TOI NHAN RESTART delay_ms(1); // TAO THOI GIAN TRE 0.19S sau } } else if(Adc_read(1)>922) { unsigned char duty_cycle; pwm_init(5000); // khoi tao modul pwm voi tan so 5Kz pwm_start(); // khoi dong ham pwm for(duty_cycle=76; duty_cycle<77; duty_cycle++) /* bien duty_cycle tang tu 0 den 51 de tang toc do tu 0 den 20 vong/phut*/ { //pwm_change_duty(duty_cycle); // DIEU RONG XUNG VOI DUTY_CYCLE LA BIEN //if(dung==1)goto restart; //NHAN NUT DUNG THI NHAY TOI NHAN RESTART delay_ms(1); // TAO THOI GIAN TRE 0.19S sau } } //Hien thi ket qua Lcd_Cmd(LCD_CLEAR); //Xoa man hinh LCD Lcd_Cmd(LCD_CURSOR_OFF); //Tat hien thi con tro Lcd_Out(1,1,"nhietdo:"); //Hien thi dong chu "Nhiet do (0C):" ra LCD tai vi tri 1x1. Lcd_Out(1,9,ketqua); //Hien thi gia tri nhiet do dang chuoi luu trong bien ketqua ra LCD tai dong thu 2. //Lcd_out(1,9,"0C"); //Delay_us(100); //Cho 500 mili giay cho lan doc gia tri tiep theo. //HIEN THI AP SUAT //Lcd_Cmd(LCD_CLEAR); //Xoa man hinh LCD //Lcd_Cmd(LCD_CURSOR_OFF); //Tat hien thi con tro Lcd_Out(2,1,"apsuat:"); //Hien thi dong chu "Nhiet do (0C):" ra LCD tai vi tri 1x1. //Lcd_Cmd(LCD_SECOND_ROW); //Chuyen con tro xuong dong thu 2. Lcd_Out(2,8,ketqua1); //Hien thi gia tri nhiet do dang chuoi luu trong bien ketqua ra LCD tai dong thu 2. //Delay_us(100); //Cho 500 mili giay cho lan doc gia tri tiep theo. } } |
|
|