mascot Skrevet 1. november 2002 Del Skrevet 1. november 2002 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
Asbjørn Skrevet 1. november 2002 Del Skrevet 1. november 2002 Kor fekk du tak i servoene fra, eller kva slags servoer bruker du. Har prøvd på lignende men har ikkje peiling på elektronikk så eg fekk ikkje motoren som eg då brukte til å virke ... Lenke til kommentar
mascot Skrevet 1. november 2002 Forfatter Del Skrevet 1. november 2002 Den tok jeg fra en RC-bil jeg hadde ståendes. Vanlig Futuba servo. Lenke til kommentar
MagneH Skrevet 7. november 2002 Del Skrevet 7. november 2002 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
KriStang Skrevet 12. april 2003 Del Skrevet 12. april 2003 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå