Upgrade from Duet 2 wifi to Duet 3 6hc config Issues
-
@dc42 just X, Y & Z. Y and Z have dual motors with dual endstops.
-
@Alijambo73 took out all of the ' refrences do now it is like this
; Smart Drivers M569 P0.0 S0 D2 ; driver 0.0 goes backwards (X axis) M569 P0.1 S0 D2 ; driver 0.1 goes backwards (Y axis) M569 P0.2 S0 D2 ; driver 0.2 goes forwards (Z axis) M569 P0.3 S1 D2 ; driver 0.3 goes forwards (y1 axis) M569 P0.4 S0 D2 ; driver 0.4 goes forwards (z1 axis) ; Motor Idle Current Reduction M906 I30 ; set motor current idle factor M84 S30 ; set motor current idle timeout ; Axis M669 K0 ; set Cartesian kinematics M584 X0.0 Y0.1:0.3 Z0.2:0.4 ; set axis mapping M350 X16 Y16 Z16I1 ; configure microstepping with interpolation M906 X800 Y800 Z800 ; set axis driver currents M92 X100 Y100 Z400 ; configure steps per mm M566 X900 Y900 Z12 ; set maximum instantaneous speed changes (mm/min) M203 X6000 Y6000 Z180 ; set maximum speeds (mm/min) M201 X1500 Y1500 Z60 ; set accelerations (mm/s^2) ; Axis Limits M208 X0 Y0 Z-30 S1 ; set axis minimum M208 X1248 Y2470 Z100 S0 ; set axis maximum
Is this correct?
-
@droftarts I changed home Y and homex I even uncommented line 14 to make sure it wasn't used to see if the errror message would change the line number but I still get the exact same erroe meeage.
-
@Alijambo73 Please post your homeall.g, homex.g, homey.g and homez.g as they currently stand. If you have any other homing macros, post them too.
Ian
-
@droftarts Here are the current home files and config.g.
config.g
; Configuration file for RepRapFirmware on Duet 3 Main Board 6HC ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool v3.5.4 on Mon Sep 09 2024 22:47:07 GMT-0600 (Mountain Daylight Time) ; General G90 ; absolute coordinates M83 ; relative extruder moves M550 P"Duet3CNC" ; set hostname ; Accessories M575 P1 S0 B57600 ; configure PanelDue support ; Smart Drivers M569 P0.0 S0 D2 ; driver 0.0 goes backwards (X axis) M569 P0.1 S0 D2 ; driver 0.1 goes backwards (Y axis) M569 P0.2 S0 D2 ; driver 0.2 goes forwards (Z axis) M569 P0.3 S1 D2 ; driver 0.3 goes forwards (y1 axis) M569 P0.4 S0 D2 ; driver 0.4 goes forwards (z1 axis) ; Motor Idle Current Reduction M906 I30 ; set motor current idle factor M84 S30 ; set motor current idle timeout ; Axis M669 K0 ; set Cartesian kinematics M584 X0.0 Y0.1:0.3 Z0.2:0.4 ; set axis mapping M350 X16 Y16 Z16I1 ; configure microstepping with interpolation M906 X800 Y800 Z800 ; set axis driver currents M92 X100 Y100 Z400 ; configure steps per mm M566 X900 Y900 Z12 ; set maximum instantaneous speed changes (mm/min) M203 X6000 Y6000 Z180 ; set maximum speeds (mm/min) M201 X1500 Y1500 Z60 ; set accelerations (mm/s^2) ; Axis Limits M208 X0 Y0 Z-30 S1 ; set axis minimum M208 X1248 Y2470 Z100 S0 ; set axis maximum ; Kinematics M669 K0 ; configure Cartesian kinematics ; Probes M558 P1 C"io6.in" H5 F120 T6000 ; configure analog probe via slot #0 G31 P850 X0 Y0 Z13.95 ; set Z probe trigger value, offset and trigger height ; Endstops M574 X1 S1 P"io1.in" ; configure X axis endstop via pin io1.in M574 Y1 S1 P"io2.in+io3.in" ; configure active-high endstop for low end on Y via pin io2.in + io3.in M574 Z2 S1 P"io4.in+io5.in" ; configure active-high endstop for high end on Z via pin io4.in + io5.in ;M666 Y+2 ; move Y1 motor -1.5 from block to adjust for square ; Heaters M140 H-1 ; disable heated bed (overrides default heater mapping) M141 H-1 ; Spindles M950 R0 C"out9" Q1000 L10000:30000 ; configure spindle #0 M563 P1 S"Makita R0701C" R0 ; create tool #0 M453 ; set to CNC mode ; Lasers ;M950 c"io7.out" S1 Q500 M452 C"io7.out" F500 R255 S1 ; configure Laser port ; Tools M563 P2 S"Laser" ;M568 P0 F0 ; set initial tool #0 active and standby temperatures to 0C ; Miscellaneous M452 ; select Laser mode T0 ; select first tool M308 S10 Y"mcu-temp" A"MCU" M308 S11 Y"drivers" A"Steppers"
homey.g
; home'y.g ; called to home the y axis ; ; generated by RepRapFirmware Configuration Tool v3.5.4 on Mon Sep 09 2024 22:47:08 GMT-0600 (Mountain Daylight Time) ; increase Z G91 ; relative positioning G1 H2 Z5 ; move Z relative to current position to avoid dragging nozzle over the bed G90 ; absolute positioning ; home y G91 ; relative positioning var maxTravel = move.axes[3].max - move.axes[3].min + 5 ; calculate how far y can travel plus 5mm G1 H1 Y{-var.maxTravel} F3000; coarse home in the -y direction G1 Y5 F7200 ; move back 5mm G1 H1 Y{-var.maxTravel} F3000 ; fine home in the -y direction G90 ; absolute positioning ; decrease Z again G91 ; relative positioning G1 H2 Z-5 F7200 ; move Z relative to current position G90 ; absolute positioning
homex.g
; homex.g ; called to home the X axis ; ; generated by RepRapFirmware Configuration Tool v3.5.4 on Mon Sep 09 2024 22:47:08 GMT-0600 (Mountain Daylight Time) ; increase Z G91 ; relative positioning G1 H2 Z5 ; move Z relative to current position to avoid dragging nozzle over the bed G90 ; absolute positioning ; home X G91 ; relative positioning var maxTravel = move.axes[0].max - move.axes[0].min + 5 ; calculate how far X can travel plus 5mm G1 H1 X{-var.maxTravel} F6000 ; coarse home in the -X direction G1 X5 F7200 ; move back 5mm G1 H1 X{-var.maxTravel} F300 ; fine home in the -X direction G90 ; absolute positioning ; decrease Z again G91 ; relative positioning G1 H2 Z-5 F7200 ; move Z relative to current position G90 ; absolute positioning
homez.g
; homez.g ; called to home the Z axis ; ; generated by RepRapFirmware Configuration Tool v3.5.4 on Mon Sep 09 2024 22:47:08 GMT-0600 (Mountain Daylight Time) ; increase Z G91 ; relative positioning G1 H2 Z5 ; move Z relative to current position to avoid dragging nozzle over the bed G90 ; absolute positioning ; home Z var xCenter = move.compensation.probeGrid.mins[0] + (move.compensation.probeGrid.maxs[0] - move.compensation.probeGrid.mins[0]) / 2 - sensors.probes[0].offsets[0] var yCenter = move.compensation.probeGrid.mins[1] + (move.compensation.probeGrid.maxs[1] - move.compensation.probeGrid.mins[1]) / 2 - sensors.probes[0].offsets[1] G1 X{var.xCenter} Y{var.yCenter} F7200 ; go to bed centre G30 ; probe the bed
homeall.g
; homeall.g ; called to home all axes ; ; generated by RepRapFirmware Configuration Tool v3.5.4 on Mon Sep 09 2024 22:47:08 GMT-0600 (Mountain Daylight Time) ; increase Z G91 ; relative positioning G1 H2 Z5 F7200 ; move Z relative to current position to avoid dragging nozzle over the bed G90 ; absolute positioning ; home XY var XTravel = move.axes[0].max - move.axes[0].min + 5 ; calculate how far X can travel plus 5mm var YTravel = move.axes[1].max - move.axes[1].min + 5 ; calculate how far Y can travel plus 5mm G91 ; relative positioning G1 H1 X{-var.xTravel} Y{-var.yTravel} F6000 ; coarse home in the -X and -Y directions G1 H2 X5 Y5 F7200 ; move back 5mm G1 H1 X{-var.xTravel} Y{-var.yTravel} F300 ; fine home in the -X and -Y directions G90 ; absolute positioning ; home Z var XCenter = move.compensation.probeGrid.mins[0] + (move.compensation.probeGrid.maxs[0] - move.compensation.probeGrid.mins[0]) / 2 - sensors.probes[0].offsets[0] var YCenter = move.compensation.probeGrid.mins[1] + (move.compensation.probeGrid.maxs[1] - move.compensation.probeGrid.mins[1]) / 2 - sensors.probes[0].offsets[1] G1 X{var.xCenter} Y{var.yCenter} F7200 ; go to bed centre G30 ; probe the bed M98 P"home'y.g" ; home y axis M98 P"home'z.g" ; home z axis
-
@Alijambo73 said in Upgrade from Duet 2 wifi to Duet 3 6hc config Issues:
This is line 14 of homez.g:
G1 X{var.xCenter} Y{var.yCenter} F7200 ; go to bed centre
This will give an error if X and Y are not homed already.
In your homeall.g, you still have these two lines:
M98 P"home'y.g" ; home y axis
M98 P"home'z.g" ; home z axisDo you still have these macros in your sys folder? If not, delete them.
Ian
-
@droftarts Thank you for lookinh into this.
I deleted the 2 lines from homeall.g but I still get "Error: in file macro line 14: G1: insufficient axes homed"
If I home X and Y I get " Error: in file macro line 14: G1: target position outside machine limits".Here are the current files for reference
homeall.g
; homeall.g ; called to home all axes ; ; generated by RepRapFirmware Configuration Tool v3.5.4 on Mon Sep 09 2024 22:47:08 GMT-0600 (Mountain Daylight Time) ; increase Z G91 ; relative positioning G1 H2 Z5 F7200 ; move Z relative to current position to avoid dragging nozzle over the bed G90 ; absolute positioning ; home XY var xTravel = move.axes[0].max - move.axes[0].min + 5 ; calculate how far X can travel plus 5mm var yTravel = move.axes[1].max - move.axes[1].min + 5 ; calculate how far Y can travel plus 5mm ;G91 ; relative positioning G1 H1 X{-var.xTravel} Y{-var.yTravel} F6000 ; coarse home in the -X and -Y directions G1 H2 X5 Y5 F7200 ; move back 5mm G1 H1 X{-var.xTravel} Y{-var.yTravel} F300 ; fine home in the -X and -Y directions G90 ; absolute positioning ; home Z var xCenter = move.compensation.probeGrid.mins[0] + (move.compensation.probeGrid.maxs[0] - move.compensation.probeGrid.mins[0]) / 2 - sensors.probes[0].offsets[0] var yCenter = move.compensation.probeGrid.mins[1] + (move.compensation.probeGrid.maxs[1] - move.compensation.probeGrid.mins[1]) / 2 - sensors.probes[0].offsets[1] G1 X{var.xCenter} Y{var.yCenter} F7200 ; go to bed centre G30 ; probe the bed
homez.g
; homez.g ; called to home the Z axis ; ; generated by RepRapFirmware Configuration Tool v3.5.4 on Mon Sep 09 2024 22:47:08 GMT-0600 (Mountain Daylight Time) ; increase Z G91 ; relative positioning G1 H2 Z5 ; move Z relative to current position to avoid dragging nozzle over the bed G90 ; absolute positioning ; home Z var xCenter = move.compensation.probeGrid.mins[0] + (move.compensation.probeGrid.maxs[0] - move.compensation.probeGrid.mins[0]) / 2 - sensors.probes[0].offsets[0] var yCenter = move.compensation.probeGrid.mins[1] + (move.compensation.probeGrid.maxs[1] - move.compensation.probeGrid.mins[1]) / 2 - sensors.probes[0].offsets[1] G1 X{var.xCenter} Y{var.yCenter} F7200 ; go to bed centre G30 ; probe the bed
config.g
; Configuration file for RepRapFirmware on Duet 3 Main Board 6HC ; executed by the firmware on start-up ; ; generated by RepRapFirmware Configuration Tool v3.5.4 on Mon Sep 09 2024 22:47:07 GMT-0600 (Mountain Daylight Time) ; General G90 ; absolute coordinates M83 ; relative extruder moves M550 P"Duet3CNC" ; set hostname ; Accessories M575 P1 S0 B57600 ; configure PanelDue support ; Smart Drivers M569 P0.0 S0 D2 ; driver 0.0 goes backwards (X axis) M569 P0.1 S0 D2 ; driver 0.1 goes backwards (Y axis) M569 P0.2 S0 D2 ; driver 0.2 goes forwards (Z axis) M569 P0.3 S1 D2 ; driver 0.3 goes forwards (y1 axis) M569 P0.4 S0 D2 ; driver 0.4 goes forwards (z1 axis) ; Motor Idle Current Reduction M906 I30 ; set motor current idle factor M84 S30 ; set motor current idle timeout ; Axis M669 K0 ; set Cartesian kinematics M584 X0.0 Y0.1:0.3 Z0.2:0.4 ; set axis mapping M350 X16 Y16 Z16I1 ; configure microstepping with interpolation M906 X800 Y800 Z800 ; set axis driver currents M92 X100 Y100 Z400 ; configure steps per mm M566 X900 Y900 Z12 ; set maximum instantaneous speed changes (mm/min) M203 X6000 Y6000 Z180 ; set maximum speeds (mm/min) M201 X1500 Y1500 Z60 ; set accelerations (mm/s^2) ; Axis Limits M208 X0 Y0 Z-30 S1 ; set axis minimum M208 X1248 Y2470 Z200 S0 ; set axis maximum ; Kinematics ;M669 K0 ; configure Cartesian kinematics ; Probes M558 P5 C"io6.in" H5 F120 T6000 ; configure analog probe via slot #0 G31 P850 X0 Y0 Z13.95 ; set Z probe trigger value, offset and trigger height ; Endstops M574 X1 S1 P"io1.in" ; configure X axis endstop via pin io1.in M574 Y1 S1 P"io2.in+io3.in" ; configure active-high endstop for low end on Y via pin io2.in + io3.in M574 Z2 S1 P"io4.in+io5.in" ; configure active-high endstop for high end on Z via pin io4.in + io5.in ;M666 Y+2 ; move Y1 motor -1.5 from block to adjust for square ; Heaters M140 H-1 ; disable heated bed (overrides default heater mapping) M141 H-1 ; Spindles M950 R0 C"out9" Q1000 L10000:30000 ; configure spindle #0 M563 P1 S"Makita R0701C" R0 ; create tool #0 M453 ; set to CNC mode ; Lasers ;M950 c"io7.out" S1 Q500 M452 C"io7.out" F500 R255 S1 ; configure Laser port ; Tools M563 P2 S"Laser" ;M568 P0 F0 ; set initial tool #0 active and standby temperatures to 0C ; Miscellaneous M452 ; select Laser mode T0 ; select first tool M308 S10 Y"mcu-temp" A"MCU" M308 S11 P"DRIVER_0" Y"drivers" A"X Driver" M308 S12 P"DRIVER_1" Y"drivers" A"Y Driver" M308 S13 P"DRIVER_3" Y"drivers" A"Y1 Driver" M308 S14 P"DRIVER_2" Y"drivers" A"Z Driver" M308 S15 P"DRIVER_4" Y"drivers" A"Z1 Driver"
-
Can you send M98 P"config.g" in the gcode console and share any errors that result?
-
@Alijambo73 said in Upgrade from Duet 2 wifi to Duet 3 6hc config Issues:
M350 X16 Y16 Z16I1 ; configure microstepping with interpolation
You're missing a space between the Z16 and I1
-
@Alijambo73 said in Upgrade from Duet 2 wifi to Duet 3 6hc config Issues:
;G91 ; relative positioning
In your homeall you should not comment out that G91. You want to be in relative mode for those X Y homing moves.
-
@Phaedrux I made the 2 changes. When I enter M98 P"config.g" into the console it just shows M98 P"config.g" with a green background and does not report any errors.
-
Can you send M122 in the console and share the report here?
Are you still getting that error message when homing?
How are you triggering the homing? -
@Phaedrux I'm still getting the both error messages.
Im using Home Z on the DWC dashboard.
Here is the M122 results
9/19/2024, 2:54:10 PM m122
=== Diagnostics ===
RepRapFirmware for Duet 3 MB6HC version 3.5.2 (2024-06-11 17:13:58) running on Duet 3 MB6HC v1.01 (SBC mode)
Board ID: 0JD2M-9P9DA-F0PS8-6JKD6-3S06P-1NUR2
Used output buffers: 1 of 40 (17 max)
=== RTOS ===
Static ram: 155360
Dynamic ram: 90872 of which 216 recycled
Never used RAM 96616, free system stack 146 words
Tasks: LASER(5,nWait 7,0.0%,235) SBC(2,ready,0.7%,837) HEAT(3,nWait 1,0.0%,341) Move(4,nWait 6,0.0%,238) CanReceiv(6,nWait 1,0.0%,939) CanSender(5,nWait 7,0.0%,334) CanClock(7,delaying,0.0%,336) TMC(4,nWait 6,9.5%,55) MAIN(2,running,89.7%,101) IDLE(0,ready,0.1%,29), total 100.0%
Owned mutexes: HTTP(MAIN)
=== Platform ===
Last reset 00:38:32 ago, cause: software
Last software reset at 2024-09-19 14:15, reason: User, Gcodes spinning, available RAM 96688, slot 2
Software reset code 0x6003 HFSR 0x00000000 CFSR 0x00000000 ICSR 0x0044a000 BFAR 0x00000000 SP 0x00000000 Task SBC Freestk 0 n/a
Error status: 0x00
Aux0 errors 0,0,0
MCU temperature: min 45.1, current 45.6, max 45.8
Supply voltage: min 12.0, current 12.1, max 12.2, under voltage events: 0, over voltage events: 0, power good: yes
12V rail voltage: min 11.2, current 11.2, max 11.3, under voltage events: 0
Heap OK, handles allocated/used 99/0, heap memory allocated/used/recyclable 2048/180/180, gc cycles 0
Events: 0 queued, 0 completed
Driver 0: standstill, SG min 0, mspos 472, reads 28165, writes 9 timeouts 0
Driver 1: standstill, SG min 0, mspos 424, reads 28165, writes 9 timeouts 0
Driver 2: standstill, SG min 0, mspos 520, reads 28161, writes 13 timeouts 0
Driver 3: standstill, SG min 0, mspos 984, reads 28164, writes 9 timeouts 0
Driver 4: standstill, SG min 0, mspos 776, reads 28160, writes 13 timeouts 0
Driver 5: standstill, SG min n/a, mspos 8, reads 28173, writes 0 timeouts 0
Date/time: 2024-09-19 14:54:13
Slowest loop: 83.76ms; fastest: 0.05ms
=== Storage ===
Free file entries: 20
SD card 0 not detected, interface speed: 37.5MBytes/sec
SD card longest read time 0.0ms, write time 0.0ms, max retries 0
=== Move ===
DMs created 125, segments created 3, maxWait 2048692ms, bed compensation in use: none, height map offset 0.000, max steps late 0, min interval 0, bad calcs 0, ebfmin 0.00, ebfmax 0.00
no step interrupt scheduled
Moves shaped first try 0, on retry 0, too short 0, wrong shape 0, maybepossible 0
=== DDARing 0 ===
Scheduled moves 20, completed 20, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
=== DDARing 1 ===
Scheduled moves 0, completed 0, hiccups 0, stepErrors 0, LaErrors 0, Underruns [0, 0, 0], CDDA state -1
=== Heat ===
Bed heaters -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1, chamber heaters -1 -1 -1 -1, ordering errs 0
=== GCodes ===
Movement locks held by null, null
HTTP* is doing "M122" in state(s) 0
Telnet is idle in state(s) 0
File is idle in state(s) 0
USB is idle in state(s) 0
Aux is idle in state(s) 0
Trigger* is idle in state(s) 0
Queue is idle in state(s) 0
LCD is idle in state(s) 0
SBC is idle in state(s) 0
Daemon is idle in state(s) 0
Aux2 is idle in state(s) 0
Autopause is idle in state(s) 0
File2 is idle in state(s) 0
Queue2 is idle in state(s) 0
Q0 segments left 0, axes/extruders owned 0x0000007
Code queue 0 is empty
Q1 segments left 0, axes/extruders owned 0x0000000
Code queue 1 is empty
=== CAN ===
Messages queued 2837, received 0, lost 0, errs 1493127, boc 0
Longest wait 0ms for reply type 0, peak Tx sync delay 0, free buffers 50 (min 50), ts 1576/0/0
Tx timeouts 0,0,1576,0,0,1261 last cancelled message type 30 dest 127
=== SBC interface ===
Transfer state: 5, failed transfers: 0, checksum errors: 0
RX/TX seq numbers: 7250/7250
SPI underruns 0, overruns 0
State: 5, disconnects: 1, timeouts: 1 total, 1 by SBC, IAP RAM available 0x24cfc
Buffer RX/TX: 0/0-0, open files: 0
=== Duet Control Server ===
Duet Control Server version 3.5.2 (2024-06-12 07:12:47, 64-bit)
HTTP+Executed:Executing M122
Code buffer space: 4096
Configured SPI speed: 8000000Hz, TfrRdy pin glitches: 0
Full transfers per second: 39.42, max time between full transfers: 62.3ms, max pin wait times: 64.4ms/2.0ms
Codes per second: 0.40
Maximum length of RX/TX data transfers: 4392/316 -
@Alijambo73 Could this have anything to do with the Z-probe? I havent connected it to the board yet.![alt text
-
@Phaedrux how do I find the macros file the errors is referring to?
-
@Alijambo73 Your Z-Probe is reading 1000, which means it is already triggered, and G30 won't work because it will see that the probe is already triggered. You won't get a sensible reading, going from 0 (not triggered) to 1000 (triggered) if you haven't connected the probe yet.
Are your X and Y endstops connected? If the endstop plugin is saying they are triggered, are the X and Y axes actually touching them? Or are they incorrectly reporting triggered when they are not?
how do I find the macros file the errors is referring to?
RepRapFirmware does not currently return the name of the macro that reports an error (though this is a feature request). However, it's pretty clear it's the homez.g macro. When homing with G30, X and Y MUST be homed first. But then, without the probe connected, G30 isn't going to work either.
Ian
-
@droftarts I have 5 endstops that are all switches. 1 on x 2 on y and 2 on z.
When I use the end stop monitor plug in they all seem to be working correctly. The screenshot shows that x and y are homed which was correct. I can manually trigger the 2 end stops Z and see that thay appear to be working too.
I have a probe to find 0 on the material. The 2 endstops used to home z are set to find the high end.
I'm thinking there is something in the config of the touchplate probe that is incorrect. I commented out the probe but the behavior remained the same.
Can you see where I have made a mistake with between the endstops and touch plate probe?
-
@Alijambo73 What type is your z probe? Is it like a switch?
-
@Alijambo73 Your home Z uses G30 to home, which is using the probe, not the Z endstops. If you want to use the Z endstops, you need to change homez.g to use them. Currently in homez.g you have:
; homez.g ; called to home the Z axis ; ; generated by RepRapFirmware Configuration Tool v3.5.4 on Mon Sep 09 2024 22:47:08 GMT-0600 (Mountain Daylight Time) ; increase Z G91 ; relative positioning G1 H2 Z5 ; move Z relative to current position to avoid dragging nozzle over the bed G90 ; absolute positioning ; home Z var xCenter = move.compensation.probeGrid.mins[0] + (move.compensation.probeGrid.maxs[0] - move.compensation.probeGrid.mins[0]) / 2 - sensors.probes[0].offsets[0] var yCenter = move.compensation.probeGrid.mins[1] + (move.compensation.probeGrid.maxs[1] - move.compensation.probeGrid.mins[1]) / 2 - sensors.probes[0].offsets[1] G1 X{var.xCenter} Y{var.yCenter} F7200 ; go to bed centre G30 ; probe the bed
Change it to:
; home Z var zTravel = move.axes[2].max - move.axes[2].min + 5 ; calculate how far Z can travel plus 5mm G91 ; relative positioning G1 H1 Z{-var.zTravel} F600 ; coarse home in the -Z direction G1 H2 Z5 F6000 ; move back 5mm G1 H1 Z-10 F300 ; fine home in the -Z direction G90 ; absolute positioning
You will need to change the 'home Z' section of homeall.g too. You should also be able to home Z without having to home X and Y first.
Ian
-
@droftarts I'm using a touch plate like this.