Sari la conținut
ELFORUM - Forumul electronistilor

Termostat - PIC16F877


Postări Recomandate

In link-ul postat de mine mai sus, reconstituirea se face asa:

tempL = read();			                                //read low temp value
tempH = read();			                                //read high temp value
i = ((unsigned int)tempH << 8 ) + (unsigned int)tempL;		//put both value in one variable
i = (float)i * 6.25 ;		                                //calculation from the table provided 

Probabi lca tipul nu avea nevoie de temperatura in grade celsius asa ca a inmultit cu 6.25 in loc de cat ar fi fost necesar pentru rezolutia de 12bit (0.0625).

 

Din datasheet, pagina 5 din 27:

 

The resolution of the DS18B20 is configurable (9, 10, 11, or 12 bits), with 12-bit readings the factory default state. This equates to a temperature resolution of 0.5°C, 0.25°C, 0.125°C, or 0.0625°C

 

Functie de ce rezolutie folosesti, inmultesti cu factorul corespondent, ca mai sus.

 

LE: plus ca ai o variabila tem2write care probabil a ramas asa dintr-un cod care l-ai copiat. In locul acesteia probabil ca trebuia sa pui variabila temp si sa ai definit undeva RES_SHIFT

Editat de mars01
Link spre comentariu

https://download.mikroe.com/documents/compilers/mikroc/pic/help/onewire_library.htm

 

De aici am copiat, insa nu vreau sa faca afisarea aceea ca mi se pare urata....am bagat afisarea aceea de la voi cu pointer....

 

Eu am facut cam asa:

//  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[5];
unsigned temp;
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
int temp2write;
char temp_whole;
int val_temp;
   
       //functie buffer pentru afisarea temperaturii citite
char strTemp[] = "00.0";
void tempToStr(float, char*);
//buffer function for show float temperature
void tempToStr(float temp, char *buffer) {
  val_temp = (int)temp;
  buffer[3] = val_temp % 10+48;
  buffer[1] = val_temp/10 % 10+48;
  buffer[0] = val_temp/100 % 10+48;
}


void main() {
  ANSEL  = 0;                                    // Configure AN pins as digital I/O
  ANSELH = 0;
  C1ON_bit = 0;                                  // Disable comparators
  C2ON_bit = 0;

  Lcd_Init();                                    // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);                           // Clear LCD
  Lcd_Cmd(_LCD_CURSOR_OFF);                      // Turn cursor off
  Lcd_Out(1, 1, " Temperature:   ");


  //--- Main loop
  do {
    //--- Perform temperature reading
    Ow_Reset(&PORTE, 2);                         // Onewire reset signal
    Ow_Write(&PORTE, 2, 0xCC);                   // Issue command SKIP_ROM
    Ow_Write(&PORTE, 2, 0x44);                   // Issue command CONVERT_T
    Delay_us(120);

    Ow_Reset(&PORTE, 2);
    Ow_Write(&PORTE, 2, 0xCC);                   // Issue command SKIP_ROM
    Ow_Write(&PORTE, 2, 0xBE);                   // Issue command READ_SCRATCHPAD

    temp =  Ow_Read(&PORTE, 2);
    temp = (Ow_Read(&PORTE, 2) << 8) + temp;
    temp = temp >> RES_SHIFT ;
    
    TempToStr(Temp, &strTemp);
    LCD_Out(2,10, strTemp);
    Lcd_Chr_Cp(223);
    Lcd_Chr_Cp('C');


    Delay_ms(500);
  } while (1);
}
Editat de catalin004
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări