Cảm biến nhiệt độ và áp suất. 16f877a

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • thanhphong.91
    Nhập môn đệ tử
    • Apr 2012
    • 9

    #1

    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.
    }
    }
    Attached Files
  • thanhphong.91
    Nhập môn đệ tử
    • Apr 2012
    • 9

    #2
    chủ yều là yêu cầu :'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%. ' là chưa làm được, không biết là sai chổ nào. hi vọng được sự giúp đỡ từ diễn dàn!!!

    Comment

    • thanhphong.91
      Nhập môn đệ tử
      • Apr 2012
      • 9

      #3
      Hepl me!!!!

      Comment

      • TRUNGBAOSPKT
        Đệ tử 2 túi
        • Sep 2011
        • 32

        #4
        up luôn file proteus và code lên ae xem rồi giúp đỡ , em up hình lên khó nhìn lắm !

        Comment

        Working...