When trying to upgrade grbl on the arduino clone... key takeaway point, doing this (https://www.arduino.cc/en/Tutorial/ArduinoISP) does not allow you to burn the grbl 'sketch', only the bootloader, after that, you have to switch over to using the rx and tx pins to program the sketch with a USB-to-serial converter.
It seems to have worked when compiled for 'Arduino Pro or Pro Mini (5V, 16MHz) w/ ATmega328' I also see that using the Arduino-as-ISP should work for programming sketches, but you don't use the normal Arduino IDE "upload" button. Instead you use "File" -> "Upload using Programmer" (see)
Settings copied from this link
Grbl 0.9j ['$' for help]
>>> $$
$0=100 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=2 (dir port invert mask:00000010)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=250.000 (homing feed, mm/min)
$25=250.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=10.000 (homing pull-off, mm)
$100=80.000 (x, step/mm)
$101=80.000 (y, step/mm)
$102=80.000 (z, step/mm)
$110=750.000 (x max rate, mm/min)
$111=750.000 (y max rate, mm/min)
$112=500.000 (z max rate, mm/min)
$120=1000.000 (x accel, mm/sec^2)
$121=1000.000 (y accel, mm/sec^2)
$122=10.000 (z accel, mm/sec^2)
$130=175.000 (x max travel, mm)
$131=1200.000 (y max travel, mm)
$132=175.000 (z max travel, mm)
ok
ATmega328 TQFP pinout:.
Updating to GRBL 0.9 to use PWM, reworking PCB to filter PWM and adjust an LM317T to buffer the laser voltage.
Results
Using M3 to turn on the laser (spindle on) then using S0, S100, S200 (max is S1000) I could see the voltage step as expected. When I connected the laser, it started to get dimly visible around S160