
SMT160 kod
SMT160 kod
Detta är en efterlysning, hittade för en tid sen en mkt enkel c-kod hur man plockade upp tempvärden till AVR med SMT160. Hittar dock inte inlägget nu varken med google eller forumets sökmotor. Tänkte om någon hittar den ? eller om författaren till koden kunde lägga upp den här igen 

Porta Delphi kod
Kan du inte porta min Delphikod till C på funktionen ovan ?
Edit:
Woops fel tråd.
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 ;
If Pin = 11 Then
cntHigh := totNumOfSamp - cntHigh ;
GetTemp := (cntHigh/totNumOfSamp - K1)/K2;
End;
Edit:
Woops fel tråd.
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 ;
If Pin = 11 Then
cntHigh := totNumOfSamp - cntHigh ;
GetTemp := (cntHigh/totNumOfSamp - K1)/K2;
End;
Senast redigerad av SvenPon 16 januari 2007, 14:54:52, redigerad totalt 3 gånger.
- bengt-re
- EF Sponsor
- Inlägg: 4829
- Blev medlem: 4 april 2005, 16:18:59
- Skype: bengt-re
- Ort: Söder om söder
- Kontakt:
Vet inte vad du kör med exakt för prylar, men dessa nissar har gjort ungefär det du vill.
http://www.oru.se/oru-upload/Institutio ... 108-04.pdf
float sensor_smt160_read(sensor_smt160 *this,double n,char type)
{
this->type=type;
this->n=n;
this->duty_cycle=digital_sampling(this->port,this->bit_mask,this->n);
this->temp= (float) this->duty_cycle/(float)this->n;
this->temp=(((this->temp-0.32)/0.0047));
return this->temp;
}
http://www.oru.se/oru-upload/Institutio ... 108-04.pdf
float sensor_smt160_read(sensor_smt160 *this,double n,char type)
{
this->type=type;
this->n=n;
this->duty_cycle=digital_sampling(this->port,this->bit_mask,this->n);
this->temp= (float) this->duty_cycle/(float)this->n;
this->temp=(((this->temp-0.32)/0.0047));
return this->temp;
}
SMT160-30 logik
Kör i en loop under 0.5 sek
Räkna hur många du hinner med = TotSamples
Räkna hur många som har varit höga under denna tid cntHigh
Då blir svar i Celcius = (cntHigh / TotSamples - 0.32) / 0.0047
Räkna hur många du hinner med = TotSamples
Räkna hur många som har varit höga under denna tid cntHigh
Då blir svar i Celcius = (cntHigh / TotSamples - 0.32) / 0.0047