The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Category: Electronics Workbench

Electrical & Electronic gadgets

  • Cutting Pin Header Strips

    Slitting dual-row connector
    Slitting dual-row connector

    I needed a few strips of single-row pin headers, but the parts bin was empty.

    I hate it when that happens.

    The heap disgorged a handful of double-row strips and, of course, I Have A Machine Shop.

    So: no problem.

    This is, I admit, not cost-effective, but it took about 15 minutes to slit the aforementioned handful of strips right down the middle and get back to soldering.

    The trick is to use an ultra-thin slitting saw, rather than a regular saw. The one here is 4 mils thick and the better part of 7/8″ in diameter; call it 0.1 mm x 22 mm. I think it came with one of the Dremel tool kits a long while ago.

    Cut about 1 mm deep on the first pass, then cut through on the return to avoid having the saw deflect too much. Run about 100 mm/min, 1000 rpm, and no coolant. Line it up by eye, type manual CNC commands into EMC2, and it’s all good.

    The trick is finding a mandrel that doesn’t collide with the vise; my larger saws have a rather thick screw-and-washer arrangement that doesn’t fit. I think some padding (chopped-up credit cards?) between the longer pins, mounting the vise vertically, and grabbing the longer pins would fix that. The catch might be clearance between the top of the vise and the bottom of the spindle motor.

    Better to just buy some single-row strips. Sheesh… but if all you have is a CNC mill, you have plenty of solutions.

    Another slitting saw repair is there

  • Digikey Full-Line Catalog

    For the first time ever, Digikey sent me a full-line catalog.

    Digikey catalog
    Digikey catalog

    It’s 2778 pages long, three inches thick, and weight 2 kg.

    Some time ago I made the mistake of replacing our large rusted-out mailbox with a much smaller one: the catalog presented a solid wall of paper when I opened the door.

    Here’s a closeup…

    Digikey catalog vs Arduino Duemilanovae
    Digikey catalog vs Arduino Duemilanovae

    Now, I’d love to have you believe I’m such a high-rollin’ kind of engineer that Digikey spares no expense on my behalf, but the only explanation for this embarassing situation I can come up with is that their customer service system blew a gasket in my general direction…

    What makes it even more ironic is that they’d recently sent me a survey asking how I’d like to get their catalog. I’d emphatically replied that I did not need a paper catalog or a USB stick with the PDFs. Just let me do the on-line searching and occasionally refer to the appropriate PDF pages and I’ll be fine.

    The damned thing is basically useless; I hate to just toss it in the recycling, but I can’t think of any reason to keep it around.

    I just removed my mailing address from their list, presumably leaving my account info intact; we’ll see if that sticks.

  • TLC5916 Minimum LED Current

    The TLC5916 datasheet seems to say that the minimum regulated LED current is 5 mA, but that’s painfully bright at, say, 12:08 in the early morning. Indeed, those 3-inch blue LED digits lit up the entire house from the living room… sometimes, a high-efficiency LED isn’t what you need.

    This graph from the datasheet suggests that the current can be somewhat lower:

    TLC5916 Current vs Rext
    TLC5916 Current vs Rext

    With that in mind, I replaced the 1 KΩ resistors with 3.9 KΩ parts.

    The graph says the maximum current should be around 5 mA and, indeed, the formulas indicate 4.7 mA. The minimum current is a paltry 0.4 mA: lo and behold, the early morning illumination became bearable. After I put the LEDs behind some dark-gray polycarbonate, it’ll be just about perfect.

    If it’s too dark, I can always solder another SMD resistor atop the 3.9 KΩ chips.

    I figured out how to compute Rext somewhat more easily than the datasheet would have you believe and documented the process there.

  • Tour Easy Recumbent: Amateur Radio HT Mount

    Mary sewed up a new seat cover for her Tour Easy, so I dismantled the seat and cleaned things up. This is a good opportunity to show how I mounted an amateur radio HT on the bike…

    Bottle holder on seat frame
    Bottle holder on seat frame
    Clamp mount detail
    Clamp mount detail

    The general idea is simple: a water bottle holder attached to the lower seat rail with a circumferential clamp made from a chunk of half-inch aluminum plate. An aluminum spreader adapts the wider hole spacing on the bottle holder to the teeny little clamp.

    With the bottle holder in place, I put the radio in a wedge seat pack, atop a block of closed-cell foam to more-or-less cushion some of the bumps. The wedge pack seatpost strap secures it to the bottom of the holder and the rail straps wind their way through the holder and lash around the aluminum spreader plate. It doesn’t move very much at all.

    The radio is a long-obsolete ICOM IC-Z1A, bought specifically for this purpose: it has a remote head on the end of a coily cord. That puts the power, volume, and channel buttons out where you can actually use them.

    Radio in seat wedge pack in bottle holder
    Radio in seat wedge pack in bottle holder

    The lump behind the seat looks moderately suspicious in this day & age: a black package with wires! The grossly oversized red-and-black pair in the foreground is the power coming from a 6-AA pack attached to the rack with a Velcro strap; it’s a jumper with Anderson PowerPoles on both ends. Coily cord to the HT head, BNC-to-UHF adapter to the mobile antenna mount, one skinny cord to the headset and the other to the PTT button on the handlear.

    Other pieces of the puzzle:

  • WWVB Synch Reliability

    I have the WWVB clock set to synch after receiving four consecutive valid time frames, which is pretty restrictive. The question is: can it still synch every night?

    Here’s six days with the antenna sitting 3 cm above the receiver board, in front of our living room window, aimed more-or-less broadside to Colorado. We’re in the Eastern Time Zone, which is currently UTC-5, so our midnight corresponds to UTC 0500.

    Set: 10 015 05:14:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 015 05:25:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 015 05:28:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 015 06:15:59.9 Loc= 1 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 015 07:05:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 015 11:30:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 015 13:41:59.9 Loc= 8 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 015 13:44:59.9 Loc= 8 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 015 15:22:59.9 Loc=10 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 015 15:29:59.9 Loc=10 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=15
    Set: 10 016 07:49:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=16
    Set: 10 016 09:46:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=16
    Set: 10 016 14:06:59.9 Loc= 9 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=16
    Set: 10 017 04:54:59.9 Loc=11 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 05:15:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 05:20:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 09:42:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 10:04:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 10:37:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 10:42:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 10:45:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 11:38:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 11:56:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 017 20:44:59.9 Loc= 3 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=17
    Set: 10 018 01:26:59.9 Loc= 8 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
    Set: 10 018 03:49:59.9 Loc=10 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
    Set: 10 018 08:30:59.9 Loc= 3 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
    Set: 10 018 09:47:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
    Set: 10 018 11:11:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
    Set: 10 018 11:34:59.9 Loc= 6 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
    Set: 10 018 12:10:59.9 Loc= 7 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
    Set: 10 018 12:13:59.9 Loc= 7 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
    Set: 10 018 16:10:59.9 Loc=11 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=18
    Set: 10 019 05:52:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 05:55:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 06:59:59.9 Loc= 1 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 07:48:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 08:06:59.9 Loc= 3 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 08:12:59.9 Loc= 3 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 09:08:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 09:33:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 10:08:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 10:32:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 12:34:59.9 Loc= 7 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 019 13:49:59.9 Loc= 8 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=19
    Set: 10 020 05:22:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
    Set: 10 020 05:37:59.9 Loc=12 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
    Set: 10 020 07:41:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
    Set: 10 020 09:47:59.9 Loc= 4 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
    Set: 10 020 10:15:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
    Set: 10 020 10:26:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
    Set: 10 020 10:46:59.9 Loc= 5 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=20
    Set: 10 021 07:44:59.9 Loc= 2 Age=0     LY=0 LS=0 DST=0 Chg=0 UT1=1 Mon=1 DOM=21
    

    As you’d expect, WWVB synch is an overnight thing, with occasional synchs during the morning hours.

    Winter has the absolute best RF propagation, so demanding four good frames probably isn’t going to work during the summer…

  • Ceramic Resonator Frequency Compensation

    Although this isn’t a real long-term experiment, here’s a week of continuous WWVB clock operation, sitting by the window in our living room, with the circuit board open to ambient conditions.

    The firmware checks the local oscillator drift against the WWVB time signal if more than 3 hours (10800 seconds) has elapsed since the last synch, so you’re not seeing every WWVB synch event.

    Drift: TS   5281890 UTC 10015.113059 Elapsed 15900 Offset 0 Corr +0 ICR1 39841
    Drift: TS   5283109 UTC 10016.074959 Elapsed 55680 Offset 2 Corr +1 ICR1 39842
    Drift: TS   5283486 UTC 10016.140659 Elapsed 15600 Offset -1 Corr -2 ICR1 39840
    Drift: TS   5284662 UTC 10017.094259 Elapsed 15720 Offset 0 Corr +0 ICR1 39841
    Drift: TS   5285324 UTC 10017.204459 Elapsed 31680 Offset 1 Corr +1 ICR1 39842
    Drift: TS   5285606 UTC 10018.012659 Elapsed 16920 Offset 0 Corr +0 ICR1 39842
    Drift: TS   5286030 UTC 10018.083059 Elapsed 16860 Offset 0 Corr +0 ICR1 39842
    Drift: TS   5286490 UTC 10018.161059 Elapsed 14220 Offset 0 Corr +0 ICR1 39842
    Drift: TS   5287312 UTC 10019.055259 Elapsed 49320 Offset 0 Corr +0 ICR1 39842
    Drift: TS   5288722 UTC 10020.052259 Elapsed 55980 Offset 0 Corr +0 ICR1 39842
    Drift: TS   5290304 UTC 10021.074459 Elapsed 75480 Offset 0 Corr +0 ICR1 39842
    Drift: TS   5291588 UTC 10022.050859 Elapsed 77040 Offset 1 Corr +0 ICR1 39842
    

    The frequency offset is on the order of 1 in 75000 seconds: 13 parts per million or about 0.0013%.

    The last line shows that the clock went 21.4 hours between synchs while drifting less than two seconds. If the clock didn’t synch for an entire week, it’d be within 15 seconds of the correct time. That’s not wonderful for a clock, but it’s good enough for this application: the display shows just hours and minutes.

    Not bad for a cheap ceramic resonator on an Arduino Pro…

  • WWVB: 7 dB More Modulation!

    I read a whole stack of NIST doc on the WWVB transmitter & time code format last year, figuring out how to build a WWVB simulator and then the Totally Featureless Clock. The Circuit Cellar article on the simulator just appeared in print and a reader gave me a heads-up: the transmitter power now drops 17 dB during the low-power part of the PWM pulse.

    The relevant doc is there.

    How could I miss it? Well, all the doc is quite old and the change happened in 2006…

    Fairly obviously, the C-Max WWVB receiver I’m using doesn’t have the mojo to track the signal during the day, no matter how fancy the modulation. Those pulses, the low-power part of the signal, just aren’t present amid all the other noise!

    Also of interest: the WWVB transmitter has been running at half-power during the daylight hours since September 2009 while they do antenna maintenance. That’s supposed to be finished right about now, so the signal should be 3 dB better. I’ve got a nearly continuous record of the last month or so, which means a comparison will be in order after a few weeks.

    Search for WWVB to find the other posts I’ve done on this topic…