Hey folks! I've recently undertaken the task of improving the EEPROM chip resetter experience for my own Davinci Pro 1.0. I wanted a simple but flexible way to reload my own cartridges with third party filament, to tweak temps on existing cartridges, and also to correct the inevitable discrepancies in filament remaining that happen towards the end of a cartridge. I've got tons of chips laying around from years of buying XYZ filament, but as the availability goes down for those refills I thought it would be good to be able to reuse.
The hardware inventory was simple, and is maybe $8 per unit. You need an Arduino nano, pins, and a holder... all detailed in this excellent thing: https://www.thingiverse.com/thing:2931718. (Full disclosure - I did have to shave a little off the sides and front to make this fit the cartridges better ;) )
The Arduino Nano is $12 for 3 of them on Amazon, https://www.amazon.com/dp/B0713XK923/ref=cm_sw_em_r_mt_dp_U_0iyuDbBTR58AG
The pins are also on Amazon for $8: https://www.amazon.com/gp/product/B007Q847I0/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1
Assembly was trivial - solder three wires and a squirt of hot glue to hold the pins in place.
On to the software. Starting with an excellent code foundation from Voltivo (https://github.com/voltivo/davinci_filament_reset_arduino, https://www.voltivo.com/da-vinci-1-0-filament-counter-reset-using-an-arduino/), I made a few tweaks to support the latest firmware and got that working. However, it rapidly got old commenting and uncommenting lines, translating everything into hex and little-endian, etc. So, I set out to make a menu driven version. You simply use the Serial Monitor in the Arduino IDE, or any other terminal emulator, and follow the prompts to read, edit, and write chips all day long.
Serial Menu version is here: https://github.com/jlaughter/davinci_filament_reset_arduino/tree/Interactive-Serial-Menu-Version
Since this made it really easy and really quick to tweak chip values, I was able to easily trial-and-error identify several new material codes and colors and built them into the code for easy access. All the known colors, materials, and other parameters are explained in the menus and are easy to follow along with.
Hope this helps some of y'all out, and am interested in hearing if this works with other models of EEPROM-chip printers and firmware versions. I've only got a Davinci Pro 1.0 with the latest firmware (v1.1.9) to play with, but it works flawlessly there.
hello is it possible to have the connection diagrams of aruino and display?
Hi - there's no display, you just access the serial console in the Arduino IDE to communicate with the device
Hi, I was wondering if this code still works as I can't get any new cartridges but still have a couple of old ones for my 1.1A and an Arduino Uno.
a thousand thanks
fault of the translator who speaks an evening display such as lcd.
in practice I have to:
1 make the connections between arduino and 3 pins
2 program the arduinop scatch
3 place the kit on the cartridge chip and power up the arduino
and he does everything
or do I have to make selections from the scatch?
ex. (pla abs .. 120m 240m etc ..)
thanks for patience
Correct! Good luck
Yep, still works great!
Thanks for your efforts, I was using another fork (https://github.com/pilotkid/davinci_filament_reset_arduino), with some tweaks, that uses a serial menu, but it didn't have as many options so I'll check this out for sure.
OK, thanks for digging into that. I'll doublecheck the endianness of the serial number. I took out the 'increment serial number' in favor of 'edit serial number'' for flexibility - but when editing a chip it only matters that the serial number changes if the printer has seen it before. Doesn't matter what it is, just that it's different.
The printer keeps a short inventory of cartridges it has seen in flash. If the as-built parameters of a cartridge change (Capacity, material, color or date) but the serial number doesn't, it calls it unidentied. Any change to the serial number keeps that from happening.
OK, got answers for you here. It appears that the serial numbers are little endian just like everything else in the chip, but the voltivo routine increments it somewhere other than the least significant digit. Here's 3 stock chip examples:
0x000000000000000032393730 - ascii 000000002970
0x000000000000000037343230 - ascii 000000007420
0x000000000000000033383330 - ascii 000000003830
These serial numbers align with the last 4 digits of the serial number on the stickers for each cartridge examined.
Now, in your example, the Voltivo code didn't increment the last digit in the above, it incremented the first one - the most significant of the four digits we're looking at. Basically it incremented your serial number from 0720 to 1270. For my examples, it would have incremented the 2, 7, and 3.
This isn't a bad thing; it's just a different approach. As I mentioned earlier, it only matters that the serial number changes, not what it changes to. I also tested and changing any digit in the 12 bytes will satisfy the printer, so there's plenty of room to tweak without running into previous cartridge identities that the printer may remember.
Hope this helps!
Thanks for looking into it.
This means, when you change any value in the chip you have to change the serial nr too.
To me it looks that the printer monitors and matches serial nrs and contents. When it finds a new serial nr it is satisfied.
I will try the next time when I reload a cartridge again and let you know.
Correct - the printer remembers known serial numbers and build parameters for the cartridge and calls it invalid if they change. You don't have to increment the serial number if you're only changing the filament remaining value or temperatures - but if you change the type, color, or capacity you need to also alter the serial number or the printer will call it an unidentified cartridge.
I used your program and found something.
It looks you are writing the serial nr back in the wrong order.
I changed the serial nr. Just typing in the old nr, and incremented the last position(on the screen most right).
I wrote the Eeprom.
Then I reread the Eeprom and noticed that the serial nr was reversed.
Then I changed the serial nr again by typing all bytes (2 hex characters) in the reversed order,.
Now reading back the serial nr was like the original and the bit most right was increased.
I am trying to go through your code, but not knowing C++ (and the libraries you used) It is tedious to understand what all is happening.
No worries - fixed on and recommitted on GitHub - thanks for catching this!
Thanks, works correct now. I just refilled a cartridge and programmed the chip.
I did some checking.
The org Voltivo routine increments the serial nr when writing. However to me it looks that the serial nr is not little endian.
I have reset the chip with the org routine. Initial the serial nr was
after resetting it was
Then I rewrote the chip with your program and changed the filament values.
Then the printer accepted the new chip.
I was a bit to fast with saying that it works. I was able to rewrite the chip, but the printer reported "unidentified cartridge".
I noticed that the original program from Voltivo has an addition to increment the serial nr.
For me so far reprogramming the chip with the Voltivo program and setting a new length worked.
I will try next time to also increment the serial nr. in your program.
I Will let you know the result.
That's great! Glad it worked for you. Didn't know the printer would do 100C - good to know, and I'll make that change. Thanks!
Thanks for your work.
I tried it and it works like a champ on my Arduino Uno.
I changed in your code the max for the bed temp to 100C. I am printing on a glass plate on top of my DaVinci Pro 3in1. Setting 100 C for the bed temp gives me approx 90 on top of the glass.
To answer the question below.
I reset the chip, because I still use the original cartridges however filled with third party filament.
I have only little space for the printer and cannot hang a spool outside the printer. Further the cartridge is a good way to store the material.
With silica gel in the cartridge it stays dry. Also I get an automatic warning when the filament is low. Further I tried a few times and had feeding troubles when I hung a 1 kg spool on the back of the printer.
The disadvantage is that you have to rewind the third party filament on the XYZ spools. (I buy filament in 1-2kg spools). I do this by means of my battery operated drill and some spindles for the spools.
After rewinding the original XYZ spools I weigh them subtract 150 gr for the spool and divide by the weight per meter of the filament (2.3 - 2.5 gr for ABS and 3.0 - 3.45 g for PLA) This gives me the length of the filament accurately enough.
Maybe it is extra work, but at least I have no feeding troubles, no tangled filament on the spool, good dry storage, auto low filament warning and quick filament changing.
I only use 3rd party filament on my Davinci Pro 1.0 but I never used a filament chip because the pro accepts these filaments without any chip.
Maybe I'm not aware of the benefits of using the chips.
Why should I be using the chip?
For me, it's a huge convenience factor. I use the cartridges for ease of loading and unloading, and to keep the dust off the filament spools. The chip allows me to know how much filament is left in the cartridge without opening it up - and since that info feeds over to the software, I can even see how much filament is loaded on the laptop before starting and while monitoring the job. It's also saved me from starting a job with the wrong filament selected once or twice :)