Gå til innhold

Anbefalte innlegg

Hei,

 

driver med et prosjekt der jeg skal styre en servo (slike som står på radiostyrte biler) via parallelporten.

 

Det å sende ut på parallelporten går greit, men cluet er at servoen styres til et visst punkt ved å sende en puls som varer et sted mellom 1-2 millisekund. Jeg vil f.eks trenge å sende en puls på 1.14 millisekund osv.

 

Har brukt følgende kode for å "bremse" programmet før det går vidre:

 

Sub Sleep(SecondsToWait As Single)

Dim StartTimer

StartTimer = Timer

Do While Timer < StartTimer + SecondsToWait

DoEvents

Loop

End Sub

 

SecoundsToWait vil i overnevnte eksempel være 0.0014.

 

Dette gir et veldig unøyaktig resultat, og servoren oppfører seg ikke sånn den skal i det hele tatt.

 

Har noen forslag på hvordan jeg skal få til et mer nøyaktig millisekund delay?

 

Dette kan vel gjøres ved API, men hvordan?

Lenke til kommentar
Videoannonse
Annonse

Problemet ligger vel i at DoEvents kan ta litt ulik tid å utføre, avhengig av hvor mange hendelser som ligger i køen. Siden det er så kort tidspunkt loopen skal gå, kan du jo prøve å fjerne den.

Men jeg vet ikke om det blir nøyaktig nok.

Lenke til kommentar
  • 5 måneder senere...

Du kan ikke bruke Timer for å få det til å bli helt nøyaktig,

denne propertyen gir deg bare hvor mangen sekund det er siden midnatt med 3 desimaler, det du trenger er disse api-callene:

 

Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As Currency) As Long

Private Declare Function QueryPerformanceFrequency Lib "kernel32" (lpFrequency As Currency) As Long

 

Med disse kan du få et mer nøyaktig tall som skal brukes i tellingen.

Du bruker dem slik:

 

Public Sub Wait(Millisecounds As Currency)

 

Dim A(2) As Currency

 

QueryPerformanceFrequency A(0)

QueryPerformanceCounter A(1)

 

Do

QueryPerformanceCounter A(2)

If (A(2) - A(1)) / A(0) * 1000 > Millisecounds Then Exit Do

Loop

 

End Sub

 

Du skriver bare inn hvor mangen milisekund du vil at programmet skal vente

 

Jeg håper dette blir nøyaktig nok.

Lykke til!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...