Wednesday, November 2, 2011

Roland/Boss RC-50 Loopstation PATCH.RC5 File Analysis

Greetings once again readers, it's been a while..

Tonight I want to talk about the Roland RC-50 Loopstation.  It is a really nice, yet-not-quite-perfect-yet, looping pedalboard that lets one record up to three different tracks on a patch.  It's 24minutes of 16-bit stereo 44.1kHz memory is, in this day and age, a bit paltry, so one has to heavily utilize the USB file-sharing capability of the unit.

(future project:  RC-50 RAM upgrade?)

For now, I just want to easily transfer #1 my files, and #2 certain patch settings, such as tempo, time signature, guide rhythm selection, volumes, etc..  Sadly, Roland/Boss has not offered any kind of host-side patch-editor for the RC-50.  Will they?  I don't know.  The RC-300 is the new baby, and sounds like it has better file-handling capabilities, so we'll see.

Now, for either Loopstation... Since I'm a Cakewalk user, the dream would be to have an RC-50 Cakewalk add-in that would just convert the RC-50 patch values, such as tempo, time-signature, etc. to the appropriate project and channel track settings on Cakewalk   One could offer an interface to instantiate a copy of the RC-50 guide rhythm as a new channel strip.  It could be a GREAT melding of technologies and would really expand the RC-50 as a compositional tool.  And now that Cakewalk is under the Roland roof, maybe we'll see something pop up.   (Hint hint)...

Speaking of that, Roland/Boss, (the legal team in particular), if you're reading this : What I'm doing here is posting my own comparison of the PATCH.RC5 file generated by twiddling knobs and settings on the RC-50...  and then seeing what changes on the PATCH.RC5 file.  These are visual observations whose results, I don't think, violate any kind of applicable license-agreement, NDA, etc.  I am publishing these findings in the hopes of helping proud RC-50 users get more out of their equipment.  I do this in the spirit of goodwill - that more people will feel good about using your products and will recommend them to others.   (I urge you to publish file and interface specifications a bit and let those in your user community contribute to your own product's growth - maybe even saving you some of the heavy-lifting along the way).  So I do humbly ask that you allow me to post my research here without legal hassle.    Thanks.  I hope my work improves your bottom line.  You've make some truly excellent gear over the years, and I don't mind giving back.

Allright on to the good-stuff:  So here's what I've found so far...
(Note: this is an ongoing project, specs will be added as found.  Also, please comment with any corrections or your own findings)

(DISCLAIMER - Blogspot's text handling doesn't work well for this mostly tabular data, but I think it's still readable.  And I've worked on it long enough.  I'll figure out how to better format it or see if there's a code-box feature that's hiding from me. Hope it helps!)

PATCH.RC5 analysis

Notes & todo:
Done:  All options under the NAME/PATCH menu figured out - still a gap at 0x15-0x1c
ToDo:  many patch-level bytes, phrase-level bytes remain

File Summary:

File Header size = 64 bytes
Patch len        = 87 bytes * 100

// NOTE: Byte offsets are from file-zero in this section:
Range (0x = hex)        Patch Offset  Field Name                      Values, notes, etc.
---------------------   ------------  -----------------------------   ------------------------------------
   0 0x00 -> 63 0x4e                  PATCH.RC5 File-level Header     BOSS RC5 FORMAT TYPE 1.00 V1.00 B0171 2006/05/06
  64 0x40 -> 79 0x4f    (0x00-0x0f)   Patch 001: Name                 
  80 0x50               (0x10)        Patch 001: Patch Volume Level   (0 - 100)
  81 0x51               (0x11)        Patch 001: Phrase Change        (0 = IMMEDIATE, 1 = LOOP END)
  82 0x52               (0x12)        Patch 001: Fade Out             (0 - 100)
  83 0x53               (0x13)        Patch 001: Fade In              (0 - 100)
  84 0x54               (0x14)        Patch 001: MIDI Sync            (0 = AUTO, 1 = INTERNAL, 2 = REMOTE)
  93 0x5d -> 0x5e       (0x1d-0x1e)   Patch 001: Tempo                (400 - 2500 (40.0 - 250.0 bpm))
  95 0x5f               (0x1f)        Patch 001: Patch:Input Out      (0 = MAIN, 1 = SUB , 2 = MAIN+SUB)
  97 0x61               (0x21)        Patch 001: Guide Level          (see notes below for values, etc)
  98 0x62               (0x22)        Patch 001: Guide Rhytm          (see notes)
  99 0x63               (0x23)        Patch 001: Time Signature       (see notes)             
 118 0x76               (0x36)        Patch 001: PHRASE1 BLOCK START           
 123 0x7b               (0x3b)        Patch 001: Phrase1 Level        (see notes)
 128 0x80               (0x40)        Patch 001: Phrase1 Simulstart   (0 or 1)
 129 0x81               (0x41)        Patch 001: PHRASE2 BLOCK START           
 134 0x86               (0x46)        Patch 001: Phrase2 Level        (see notes)
 139 0x8b               (0x4b)        Patch 001: Phrase2 Simulstart   (0 or 1)
 140 0x8c               (0x4c)        Patch 001: PHRASE3 BLOCK START          
 145 0x91               (0x51)        Patch 001: Phrase3 Level        (see notes)
 150 0x96               (0x56)        Patch 001: Phrase3 Simulstart   (0 or 1)
 151 0x97 -> 237 0xed                 Patch 002: (full patch)        
  .                                          .
 238 0x98 -> 324 0x144                Patch 003: (full patch)        
  .                                          .
  .                                          .
8590 0x218e -> 8676 0x21e4            Patch 100: (full patch)

// More specific notes about certain patch settings are found here...
// NOTE: Byte offsets are from each patch-start in this section:

Tempo Patch offset       = 29 0x1d (msb), 30 0x1e (lsb)
Tempo value 2-bytes, in tenths of bpm
Tempo value range min 0x0190 400   (40.0 bpm)
Tempo value range max 0x09c4 2500 (250.0 bpm)

Guide level offset       = 33 0x21
Guide level min = 0   0x00  (screen value = 0)
Guide level mid = 50  0x32  (screen value = 100)
Guide level max = 100 0x64  (screen value = 200)

Guide rhythm offset      = 34 0x22
Guide rythm start value  = 0  0x00
Guide rythm max value    = 55 0x37

Time Sig offset          = 35 0x23
Time Sig Values:
00 = 2/4
01 = 3/4
02 = 4/4
03 = 5/4
04 = 6/4
05 = 7/4
06 = 5/8
07 = 6/8
08 = 7/8
09 = 8/8
0a = 9/8
0b = 10/8
0c = 11/8
0d = 12/8
0e = 13/8
0f = 14/8
10 = 15/8

First Phrase1 Level Field= 123 0x7b
First Phrase2 Level Field= 134 0x86
First Phrase3 Level Field= 145 0x91
Phrase level min = 0   0x00  (screen value = 0)
Phrase level mid = 50  0x32  (screen value = 100)
Phrase level max = 100 0x64  (screen value = 200)

Tuesday, February 1, 2011

Mass Airflow Sensor find and fix in 1997 Nissan Pathfinder

Posted the core of this to FixYa and thought I'd add more detail and post it here as well, in case someone searching can benefit from this random part failure:

One day, out of the blue, my Pathfinder engine cut out as I started to drive.  It then cut out randomly.  The way it was failing 'felt' electrical in nature, like a connection was going bad.

So, I'd start the car and quickly run out and start tapping on all things electrical.  The MAF, or Mass-Airflow Sensor (not to be confused with MAP, the manifold air pressure), is located on the front airbox-airtube assembly and was a natural to tap on.  I got lucky.  The first think I tapped on killed the engine.
Did it again... and again, and again.  The Mass Airflow Sensor was definitely to blame.

I realized that it was caused by vibration, and that I could "reset" the car while driving as long as I didn't get above about 2700 RPM's.  I was in "safe mode".  Riiiight.

Got home, looked at the prices of these buggers, and they were in the $300-$800 range.  Eep!

For that price, I'm going in!
(I also verified the MAF sensor code with my newly built USB to OBDII converter found here.  It was the P0100 "MAFS" error)
I removed the MAF sensor by unscrewing the 4 screws and gently lifting it out of the air passage.

With the screws off, I was able to gently pry the cover off.  What I found was a little controller board encased in a jelly, presumably to isolate the board from the elements, and three little thin wires leading to the external connector.  Without even having to break out the multimeter, I could tell that one of the wires had broken due to vibration fatigue or some other manufacturing defect.  I recall I had to break all three wires to get the thing to open fully.

Soldering this was very difficult due to the presumably silicone jelly.  It made the metal very resistant to bonding with solder.   Without digging too much into the jelly, I exposed all wires and eventually, with scraping, fire, and flux, managed to get solder to stick decently to the various wires, adding my own jumper wires to make it easier to bridge the gap and close the case.

I needed to make this fix road-worthy, so I folded their wires around an insulating piece of clear plastic I cut from some plastic packaging material.  The wires folded nicely around it into place and the case closed.

Several years later, the fix is holding strong, or so it's continued functioning would lead me to believe!

I hope someone out there found this useful, please comment if you do.

Wednesday, January 26, 2011

Coop Door Code Update Success!

Firstly, a thank-you to Brian, who commented on my last post.  I had a very detailed reply, but commenting on Blogspot seems to be borked for me.  I'll try to answer some of your questions at some point in time if I get commenting fixed.

Now, on to the progress...    I finally implemented sunrise/sunset time-offsetting for the door.  If I enable either sunrise or sunset offsetting, the door-open time becomes a base time, and then the controller checks the day-of-year, and does a table-lookup to obtain the offset in minutes.  It adds the offset to the door-open time, and subtracts the offset from the door-close time.  Now the Winter Solstice has passed, the days are starting to get longer again, so I got this in place just in time.

I also gutted the code that checks to see if it's time to open or close the door and made it a lot simpler.

Lastly, and this was probably the biggest "bugfix", I added some "keepalive" code to the WiFi connection.  Before, if the connection dropped, the BlackWidow board wouldn't do anything to reconnect.  I would have to go out and reboot the controller in order to get it talking to the network again.   To fix this, I added a method to the WiShield object that returns the WiFi connection status.  The webserver checks this periodically and re-inits the WiFi connection if it is down.

Friday, December 31, 2010

Hydrogen Peroxide in a Spray Bottle, and Coop door updates...

You know, I give Walmart shit as much as the next guy, but they have something I haven't seen anywhere else:  Hydrogen Peroxide in a little spray bottle.  *Ding!*  Somebody gets it.  It's perfect.  can't tell ya how many times I've dumped a tablespoon of the stuff from a bottle right *next* to the cut.  Some in the cap is about the best it gets with just a bottle.  But a spray-bottle.  Boom, direct application, one can even use the spray pressure to force the peroxide into the nooks and crannies a bit, it's sterile for the most part, and it's ready to go at a moment's notice.

As previously noted, the cold weather was affecting the coop door motor/battery performance.   Because I time the motor acceleration and deceleration to avoid slamming the stops, when the weather was cold, the motor would decelerate stall out before hitting the top stop.

As previously mentioned in the blog, and because the coop-door project is all about wanton overkill, I added a TI TMP75 temperature sensor to the controller's i2c bus and am modifying the door timings based on the outside air temperature.  This has solved the problem for the moment, and as an added benefit, I get temperature I can display on the coop status page.  The new door material is excellent, although one could deduce the workings through the now-translucent door.  We haven't seen much in the way of raccoons out here so far though.  Knock on wood.

The status LED was neat for Halloween when it had the throbbing bloodshot-eyeball on it, but the eyeball eventually fell off.  The  LED, though fun and colorful, is really bright by itself.  So I came up withe some different blink patterns as well as an OFF setting and added "LEDMode" button to the page.  I'm all about configurability whenever possible.

The next task I'm working on is the sunrise/sunset time offset for the door.  Though I can manually set the open/close times for the coop door, the chickens appear to be programmed to respond to apparent dusk, taking weather .

Also made some circuit boards for prototyping, including a "chronodot"  DS3231 breakout board.

Another related project I made a few boards for is a bi-directional current shunt and voltage monitor sensor so I can monitor battery charge and discharge in real-time.  This is going well so far.  I have near perfect voltage reading with a 0.1% tolerance 1K/9K voltage divider.  My current reading is with an INA169 High-side current shunt monitor chip.  Here, I've had a few design changes.  I was going to go with the bidirectional circuit shown in the datasheet, but the diode voltage drop meant that I wouldn't get any current readings below about 100-200 milliamps or so.  Not good.  Then I realized I could just use two analog inputs and let the MCU determine direction based on which pin is rising in voltage.

Also made a bunch of little component breakout boards; SOT23-6, 0804, current-shunt, etc.  The SOT23-6's ought to be really handy because they'll work with any pincount SOT23.

That's all for now!  Stay tuned and have a Happy New Year!

Friday, December 3, 2010

Coop Updates...

Plywood Warpage:
When I started the coop project, I went with plywood - partly because I had a scrap piece that fit perfectly.  I had built in plenty of clearance for wood swelling.  Unfortunately, in addition to swelling a wee bit, after exposure to the elements, the wood released tension in the form of a warp that was too big to shim the door guides around.  I did try to shim with 3/32" rubber, which helped for a while, but ultimately the warp won out.

My advice for the door?  Avoid wood, at least for the door itself.

Fortunately, one can purchase milky-colored plastic cutting boards at various big-box outlets, and I got one that was big enough.  It was a bit thinner, and overall, a bit lighter.  The best thing?  Pretty close to dead-flat.  I could probably find bulk plastic elsewhere at a supply house, but this was convenient.

One crucial note about cutting these boards with the table-saw is to avoid meltdown:  Do it rapidly and deliberately in one solid pass.  The plastic will still get hot enough to melt.  This is just how it is.  The goal is to spread it out evenly by feeding it about as quickly as the saw will take it without bogging.   A strong table-saw and a sharp carbide blade will likely make a huge difference here.  Pre-visualize the cut and remember:  It's a whole lot easier to mind your fingers than it is to mend them.

I had to redo the top stops, but other than that, the the old latch and plexiglass fit nicely onto the new plastic door, which now works great, especially given the temporary timing fixes, which are related to the new-found problem of:

Frigid Temperatures:
The whole West Coast got blasted with arctic air for Thanksgiving.  Our Low was 11.5 F.  Brrrr!
What this meant for the door opener was that the 6v Gel battery really struggles with cold.  I found the door accelerate-decelerate timings (avoids slamming the stops) for warm weather are simply insufficient for cold weather.   The door still winches up just fine, but it does so more slowly.  After multiple open-close cycles, the door begins to operate sufficiently, but that's not how normal operation works, with just a morning opening and an evening closing.  The temporary fix was just to lengthen the door timings, allowing a longer run time before deceleration and subsequent timeout condition if the door stalls on decel before hitting the top stop.

The permanent fix (hopefully):   A Texas Instruments TMP75 I2C temperature sensor.  I'm not thrilled about the less-flexible-for-placement-purposes SOIC-8 packaging, but I2C is my data bus, and I have familiarity with the TMP75 from the Gravitech's nice 7-Segment Shield (which you'll see used in my temperature monitor project writeup soon).

As of now, the code has been written, the sensor has been prototyped and tested on an external Seeeduino, and I'm about ready to install the sensor into the drill.  I'll most likely deadbug and greenwire the TMP75 onto the Seeeduino board.   Within the door-controller, the code defines two ranges of operational timings, from hot, ie: fast-times to cold, ie: slow times,  interpolating proportionally between them depending on the temperature reading at the actual time of operation.

One nice thing about all this, is that I wanted a temperature sensor anyway that the BlackWidow WiFi board could access, to report on the the coop temperature and maybe eventually trigger a heater or whatever.  With the devices sharing the I2C bus, this should work fine.  Time will tell.  I'll fill this in with pics and updates as I have them.

Friday, October 22, 2010

First Closing...

A major milestone in the chicken-coop door project...  Installation!!!

It's in!

And, some video of the first official evening closing:

Saturday, October 16, 2010

6v Sealed Lead Acid Battery Charger (UC3906 based)

 One of the last remaining hurdles of the chicken coop door projects is reliable off-grid power.  12v is the norm, but the motor is 6v.  Wanting to learn more about chargers, power supplies, etc., I chose to build a battery charger that would keep a 6v 7Ah Sealed Lead Acid battery topped up and able to supply the motor with the 4-5A necessary for hoisting the door.  In effect now, I've got my 6v battery-backed power supply, and a battery charger to boot. A mini-UPS, if you will.

This is what I need to keep charged:
The charger is based on a Unitrode (now part of TI) UC3906 (UC2906 in my case) SLA battery charge controller.  The controller can operate in a couple of different modes, with regard to current vs. voltage sensing and state-change.   You can find all the docs at:  TI's UC3906 page.   In addition, this page helped me along considerably.  You'll note that I inverted the bulk/!float LED with the op-amp.

The charger is set at 1.2A bulk charging by a series of 2-watt low-ohm resistors.  A series of resistor voltage dividers define the voltage parameters of the charger.  The LM358D Dual-Comparator serves as a switch for two of the status LEDs, "Bulk", (yellow), and "Over-charge" (red) modes.  The third LED, (green), is "Power" (or "Float-Mode").

Depending on the two or three states, depending on which mode you run it it, the charger will either follow voltage, or current.  On power-up, OR if the battery voltage falls below 6.21v, the charger will "top off" the battery by seeking 7.15v and ending that mode when current falls to 200mA or so this current is set in part of the 2-watt series resistor equation.

Float mode tracks at 6.9v  ( a "12v" battery would float at 13.8v.  Or, just 2.3v per-cell)

"Ok, is there any junk lying around that will make a suitable case, able to hold a decently sized heat-sink?"
Yay A tape case!  (I *heart* recycled-PC stores like 3RTech, RE-PC, and PCRecycle).

 The heatsink makes a HUGE difference.  I used a smaller heatsink while prototyping, and, at full-current, over-charge mode, it ran at just under 200-degrees F.  This thing runs at 97-degrees F.  Big difference!

Here is the old heat-sink:

The heatsink donor board, a RE-PC score:

 Would it be a hack without doublestick tape?

Even drilling a perimeter couldn't save me from at least one case crack, but hey, it's a hack:

The series of divider resisitors..  I was able to compensate for the 5% resistors by pairing them in series if they didn't measure out close enough to the target voltage.  I found another person's UC3906 calculator spreadsheet, but I couldn't get the right values.  I ended up creating my own Excel spreadsheet that represented the equations to set resistor values.  They worked great.  This thing tracks right at 6.90v.

I'm digging analog.  It's kind of fun!

From this,

To this:

 To this:

To this:

 To this:

The files for this project

Thursday, August 12, 2010

New T-Shirt idea:

I was getting down about the sheer number of idiots in the world the other day, and was thinking about getting one of those shirts that say "I see stupid people everywhere" or something like that, and then I realized that I also see a lot of smart people too, but mainly because I gravitate towards them. I certainly wouldn't want to insult them by saying "I see stupid people", so I thought, hey, maybe I can turn this around.

So my t-shirt idea is simply to print: "I see smart people"

I'm not insulting anyone, and it works on several levels.

So I'm posting the idea here as prior-art, in case anyone tries to copyright the idea.

Wednesday, June 30, 2010

Williams Black Knight

Just got a decent looking Black Knight pinball machine off craigslist. When I got it, it was blowing the solenoid fuse. Flexing the 40-pin inter-board connector appears to have fixed that, if only temporarily. Had the logic probe on it last night. Pretty pictures and verified that the CMOS is writing *something* (or something else is on the bus).

Here is an intro vid to the project, on "crappy-shaky-cam":

UPDATE: IT WORKS! The CMOS 5101 chip replacement fixed the problem!!!
(I put it in a socket just in case the new one blows)

Also, in the process of fixing this, I found a broken individual socket in the dreaded 40-pin inter-board connector. I bent the remaining metal in to contact the pin, but it will definitely need to be replaced sometimes soon. This may have been what was blowing the solenoid fuse. (I blew one first thing after putting the boards back - pressing on the 40-pin connector in places fixed it)

In addition, the sound board flakes out a bit and failed to come on after the fix. I wiggled some connectors, and it started working again. Lots of connector cleaning will need to be done, but at least I know the game *works*!

Jeri Ellsworth mentioned to me that the audio buzzing on start-up may mean capacitor problems. The buzz goes away as the machine warms up, which she said even more so means cap problems. I can see that the power supply caps appear to be original, and if so, they're 30 years old now; way past their prime.

(thanks Jeri for the pin-fixing advice, and thanks to all the folks out there who have posted info about fixing pins, especially here

Saturday, May 1, 2010


Yay, the mechanical is about 95% put together - at least the basic controls. Next is to add the webserver.

Here is a vid showing the basic functionality and operation of the door:

Complete history of the project (start from the bottom)

Thursday, April 29, 2010

Coop door gravity-latch complete

Ahh, after a hardware run for some sleeves, nuts, and bolts, followed by some bandsaw work and time on the drill press, I've got a working door slide. Next step is to get the end-stop switches mounted and adjusted.

Here is the coop door about 1-1/4" from full close. Note the latch and puck positions:

Here is the coop door closed and latched:

Here is an overall view of what I have done so far:

Wednesday, April 28, 2010

To the cyclist whom I was on a collision-course with today:

(I'm about to head out and post a laminated version of this on the Stop Sign)

To the cyclist whom I was on a collision-course with today:


First of all: I’m sorry I called you an *$$hole. Your middle-finger-salute got me riled.

I was peeping my horn to let you know that we drivers have the right of way at this intersection, that cyclists have the stop-sign, and that I’m coming through. The stop sign is here for a reason.

You see, drivers are turning left off of SR-169. Which, being a 2-lane highway, offers very few windows of left-turning opportunity. Things happen quickly here; often with slick roads, limited visibility, and the threat of a deadly head-on collision.


Look, we don’t expect you to stop here all the time. Many drivers understand cyclist conservation of human (and fossil) energy (thank you). But, please, look over your shoulder to see if traffic is coming. If you see someone turning, PLEASE, STOP, or modify your trajectory so drivers can worry about avoiding head-on collisions on the highway as well as avoiding hitting you. We’re squishy little meat-popsickles too you know!

However, I have to re-iterate the bottom line: Cyclists have the stop-sign here. Period.

So, not only are Newton’s laws on our side; the State’s laws are too.

I respect cyclists (I own and occasionally ride a bike as well). I humbly ask that you respect we others who use this dangerous intersection daily.

Thank you,
-That person in a vehicle, whom you were on a collision course with

P.S. To those who already stop: Thank you. I salute you.
P.P.S: PEDESTRIANS, please don’t play in the intersection. It’s a blind corner too!

Coop door construction underway...

In the image below, you can see the door slides, the door, and the two swinging latch blocks. The latch blocks are only laying in place right now. They will be hinged at their outside-top corners to allow them to swing in and out of the latch notch in the door slides.

The string will then be attached to a hockey-puck shaped piece of wood, which will left both latches, causing them to swing out of the way. The latch blocks will then be stopped by another block attached to the door (not shown), which will then cause the string to lift the door.

The point of this is that the door cannot be opened without lifting it by the string. Raccoons beware!

Saturday, April 24, 2010

Drill, turned door winch, in test mode...

Most of the code is written and stable enough to continue on with permanently connecting the drill UI and ESC to the Seeeduino. The speed ramps up and then ramps down again, staying in slow until it finds the stop-switch. I'm going to look at using the feedback from the ESC, but I don't know if it will be reliable enough. I'll have to put it under the scope before I do anything.

Monday, April 12, 2010

WiFi Chicken Coop Door Opener in a Drill

Not much time to write at the moment, put the pictures should tell most of it...

Wifi enabled arduino clone "BlackWidow 1.0", combined with a polulu MC33887-based 2.5A speed controller. I was going to build my own, but we need to finish the project. The hens wait for no one. Well, right now, they wait for us. Well, Pam, mainly. :-)


View of speed-controller, motor, and trigger-button wiring (why not use the trigger and fwd/lock/reverse switches as inputs?):

Close-up of pull-up and pull-down resistors to drive analog inputs with three possible states, 0v, 2.5v, and 5v, giving appropriate values around 0, 512, and 1023.

I love re-using PC cables, and this one will work perfectly as a header cable for the Black Widow board. I have a Seeeduino in place to show how completely lucky I got... The board fits where the batteries were!

I'll then just use the DC charge jack as the main power input from the solar-charged gel-cell:

A close-up of the Black Widow with wifi board:

That's all for now.

What's next?

Hardware: temporary install plugging fanout wires into BlackWidow headers. Will be permanently soldered after beta code version.

Hardware: USB socket for field reprogramming. Unfortunately, I don't think the BlackWidow can program itself via wireless (yet). USB Will be it.

Coding: onboard webpage for manual controls, atomic-time retrieval, and time-based scheduling.

Coding: drill trigger/direction UI for manual operation

BTW, I came up with this idea on my own and then Pam discovered like minds. I like their design for its simplicity, but it won't have soft-start PWM speed control!

Saturday, March 6, 2010

The Loupe-Lamp

First thing, credit where credit is due: Dhananjay Gadre for the original idea.

I had to do my own - using EagleCAD of course. Here is the process - it's a pretty good rundown on the Toner-Transfer etch-resist method in my last entry.

Steps I'll insert later:

1) EagleCAD layout
2) Printing
3) Copper-clad board prep
4) Laminating the toner to the copper-clad

5) Soaking the paper off - love the way the HP Everyday Photo Paper releases when I print on the back-side of the paper:

6) Peeling the paper - it should lift right off...

After removing the paper, waiting for the etchant:

7) Etch (this picture is post-etching):

8) After removing the toner with Acetone:

Ready for population:

LED's and 56ohm resistors NOTE LED POLARITY!

10) Solder paste applied on pads and 11) components placed on paste. I could've used a wee bit more paste, but it was good enough:

After 12) Reflow:

Yay, it works!

Monday, March 1, 2010

Laserjet Toner PCB Etch Resist methods...

Ok, this is going to be a short post, only because so much is already googleable about the laser toner etch resist method... This post assumes you already know the basic procedure, ie:

* laser-print the mirror image of your circuit
* laminate or iron the toner onto the PCB
* soak the paper off the PCB, leaving the toner
* etch

Things that WORK WELL (and make this a useable process) for me:

1) Using the BACK SIDE of "HP Everyday Photo Paper" works great. The gloss of the front side is too sticky. The back side is "chalky" enough that the toner will release within minutes of soaking in water.

2) I got lucky and found a "heated roller" laminator at Goodwill of all places. It is the GBC Creative Laminator. I had to hack it a bit, adding a higher-temp fuse, and insulating the temperature-sensor a bit, so I could get a higher temperature. This is DANGEROUS. Hack at your own risk. In any case, the rollers now get up over 300 degrees F, which is perfect.

