Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Custom firmware development
Again you are doing amazing work.

It looks like my free time to play with the firmware is getting diminished so I probably will not get to help as much. I have attached my current firmware. There are a number of small bug fixes that I have found in the Configurator. Things like a typo in a stepperY that should be a StepperX. Or in the Sensative Pins we missed the Heat2Temp. You can compare these to your code and merge if you want.

I will ask you to consider switching the Extruders back so E0 is on the right. I have three reasons for this.
#1 There will be a lot less IF NUMEXTRUDER > 1 statements. They would be removed from the UserPins.h, the Configuration.h and a few other places
#2 The Default Extruder should be the one with the bed level probe
#3 I found a really simple way to prevent the bed crash when homing the Y axis.

My version of the firmware keeps the Extruder on the right as E0. look in the Printer.cpp and you will see my simple solution. If you choose to keep the extruders switched that is fine but it may be more work in the long run to keep this backward compatible with the Dav1.
We should make sure the bed calibration and auto bed leveling work. I think that will be easier to do with E0 as the one with the Probe. I will not be able to work on those features for several weeks.

What I will be working on instead is more critical to my projects. I have discovered that the two cooling fans in the back are independently controlled by the motherboard. If take a look you will probably notice that only one of your fans are spinning right now. The fan on the right is using pin 25 just like the Dav1. The fan on the left is using Pin 4. My attached firmware has the cooling fan defined using Pin 4. If you want to get your second fan working right now you would need to change this line in the configuration.h
#define EXT1_EXTRUDER_COOLER_PIN ORIG_FAN2_PIN // To this. Then make sure it is defined in userpins.h like in the one I included.

I will be modeling a few parts for the Davinci 2.0. and sharing them on One part will attach to the bottom of the toolhead and cool the plastic as it is extruded. The second part will redirect the air flow from the one remaining fan and focus it toward the two threaded filament guides. I hope I can add a little guard at the top so we can use flexible rubber like filaments. Right now they bend out through the small gap between the filament guide and the gears. The firmware I have included here uses this second fan to cool the extruded filament. When I finish this project I will post it to a more appropriate thread.

If I make any changes to the firmware in the future I will use the repository.
Thanks I saw it but I missed the solution, in same time reading at
I found //#define WAITING_IDENTIFIER "wait" that solved my issue.

I will continue monitoring my printer to see if other freeze happen before to apply your workaround

Thanks a lot I will check your code but I remember I did not set lot of extruder number check for exchange - but I will review and check the bed level probe (I never used...)

About fan well - I do not have same version of Da Vinci 2.0 as yours - I have only one fan for 2 extruders (see my pictures) - I noticed the connector for fan2 on my board was not used - I guessed it was for PLA later on - I got the early Davinci 2.0 that may be the reason on the difference.


