Sunday, December 28, 2014

MendelMax3 - Removing extra extruders from GLCD

By default the GLCD display always shows 3 extruders, even when you only have one or two installed.

This blog post will show you how to modify your firmware to only display the number of extruders that you have configured.

The MendelMax3 uses a RAMBo board, which runs Marlin firmware. I created a github repository containing the initial firmware image I got from MakersToolWorks (MTW). The master branch of my repo contains the original code I got from MTW. The test branch contains my changes.

After poking around for  a bit, I determined that the lcd_implementation_status_screen routine draws the main status screen. The extruders appeared to be drawn as part of these two lines of code which basically draws a bitmap.

The bitmaps are contained in the DOGMbitmaps.h file.

To clarify what I was seeing, I whipped up a quick and dirty python script to convert the monochrome bitmap into a raw RGB image.
#!/usr/bin/python -u

"""Program which converts an ASCII test into raw binary"""

from __future__ import print_function
import argparse
import os
import sys

def main():
    parser = argparse.ArgumentParser(
        prog="txt2raw.py",
        usage="%(prog)s text-file",
        description="Convert a text file of ASCII hex into raw binary"
    )
    parser.add_argument(
        dest="txt_filename",
        help="Name of text file"
    )
    args = parser.parse_args(sys.argv[1:])
    raw_root, raw_ext = os.path.splitext(args.txt_filename)
    raw_filename = raw_root + ".data"

    print("txt_filename =", args.txt_filename)
    print("raw_filename =", raw_filename)

    with open(args.txt_filename, 'rb') as txt_f:
        with open(raw_filename, 'wb') as raw_f:
            for line in txt_f:
                line = line.rstrip()
                for val in line.split(','):
                    if val:
                        num = int(val, 0)
                        for i in range(8):
                            if num & (1 << (7 - i)):
                                raw_f.write(b'\x00\x00\x00')
                            else:
                                raw_f.write(b'\xff\xff\xff')

main()

Running this on status_screen0_bmp yielded a raw RGB file, which I opened in gimp and set the width to 120, and height to 19 giving:
and status_screen1_bmp showed:

which are the 2 bitmaps used to animate the cooling fans. Getting rid of the extra extruders means that the bitmap will need to be modified.
 
Looking at the ASCII data:
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x0C,0x60,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x0E,0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4F,0x0F,0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x0F,0xA0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x07,0xA0,
0x7F,0x80,0x00,0x3F,0xC0,0x00,0x3F,0xC0,0x00,0x41,0x04,0x00,0x40,0x60,0x20,
0xFB,0xC0,0x00,0x79,0xE0,0x00,0x79,0xE0,0x00,0x20,0x82,0x00,0x40,0xF0,0x20,
0xF3,0xC0,0x00,0x76,0xE0,0x00,0x76,0xE0,0x00,0x20,0x82,0x00,0x40,0xF0,0x20,
0xEB,0xC0,0x00,0x7E,0xE0,0x00,0x7E,0xE0,0x00,0x41,0x04,0x00,0x40,0x60,0x20,
0x7B,0x80,0x00,0x3D,0xC0,0x00,0x39,0xC0,0x00,0x82,0x08,0x00,0x5E,0x07,0xA0,
0x7B,0x80,0x00,0x3B,0xC0,0x00,0x3E,0xC0,0x01,0x04,0x10,0x00,0x5F,0x0F,0xA0,
0xFB,0xC0,0x00,0x77,0xE0,0x00,0x76,0xE0,0x01,0x04,0x10,0x00,0x4F,0x0F,0x20,
0xFB,0xC0,0x00,0x70,0xE0,0x00,0x79,0xE0,0x00,0x82,0x08,0x00,0x47,0x0E,0x20,
0xFF,0xC0,0x00,0x7F,0xE0,0x00,0x7F,0xE0,0x00,0x41,0x04,0x00,0x63,0x0C,0x60,
0x3F,0x00,0x00,0x1F,0x80,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x70,0x00,0xE0,
0x1E,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x01,0xFF,0xFF,0x80,0x7F,0xFF,0xE0,
0x0C,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0x01,0xFF,0xFF,0x80,0x00,0x00,0x00
The numbers highlighted in red is the bitmap data for the #3 extruder. You can see similar columns of numbers to the left for extruders #1 and #2. Replacing the red numbers with 0x00 will make the extruder disappear.

So I copied and pasted the data and added:
#if EXTRUDERS > 2
...include original bitmaps...
#elif EXTRUDERS > 1
...include modified bitmap with extruder 3 blanked out...
#else
...include modified bitmap with extruders 2 & 3 blanked out...
#endif
You can find these changes here. Later on in the lcd_implementation_status_screen routine, it prints a line of 3 dashes underneath the extruder, and since we no longer have the extruders, I commented the code that prints the dashes out here and here.

For my configuration, EXTRUDERS is set to 2, and now my GLCD screen looks like this:

I changed the "MendelMax2" to "Dave's MM3" by changing language.h 

Saturday, December 27, 2014

MendelMax3 - Lower LED Mount

My new MendelMax3 came with nice LEDs which indicate heating progress (they may indicate other things - I haven't found out yet).

However, there doesn't seem to be any clear or obvious way to mount the included LED strips. So I decided to make an LED mount.

I like to use connectors (rather than soldered wires), so I decided to use some Molex KK style connectors. A 5 pin connector with one of the pins pulled lines up nicely with the solder pads on the LED strip. Due to space constraints, I had to bend the pins on one, like so:


I just realized that my LED strips came unsoldered. If you have the soldered versions and would like some changes made, please let me know. I modified the frame mount so that you can insert the wires if they're already soldered onto the LED strip.

Here's the LED strip with the input on the right and output on the left:

Another view from behind (I obviously need to improve my lighting - sorry about that):


Here's a photo of the spacer. My little LED strip seemed to be near the end of 2 strips soldered together and had a few extra resistors. So I placed some notches in the spacer to accomodate this. The notches are designed to go against the top of the LED strip (when you read the writing on the strip the right way around). In my case, the writing points down, so the notches would go along the bottom. If you got an LED strip without any extra resistors, then it doesn't matter which way the spacer is mounted.


Here it is all put together. The piece that looks like a flag in the middle mounts on rightmost Y-rail extrusion. It was designed to clear the wheels on the Y-axis, so when you screw in the bolt, push down on the top to ensure its as low as possible. The tab on the right hand sound mounts on the bottom right 2020 extrusion.

The white plastic piece (included with the MM3 should fit right onto the end. I used a couple of pieces of electrical tape to secure it in place. Hot glue or silicon caulk could also be used. Here's the LED unit lit up.
And here it is installed:

This shows the mounting screw which holds the mount on the bottom right extrusion:

And this shows the "flag" mounted. The box on the right holds the buck converter and the arduino which drives the LEDs (and came from the MTW optional prints folder).

You can find the STL and FreeCAD files here.

Tuesday, December 16, 2014

MendelMax3 - Build

Here is some build progress (I'll append to this post as I complete more)

Here's the frame, which encloses the electronics, and Y and Z steppers:
 

Y axis:


Whoops. The glass clips don't quite fit (due to a last second production change):

I decided to file a wee bit off the edge. The MTW guys also suggested raising the clip slightly  using 3 washers.

After a few swipes with a file, they fit:

I got one of the extruders together and installed on the X-axis


Next: electronics (and I put the Z axis together but forgot to take some pictures).

MendelMax3 - Unboxing

I've had a ton of fun with my Bukito. But I wanted a bigger build area and dual extruders, so I could use support material.

I looked at the MakerBot offerings and was ready to buy one, but was totally put off by their Smart Extruder.

So the search was on. I wound up looking at the MendelMax2 from and thought it would be a nice kit to put together. And when paging through the MakersToolWorks store, what should I stumble upon but a hidden link for the MendelMax3 (at the time I found it the URL had "hidden-item" in it).

This looked like a very nice printer, so I placed an order. I think I may have been the first non-beta person to order the MendelMax3. I also discovered that they have an IRC group (#makerstoolworks on freenode). The MendelMax3 was officially made available in their store a day or so later.

I decided on a kit, so that I would learn all of the various bits and pieces and gain an intimate understanding of all the parts and how to tune it. 

A couple weeks later,a nicely packed box arrived on my doorstep:

Very nicely packed:
 

Here are the contents spread out on my desk:

Many of the pieces were laser cut stainless steel that was then powder coated:
 

Belts, clips to hold the glass, and some miscellaneous wires:

Lots of M5 and M3 nuts and bolts:

And polycarbonate wheels for the linear rails:

A few printed parts:

And a few laser cut plastic parts:

Tools (almost everything needed to assemble it):

A buck converter (to convert 24V to 5V, and an Arduino. These are used to drive the LEDs which show up on the front panel, and across the top. Apparently the LEDs change color based on the extruder temperature.

I also ordered the optional GLCD and the required RAMBo adapter:

This is the RAMBo board, along with 3 limit swiches.

Some miscellaneous electronics:

And the 2 extruders, which are both E3D-v6 all metal hot ends:

A box full of stepper motors:

A 400W  24VDC power supply. The extruders, bed heater, fans and RAMBo all run off of 24V:

A few more laser cut metal pieces:

And a bunch of V-Slot extrusions (the wheels and extrusions are from Open Builds Parts Store:
It turns out a few small pieces were missing, which was not entirely surprising given that this was one of the first complete kits that they shipped. MakersToolWorks quickly shipped me the missing pieces.

I've been extremely impressed with the support available from the MakersToolWorks guys. They have an IRC channel, and between the MTW guys and their customers, all of the minor issues I had were quickly addressed.

Now to put it all together.