3) Having a color laser printer, I found that using full-color works much better than black-only. Also, I go into printer settings and manually crank up the density for each of the CMY and K colors all the way.

4) Lightly rough up the copper with 600 grit sandpaper before laminating. Clean with rubbing alcohol.

5) Two passes in the laminator seems to work well. Less, and it's doesn't want to fully adhere to the copper, more, and you risk smearing the toner.

At some point in time, I'll post a full procedure with pics and all. I just wanted to get some of my tips & tricks out there ASAP.

Tuesday, February 23, 2010

Bad Capacitor Replacement SUCCESS!

Reduce, Re-use, and Recycle are what we hear a lot, but more important than all of those is REPAIR. Seeing perfectly good equipment hobbled by a few bad parts has always been a sore-point with me (not to mention an affront to Nature).

It's no secret that a huge wave of bad capacitors caused millions of mainboards to suddenly start blue-screening, black-screening, or simply failing to POST.

At my workplace, 100% of our GX270's failed. Most were replaced under warranty.

Even though Dell extended their warranty by a year for affected mainboards (kudos to Dell), we still had several machines go bad after the warranty expired. Being handy with a soldering iron, I had to do something.

To date, I've repaired 12 Dell PC's with a 100% success rate. 5 Precision Pro 650's, 1 SX280, and six GX270's.

The first five boards I repaired, I scrounged up capacitors from other mainboards collected from various recycling houses, RE-PC, 3R-Technologies, etc..

After harvesting caps got old, I decided to just go with new ones, purchased from (They accidentally shorted me one set of capacitors, but immediately sent me the additional caps as soon as I mentioned it to them - great customer service)

With a dozen machines under my belt, I've learned a thing or two...

My crucial tools:

* Hakko 808 desoldering iron with .8mm tip
* Steinel digital heat-gun (set @ ~510 deg F)
* Weller precision digital soldering iron (set to ~750 deg F)
* Glove for capacitor-pulling hand
* grounding wrist-strap
* PanaVise PC board holder

My tried and true procedures:

(I'm going to focus on the actual soldering, not the crucial organizational things like taking pictures, making sure you've got the right caps, holes, polarity, etc.. By this point, the board is mounted in a vise, the anti-static wrist strap is on, irons are preheated, etc..)

1) PLAN capacitor removal path - the general idea is to heat one leg, pull it out partly, and then heat the other leg, pull it out fully, go back to heating the first leg, and pulling it out. Here, you need to make SURE that you have enough wiggle-room to lean the capacitor a little for the first leg, and then lean it all the way over for the second leg. You don't want to move the cap halfway only to have it blocked and frozen in place.