As requested, the power saving function has been pushed to my git-hub ([color=#0000bb] as well as some minor fixes,
But dual extruder support for Davinci 2.0 and clean nozzle are not on it yet, as we are still under discussion about pins exchange (or not) and impact on code.
My git is originaly cloned from bgm one.

I will review your code for the dual extruder, for your ditto fixes I won't include the ones for more than 2 extruders as I do not want to change for something irrelevant.
For your second fan fix I cannot test as I only have one fan on my version of Davinci 2 - so need to check code to see if any impact
For others fixes/change I need some time to sort understand what they are doing.


I forgot to explain how my solution works for homing the Y axis without crashing into the back.
I have Back_On_Home_Y set to 7. That makes it so it will home the Y axis then move back 7 mm. That lines it up with the 0 point on the bed. From there the tool head can move along the X axis without hitting anything.

The only change I made in the code was in the Home Y Axis method.
First thing I do is select Extruder #1. That moves the tool head to the right.
Then I let the code home the Y axis as normal.
Last I reselect whatever Extruder was previously selected. In most cases that would be Extruder #0 so the tool head moves back to the left.

Inside Repetier host I can still move the assembly back to the right. That is how the nozzle cleaning command worked.

Strange that you only have one cooling fan on the back of your tool head.
Yes the Y end_stop is a good catch, I have tested your home function and got some issue - if extruder is in front of right cleaner, it will hit it strongly and it is not good.
I also noticed your home function do not put right extruder on cleaner box, but on position 0,0 on bed, which is different than normal home position, which is park position in Xmin, Ymin (like in da vinci 1.0). This make the bed always covered by extruders.

For me the extruder in home should be full on right, so no extruder on bed when doing home. That bring me to the concept, that even in home position, I should be able to switch extruder - which is only possible if left is default one (like selected when switch on printer and then doing home). If right is default one, it need before to switch extruder, to move from home position to 36 mm to left, then switch can happen. If not, the switch do not happen, or sometimes, right extruder hit the right side because not enough distance.
Another pro for this, is that configuration settings are easy : E0 is 0,0 not need to define a distance between bed and extruder - and the result is less movement of extruder.
Echanging pins solve the issue from my point of view - it needs just 2 tests #IF: one in userpins.h for pin exchange and one in configuration.h for extruder direction
Others #IF are not related to pin exchange but difference of settings between Davinci 1 and 2, like bed size - so both solutions (same pin or exchange) can work but I prefer the Left as E0 and the E1 on right, it bring less constaint and code change is limited.
I am open to discuss if I missed some cons or pros for one solution to choose the best one, but so far I will do the E0 on Left and E1 on right

G32 / G29 functions are dependent of distance from home position to 3 points, not default extruder and looking at default values in configuration.h, it seems Davinci 1 and 2 are different, I also saw some video of davinci 1, and the cleaner on right is on side, like left one on davinci 2 and not in front. So I need some confirmation about positions

About second fan I suggest to add a parameter in configuration.h and not rely on number of extruders to handle there are 2 fans or one fan ( I will do that), I got my Davinci 2.0 in May, just after it was launched, so may be that is why my version has 2 extruders but only one Fan.

I have 2 questions to be sure the clean nozzle function works properly on Davinci 1.0 and 2.0 as well as the Z probing functions , I enclose the drawing to show what 2.0 looks like


I agree with you. I asked that you consider switching them. You bring up some very valid points. In the end I agree with you completely. Thank you for taking the time to work this through. I will completely support you going forward with the E0 on the left.

On a side note. I have created a new thread for me to work on the cooling fans without posting here where it doesn't belong. Please work with me in the new thread. I would like to write up instructions for any version of the Da Vinci to have a fan to cool the extruders and one to cool the extruded plastic.
I saw that many people now work on the firmware. Each one brought back to fix and new changes but the problem is that there is no place to bring the whole.
I wonder if I can publish the version that I modified with changes in Luke and Drbogger joined together on my deposit?
Otherwise, one would use a single repository or push the world's commit?
In this single repository, it is necessary to distinguish the Da Vinci 1.0 and 2.0 to simplify adjustments

I know the better it would be to directly push everything to the official Repetier, but Da Vinci is too special and ca involves too much change to match
Thanks - actually pins exchange is your suggestion - I have just tested both solutions before choose
Sure I will help - I am also interested in second fan support
Yeah, we definitely need a central location where all patches and fixes can be incorporated, after having been sufficiently tested. Initially two branches, one per printer model, should be fine.
On the 1.0 the cleaner is located on the left side of the dump box, which is on the right side (obviously). And as for the Z probe coordinates, my X1, Y1 are -4,-10, so I guess it depends a lot on how you define your printing area. I think it makes sense for 0 to be where the actual printing area begins, and thus the home coords to be negative.
Thanks Oscahie so I used relative deplacement from Xmin and Ymin for clean nozzle function to avoid to be dependent of printing area, and change movement if Davinci 1.0

About Z probing it means default values are not really for Da Vinci (as I was guessing when reading all topics on this subject), I will check if I can change fixed coordinates, to relative to Xmin and YMin cooordinates, to avoid origin of printing bed dependency (if possible)

Hi waiting for a decision I have pushed Dual extruder support as well as Clean Nozzle function on my git-hub

It include also some of yours suggestions but not all as I did not figure out about some change - please let me know if I missed something
[strike]I have also put the second fan in stand by waiting for more conclusions about how to manage it - let me know[/strike]
Edit 3 : modification done on git-hub ( second fan support)

Of course anyone feel free to push change to my git-hub, if you think it can be improved,

Edit : today I completly opened my printer to check wires and in same time I have changed SD Card to a wifi one as casing was open
and I found the original 2.0.J firmware on the card as well as Gcode text samples and calibration file - if anyone need it, let me know I will send by MP as I am not confortable to publish it

Edit2 : After flashing back to stock FW I noticed :
1 - my Nozzle Cleaning function does not heat extruders on menu (no impact on GCODE command as it can be heated before) - I have also noticed the original function allow also to bring easily nozzle to end user to be manualy cleaned - I will add these lacks
2 - there are some settings still missing in the custom FW present in stock : clean drip boxes, sound on/off, langage selection
3 - none of the custom settings are saved in eeprom so need to redefine them at each start up - I think it should be done
4 - Current Repetier FW less noisy than stock one - and UI is definitly better :woohoo:

Thanks for your help,

Isn't that going to be a bit confusing for users though, if the coordinates for Z probing stored in the EEPROM don't have any effect?
Any effect ? It is not my suggestion
I just propose to use Xmin, Ymin which are the home position to be the reference instead of X0,Y0 on print bed to use the X1,Y1 X2,Y2, X3,Y3 values
It is just an idea actually
Ahh, gotcha now.
I just create a "Testing" branch where I add the functionalities of Luke and Drbogger.

Work remains, menu Drbogger takes into account that a single extruder and Cleaning nose only works on the DaVinci 1.0
I added you as contributors, so you can make changes.

It would have created a repository for Voltivo centralized location with a branch that is "stable" where only the admin allow changes when another stable and development branch where each one can perform make changes.
I made a few changes to the Fan Pin Assignment Logic. With this change it is now really easy for someone to repurpose the main extruder cooling fan as an extrusion cooling fan. This will work on the Da Vinci 1 and 2 Single fan or dual fan.

I also corrected which fans are assigned to which extruders on the models with 2 fans. Thanks to LUC for the NUM_FANS variable and logic.
I have good news, Luke and DrBogger well advanced. So I went back on firmware Repetier Smile
I did several tests, I found some small bugs but nothing annoying though.
When everything is good, I put it all on the Branch Da Vinci.

It there's a priority for me to implement security: Get off the shelf when moving an axis with the LCD or Repetier Host because we tend to forget and nozzle tapped: S

For those who would like to test, be careful if you already had your own settings EEPROM because they have changed. Your "Start Gcode" and "End Gcode" will perhaps be to check

Have a nice day!
Hello firmware devs. I am generally displeased with the print quality of the standard XYZ firmware, and the cartridge limitations.

By day I am an Electrical Engineer, and do a lot of schematic work and board layout, by night it looks like I am playing with my 3D printer a lot.

I am more than willing to test stuff, and am relatively familiar with arduinos, not so much with 3D printing.

Let me know if there is any specific branch you want me to test, or if you need someone to help with hardware mods. Keith, I am looking at you and a Da Vinci 1.0 to 2.0 upgrade Smile

For now, I think I will try the luc-github branch.

I have a brand new Da Vinci 1.0, purchased last week from newegg. It came with 1.1.1J from the factory. Has no J1 jumper, and the three push buttons are not populated.
Hi Malcom, welcome to test and feedback, I have recently activated issue tracker on my github, feel free to use it.

my DaVinci 2.0SF does not have jumper neither, but the contact points which are present, are enought to reflash

Forum Jump:

Users browsing this thread: 5 Guest(s)