اطلاعیه

Collapse
No announcement yet.

سنسور دما ds18b20 در برنامه mikroc pic

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    سنسور دما ds18b20 در برنامه mikroc pic

    سلام . یه برنامه داخل لایبراری خود برنامه میکرو سی پیک هست در مورد سنسور 18b20
    برنامه فقط یه کاراکتر دما رو روی lcd نشون میده . من میخوام از یه متغیر دما استفاده کنم . ولی متوجه نشدم دقیقا این متغیر کجاست که بشه ازش استفاده کرد برای مقایسه دمایی استفاده کنم مثل ترموستات
    کد:
    sbit LCD_RS at RB4_bit;
    sbit LCD_EN at RB5_bit;
    sbit LCD_D4 at RB0_bit;
    sbit LCD_D5 at RB1_bit;
    sbit LCD_D6 at RB2_bit;
    sbit LCD_D7 at RB3_bit;
    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB5_bit;
    sbit LCD_D4_Direction at TRISB0_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
     
     
    int raw_temp;
     
    char *temp = "000.0 C";
     
    void main() {
     
     TRISB=0XFF;
     TRISC=0;
     ADCON0=0;
     ADCON1=0;
     Lcd_Init();
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Cmd(_LCD_CLEAR);
     
     
     while(1) {
     
     Ow_Reset(&PORTC, 1);
     Ow_Write(&PORTC, 1, 0xCC);
     Ow_Write(&PORTC, 1, 0x44);
     
     while(Ow_Read(&PORTC, 1) == 0) ;
     Ow_Reset(&PORTC, 1);
     Ow_Write(&PORTC, 1, 0xCC);
     Ow_Write(&PORTC, 1, 0xBE);
     
     raw_temp = Ow_Read(&PORTC, 1);
     raw_temp |= (Ow_Read(&PORTC, 1) << 8);
     
     if(raw_temp & 0x8000) {
     temp[0] = '-';
     raw_temp = ~raw_temp + 1;
     }
     else {
     if((raw_temp >> 4) >= 100)
     temp[0] = '1';
     else
     temp[0] = ' ';
     }
     
     
     
     
     
     
     temp[1] = ( (raw_temp >> 4) / 10 ) % 10 + 48;
     temp[2] = (raw_temp >> 4) % 10 + 48;
     
     
     
     temp[4] = ( (raw_temp & 0x0F) * 625) / 1000 + 48;
     
     
     
     temp[8] = 223;
     lcd_out(2, 4, temp);
     
     
     
     
     
     delay_ms(1000);
     }
    }
    جدیدترین ویرایش توسط yoshig353; ۲۰:۴۷ ۱۳۹۹/۰۶/۲۴.

    #2
    پاسخ : سنسور دما ds18b20 در برنامه mikroc pic

    نوشته اصلی توسط yoshig353 نمایش پست ها
    سلام . یه برنامه داخل لایبراری خود برنامه میکرو سی پیک هست در مورد سنسور 18b20
    برنامه فقط یه کاراکتر دما رو روی lcd نشون میده . من میخوام از یه متغیر دما استفاده کنم . ولی متوجه نشدم دقیقا این متغیر کجاست که بشه ازش استفاده کرد برای مقایسه دمایی استفاده کنم مثل ترموستات
    کد:
    sbit LCD_RS at RB4_bit;
    sbit LCD_EN at RB5_bit;
    sbit LCD_D4 at RB0_bit;
    sbit LCD_D5 at RB1_bit;
    sbit LCD_D6 at RB2_bit;
    sbit LCD_D7 at RB3_bit;
    sbit LCD_RS_Direction at TRISB4_bit;
    sbit LCD_EN_Direction at TRISB5_bit;
    sbit LCD_D4_Direction at TRISB0_bit;
    sbit LCD_D5_Direction at TRISB1_bit;
    sbit LCD_D6_Direction at TRISB2_bit;
    sbit LCD_D7_Direction at TRISB3_bit;
     
     
    int raw_temp;
     
    char *temp = "000.0 C";
     
    void main() {
     
     TRISB=0XFF;
     TRISC=0;
     ADCON0=0;
     ADCON1=0;
     Lcd_Init();
     Lcd_Cmd(_LCD_CURSOR_OFF);
     Lcd_Cmd(_LCD_CLEAR);
     
     
     while(1) {
     
     Ow_Reset(&PORTC, 1);
     Ow_Write(&PORTC, 1, 0xCC);
     Ow_Write(&PORTC, 1, 0x44);
     
     while(Ow_Read(&PORTC, 1) == 0) ;
     Ow_Reset(&PORTC, 1);
     Ow_Write(&PORTC, 1, 0xCC);
     Ow_Write(&PORTC, 1, 0xBE);
     
     raw_temp = Ow_Read(&PORTC, 1);
     raw_temp |= (Ow_Read(&PORTC, 1) << 8);
     
     if(raw_temp & 0x8000) {
     temp[0] = '-';
     raw_temp = ~raw_temp + 1;
     }
     else {
     if((raw_temp >> 4) >= 100)
     temp[0] = '1';
     else
     temp[0] = ' ';
     }
     
     
     
     
     
     
     temp[1] = ( (raw_temp >> 4) / 10 ) % 10 + 48;
     temp[2] = (raw_temp >> 4) % 10 + 48;
     
     
     
     temp[4] = ( (raw_temp & 0x0F) * 625) / 1000 + 48;
     
     
     
     temp[8] = 223;
     lcd_out(2, 4, temp);
     
     
     
     
     
     delay_ms(1000);
     }
    }
    من با picکار نکردم ولی متغیر temp ر اینجا همون متغیر دما تبدیل شده به کارکتر هست.که در سطر دوم ستون 4ال سی دی نمایش میده.شما میتونید کارکتر را به مقدار دسیمال برگردانید.در اینجا مقدارtempراازمتغیرraw_tempبدست اوره.که احتمالا همین متغیر بادی همون دماباشه
    جدیدترین ویرایش توسط Namvar14; ۲۲:۲۲ ۱۳۹۹/۰۶/۲۴.
    eshop-hodhod.ir

    دیدگاه


      #3
      پاسخ : سنسور دما ds18b20 در برنامه mikroc pic

      من از این متغیرraw_temp استفاده کردم هیچ داده ای نداره

      دلیل: ادغام دو پست برای جلوگیری از اسپم

      با این کار درست شد تبدیل به دسیمال کردم
      dis=temp2;
      raw[0] = (dis/ 1000)%10+ 48;
      raw[1] = (dis/ 100)%10+ 48;
      raw[3] = (dis/ 10)%10+ 48;
      raw[4] = dis%10+ 48;

      temp2=atoi(temp)
      lcd_out(1, 1,raw);
      ولی فقط میتونم عدد صحیح رو دریافت کنم . قسمت اعشار رو ندارم


      جدیدترین ویرایش توسط yoshig353; ۰۰:۰۳ ۱۳۹۹/۰۶/۲۵.

      دیدگاه

      لطفا صبر کنید...
      X