SMT160-30

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Mascot
Inlägg: 15
Blev medlem: 30 mars 2005, 08:24:30

SMT160-30

Inlägg av Mascot »

Hej, jag behöver lite hjälp. Jag har kopplat in en SMT160-30 till parallellporten.Och när jag läser av porten så växlar värdet mellan 120 och 248, det ska väl stämma?? Om det är rätt så hur gör jag om värdet till en vettig temperatur? Har läst i databladet men det är rena grekiskan för mej! Har även sök på forumet. Men jag får det inte att funka. Skulle vara snällt om någon ville visa hur man räknar ut det? Min matte är inte speciellt bra, som ni kanske märker! Kanske blev lite otydligt? Men hoppas ni förstår.
Användarvisningsbild
ensten
EF Sponsor
Inlägg: 3759
Blev medlem: 19 oktober 2004, 15:55:20
Ort: Hudiksvall

Inlägg av ensten »

Mascot
Inlägg: 15
Blev medlem: 30 mars 2005, 08:24:30

Inlägg av Mascot »

Tackar! Men jag har redan kollat på det! Och jag blev inte så mycket klokare av det :D Det jag ville veta var bara hur ekvationen ska vara. Någon kanske vill visa lite kod hur man får fram temperaturen? Jag skriver själv i c# och använder inpout32.dll för att kommunicera med porten http://www.logix4u.net/.
Användarvisningsbild
ensten
EF Sponsor
Inlägg: 3759
Blev medlem: 19 oktober 2004, 15:55:20
Ort: Hudiksvall

Inlägg av ensten »

Kontakta SvenPon här på forumet. Kolla dina Privata meddelanden så får du hans mailadress av mig.
Mascot
Inlägg: 15
Blev medlem: 30 mars 2005, 08:24:30

Inlägg av Mascot »

Har inte fått något meddelande. Jaja, jag kanske var lite otydlig iaf?
Så jag försöker igen :D Så här står det i databladet.

D.C. = 0,32+0,00470*t D.C. = duty cycle

t = Temperature in C

Alltså det jag inte förstår är att när jag läser av porten så får jag ju alltid samma värden 248 och 120. Vad ska jag göra med dessa? Lika ekvationen? Hur använder jag den om jag vill få fram temperaturen? För det står ju att "duty cycle" är lika med 0,320+0,00470*t? Var får jag temperaturen ifrån? Det är ju den jag vill få reda på? Hur ska jag läsa av sensorn? Om jag läser nu så växlar ju värdet mellan 248 och 120, har det inget med saken att göra? Eller ska man läsa hur många pulser den sänder ut och göra något med dessa? Haha.. det är säkert väldigt enkelt, så ni får ursäkta men jag är helt ny på detta :D
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Det du vill göra är att mäta den Duty-Cycle som givaren ger. Signalen kommer att se ut som en fyrkantvåg, och du vill mäta den tid i varje period som signalen är hög. Du måste alltså i ditt program mäta tid istället för att bara läsa av porten direkt.

Anledningen att du nu får två olika värden är att den ingång du kopplat sensorn till växlar. Det du vill göra är att mäta tiden mellan när parallellporten växlar värde från 248 till 120 och tvärtom.

Det här blev lite rörigt, men jag hoppas du förstod något i alla fall.
Mascot
Inlägg: 15
Blev medlem: 30 mars 2005, 08:24:30

Inlägg av Mascot »

Jodå förstog det mesta :D Tack! Skulle var snällt om
någon hade lite kod att visa också? Helst inte i assembler :D
Användarvisningsbild
SvenPon
Utsparkad, på semester
Inlägg: 724
Blev medlem: 26 augusti 2004, 10:53:39
Ort: Haninge

Min Delphi kod

Inlägg av SvenPon »

Hoppas du förstår, hör av dig om inte. Man kör alltså en loop under 0.5 sek
enl nedan sedan räknar på hur många pulser som var höga.
Pinne skall vara någon av 10 11 12 13 15

Const K1 = 0.32 ;
Const K2 = 0.0047 ;
//************************************************
Function GetTemp(AddrVal :Integer ; Pin :Integer) :
Single;StdCall ;
Var
cntHigh : Integer ;
totNumOfSamp : Integer ;
inSignal : Byte ;
smartSign : Byte ;
Mask : Byte ;
halfSek : Dword ;
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 ;
// Pinne 11 på Lpt är inverterad
If Pin = 11 Then
cntHigh := totNumOfSamp - cntHigh ;
GetTemp := (cntHigh/totNumOfSamp - K1)/K2;
End;
End.
Användarvisningsbild
SvenPon
Utsparkad, på semester
Inlägg: 724
Blev medlem: 26 augusti 2004, 10:53:39
Ort: Haninge

Gick det hem eller var det för svårt

Inlägg av SvenPon »

Undrar SvenPon
Mascot
Inlägg: 15
Blev medlem: 30 mars 2005, 08:24:30

Inlägg av Mascot »

Tackar! Jodå, förstår vad jag ska göra men nu försöker jag komma på något enkelt sätt att göra det i c#. Någon som håller på med .Net? Har kollat på Threading och Timers. Men jag får det inte att fungera? Det jag inte får till är att göra en loop som ska köras i 0,5 sek?
Användarvisningsbild
SvenPon
Utsparkad, på semester
Inlägg: 724
Blev medlem: 26 augusti 2004, 10:53:39
Ort: Haninge

C# och Get Tickcount

Inlägg av SvenPon »

Jag använder GetTickcount 0.5 sek för att det är optimal samplingstid.

Du kan testa att köra en For Loop 100 000 varv, det borde funka.
Men visst har Ni GetTickcount i C#
Senast redigerad av SvenPon 5 april 2005, 10:10:41, redigerad totalt 1 gång.
Mascot
Inlägg: 15
Blev medlem: 30 mars 2005, 08:24:30

Inlägg av Mascot »

Ok, tack så mycket. Får testa det, såg att det fanns Get Tickcount i c# också, så jag får läsa lite om det. Tack!
Mascot
Inlägg: 15
Blev medlem: 30 mars 2005, 08:24:30

Inlägg av Mascot »

Ok, testade att göra en lopp 100 000gr. Men nu är frågan, jag vet alltså hur många gånger porten var hög och hur många gånger den var låg. Hur blir ekvationen då?
Användarvisningsbild
SvenPon
Utsparkad, på semester
Inlägg: 724
Blev medlem: 26 augusti 2004, 10:53:39
Ort: Haninge

Formel

Inlägg av SvenPon »

C = (cntHigh/totNumOfSamp - K1)/K2;

Dvs (antal höga / antal samplingar - 0.32 )/0.0047

Om du kör mot pinne 11 som är inverterad måste Vi omvandla
cntHigh först
// Pinne 11 på Lpt är inverterad
If Pin = 11 Then
cntHigh := totNumOfSamp - cntHigh ;

C = (cntHigh/totNumOfSamp - K1)/K2;

K1 och K2 är till för att SMT160-30 egentligen lämnar Fahrenheit
Användarvisningsbild
SvenPon
Utsparkad, på semester
Inlägg: 724
Blev medlem: 26 augusti 2004, 10:53:39
Ort: Haninge

Kalibrering

Inlägg av SvenPon »

Ytterligare en info.
Av någon underlig anledning så har jag funnit att vid kalibrering
så får man minska C med 1.1 grader för att det skall bli helt korrekt.

Celsius = C - 1.1
Skriv svar