/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
måling af firkantpuls
Fra : Calle.


Dato : 28-03-03 06:28

Jeg får et pulserende signal ind på ben 2 på printerporten
på den skal jeg måle følgende 2 tider:
t1: tiden hvor pulsen er høj
t2: tiden fra pulsen går høj, til den går høj igen.
hvordan gør jeg det?
jeg kører turbo pascal i ren dos.


--
Automatik Mekaniker
Calle



 
 
Finn Bindeballe (28-03-2003)
Kommentar
Fra : Finn Bindeballe


Dato : 28-03-03 08:30

hej der

det kommer jo lidt an paa hvor hurtigt dine pulser kommer..... du kan jo
ikke maale pusler der er kortere end den hastighed du sampler med.....

men hvi s det er rimlig lange pulser, saa kan du jo paa forkanten:

starte timer 1
stoppe timer 2

paa bagkanten

starte timer 2
stoppe timer 1

jeg har postet, hvordan du finder kanter, og ogsaa en metode , hvor du
kan lave en interrupt dirvet timer....

/finn


Calle. (28-03-2003)
Kommentar
Fra : Calle.


Dato : 28-03-03 14:08

Finn Bindeballe wrote:
> hej der
>
> det kommer jo lidt an paa hvor hurtigt dine pulser kommer..... du kan
> jo ikke maale pusler der er kortere end den hastighed du sampler
> med.....
>
> men hvis det er rimlig lange pulser, saa kan du jo paa forkanten:
>
> starte timer 1
> stoppe timer 2
>
> paa bagkanten
>
> starte timer 2
> stoppe timer 1
>
> jeg har postet, hvordan du finder kanter, og ogsaa en metode , hvor du
> kan lave en interrupt dirvet timer....
>
Ja, sådan har jeg også lavet det, men kan ikke få den til at fungere, så
jeg troede der var noget ivejen med metoden.
--
Automatik Mekaniker
Calle



Calle. (28-03-2003)
Kommentar
Fra : Calle.


Dato : 28-03-03 14:46

Finn Bindeballe wrote:
> hej der
>
> det kommer jo lidt an paa hvor hurtigt dine pulser kommer..... du kan
> jo ikke maale pusler der er kortere end den hastighed du sampler
> med.....
>
> men hvi s det er rimlig lange pulser, saa kan du jo paa forkanten:
>
> starte timer 1
> stoppe timer 2
>
> paa bagkanten
>
> starte timer 2
> stoppe timer 1
>
> jeg har postet, hvordan du finder kanter, og ogsaa en metode , hvor du
> kan lave en interrupt dirvet timer....
>
det er en SMT160 temperaturføler jeg har på porten, det kan være du så
kan hjælpe mig.
--
Automatik Mekaniker
Calle



Finn Bindeballe (28-03-2003)
Kommentar
Fra : Finn Bindeballe


Dato : 28-03-03 14:56



"Calle." wrote:

> Finn Bindeballe wrote:
> > hej der
> >
> > det kommer jo lidt an paa hvor hurtigt dine pulser kommer..... du kan
> > jo ikke maale pusler der er kortere end den hastighed du sampler
> > med.....
> >
> > men hvi s det er rimlig lange pulser, saa kan du jo paa forkanten:
> >
> > starte timer 1
> > stoppe timer 2
> >
> > paa bagkanten
> >
> > starte timer 2
> > stoppe timer 1
> >
> > jeg har postet, hvordan du finder kanter, og ogsaa en metode , hvor du
> > kan lave en interrupt dirvet timer....
> >
> det er en SMT160 temperaturføler jeg har på porten, det kan være du så
> kan hjælpe mig.

jeg kan se at den pulser med 1-4 khz. og det kan du slet ikke komme i
nærheden af med den maade du laver det paa her....

men.......... du kan jo sætte en binær tæller til at dele det pwm signal
ned, som kommer fra sendsoren, hvis du bruger en 10 bit tæller kommer du ned
paa 1-4 hz. og det sqlle du nok kunne maale med din paralel port.

en andne maade er at du laver en puls-brede maaler. ´det er lidt mere
kompliceret, men det bliver meget mere precicst.....

/Finn

>
> --
> Automatik Mekaniker
> Calle


Calle. (28-03-2003)
Kommentar
Fra : Calle.


Dato : 28-03-03 15:18

Finn Bindeballe wrote:
> men.......... du kan jo sætte en binær tæller til at dele det pwm
> signal ned, som kommer fra sendsoren, hvis du bruger en 10 bit tæller
> kommer du ned paa 1-4 hz. og det sqlle du nok kunne maale med din
> paralel port.
tænker du på en 4017 f.eks
>
> en andne maade er at du laver en puls-brede maaler. ´det er lidt mere
> kompliceret, men det bliver meget mere precicst.....

hvordan laves sådan en?
>

--
Automatik Mekaniker
Calle



Calle. (28-03-2003)
Kommentar
Fra : Calle.


Dato : 28-03-03 15:25

Finn Bindeballe wrote:
> jeg kan se at den pulser med 1-4 khz. og det kan du slet ikke komme i
> nærheden af med den maade du laver det paa her....
>
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?

--
Automatik Mekaniker
Calle



Calle. (28-03-2003)
Kommentar
Fra : Calle.


Dato : 28-03-03 18:55

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?

--
Automatik Mekaniker
Calle



Ove Kjeldgaard (28-03-2003)
Kommentar
Fra : Ove Kjeldgaard


Dato : 28-03-03 21:56

"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>

Calle. (29-03-2003)
Kommentar
Fra : Calle.


Dato : 29-03-03 01:38

Ove Kjeldgaard wrote:
> 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.

Hej Ja, det har jeg også fundet frem til, jo større den er jo mere
præcist bliver din måling, da du har flere pulser, og længere
tidsinterval.
Alle de konstanter du har fjernet, er til hvis man har en sensor på alle
5 indgange.
Har selv lagt 65000 og portadr ind som konstant, så jeg kan nøjes med
les_temp(X).
Hvor X bestemmer hvilken føler jeg vil læse på.
Har fået det til at virke.




--
Automatik Mekaniker
Calle



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste