"Minus"-fråga om DS18s20 tempsensor.

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
benring
Inlägg: 900
Blev medlem: 18 januari 2005, 19:35:25

Inlägg av benring »

hm, jo det där med ettan har jag missat, på vilket sätt ska det adderas?

du menar om jag inverterar o får säg 34 Dec så skall jag plus:a på 1 till 35 o därefter beräkna tempen?

för du menar inte en etta binärt sett på slutet?

EDIT: om jag gör som ovan så blir det mer fel än innan ju, den ökar i temp.

Jag jämför nu med en digital termometer o den visar på -2,5 grader, vilket jag får om jag drar AV en grad på min temp.
/B
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

> du menar om jag inverterar o får säg 34 Dec så skall jag plus:a på 1 till 35 o därefter beräkna tempen?

Japp, precis så.

edit: Posta dina råa mätvärden här så ska jag se.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

I vilken miljö skriver du?
Är det C så kan du ju enkelt läsa in värdet till en signed char så är allt klart. :D

Mvh
speakman
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Temperaturen får inte rum i en signed char.
benring
Inlägg: 900
Blev medlem: 18 januari 2005, 19:35:25

Inlägg av benring »

detta är LSB innan invertering: "11111011" (251 Dec)
efter får jag "00000100" (4 Dec)

countremain=2 (Dec) (undrar om detta är rätt benämning, DEC? )
countperC = 16 (Dec) (Samma här, kanske ska va hex)
Men det är iaf siffrorna som kommer ut.


READ_SCRATCHPAD = Temp_read - 0.25 + (countperC - countremain) / countperC
Edit 2: Temp_read är då "-4" i fallet ovan.


EDIT: Miljön är VB6.

Vill tilläga att det hela funkar finfint på plus-sidan av temperaturskalan, det är jämfört med digital köptermometer. det är på minussidan jag får nån grad fel. För låg temp.(för högt minustal, hur man nu ska säga:) jag vill se 3 istället för 4 om jag säger så)
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

cykze: Har inte kollat databladet, men hittills har ni bara pratat 8-bitars värden. Och det är ju inte något problem direkt. ;)

Mvh
speakman
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

benring: Det borde ge -2.625 grader. Stämmer det med hur du räknar?

speakman: Det är 8 bitar plus 1 bit för tecknet, alltså 9 bitar.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Ah, jag ger mig! Har läst för dåligt i tråden helt enkelt. :)
benring
Inlägg: 900
Blev medlem: 18 januari 2005, 19:35:25

Inlägg av benring »

Det stämmer OM jag drar AV 1 på tempen jag får ut.

/B
benring
Inlägg: 900
Blev medlem: 18 januari 2005, 19:35:25

Inlägg av benring »

Nu hoppade den ner från -2,8 till -4... i ett nafs o på den digitala köpetermometern så visar den -3....

Den verkar funka dåligt, vet inte vart det går snett. Kan ju bero på min kod, får kolla det ordentligt.

EDIT: Det KAN bero på att jag missat o ta bort den där decimalen:)
0,5 biten asså.

/B
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

countremain = 2 (dec)
count_per_c = 16 (dec)
LSB = 11111111 (bin)
MSB = 11111011 (bin)

Invertera och addera 1 till MSB => 00000101 (bin)
Skifta ett steg åt höger för att bli av med 0.5C-biten => 00000010 (bin) = 2 (dec)

Temperaturen = (2 - 0.25) + (16 - 2)/16 = 2.625 C (minus)

Gör du så?
benring
Inlägg: 900
Blev medlem: 18 januari 2005, 19:35:25

Inlägg av benring »

"Invertera och addera 1 till MSB => 00000101 (bin)"
Nej, jag trodde jag skulle addera 1 till det jag får i Dec-tal

"Skifta ett steg åt höger för att bli av med 0.5C-biten => 00000010 (bin) = 2 (dec)"
Ja, det gör jag men eftersom jag inte adderat 1 så blir det fel.

"Temperaturen = (2 - 0.25) + (16 - 2)/16 = 2.625 C (minus)"
Räknar på annat vis enligt ovan men det blir troligt samma sak, jag går efter databladets sätt.


Det är det första jag gör fel på.

/B
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

> Nej, jag trodde jag skulle addera 1 till det jag får i Dec-tal

Binärt och decimalt är ju bara två olika sätt att skriva samma tal på. Om du adderar 1 till ett "binärt tal" eller ett "decimalt tal" är ju samma sak. Eller hur menar du?
benring
Inlägg: 900
Blev medlem: 18 januari 2005, 19:35:25

Inlägg av benring »

Jag vet inte hur jag adderar till binära tal, om jag har 00000101 då? o ska addera 1, vad skriver jag då?

Men om det funkar o konvertera till dec o sen lägga på 1 så är ju det enklare, menjag får det inte o bli rätt....
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Jag vet inte hur jag adderar till binära tal,

Skojar du ?

00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000

Varje rad = raden ovan + 1.

EDIT :

Notera att lägga till 1 till det binära talet inte har med temperaturen att göra i sig, utan det är vad man alltid måste göra vid teckenbyte på ett 2-komp binärt tal. Att det råkar vara en temperatur har ingen betydelse.

Nu råkar det ju vara så att sista biten motsvarar 0.5 grad, om jag inte minns fel, så vad du igentligen lägger till är 0.5 grad. Om jag inte har missförstått någonting... :-)
Senast redigerad av sodjan 17 november 2005, 18:46:42, redigerad totalt 1 gång.
Skriv svar