Jag vill mäta varvtalet noggrant på en axel för att kunna räkna fram accelerationen på densamma.
Detta helst utan att använda någon microprocessor utan direkt till en PC. DOS eller WinX spelar ingen roll.
Hårdvaran levererar en puls/varv.
Pulsernas längd är mellan 0.2-0.01 sekunder.
Hur programmerar man detta?
Vilket är bäst att använda: COM-port eller LPT-port?
/Klas
Mäta pulser med mikrosekunds upplösning.
Kan bara säga 1 sak: glöm det direkt!
Du har INTE den upplösningsmöjlighet i en PC helt enkelt, även med DOS finns det ett antal interrupts som kan ställa till det med alla tidsmätningar, speciellt i den upplösning.
"Pulsernas längd är mellan 0.2-0.01 sekunder.".... ööööhhh du menar kanske att pulsernas stigande flank kommer med mellan 5Hz och 100Hz?
Att mäta med 1µs upplösning är alltså 1MHz på en timer, för att greja detta behövs minst en 18-bitars räknare (0,2 sek @ 1MHz = 200.000 = 30D40h).
Till och med om man använder en µC kan det bli knepigt att få till ordentligt, inte själva mätningen men överförandet av värden till PC'n.
Du har INTE den upplösningsmöjlighet i en PC helt enkelt, även med DOS finns det ett antal interrupts som kan ställa till det med alla tidsmätningar, speciellt i den upplösning.
"Pulsernas längd är mellan 0.2-0.01 sekunder.".... ööööhhh du menar kanske att pulsernas stigande flank kommer med mellan 5Hz och 100Hz?
Att mäta med 1µs upplösning är alltså 1MHz på en timer, för att greja detta behövs minst en 18-bitars räknare (0,2 sek @ 1MHz = 200.000 = 30D40h).
Till och med om man använder en µC kan det bli knepigt att få till ordentligt, inte själva mätningen men överförandet av värden till PC'n.
Även om du kör DOS eller utan OS, stänger av alla interrupt och gör allt du kan vete tusan om du kan räkna med sån precision på PC:n, och då har du bundit upp en dator för att göra något som en uC för några tior fixar bättre.
Bara man har UART i uC:n så borde det väl inte vara några problem med överföring heller. På datorsidan behövs inget krångligare än ett terminalprogram i princip.
Bara man har UART i uC:n så borde det väl inte vara några problem med överföring heller. På datorsidan behövs inget krångligare än ett terminalprogram i princip.
Nja.... överförningen är inte så himla enkel ändå.
Om vi antar att det ska överföras 3 bytes per puls ska det alltså överföras minst 300 bytes/sekund vid högsta hastighet och såklart helst mer. Detta ger att data ska överföras med minst 3,6KBaud. Dock medger detta ingen synkronisering så om man missar en byte är resten av överföringarna helt fel fram till en synkronisering sker. Denna synkronisering kan ske på olika sätt men resultatet gör att man måste lägga till minst 1 byte per datablock vilket såklart betyder att överföringshastigheten måste ökas.
Sen är 9600 baud ju inget problem heller.... men synkroniseringen kan behöva tänkas igenom ordentligt.
Om vi antar att det ska överföras 3 bytes per puls ska det alltså överföras minst 300 bytes/sekund vid högsta hastighet och såklart helst mer. Detta ger att data ska överföras med minst 3,6KBaud. Dock medger detta ingen synkronisering så om man missar en byte är resten av överföringarna helt fel fram till en synkronisering sker. Denna synkronisering kan ske på olika sätt men resultatet gör att man måste lägga till minst 1 byte per datablock vilket såklart betyder att överföringshastigheten måste ökas.
Sen är 9600 baud ju inget problem heller.... men synkroniseringen kan behöva tänkas igenom ordentligt.
Ptja... Men med hårdvaru-UART är det väl bara att dra på med t.ex. 19200 eller 38400 och skicka data t.ex. som BCD med en synk-byte med ogiltiga BCD-värden. Eller som ASCII med space eller CR som synk. Eller så sprider man ut 21 databitar på 3 byte med en etta på sista positionen i den första byten och en nolla på de andra.
Möjligheterna är många
Möjligheterna är många

I princip funkar det att köra via parallelportsinterrupten. Med http://entechtaiwan.net/dev/hw32/index.shtm kan man lägga till en interrupt hanterare som läster av performance countern i CPU när interruptet kommer.
Vi har kört med det i vissa sammanhang, och jag kommer inte ihåg vad vi hade för jitter, men det var i microsekundsnivån.
Har man hårdvara med dåligt skrivna drivrutiner i burken kan det ställa till det, ska tilläggas.
Sedan kan man ju då se till att man får fler pulser per varv och på så vis kunna filtrerar fram en bättre tid.
Vi har kört med det i vissa sammanhang, och jag kommer inte ihåg vad vi hade för jitter, men det var i microsekundsnivån.
Har man hårdvara med dåligt skrivna drivrutiner i burken kan det ställa till det, ska tilläggas.
Sedan kan man ju då se till att man får fler pulser per varv och på så vis kunna filtrerar fram en bättre tid.