10. december 2000 - 23:45Der 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
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\".
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
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
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.
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
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.
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.
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
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).
Synes godt om
Ny brugerNybegynder
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.