LCD teploměr 18D20 PIC16F628A

Zdravím
Už dlouhou dobu jsem s tím nepracoval a trochu se ti vykouřilo z hlavy
je to napsané v mikro c for PIC
tak tedy zdroják vypadá takto

// LCD module connections
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;
// End LCD module connections

//  Set TEMP_RESOLUTION to the corresponding resolution of used DS18x20 sensor:
//  18S20: 9  (default setting; can be 9,10,11,or 12)
//  18B20: 12

const unsigned short TEMP_RESOLUTION = 9;

char *text = "000.0000";
unsigned temp;

void Display_Temperature(unsigned int temp2write) {
  const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
  char temp_whole;
  unsigned int temp_fraction;

  // check if temperature is negative
  if (temp2write & 0x8000) {
    text[0] = '-';
    temp2write = ~temp2write + 1;
  }

  // extract temp_whole
  temp_whole = temp2write >> RES_SHIFT;

  // convert temp_whole to characters
  if (temp_whole/100)
     text[0] = temp_whole/100  + 48;
  else
     text[0] = '0';

  text[1] = (temp_whole/10)%10 + 48;             // Extract tens digit
  text[2] =  temp_whole%10     + 48;             // Extract ones digit

  // extract temp_fraction and convert it to unsigned int
  temp_fraction  = temp2write << (4-RES_SHIFT);
  temp_fraction &= 0x000F;
  temp_fraction *= 625;

  // convert temp_fraction to characters
  text[4] =  temp_fraction/1000    + 48;         // Extract thousands digit
  text[5] = (temp_fraction/100)%10 + 48;         // Extract hundreds digit
  text[6] = (temp_fraction/10)%10  + 48;         // Extract tens digit
  text[7] =  temp_fraction%10      + 48;         // Extract ones digit

  // print temperature on LCD
  Lcd_Out(2, 5, text);
}

void main() {
 // ANSEL  = 0;                                    // Configure AN pins as digital I/O
//  ANSELH = 0;
  Lcd_Init();                                    // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                           // Clear LCD
  Lcd_Cmd(_LCD_CURSOR_OFF);                      // Turn cursor off
  Lcd_Out(1, 1, " Temperature:   ");
  // Print degree character, 'C' for Centigrades
  Lcd_Chr(2,13,223);  // different LCD displays have different char code for degree
                      // if you see greek alpha letter try typing 178 instead of 223

  Lcd_Chr(2,14,'C');

  //--- main loop
  do {
    //--- perform temperature reading
    Ow_Reset(&PORTA, 5);                         // Onewire reset signal
    Ow_Write(&PORTA, 5, 0xCC);                   // Issue command SKIP_ROM
    Ow_Write(&PORTA, 5, 0x44);                   // Issue command CONVERT_T
    Delay_us(120);

    Ow_Reset(&PORTA, 5);
    Ow_Write(&PORTA, 5, 0xCC);                   // Issue command SKIP_ROM
    Ow_Write(&PORTA, 5, 0xBE);                   // Issue command READ_SCRATCHPAD

    temp =  Ow_Read(&PORTA, 5);
    temp = (Ow_Read(&PORTA, 5) << 8) + temp;

    //--- Format and display result on Lcd
    Display_Temperature(temp);

    Delay_ms(500);
  } while (1);
}

na display se mi objeví
Temperature:
000.0000 C
přípojené čidlo mám kde může být chyba? díky

Jediné čo ma napadá, že ak používaš 12b konverziu teploty, musíš pri prevode čakať dlhšie. Takže v tomto :

Ow_Write(&PORTA, 5, 0x44); // Issue command CONVERT_T Delay_us(120);

musíš zmeniť Delay_us(120) za Delay_ms(750)

teda za predpokladu, že používaš 18B20 (v názve máš 18D20, čo nepoznám).