Hejsa,
til styring af en saftevandsautomat har jeg lavet følgende delayløkke i
Visual C++:
// #includes og #defines ikke med i denne kodesnip
#define Noedstop_L 16 // bit nummer 5
const int interval=10, saftTid=300; // saftTid 300
millisekunder
DigitalOutput( SAFT+VAND ); // Åbner ventiler
for( int i=0; i<saftTid/interval; ++i) // Delay saftTid +
overhead
{
_sleep(interval);
if( !(DigitalInput() & Noedstop_L) ) // Hvis nødstop aktiveres
fastholdes løkken
--i; // så
påfyldning kan genoptages. Ventiler lukkes aut.
// af
nødstop HW.
}
DigitalOutput( 0 ); // Lukker
ventiler
Hver indgang på i/o-kortet svarer til en bit ud af otte, der læses samtidigt
med DigitalInput().
Hvis jeg forstår det ret vil !(DigitalInput() & Noedstop_L) kun være sandt,
når Noedstop_L er aktiv (lav)?
Mit andet spørgsmål går på præcissionen af _sleep() kaldet. Jeg har læst at
mange timere bruger BIOSs 55 ms tick, men gælder det også for sleep-timeren?
Altså skal jeg sætte interval = 55/n for at få bedst præcision?
Jeg ved godt at overhead i løkken, accesstid på kortet og reaktionstid på
ventilerne sætter en grænse, men det kan jo ligesågodt blive bedst muligt.
mvh.
Kasper
---
Denne mail er kontrolleret for virus med AVG. Sidst opdateret 4/12-01.
Checked by AVG anti-virus system (
http://www.grisoft.com).
Version: 6.0.307 / Virus Database: 168 - Release Date: 11-12-01