1. Got a question or need help troubleshooting? Post to the troubleshooting forum or Search the forums!

R1+ Firmware V2 - What's Changed

Discussion in 'Software' started by danzca6, May 1, 2016.

  1. danzca6

    danzca6 Well-Known Member

    Joined:
    Jul 27, 2015
    Messages:
    2,161
    Likes Received:
    1,072
    As some of you might know, Robo initially had a disclaimer for users of R1+ printers to contact them for firmware if needed on their firmware documentation page. The leadscrew upgrade firmware was known to be the "go to" firmware for users to use as a base for R1+ printers. In fact a few weeks ago Robo actually got rid of the disclaimer and added a link for the R1+ firmware. No surprise that it was a link to the same files as the leadscrew upgrade. Now within the last week they have come out with a V2 version of the R1+ firmware. Oddly they didn't give any change log or feature enhancement callouts on the firmware page. I haven't seen robo do much of anything with firmware upgrades in some time now and was curious to what they deemed worthy of a V2 title. After following all the great work @WheresWaldo has done with retrofitting the truly latest firmware put out by the Marlin project for our Robo's, Check out his thread here (http://community.robo3d.com/index.p...-1-0-release-candidate-6-for-r1-r1-plus.5806/). I was expecting maybe they have adopted some of that work. Wishful thinking for sure.

    I downloaded both the V1 (leadscrew upgrade) and V2 versions of the R1+ firmware and found only two files have changed. Configuration.h as to be expected, but also Marlin_main.cpp which was not expected. The details are found below along with my notes on each change. My own personal opinion after reviewing these changes and seeing the work Waldo is doing on the newest Marlin firmware releases, I can not recommend updating your machine to the V2. They have done really nothing of value in this V2 update (see my edit to this post below for update). In fact, they may have introduced some bits that could cause issues. Yes they even introduced an "Easter Egg". More on that below. If your printer works, leave it alone. If you want to try a new firmware, use the versions Waldo has released. Waldo and I did have a brief conversation on these changes and I will let him comment further on them here if he wants.

    Firmware Files compared
    V1 - http://download.robo3d.com/firmware/R1/ROBO3D_LEADSCREW_V1.zip
    V2 - http://download.robo3d.com/firmware/R1Plus/ROBO3DR1PLUSV2.zip

    Files Changed

    Configuration.h

    Line 19 Edit - Changes a simple string to indicate R1+. Changes nothing for the printer funtion
    Code:
    V1 - #define STRING_CONFIG_H_AUTHOR "(RoBo 3D, R1 Single Extruder)" // Who made the changes./robo
    V2 - #define STRING_CONFIG_H_AUTHOR "(RoBo 3D, R1+ Single Extruder)" // Who made the changes./robo
    
    Line 79 Edit - Changes a simple string to indicate V2. This will be displayed on the LCD to show you are using the newest firmware. Again, no functional change.
    Code:
    V1 - #define CUSTOM_MENDEL_NAME "ROBOR1PLUSV1"    //robo
    V2 - #define CUSTOM_MENDEL_NAME "ROBOR1PLUSV2"    //robo
    
    Line 323 Edit - Change that is very interesting. Prior to this they allowed the axis to move past what it thought was zero. Changing this to True now won't allow that and IMHO that is a good thing to keep users from crashing an axis when manually moving an axis.
    Code:
    V1 - #define min_software_endstops false // If true, axis won't move to coordinates less than HOME_POS.  //robo
    V2 - #define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.  //robo
    
    Line 390 Edit - Change that actually sets the Z offset in the firmware and not the software. When I previewed the changes with Waldo he didn't see this change when he downloaded the two files. I checked again this morning and I still see it so I will point it out. Does nothing if you are defining the M565 command in you starting gcode. Calling that command will override this, but this does give a reasonable default for the z offset.
    Code:
    V1 - #define Z_PROBE_OFFSET_FROM_EXTRUDER 0
    V2 - #define Z_PROBE_OFFSET_FROM_EXTRUDER .9
    
    Marlin_main.cpp - scary to see them starting to make changes to (or leaving their own internal code changes in) this file
    Line 187 Add - Sets a new variable to be used in the next addition.
    Code:
    int testcode=0;
    
    Line 565-603 Add - Looks like Robo put in a little "Easter Egg". More like they (Austin Smith) left some code in that shouldn't have been when they released this to the public. After 4 specific conditions are met at the right timing, this code will start a print off of the sd card for a mysterious file called "robo~1.gco". What it is has yet to be determined. Probably some test print, but unconfirmed. On my SD supplied by robo there are only 3 visible files. When I enabled viewing hidden files, surprisingly I then showed 114 files and 19 folders. My robo is not an R1+ and the mystery file was not present. Some gcode files were hidden though. I really don't know where all the extra junk was from on my SD card. So if you have an R1+ you might have a file on it like this. Remember, that the ~1 probably is what happens to some long file names. So this isn't the full file name.
    Code:
    //SECRET START - Austin Smith 2/24/16
      if ((READ(X_MIN_PIN))==1 && (testcode == 0) && (READ(Y_MIN_PIN))==0 && !(card.sdprinting) && (READ(X_ENABLE_PIN))==1)
         {
           testcode = 1;
           delay(200);
           if ((READ(X_MIN_PIN))==1)
              {
                testcode=0;
              }
              else
              {
                testcode = 2;
              }
          }
            while (testcode == 2)
            {
                 if ((READ(Y_MIN_PIN))==0)
                 {
                   delay(2000);
                   if ((READ(Y_MIN_PIN))==1)
                   {
                     card.initsd();
                     card.ls();
                     card.openFile("robo~1.gco",true);
                     card.startFileprint();
                     starttime=millis();
                     testcode=0;
                   }
                   else
                   {
                   testcode=0;
                   }
                 }
                 else
                 {
                   testcode=0;
                 }
             }
    //SECRET START - Austin Smith 2/24/16
    
    Line 1478-1494 Add - This at the end of the definition for the G28 command to Home all Axis one at a time. This will just give more feedback to the user on the gcode terminal window.
    Code:
          SERIAL_PROTOCOLPGM("X:");
          SERIAL_PROTOCOL(current_position[X_AXIS]);
          SERIAL_PROTOCOLPGM(" Y:");
          SERIAL_PROTOCOL(current_position[Y_AXIS]);
          SERIAL_PROTOCOLPGM(" Z:");
          SERIAL_PROTOCOL(current_position[Z_AXIS]);
          SERIAL_PROTOCOLPGM(" E:");
          SERIAL_PROTOCOL(current_position[E_AXIS]);
    
          SERIAL_PROTOCOLPGM(MSG_COUNT_X);
          SERIAL_PROTOCOL(float(st_get_position(X_AXIS))/axis_steps_per_unit[X_AXIS]);
          SERIAL_PROTOCOLPGM(" Y:");
          SERIAL_PROTOCOL(float(st_get_position(Y_AXIS))/axis_steps_per_unit[Y_AXIS]);
          SERIAL_PROTOCOLPGM(" Z:");
          SERIAL_PROTOCOL(float(st_get_position(Z_AXIS))/axis_steps_per_unit[Z_AXIS]);
    
          SERIAL_PROTOCOLLN("");
    
    Line 1639-1655 Add - This at the end of the definition for the G29 command for Detailed Z-Probe, probes the bed at 3 or more points. This will just give more feedback to the user on the gcode terminal window.
    Code:
          SERIAL_PROTOCOLPGM("X:");
          SERIAL_PROTOCOL(current_position[X_AXIS]);
          SERIAL_PROTOCOLPGM(" Y:");
          SERIAL_PROTOCOL(current_position[Y_AXIS]);
          SERIAL_PROTOCOLPGM(" Z:");
          SERIAL_PROTOCOL(current_position[Z_AXIS]);
          SERIAL_PROTOCOLPGM(" E:");
          SERIAL_PROTOCOL(current_position[E_AXIS]);
    
          SERIAL_PROTOCOLPGM(MSG_COUNT_X);
          SERIAL_PROTOCOL(float(st_get_position(X_AXIS))/axis_steps_per_unit[X_AXIS]);
          SERIAL_PROTOCOLPGM(" Y:");
          SERIAL_PROTOCOL(float(st_get_position(Y_AXIS))/axis_steps_per_unit[Y_AXIS]);
          SERIAL_PROTOCOLPGM(" Z:");
          SERIAL_PROTOCOL(float(st_get_position(Z_AXIS))/axis_steps_per_unit[Z_AXIS]);
    
          SERIAL_PROTOCOLLN("");
    
    Line 2821-2824 Add - A new M command that just echoes the status of the X_ENABLE_PIN to the gcode terminal window.
    *** This change I don't like. Why? The M command case statement prior (M575) no longer has a break; statement at the end because they inserted this code in the incorrect spot. Bad programming and may cause an issue if that M575 command is called. Robo...check your code please!
    Code:
       case 585:
       SERIAL_PROTOCOLLN(READ(X_ENABLE_PIN));
    
       break;
    
    EDIT 5/3/16:
    Robo listened and added to their firmware documentation site with a synopsis of what changed in the R1+ V2 firmware. Now that we have the instructions to start an untethered print using the SD card ("Easter Egg"), that is a good update for those users who don't have an LCD controller yet. Still haven't seen them fix the case statement syntax issue in Marlin_main.cpp. Until then, I still can't recommend anyone using this. I'll keep checking and update this post once I see it fixed.

    • Fixed a potential bug where manually driving the Z axis down could travel below the build plate and miss align the Z axis.
    • Also added a way to print from the SD card with no computer attached.
      • To do this you simply add a robo.gcode to the SD card and place it in the printer. All the motors must be disengaged and the bed must be away from home. When the printer is on and idle, tap the X axis endstop once with your finger. Then you have 2 seconds to push the Y Axis bed back to home position. Once you do this the printer will start printing the robo.gcode on the SD card. If you did not preheat the printer it may take some time to actually start printing.
     
    #1 danzca6, May 1, 2016
    Last edited: May 3, 2016
  2. mark tomlinson

    mark tomlinson ༼ つ ◕_ ◕ ༽つ
    Staff Member

    Joined:
    Feb 21, 2013
    Messages:
    21,246
    Likes Received:
    7,011
    IIRC a file called "robo~1.gco" placed on the on the SD card would cause it to auto-print that GCode (the original Robo SD card).
    Not sure if that works on the ones in the LCD controllers (don't see why not).
     
  3. WheresWaldo

    WheresWaldo Volunteer ( ͠° ͟ʖ ͡°)
    Staff Member

    Joined:
    Feb 18, 2015
    Messages:
    5,806
    Likes Received:
    3,526
    I did not spend as much time as @danzca6 spent on this comparison of V1 vs. V2, but from my cursory examination there is absolutely nothing in it that warrants anyone using it. There is no change in print functionality. As far as more information in those added sections, since many people never look at the terminal screen anyway there is really no point nor anything of value to the end user in any of that additional code. The coding error is a problem. The fact that they continue to use a version of Marlin that is now several revisions behind the current development is also a problem.

    If someone were to ask me if they should upgrade their R1+PLUS from V1 to V2, my initial response would be NO! If they are trying to fix a problem, I would suggest reinstalling V1 or moving to Marlin 1.1.0 instead of V2.

    This is just an opinion, not to be taken as gospel. If you think there is value in V2 (really, there is none) you can play with it if you want. I wouldn't waste any time on it.
     
  4. TomerO

    TomerO Member

    Joined:
    May 2, 2016
    Messages:
    96
    Likes Received:
    45
    I was just looking into the v2 and contacted support when I saw this.

    They updated the change log in the web page :)

    I also pointed them here in hope they fix the issues and maybe even update Merlin.
     
  5. daniel871

    daniel871 Well-Known Member

    Joined:
    Apr 18, 2015
    Messages:
    1,322
    Likes Received:
    510
    Yeah, looks like they have kludged together a way to start any file named Robo.gcode if you manually hit the X & Y endstops in sequence, according to their updated change notes.

    Luckily, you can avoid that as long as you never name any files robo.gcode. The rest of it is also pointless.
     
  6. danzca6

    danzca6 Well-Known Member

    Joined:
    Jul 27, 2015
    Messages:
    2,161
    Likes Received:
    1,072
    That's hilarious. Glad to see they followed through and updated the site. Not sure why the didn't do that to begin with. I'll have to look to see if they fixed the code. Thanks for the update. Glad to see my research was correct.
     
  7. Hey Guys,

    We've deviated some from the regular Marlin release. We've been just modifying what we've had and adding fixes/features to continue to work with our printer.

    I believe there are plans to get updated with the latest Marlin releases.

    Brian
     
  8. danzca6

    danzca6 Well-Known Member

    Joined:
    Jul 27, 2015
    Messages:
    2,161
    Likes Received:
    1,072
    Brian

    Glad to see you guys added more info for users on the firmware webpage around the V2. I see that there is still an error in the structure of the case statement in Marlin_main.cpp where you inserted the new M585 command. Is Robo looking at adding the break statement to the end of the prior case statement? Can't say I would really want to see anyone using this version without that fixed.

    Also, if you are wanting to look at a great start to using the latest Marlin firmware with the robo's, check out this thread http://community.robo3d.com/index.p...-1-0-release-candidate-6-for-r1-r1-plus.5806/. @WheresWaldo has done the groundwork for you.
     
    Geof and Brian Robo 3D like this.

Share This Page