This is the 1.1.9 version of vanilla Marlin Firmware pre-configured for Creality Ender 3 printers without bed leveling sensors. The standard configuration file from Marlin distribution was carefully reviewed to include the latest Ender 3 specific settings from the official Creality firmware and incorporates additional features like Mesh Bed leveling.
There are three installation options available, the traditional with Arduino IDE, the new method using Visual Studio Code + PlatformIO and the third one that is uploading the compiled firmware directly to the board. I recommend the PlatformIO option for most of the users, once the software is downloaded, the firmware can be upgraded in less than 5 minutes.
Features
- Official Marlin firmware + bugfix with all hardware settings from Creality latest official firmware (April 2020).
- Installs from the original Arduino IDE (smaller download and frequent updates from Arduino team).
- Thermal runway protection enabled.
- Does not reset the bed level settings after the G28 (Home) command.
- Custom menu with maintenance mode, emergency mode and full auto bed leveling sequence (warmup, wait, home, level and then save settings).
- Ultra-precise bilinerar mesh bed leveling with 25 probing points.
- Run and toggle the manual bed level from LCD menus.
- Slim menus enabled.
- Baby steps enabled and configured for the "Magic Numbers".
- Emergency parser enabled.
- Advanced pause feature enabled (filament replacement)
- Nozzle park feature enabled.
- All changes from the original Marlin config file were marked with the comment "//Customized DBP"
Requirements
- Bootloader installed in your board
- Arduino IDE for installation option 1
- Visual Studio Code for installation option 2
- AVRDude for installation option 3 in Linux or MacOS (AVRDude for Windows is included in the package)
Instructions using Arduino IDE (option 1)
- Install the Arduino IDE
- Quit any software that could try to access the printer from the USB port (Cura, Serial Monitor, OctoPrint, etc...).
- Run the Arduino IDE and configure to download the Sanguino board. Add the following URL to the board manager (File->Preferences->Additional boards manager):
https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json
- Install the following libraries/boards in the Arduino IDE:
- U8Glib
- Sanguino
- With all requirements in place unpack this entire Marlin distribution to a folder and open the "Marlin.ino" file from the Arduino IDE.
-
Disable the endstop interrupts feature by commenting (//) the following line in configuration.h. This feature needs to be disabled only if you are using Arduino IDE, with PlatformIO this problem does not exist.
//#define ENDSTOP_INTERRUPTS_FEATURE
- Compile and upload the firmware. Make sure you are using the following settings.
- Board configuration: ATMega 1284P 16Mhz
- Programmer configuration: AVRISP MKII
- COM Port: Depends of your computer. Usually only one is available for selection.
- Follow the post-installation instructions below.
Instructions using Visual Studio Code + PlatformIO (option 2)
- Download and install Visual Studio Code.
- From Visual Studio Code extension menu, install the PlatformIO IDE extension.
- With all requirements running, unpack the entire Marlin source code downloaded from the link below to a folder.
- From Visual Studio Code select File->Open folder and select the folder where the platformio.ini file is located. Attention! Use the "open folder" command, not the"open file".
- Save the file and then select Terminal->Run Task->Build . It will take a few minutes for the system to download all dependencies and compile the code.
- If the code compiled properly you will see something like this in the terminal: "=== 1 succeeded in 00:00:30.050 ===".
- Connect your printer to the computer using the USB cable.
- Go to the Visual Code menu Terminal->Run Task->Upload .
- If everything goes well another message like this "=== 1 succeeded in 00:00:55.010 ===" will be printed.
Installing the pre-compiled HEX (option 3)
The pre-compiled firmware is also available here. You can simply burn the compiled HEX file directly to your Ender3 board without installing the Arduino IDE or Visual Studio Code.
To upload the pre-compiled firmware you will need the AVRDUDE 6.3 tool. For your convenience I included the Windows version of this tool in the zip file that contains the HEX firmware but the tool is also shipped with the Arduino IDE. The upload command in Windows PowerShell should look like this:
./avrdude -p atmega1284p -c arduino -P COM3 -b 115200 -v -U flash:w:firmware.hex:i
The serial port is something between COM1 and COM8, depending on where the USB driver is pointing to, and firmware.hex is the file you are uploading. If you are using other operating system like Linux the port address will be somehting like this /dev/ttyUSB0.
Finally, follow the post-installation instructions below.
Post-installation configuration
- Manually pre-level the bed! This reduces the movement of the Z-axis after the Mesh Bed Leveling and improves the print quality.
- Heat the bed to the printing temperature and run the bed level command from the LCD (Prepare -> Bed Leveling -> Level bed) or using the G29 gcode or using the Heat and Level command from the custom menu (recommended). Note that the Heat and Level command waits 2 minutes after the bed is hot to allow the mounted surfaces to expand/contract properly.
- Save the settings using the LCD menu or the M500 gcode (if you used the Heat and Level custom command, they will be automatically saved).
- Add the following gcode to the startup code of you slicer, right after the line of the G28 command to load the bed level configuration from the memory before every print:
M420 S1
Troubleshooting tips
- No serial COM port appears when connecting to the board: Download the FTDI Drivers
- Bed level failing:
- 1st - make sure you manually leveled the bed.
- 2nd - make sure you have the M420 S1 command AFTER the G28 line in your print initialization GCode.
- Error "..._PIN is not interrupt-capable..." in Arduino IDE: This is an Arduino IDE bug, disable the feature in the configuration.h file according to the example below to fix (put "//"). If you are using PlaformIO you should leave this option enabled.
//#define ENDSTOP_INTERRUPTS_FEATURE
- Disable serial port clients before flashing: If the COM ports are used by any other app, the flashing process will fail. Shutdown Cura, OctoPrint, any other slicer and any other Serial Monitor program like the Arduino IDE before compiling/flahsing the new ROM.
- Correct fuse settings: If you are using other software than AVRDUDE (PROGISP, for example) to upload the firmware make sure you are using the correct fuse settings. Apparently the Creality tutorial has the wrong settings and the board fails to boot afterwards.
- Reset the EEPROM: Sometimes the EEPROM memory is not reset during the Marlin reflash and this can cause problems. To reset manually use the following G-Codes from any Serial Terminal: M502 followed by M500.
- Blank screen after flashing: You did not flashed the firmware properly. Please use AVRDude according to the instructions above and if this does not work you might have to reflash the bootloader.
- Serial Port Monitor for Windows: This small program allows you to send/receive GCode to the printer. If the characters look strange you are probably using the wrong baud rate (start with 115200bps).
- avrdude: stk500_getsync() attempt 1 of 10: not in sync: Wrong baud rate for the serial port or serial port already in use (OctoPrint, Cura, etc..). Try configuring the upload rate to 115200bps. If you are using PlatformIO to upload, make sure you are using the correct baud rate for your environment in the platformio.ini file.
If you have problems compiling the firmware...
I can compile the firmware for you. Please see here for more details.