Hur skriver man för att läsa temperatur ifrån SMT160-30, har provat en del varianter utan framgång! På något sätt måste jag kunna räkna antalet höga signaler samt antalet signaler under en viss tidsperiod och därigenom få fram temperaturen. Jag tror SvenPon skickade med lite delphikod i det här uppskicket: Detta är ett exempel på dll. Du kan lätt omvandla till .exe om du vill Ok Ursäkta mig!!! Som sagt det är viktigt att Ni försäkrar Er om att SMT160-30 verkligen får Ok sökte på Goggle svenska sidor , där finns hur mycket som helst tex. Har hittat en del bra sidor under sökandet bla denna: Jag gillar att kombinera VB och Delphi , Vb är ju kanonbra när man gör detHur skriver man i Delphi för att läsa temperatur från SMT160-30
Under "Bygg din egen termometer" så har man gjort detta i VB, men jag lyckas inte att översätta detta till Delphi- koder, varför jag här ber någon vänlig själ om HJÄLP!!!
MVH
MichaëlSv: Hur skriver man i Delphi för att läsa temperatur från SMT160-
http://www.pellesoft.se/login/upload/t_view4.asp?tid=717
Titta i slutet på filen som heter SMT160DLL.txtSv: Hur skriver man i Delphi för att läsa temperatur från SMT160-
<code>
library SMT160 ;
uses
SysUtils,
Classes,
Celcius in 'Celcius.pas' ;
Exports GetTemp ;
Begin
End.
//**************************************************
unit Celcius ;
interface
Uses
Windows ;
Function DlPortReadPortUchar(GetAddrVal:Integer) :
Byte;StdCall ;
//Parallellporten
Function GetTemp(AddrVal :Integer ; Pin :Integer) :
Single;StdCall ;
Implementation
Function DlPortReadPortUchar(GetAddrVal:Integer) :
Byte;StdCall ;
external 'DLPORTIO.dll' name 'DlPortReadPortUchar' ;
Const K1 = 0.32 ;
Const K2 = 0.0047 ;
// Exempel : ***************************************
// skicka 889,11 om du anslutet på pinne 11 LPT
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 ;
//Jag samplar max en halvsekund
halfSek := GetTickCount + 500 ;
cntHigh := 0 ;
// Har inte koll på om 100 milj loopar tar mer tid
// än halfSek.Olika på olika datorer,därför Break
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 är inverterad
If Pin = 11 Then
cntHigh := totNumOfSamp - cntHigh ;
GetTemp := (cntHigh/totNumOfSamp - K1)/K2 ;
// Efter många experiment har jag kommit fram till att
// om man kör SMT 160-30 på 5 Volt så får man lägga
// in en korrektion på GetTemp = GetTemp - 1.1
// SMT 160-30 fungerar bara korrekt om den får
// >4.75 <7 volt.Du måste använda extern 5 v försörj.
End;
End.
</code>
Lycka tillSv: Hur skriver man i Delphi för att läsa temperatur från SMT160-
Har laggt in ovanstående som en egen enhet, som jag lägger till i det programmet som jag vill läsa tempen i.
Jag får han att mäta temperatur men..
omkring 25 grader så går det bra, vid mätning där resultatet förväntas bli 37grader säger han att det är 54grader.
Varför får jag denna felmätning???
Har provat att koppla på extern matning på 5V, då ger han 144 grader???
Mycket skumt
//MichaëlSv: Hur skriver man i Delphi för att läsa temperatur från SMT160-
Jag glömde att koppla samman jorden från datorn med jorden ifrån externa strömkällan, därav fick jag 143,30 i temp hela tiden.
I Elfa andvänder dom en kondensator på 20pF är den nödvändig eller??
Har du (Sven Pon) lekt något med DS18S20 och Delphi, vore tacksam om du i så fall ville lägga ut något om detta!!
Annars fungerar SMT160-30 mycket bra, skall nu bara programera resten av mitt projekt -Schuntreglering i pannan med Dator-Sv: Hur skriver man i Delphi för att läsa temperatur från SMT160-
minst 5 volt och inte mer än 7 volt.Parallellportarna lämnar bara omkr 4.5 v på
ny moderna datorer,då blir mätningarna fel. Kolla denna länk
http://www.hut.fi/Misc/Electronics/circuits/power_from_pc.html
ELFA vill ha en kondensator på 20 nf över spänningsmatningen,
jag har inte det men det kan nog vara lämpligt för att ta bort "rippel" .
Jag tar mina 5 volt på den röda sladden i datorn som strömmatar HD.
Där finns säker 5 volt.När jag kör på detta vis så får jag korrigera temperaturen med
- 1.1 gr ,har testat på olika datorer och det blir samma alltså korrigera med - 1.1.
SMT160-30 dra oförskämt lite ström så nästa bygge jag gör kommer jag
att strömmata med ett 9 volt batteri och en spänningsregulator på 5 v.
Batteriet kommer att räcka i flera år.
Hur ofta gör du mätningar ? jag kör 1 gng per minut, tätare belastar datorn i onödan.
Slutligen rekommenderar jag att Ni använder SMT160-30 med hölje TO 220
den har en metalplatta som leder värme bra.
DS18S20 kollade jag men den har en usel beskrivning så jag skippade den.
Om du har kopplingsschema och annat kring denna så är jag intresserad.Sv: Hur skriver man i Delphi för att läsa temperatur från SMT160-
http://termo.elf98.com/termo/DS18S20.pdfSv: Hur skriver man i Delphi för att läsa temperatur från SMT160-
http://www.vss.co.nz/new/gadgets/onewire.htm
Den är ju skriven i ett riktigt program med Delphi!!!
DS1820 behöver man ju inte köpa det är bara att gå in på Maxim:s hemsida och beställa gratisprover, det gjorde jag för två veckor sen och fick hem dom i fredags.
//Michaël
PS.
Det är tur att Delphi finns, för Visual Basic det är ju bara till för barn!!!
Säg ordet "BASIC" så förstår du!Sv: Hur skriver man i Delphi för att läsa temperatur från SMT160-
grafiska gränssnittet.tillsammans med Delphi dll:er blir det riktigt bra.