2) pre-heat work-area on board with heat-gun - this is especially important if the caps are near large ground or power planes on the board that soak up heat. I set the heat-gun at 510 degrees F and heat the area of the board until it's about 270F.

3) heat the first leg with the desoldering tool (don't suck the solder yet) and pull it out partly ~1mm, leaving a little wire nub at the top to heat during the second pass on this leg. This will leave the capacitor leaning a bit and will allow you to lean the capacitor all the way over when removing the second leg.

4) heat the second leg FULLY, and pull it OUT by leaning the capacitor over fully in ONE SMOOTH MOVE. Full heating and one smooth pull is important, because you don't want the solder freezing up half-way out. If you're using the solder sucker to heat the legs, NOW is the time to suck the solder on this pad - while the sucker nozzle is still on the fully heated pad, and the capacitor leg is out. Suck!

5) with the second leg out, go back to the first leg and heat it FULLY. Once it's heated and starts to wiggle, you'll have to wiggle it out. The leg will be bent, so it may take some finessing to remove. Once the leg is out, leave the sucker iron tip on the hole and suck the solder out.

Voila! Capacitor removed!

Important tips:

* Avoid oopsies burning/melting neighboring components with the iron.

* Usually, the positive lead (square pad) on the mainboard is attached to a big power-plane, so you'll need to heat it up a bit more to compensate for the heat-sinking effect of the mainboard. This is where the heat-gun saves the day.

