Antminer D3 Blissz - modified firmware to improve mining performance. Antminer D3 Blissz - modified firmware to improve mining performance Limiting the maximum speed of movement along the axes

Details Published: 04.12.2017 13:09

It's no secret that most manufacturers of ASIC devices have standard firmware, with their default settings, that can hardly be called optimal in terms of performance. It often happens that in order to get maximum performance from the device, the user must change the standard settings and optimize them. Some advanced users take this issue into their own hands in order to further optimize the device’s firmware, increase stability and reliability, and also add additional features that will help the device owner increase their income. One such case is optimized firmware Antminer D3 Blissz, for the ASIC miner of the same name from Bitmain, running on the X11 algorithm.

Optimized firmware promises to reduce device power consumption by up to 20% , and also adds some additional functionality, such as the ability to change the voltage supplied to ASIC chips, the ability to overclock and underclock chips, and more efficiently control the fan speed.

Some changes and improvements have been added to the firmware interface, which make the device easier to use. In addition, the firmware increases mining performance, and also makes this process more reliable and stable.

Please note that this firmware is experimental and its use may void your warranty. Also pay attention to the fact that the firmware comes with a built-in developer commission, which is set at 1.5% . Therefore, it’s up to you to decide whether it’s worth paying the extra 1.5% for the improvements and modifications that have been made to this firmware. As expected, the process of reverting to stock firmware is as simple as installing custom firmware. If you don't like the results of the modified firmware, you can always return to the original one.

This software update program is for the product you own identified above (the "Affected Product") and is available only upon acceptance of the agreement set forth below. After selecting “Accept” and clicking “Download”, you are deemed to have accepted the terms and conditions of this agreement. Please make sure you understand the terms of the agreement before downloading.

This service provides software for updating parts A And B D3 firmware up to version 2.03 from any previous firmware version. If your camera already has the latest firmware, you do not need to download and install the update. The current firmware version can be checked by selecting the item in the camera setup menu Firmware version.

When performing an update, you must update both firmware (A and B) to version 2.03. Please note that updating only one of the firmwares (A or B) does not guarantee proper operation of the D3 camera

Be sure to review the license agreement before using the links at the bottom of the page to download this software.

Changes made in this version

  • Added support for the AF-S NIKKOR 800mm f/5.6E FL ED VR lens.

Checking the current camera firmware version

If your camera already has the latest firmware, you do not need to download and install this update. You can check the current firmware version by selecting “Firmware Version” in the camera setup menu.

    Turn on the camera.

    Press the MENU button to display the menu screen.

    Select Setup Menu.

    Select an item Firmware version.

    The camera firmware version will be displayed.

    Turn off the camera.

Firmware Upgrade Instructions

If you can update the camera firmware yourself, use the basic instructions. If you need additional support when upgrading, please refer to the detailed step-by-step instructions with supporting images linked below.

Basic Firmware Upgrade Instructions
Connect the camera to an AC adapter or use a fully charged battery. Microdrive media cannot be used for this firmware update. When copying downloaded firmware to a CompactFlash card, do not use the Lexar Media JumpShot USB cable, otherwise the D3 firmware may not be updated correctly.

    Create a new folder with the appropriate name on your computer's hard drive.

    Run the downloaded file to create a folder named D3Update, which will contain the firmware files:
    AD3_0203.bin: firmware file A;
    BD3_0203.bin: firmware file B.

    Connect the camera to the computer using a USB cable (make sure the camera's USB option in the setup menu is set to Mass Storage) or use a memory card reader and copy the downloaded firmware A to a memory card formatted by the camera and inserted into the camera or device for reading memory cards.

    If the camera was connected to a computer, use standard operating system procedures to disconnect the camera from the computer.

    Insert the memory card containing the firmware into the camera's memory card slot 1, and turn on the camera.

    Select Firmware Version in the camera setup menu and follow the instructions on the monitor to update the firmware.

    Once the update is complete, turn off the camera and remove the memory card.

    Format the memory card using the camera and repeat steps 4 to 8 to update the firmware B.

    After the firmware update is completed, check the camera's firmware version. If the USB setting was changed to perform this update, it can now be changed to MTP/PTP.

Precautionary measures
  • Do not load setting data saved using Firmware A version 2.01 or earlier/Firmware B version 2.01 or earlier using Save/Load options D3 camera setup menu on D3 camera after updating firmware A to version 2.02 or later/firmware B version 2.02 or later. These settings are not interoperable.

This download service is not available on your device.

You can send a link to this download to your email address for use on another device.

Before you start working with a non-professional or semi-professional 3D printer, as well as a DIY kit, you often need to “upload” and configure the firmware. Firmware is a program code whose main tasks are: reading and playing G-code, controlling the printer through various interfaces, and displaying information about the printing process. In other words, firmware is necessary for the hardware and electronics to “come to life” and be controlled. Firmware is uploaded to the control board. Different 3D printers have different control boards, and therefore the firmware is also different.

Our Prusa i3 Steel 3D printers use a combination of Arduino Mega 2560 and Ramps 1.4 boards, so in this article we will take a detailed look and analyze the settings of the firmware suitable for them.

If you have not yet assembled electronics, then check out the article:

This firmware is one of the most popular, including because developers regularly add new features to it: automatic gap adjustment, bar end sensor and much more. In addition, this firmware is absolutely free and can be downloaded from the official website.

Where to get?

The latest version of Marlin firmware is posted on the official website of the developer https://github.com/MarlinFirmware/Marlin. You can download earlier versions of the firmware using the link. There are also many different versions on the site, but we recommend downloading the latest version, marked as Latest release. At the time of writing, this version was 1.0.2-2

Under Downdloads, click on Source code (zip) and download the firmware archive to your computer. Next, extract the contents of the archive into a folder.

Installing Arduino IDE

After you have downloaded the firmware, you need to edit it and then write it to the microcontroller of the control board (Arduino mega 2560). For these purposes, you will need the Arduino IDE program, which you can download for free from the official Arduino website.

Note! This Arduino IDE program is regularly updated and it is possible that when uploading the firmware to the board, problems may arise with new versions of the Arduino IDE, namely errors will appear and you will not be able to write the firmware to the microcontroller. Therefore, if you encounter problems, try downloading an older version of the program, for example version 1.6.0)

To be on the safe side, you can immediately download the verified version 1.6.0


Click on Windows Installer, and you will be redirected to another page, where you need to click on the JUST DOWNLOAD button, and then the file will begin downloading. Install the program and proceed to the next step.

Editing Marlin firmware

You have directly downloaded the Marlin firmware itself and the Arduino IDE program, with which you can edit. Open the folder with the "Marlin" firmware, find the "Marlin" file with the extension .ino


Open this file, the Arduino IDE program will open


At the top of the program window there are many tabs, each of which contains pieces of code on which the operation of the 3D printer depends. You only need a few basic tabs. The first and main tab is "Configuration.h"


This is a configuration file that contains basic settings. It is in this tab that you need to make the main changes.

Note! Make all changes in the firmware in order from top to bottom. These changes will affect major areas of the code and are necessary to get your 3D printer up and running.

Set the required baud rate

The first thing that needs to be changed is the baud rate. By default, the speed is 250000 (47 lines of code)

// This determines the communication speed of the printer #define BAUDRATE 250000


// This determines the communication speed of the printer #define BAUDRATE 115200

If you are using a board, then the speed should be 250000.

Selecting a control board

After setting the baud rate, you must specify the control board used (line 55 of code).

#ifndef MOTHERBOARD #define MOTHERBOARD BOARD_ULTIMAKER #endif


The default Ultimaker 3D printer board is BOARD_ULTIMAKER, so you need to change the board. The entire list of boards is in the "BOARDS_H" tab


There is a huge list of different boards provided, but you only need the following:

#define BOARD_RAMPS_13_EFB 33 // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Bed)

#define BOARD_RAMPS_13_EEB 34 // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Bed)

#define BOARD_RAMPS_13_EFF 35 // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Fan)

#define BOARD_RAMPS_13_EEF 36 // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Fan)

These boards are related to Arduino mega 2560 and Ramps 1.4. Depending on the modification of your 3D printer, you must select the appropriate board. For example, a standard combination of 1 extruder + blowing the work area + heating table corresponds to the BOARD_RAMPS_13_EFB board

The name of the board must be copied and replaced in the "Configuration.h" tab, change the following lines:


Changing the name of the 3D printer

When setting up, be sure to come up with a name for your 3D printer and indicate this in the firmware. For what? The name of the printer is displayed on its LCD display, this feature is exactly provided on such a display.

Find the lines: (line 59)

// #define CUSTOM_MENDEL_NAME "This Mendel"

#define is preceded by "//" - this means that these lines are not used in the code, but serve as explanations. To activate this line, you need to uncomment the line, remove the // before the line.

Change the default name "This Mendel" to your 3D printer name, for example "P3Steel". We get the following:

Selecting a table and extruder temperature sensor

Above, the firmware settings were indicated for 1 extruder and a heating table, that is, the 3D printer has two heating elements, the temperatures of which must be adjusted. Temperature control is carried out using temperature sensors - thermistors.

There are a large number of different thermistors with different characteristics, so in the firmware you need to indicate which thermistor you have. This is necessary so that in the future the printer will show the correct temperature. In the firmware, find a list of supported thermistors:

//// Temperature sensor settings: // -2 is thermocouple with MAX6675 (only for sensor 0) // -1 is thermocouple with AD595 // 0 is not used // 1 is 100k thermistor - best choice for EPCOS 100k (4.7 k pullup) // 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) // 3 is Mendel-parts thermistor (4.7k pullup) // 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! // 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) // 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup ) // 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) // 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) // 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) / / 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) // 10 is 100k RS thermistor 198-961 (4.7k pullup) // 11 is 100k beta 3950 1% thermistor (4.7k pullup) / / 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) // 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE" & "Hotend "All In ONE" // 20 is the PT100 circuit found in the Ultimainboard V2.x // 60 is 100k Maker"s Tool Works Kapton Bed Thermistor beta=3950 // // 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k // (but gives greater accuracy and more stable PID) // 51 is 100k thermistor - EPCOS (1k pullup) // 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) // 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) // // 1047 is Pt1000 with 4k7 pullup // 1010 is Pt1000 with 1k pullup (non standard) // 147 is Pt100 with 4k7 pullup / / 110 is Pt100 with 1k pullup (non standard)

Find yours in the list, remember the number on the left. As a rule, many people use a Chinese 100 kOhm thermistor; the thermistor number “1” is suitable for it.

// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)

Make changes where necessary (lines 115-118)

#define TEMP_SENSOR_0 -1 #define TEMP_SENSOR_1 -1 #define TEMP_SENSOR_2 0 #define TEMP_SENSOR_BED 0

By default, the first two thermistors are activated in the firmware:

TEMP_SENSOR_0 - responsible for the thermistor of the first extruder

TEMP_SENSOR_1 - responsible for the thermistor of the second extruder

TEMP_SENSOR_BED - responsible for the table thermistor

Change the lines and get this:


TEMP_SENSOR_1 and TEMP_SENSOR_2 are not used, so we put “0” zeros opposite them.

Maximum temperature limitation

To limit the maximum temperature, the following lines are required (140-143)

#define HEATER_0_MAXTEMP 275 #define HEATER_1_MAXTEMP 275 #define HEATER_2_MAXTEMP 275 #define BED_MAXTEMP 150

The numbers on the right, namely 275 and 150, are the maximum temperatures of the extruder and heating table, respectively.

When the temperature exceeds the maximum Temp, your heater will be turned off. This feature exists to protect your extruder from accidental overheating. If you are using a hotend with Teflon inside, we recommend limiting the temperature to 260 degrees.

Minimum temperature limit

Also, the default firmware limits the minimum extruder temperature to 170 degrees. This means that if the extruder temperature is below 170 degrees, the extruder motor will not rotate and plastic will not be fed. Protection against pushing through unheated plastic (line 230).

#define EXTRUDE_MINTEMP 170

If you want to disable this function, put "//" before the line.

Setting limit switches

Setting up the logic of limit switches

The first thing you need to pay attention to is what kind of limit switches you use and what their operating principle is. In the firmware it is necessary to correctly specify the logic of the limit switches. Find the following lines (301-306)

Const bool X_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool Y_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool Z_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.

If you have mechanical limit switches, then when triggered the circuit closes; opposite each line of the corresponding axis, set the values ​​“true”. If you use optical limit switches, then when triggered the circuit opens; opposite each line of the corresponding axis, set the value “false”.

By default, the firmware has the values ​​“true” opposite each limit switch, which correspond to mechanical limit switches.

After configuration, the operation of the limit switches can be checked using the M119 command in the console.
The response should be the following text:
x_min: open – the limit switch did not work;
x_min: TRIGGERED – the limit switch has triggered.

Setting the "HOME" position - home

The firmware supports 3 pairs of limit switches: for each axis X, Y and Z there are two limit switches min and max. As a rule, limit switches are installed only for the minimum position of each axis, and the maximum is set in the firmware.

The home position (initial position) will be in the minimum positions of the limit switches and this is set in the firmware: (lines 337-339)

#define X_HOME_DIR -1 #define Y_HOME_DIR -1 #define Z_HOME_DIR -1

Changes in the direction of rotation of motors

When assembling a 3D printer, namely when connecting stepper motors to the board, the following situation is possible: when you have configured and connected everything, when you press “home”, the carriage of one of the axes moves in the other direction (not to the limit switch), then you need turn the stepper motor connector 180 degrees or change the values ​​in the firmware:

#define INVERT_X_DIR true // for Mendel set to false, for Orca set to true #define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false #define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true #define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false #define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false #define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false

For example, if you have a Y-axis carriage in the other direction, then you need to find the line

#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false

and change "false" to "true". And so with each axis and extruder.

Setting travel dimensions

In order for the 3D printer to determine the work area, you must specify its dimensions in the firmware: (lines 345-350)

#define X_MAX_POS 205 #define X_MIN_POS 0 #define Y_MAX_POS 205 #define Y_MIN_POS 0 #define Z_MAX_POS 200 #define Z_MIN_POS 0

Next to each line, indicate the corresponding dimensions; by default, the working area is set to 205x205x200 mm

Setting movement steps along axes

Specifying the number of steps of stepper motors is one of the main firmware settings (line 490):

#define DEFAULT_AXIS_STEPS_PER_UNIT (78.7402,78.7402,200.0*8/3,760*1.1) // default steps per unit for Ultimaker

In parentheses, separated by commas, for each axis the number of steps that the stepper motor must make for the carriage to move 1 mm is indicated. Where can I get these values ​​from? You can calculate or take already known ones.

Calculation of X and Y axes (belts)

All axes have stepper motors with 200 steps per revolution, 16 micro-steps per step (this is set by jumpers on the board).

The X and Y axes have a GT2 drive belt with a pitch of 2 mm and pulleys with 20 teeth.

It turns out:

(200*16)/(2.0*20)=80

This is how many steps the stepper motor must take for the X and Y axis to travel exactly 1 mm.

If you have a Gt2 toothed pulley with a pitch of 2 mm and a number of teeth of 20, then the formula is as follows:

(200*16)/(2.0*16)=100

Calculation of Z axis (lead screw)

Along the Z axis there can be:

  • M8 stud with a thread pitch of 1.25 mm, then the formula: 200*16/1.25=2560
  • M5 stud with thread pitch 0.8 mm, then formula: 200*16/0.8=4000
  • Trapezoidal screw with a diameter of 8 mm with a pitch of 1 mm and a lead of 1, then the formula: 200*16/1=3200
  • Trapezoidal screw with a diameter of 8 mm with a pitch of 2 mm and a lead of 1, then the formula: 200*16/2=1600
  • Trapezoidal screw with a diameter of 8 mm with a pitch of 2 mm and a lead of 4, then the formula: 200*16/2*4=400

Pruse i3 Steel uses M5 studs, then the number is 4000.

Extruder calculation

The extruder feed setting depends on the reduction ratio and the diameter of the feed gear. The number of steps that the extruder stepper motor must make to push the plastic 1 mm is selected experimentally after the first firmware is poured into the 3D printer.

Unscrew the nozzle and reduce the minimum nozzle temperature limit to 5 degrees:

#define EXTRUDE_MINTEMP 5

The extruder will now operate with a cold nozzle. Without changing the extruder settings, press to drive the plastic 100 mm. Measure the length of the rod that passes through the extruder with a ruler or caliper.

When choosing the extruder setting, achieve the exact number on a reasonable rod length, for example 200 mm. Once configured, return the minimum temperature limits:

#define EXTRUDE_MINTEMP 170

Limiting the maximum speed of movement along the axes

#define DEFAULT_MAX_FEEDRATE (500, 500, 5, 25) // (mm/sec)

The default speeds are 500,500.5, 25 mm/s on the X, Y, Z axis and the extruder, respectively. We recommend lowering the speed from 500 to 200.

Setting acceleration of movements along axes

Another important setting is setting accelerations for various axes, since due to incorrect settings of this point, problems often occur during printing, namely, displacement of layers due to skipping motor steps. If you set the acceleration too high, there will be gaps. By default, the firmware has the following values:

#define DEFAULT_MAX_ACCELERATION (9000,9000,100,10000) // X, Y, Z, E maximum start speed for accelerated moves. E default values ​​are good for Skeinforge 40+, for older versions raise them a lot. #define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves #define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for retracts

For the X and Y axes, accelerations are 9000 mm/s^2 - this is a lot.

For the initial setting, set it to no more than 1000 and for DEFAULT_ACCELERATION set it to 1500 instead of 3000.

Display activation

The last thing left to do is to activate the display you need. One of the most popular displays is the . Find and uncomment the following lines:

#define ULTRA_LCD #define SDSUPPORT #define ULTIPANEL #define REPRAP_DISCOUNT_SMART_CONTROLLER

These lines should not be preceded by "//". It should look like this:


Uploading the firmware

After all the main changes to the firmware, you can upload it. In the Arduino IDE, go to the "Tools" -> "Board" tab and select "Arduino/Genuino Mega or Mega 2560"


And there you need to set the correct COM port of your 3D printer. To upload the firmware, click on the circle with the arrow.


The progress of the firmware upload is displayed by an indicator, and after successful completion a confirmation message will appear on the screen.