Sida 1 av 3

"Minus"-fråga om DS18s20 tempsensor.

Postat: 16 november 2005, 08:06:40
av benring
Hej, eftersom det nu börjar bli minus ute så kom funderingen på att beräkna minus ur DS18s20-sensorn.

Nu ligger ju plus/minus i första byten, tempen i andra byten.

"0000 0000" "0011 0010" = + 25 grader (enligt tabell 2 i databladet)

"1111 1111" "1100 1110" = - 25 grader (enligt tabell 2 i databladet)


Min tanke är om det går att ta byte två "0011 0010" (25) och sedan kolla om byte ett är 1 eller 0? Om den är 1 så är det -25, om 0 så är det +25 ?

Edit: Det sista jag skrev blir ju fel... den kommer ju ge mig andra siffror när den sjunker...



Är det nån som räknat med minus med denna?
/B

Postat: 16 november 2005, 08:10:16
av speakman
Som en snabb gissning utan grund skulle jag gissa på att den representerar temperaturer i "signerat" format:
http://en.wikipedia.org/wiki/Signed_num ... sentations

Mvh
speakman

Postat: 16 november 2005, 09:25:21
av benring
Hej, ja det ser rätt ut:

As an example, the ones' complement form of 00101011 (43) becomes 11010100 (−43).

"0011 0010" = 50 decimalt vilket blir +25)
"1100 1110" = 206 decimalt men skall bli -25
(inverterat är "1100 1110" = 49 och det är ju 24,5 men denna sensor är ju inte heller helt korrekt enligt databladet.

Så det jag inte vet är hur jag ska räkna, om jag kollar att det ÄR minus till o börja med, sen inverterar talet och kollar vilket plustal det blir, sen sätta det talet till minus.

Det borde ju funka.

/B

Postat: 16 november 2005, 12:52:16
av cykze
Ja, MSB anger tecknet. Om MSB är ettor (dvs. tempen<0) så kör du tvåkomplement på LSB. Tvåkomplement betyder att du inverterar varje bit i LSB och därefter adderar 1 till resultatet.

Postat: 16 november 2005, 13:42:11
av benring
ok, ja då blir det ju korrekt:)

va simpelt det blev, tack ska ni ha:)

/B

Postat: 16 november 2005, 22:01:36
av benring
Det var inte så simpelt...

Jag hängde nyss ut en sensor, den stegade ner mot minusgraderna och när det så blev minus slutade den funka (pga min ursprungliga kod som endast hanterar plus)

Jag implementerade ovan men det ger mig helt felande siffror.

LSB visar binärt, direkt från scratchpad: "01111110", detta skall då inverteras så det blir "10000001" men det blir helt fel.
Det blir 129Dec

Dock visar MSB "11111111"b när den skall läsa denna sensor, "0" om den skall läsa en annan som är inne.

varför får jag detta värde?

Postat: 16 november 2005, 22:25:35
av sodjan
> direkt från scratchpad: "01111110"

Det känns som om det har smugit sig in en nolla för mycket i bit 7.
"11111110" hade ju varit en ganska rimligt värde.

Kan du läsa kontinuerligt och logga de binära värdena (t.ex till en fil)
medans givaren passerar över nollpunkten. Gärna i båda "riktningarna".
Då borde man få en bättre bild av vad som händer...

Postat: 16 november 2005, 22:27:22
av björn
FEL AV MIG, BORTTAGET

Postat: 16 november 2005, 22:28:20
av benring
EDIT: till sodjan:)
mmm, det va just så som du beskrev det :oops:

min kod att hantera plus-talen var alltid så låga att jag la till en nolla i början för att få 8 bitar.

Minustalet är 8 bitar redan så det blev en nolla fel, det skulle givetvis va så som du skrev det *harkel* :)

2,4 minus har jag här:)

/B

Postat: 16 november 2005, 22:41:50
av sodjan
OK, en "nolla" för mycket alltså... :-)

> 2,4 minus har jag här

Hm, jag måste gå ut från kontoret, genom gästrummet och tvättstugan till köket, genom hallen och in till vardagsrummet för att kolla... :-(
Var det DS18S20 dom hette dom där ? :-)

Du kör fortfarande via en DS2480B, eller hur ?
Hur tycker du att det fungerar ?

Postat: 16 november 2005, 22:49:43
av benring
Ja, ibland undrar jag vart nollan är :roll:

Ja, det va en bit o traska för det:)
DS18s20 va det, vi kanske kan sammköpa, jag ska ha fler ganska snart:)

Ja, jag kör via DS2480B och jag tycker den funkar kalasbra:)

/B

Postat: 17 november 2005, 08:06:34
av benring
Godmorgon i kylan:)

Jag undrar o "min" kyla verkligen kan stämma... -9,8c har jag i Bålsta (lite norr om sthlm för er som inte vet*s*)

Det är -4c i södertälje, -3c i älvsjö....

Men tar jag in sensorn så blir det korrekt inne, jämfört med en digital köptermometer. (Jo jag vet, kan ju kolla me denna men hade inte möjlighet nu på morgonen.

http://tempsens.dyndns.org:8080/?page=utedata

/B

Postat: 17 november 2005, 08:39:50
av sodjan
Varför skulle det inte stämma ?
Det är väll bara att sticka ut nosen utanför dörren/fönstret och känna efter... :-)

Det har ju varit en stilla natt/morgon, och min erfaranhet är att temperaturen ofta kan göra en "dipp" just kring gryningen/soluppgången. Jag vet inte vad det beror på, men det kan sjunka flera grader ganska snabbt just när det ljusnar. Vi har ibland 3-4 grader lägre morgon temp än inne i Söderköping ca 1 mil härifrån...

Postat: 17 november 2005, 08:54:55
av benring
Hehe, jo allt under nollan är ju svinkallt (sa han från fjollträsk :lol: )

Men ok, det kanske stämmer, ska kontrollera den senare:)

/B

Postat: 17 november 2005, 13:05:29
av cykze
Du glömmer inte bort att addera 1 efter att du har inverterat väl?

Om du är osäker på om temperaturen stämmer kan du posta dina avläsningsvärden på Temperaturbytes:en (LSB och MSB) och COUNT_REMAIN här så kan vi kontrollera att det har blivit rätt.