Its not really limited to 8 shades of grey. Its a little complex the way it works, but the number of shades of grey is related to the X steps per unit. Lets say you have 1000 steps per mm and your picture will be 100mm's wide. If the picture also is 100 pixels wide, ( to make it easy), we then have 1000 stepper motor steps per pixel of the image. My point here is we calculate the number of steps per pixel of the final output.
We then load a pixel value from 0 - 255 and calculate that as a number from 0 - 1 and multiply that by the 1000 steps / pixel to come up with an iterator. We then, for 1 thousand steps , add the iterator to a variable that starts at zero. Each tiime the answer is less than the number of steps per pixel, we set the trigger for that step to zero, if the total is more than the number of steps per pixel, we set the trigger to 1 and subtract the number of steps per pixel from the total. We repeat this until the trigger buffer is full.
This means that the number of grey shades is related to the steps/mm and the output width and the picture width. In the end its basically related to the "steps per pixel" of the output. The actual greyscale that results is not limited to 8, but to about 255, and each image has a differing grey scale resolution.
Art