Sida 2 av 3
Postat: 17 november 2005, 13:09:39
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
Postat: 17 november 2005, 13:35:06
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.
Postat: 17 november 2005, 13:51:58
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.
Mvh
speakman
Postat: 17 november 2005, 13:57:09
av cykze
Temperaturen får inte rum i en signed char.
Postat: 17 november 2005, 13:58:58
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å)
Postat: 17 november 2005, 14:22:46
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
Postat: 17 november 2005, 15:00:17
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.
Postat: 17 november 2005, 15:16:03
av speakman
Ah, jag ger mig! Har läst för dåligt i tråden helt enkelt.

Postat: 17 november 2005, 15:39:55
av benring
Det stämmer OM jag drar AV 1 på tempen jag får ut.
/B
Postat: 17 november 2005, 17:22:13
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
Postat: 17 november 2005, 17:36:35
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å?
Postat: 17 november 2005, 17:43:32
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
Postat: 17 november 2005, 17:51:49
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?
Postat: 17 november 2005, 18:06:22
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....
Postat: 17 november 2005, 18:11:28
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...
