Skip to content

Instantly share code, notes, and snippets.

@mildmojo
Last active August 14, 2021 21:45
Show Gist options
  • Save mildmojo/50246877ea1490fd76ad9717be39273d to your computer and use it in GitHub Desktop.
Save mildmojo/50246877ea1490fd76ad9717be39273d to your computer and use it in GitHub Desktop.

Deltaprintr Firmware HOWTO

These instructions are for the original plywood-frame Deltaprintr from the 2013 Kickstarter campaign or sold on the website before the release of the Delta Go. The Kickstarter campaign ran in 2013 with printer rewards for $500 pledges, and printers were delivered in 2015. They use a custom variant of the Azteeg X3 controller board. There was a vibrant community for a couple of years on the forums, designing mods and improvements, and sorting out each other's print issues. I've had mine working quite well for years.

This comprises several firmware-related forum posts; my original firmware HOWTO, my fix for stuttering movement, and Ian Brennan's experimentation with Marlin's temperature safety features. As of this writing, it's 2021, I wrote my firmware guides half a decade ago, and I've since forgotten most of it. If you have trouble, make sure you follow these instructions exactly, down to the exact versions of the Arduino IDE and related libraries.

If you hose your printer, well, you had a good run, and maybe it's time to get a new model. After all, while these printers were decent for their time, they were inexpensive even in 2013. Your old printer's parts are probably still good, and could be reused in another printer if you or a friend wants to do a DIY build.


How to build and upload new firmware

Note: As of 2016-Jan-29, Deltaprintr staff indicate all printers are shipped with the latest available firmware. There's no need to upload new firmware to your printer unless you're modifying the source code.

  1. Grab the Arduino 1.0.6 IDE and install it or unzip it somewhere. (Mac users, you'll need to install Apple's Java 6 update.) (The newer version 1.6.0 WILL NOT WORK. This is the #1 most common problem by far. CHECK YOUR VERSION.)
  2. Grab the Teensyduino installer and follow the instructions to install it where you unzipped or installed the Arduino IDE.
  3. Windows: Update your Virtual COM Port (VCP) driver so your PC can talk to the printer. Get it from FTDI's driver page. (There's a Windows setup executable linked in the "Comments" column on the right.)
    Linux: Make sure you get a copy of the udev rules linked at the top right of the Teensyduino page. Follow the instructions in the file to install it so the printer controller shows up as a serial device with the right name and permissions.
    Mac: If you're on OSX 10.9+, you may need to disable Apple's wonky FTDI driver and reinstall the original.
  4. Grab a copy of u8glib v1.13. Don't unzip it. I don't know if the version matters, but the Deltaprintr support page links to version 1.13.
  5. Grab a copy of the firmware from Deltaprintr's old support page (Kickstarter non-XL firmware mirrored at the unofficial GitHub repo; click the Code button at the top right and select "Download ZIP". XL and website-ordered printers need modified firmware with different max heights.). Unzip it somewhere.
  6. Open up the Arduino IDE. Add the u8glib library using Sketch => Import Library => Add Library. Point it to the u8glib_arduino_v1.13.zip file you downloaded in step 4.
  7. In the Arduino IDE, use File => Open and find the firmware's Marlin.ino file by digging down into the unzipped copy of the firmware until it shows up. That'll open the whole project with all the files.
  8. Go to Tools => Board and pick "Arduino Mega 2560 or Mega ADK".
  9. Go to Tools => Serial Port and make sure the right one's picked. You might have to try a few if there's more than one listed. You may have to connect the USB cable between the PC and printer before the port shows up in the list.
  10. Click the checkmark button or hit Ctrl+R to compile the firmware to make sure it builds without error. If it succeeds, you'll see something like "Binary sketch size: 136,964 bytes (of a 258,048 byte maximum)" in the little black console.
  11. All good? Hook up the USB cable to the printer and upload the new firmware by clicking the little arrow button on the toolbar or pressing Ctrl+U. This may take a couple of minutes; be patient. The progress bar will finish up and the printer will reset. Good to go.

