One way to achieve a smooth needle movement is to continuously modify the velocity based on the distance the needle has to move. The larger the distance, the shorter the time interval between steps. You would constantly compare the present position with the desired position. The absolute value of the difference would be used to govern the current step rate. The sign of the difference would be used to determine the direction of the step. In pseudo-code the procedure would be something like this: Initialization: Home stepper motor to 0 position Clear CurrentValue to 0 Set Direction to UP Set TargetValue to 0 Set Difference to 0 StepperMeter: (Main Routine) Call GetTargetValue. . Call FindDifference. Call OneStep. Call FindDifference. Call DelayDifference. Goto StepperMeter. GetTargetValue: (Subroutine) Check availability of new value. IF nothing new to be acquired THEN Return. ENDIF Acquire TargetValue via ADC/SerialPort, or via other means. Convert TargetValue into 8 bit form if not already received in this form. <8 bit unsigned binary.> Return with 8 bit value in TargetValue. FindDifference: (Subroutine) Compare TargetValue and CurrentValue IF TargetValue=CurrentValue THEN set Difference to 0 set Direction to UP Return. ENDIF IF TargetValue>CurrentValue THEN set Difference to TargetValue-CurrentValue set Direction to UP Return ENDIF IF CurrentValue>TargetValue THEN set Difference to CurrentValue-TargetValue set Direction to DOWN Return ENDIF OneStep: (Subroutine) IF Difference=0 THEN Return. ENDIF IF Direction=UP THEN step up once decrement Difference Return ENDIF IF Direction=DOWN THEN step down once decrement Difference Return ENDIF DelayDifference: (Subroutine) IF Difference=0 THEN Return. ENDIF Compute number of extra delay units: Units=255-Difference IF Units=0 THEN Set Units to 1 ENDIF Call StepTime (minimum step time) DelayLoop: Call IttyBittyTime Decrement Units IF Units>0 THEN Goto DelayLoop ENDIF Return StepTime: (Subroutine) Delay for 5 milliseconds (or whatever min step time is) Return IttyBittyTime: (Subroutine) Delay for 100 microseconds (experiment with this value) Return ************** Fr. Tom McGahee