This is the vanilla version of Marlin Firmware 2.x pre-configured for Creality Ender 3 printers with original or generic BL Touch sensors. This distribution is focused on professional/power users and is packed with the maximum amount of features the small 1284P chip can fit at the expense of the SD Card support. Because of the lack of the SD support this is only recommended for OctoPrint users.
Please note that this is not the version I recommend for 8-bit boards like the one used in the Ender 3. The most stable and feature rich version of the firmware for this architecture is the 1.1.9 that I made available in another article. Marlin 2.x is aimed to a new generation of boards using 32-bit processors, the built in libraries are bigger and there is less space left for features. Anyway, if you want to try this you can be sure I did the best I could to configure it properly and fit the maximum amount of features possible. It was downloaded and installed more than 10000 times and I believe most of the users will find no problems with it.
- Full LCD Menus
- Adaptive step smoothing
- S-Curve acceleration
- Advanced Pause feature
- BLTouch support enabled (default probe offsets X=-42mm, Y=-5mm, Z=0mm)
- Bilenear automatic bed level with 25 probe points and 3 trials each
- Nozzle park feature
- Fully compatible with OctoPrint
- All changes from the original Marlin config file were marked with the comment tag "Customized DBP"
- SD Card support disabled to fit all extra features
Note about the bed leveling strategy
There are two ways to perform the automatic bed leveling, the first is before every print and the second is only when necessary. Based on my experience with the Ender 3, it's better to do an extremely precise bed leveling when necessary than a simpler one before every print and this firmware configuration reflects this choice.
If you want to do quick/imprecise bed leveling before every print you will need to reconfigure the firmware.
Note about linear advance feature
Most of the slicers already have excellent implementations of this flow compensation algorithm. Enabling Linear Advance in the firmware would make it incompatible with the slicers implementation and limit the user options. Linear advance is not enabled in this distribution.
- BLTouch installed on pin 27
- Z stop switch removed (it can block the Z axis movement)
- IMPORTANT! BLTouch tip height must be adjusted according to the official instruction manuals. There are different BLTouch sensor clearences and the YouTube videos tips are wrong most of the times
- Bootloader installed
- Microsoft Visual Studio Code if you plan to install from the source code
- PlatformIO IDE extension installed on Visual Code if you plan to install from the source code
- OctoPrint - This version has no SD Card support.
Installation and configuration
Follow the instructions in the Vanilla Marlin 2.x for Ender 3 article.
If you have problems compiling the firmware...
I can compile the firmware for you. Please see here for more details.
z Will not move down
I have complied everything and uploaded with out any changes. When I auto home, it will home the x,y. It will safe home for z; as far as returning to the middle of the bed. It will deploy the BTTouch probe, but it will not move down to the bed and touch off. It just deploys the probe the last time and the probe stays down, with the blue light. The screen on the ender 3 says Endstops Z. That's it. it will not do anything else. X 159, Y122, Z ??/20. If I try to lower Z through the motion feature, Z does nothing. It will move up. If you try to make it go down, the numbers will change (decrease) but Z does not move down at all.
I have been working on this thing for days and I still have this same issue, The only thing I have done other than the basic install of Creality's kit is removed the resistor on the board for Z. This issue was present before I did that. It made no difference at all.
Both G29 and M420 S1 Ignored in Start GCODE
Just installed my first BLTouch on my Ender 3. After G28, Both ways of running bed leveling (before every print, and restoring a mesh after homing) are completely ignored. Probe and G29 is working just fine through Octoprint Terminal. If print is paused in Octoprint, M420 S1 works to turn on bed leveling but that is not at all my desired workflow.
Things I have tried:
M400 after G28 and G29
Erasing all other custom start GCODE
#define RESTORE_LEVELING_AFTER_G28 and //#define RESTORE_LEVELING_AFTER_G28
And a whole lot of googling looking for the answers to my questions
Creality 1.1.4 board
Marlin 126.96.36.199 Ultimate from danbp.org
Ultimaker Cura 4.9.0
Octoprint 1.6.1 on a windows machine
Unable to reflash
I flashed the Compiled Ultimate Marlin (HEX) for Ender 3 + BLTouch + TMC2208 version of your firmware and flashing completed sucessfully. I still have the stock display connected without the adapter board, which is now beeping constantly (high pitched noise). I beleive this is because pin 27 expects the BLTouch which I still must finish connecting. I am trying to upload a new version with BLTouch pin changed to 29, or downgrade to 1.1.9 but in all cases I receive an error
The board seems to boot normally and I can access menu functions. I can connect with OctoPrint and the board seems to reset when I try to flash with Avrdude but now I am stuck. Does your firmware version overwrite the bootloader? Do you have some advice for how I can reflash (I do not have the avrflasher at the moment).
Thank you also for sharing your efforts and any advice you could provide.
This is either the wrong…
This is either the wrong upload speed or a corrupted bootloader. I recommend using the official AVR Optiboot bootloader to prevent such problems.
Thank you! I ordered an…
I ordered an avrprommer and with that I was able to reflash the bootloader. Problems are gone now. So it seems that the bootloader had become corrupt. I don't know how this happened, but I have a suspicion that it's because it's because I use OctoPrint on a RasberryPi, and the Creality mainboard is drawing power over the USB cable. There may have been a brownout condition which caused the bootloader corruption. I can't know for sure, but it's my best theory. So a word of caution for anyone with a similar setup.
Now I still have the buzzer going constantly even though I changed SERVO0_PIN to 29 in Configuration.h
Is there some other setting that affects the buzzer?
Thanks for your work.
Do you know what the differences between compile with "mezli" and "melzi_optimized" ?
"melzi_optimized" use less space on ROM. Why ? and is it working as well ?
Recently, Marlin 188.8.131.52 was released. I recognize it was essentially a maintenance release, however do you plan to update your build to this latest version?
Hello, I checked the…
I checked the release notes and nothing changed for 8-bit processors like the Ender 3. I will run some extra experiments before releasing because the library versions changed and this typically increase the size of the firmware.
Admittedly I'm not in a…
Admittedly I'm not in a hurry to upgrade to 184.108.40.206, but I thought I'd ask about your progress given a few days ago you'd written about releasing an update after a few checks. How's it going?
While I don't want to be a nag, Marlin 2.0.6 just was released. Will you do your build for this release? Thanks.
S Curve Acceleration and Z-Probe Offset
Awesome guide and build! Thank you!
I do have 2 questions however:
1) For S Curve Acceleration to work correctly, do I need to disable Jerk and Acceleration control in Cura?
2) I'm new to BL touch. I've installed it, used this build and set my probe offsets.
I have this fan duct: https://www.thingiverse.com/thing:4401624 with the spacer: https://www.thingiverse.com/thing:3072487
I used M851 to set Offset: X: -47 Y: -8
Next I used G28 to home.
Next I lowered the Z axis to position the nozzle close to the bed with a post-in in between and this gave me -3.4 as offset which I set with M851 Z-3.4.
(I have a glass bed which is quite thick).
Now, when I do G28 again it moves the Nozzle back quite above the bed, so I use G1 F60 Z0 to position it back to the real Z home.
I have noticed that sometimes it puts it back nicely where I put it manually when defining the -3.4 offset, but sometimes it seems to position it around 0.5 higher... This without touching the bed or glass.
What am I doing wrong?
Thanks a lot!
Seems that each time after a…
Seems that each time after a G29... the nozzle is 0.5 higher than when I calibrated it and adjusted the offset.
Manually move the nozzle just above the bed, post-in in between
M851 Z -> adjusted
G1 F60 Z0 -> OK
G1 F60 Z0 => nozzle 0.5 higher than when calibrated.
What am I missing?
Thanks in advance for hour help!
1) S-Curve acceleration…
1) S-Curve acceleration works together with Jerk or Junction Deviation.
2) M851 sets the offset of the probe in reference to the nozzle tip. It has nothing to do with the nozzle offset from the bed. Use M206 to set the home offset.
Section TMC2208 in Ultimate
In configuration.h in the section on TMC2208 in the ultimate version you have "//" in front of #define X_DRIVER_TYPE TMC2208_STANDALONE // Customized DBP. Is this correct?
It should be commented…
It should be commented unless you have a TMC driver.
SD Card support + Advanced Pause & Filament Change
I've been looking for a solution for this for days now and I'm glad to come across a post that provides the HEX file because for the life of me I keep getting errors when trying to enable advanced pause feature & filament change through VS when building.
The only issue I have is that I can't find a version of your HEX where you provide SD card support + BLTouch + Advanced pause & Filament change. If you'd be able to compile a version like that in HEX format all my problems would be over...
If you could provide me another solution I'd be happy to hear it!
Hi, There is no way to fit…
There is no way to fit all that features in the memory of the 8-bit board. You would have to leave something behind like the automatic bed level or the LCD display.
I'm currently running the 1…
I'm currently running the 1.9 merlin with bltouch, display but bed leveling happens through the gcode command in the SD card. I can still calibrate the Z offset, but I'd like to do this with the Marlin 2 version because my prints don't come out as good with the 1.9 marlin... I just can't seem to configure the 2.0 marlin through either arduino or VScode... If I could I'd just remove the features I removed in the 1.9 marlin and configure it myself into a hex file but I'm getting so many library errors when trying to compile marlin 2.0 in arduino or vscode that just don't show up with the 1.9 version even though I do exactly the same?
Please Obi-One Kenobi you're my only hope
It is not that simple…
It is not that simple... Marlin 2.0.5 is much bigger than 1.1.9 and all the errors you are getting in VSCode are because you are trying to fit more data than the memory can handle (many error messages don't explicitely say that). The smallest version of Marlin 2 is the 2.0.1 available here and even using it you will need to disable something if you plan to use advanced pause/filament replacement.
PreHeat and Level
Hi, great work!, Thank You!
I realize in the new version 2 of marlin you got rid of the Preheat bed, level and store feature to save space. I was hoping that forgoing support for the SD card, that feature would be put back in this ultimate version. But, alas, I can't find it in the menu. Or am I mistaken?
Unfortunately it's not…
Unfortunately it's not possible to fit this feature. As Marlin evolves the built in libraries get too fat for the limited 8-bit boards and I am forced to disable some features...Feature and performance wise, the best Marlin for the Ender 3 is the 1.1.9.
For this specific version you can enable SLIM LCDs to re-enable CUSTOM commands menu back.
Elder 3 Pro Main board Version
Thanks for this excellent guide. I am new to 3D printing, purchased an ender 3 pro last month. And added bltouch abl. But not that happy with the stock firmware. And I found your blog post. How I find if my printer’s main board is 8 bit or 32 bit.
Simple. If you didn't…
Simple. If you didn't purchased and installed a 32-bit board it is 8-bit. Creality does not sell 32-bit boards for Ender 3.
SHA sums are incorrect
First, thank you for this excellent description and firmware for adding BLTouch to an Ender 3. However I think your SHA-256 is incorrect for all three packages. Here is what I calculated for the source code:
This does not match the SHA-256 what you have listed.
Thank you! I forgot to…
Thank you! I forgot to update the checksums when I updated the files but now everything is OK.
Heated Chamber Errors - OctoPrint
I want to say thanks first for the firmware, it was the one thing that got my Ender 3 Pro running properly using the BLTouch.
I have noticed - "Warn: Not sending "M141 S0", printer profile has no heated chamber " scrolling in the terminal window on OctoPrint. I think line -"#define TEMP_SENSOR_CHAMBER 0" needs to be commented out to "//#define TEMP_SENSOR_CHAMBER 0" to prevent this.
Plus, I think someone else might've mentioned that the version displayed onscreen still says v.220.127.116.11 instead of v18.104.22.168 like in the About Printer > Printer Info screen.
I'm still battling the upgraded V1.1.5 board and extruder stopping randomly. I'm sure it's related to the TMC2208 and Marlin, as I've seen many issues form other people posted. Creality sent me a replacement for my original V1.1.4 that was having issues with x-axis. I received the V1.1.5 only to find it worked once then died, so Creality sent another replacement that has yet to arrive. In the meantime I ordered a new ATmega1284P and swapped it out. I assumed that because I could not flash the chip that it was dead and it came back to life again.
Long story short, I'm still waiting on the second replacement Silent board to confirm the issue is not a faulty board.
Wrong version written
Has an information, it's still written CUSTOM_MACHINE_NAME "Marlin 22.214.171.124" inside configuration.h wich is confusing at first. When correcting it, it works perfectly for now.
Sorry, wanted to write "As…
Sorry, wanted to write "As an information". It's late.
X axis problem with G29
Thank you for your firmware and all your precise indications. I can barely imagine the regular work it represents.
However here is my problem, when I do the G29 function the X axis goes much too far.
I am using the precompiled version Package 3: Compiled Ultimate Marlin (HEX) for Ender 3 + BLTouch + TMC2208
Currently I have 126.96.36.199 is 188.8.131.52 fixes the problem?
Could you please check. Thank you very much!
Translated with www.DeepL.com/Translator (free version)
This is not a bug. You need…
This is not a bug. You need to configure the probe offsets properly. Try using X30 or X-50:
Yes i found !
Thanks no is not a bug...
its because i have a special configuration with linear guidance rails and the x stop was not in good position
thanks more for your reply !!! And nice day
Only 2.4.4 is working here. 2.5.1 and 2.5.3 wont show anything on the lcd and can't be accessed with octoprint.
any suggestion ?
i was the same issue but is…
i was the same issue but is not the firmware, check adjust power supply voltage 24v
for me works !
power supply is not the issue.
version 2.4.4 from here boots and works. but as soon as i go to 2.5.3 the screen stays blank. when i flash 2.4.4 back it works again.
Marlin 2.5.3 has about 672…
Marlin 2.5.3 has about 672 bugs to be fixed but this appears to be a flashing issue. Are you using AVRDUDE?
Hi Daniel, I Flashed it…
I Flashed it with the progISP and ISP that came with the BLtouch. I used your compiled hex file.
Check the fuse settings. Don…
Check the fuse settings. Don't follow the Creality video as it uses the wrong settings. AVRDUDE is better for this task.
After flashing this version of firmware I got an error on the LCD saying Error: EEPROM. Onlything I changed was the probe offset.
Is there something else I need to do to get it to work correctly.
Also I ran initialize EEPROM in the LCD menu and that seems to work but afterwards Octoprint just kept rebooting the controller trying to connect to it.
You could see on the LCD it was just constantly rebooting. When I stopped Octoprint manually from SSH the rebooting cycle would stop.
Not sure this is 100% compatible with OctoPrint.
You must reset the EEPROM…
You must reset the EEPROM after upgrading or downgrading versions of Marlin. This version is compatible with Octoprint.
Never got this error before in all the versions I have ever flashed. I did that and octo print still continuously resets the controller over and over
EEPROM verification is a new…
EEPROM verification is a new feature in Marlin 2.0.5. It checks the memory for inconsistent/corrupt data. If you upgraded from Marlin 2.x or 1.x you will get that because the storage system is different.
You must reset your EEPROM to fix this error. Please do not use Octoprint for firmware maintenance activities.
G28 with bltouch hit bed
First i want to say this is awesome and Im really grateful for your work.
So I have this weird issue.
When doing a G28 homing the Z the first time the bltouch activates but it seems to ignore it for the first activation but after the second activation it works like it should. but not after the hotend hits the bed.
It will do a second check and not hit the bed. and then go about its way and print just fine.
if i do a g28 it does the 25 point bed test no issues does not hit the bed.
my current start code is this.(Hitting the bed happens any time I run G28)
not sure what im doing wrong. I hope i explained it well enough. tried looking around the web but cant find anyone with this issue.
also note i have moved the touch to PIN 29.
changed it in config.h and in "pins_MELZI_Creality.h"
Probe crashing is due Z end…
Probe crashing is due Z end-stop problems:
i forgot that i did that stuff with my last upgrade. eg when i got the BLtouch about a year ago.
and going from marlin 1.1.x to 2.0.x just is a little confusing.
so i just bit the bullet and removed the capacitor. works fine now.
Hi, every time I set Auto Home (Ender-3), nozzle hits bed at first probe, only on first probe. Can you or anyone help me? Video: https://youtu.be/4vWUdRPmO70
Desolder the cap
This is what i did and it fixed all my issues.
"Sketch too Long"
I'm trying to compile and flash my ender 3 pro with the source code provided, i have the following error in sketch:
Sketch uses 131050 bytes (100%) of program storage space. Maximum is 130048 bytes.
I tried to disable some features following this :https://www.crosslink.io/marlin-2-0-memory-usage-by-feature/
but almost everything was off.....
If i use the .hex provides it will overwrite the bootloader? I'm currently flashing directly with usb
The HEX will not overwrite…
The HEX will not overwrite the bootloader. You are 1KB out of memory, that's a lot. Are you using custom translations?