Five Tips for using dc42 Firmware on the RepRapPro Ormerod

Many of you know me better as dc42 on the RepRapPro and Arduino forums. As the owner of an Ormerod 3D printer and an embedded software engineer (amongst other things!), I forked the RepRapFirmware github repository early in 2014 in order to address some limitations in the stock firmware. My firmware fork has proved surprisingly popular with other Ormerod users. So for all of you out there, and for anyone thinking of using it, here are my top tips for getting the best out of the firmware.

The latest release can always be found at You can find a list of differences between my fork and the RepRapPro firmware that it is based on at

1. Install compatible web interface software

My firmware supports additional message types in order to provide improved functionality in the web interface and faster, more reliable file uploading. So when you install my Duet firmware, also install the latest variant of the web interface from My version of the web interface fetches all the web files from the Duet (because the dc42 firmware is capable of serving them), whereas the RepRapPro web interface fetches only reprap.htm from the Duet and the rest from the Internet. So for the initial installation, copy the whole web interface file tree to the /www folder on your SD card. When I update the web interface, I usually change only reprap.htm and js/reprap.js, so you only need to update these two files (which you can do by using the Upload Web File button on the Settings tab of the web interface).

If you are still using Pronterface to control your printer, do try the web interface – it provides much more functionality.

2. Customise your slic3r start gcode

Add the following line at or near the beginning of the start gcode in the slic3r Printer Settings:

; layer_height = [layer_height]

This causes slic3r to put a layer height comment in the gcode files that it generates. The firmware finds this comment when the file is about to be printed, and sends it back to the web interface so that the web interface can determine the number of layers. If the comment is not found, then the web interface falls back to using the layer height you configured on the Settings tab.

The firmware finds the object height by looking for the last G1 Z command in the file. So don’t include a G1 Z command in your custom end gcode. If you want to raise the head at the end of a print, use a G0 Z command instead.

3. Set up your axis lengths and offsets

The standard firmware allows you to define the axis lengths using the M208 command. With dc42 firmware, the standard M208 command sets the axis limits in the positive direction, and the M208 command with parameter S1 added sets the axis limits in the negative direction. So you can set up a negative limit for the X axis, such that X=0 is the edge of the bed. I have this in my config.g file:

M208 X210 Y210 ; set axis maxima
M208 X-5 S1 ; set X axis minimum

To get the best out of this facility, you will need to edit the homing files. A bug fix in the dc42 firmware means that you no longer need to have a G92 command after a homing command (a G1 command with the S1 parameter present to enable endstop detection). When the endstop is hit, the axis limit configured by M208 is used. So my homex.h file looks like this:

G1 Z5 F200
G1 X-240 F2000 S1
G1 X3 F200
G1 X-10 S1
G1 Z-5 F200

and my homey.g file is:

G1 Z5 F200
G1 Y220 F2000 S1
G1 Y0 F12000
G1 Z-5 F200

Note the absence of G92 commands. Any change you make to the axis limits using M208 is taken care of automatically, without having to change G92 commands in the homing files.

While you are changing homing files, also adjust the XY coordinates used for Z homing in homez.g. If you are using one of my differential IR or ultrasonic height sensors, then I suggest using the centre of the bed. If you are using a simple or modulated IR sensor, pick the same coordinates that you use for the first auto bed compensation point, near the centre of the white tape or white paper.

If you change the homex.g, homey.g and/or homez.g files in this way, remember to make similar changes to homeall.g too.

4. Print not going well? Adjust print speed and extrusion factor on the fly!

You can adjust the print speed on the fly by sending M220 S### where ### is the percentage of the normal print speed you want. For example, M220 S50 will print at half speed. You can’t override the maximum speeds with M220, you’ll need to use M203 to do that.

Similarly, you can adjust the extrusion factor by sending M221 S### where ### is the percentage of the normal extrusion amount that you want.

Even if you can’t save your current print with these commands, by experimenting with different values during a single print, you may be able to determine the optimum speed and extrusion factor for when you restart the print. Bear in mind that if you adjust the extrusion factor using M221, then the print end time estimated from filament consumption will be inaccurate.

5. Something strange happening? Display the diagnostics!

If you send the command M111 S2 then the firmware returns various diagnostic information, such as the up-time, the reason for the last reset, any error code associated with a software watchdog reset, and the bed compensation. So this command can help you work out what is going on.

This entry was posted in 3D printing. Bookmark the permalink.

4 Responses to Five Tips for using dc42 Firmware on the RepRapPro Ormerod

  1. Christian says:

    Nice article! Don’t forget to mention the Flash usage – with this firmware branch it’s even possible to save Z-height calibration values, hotend PID parameters and an ethernet configuration to the processor’s flash storage. Another great feature is the watchdog which RepRapPro hasn’t added to their firmware branch (yet) – if anything goes wrong and a crash occurs, this firmware will reset itself after a few seconds, while the official RRP firmware could (in theory) destroy the hotend if the heater is still on. I know this shouldn’t happen at all, but it’s great not having to baby-sit my Ormerod whenever I start a new print.

    • Does this firmware allow you to switch between thermistor tables? In other words will I be able to select thermistor 11 to make sure my cheap NTC 3950 will work?

      • davidcrocker says:

        RepRapFirmware doesn’t use thermistor tables, you just enter the R25 and B parameters of your thermistor in the appropriate M305 command in the config.g file.

  2. Jaques says:

    Thanks very much for your contributions and efforts David.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s