Atmega8 + DS18B20 chyba merania.

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

Mahel
Pokročilý člen
Pokročilý člen
Príspevky: 770
Dátum registrácie: 13 Okt 2007, 00:00
Bydlisko: Levice
Vek: 38

Atmega8 + DS18B20 chyba merania.

Príspevok od používateľa Mahel » 05 Jan 2016, 09:50

Nazdar.
Prosím o radu. Skúšam prácu s ds18b20 ale mám problém zo zobrazením záporných (-) hodnotách. Meranie teploty do 0.00°C je to OK ale hneď potom skočí na -127°C.

Kód používam z tejto stránky SVET ELEKTRO


0

kako
Stály člen
Stály člen
Príspevky: 307
Dátum registrácie: 07 Mar 2014, 06:38
Bydlisko: Trnava

Re: Atmega8 + DS18B20 chyba merania.

Príspevok od používateľa kako » 05 Jan 2016, 10:18

pohraj sa s tymto

Kód: Vybrať všetko

http://radioparty.ru/prog-avr/program-c/378-lesson2-ds18b20
po mensej uprave ti to pojde ja to pouzivam v bezdrotovom teplomery

Kód: Vybrať všetko

display1 = tempint1; // znamienko
display2 = tempint2; // 1. cifra 
display3 = tempint3; // 2. s bodkou
display4 = temppoint1;// 3. cifra

Kód: Vybrať všetko


char buff[16];
sprintf(buff,"%u%u%u.%u",tempint1,tempint2,tempint3,temppoint1);
je to tam urobene ze ked mas teplotu 9,5°C zhasne druhy segmet. displej aby nezobrazilo 09,5°C a prvy segmet je bud vypnuty to je +
alebo zobrazi -

takto nejak:

Kód: Vybrať všetko

if(temp_flag == 0) 
tempint1 = '-';
if(tempint1 < 1)
tempint1 = ' ';
if(tempint1 == 12 && tempint2 < 1) 
tempint2 = ' ';
if(tempint2 < 1 && temp_flag == 0) 
tempint2 = ' ';
0
ho

speed
Stály člen
Stály člen
Príspevky: 294
Dátum registrácie: 04 Dec 2007, 00:00
Bydlisko: Žilina

Re: Atmega8 + DS18B20 chyba merania.

Príspevok od používateľa speed » 05 Jan 2016, 11:30

Nieje číslo, ktoré vypisuješ ako unsigned? Skús sem dať tvoj kód.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Atmega8 + DS18B20 chyba merania.

Príspevok od používateľa peterple » 05 Jan 2016, 11:41

Nie je to chyba merania ale chyba programátora, ktorý nevie ako sú kódované záporné čísla. Tu je ten kód čo to má na svedomí.

Kód: Vybrať všetko

    unsigned char low_byte;   
    unsigned char high_byte;   
  
    unsigned char sign;   
    unsigned int decimal;   
    unsigned int integer; 
    if (high_byte & (0xF0)) sign = 1;   
    else sign = 0;   
  
    decimal = (low_byte & 0x0F)*625;   
  
    high_byte &= 0x07;   
    high_byte <<= 4;   
    low_byte >>= 4;   
    low_byte &= 0x0F;   
    integer = low_byte | high_byte;   
  
    if(sign == 0) sprintf(buff,"%u.%04u",integer,decimal);   
    else if(sign == 1) sprintf(buff,"-%u.%04u",integer,decimal); //tu vypisuje zápornú hodnotu ale tá je v druhom doplnku takže miesto 1 je 127.
  
Riešení je viacero:
1 Urobiť prevod z druhého doplnku v prípade že je to záporné. To ale nie je moc Cckové, tí sa na také low level funkcie nehrajú ak nemusia.
2 použiť signed premenné ako to je na tej ruskej stránke.

V každom prípade ale treba rozumieť tomu ako sú kódované celé čísla so znamienkom aj bez znamienka.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

kako
Stály člen
Stály člen
Príspevky: 307
Dátum registrácie: 07 Mar 2014, 06:38
Bydlisko: Trnava

Re: Atmega8 + DS18B20 chyba merania.

Príspevok od používateľa kako » 05 Jan 2016, 16:34

v prilohe som prerobil na rychlo toho rusáka na lcd
v projekte si zmen z mega88 na megu8, lcd a DSko
v proteuse to funguje nechcelo sa mi behat na balkon stale
Prílohy
thermometer.rar
(97.14 KiB) 55 stiahnutí
0
ho

Mahel
Pokročilý člen
Pokročilý člen
Príspevky: 770
Dátum registrácie: 13 Okt 2007, 00:00
Bydlisko: Levice
Vek: 38

Re: Atmega8 + DS18B20 chyba merania.

Príspevok od používateľa Mahel » 05 Jan 2016, 22:53

KAKO toto funguje dakujem. :agree:
0

Napísať odpoveď