mars01 Postat Februarie 5, 2018 Partajează Postat Februarie 5, 2018 (editat) 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 Februarie 5, 2018 de mars01 Link spre comentariu
catalin004 Postat Februarie 5, 2018 Autor Partajează Postat Februarie 5, 2018 (editat) 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 Februarie 5, 2018 de catalin004 Link spre comentariu
catalin004 Postat Februarie 6, 2018 Autor Partajează Postat Februarie 6, 2018 Am cam rezolvat...insa are cam 4 grade mai putin....as dori sa citesc si serialul acum... Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum