The XYZPrinting Da Vinci is certainly a very interesting new printer at a very reasonable USD 499 retail price.

It comes delivered with a mere 300g Filament cartridge, which is not exactly a lot of material to print with. The filament delivered with the printer has quite some diameter inaccuracies, which do show on the surface of printed models as small blobs.

Our intent was to use our own ExcelFil ABS with this printer. However, the Filament cartridge is electronically protected and communicates with the printer to let it know the remaining filament left on the spool.

Given that we are planning to add this printer to the range of printers we test our ExcelFil filament with, I took a closer look at the mechanisms behind these electronics.

After opening the cartridge, one can find a small PCB at the bottom of it. It has three connectors that are used to communicate with the printer itself. A closer inspection of that tiny PCB shows a Microchip 11LC010 1K EEPROM at its heart. This EEPROM has a memory capacity of 128 byte which stores the information about the filament cartridge.

The three connectors are as following (left to right on the picture above):

1 = GND
2 = SCIO
3 = VCC</pre>

The SCIO pin runs a UNI/O protocol and the chip is controlled via a 8 bit instruction register.

I created a small Arduino Sketch that resets the counter to 999m available. GND(1) and VCC(3) on the Da Vinci Filament EEPROM connect to GND and +5V on the Arduino and the SCIO(2) connects to Digital Out Pin 7 on the Arduino. The sketch is running the UNI/O protocol to read and write the EEPROM contents.

Here the contents of the EEPROM. You can see at byte offset 53 a 4 Byte long HEX value in little endian format (Thanks BXZ for pointing it out!) which reflects the remaining filament length that is communicated to the printer. This is not a literal value and somehow is “mangled”. However setting this value to 0x3f420f00 restores the filament counter to 999m left.

00: 5A41570000343141C0D40100C0D40100 ZAW..41A……..
10: D2005A00544847423031313500000000 ..Z.THGB0115….
20: 000000003400000001010101AA55AA55 ….4……..U.U
30: 883355AA3F420f00D04407202FAE0A00 .3U……D. /…
40: 5A41570000343141C0D40100C0D40100 ZAW..41A……..
50: D2005A00544847423031313500000000 ..Z.THGB0115….
60: 000000003400000001010101AA55AA55 ….4……..U.U
70: 883355AAC0D40100AA55AA5507830A00 .3U……U.U….

The Arduino Code below will check for the presence and ability to communicate to the EEPROM CHIP. When the sketch starts, the LED on the Arduino will blink rapidly. After you have the made connections as described above correctly, the LED will stay solid for about 2 seconds, which indicates that the EEPROM has been reset successfully.

Below a short Video to demonstrate:

This now allows me to use our test filaments on this printers. Not a permanent solution yet, but easy enough as a temporary workaround.

Warning: DO NOT KEEP THE ARDUINO CONNECTED WHEN YOU INSERT THE CARTRIDGE INTO THE PRINTER. This may, or may not void your warranty or render your filament or printer useless. So use this information at your own risk 🙂

Update April, 18 2014: Code below has been updated to work with the new firmware version 1.1.I.

Arduino Sketch – Just copy and paste into the Arduino IDE and upload to your Arduino of choice

Here a great demonstration Video from Florian Uhleman’s Blog showing the whole process in detail:

And finally, here a Freestanding Filament Holder sized for ExcelFil Spools we made to conveniently load the filament into the Da Vinci.

Update January 2015: A lot has happened since I wrote this post. We continued the whole discussion here: