Jump to content
Ultimaker Community of 3D Printing Experts

Recommended Posts

Hi

I flashed Marlin 1.1 on my UMO+ with Dual-Head.

configured all - works.

BUT: The Extruder Auto-Fan doesn't switch on.

I tryed to change the Pin to 255 (like in the marlin 1 before) -> failre during compile.

Now i figured out, that 255 is not the real pin.

If i try pin 7, i get failure too:

 

#if E0_AUTO_FAN_PIN == FAN_PIN     #error "You cannot set E0_AUTO_FAN_PIN equal to FAN_PIN."

 

How can i solve this?

I think pin7 is even the wrong - this is the 24V fan, isnt it?

Which pin is the 5v fan?

Edited by Guest

Share this post


Link to post
Share on other sites

I found on amedee's branch of the old marlin this code

void setExtruderAutoFanState(int pin, bool state)
{
 if (pin == 255) {
   // Hack for Ultiboard 2.1.4+, hot-end fan is on pin PJ6, not mapped on Arduino
   // We do direct pin access, no PWM
   DDRJ |= _BV(6);
   if (state) {
     PORTJ |= _BV(6);
   } else {
     PORTJ &=~_BV(6);
   }
 } else {
   unsigned char newFanSpeed = (state != 0) ? EXTRUDER_AUTO_FAN_SPEED : 0;
   // this idiom allows both digital and PWM fan outputs (see M42 handling).
   pinMode(pin, OUTPUT);
   digitalWrite(pin, newFanSpeed);
   analogWrite(pin, newFanSpeed);
 }
}
void checkExtruderAutoFans()
{
 uint8_t fanState = 0;
 // which fan pins need to be turned on?      
 #if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1
   if (current_temperature[0] > EXTRUDER_AUTO_FAN_TEMPERATURE) 
     fanState |= 1;
 #endif
 #if defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1 && EXTRUDERS > 1
   if (current_temperature[1] > EXTRUDER_AUTO_FAN_TEMPERATURE) 
   {
     if (EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN) 
       fanState |= 1;
     else
       fanState |= 2;
   }
 #endif
 #if defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1 && EXTRUDERS > 2
   if (current_temperature[2] > EXTRUDER_AUTO_FAN_TEMPERATURE) 
   {
     if (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN) 
       fanState |= 1;
     else if (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_1_AUTO_FAN_PIN) 
       fanState |= 2;
     else
       fanState |= 4;
   }
 #endif

 // update extruder auto fan states
 #if defined(EXTRUDER_0_AUTO_FAN_PIN) && EXTRUDER_0_AUTO_FAN_PIN > -1
   setExtruderAutoFanState(EXTRUDER_0_AUTO_FAN_PIN, (fanState & 1) != 0);
 #endif 
 #if defined(EXTRUDER_1_AUTO_FAN_PIN) && EXTRUDER_1_AUTO_FAN_PIN > -1 && EXTRUDERS > 1
   if (EXTRUDER_1_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN) 
     setExtruderAutoFanState(EXTRUDER_1_AUTO_FAN_PIN, (fanState & 2) != 0);
 #endif 
 #if defined(EXTRUDER_2_AUTO_FAN_PIN) && EXTRUDER_2_AUTO_FAN_PIN > -1 && EXTRUDERS > 2
   if (EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN 
       && EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_1_AUTO_FAN_PIN)
     setExtruderAutoFanState(EXTRUDER_2_AUTO_FAN_PIN, (fanState & 4) != 0);
 #endif 
}
#endif // any extruder auto fan pins set

Share this post


Link to post
Share on other sites

Solved it by adding following code at the end of temperature.cpp

 DDRJ |= _BV(6);
 if (current_temperature[0] > (EXTRUDER_AUTO_FAN_TEMPERATURE) || current_temperature[1] > (EXTRUDER_AUTO_FAN_TEMPERATURE)) 
 {
   PORTJ |= _BV(6);
 }  
 else if (current_temperature[0] < (EXTRUDER_AUTO_FAN_TEMPERATURE - 2 ) && current_temperature[1] < (EXTRUDER_AUTO_FAN_TEMPERATURE - 2 )) 
 {
   PORTJ &=~ _BV(6);
 }

Share this post


Link to post
Share on other sites

I copied your above code to the bottom of temperature.cpp and I get the following error on compile:

 

Arduino: 1.8.5 (Windows 10), Board: "Arduino Mega ADK"

In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0,

                 from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90,

                 from sketch\Marlin.h:32,

                 from sketch\temperature.cpp:27:

temperature.cpp:2289: error: expected unqualified-id before 'volatile'

 DDRJ |= _BV(6);

 ^

temperature.cpp:2289: error: expected ')' before 'volatile'

temperature.cpp:2289: error: expected ')' before 'volatile'

temperature.cpp:2290: error: expected unqualified-id before 'if'

  if (current_temperature[0] > (EXTRUDER_AUTO_FAN_TEMPERATURE) || current_temperature[1] > (EXTRUDER_AUTO_FAN_TEMPERATURE))

  ^

temperature.cpp:2294: error: expected unqualified-id before 'else'

  else if (current_temperature[0] < (EXTRUDER_AUTO_FAN_TEMPERATURE - 2 ) && current_temperature[1] < (EXTRUDER_AUTO_FAN_TEMPERATURE - 2 ))

  ^

exit status 1
expected unqualified-id before 'volatile'

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

 

Any suggestion?

Share this post


Link to post
Share on other sites

I'm also super super curious about your process for getting this running. I'm hoping to get the latest marlin (1.1.8) up and running on my UM2, to try and get their sweet sweet autoleveling working using a precision piezo kit, and one of the aliexpress 2.1.5 boards with the removable stepper drivers so I can go to TMC2100 Silent Stepsticks (seems to be working great in testing so far, but I haven't disassembled the old board yet). 

 

Any chance you'll be making a fork we can look at?

Share this post


Link to post
Share on other sites

I think you guys will have more luck following my thread: 

 

 

The UM2 or UMO+ should only need a couple small changes compared to my branch (motherboard, temp sensor).

 

 

Share this post


Link to post
Share on other sites
12 hours ago, lars86 said:

I think you guys will have more luck following my thread

The UM2 or UMO+ should only need a couple small changes compared to my branch (motherboard, temp sensor).

 

The UM2 head uses this 5V hot end cooling fan which I don't think is applicable to your configuration.

Share this post


Link to post
Share on other sites
12 hours ago, nullsibnelf said:

I'm running the new UM2 board in my UMO+.

Can you please post a fork of the codebase?

I am getting errors and am not yet familiar enough with the Marlin codebase (or C for that matter) to understand what exactly I'm doing wrong.

Share this post


Link to post
Share on other sites
12 hours ago, nullsibnelf said:

Sorry, but I dont have a clue how to do a fork.


I'll try to figure it out the next hours and will post the result here.

give me some time.

 

If you have some patience I can walk you through how to do a fork, git, etc.

Share this post


Link to post
Share on other sites

Got it.

The failure was by me (shame)...

Please look at https://github.com/nullsibnelf/Marlin

temperature.cpp from line 2182 to line 2196.

 

the fork is at the moment not for dual head (because i changed back to single nozzle e3d).
But I added all the changed mentioned here in this post. so this should fix your compile error. In fact, it was a missing '}' at the right possition.

Sorry for that.

Share this post


Link to post
Share on other sites
42 minutes ago, nullsibnelf said:

Got it.

The failure was by me (shame)...

Please look at https://github.com/nullsibnelf/Marlin

temperature.cpp from line 2182 to line 2196.

 

the fork is at the moment not for dual head (because i changed back to single nozzle e3d).
But I added all the changed mentioned here in this post. so this should fix your compile error. In fact, it was a missing '}' at the right possition.

Sorry for that.

 

That looks good. I'll try it this evening and report back. Thank you very much for your help.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Our picks

    • Taking Advantage of DfAM
      This is a statement that’s often made about AM/3DP. I'll focus on the way DfAM can take advantage of some of the unique capabilities that AM and 3DP have to offer. I personally think that the use of AM/3DP for light-weighting is one of it’s most exciting possibilities and one that could play a key part in the sustainability of design and manufacturing in the future.
        • Like
      • 3 replies
×

Important Information

Welcome to the Ultimaker Community of 3D printing experts. Visit the following links to read more about our Terms of Use or our Privacy Policy. Thank you!