Avatar billede super_g Nybegynder
10. december 2000 - 23:45 Der er 16 kommentarer og
3 løsninger

Præcis tidsmåling i VB

Hejsa.

Hvordan kan jeg måle en tidsforskel meget præcis ??

Kode:
TidFør = ???
Div koder
TidEfter = ???
Udregn tidsforskel

Jeg har prøvet med GetTickCount, men den runder vist af til hvert 10. ms.
Jeg skulle gerne helt ned i us eller ns.
Jeg vil tro, at hvis jeg kan måle x00 us eller xx0 us, så må det være godt nok.
Hvordan gør jeg det???

MVH Super G

P.S. Jeg skal bruge det til at modtage/sende infrarøde signaler via parallelporten.

BTW
us = mikrosekunder = 10^-6 s
ns = nanosekunder = 10^-9 s
Avatar billede tdaugaard Nybegynder
10. december 2000 - 23:46 #1
Jeg tror ikke windows kan måle længere ned end 1ms ..
Avatar billede microtec Nybegynder
10. december 2000 - 23:56 #2
Jeg har set et eksempel, som udnytter den hardware timer, som normalt benyttes til at genererer lyd i den indbyggede PC-højtaler.
Med denne timer kan du måle meget nøjagtigt, da den er krystalstyret. Enda med en opløsning på uS.

Jeg har desværre ikke lige en slump kode jeg kan henvise til, men prøv at søge på noget med \"ps speaker\" og \"timer\".
Avatar billede microtec Nybegynder
10. december 2000 - 23:56 #3
slump = stump
Avatar billede tdaugaard Nybegynder
11. december 2000 - 00:06 #4
Et tick er 18.2/1 sekund. så ved du det.
Avatar billede scb Praktikant
11. december 2000 - 08:11 #5
Det kan ikke lade sig gøre på denne måde !!
Det er helt fint at have en timer der kører i uS, men hvad hvis aflæsningen af denne tager xxx uS med en afvigelse på +- 200 uS.
Du skal bruge en dll eller ocx eller hvad de nu hedder, ligesom der bruges til seriel com i VB, det fåes også til IR com.
Man kan lave en rutine i VB som kan aflæse parallelporten, men ikke ved at måle tid, og denne rutine må ALDRIG jeg gentager ALDRIG blive forstyrret mens man aflæser, så er det en længervarende IR communikation (Over få mS) dur det ikke.
-SCB
Avatar billede scb Praktikant
11. december 2000 - 08:19 #6
Jeg glemte: Du taler om nS, hvis en puls er 1 nS lang vil der kunne være 1000000000 af dem på 1 sek ! (1 GHz)
Typisk er IR com med pulser på min 10 uS dvs 100 KHz hvilket jo også er hurtigt, IR-fjernbetjeninger ofte i mS
-SCB
Avatar billede microtec Nybegynder
11. december 2000 - 08:47 #7
scb >> Du kan da ikke lave noget i en DLL eller OCX, som ikke også kan laves i VB (måske som assembler for at lave det hurtigt)!
Du har ret i at det ikke er muligt at måle tider i nS opløsning, men det er heller ikke nødvendigt når der arbejdes med IR. Så hurtige er signalerne slet ikke.

Den artikel jeg refererede til findes i Elector Electronics EXSTRA 9/1998 side 12. Artiklen hedder \"Accurate time measurement in Visual Basic\". Du kan sikkert låne bladet på dit lokale bibliotet.

Den timer kreds der sidder i PCen hedder 8253 eller 8254. Måske også gode søge ord.

Avatar billede super_g Nybegynder
11. december 2000 - 09:57 #8
Jeg tror også, at xxx us er nok.
Jeg bruger så bare den .DLL som er på www.ziplabel.com/cir den kan vist klare det.

Jeg ville bare se, om jeg kunne gøre det i VB, uden at bruge .DLL\'er.

Jeg venter lige lidt med at acceptere...
Avatar billede microtec Nybegynder
11. december 2000 - 10:22 #9
super_g >> I den omtalte artikel \"Accurate time measurement in Visual Basic\" benyttes der heller ikke nogen DLL eller OCX.

Men jeg tror det er meget lettere at benytte den DLL du allerede har fundet på www.ziplabel.com/cir

Avatar billede scb Praktikant
11. december 2000 - 10:28 #10
microtec>> Jeg har de sidste 14 årgange af Elector stående i min reol, og jeg kan godt huske den omtalte artikel, jeg kan dog ikke finde den i nr 9 fra 1998.
Jeg har lavet mange serielle rutiner som assembler programmering, og ved hvor få instruktioner der skal til for at saboterer timingen ved bare 9600 baud, det vil aldrig kunne lade sig gøre i VB ved at måle tidsforskel, bare den tid det tager at behandle de målte data, vil få det hele til at skride, og for ikke at tænke på hvis der kommer en hændelse fra f.eks bruger input.
-SCB
Avatar billede microtec Nybegynder
11. december 2000 - 10:34 #11
Bare lige for at der ikke er nogen der skulle blive skuffet:

Jeg er sikker på at man ikke kan få CIR til at virke sammen med en Bang & Olufsen fjernbetjening.
De benytter en Carrier på 455kHz, hvor næsten alle andre benytter 38kHz.
Det er derfor at næsten inge af de billine universel fjernbetjeninger kan benyttes sammen med B&O.

super_g >> Skal du ikke bruge CIR sammen med netop B&O er alt sikkert OK.

Avatar billede microtec Nybegynder
11. december 2000 - 10:36 #12
scb >> Hvis du har et fax-nummer vil jeg gerne faxe artiklen til dig. Jeg har en kopi lige her ved siden af mig. Jeg tror det har været et tillæg inde i bladet.
Avatar billede scb Praktikant
11. december 2000 - 10:58 #13
microtec >> Fax 75 16 89 09  Tak !
-SCB
Avatar billede driis Nybegynder
11. december 2000 - 17:33 #14
Mon ikke det her er API kald er noget, der kan bruges:
http://www.vbapi.com/ref/q/queryperformancecounter.html
Avatar billede super_g Nybegynder
11. december 2000 - 20:45 #15
Driis -> Det var lige det jeg ledte efter. Thx.
Avatar billede microtec Nybegynder
11. december 2000 - 21:48 #16
Bemærk lige denne sætningen i \"driis\" link:
\"However, not all systems support a high-performance timer\"

PS: Hvor fejt \"scb\", jeg trode det var spørgsmålets forfatter jeg faxede artiklen til :o)
Avatar billede super_g Nybegynder
11. december 2000 - 21:58 #17
Venligheden længe leve...
Avatar billede scb Praktikant
11. december 2000 - 23:09 #18
microtec >> Du skriver \"scb >> Hvis du har et faxnummer........\"
Det er ret svært at se at du mener en anden, men tak for artiklen, hvor der bl.a står:  time measurements are not really possible under windows because the operating system is allowed to break in any time....\"
Og det er jo det jeg har sagt hele tiden !
-SCB
Avatar billede microtec Nybegynder
12. december 2000 - 00:09 #19
SCB >> Ja, ved godt at jeg skrev \"scb\". Det gør skam heller ikke noget, jeg trode bare noget andet :o)

Ja. Dit citat er rigtigt. Det kan man ikke med mindre man benytter en HARDWARE timer til at lave målingen med. En software timer, som f.eks. det omtalte API vil ikke være præcis under et multi tasking system som Windows. Det er det der menes med \"...because the operating system is allowed to break in any time....\"
Software timeren er 100% gangbar under DOS (ak, hvor var verden let den gang).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester