Har aldrig jobbat mot denna men intressant. Japp du har sett problemet vid 0 Gr C Spontant utan ha kollat noga så blir det en OR eller XOR lösning. Tycker du skall lägga upp frågan på NÄE så här blir det <b>Att avkoda + grader är lätt, Nepp Per Kör du mot RS232 Com-port ? Oki jag är ju PC Vb6 freek så jag skall göra en simulation där jag läser COM2 Oj då SÅP Nä jag skämtar inte. Så noga har jag inte kollat. DS18S20 Har enligt ovan en precision på 0,5 Grader Celsious. Mina funderingar kring linjärt var/är Hmm, du SÅP Nähä <b>Du har nog ingen aning om 1-wire kommunication ? eller ?? </b> Full respekt för den lösningen. Vill du se hela applikationen, besök sidan med onlinevärden Ctrl-C Ctrl-V Okay Frågorna är inte riktigt relevanta. Citat: <b>Men okay, noggranhet inom 1-3 grader klarar den nog beroende på hur man applicerar *LOL* Och jag för SMT160-30 Can´t win them all. Tänk vad ett kommatecken gör skillnad enligt ovan.DS18S20 Tempgivare
Så det biter Vi tag i.
Om du har någon kod i VB6 som du börjat på så visa gärna den.
Svaret ligger ju i det här. Läser in via Com 1 - 2 - eller vilken du nu väljer.
<b>TEMPERATURE (°C)
DIGITAL OUTPUT
(BINARY)
DIGITAL OUTPUT
(HEX)
+85.0*
0000 0000 1010 1010
00AAh
+25.0
0000 0000 0011 0010
0032h
+0.5
0000 0000 0000 0001
0001h
0
0000 0000 0000 0000
0000h
-0.5
1111 1111 1111 1111
FFFFh
-25.0
1111 1111 1100 1110
FFCEh
-55.0
1111 1111 1001 0010
FF92h</b>
Det här gillar jag att bita i.
Gör reklam för mitt gamla projekt
Programarkivet:ElectroMateSv: DS18S20 Tempgivare
Att avkoda + grader är lätt,
bara polla av värdet via 1-wire protokollet, ta värdet och dela med 2 ((x*10)/2)= Temp i C.
Problemet uppstår vid - grader,
Vet inte om man kan göra så här OM x>170 then ((255 - x) / 2) = Temp - C
Befintlig programkod = bara plusgrader .. (Inte direkt VB6, men nått liknande )
OWOUT 12,1,[$cc,$44] 'Calculate temperature all DS18S20
wTmp = 0
OWOUT 12,1,[$55,16,bTmp,bTmp1,181,1,8,0,bRet,$BE] ' bTmp,bTmp1 = Aktuell givares adress
OWIN 12,0,[wTmp.LOWBYTE,wTmp.HIGHBYTE] ' Erhåller svar i word-format
wTmp = (wTmp*10) / 2 ' Beräknar temperatur med 1 decimalvisaning 102 = 10,2 GrC
RETURNSv:DS18S20 Tempgivare
Låser lite på att det är 9 bitar så 255 kanske inte är rätt.
Svamlar/spånar utan direkt kontroll.
Sätter på mig tänkarmössan och analyserar.Sv: DS18S20 Tempgivare
http://www.elektronikforumet.com/forum/
Dom har löst detta problem många gångerSv:DS18S20 Tempgivare
OWOUT 12,1,[$cc,$44] 'Calculate temperature all DS18S20
wTmp = 0
OWOUT 12,1,[$55,16,bTmp,bTmp1,181,1,8,0,bRet,$BE] ' bTmp,bTmp1 = Aktuell givares adress
OWIN 12,0,[wTmp.LOWBYTE,wTmp.HIGHBYTE] ' Erhåller svar i word-format
IF wTmp.HIGHBYTE = 0 Then subPlus
SubMinus:
wTmp = ((256 - wTmp.LOWBYTE)*10) / 2 ' Beräknar MINUStemperatur med 1 decimal 102 = -10,2 GrC
RETURN
SubPlus:
wTmp = (wTmp.LOWBYTE*10) / 2 ' Beräknar temperatur med 1 decimal 102 = 10,2 GrC
RETURNSv:DS18S20 Tempgivare
bara polla av värdet via 1-wire protokollet, ta värdet och dela med 2 ((x*10)/2)= Temp i C.
Problemet uppstår vid - grader,
Vet inte om man kan göra så här OM x>170 then ((255 - x) / 2) = Temp - C </b>
Det är lika lätt att avkoda minusgrader som plusgrader - om du har tillgång till teckensatta 16-bitars tal.Sv: DS18S20 Tempgivare
Inget avancerat programmeringsspråk.
Ett 30-tal kommando
Bara formaten Word,Byte,Nib,BitSv:DS18S20 Tempgivare
Har du löst - kodningen ,tycker det verkar så.Sv:DS18S20 Tempgivare
för input via DS18S20. Har aldrig jobbat mot Pic.
Hur som helst så skall jag fixa om det kommer - 22 C
Är det linjärt ?Sv: DS18S20 Tempgivare
Skall du ge dej på att bygga en dll för 1-wire protokollet också
eller köper du en färdig dll för det ?
Är det linjärt frågar du ??
Kan det bli mer linjärt än detta ?????
DIGITAL OUTPUT
(HEX)
+85.0*
0000 0000 1010 1010
00AAh
+25.0
0000 0000 0011 0010
0032h
+0.5
0000 0000 0000 0001
0001h
0
0000 0000 0000 0000
0000h
-0.5
1111 1111 1111 1111
FFFFh
-25.0
1111 1111 1100 1110
FFCEh
-55.0
1111 1111 1001 0010
Jag hoppas du skämtarSv:DS18S20 Tempgivare
Tycker frågan är berättigad.
Lämnar DS18S20 temperaturer linjärt hela området +85 -55.
Jag har bara malt problemet i skallen innan jag somnar.
Var inne på att det är bara multiplicera med -1 om If-satsen säger minus-suben
Nu skall jag skriva lite VB6 kod och se vad som händer.
Jag skiter i dina Pic:ar skall ha en snygg presentation på min PC.Sv: DS18S20 Tempgivare
Mätvärdet precenteras i ett 16-bitars register som ett 9 bitars ord
Den nionde biten signalerar negativt mätvärde.
Genom att avläsa registren Count remain och register Count per kan man via en formel
beräkna högre noggranhet på mätvärdet upp till 0.1 Grad
DS18S20 är en komplett mätenhet microprocessorbaserad som
levererar mätvärden i området -55 Gr C till + 85 Gr C.
Enkelt erhålls mätvärden med en mätnoggranhet på 0.5 Grad och
då i digitalform via 9 bitars register.
Via beräkning och formel kan upplösning 0,1 grad erhållas.
Eftersom kommunikation av mätvärde till applikation sker digitalt
och upplösningen garanteras av tillverkare, förstår jag inte frågan och problemet med
"om DS18S20 är linjär, SÅP"
Förr, när man använde PTC eller NTC motstånd, Då snackade man om linjär eller logaritmisk
Ett annat vanligt mätorgan är PT-100 givaren som är logaritmisk
Dagens mätgivare som ger en digital utsignal är enklare att använda och blir mer exakt.
Så uppfattar jag din fråga om DS18S20 är LINJÄR som uppenbart konstig, men
eftersom vi skall vara ödmjuka så lägger jag till -jag kan ju ha fel-
Sedan svarade du aldrig på hur löser du 1-wire protokollet i VB6, det skulle jag vilja vetaSv:DS18S20 Tempgivare
85+ = 00AA = 170
25+ = 0032 = 50 Ok det är linjärt.
Oki glöm det.
Ang Vb6 kod så blir det inte så konstigt.
Använder MS Comm Control mot Com2 och läser in en buffer från ett snöre.
Enl denna princip
<code>
Buffer$ = Buffer$ & MSComm1.Input
Loop Until InStr(Buffer$, "OK" & vbCRLF)
' Read the "OK" response data in the serial port.
' Close the serial port.
MSComm1.PortOpen = False
</code>Sv: DS18S20 Tempgivare
Du har nog ingen aning om 1-wire kommunication ? eller ??
Det är kommunication i bitnivå, och inom fastställda svarstider, men lycka tillSv:DS18S20 Tempgivare
Så det kommer inte finnas något i min Com1 buffer när jag triggat den ! ?
Vad det blir vet jag inte men nog skall jag kunna avkoda. Är väl inget märkvärdigt med 1 :a 0:a
Jag har inte fördjupat mig i problemet. Men ! jag vet att jag lätt löser det i VB6 om jag vill.
Edit:
HaHa Aha kom på att jag kan köra på en tråd till Parallellporten.
Min gamla TempSensor lösning.
SMT160-30 lämnar frq ~ 4000 Hz och neråt .
Den kan jag sända trådlöst runt hela världen.
Jag kan sitta nere på Rivieran och kolla temperaturen i min sommarstuga eller frysen..
Tycker det är djä... töntigt att läsa temperaturen via en max 20m ledning.
Faee kör trådlöst via en speciell frekvens. Sitt i Skåne kolla hyddan i BjörnbergetSv: DS18S20 Tempgivare
Näääääääääää och jooo men ! bryr mig icke.
Kolla denna och min lösning här hos Pelle .
Sök på SMT160-30 TO220 har funkat perfekt hos mig nu i 8 år
Den går på ett 9 V batteri som räcker 3 år
http://www.smartec.nl/pdf/DSSMT16030.PDFSv:DS18S20 Tempgivare
ps: Det finns färdiga 1-wire DLL till VB6,
varför uppfinna hjulet själv ?
1-Wire is a device communications bus system designed by Dallas Semiconductor Corp. that provides low-speed data, signaling, and power over a single signal.
Varje sensor har egen adress, vilket gör att jag har 10 givare på samma 1-wirebuss.
Din SMT-sensor tror jag inte hanterar enligt Dallas 1-wire protokoll. Det går ej att utläsa ifrån din länk.
Dallas 1-wire klarar "Up to 300 meter long buses consisting of simple twisted pair telephone cable"
Eftersom man bara behöver 2 trådar +5V och communicationstråd, samt att man kan hänga på flera givare, så tycker jag den är KANON-bra.
LÄNK till hämtning av DLL http://www.maxim-ic.com/products/ibutton/software/tmex/download_drivers.cfmSv: DS18S20 Tempgivare
Min lösning som fick full kraft var när en bonde drog 1 km telefon-ledning
och kunde läsa av när han skulle skörda på sin åker 2 km ifrån.
Min lösning grundar sig på frekvens . (4000 hz)
Dvs Vi räknar hur många höga respektiva låga det finns i en perod.Sv:DS18S20 Tempgivare
http://tgsoftware.mine.nu/index.htm
Som du ser.
Så skickar jag Flera temperaturer trådlöst, och till hela världen.
Sen kan man undra hur du tänker ??
Bonden drog 1 km kabel till en åker som var 2 km bort. ?? !! ??Sv: DS18S20 Tempgivare
Tycker det är oförskämt av dig att inte använda
............................. Sv:DS18S20 Tempgivare
Du är insnöad i din SMT - givare.
Och det är ju trevligt med snö. i denna gråa vinter.
Vi önskar väl en vit jul ?
Eftersom din SMT givare inte jobbar binärt/digitalt utan istället med frekvens så
kommer här ett par frågor - är den linjär - ?
Är den kompenserad för kapacitanspåverkan av kabellängd ?
Vilken är resonansfrekvensen och vid vilken temperatur. ?Sv: DS18S20 Tempgivare
Tekniken är sk. pulsbreddsmodulation. Man räknar antal höga under en given tidsperiod.
Okänsligt för långa ledningar om man kompenserar med en konstant.
Jag gör det med isvatten för (0) noll C. Den jag använder hemma får jag kompensera med 0.2
Sen stämmer det linjärt.
http://www.smartec.nl/pdf/DSSMT16030.PDF
<code>
Begin
Case Pin of
10: Mask := 64 ;
11: Mask := 128 ;
12: Mask := 32 ;
13: Mask := 16 ;
15: Mask := 8 ;
End ;
halfSek := GetTickCount + 500 ;
cntHigh := 0 ;
For totNumOfSamp := 1 TO 100000000 do begin
inSignal := DlPortReadPortUchar(AddrVal) ;
smartSign := inSignal And Mask ;
If smartSign = Mask Then inc(cntHigh) ;
If GetTickCount > halfSek Then Break ;
End ;
If Pin = 11 Then
cntHigh := totNumOfSamp - cntHigh ;
GetTemp := (cntHigh/totNumOfSamp - K1)/K2;
End;
</code>Sv:DS18S20 Tempgivare
Okänsligt för långa ledningar om man kompenserar med en konstant.
??
En konstant som kompenserar oberoende av längd ??
Låter ju helt skumt. Var börjar kompensationsgränsen 20 Meter ??
Vid 21 meter kompenastion med samma som vid 300 meter.
Citat:
Tekniken är sk. pulsbreddsmodulation. Man räknar antal höga under en given tidsperiod.
Inget speciellt , vanlig frekvensräknare duger. MEN
vilka felkällor
Tidenheten tidräknare inte är tillräckligt exakt ger felberäkningar av frekvens.
Kapacitanspåverkan från kabel, då kompensation inte tar hänsyn till kabellängd.
Men okay, noggranhet inom 1-3 grader klarar den nog beroende på hur man applicerar
mätsensorn i microprocessor-app eller pc-miljö.
Vilket fall som helst så kan man inte ha flera sensorer på samma buss, iallafall.
Jag föredrar I2C eller 1-Wire, där mätsensorn utför hela mätningen och endast rapporterar mätvärdet
i form av ett digitalt värde via, I2C eller 1-wire. Detta via CRC för säkerhetsställa mätvärdenSv: DS18S20 Tempgivare
mätsensorn i microprocessor-app eller pc-miljö.
Vilket fall som helst så kan man inte ha flera sensorer på samma buss</b>
1-3 grader blir det aldrig tal om. 0,.. högst
Jag kan ha 12 sensorer kopplade om jag vill på parallellporten.
Kolla fil där jag har ett exempel på 4 sensorer på GamePorten
Programarkivet:4 st SMT160-30 tempgivare på GamePorten
Programarkivet:Temperatur med SMT 160-30Sv:DS18S20 Tempgivare
Gameporten,, finns det sådan på dagens datorer ?
Dessutom kan man inte hämta hem angiven länk i programarkivet
http://www.driverlinx.com/DownLoad/DlPortIO.htm
Den websidan är nerlagd..
Definiering av buss alt port.
4 givare på samma buss ??
Såå bonden i ditt tidigare exempel med 1 km 2-trådsbuss kan ansluta 4 SMT
på den 2-trådsbussen ? om han ansluter till en Gameport..
Blir väl lite svårt, eller hanterar du blandade frekvenser på samma busslina ? Näe
Jag sätter punkt här för DS18S20,. Sv: DS18S20 Tempgivare
Projektet är helt perfekt för gamla övergivna PC och LapTop.Sv:DS18S20 Tempgivare
Projektet är helt perfekt för gamla, övergivna PC och LapTop.