"Calle." <Calle@fjernjyde.dk> wrote:
>Calle. wrote:
>> har fundet denne side
http://home.c2i.net/terhoy/smt.htm
>> men jeg fårstår ikke helt metoden.
>> For mig ser det også ud som om han har pyttet om på benene.
>> Kan du tolke det, og give mig en beskrivelse af metoden?
>
>har nu næsten overskuet det,
>det hjalp, da jeg fik det sat op så der kommer ny linie efter ;
>men jeg forstår ikke hvorfor han har de 65000 som variabel, og hvorfor
>det liger er 65000.
>
>Er der nogen her der kan svare mig på det?
>
Det er faktisk lige meget hvad den konstant er, bare den er tilpas stor.
For som jeg når frem til i den tredje program version herunder, så ganger man
først med 65000 og dividerer så tilsidst efter målingen igen med 65000.
Det følgende er et forsøg på at rette lidt op på noget ikke alt for pæn kode.
Jeg prøver også lige at "pynte" lidt på kildeteksten:
{-----------------------------------------------------------}
Function les_temp( x: byte; antall: Word; lpt_port: Word ): real;
Var
ioh,
i: longint;
Const
mask: Array[0..4] Of integer = ($08,$10,$20,$80,$40);
Begin
ioh := 0;
For i := 1 To antall Do
ioh := ioh + (port[lpt_port+1] and mask[x]);
ioh := ioh div mask[x];
les_temp := ((ioh/antall) - 0.32)/0.0047;
End;
Kald til funktionen: grader := les_temp(0, 65000, $378);
{-----------------------------------------------------------}
Og så fjerner jeg lige en masse konstanter:
{-----------------------------------------------------------}
Function les_temp: real;
Var
ioh,
i: longint;
Begin
ioh := 0;
For i := 1 To 65000 Do
ioh := ioh + ( port[$379] and $08 );
ioh := ioh div $08;
les_temp := ((ioh/65000) - 0.32)/0.0047;
End;
Kald til funktionen: grader := les_temp;
{-----------------------------------------------------------}
Og nok en tur i vridemaskinen:
{-----------------------------------------------------------}
Function les_temp: real;
Var
ioh,
i: longint;
Begin
ioh := 0;
For i := 1 To 65000 Do
if ( port[$379] and $08 ) = $08;
inc( ioh );
les_temp := ((ioh/65000) - 0.32)/0.0047;
End;
Kald til funktionen: grader := les_temp;
{-----------------------------------------------------------}
Ovenstående forklarer dog ikke så meget om hvad eller hvordan målingen
foretages. Og da jeg ikke lige har tid nu til at skrive en hel masse må den del
vente, eller en anden overtage.
Men en vigtige del for forståelsen er (ioh/65000) delen, som er en real med
værdien 0,00 til 1,00 for 0 til 100% duty cycle fra sensoren.
--
Med venlig hilsen, Ove Kjeldgaard
Natur og Friluftsliv: <
http://hiker.dk>