Hej! Kolla på API-funktionerna QueryPerformanceCounter och QueryPerformanceFrequency Tack, det har jag gjort redan och då kan jag räkna ut det "exakta" tidsintervallet mellan två event, men problemet är att få eventen med kortare intervall. Windows är inget realtidsoperativ så det går inte att få någon precision överhuvudtaget. Jag har ett datainsamlingskort med två räknare på som räknar pulser från två pulsgivare. Tillhörande driver till kortet stöder tyvärr inte interrupt. Därför vill jag kunna generera min sampeltid med PC'n och läsa av de två räknarn med jämna mellanrum, typ varje 1 ms. Varför måste du läsa av räknarna så ofta? Finns det inte nyare drivrutiner tillgängliga? Verkar konstigt att kortet stöder avbrott men drivarna inte... Jag har byggt en .DLL som använder API <b>Private Declare Function GetTickCount& Lib "kernel32" ()</b> Sven, är du säker att du får 1 ms noggrannhet? Här är en intressant artikel om upplösningen på olika timers http://support.microsoft.com/kb/172338. Nej det är jag inte därför använder jag räknaren på så sätt att jag låter datorns kapacitet Tack alla!Snabbtimer / interrupt
Jag har en applikation där jag vill ha ett event med god precision varje 1ms (eller kanske tom lite snabbare). Vad jag vet genererar inte Windows / Visual Basic händelser snabbare än ca 10ms även om du ställer in en timer på en scantid av 1ms, och att precisionen i intervallet mellan dessa event är det lite si och så med.
Går detta att gå runt eller har saker ändrats på Windows nya operativ?
Min applikaion går ut på att läsa av en hårdvaruräknare med jämna snabba intervall.
Jag kör Windows 2000 och VB6.
Några ideer?
Mvh
Sv: Snabbtimer / interrupt
Sv:Snabbtimer / interrupt
Sv: Snabbtimer / interrupt
Enda möjligheten är hårdvaruavbrott men då måste du skriva en driver.
Kan du inte beskriva vad det är du vill göra?
Sv:Snabbtimer / interrupt
Kortet har en inbyggd klocka som kan generera interrupt om jag förstått kortmanualen rätt, men drivern stöder alltså inte detta.
Kan jag skriva en egen driver som kollar IRQ7, men i övrigt använder jag den medföljande drivern för att läsa av räknarna?
Finns det något generellt program där jag direkt kan se om kortet spottar ur sig interrupt på IRQ7 överhuvud taget?
MvhSv: Snabbtimer / interrupt
Räcker det inte att se hur mycket de har förändrats sen sist och se hur mycket tid som gått?Sv:Snabbtimer / interrupt
Sv: Snabbtimer / interrupt
Den räknar med 1 ms noggranhet. Jag använder den på så sätt att jag låter den gå
i en Loop under ex 1 sek. Jag räknar hur många hårdvarupulser det kommit under denna sek
och leverera ett svar varje ~ 1.2 sek . Starta ny mätning och nytt svar. Ungefär så på parallellporten.
Kan det vara något ?Sv:Snabbtimer / interrupt
Sv: Snabbtimer / interrupt
jobba i en loop under en längre tid(i detta sammanhang) tex 1 sek.
Då får jag låt oss säga 1 000 000 samplingar. Genom att jämföra antal samplingar med i detta fall
1000 +- ev. några ms så blir felet försumbart.
Nackdel är att du får ett resultat som är ~ 1 sek gammalt.
VB timern har 1/18 sek upplösning . DVS om du ställer Timer1.Interval 10 ms
så kommer det ändå bli ~ 56 ms.
Jag har en komponent som du kan få HiTime32.ocx den klarar "1 ms"
Är en kopia av Timer1 men med bättre prestanda.
Men om noggrannhet är det viktigaste så är sampling den bästa metoden.Sv:Snabbtimer / interrupt
Jag har nu löst problemet. Jag har gått över till C++, där det fanns en del exempel från tillverkaren som tar hand om interruptet från kortet. Det finns alltså stöd för event för C++ men inte för VB i drivrutinen. Antar att man inte behöver exponera alla metoder/event till typlibet från drivern till VB. Det fanns även en ActiveX från tillverkaren som jag drog in i VB, men den stödde inte heller detta speciella interrupt som jag är ute efter (däremot en del andra interrupt).
Jag har ändå fått svar på min fråga och uppgiften kan lösas, om än med andra medel än det från början var tänkt :)
Mvh