Just ran into this problem myself and came up with a workable solution.
I took a look at the limit switches and noticed that there isn’t a physical X_MAX limit switch so you can simply change the firmware and then swap the connectors. Tested with the octopus and it printed just fine.
First thing you want to do however is home the machine then run an M119 to see if Z_MIN is being triggered. If it is, then measure the voltage from the top metal casing of the tool head to any of the metal pads on the bedplate. If it is not 5v then there is something wrong.
Turn off the printer, open up the case, and disconnect the Z_MIN connector. Turn on the printer, home the printer, and run a M119 to see if Z_MIN is still triggered. If it is, then that means that pin 10 on the Atmega2560 is broken. Turn off the printer, disconnect X_MAX and plug the Z_MIN connector into the X_MAX slot. Leave the old X_MAX connector disconnected. Reattach the case.
Get the current lulzbot mini firmware here (126.96.36.199 is current as of this post):
Download the zip file. In this case Marlin-src_188.8.131.52_5f9c029d1.zip
Extract the folder and edit two files:
- Marlin/pins_MINIRAMBO.h line 37. This will change the broken Z_MIN pin 10 to a working X_MAX pin 30. The X_MAX pin will now always read TRIGGERED but Z_MIN will function properly.
// Limit Switches
// switching X_MAX (30) with Z_MIN (10)
#define X_MIN_PIN 12
#define X_MAX_PIN 10
#define Y_MIN_PIN 11
#define Y_MAX_PIN 24
#define Z_MIN_PIN 30
#define Z_MAX_PIN 23
- Marlin/Configuration.h line 536 - This will change the polarity of the X_MAX pin so that it will always read OPEN instead of TRIGGERED.
// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#define X_MIN_ENDSTOP_INVERTING LULZBOT_X_MIN_ENDSTOP_INVERTING // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING LULZBOT_Y_MIN_ENDSTOP_INVERTING // set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING LULZBOT_Z_MIN_ENDSTOP_INVERTING // set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING LULZBOT_NORMALLY_CLOSED_ENDSTOP // set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING LULZBOT_Y_MAX_ENDSTOP_INVERTING // set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING LULZBOT_Z_MAX_ENDSTOP_INVERTING // set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING LULZBOT_Z_MIN_PROBE_ENDSTOP_INVERTING // set to true to invert the logic of the probe.
run build-lulzbot-firmware.sh to get the hex files into the build folder. You can edit the build so that it only compiles for the machines/toolheads you want. Once it finishes compiling, you can turn on the printer and flash the correct machine/toolhead custom firmware using Cura. If you need to update the firmware then you need to download the newest source, make the changes, recompile, and update.
Run M119 and all endstops should read OPEN. Using M119 you can manually depress the X_MIN, Y_MIN, Y_MAX, and Z_MAX endstops to make sure they all trigger. If they do then it is safe to home the printer. Now you can bring the head down to one of the metal plates and then check to make sure Z_MIN triggers. If it does then that’s it, you have fixed the Z_MIN endstop issue.
It should be noted that this is a one time fix. All the other endstops are used therefore if the Z_MIN breaks again, then it will be time to get a new board. Other methods are possible but it will require soldering to fine pitch components to get a new working pin.
One thing that bugs me is that the X_MAX pin 30 is a normal analog pin whereas the Z_MIN pin 10 is a PCINT pin. Since the new pin is not an interrupt pin, I expected a delay in leveling the bed but in practice, there doesn’t seem to be an issue. Another thing to note is that Z_MAX is also a normal analog pin, therefore, it seems that a PCINT capable pin isn’t required for endstops.