* Do not leave the iron on the pad for too long - you may de-laminate the copper trace from the board, which is FATAL to the repair job.

* Use the glove on your capacitor-pulling hand so you don't burn your fingers or have to go hands-off right in the middle of a pull.

* Don't force the pull! Let the solder melt FULLY. If you don't heat fully and then force the pull, you may have melted the solder on the bottom of the board, but not the top. If you force the pull in this condition, you can pull the top trace off the board, KILLING your repair job.

* Make SURE you're grabbing the correct capacitor! Many caps are adjacent to others. It's easy to grab the wrong cap and think "why won't this wiggle?!?", while overheating the correct one.


These instructions assume you're using the Hakko 808 solder sucking iron. Other tutorials out there describe more appropriate methods if you don't have such a (handy) tool.

Tuesday, February 9, 2010

LED Longboard Status

Those of you who know me probably know I've been working on a long-board that uses an Atmel microcontroller and a hall-sensor to monitor the skateboard's speed and then convert the speed info into color changes for under-board halo lighting.

The skateboard also has headlights and tail-lights that come on when the processor detects the board is slowing down.

Most of the internals for the 1.0 version are complete, but I'm waiting on Sugru to finish scaling up production on their awesome looking hacking putty. (

If I get too impatient, I may resort to epoxy putty, but Sugru would be so much better for waterproofing the enclosure, etc..

Project Photos:

Sunday, February 7, 2010

First post...

Well, someone else claimed "slinky" back in 2001 and hasn't done anything with it...

So, slinkyX it is.

Sure would be nice if blogspot would release blog names that have minimal content and have not been accessed or used in X number of years.