Notes:

  • When I modified a file outside the Arduino IDE, it wouldn't include my changes in the firmware build—even after recompiling—until I restarted the IDE.
  • If you've edited settings in the firmware (e.g. home height or PID values) but the printer's not respecting them, you may need to load your new firmware settings (video) with the "Restore Failsafe" menu item. This will reset all settings in working memory to firmware defaults. Once loaded, you can use "Save Configuration" to write this config to EEPROM to be loaded at each boot. This will overwrite any customizations you've saved before.

Last updated: Jan 29, 2016

Essential fix: LCD CPU usage causes stuttering movement and blobbing

The Deltaprintr's stock firmware runs out of CPU time to do delta motion calculations and update the graphical LCD at the same time for printing speeds above about 30mm/s. I found that switching to the text menu solves this problem, but the default firmware has a timeout that automatically returns to the graphical display.

If you're rebuilding your firmware anyway, you should make this small change to improve print speed and quality. (adapted from my original forum post.)

Open your firmware in the Arduino IDE, find the ultralcd.cpp file. Comment out lines 1132-1136 in the lcd_update() function, making it look like:

// if(timeoutToStatus < millis() && currentMenu != lcd_status_screen)
// {
//  lcd_return_to_status();
//  lcdDrawUpdate = 2;
// }

Rebuild the firmware and upload it.

That'll disable the timeout back to the CPU-intensive status screen. Visit a menu and leave the LCD there during your print to eliminate pauses, at least at moderate feed rates.

It should be possible to make a custom print status screen that doesn't flog the board so badly. It doesn't look that difficult. The status screen is drawn in dogm_lcd_implementation.h in the lcd_implementation_status_screen() function, and the u8glib API looks pretty well-documented.

Optional: I also made the lcd_return_to_status() mod below that causes other menus to return to the main menu instead of the status screen, but you don't really need this. A lot of menus and settings screens in the stock firmware just return to the menu you came from. Do not use this modification without disabling the timeout as shown above, or you'll get terrible prints when the timeout causes the code to go into a tight loop because it can't get to the status screen. Change ultralcd.cpp:234 (in lcd_return_to_status()) from:

static void lcd_return_to_status()
{
  encoderPosition = 0;
  currentMenu = lcd_status_screen;
}

to

static void lcd_return_to_status()
{
  encoderPosition = 0;
  currentMenu = lcd_main_menu; // <-- all menus return & time out to main menu
}

Safety tweaks - Overtemperature and uncontrolled heating watchdogs

(Based on Ian Brennan's original post, experimenting with overheating conditions)

The Marlin firmware has two safety mechanisms that are disabled or not properly configured in the default firmware. The first feature is a hard upper limit on temperature as measured by the thermistor, above which the machine turns off the heater. The second is a timer that requires a certain amount of temperature rise over time, or the machine turns off the heater. That second feature is designed to stop overheating due to a thermistor that's failed or come loose from its mounting. (A wrapping of kapton tape around the heater block may help hold the thermistor wire in place.)

Overtemperature - HEATER_0_MAXTEMP

  1. In your firmware, open the Configuration_adv.h file using the Arduino IDE.
  2. Find HEATER_0_MAXTEMP.
  3. Change the value down to 245 degrees Celsius, since the stock hot end PTFE tube liner may melt above 250°C.
  4. Rebuild and install the firmware.

Uncontrolled heating - WATCH_TEMP_PERIOD and WATCH_TEMP_INCREASE

  1. In your firmware, open the Configuration_adv.h file using the Arduino IDE.
  2. Find WATCH_TEMP_PERIOD, uncomment it by removing //, and set it to 20 seconds.
  3. Find WATCH_TEMP_INCREASE, and uncomment it by removing //. (It should be set to 20 degrees Celsius by default.)
  4. Rebuild and install the firmware.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment