But I marked it so that wouldn’t happen!

MarkedConnectors1595Yeah, I use unpolarized connectors.  Good old 0.1″ headers are cheap, small, plentiful, and I’m pretty comfortable using them.  For the power/I2C bus in the dollhouse, they were an obvious choice.  But because they’re unpolarized (OK, unless you make them considerably bigger by adding a dummy pin and a plug) I’ve been extremely careful to mark every connector I make with whiteout: White sides go together.  I’ve even usually marked the +5V  pin as an extra caution  (though white-to-white is sufficient.)  But Murphy still managed to bite me.  Repeatedly.

Troubleshooting time

Something screwy is happening on the I2C bus in the Workshop 88 dollhouse. It sorta works, but especially the light sensors trigger erratically. It needs to be a lot more solid before we can claim it “just works”. Time for some troubleshooting.  Two obvious places to look are for electrically invalid signals on the bus and logically invalid messages between the nodes.

To make sure the electrical signals are good first, I wanted to look at them with a scope, but connecting grounds between the scope and the PC USB connection might introduce some noise.  So with the scope’s ground not connected, I looked at the DH ground with the scope probe to see.  There was what looked like a significant data signal.  Whatever’s going on, connecting those grounds isn’t a good idea.  (Bite #1.)

XprotolabScope1598OK – I’ve got this cute little ($20!) dual trace Xprotolab USB scope.  If I use that with a laptop running on battery, the grounds are completely isolated.  Surely that will give me good results.  The laptop’s battery isn’t great, but it should last long enough to make some observations.

Since I’d be connecting to the DH I2C bus repeatedly, I made up a nice little adapter with rings for scope probes or clip leads on a bit of perfboard and a “standard” 4 pin header to plug into the bus.  I was very careful to check and BreakoutAngle1585double check the pinout to mark the correct side white, and did a further step of independently figuring which the +5V pin was and then comparing that to a known working connector.  Looks good.  Fired up the DH so there would be continuous clocks and data, connected Xprotolab ground and CH1/CH2 to SDA/SCL and looked at the scope display on the laptop.

WTH?  (Bite #2.)  The signal on both channels is almost exactly the same – a pretty clean I2C data line.  (The clock line would look different, with regular clocks.)  But that’s impossible!  I reconnected just one scope channel first to SDA, then SCL.  Both were the same.  I did various combinations and always got crazy results.  Sometimes the signals would even be upside down (going negative from ground).  I’d had an arcane problem with that little scope before (trying to show Lissajous patterns in X-Y mode for the Glen Ellyn Library STEAM event).  Was it being weird yet again?  My head hurt and I gave up.

A little yak shaving…

I did take a little break to integrate the nice immediate I2C command sketch i2crepl from the I2C package I was using into the DH master code.  That gave me a tool to exercise  individual input and output nodes.  Very helpful for a confused DH with sensors triggering randomly.  But doesn’t help with looking at electrical signals on the bus.

Then there was another side excursion looking at buying a better scope.  My target had been a decent USB scope, but Dave at EEVblog made me consider a venerable Rigol DS1052E.  Rats – it doesn’t have a battery option, so no isolated ground.  Read a couple of threads on proposed hacks to run it on battery, including designing a new power supply from scratch.  Give it up, Jim.  Even if you decide to get a new scope, you won’t have it in time to work on the dumb DH.  (Interesting, but the wasted time was bite #3.)

I’ve also got a (cheap, little) USBeeSX logic analyzer.  I planned to hook that up to capture the actual I2C traffic (again using a laptop on battery) once I was convinced the signals were clean.  But I needed to see clean signals on a scope first.

Back to work

Putting the Xprotolab scope (and Rigol reviews) aside, I tried with a trusted bench scope again.  The DH also has a coax barrel connector to supply 5V power for “normal operation” mode.  I had a little 5V wall wart, and figured powering the DH from that would give me an isolated ground.  (Bad assumption, I think.  The unit is too light to have a transformer, so it’s probably just a big 250V cap dropping line voltage down followed by a regulator.  That wishful thinking was sloppy of me.)

I tried about everything I could think of, including finally boldly connecting the grounds (after measuring voltages first).  When I did that the DH went into looping mode, playing sounds that didn’t make sense.  Again, some times I’d see impossible signals – logically inverted, and going below ground.  Oh – and if I connected directly to the 4 pin connector from the Master Arduino, the behavior was different (and less baffling).  It’s biting me again!

IsolatedGround1602Feeling a little uneasy about the wall wart (and getting desperate), I looked around for another isolated 5V supply.  Hey – I think I picked up some cheap Chinese DC-DC 5V USB out converters.  <digs around a little>  OK sucker – just TRY to tell me that ground’s not completely isolated!

But the bizarre behavior continued.  Including inverted and negative-going signals.

Aha

Then I happened to look at the “hub” I’d been plugging my adapter into.  Hey wait:  looking at the side of the hub, both the female connector I’d been using and the one next to it showed white sides.  But the way the hub PCB was laid out, those should have been one white and one not.  And then it started to fall into place.

RootCauseHubB1586During its travels, the shell of one of the 4 female connectors on that hub had come off, leaving the pins still soldered to the PCB.  I found or made another female shell, and forced it on.  I’d painted one side of that shell white, but apparently was asleep when I put it on, and put it on backwards.  And that was the connector I’d been plugging in to!  So all the testing I’d been doing plugged into that hub (with white sides together) had been with the wiring reversed!  (When I plugged straight into the Arduino, the hub was not involved, and it behaved much better.)

Damn.  With the pinout (+5, Gnd, SDA, SCL)  reversed, the “ground” I’d been using was in fact SDA.  So with the Xprotolab scope, the pins I thought were SDA/SCL were in fact Gnd/+5V.  Both of those showed the same signal (DC shifted, but that’s hard to tell on the Xprotolab) compared to the real SDA as reference.  And it explained why some signals seemed inverted, or going negative with respect to the assumed ground (SDA).  I guess I’m just lucky I didn’t blow anything out (especially with that probably non-isolated wall wart supply!).

 Ah, sanity

Clock+DataWith the DC-DC inverter as supply, I reconnected the Xprotolab scope (with the adapter plugged in the right way this time!) and its display on the main PC.  It looked terrible.  Then I remembered I was going through a USB hub, and plugged the Xprotolab USB cable into its own USB port on the computer.  Much better – it’s completely clear which is clock and which is data.  And I looked at how it was hooked up and that agreed. 🙂

It still wasn’t great, and it was at the ragged edge of what that little scope could handle.  The screen shot above was at 32 μsec/div.  It looked a little better at 16μsec/div, but wouldn’t run at all at 8μsec/div (the fastest setting).  At a max of 2Msamp/sec (1M per channel), that’s only ~100KHz – which is the nominal I2C clock rate!  It’s not quite enough to see how clean the MasterI2Cshield1606waveforms are, but it does look a little rounded, especially the top corner of the rising edge.  The pullups on the I2C bus connector on the Arduino are 3300Ω.  Lowering them would presumably sharpen those corners.  (Hmm – looks like I put a switch in from A3-Gnd for future use.  I’d forgotten that!)

Clocks1612OK – let’s get a little better bandwidth look at this.  On the old clunker – but trusted – 5MHz Telequipment scope next to the computer, we see useful information.  With most of the DH nodes connected, the clock signal looks pretty good.  This says pretty definitively that lowering those pullups would be a good idea, but at least the bottom corners are all nice and sharp.  The data line, though much harder to sync on, looked similar.  There were some spikes on the high level – nearly a volt – but since that’s not where the logic thresholds are, it’s probably not a problem.  Probably.

The next steps will be looking at what’s happening at the messaging and software levels, but that’s for another post.  This one – about how much trouble came from one moment of inattention reassembling a connector so a mark was on the wrong side – is resolved.

Update 5/12/14: It’s not part of the I2C bus electrical questions, but just for a little continuity: I resolved the very flaky behavior of the DH.  Long story, but after reverse engineering the I2C lib I was using, I found additional read functions that returned status as well as data.  By checking the status of each read and ignoring the data on bad reads, it suddenly got much better.  I guess checking return values is right up there with not being asleep when you put connectors together.

Posted in Dollhouse, I2C bus | Tagged , , , , | Leave a comment

Bandsaw light

OldLight1514The bandsaw has needed a light since day 1 (which was a long time ago).  I did a quick and dirty – and not very effective – hack with a clamp-on lamp, but it was behind the saw, and didn’t illuminate where the blade was cutting.  I finally got around to making a good light.

There’s just enough clearance behind the blade guard for a couple of LEDs.  While I’d generally shy away from battery powered lights for a permanent tool like this, Li-ion 18650s from old laptops pack a lot of energy, don’t suffer much self-discharge, and will run a white LED, so they’re OK for a low-duty cycle use like this.  With 3 LEDs for 60 mA max, even if the used 2000 mA-hr cell was down to say 600 mA-hr, that’s still 10 hours of operation.  That’ll do.

I fretted about a constant current source for a while, but finally gave in to 47Ω resistors.  They give barely over 20 mA for a white LED with the cell hot off the charger, and still nice and bright near the end of the cell life.  And it’s quick and easy.  Parts1468I made up a little PCB for 3 LEDs and resistors, and fitted it into the blade guard.  But how to hold the 18650 cell?

BatteryHolder1489The W88 Cupcake 3D printer happened to be at the house (finishing up some prints for the Addison library gig), so I went for a printed holder.  I did the design in tinkercad (don’t say it) in maybe 20 minutes.  To my delight, it actually printed first try without the printer jamming.

BhCracked1494Even though all I wanted was a stub to keep the cell from sliding out (it was to be mounted vertically), I made the end full height to give the extruder a path between the sides to avoid a lot of strings.  I figured I could cut it down with a hacksaw after it was done.  Unfortunately, one side cracked as I sawed.

HollowSide1498From an end view, it looks like the slicer was able to fill the center of one side, but left the other hollow.  Of course it was the hollow one that broke.  I wasn’t very confident, but epoxied the broken side back together.  It didn’t hold against the stress of putting the cell in.  Nice try, no cigar.  But there’s always zip ties 🙂

Insides1507While cruder than I wanted, a zip tie (and some inner tube rubber) holds the cell in place quite well.  It has my standard 0.1″ female header so I can disconnect and charge it.  I’ll decide in a year or 2 when I have to recharge it whether I’ll haul the charger to the saw or replace the zip tie.  (The wires don’t come close to the wheel, despite appearances here.)

LightInPlace1477Here’s how it looks from the saw operator’s point of view.  It’s just about BackView1483perfect!  From the back it looks kind of unprotected, but there’s really not much happening where it’s mounted, so I think it will be fine.

Here’s the switch (and the slightly Done+Switch1509embarrassing zip tie).  It’s easy to reach, provides great light, and it’s done!  This is another one of those little things that keeps providing a little bit of delight every time I’ll use it.  Inspired by this, I think I’m going to replace that old clamp-on lamp on the drill press with some cleverly located LEDs next!

Posted in Miscellaneous | Tagged , , , | 1 Comment

Pollywogs/Recyclers Tom Pauer Hilton

TopFront1420This is some background and history of the Hilton Micro 75A Tom Pauer bequeathed to Pollywogs/Recyclers.  It lives at Arlene Klemp’s house and she graciously schleps it out when we have visiting callers for either/both clubs.

Bill Haynes complained about having to crank Tom’s Hilton way up for Recyclers on 4/11/14, so out of an abundance of caution, Back1424Phil graciously grabbed the MA-150 from Ebenezer and Bill used that for the C2 and C3A dances the next day without reported problems.

I brought Tom’s Hilton to Chi-Town last Monday and had Sandie try it.  She did a quick check with her computer and got good volume at a normal setting of the control.  But then she All1428remarked about the MA-150 that somebody had left it with the music volume cranked up unusually high, and Bill had been the last one to use it.  She drew a kind of immediate conclusion that there was probably something wrong with Bill’s computer – like its volume had somehow been turned down some.

I wrote to Bill and with appropriate apology asked if that might have been the case.  He replied that he had in fact checked his laptop, and that he didn’t notice anything unusual with the MA-150.  I’m not sure what to make of all that.

There is one other common component, though:  I think Bill used the same speaker (maybe a 2-driver Tom P special?) for all the dances.  If that speaker had a problem, it might have manifested by requiring both Hiltons to be cranked up higher than usual.

I checked Tom’s Hilton out as well, and had no problem getting lots of volume out of it with a half Yak.  I ran it pretty loud continuously for 45 minutes and didn’t notice any distortion or change in volume and it didn’t smell or feel unusually hot.

I don’t have a laptop I routinely use with Hiltons, and so can’t comment on how the music volume control level “feels”.  I did run the same audio source (a red iRiver IFP790) at the same output setting (40 – the max) with Ray Clow’s old Micro 75, and compared to that I think I have seen what Bill saw.  To get the same speaker volume, the music volume control on Tom’s Hilton had to be set considerably higher than on Ray’s, and with the controls both cranked up full I got a lot more out of Ray’s.  Unfortunately, that’s not a great point of comparison since Ray’s unit has an unusual history, having been rebuilt by me.  Voice levels/settings seemed fairly comparable between the two in informal testing with Tom’s old mic.

Tom’s unit has 2 places to put music audio in:  one marked Tape Music on the front and one marked Monitor All on the back.  I got a little more volume using the one on the back, but the music was brighter using the one on the front.  I think both the “inputs” above were really designed as outputs to record dances, and sort of accidentally work as inputs.  As such, it’s not surprising that they don’t work ideally, and I’ve heard that comment elsewhere including the nice hookup pdf here.  Hilton even makes “boosters” to address this issue.  What’s surprising is that Bill reacted as he did to a known “weak” input.

I considered building a booster transformer in, but decided not to take the liberty of doing that.  Another possibility would be making a custom block (no cables) with a transformer and RCA in and out that would plug directly into the Tape Music jack, fitting tightly against the Hilton.  A quick check indicates that the lid could close with it in place so it could just live there forever.  Yet another is a blob containing a transformer with RCA male and females on short pigtails that would at worst just live in the black bag/case for that Hilton.  I have not done neither of those (yet).

My overall take is:

  • There’s nothing wrong with Tom’s Hilton.  It’s an old unit whose workaround music input isn’t very sensitive and works best with a booster.  We should continue to use it as we have in the past.
  • We should still keep an eye on it for a couple of dances.  Having a spare Hilton for those dances would be a good idea.
  • It’s vaguely possible Tom’s/Polywogs/Recyclers speaker is questionable.

 

Posted in polywogs, Square dance | Tagged , , , , , | Leave a comment

Adventures with the Workshop 88 Cupcake

Driven by both my desire to be able to 3D print stuff for myself and desperation at needing to be able to do reasonable 3D printing demos for the schools and libraries that are asking us to do them, I decided to jump into Workshop 88’s old Makerbot Cupcake printer.  Many thanks to Bill Paulson for shepherding me through my first prints (and repairs).

This post has 2 main parts: The first is some details about the Cupcake for (me or) whoever needs to work on it.  That’s a mix of just factual stuff about the hardware and some history behind how some of it came to be.

The other part – probably much longer and less organized – is my history of making peace with the beast, fixing it, maybe some successes.  Here we go.

W88 Cupcake Details and Background

History

We bought the Cupcake kit from Makerbot for maybe $575 on a near end-of-life Father’s day sale in <some year>.  Various people put it together, and we got it running.

Early in its life, we took it to an OSMOCES event.  Due to a misunderstanding of how the table legs worked (!?), it fell from table height to the floor.  It suffered some cracks, but still worked.

Electronics1249Electronics

The brains of the printer is a RepRap V1.2 Sanguino motherboard (A).  It has its own power switch (not visible under the ATX power cable) which is rarely turned off, but is helpful to know about for when it is.  The board talks to the PC via an FTDI USB cable plugged into a 6 pin serial header (B).  (The chip must be in the slightly extended USB plug.)  We run replicatorg v40 software on the PC, but there’s another package from Makerbot that should also work.  This is all the “Gen 3” electronics, and the mother board seems to be running 3.0 “firmware”.  There is a later version, but since it was said to only contain new code for stepper extruders – which we don’t have (yet) – there was no reason to upgrade.   I think later firmware may also support acceleration – alleged to dramatically reduce the noise and vibration the bot see from its X and Y steppers, so it may still be helpful.

The motherboard was set up to talk to other controller boards both via TTL over ribbon cable and via RS485 over Cat5/RJ45 cables that are NOT ETHERNET!  The only 485 link on ours (C) is to the V2.2 Extruder Controller board (D).  That board provides several things for the extruder:

  • A thermistor input for controlling the hot end temperature.
  • FET-switched DC to the extruder heater.
  • FET-switched DC to the Heated Build Platform.
  • A thermistor input for controlling the temperature of the HBP.
  • H-bridge output to run the DC extruder motor.

Unfortunately, the combination of the H-bridge and the DC motor often fails.  We (Bill, I think) implemented a published hack using a beefy MOSFET on a bit of perfboard (E) to control the motor.  That hack board also gets power directly from one of the power supply’s 12V DC connectors – a much better source than the extruder controller – which gets power for both heaters and the motor over the Cat5 cable!  The hack board still uses the H-bridge output from the extruder controller, but with virtually no current draw to run the MOSFET.  That hack failed ~3/14, and Bill replaced the MOSFET, returning the extruder to operation.  There’s currently a blue LED across the 12V leads to the extruder motor so we can see when it’s getting power.

While the Extruder Controller does provide power directly to the Heated Build Platform, the large current to the extruder hot end heater was judged too much for that board to supply.  So the FET-switched 12V that would go to the heater goes to an added-on dual relay board (G), which again gets power directly from the power supply, and noisily connects and disconnects that power to the heater.  There’s currently a red LED across the power leads to the heater for a less subtle indication of whether the heater’s on than the slightly different clicks from the relay when it makes and breaks.  Its second relay is not (yet) used.  There’s also an LED on the Extruder Controller board for each of its FET-switched power outputs.  That controller board has one unused FET-switched DC  channel, one unused H-bridge, and I think an unused thermistor input (A7).

The motherboard’s non-RS485 connections go via short 10-conductor ribbon cables to the 3 Makerbot V2.3 stepper controller boards (F) (one hidden by the heater relay board (G)).  The RJ45 RS485 connectors on those boards are unused.  The stepper controller boards get power directly from familiar 5/12V “disk drive” power connectors from the power supply, and have wires running directly to the X, Y, and Z stepper motors.

That about covers the imposing mish-mosh of electronics on the side of the bot.

Extruder

The extruder is a MK5.  This clunker uses a geared down DC motor with a hobbed drive wheel to push the 3mm filament into the hot end.  A delrin block forces the filament against the drive wheel, adding friction and requiring a thumbscrew to be properly tightened.  (The setting is “very tight”.)

Nozzle1306It looks like the nozzle is 0.5mm.  The diameter of freely extruded filament is about 0.65mm.  Hmm – looks like I should wipe the nozzle off more often.

This combo fails a lot – stopping feeding either by stripping the filament or the delrin block being too loose or motor failing or failure of the original H-bridge on the controller board.  All the cool kids have long since replaced them with stepper extruders.  The steppers can reverse and suck the filament back out of the hot end, essentially cutting off the flow of molten plastic almost instantly – and restarting it just as quickly.  This provides dramatically fewer “strings” of filament in places where they shouldn’t be.  In addition, it provides much better control of the filament feed rate.  The word on the ‘net is that a stepper extruder is the best upgrade you can do for a Cupcake.

The DC motor provides quite poor speed regulation, and although it can nominally be controlled via PWM, most people just run it at full speed (PWM value 255) or stopped.  I haven’t found whether the original extruder controller would ever try to run the DC motor backwards to get better stop/start control, but the MOSFET hack only allows it to run forward.

DumbThumbscrew1361A major limitation is the thumbscrew/delrin block that holds the filament against the drive wheel.  It has virtually no ability to adapt to variations in filament thickness.  I guess the designers always used perfect filament.  Completely in agreement with a comment by Jim H, I’ve tried hard to figure how simply to insert a spring in series between the thumbscrew and where the delrin block touches the filament.  A leaf spring?  A block of crushproof rubber of the same cross section as the block?  The location of the nut in the current setup doesn’t leave much room to work with.  Maybe plates on front/back of the whole thing extending off to the right so the nut could be relocated much farther out?  That would give a lot more room to play, but would be a hassle.  Then maybe nut in the same place but supported by a spring instead of those 2 bolts?  Hmm – the nut’s got to resist torque, too.  There are spring loaded parts on Thingiverse – even for the DC motor, I think – to do what we want.  But by the time we do all that, it wouldn’t be much more trouble to build a (spring loaded) stepper drive.

It doesn’t make sense to put much more money into this printer, especially since we’re ordering a new Kossel kit.  But it looks like Bill has some steppers and Pololu controllers, and had even started printing a mounting for a stepper extruder.  He’s buried in this year’s Thotcon badges right now, but I’ll investigate whether I can parlay those parts into a stepper extruder before the next kit comes in in a few months.

Jim’s Adventures and Lessons

Aside from tightening some loose idlers on the Z-axis belt and taking the top part of the extruder apart to clear out a filament jam, the first real repair I made to the Cupcake was on 4/3/14 when the HBP stopped heating (and lighting).  The replicatorg control panel showed its temperature as 1024 C.  If it were actually that hot, it would make sense that the heater wasn’t on, but that seemed unlikely.  While Makerbot has removed a lot of the support info for Cupcake from its web site (Boo!), I was able to find a schematic of the HBP, and verified that 3 wires with +5, Gnd, and signal went to a voltage divider on the platform consisting of a 4.7K resistor and the thermistor.  An ohmmeter on the end of that cable that went to the A6 connector on the Extruder Controller showed 4.7K between 2 leads, with the other open.

HBPthermistorBreak1234StrainRelief1244I took the HBP off and opened it up.  Sure enough, the ground wire had come unsoldered.  I was a little surprised – I expected the failure to be a wire fatigued and broken from the constant movement of the platform.  After I soldered the wire back, I added a little strain relief as protection from the failure I expected.  It worked fine when I put it back together.

Don’t print small

While trying to find something I could print and hand out at a session at Addison Public Library, Jim H suggested (3D) printing on paper or cardboard.  The idea of printing up an array – maybe 3×3 on the 10cm x 10cm print bed – of small cards with some minimal 3D printing seemed like a great fit.  Some googling found that others had succeeded in having prints stick to paper.

So I made up a little “3D” in inkscape, imported to my new friend tinkercad and exported a .stl ready to print.  I made it pretty small – 1.5 x 1.5 cm – so I could print a bunch in one round.  The results were terrible.  I’d had similar problems with other small prints.  I think it stays too warm and mushy and it’s too unsolid to provide a good base for higher layers.  Maybe without a heated platform?  Anyway, small prints seem pretty well doomed, at least on the Cupcake.

SmallIsBad1286So I made it bigger – 3 x 3 cm.  That was much better.  Unfortunately, that shot my idea of printing a whole bunch at once.  Once there was anything to make the card a little more interesting, I wasn’t going to be able to print more than maybe 2 in one shot.

AbsJuice1283The first print on paper just didn’t stick at all.  But when I swabbed the paper with “ABS juice” first, it stuck pretty well.  I’d made up some ABS juice – bits of ABS scrap dissolved in acetone – after reading rave reviews from almost everyone who’d tried it.  I guess it left a thin layer of ABS on the paper that let the printing grab hold.

FirstCardPrint700-1268Unfortunately, while the bottom layer did adhere to the paper, the curling forces of the ABS shrinking as it cooled were way too much for the paper to resist.  (I’m sure even the 110lb card stock I stock would be no match for it.)  So in curling, the ABS lifted some from the paper.  It was still fairly well attached, but clearly not completely bonded.  I could make a much nicer handout by printing on the Kapton-covered bed to get flat prints, then gluing them on the paper.  But that’s just too inappropriate for the task.  I’m not sure what I’ll do.  But it was a really neat idea!

Hmm – I think PLA is supposed to shrink a lot less.  I’m not a fan of it, as it’s much weaker than ABS, and for most of what I’d print, the mechanical strength is important.  But for a thin throw-away demo on paper, it might be fine.  Guess I’ll have to try to beg some on the W88 list.  Boo.

W88 logo

I’ve been working on a good .svg of various flavors of the Workshop 88 logos for quite a while, first inspired by wanting to carve it on the Shapeoko.  But I’ve finally gotten something decent, and now that I’ve found I can import to tinkercad (thanks, Andrew!), I’ve tried to 3D print it.

W88Logo700-1227The first attempt wasn’t too bad.  I happened to run out of filament near the end, and switched colors – a nice touch.  But it’s supposed to have a background, and have the letters attached by more than strings that shouldn’t be there in the first place.

Unfortunately, tinkercad has precious few tools, and nothing that can capture an existing shape (like the overall outline of the shield).  Back to inkscape to add the bottom.  Then import to tinkercad, tweak, save as .stl.  RBW88CoinBefore1253RBW88Coin700-1257But it does give me something I can print.  This time I changed colors on purpose, very slightly before the bottom layer was done so most of the top layer would be the new color.  Here it is before and after about 10 minutes with an Xacto knife.

Flaw1-1264Flaw2-1265Even besides the strings, the print was far from perfect.  It lifted up in one corner.  (I might have mashed that down repeatedly with the spatula as it was printing.)  And for reasons mysterious to me it screwed up across the top, starting and finishing nicely, but messed up in the middle.  Mystery.  Update:  Bill suggests, and I believe, that the problem across the top was that the errant layers just didn’t stick to the layers below.  The natural tendency of the stretchy filament is to take the shortest path between places it’s tacked down to, and I expect that’s what’s happening here.  My best guess would be to decrease layer height so each layer is better smushed to the prior, allowing it to stick.  And the weird thing near the bottom was probably due to bad adhesion to the platform in that section (missing kapton, I think).  The stretchy thing explains the path.  As the extruder tried and tried to put the filament in the right place, it eventually got better.  I like the stretchy explanation.

I still haven’t gotten a formula for how fast the filament moves or even the time between say when filament enters at the top and when the new color is printing clean.  I really need those if I’m going to try to make good multi-color-via-multiple-layer prints.  Someday.

Update 4/4/14:  I did some actual tests at the space last night.  At full speed (from the control panel, extruding into space) it took 50.8 sec to suck in 2″ of filament, for a filament consumption rate of 2.36″/min.  Feeding a new color in, it took 2:50 between the time the old color disappeared into the opening at the top and when the new color was pretty completely in the output stream.  That’s 150 seconds of all-old color plus  20 seconds during which the color fades from first to the second.  I note that even after it’s all new color coming out, if the feed stops (print done), head stays hot, and then flow restarts minutes later, there’s a short burst – a few seconds, fading – of the original color again.

Update 4/7/14:  RPBlogo1311I played with the slicing config some more, and while it’s not perfect, I think I’ve improved it.  I added another layer to the logo to get an actual red, white and blue print.  Figuring what the red layer needed to look like was slightly more challenging than I expected.  But how do I know when to change the filament?  I came close, but not quite a cigar.  If I had started the white just a little earlier – one more layer of white – it would have been pretty good.  But I didn’t, and it wasn’t.

The “WORKSHOP” letters are just below what the filament size resolution can reproduce decently.  But now that I’m this close, I’m willing to make it bigger.  If I fill the whole print bed, the 6.5cm object becomes nearly 10.  That can only help the fidelity of the letters.  For the record, let’s go thru the whole process of making it bigger and figuring out when to change colors.

Back in tinkercad, I took the logo above and stretched it to 9.8cm tall.  I reduced the just-increased height to 7mm.  (The first one was 5.)  In Design, did Download for 3D Printing -> STL.  I opened that file (w88logorwb3.stl) in repg.  Apparently I’d clicked Download before it was quite done with the size change, as it was the old size.  Redownloaded as w88logorwb4.stl.  Bigger.

Not10x10-1313Unfortunately, our build platform isn’t actually 10cm x 10cm, due to screws holding the platform together.  Looks like I have barely 8.5cm clear side to side.  Resized in tinkercad to 8.9 x 8.33 x 0.7, downloaded as w88logorwb5.stl, opened in repg, generated gcode, opened gcode in 3DGenius.

OK.  Looking at the layers, the last blue is layer 5.  That layer takes 217 seconds.  If I want half of the 150 seconds of all-old color on that layer, I need to start about 142/217=2/3 of the way thru that layer, or after ~2:22 into that layer.  The first layer prints vertical lines, then horiz, vert, horiz, vert, then horizontal layer 5.  I have to keep track of that to know when to switch to red.  The total time for layers 0-5 is 1676 seconds, so I’d expect the change to occur after about 1600, or 26:40.  At 2.36″/min, I’ll need ~63″ of blue.

Red is layers 6-12.  The last 3 layers print the top area with vertical, horizontal, vertical lines.  Layer 12 takes 139 seconds, so again if half the old color is on that layer, I need to change just about 1 minute into that layer.  Total time for red is 712 sec, so I’ll need ~28″ of red.  Assuming the 3DGenius times are right, that should happen just about 37:36 into the print.  Yeah, right.  I’ll try to run a timer and see when it actually happens.

SpoolHolder1319White is layers 13-18, for 814+75 sec, so I’ll need ~35″ of white.  I guess I better set up a spool holder.  Here’s a crude one using a tripod.

Back to finding when to change colors.  If you turn on “Analyze” in the slicing profile, repg pops up a nice screen that lets you look at each layer of the print.  From that and the knowledge of how I’d created the object, I could see what layer each color could start at.  And while it did give line numbers from the gcode file, there was no time information.  I needed to know where 2:50 before the color change was in the print.

I found an online gcode visualizer called 3DGenius here that lets you upload gcode and provides a similar layer by layer view, but also provides time for each layer.  Stepping thru the model, I recorded the time for each layer.

Bigger W88 logo and extruder stuff

Took about 5 tries to get it started, for various hardware and operator issues.  Screwed up ~19 min in (layer 1) and stopped feeding.  Retightened thumbscrew, got it started again.  Same again next layer.  Maybe the thickness of the blue varies a lot?  Stopped again.  Paused print, pulled filament out, cut off, reinserted, restarted – seems to be extruding!  Added maybe a minute to the build.  Failed again soon; gave up and stopped the print.

Cleaned it all off, started fresh.  Failed a few minutes in.  Tightened screw, got it going again.  Failed again.  Gave up.

BlueFilament1293Read up on bad filament.  Amazon reviewers of the JAG blue stuff we have uniformly gave it 1 or 2 stars.  Main complaints were off size and embedded air.  Made 10 pairs of measurements on the blue stuff maybe 4-8″ apart, at 90º to check roundness.  It’s pretty bad.  Mean inside-outside of spool curve was 2.74mm, std dev .05mm.  Side to side mean 3.16mm, std dev .042.  That’s pretty oval for a delivery mechanism with a thumbscrew for diameter adjustment and no spring to adapt to variations.

NewSpoolMount1327OK – I can see that the dumb thumbscrew set for one way would be pretty bad the other.  I had set the spool up kind of at the corner, so if it twisted, maybe it went from fatways to skinnyways.  So I cleaned up, moved the spool exactly to one side, so it should always feed the skinny way, and tried again.  Failed just the same way.

Thinking about it, I’ve loosened the thumbscrew and pulled the filament out a few times now.  When it’s not extruding despite tightening the thumbscrew, it’s very hard to pull out, even to the point that  I’m even a little concerned about breaking something.  When I pull it out when it’s working (like to change colors) it pulls out easily.

But uniformly, whenever I put a new filament in and push it down by hand into the hot end, it will start extruding with only moderate pressure on the filament.  That says the nozzle isn’t clogged – but somehow the whole extruder was when it wasn’t feeding.  So maybe the filament gets soft above the actual heating chamber, gets fat (or bends) and runs against the sides of the tube, and won’t move much.

I don’t know exactly what the design thinking was for this hot end, but there has to be some kind of thermal brinksmanship:

  • When the cold filament goes into the top of the stainless steel tube, it’s clearly in the state we see when we handle it.  It’s quite stiff against lengthwise compression, and slides freely in the tube.
  • In the heating chamber, the filament material is very much melted, and while viscous, can easily be squirted out the nozzle.
  • Exactly where is the transition between the two?  It has to be somewhat spread out vertically in the tube.

If the bottom of the tube is too hot, the filament can get gooey too early.  So is the problem that the tube (which has a little dinky heat sink ring on it) too hot?  Would cooling it help?

Thingiverse has several fan shrouds for the common 40mm fans – which won’t quite fit between the 35mm spaced dinos.  (Is that the right word?)  So others must have wanted to cool the tube.  OK, we’re desperate – let’s install a fan.

KilnPaper1331KilnPaper1357Because of vertical pieces of structural plastic blocking crosswise air flow, I decided to blow air from front to back across the tube, but didn’t want to cool the actual hot end.  The dino blocked most of where I wanted air to go, but had enough open that it felt like I could get at least some air on the tube – including on the hottest part.  I had some ceramic kiln paper and fashioned a little protective pad to keep the airflow away from the hot end.

Fan1332I found a 12V 90mA 40mm fan in the junk box and made up a little bracket for it from two thicknesses of the 0.009″ heavy aluminum foil from a catered-in lunch tray that just fit over two screws on a FanInstalled1339horizontal plate.  The only air flow is from the lower third of the fan, but I hoped that would be enough.  After all, the original design didn’t have a fan at all!

FanPowerConn1351Continuing that logic, I figured just the gentle breeze from running the 12V fan on 5V would be sufficient.  There was a free 5/12V disk connector with 0.1″ sockets, so I made one of my usual hot melt-insulated male connectors for the fan, using 2 adjacent pins for 5V (red) and ground.  I tried another print, and while it might have held out a little longer, it still stopped extruding about 10 minutes in.  Damn.

Thankfully, the symmetry of the disk connector provided a plan B:  By flipping the male around, it got 12V instead of 5 (as shown in the picture).  The fan makes a lot more noise, but is still running completely within its voltage spec.  (Although blocking much of its airflow may not be.)

One last try.  It failed, but I paused the print, pulled the filament out, cut it off, stuck it back in, restarted – and it started extruding again.  I smushed the little lump where the head sat while I was changing filament with the spatula.  A couple more restarts, but it got all the way through the blue layer!  Maybe the red isn’t as finicky.  And the red worked and didn’t jam!  And neither did the white!  I got a print!

LiftedEdges1352There were a couple of places where it stopped printing before I noticed, so there are moderate gaps in some layers.  I only had enough kapton tape for 3 stripes instead of 4, so the edges lifted a little, despite applying several layers of ABS juice to the naked aluminum plate.  There were a few of the strings stretched across the top outside like in the first one.  But it worked!

LogoRWBbigRaw1345W88LogoRWB1348Here’s before and after some quality time with an Xacto knife.  As hoped, the letters are a little wider and look better.  I guess the ‘K’ was just the victim of digitization.

I promised wouldn’t spam the email list with any more updates on this, so I’ll just post the nicer picture on the W88 blog with a link here.

Extruder collected thoughts

As of 4/8/14, here’s a summary of what I think about the extruder (with additional musings on the Cupcake proper).

  • The number one problem I see is the non-particulate clogging of the hot end where (I think) the filament above the melting chamber gets soft enough or sticky enough to stick/jam in the tube.  This only seems to happen after ~10 minutes of extruding.
  • As long as #1 persists, it’s not worth putting much energy into the printer.
  • A stepper probably won’t help the #1 problem.
  • I fear there may be contamination in the tube that eventually gets hot enough to slow down the fresh filament.  That’s just a theory, and would require tearing the hot end apart to clean/check it out.  That’s a fair amount of work, but it’s the only way to fix it (if that’s indeed the problem) short of replacing the hot end – an expensive fix for an old printer that’s about to be superseded.
  • I think the fan helps the #1 problem, but clearly doesn’t eliminate it.
  • I suspect the many people who claim a stepper extruder is the best thing you can do for a Cupcake are right.
  • Problem #1 notwithstanding, I’m tempted to consider somehow spring loading the delrin block to remove filament variation problems from the situation.
  • I’d be tempted to continue the work Bill started on a Wade’s stepper extruder – taking advantage of his prints, his stepper and his Pololu stepper controller.  The “ugly cable hack” sounds pretty easy and is free.  But #1 stands staunchly in the way.
  • The blue filament is clearly out of spec.  Its ovalness is bad, but if fed at a suitable angle (so the pinch wheel always sees the same (narrow) dimension) it’s probably not a very big problem.  I’m pretty curious whether it has a particular thermal problem and other colors/suppliers are better.
  • I’ve ordered some 5cm PET tape for the build platform.  It’s alleged to be a little better than kapton, and 2 strips would cover the bed.
  • ABS juice (1 cm 3mm filament in 10cc acetone) really is a big help making prints stick.
  • The little work platform out the back makes re-taping the HBP easier.
  • If we keep prints short, the Cupcake is probably still useful as a beater to drag out to demos, though it certainly doesn’t show what current printers can do.
  • Maybe we haul the Cupcake plus a box full of sample of high quality prints.  We have a box of some on loan from James – thanks!

Beeper

In hopes of someday being able to provide audible indication of when to change filament color, I added a small noisemaker to the bot.  (I couldn’t find a way to display an indication on the repg screen.  M01 displays, but stops the print!)  After digging thru the code a Beeper1293lot, I discovered that M106/M107 gcode commands will make it thru the maze of software and hardware and control Channel C on the extruder controller board.  I added one of the square piezo buzzers from the space with a 100uF cap across it to that output.

(There was moderate false hope with M70/M71 for a while, but those print messages on the bot – assuming the bot hw/sw support it.  Obviously, there’s no display on a Cupcake, so that can’t work.  But it made very clear the distinction between something happening in repg and on the bot.)

I don’t want to delay the print with much time between the M106 (on) and M107 (off) codes, so the cap allows even a short on time to give a reasonable decaying noise.  Now if I can just get a method of finding where to insert those codes…

Update 4/8/14:  Still no way to find where to insert the codes.  I did try to insert some at a random place or 2, but don’t remember hearing the beeper (though I wasn’t intently standing there listening for it).  Either it didn’t actually work or the machine makes so much noise it drowned the beeper out.

Opening the gcode up in 3DGenius provides enough information for you to figure out about where you might put the warnings, but only by line number.  You still need to open the gcode in an editor with line numbers and re-save it.  The skeinlayer feature under Analyze in repg probably also provides enough information.

While changing colors on the fly by cutting off the old filament and pushing the new in (hard) until it catches in the drive wheel pretty much works, if you push very hard you’re likely to crash the extruder head into the print, possibly doing damage.  An alternative is to pause the print, loosen the thumbscrew, pull out the old filament, insert the new, push it down (all the way into the melt chamber, but not too hard), retighten the screw and unpause the print.  There will be some combination of a gap in the extrusion while it restarts plus a little lump of drizzle where the head parked.  Flattening the lump out with the spatula is pretty workable, and a small gap isn’t a big deal, either.

USB cable clamp

Since the Cupcake is getting moved a lot these days – home, space, gigs – I’m a little more aware of the cabling.  The power cable is fine, but the FTDI USB cable isn’t.

CableClamp1298UsbCabledClampedB1305There wasn’t one the right size in the junk box, but this cable clamp bent from a sheet of ~50 mil white HDPE scavenged from a large bottle looks almost like the real thing!  And now I’m a lot more comfortable that the USB cable isn’t going to do something bad in transport.  I’ll probably replace the 6-32 with one of the black hex M3 screws the cool kids use when it gets back to the space.

HBP tape replacement support platform

PlatformWorkSupport1317During a recent print attempt, the filament stopped extruding, and I pushed it down into the extruder to try to get it started again.   Unfortunately that crashed the nozzle into the HBP and scraped some of the kapton tape off, and I had to replace the tape again.  Since it’s awkward to work on the HBP because the heater and thermistor wires are short,  I made up a crude support platform to make it a little more convenient.  It seems to work OK.

Tip:  To restart a stuck/stripped filament, don’t push it down.  The Z platform isn’t rigid enough to resist that force, and you’ll damage the print or the build platform.  Since the problem is usually a stripped spot in the filament, just turn the filament so a fresh place is exposed to the hobbed shaft.

Addison library printer demo

 

I agreed to do a 3D printer demo for Liz Lynch at the Addison Public Library on April 30, 2014.  Negotiations for the gig were interesting:  I expected to go in, dump some printed samples out to look at, have the printer running, let kids gather round and ooh and aah while I explained some about what it was doing, do maybe a 15 minute talk on CNC/3D printing, then hang around with another print and answer questions.  Liz said that was a great start, but she’d also like to teach the kids a 3D design program, have them design their own objects, then print them.  Me: In 2 hours?  No way!

Andrew responded to a query on the W88 list that I should look at Tinkercad.  Some other discussions ensued, but it fit perfectly, we used it at Addison, and it worked out about perfectly.  My “No way!” was completely wrong.

Unfortunately, when I got there, I couldn’t get the printer working right.  In a failure I’ve never seen before or since, right after replicatorg did a little test extrusion and was told to continue, the head went down a little, then UP, not back to the print bed!  Of course when it started printing in the air, I aborted.  After several cycles of that, including a PC reboot and power cycle of the printer with no improvement and already being 15 minutes into the session, I gave up.

Adding insult to injury, the slides I’d done for the talk didn’t make it on to my laptop, so I didn’t have those, either.  Not an auspicious start.

I did a little impromptu talk about 3D printing, pointing to the dead printer and holding up printed samples.  Then we showed the kids tinkercad.  While Liz proctored, I played with the printer.  The first object different from the one I planned to have printing when they walked in  worked fine.  If I’d changed objects, I could have had it running long ago.  Ugh.

The kids did great, and banged out their various creative objects.  We got one printed and failed trying to squeeze in a second before we had to go.  At least the kids got to see the printer in action and ask some questions.  Feeling guilty that the talk had gone so poorly (printer malfunction, no slides, but they still paid W88), I agreed to print all the kids’ things at home.  Liz went thru all their accounts, made their objects public, and sent me the usernames.

AllAddisonPrints1575That was an adventure, too.  I finally gave my self permission to make executive decisions and modify (copies of) their objects for easier printing.  I kept some notes while I was printing the kids’ objects, and gave Liz a paper copy when I dropped them off.  For reference, here’s a pdf.

The printer behaved pretty well, jamming only twice.  I decided to try the “support” mechanism in replicatorg with an object with impossible overhangs (the white one).  Seemed to work pretty well, adding one more arrow to my quiver.

ScrewHangUp1546The most interesting glitch was when part way into a print it started extruding above the print surface, but wasn’t jammed.  After various considerations, my best guess is that a repair I made to the broken green filament spool got hung up on the new spool holder.  Screw heads on a bit of scrap I screwed into the spool both for reinforcement and to hold things in place while the epoxy cured might have caught on the spool support/carrying handle and stopped the spool.  The extruder motor then might have caused the whole Z axis to climb up the immobilized filament.  Cool.

Facing that big print job I tuned replicatorg up some more, including finding where the “preheat” values were so I can keep the bed and head hot after a print with one click instead of entering 2 temperatures in the control panel screen.  I think I found all the start and end gcode, and changed default temperatures and added a “go up 1.5cm after print is done” bit.  It’s coming along.

Lots more to be added…

Posted in Cupcake 3D printer, Uncategorized | Tagged , , , , | 5 Comments

Arduino 301 class post mortem

The 301 class went well, but far from perfectly.  Despite scheduling the class for 3 hours instead of 2, I was once again overly optimistic about what I could get covered, and left a lot undone.

Of the original outline below, we only got through servos.  The rest of the motor stuff – including the robot lab – didn’t make it.  I’ve considered hosting another session, just to cover the rest.

•Arduino pins:  What you can connect directly
•For more muscle: Relays, Transistors
•Solid state relays and 120VAC control
•Movers: Servos, DC motors, Solenoids, Steppers
•Bonus demo:  BLDC motor intro

What went well

I was pleased with some administrative bits:

  • I thought the slides were quite good, and I was pleased to have them.  I believe they let me make a lot more progress than I would have without them.  They’re not quite complete, but here’s a copy as of class time.
  • As usual, I used FreeMind to keep track of some initial thoughts about the class.  It was helpful, but hardly a silver bullet.  Probably an outline or bullet list would have been about as good – though it would have required hopping around more.  Here’s a snapshot of the latest (and probably lastest) version.
  • The “Please have your Arduino, IDE, and  breadboard fired up and ready to go.” on the Welcome slide was good.
  • By following the slide with what we were going to cover with the “introduce yourself” round, people got a chance to say what they were looking forward to and what they were already familiar with.  Can’t please everybody, but it was helpful intel.
  • Starting with the “what we’ll cover” slide above and bringing it back as the intro to each section (appropriately bolded/greyed) at least seemed like a good idea to me.
  • Distinguishing between Arduino-specific stuff and basic electronics stuff and mentioning which we were doing on each section’s intro slide seemed appropriate.
  • Distinguishing between Atmel stuff and Arduino stuff was also valuable, and I think went well.
  • I think the list and organization of what all should be covered in a “control the world” class was pretty good and complete.
  • Thanks to Jim H for taking some pictures.

Some content-specific stuff:

  • I was pleased with introducing high- vs low-side switching.  Referring back to that when discussing the two polarities of bipolar and field effect transistors was very good.  (Or at least the teacher thought so.)
  • I liked having some relays to pass around, and the reed switch/magnet/LEDs pass around was very nice.  (Or at least the teacher thought so.)
  • I was quite pleased with the analogy pictures of using transistors (both kinds) as switches.
  • The labs using bipolar and field effect transistors went pretty well, and I think were valuable.
  • The lab switching 120VAC with an SSR went well, despite safety squawks from one student.
  • The servo lab went pretty well.
  • I liked the idea of a paper lab designing a circuit with switches to run a DC motor either direction as part of H-bridge intro.  Everybody at this level ought to do that exercise.

Improvements

Some general stuff:

  • The labs took a lot longer than I expected.  Will I ever learn how to predict that?
  • One of my goals was to try to make looking at datasheets less daunting by hand holding thru important parts of relevant ones.  Probably mostly because I wasn’t prepared well enough with instant links to all the datasheets, I made very little headway with what I think is a valuable lesson for a class like this.
  • Be sure to ask students to take pictures.  Provide a camera, but try to have pictures happen even though you’re going to be way to busy to take them.

Content specific stuff:

  • I went to a fair amount of trouble to have a PC/projectable scope to show PWM waveforms, but didn’t do the last 5% of the prep to be able to just pop it up, so it didn’t happen.  🙁
  • I don’t think I waved a PWMed LED back and forth to show strobing and crude estimation of duty cycle.  Maybe I need to make up a little dedicated demo – even with a 555 – and a really bright LED to show this off.
  • I failed to have a good demo of how much better PWM is than varying voltage to an LED/resistor pair.
  • Lack of prep meant I didn’t have a good demonstration of inductive spikes and snubber diodes.  I failed to leave the “If you’re switching any kind of coil, always use a snubber diode!” message burned in.  Shame on me.
  • I was amazed that both the 2N2222s and FETs in the labs got hot with my driving and loads.  I needed 330 instead of 1K series resistors with the 2N2222s.  I tested this stuff on the bench.  How did it not work right?
  • While the SSR lab was very good, it was slightly awkward to bring and keep safe the 60W light bulbs.  And a student asked:  Can you still even buy these?
  • I was sad that I couldn’t show the special flavor of PWM for servos on a scope.
  • I should have had some kind of extra extension of each of the labs for students that got done early.  (Early meaning in about the time I expected.)  This is a valuable general rule for doing labs in informal classes like this.
  • Having actual RC transmitter and receiver – and a scope to show the servo PWM waveforms again – would have been a plus.
  • I never finished the stepper section of the slides.  I suppose the good news is that I never got that far in the class, either…
  • I thought the little 5V steppers (with ULN2003 drivers) would be perfect.  Since they were geared down, they were not.  It was annoying that I had to hand modify each of the drivers so it would plug into an Arduino easily.
  • It was too bad I burned out the hard disk motor (or its contacts or something) by driving it with that 20A ESC with a 7.2V LiPo.
Posted in Workshop 88 Stuff | Tagged , , | 2 Comments

Quick and dirty heat sinks

I’ve been pushing a couple of audio amp chips to get as much out of them as I can for another project.  While the expected duty cycle is low enough that I can probably get away without heat sinks for the final application, the parts get pretty hot when they’re run long enough to do testing and make measurements.  It seemed like a good idea to put at least some minimal heat sinks on them.

TDA1518HeatSink0983The larger of the amp chips, a TDA1518, got so hot so fast that I’d already hacked a quick heat sink on to it.  I’d laid the board out so the back thermal surface of the Multiwatt package was flush with the edge of the board, so it was easy to bolt an old TO-3 heat sink to it (with some thermal grease, of course).

ConverterBoard1101But that was only part of the problem:  I was using a DC boost converter to get ~15V from a 3.6V Li-ion battery, and that converter was getting hot, too.  Fortunately, there were a whole bunch of vias to provide thermal connection from the chip to the back of the board.  I found a strange tower-like BoostConverterHeatSink1091cylindrical sink in the junk box whose transfer surface just about matched the one on the back of the converter board.  But how to hold it on?  That nice #7 soft steel wire doesn’t have a lot of spring, but there was just enough for this snake to clamp the sink down nicely, if temporarily.  Some more thermal grease, and I’m sure the chip was very happy to be able to snuggle up to that nice cool aluminum tower!

Max98307Close0975The other amp, a little MAX98307, didn’t handle nearly as much power as the first one, but still got pretty hot.  It had a thermal pad on the bottom, but with my single-sided boards, that wasn’t very useful.  With its tiny top surface, there wasn’t much to make thermal contact with, and other components on the board were taller than the chip, so I Max98307HeatSink1061couldn’t even clamp a large flat sink to it.

I cut and bent up a bit of scrap copper sheet to about the right width, but any movement was likely to short out other components, so a kluge clamp like the one above wasn’t a great plan.  GlueClamp1099I didn’t have any thermally conductive glue, so I used normal 5 minute epoxy and made a single point of contact vertical gravity clamp to squish it out as thin as I could, in hopes that that thin layer wouldn’t present too much thermal resistance.  (I go through a lot of that nice #7 wire.)  A bit of scrap plastic for a base gave the sink a little protection from being cracked off.

As with the bigger amp and converter above, I don’t have any easy way to measure how much cooler it runs, but I have to believe it’s a lot better off than it would  be with nothing.  And all 3 components survived at just below clipping for long enough to make the observations and measurements I needed, so I guess the sinks did their jobs.

Posted in Miscellaneous, Rf starter's gun | Tagged , , | 3 Comments

Tiny85 ISP cable mini shield for Mega

Well that was embarrassing.  I thought I could knock out a quick mini-shield for an Arduino Mega to use as a programmer for Tiny85s (or most any other AVR chip).   I did, and it works, but only after two iterations of repairs due to dumb.  And it’s still not close to ready for prime time.  (But see update at end.)

IspCable6pin1093The shield I made for pre-Megas was small and simple.  (The one at the right is the simplest – no LEDs.  Current ‘production’ versions have the heartbeat LED; my personal “good” one has error and comms LEDs as well, but it’s the only one I made that way.)  The shield picks up the SPI connections (10-13) (plus one or more of the pin 7-9 LED lines) on one side and spans over to pick up power and ground on the other.  Convenient pin placements, and I took advantage of it.

The Mega’s pinout is the problem.  The ArduinoISP sketch apparently uses the actual SPI pins on the host processor to talk to the target.  Those are brought out on (Arduino) pins 50-53 – on that long new header across the end of the board.  Very inconvenient for a mini-shield.

DumbMegaIspCableOnMega1000BUT – because SPI is also used for programming the chip, the lines are also brought out on the 6 pin ICSP header.  (Well, most of them.)  That’s much closer to the LED pins (7-9).  And the ICSP header has the power and ground I need, too!  If I oriented the shield diagonally, I could get everything I needed (or so I thought) on a shield about the same size as the ones for pre-Megas.  I laid one out (with thanks to SparkFun for having an Eagle footprint for the Mega board!)  That it’s crooked-wise sort of adds a little charm.

So I made one up and tried it out.  Couldn’t load Arduino ISP.  Right – it’s got the cap to keep the programmer from resetting when new code is sent down.  Took the shield off, programmed ArduinoISP fine.  Put the shield back on and connected the cable to the ICSP header on a Duemilanove.  (I didn’t want to load code to it – but if I could confirm the device signature that would mean I could talk to it.)  Fired up avrdude and got the command line params right in just a few tries.  But it didn’t work – and just gave some unintelligible error message.

Dumb # 1

I looked at the ArduinoISP code, and slowly the line “#define RESET SS” sunk in:  I didn’t connect RESET on the cable to the target to the host pin (53/SS) they’re using to control it!  I’d gotten so delighted with using the ICSP header on the Mega host that I connected the target’s RESET to the host’s!  Well that’s just wrong.

Took the shield back to the bench to hack the correction in.  I was going to have to add a darn flying lead to get out to pin 53 (SS, the pin ArduinoISP uses to control the target RESET).  That would never do for the production version, but at least I can get this one running.  To disconnect the target RESET from the host’s, I ground the pin from the female header to the host’s RESET pin off below board level, and patched the new pin 53 wire to the wire to the target‘s RESET, and made sure it was also connected to the 10uF cap.  Back to try again.

Dumb # 2

Still didn’t work.  Eventually it came to me:  That 10uF cap goes to the host‘s RESET pin, not to the target’s where I’d hacked it to!  And more bad news:  the host’s RESET pin was the connection I’d ground off to below board level.  No way was I going to be able to connect to it now.

DumbMegaIspCableCloseup1003So I removed the 6 pin female header, cleaned out the holes and soldered a new 6 pin female in – this time with all the pins accessible.  A little trace cutting and finessing with bits of wire and I had everything connected to where it should be connected.  And this time it actually worked!

I hadn’t been sure which programmer to tell avrdude to use.  It seems to be happy with arduino, avrisp, stk500, stk500v1, stk500v2.  So now it could read the device signature and even dump some flash.

Now what?

OK, now I know how to make it work.  But I can’t do it with a “mini” shield.  And I really don’t want a flying wire.  Can I just use a different pin to control the target’s RESET?  I tried pin 2 (after also adding a pinMode(2, OUTPUT)).  Nope.  But the prospect of having to run a hacked ArduinoISP sketch was pretty bad anyway.

I can get all the SPI pins (50-53) plus power and ground from that new long header across the end of the Mega.  But then I don’t have the LEDs.  Yeah, there are lots of pins on that header that I could re-assign the LEDs to.  But then we’re back to a hacked ArduinoISP sketch.  The minimalist size of a shield using only that long new header is very appealing, and very much in the spirit of the original mini-shield.  But I really like having at least the heartbeat LED.  I suppose I could put the LED on, connected to some other pin, and say you can get it to work if you change the one line “#define LED_HB    9” in the sketch, but that it will still work (without the LED) if you don’t.  And most people don’t even know about the LEDs in ArduinoISP, so not having them isn’t really a loss.  (But I know about them 🙁 .)

Update 1/29/14: I’d almost settled (with all the negative connotations) for using only the new header on the end of the Mega (with remapped LEDs).  With something like “#if defined __AVR_ATmega2560__” I could even toggle the LED pin defs so I’d have an ArduinoISP sketch that would work with either mini-shield.  But when I started to lay it out, I realized that doesn’t give me access to the host’s RESET line to connect my auto-restart-defeat cap!  Bummer – that’s a non-starter.

Or I could just make a huge (by my “mini” shield standards) say triangular shield across the whole new header and going up to pins 7, 8, 9 for the LEDs.  But I’ve lost the “mini” part.  (Oops – that doesn’t give me the host’s RESET.  Won’t work.)

PossibleMegaShieldI guess it might be possible to do a long, skinny shield catching 7, 8, 9 for the LEDs, the 6 pins on the ICSP header, and then going out to pick up pin 53.   But they don’t really line up very well, and that’s kind of weird anyway.

Extremely minimalist (no LEDs, no PCB!) would be a piece of ribbon cable with two 2×3 female header ends.  But the RESET pin wire from the target end would be a couple inches longer and not crimped into the connector at the host end.  Instead, it would just have a 0.025″ pin attached.  Plug that into pin 53 on a Mega or pin 10 (SS) on an old 328-based Arduino and it should work.  Rats: That doesn’t give me a way to defeat auto-reset either.  OK – a small PCB at the host end would do it.  But more work and still no LEDs 🙁 .

Maybe I should just do the weird diagonal one (wired correctly, of course!) and put up with the flying lead.

Ugh.

1stProductionMegaShield1007More update 1/29/14:  The lesser of evils (at the moment) is the flying lead and the diagonal PCB.  Here’s the first one.  The PCB is corrected, and there’s a nice pad for the flying lead.  I need to make a nice tag/label for the flying lead that says “Pin 53”.  That whiteout Pin 1 mark on the female header is pretty ugly.  But it’s effective, and I finally made the cable come out the sensible way to plug into the ICSP header on an Arduino in case you need to re-burn a bootloader.

Posted in Tiny 85 stuff, Workshop 88 Stuff | Tagged , , , , , | Leave a comment

Tiny85 class

Tiny85FreemindI finished the second run of the Tiny85 class Saturday (1/25/14).  It was pretty good, but as before | always there was room for improvement.  I’ve been using Freemind for the official repository of ideas, todo lists, lesson plan etc, and it’s good and useful, but not perfect.  (And because the file resides on the PC, the snapshot here is subject to infrequent updating.)  I’m hoping this post will add some clarity.

What went well

  • I put slides together this time.  There’s always room for more slides, but for the stuff I covered, they’re OK.  Here’s a link to the latest version.
  • The “Welcome” slide, which was up as they came in, instructed them to download the core libs.  That worked well, but should have said to unzip the file and stash the ‘tiny’ directory where they could find it for when we’d install it later.
  • The ‘lab activity’ of soldering pins and wires to the ISP shields took way too long the first time, so I pre-made them this time.  Actually, it was Jacob who did a bunch of the work.  (Thanks, Jacob!)  The time savings in class is great; the extra work not so great.
  • The blink sketch I pre-programmed into all the Tinys for the class was a sequence on physical pins 5, 6, and 7 this time.  The verify-your-setup instructions were to put an LED on pin 5 and look for a blink.  The blinks on the other 2 pins gave me something to add for those who got done quickly.  That worked out well.
  • The handout sheet I passed out this time was a very good addition.  Here’s the latest version.
  • I liked breaking it up with some intro, hands on fire up pre-prog blinkie and write own blinkie, more yammering about porting, programmers, etc, then actual do it lab, then more on fuses and avrdude and then lab to go to 8 MHz.  The additional stuff after that is almost doomed to never be gotten to.

Improvements

  • Class still ran WAY over time.  Gotta tighten it up.  Never even made it to fuses and avrdude!
  • I made noise about not depending on some of the magic Massimo put in to hide stuff, but should have stressed more that you really need to be awake to understand who you’re talking to when select boards when you’re downloading ArduinoISP vs the code that goes on the Tiny.  It’s not hard, but more conceptually challenging than noob Arduino.
  • I need to make more sure the invitation says you’ll need an Arduino, a current IDE, and a breadboard, jumpers etc.  And (<sigh>) they’ll need to tell me if the Arduino is a Mega so I can arrange Mega ISP shields.
  • I need to make some ISP shields for Mega.  I have one laid out, but haven’t tested it yet.
    Update 1/29/14:  Tested the Mega cable shield.  Works, but ugly.  Details here.
  • There should be better explanation of the auto-reset on download function, both for general understanding and to explain the 10uF cap and why you can’t have the shield on when you download ArduinoISP!  Maybe roll in clarification of what we do to RESET on host vs target.
  • On the handout sheet, the “Notes/Steps” were misconstrued as a full set of steps to follow, rather than reminders.  Either make it a full set of steps, or name it better.
  • Make much better distinction between serial and USB bootloaders!
  • Is there another fuse bit besides RSTDISBL needed for using the RESET pin?  (Or for 8MHz clock?)
  • Get the dumb demo blinkie running before the next class!
  • The GFCI audio, an RGB LED on a ping sensor and the dollhouse would be great additional demos.
  • Maybe add very basic “what is a UART and why do I care”.  Have a spiel about how to handle serial bootloaders and debug serial.
  • Get around to talking about debug serial!
  • Mention other core libs.
  • Have a good short spiel on what’s in core libs.  Not if-then, but yes millis(), delay().  What else?
  • Mention that bootloader runs after reset, but not power on.
  • Consider a more interesting master slide.
  • Make nice reference to the Adafruit tutorials, including avrdude.

 Next classes

Nothing scheduled for W88, but after I’ve fixed most of the “improvement” list, I’d seriously consider offering to run it at PS:One.

Posted in Tiny 85 stuff, Workshop 88 Stuff | Tagged , , | 12 Comments

Protected: Speaker and amp testing for RF starter’s gun

This content is password protected. To view it please enter your password below:

Posted in Rf starter's gun | Enter your password to view comments.

Kleenex box weights

TwoWeightedBoxes0952It’s annoying when the Kleenex box lifts up as you pull out a tissue because the box is almost empty.

Some heavyish scrap taped to the bottom fixes the problem.  The one on the left is about 6 ounces; I suspect the other’s about the same.  It’s invisible, quick and easy to move to the next box, and it works well.

The only downside is that you lose much of the ‘box is almost empty’ feedback.  That tradeoff is worthwhile for me.

Posted in Miscellaneous | 2 Comments