Pleasant Flashing


For a project of mine, I need to flash several hundred of ATMegas.

I use a special programming connector, which sits on the SMD chip and connects directly to the ISP and power pins on the chip.

IMG_2739My first attempt to ease the flashing process was to mount the programming connector to a lever with some additional weight on it. That way, once the connector was in place, I didn’t need to hold down the connector manually during the flashing process.

IMG_2799The PCBs come in panels of 40 (10 x 4 PCBs per panel) with milled slots in between each PCB. So to make the positioning of the PCBs under the connector a little easier (and more repeatable), I put two metal pins (with the same diameter as the milled slots) on the base of the lever.

The whole thing worked well so far, but since it takes about a minute or so [Update: after changing some default settings in avrdude, the time to flash a chip is down to 15 seconds…] to complete the flash process for each chip, it was still an annoying job to flash several hundreds of them: Position the next chip on the pins, lower the lever with the connector, start the flashing script, wait a minute for the flashing process to finish, lift the lever, position the next chipon the pins and so on…

With the standardized PCB panels, a Pleasant Mill on hand and some custom coding, it should be possible to completely automize this process, right?




After removing the spindle from the mill, I needed some kind of retainer for the -more or less- irregular shaped programming connector. The only regular shape on the connector is it’s square footprint (about 10x10mm) at it’s lower end. So I designed a simple bracket with mounting holes for the mill on its back and a square hole for the programming connector on its base. A clamp on top of the programming connector hold it in place when it is pressed onto the chip during the flashing process.



I printed both parts on my Mendel and mounted the programming connector on the mill:



To hold the PCB panel in place, I put four metal pins (with the same diameter as the milled slots in the panels) in the base plate:


With help of these pins, the panels can be changed quite fast and easily with very good repeatability of the panel’s position.


Finally, I needed some software to control the whole thing.

Fortunately, I wrote a very simple app some years ago to send gcode over the serial port of my Mac. Originally this app was written for the SphereBot but later slightly changed for use with the PleasantMill.

G-Code Sender

I added a button (to start the automated flashing) and a text view (for protocol output) to the GUI and finished was the PleasantFlash software :)Pleasant Flash

Ok, I still needed to code some functions for synchronously send the gcodes to move the programming connector in the correct position, execute some “avrdude” shell commands, pipe the shell output for verification back into the app and protocol the whole thing accordingly. But all this was more or less straight forward and done in about an hour.

Of course, the code is hacked together without much care to be user configurable. The paths to avrdude, the program files (.hex) and the fuses are all hard coded in the source. But since I use this setup only for this one project in the foreseeable future, I guess thats ok. And if I’ll need it again for another project, the sources are changed easily enough…

[Update:] After changing a default setting in avrdude (“-B 1”), flashing a chip takes only about 15 seconds now. This means, that flashing a complete panel of 40 PCBs takes only about 10-12 Minutes!

And here’s the Pleasant Flash at work:

Boxing (Round 2)


With a second working 3d printer in the house, I needed an extra filament spindle box. It was easy enough to build the first one for my Makerbot, so why not build a second, improved one?

The most wanted improvement was a window.

It turns out, that it’s not only nice looking but sometimes also important to see what’s going on inside the box. So I changed the design slightly to sport a window on the front.

Since it turned out, that the second disk above the filament spool on the turntable isn’t really needed (the spindle’s construction is self-supporting and the box’s top keeps the filament on the spindle), I recycled the spare plywood disk in the second filament box: It got promoted to be the turntable. (If you don’t have an extra plywood disk at hand, see here how to cut the disk out of a rectangular sheet of plywood with a Dremel).

Needing even less wooden parts (no front side, no plywood for the turntable), the remaining material was even cheaper to get. Including the sheet of transparent plastic (“Hobby Glass”, a sheet of 2mm transparent LDPE, 25x50cm), the whole stuff cost me less than 5€ (!).


Here’s the updated part list for the box:

QtySize (mm)Material
2310 x 310MDF 10mm
2310 x 120MDF 10mm
1290 x 120MDF 10mm
1280 x 280Plywood 4mm
1~ 300 x 130 Transparent plastic, acrylic, glass...

There were some requests for detailed drawings, so here you go:

(These drawings are also available as PDF. I added them to thing 3640 on

The change in design is, that -instead of a front wall- there’s a groove for a sheet of transparent plastic (or acrylic, or glass, or whatever).

If you got a circular saw, the grooves are quite easy to make: Adjust the circular saw blade’s height to about half the MDF thickness (i.e. if you use 10mm MDF, adjust the saw to 5mm). Then use the saw’s stop to saw the groove 10mm from the front side of the bottom, top, left and right parts (I hope I’ve got the technical terms about right in English…).

If you don’t have a circular saw at hand (I don’t!), you might use a Dremel to cut the grooves. That’s slightly more work and probably not as exact, but it’s good enough:


After cutting the grooves and drilling all holes, the assembly of the box is quite easy. I used some glue for additional stability.


Then I did measure the final width of the front window (including the depth of the grooves).

Cutting the LDPE sheet was very easy: After slightly slitting the sheet with a box cutter, the sheet can be broken at a table’s edge. It’s like cutting glass, only with a knife and without the cullets.


Now I was able to mark the final height of the window:


Another LDPE-cut later, the box was almost finished:


I didn’t change the inner construction of the box. So all printed parts, ball bearings and rods are the same as in the first box.

I added one last improvement to the box’s turntable: Since the filament roll tends to loosen up a little bit on the turntable, it can happen that some loose filament “falls” from the turntable. That’s usually not a big problem, but it could lead to a turntable-jam.

To avoid that, I used some paper (160g/m2) to build kind of a “cake setting ring” around the turntable (maybe one could actually use a real cake setting ring for this?).


The paper ring catches the loose filament windings, but it doesn’t interfere with the unwinding mechanism itself.

My Mendel’s birthday

2 days ago, my Mendel printed its first object (finally). About 8 months after printing its first parts on my Makerbot, back in December.

Besides some delays due to massive lack of time, the main problem was, that I couldn’t manage to build a working extruder to print with PLA. There were several attempts to build the original “direct stepper” extruders. These failed because I haven’t had a high torque stepper motor back then.

Some experimental geared extruder designs followed. None of them really worked.

There was even a try to mount a Printruder II on the Mendel (which generally works great). However, I used the Printruder II to test an experimental “insulator less” hot end – … which was a fail :)

Finally I printed different versions of Wade-inspired geared extruders. In the meantime I received two “RepRap-tested” high torque stepper motors (SY42STH47-1684B), so this shouldn’t be an issue anymore. But it was…

Since early tests on mine, to get the RepRap host software running on my Mac, weren’t too promising (I somehow managed to build and launch it, but there were a lot errors and GUI issues), I decided to install the Makerbot firmware on the Mendel boards and use it with ReplicatorG.

When doing first tests, I ran into problems with the motor driver chips on the extruder board. They ran really, really (really!) hot within seconds when driving the extruder’s stepper motor. When reducing the motor’s current by reducing the PWM value, the problem got slightly better (but the chips still got really hot). But  also the stepper motor lost most of it’s torque (and  the extruder got jammed again).

Finally, a reader of this blog (“renoir”, thank you!) wrote a comment on the blog post “Well, …no!”, linking to Tony Buser’s “RepRap host on Mac OS X Snow Leopard” blog post. This nice, short instructions solved most of the problems I had with running the RepRap host software earlier (I guess, Adrian also improved the software’s compatibility in the past half year).

Anyway, having the RepRap host software up and running on my Mac, there was no reason not to try the geared stepper extruder again, this time with the “originally intended” firmware. Behold: It worked like a charm, the motor driver chips’ temperature gets only to about 40-45°C.

I still don’t what went wrong (or what I did wrong) when trying to use the stepper extruder with the Makerbot firmware. But it works just great with the RepRap firmware.

So having a Mendel, printing with the RepRap host software, I am somehow puzzled about how to generate usable gcode with it. When using the host software’s built-in gcode generator, I always end up with fancy 5D gcode, but printing objects with a fill rate of about 80-90%. I searched the settings, I browsed the RepRap wiki, I googled the forums… no word on how to configure the gcode generator in order to be able to change basic (and important) settings like “fill rate” or “raft / no raft” or anything. I cannot believe, that the official RapRap gcode generator works like “one size, fits all”. Does anyone know more about this? Renoir? Tony?

What I did find was the hint to use Skeinforge to generate gcode for the Mendel. I tried this, but so far, I wasn’t able to generate working gcode  for the Mendel with it. For the Makerbot, I still use an older version of Skeinforge (v2009-11-06). My settings for this version are well tested and fine tuned. Also my raftless tool works very well with this version. Since this old version doesn’t support 5D gcode generation yet, I downloaded a more recent version (2010-06-29). But somehow I couldn’t manage to generate usable gcode with this version. Also the newer versions of Skeinforge seem to be much less liberal with “unproven meshes” in STL files. I ran into a lot of non-recoverable errors with some of my STL files (which work well with the old 2009-11-06 version).

I also tried to use Erik’s 3D-to-5D-Script with gcode I generated with the old Skeinforge version. But the resulting gcode wasn’t printable. I guess, I need to read more on the use of this script…

Generally, I’m surprised how hard it is to find instructions or how-tos on generating gcode for Mendel. Maybe I looked in the wrong places. I googled a lot in the past few days, but besides some posts with partial Skeinforge settings I couldn’t dig up much.

Any hints or links are highly appreciated!