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.

Author: Ed

  • Photography: Timing is Everything

    Over the Top
    Over the Top

    So we did the HersheyPark thing on the way back from our bicycling vacation and our young lady rode seven of their eleven roller coasters. Not being all that strong of stomach, I wimped out after two and contented myself with taking pictures.

    I had decided to not lug a Big Camera and the tele-adapter along, seeing as how we’d be camping for four nights. That turned out to be a wise decision: it rained every night and everything we carried was damp. So I took pix with my Casio Z-850 pocket camera, which had been sealed in a ziplock bag most of the time, and that had to be good enough.

    The Fahrenheit coaster is, they tell me, 121 feet tall and I was standing outside the fence about 100 feet from the base of the drop; the slant range was maybe 150 feet. I had plenty of time to set up and practice the shot, as the line was half an hour long. I filled the equivalent of two rolls of film with pix of people I don’t know while exploring a nine-dimensional parameter space & scrutinizing the results; pixels are cheap.

    Most digital cameras, this one included, have a long delay between pushing the button and getting results. However, it has several “continuous shutter” modes and I picked the “high-speed” version that records three images in quick succession. There’s no indication of how much time passes between exposures, which probably depends more on the SD Card’s speed than anything else. The timestamp resolution is 1 second, which isn’t much help.

    Anyhow, poking the shutter button when the train came over the top consistently produced one good picture as it descended.

    Continuous Shutter Images
    Continuous Shutter Images

    I fought all the other automation to a standstill:

    • Infinity focus
    • Shutter speed 1/1000 sec
    • Aperture f/5.1

    The camera picked ISO 200, probably as a result of the “high speed” continuous shutter setting, and warned me that it wasn’t happy about doing that. This being a bright, sunlit day, the nominal exposure for that ISO speed would be 1/200 @ f/16. Two stops faster shutter and three stops bigger aperture should work out OK, as the subjects were on the down-sun side of the coaster. The camera has just two apertures (big and little) that, of course, vary with the zoom setting, so I didn’t have much leeway. I figured I could fix any minor exposure issues in the cough darkroom.

    The tele end of the zoom range is equivalent to a 114 mm lens with 35 mm film, which is better than the beer-can-sized zoom on the SLR I used to lug around back in the day.

    In round numbers:

    • the car is 30 feet long and the original image is two cars tall, call it 60 feet
    • the image is 2816 pixels tall
    • (60 * 12) / 2800 = maybe 1/4″ per pixel

    Cropping the interesting part from the frame, goosing the gamma a smidge, and applying a touch of Unsharp Mask says that’s about right: you can see the expressions on their grainy little faces. National Geographic quality, it ain’t, but it’s OK for a pocket camera and pix of relatives.

    Memo to Self: Would forcing the ISO down to 100 reduce the graininess a bit?

  • Kensington Expert Mouse Trackball: Scroll Ring Troubles

    Trackball Scroll Ring
    Trackball Scroll Ring

    The oddly named Kensington “Expert Mouse” (it’s a trackball) sits to the left of my keyboard, where it serves as my main pointer controller; I’m right-handed, but have used a left-hand mouse / trackball for years.

    [Edit: a comment from the future compares it with a different trackball that may work on the right.

    Also, search for Kensington scroll to find other posts. There may be no good fix for scroll ring problems.]

    Recently the scroll ring has become balky, stuttering upward & downward rather than actually scrolling. It’s an optical device, so I suspected it had ingested a wad of fuzz that blocked the beam path.

    The top photo shows the infra-red emitter adjacent to the scroll ring’s slotted rim. The silver bar to the right of the emitter is the magnet that provides those soft detents. There’s no obvious fuzz.

    Disassembly is straightforward.

    • Tip the ball out into your hand and put it where it can’t possibly roll off the desk.
    • Peel the four rubber feet off the bottom, remove four screws, and the top half of the body pops off.
    • Remove three screws from each of the two button cap assemblies and pry the button caps off the case bottom.
    • Remove two screws from the ball socket, pull it off, and clean any fuzz from the openings.

    Surprisingly, I didn’t find much crud at all.

    Scroll Ring Emitter and Detector
    Scroll Ring Emitter and Detector

    This photo shows the IR emitter and detector, peering at each other across the electrical isolation gap in the circuit board. Nothing obviously wrong here, either…

    They both seem to be dual elements, which makes sense for a quadrature position encoder. Unfortunately, replacing them seems to be really difficult; they don’t look like stock items.

    So I put it back together, plugged the USB cable in, restarted the X server (this being Xubuntu 8.10), and it pretty much works again.

    Kensington replaced a previous Expert Mouse under warranty when one of the three minuscule red bearing balls that support the trackball went walkaround, but that gadget had been getting erratic, too.

    I’m not sure what’s going on, but I have a bad feeling about this.

    [Update: More troubles lead to some interesting pix and an insight. Maybe even a fix!]

    Further Update: Ten years in the future, a real fix appears!

  • Hobo Data Logger: AA Battery Pack Hack

    Hobo Battery Mod - Outside View
    Hobo Battery Mod – Outside View

    We have a bunch of Hobo Data Loggers recording various & sundry temperatures, humidities, and light levels around the house; as the saying goes, “If you observe something long enough, it turns into science.”

    Normally the things run on single CR2032 lithium cells, which last for a good long time. However, Something Happened to the one that’s collecting groundwater temperatures at the water inlet pipe from the town supply: it started eating lithium cells like potato chips.

    Hobo Battery Mod - Inside View
    Hobo Battery Mod – Inside View

    It was still producing good data, so I was loathe to toss it out. Instead, I figured all it needed was more battery, as a high current for a lithium cell doesn’t amount to much for an AA cell. A pair of alkaline AA cells produces just about exactly 3 V and the data logger can’t tell the difference.

    So I opened the logger one last time, soldered the wires from a dual AA cell holder to the appropriate points on the circuit board, affixed the holder to the back with one of the case screws, and it’s been working fine ever since.

    However, this seems like one more application where whatever plastic they thought would last doesn’t: the AA holders routinely split at the ends. Maybe the joint should be thicker, maybe it’s the wrong plastic for the job, but without the cable tie acting as a belly band one end of the holder splits off in a year or so. Bah!

    Update: Maybe I got a batch of bad CR2032 cells, as the logger’s current seems to be just about right. Read the comments and then check the followup there.

  • Tour Easy Zzipper Fairing Wrappers: “Bubble Wrap”

    Tour Easy Zzipper Fairing Wrappers
    Tour Easy Zzipper Fairing Wrappers

    We spent four days biking along the Pine Creek Valley rail trail with a Rails-to-Trails Conservancy group ride on our Tour Easy recumbent bikes. Because a crushed-stone path creates a lot of noise that the fairings direct right into our ears and because we weren’t going very fast, we left the fairings at home. As a result, the bikes were wonderfully quiet.

    Some years ago, Mary sewed up “bubble wraps” to store our fairings on those rare occasions when they’re not on the bikes. She had some red flannel left over from another project and a hank of cheery Christmas-themed edging, so they turned out to be rather conspicuous.

    The trick is to get the size right when the fairing is rolled up. With the fairing in its natural bubble shape, the wrap is rather limp, so you need pockets on both ends to hold the wrap in place. The toes are, she admits, an affectation, but didn’t take much figuring to get right. The width is just slightly more than the fairing’s flat width; you find that by rolling it up and measuring the roll.

    She actually made a paper template first to sort out all the curves, then transferred that to the flannel for final cutting.

    Tuck in the fairing’s head & toes, roll it up toes first, tie the (attached) strap in a neat bow, and it’s done!

    We have three fairings and they roll up together, each in its own wrap, into one tidy, albeit rather heavy, package.

  • Turkey Hen and Chicks

    Turkey hen with chicks
    Turkey hen with chicks

    It’s that time of the year again: a pair of hens and about a dozen chicks have been cruising through the yard. The chicks vary from softball- to football-sized, so we think the hens are tending a creche.

    The chicks are, of course, insufferably cute…

    We haven’t seen a hen with chicks roosting in the trees this year, but that just means they’re using trees near the creek rather than ones we can see from the house.

    Tom Turkey Closeup
    Tom Turkey Closeup

    That cute thing the chicks have going for them tapers off pretty quickly as they grow up.

    Wow, are those big toms ugly!

    But it works well enough for turkeys, so who are we to complain?

  • Arduino: Using Ancient Litronix DL-1414 LED Displays

    Tek 492 Memory Board Reader
    Tek 492 Memory Board Reader

    While I was putting together the Tek 492 memory board reader, I though it’d be a nice idea to add a small display. While the Arduino has USB serial I/O, the update rate is fairly pokey and an on-board display can provide more-or-less real time status.

    Given that the reader was built for an early-80s memory board, I just had to use a pair of Litronix DL-1414 4-character LED displays from my parts heap. The DL-1414 datasheet [Update: link rot? try that] proudly proclaims:

    The 0.112″ high characters of the DL1414T gives readability up to eight feet. The user can build a display that enhances readability over this distance by proper filter selection.

    I think that distance is exceedingly optimistic.

    DL-1414 LED display schematic
    DL-1414 LED display schematic

    However, I needed to see only a few feet to the benchtop. Even better, adding the displays required no additional hardware: the SPI-driven shift registers on the board already had address and data lines, plus a pair of unused bits for the write strobes. What’s not to like?

    This schematic connects to the one you just clicked on; the two big blue bus lines are the same bus as in that schematic.

    If you don’t have anything else riding the data bus, adding a pullup on the D7 bit that isn’t used by these displays will make all the bits float high; the DL-1414s seem to pull their inputs upward. That came in handy when I was debugging the EPROM-burning code, because reading data without an EPROM in the socket produced 0xff, just like an erased EPROM byte.

    The two displays are the dark-red rectangle in the lower-right of the first picture, covered with a snippet of the Primary Red filter described there.

    These closeups, without and with the filter, demonstrate why you really, really need a filter of some sort.

    DL1414 Unfiltered
    DL1414 Unfiltered

    DL1414 Filtered
    DL1414 Filtered

    Using the displays is straightforward, given the hardware-assisted SPI code from there. You could actually do it with just the I/O pins on an Arduino board, but you wouldn’t be able to do anything else. If you don’t have any other SPI registers, you could get away with a pair of HC595 outputs:  7 data + 2 address + 2 strobes + 5 outputs left over for something else.

    A few constants set the display size and a global buffer holds the characters:

    #define LED_SIZE            4            // chars per LED
    #define LED_DISPLAYS        2            // number of displays
    #define LED_CHARS           (LED_DISPLAYS * LED_SIZE)
    
    char LEDCharBuffer[LED_CHARS + 1];       // raw char buffer, can be used as a string
    

    A routine to exercise the LEDs by scrolling all 64 characters they can display goes a little something like this:

    Serial.println("Exercising LED display ...");
    
     Outbound.Controls |= CB_N_WRLED1_MASK | CB_N_WRLED0_MASK;        // set write strobes high
     digitalWrite(PIN_DISABLE_DO,LOW);                                // enable data outputs
    
     while (digitalRead(PIN_PB)) {
    
      digitalWrite(PIN_HEARTBEAT,HIGH);
    
      byte Character, Index;
    
      for (Character = 0x20; Character < 0x60; ++Character) {
       for (Index = 0; Index < LED_CHARS; ++Index) {
        LEDCharBuffer[Index] = Character + Index;
       }
       UpdateLEDs(LEDCharBuffer);
       delay(500);
    
       if (!digitalRead(PIN_PB)) {
        break;
       }
      }
    
      digitalWrite(PIN_HEARTBEAT,LOW);
     }
    
     WaitButtonUp();
    

    A routine to plop a string (up to 8 characters!) on the LEDs looks like this:

    void UpdateLEDs(char *pString) {
    byte Index = 0;
    
     while (*pString && (Index < LED_CHARS)) {
    
      Outbound.DataOut = *pString;           // low 6 bits used by displays
      Outbound.Address = ~Index;             // low 2 bits used by displays, invert direction
      Outbound.Controls &= ~(Index < LED_SIZE ? CB_N_WRLED1_MASK : CB_N_WRLED0_MASK);
    
      RunShiftRegister();
    
      digitalWrite(PIN_DISABLE_DO,LOW);      // show the data!
    
      Outbound.Controls |= CB_N_WRLED1_MASK | CB_N_WRLED0_MASK;
      RunShiftRegister();
    
      digitalWrite(PIN_DISABLE_DO,HIGH);     // release the buffers
    
      ++pString;
      ++Index;
     }
    
    

    You can use sprintf() to put whatever you like in that string:

    void ShowStatus(word Address,byte Data) {
    
     sprintf(LEDCharBuffer,"%04X  %02X",Address,Data);
     UpdateLEDs(LEDCharBuffer);
    
    }
    

    Not, of course, that anybody would actually use DL-1414 displays in this day & age, but the general idea might come in handy for something more, mmmm, elegant…

  • Tektronix 492 Spectrum Analyzer ROM and EPROM HEX Files

    Tek 492 Memory Board
    Tek 492 Memory Board

    Having gotten my buddy Eks back on the air with new EPROMs for his Tek 492 spectrum analyzer, here are the Tek 492 ROM Images (← that’s the link to the file!) you’ll need to fix yours.

    [Update: the comments for that post have pointers to other images and a clever hack to use a standard EPROM. If you’re not a stickler for perfection, that’s the way to go.]

    They’re taken from a “known good” Tek 492, so they should work fine: the firmware verifies the checksum in each chip as part of the startup tests; if it’s happy, we’re happy.

    Because WordPress doesn’t allow ZIP files, I tucked the HEX files into an OpenDocument file that also contains the pinouts and some interposer wiring hints & tips.

    If you’re using the OpenOffice.org word processor, you’re good to go. Open the document and get all the instructions you need to extract the files and put them to good use.

    If you’re not using OOo, then choose one of:

    • Install OpenOffice.org (it’s free software, so kwitcher bitchin’)
    • Futz with whatever Microsoft claims will import ODT files (if it doesn’t work, don’t blame me)
    • Just extract the HEX files and do whatever you want (if you know what you want)

    The trick, explained in the document itself, is that ODT files are just ZIP files with a different file extension, so any unzip program will unpack them. You won’t see the HEX files in the document, you must apply unzip to the ODT file itself.

    After unzipping, you’ll find three HEX files in the directory that originally held the ODT file, along with the collection of files that make up the OpenDocument document.

    The only files you care about:

    U1012 – 160-0886-04.hex
    U2023 – 160-0838-00.hex
    U2028 – 160-0839-00.hex

    Use ’em in good health…

    Oh, if you haven’t already figured it out, the DIP switch on your board is also bad. Saw the damn thing apart with a Dremel tool, pry off the debris, unsolder the pins, and install a new one. Just Do It.