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.

Tag: Improvements

Making the world a better place, one piece at a time

  • Eagle 6.4 Schematics for LinuxCNC 2.5 HAL Configuration: Device Creation Checklist

    I’m updating the Eagle-to-HAL script and library I used to get the Joggy Thing working, with the intent of getting a Nostromo N52 working on another LinuxCNC box.

    To that end, here’s a checklist for creating a new Eagle device corresponding to a HAL module.

    Remember: although this process has a tremendous number of moving parts, you do it exactly once when you need a device that doesn’t already exist. After that, you just click to add an existing device to your schematic, wire it up, then the tedious write-only HAL overhead happens automagically.

    Cross-check the documentation with the actual component code!

    The man page lists the names, pins, parameters, and suchlike, but may have typos. This isn’t a criticism, it’s a fact of life.

    Before investing a ton o’ time creating an Eagle device, load the module and find out what’s really there:

    halrun
    halcmd: loadrt conv_float_s32
    halcmd: show all
    Loaded HAL Components:
    ID      Type  Name                                      PID   State
         4  RT    conv_float_s32                                  ready
         3  User  halcmd2395                                 2395 ready
    
    Component Pins:
    Owner   Type  Dir         Value  Name
         4  float IN              0  conv-float-s32.0.in
         4  s32   OUT             0  conv-float-s32.0.out
         4  bit   OUT         FALSE  conv-float-s32.0.out-of-range
    
    ... snippage ...
    
    Parameters:
    Owner   Type  Dir         Value  Name
         4  bit   RW          FALSE  conv-float-s32.0.clamp
         4  s32   RO              0  conv-float-s32.0.time
         4  s32   RW              0  conv-float-s32.0.tmax
    
    ... snippage ...
    
    Exported Functions:
    Owner   CodeAddr  Arg       FP   Users  Name
     00004  fc0a9000  fc0630b8  YES      0   conv-float-s32.0
    ... snippage ...
    

    Achtung!

    • The module name uses underscores as separators: loadrt conv_float_s32
    • The function name uses h-y-p-h-e-n-s as separators: conv-float-s32.0
    • Unlike in the Linux kernel, the two characters are not equivalent

    Add the HAL Module to the Conversion Script

    The hal-write.ulp script contains a table of all the module names, so you must update the script in parallel with the hal-config.lbr Eagle library.

    However, you can create an Eagle device that is not a HAL module by omitting it from the script. In that case, the Eagle device name will become part of the net names that define and interconnect the pins, but the script will not create a statement to load a module. For example, the hal_input userspace program creates a set of pins for each input device that start with input.n, but there’s no corresponding HAL module. I’ll put up an example of all this in a bit.

    Create a Schematic Symbol

    • The name of the symbol is not critical: CONVERT.sym
      • use either dashes or hyphens as you prefer
    • The >NAME string must be on layer 95-Names
    • No need for a >VALUE string, but put it on layer 96-Values if present
    • HAL pins become symbol pins
      • Use the HAL pin name, with hyphens
      • Set Visibility to Pin
      • Set Direction to in / out / io to match the HAL description
      • Set Function to None to indicate an ordinary net connection
    • Verify the pins against the HAL device!

    Create a HAL Schematic Device

    • The new device name must match the HAL module name, with underscores, as entered in the conversion script table
      • CONV_FLOAT_S32.dev
    • Set the Prefix to the HAL function name, plus a trailing period, with hyphens
      • CONV-FLOAT-S32.
    • Create the Description using copy-and-paste from the HTML source: use the man page in the LinuxCNC doc
      • Ctrl-U in Firefox reveals the HTML source, Ctrl-A and Ctrl-C, flip windows, then Ctrl-V
      • Delete all the boilerplate at the top, leave the centered Title, ditch the reference links
    • Add the symbol you created earlier or reuse an existing symbol
      • Set the symbol NAME to a single underscore: _
      • Change the Add level to must
    • Add a PIN_FUNCTION symbol to the device
      • Change the symbol name from G$1 (or whatever) to a single period: .
      • Change the Add Level to must
    • Add PIN_PARAMETER symbols as needed
      • Change the symbol name from G$1 (or whatever) to the parameter name preceded by a single period: .CLAMP
      • Change the Add Level to request
      • Change the Direction as needed
    • Add the DUMMY physical package, then connect all the pins to pads

    Create a non-HAL Schematic Device

    • The new device name may be anything that’s not in the conversion script table
    • The Prefix must match the desired pin names, plus a trailing period. For hal_input pins:
      • INPUT.
    • Create the Description as above
    • Add the symbol you created earlier
      • Set the symbol NAME to a single underscore: _
      • Change the Add level to must
    • Do not add a PIN_FUNCTION symbol, because it has no corresponding module
    • Add PIN_PARAMETER symbols as needed
      • Change the symbol name from G$1 (or whatever) to the parameter name preceded by a single period: .CLAMP
      • Change the Add Level to request
      • Change the Direction as needed
    • Add the DUMMY physical package, then connect all the pins to pads

    Devices may have multiple Symbols, with different Add Level options; can seems appropriate. As nearly as I can tell, you must name each Symbol as a suffix to the full name to differentiate them within the Device; I use a hyphen before the suffix, so that -KEYS generates INPUT.0-KEYS. Those suffixes don’t appear elsewhere in the generated HAL configuration file.

    Save the library, update it in the schematic editor (Library → Update ...), and you’re set.

    Although it’s tempting, do not include a version number in the library file name, because Eagle stores the file name inside the schematic file along with the devices from that file. As a result, when you bump the library version number and use devices from the new library file, the schematic depends on both library files and there’s no way within Eagle to migrate devices from one library to the other; you must delete the existing devices from the schematic and re-place them from the new library. Or you can do like I did: hand-edit the XML fields inside the library file.

    Eagle HAL Device
    Eagle HAL Device

    You’ll almost certainly drive this procedure off the rails, so let me know what I’ve screwed up. It does, in fact, work wonderfully well and, as far as I’m concerned, makes HAL usable, if only because HAL is a write-only language to start with and now you need not read it to modify it.

  • Epson R380 Printer: Cutting In a Continuous Ink Supply System

    The continuous ink supply system on the Epson R380 printer developed a slow air leak in one cartridge, which may have contributed to the nozzle problems, so I just installed another system from the usual eBay supplier: prefilled with ink and $30 delivered.

    As nearly as I can tell, Epson designed a number of features into the R380 specifically to thwart CISS installation, including the awkward bridge across the middle of the printer that interferes with the flat tube feeding ink to the flying cartridges. I managed to route the previous CISS tubing around the bridge, but this time I figured enough was enough.

    So I tucked a shop rag inside the printer, put a vacuum cleaner nozzle near the operation, and applied a fine-tooth pull saw to the bridge:

    Epson R380 - bridge removed
    Epson R380 – bridge removed

    That certainly simplified the rest of the installation…

  • Kill A Watt: IEC Adapters

    I should have done this a long time ago:

    Kill-A-Watt - IEC plug and socket
    Kill-A-Watt – IEC plug and socket

    It makes measuring PC power consumption much easier!

    I picked up some cheap AC plugs and sockets, cut a short IEC extender cable in half, and wired ’em up. If the IEC extender link breaks again, search amazon.com for something like “computer power cord extension” and rummage around.

    IEC color code hint: brown = hot, blue = neutral (unless they cheat).

    US NEMA 5 plug / socket hint: the blade marked W is neutral. More expensive hardware will have dark brass = hot, light brass = neutral, but don’t bet your life on it.

  • Force-fitting a PCI-E Video Card in an Optiplex 780 SFF

    I bought an off-lease Optiplex 780 in the Small Form Factor (SFF) version to replace my ancient Pentium D; it’s also available in Small Desktop Tower (SDT) and Ultra-SFF variations. The SFF box has two PCI slots and one PCI-E slot, which let me install a half-height dual-output video card, with results described yesterday. I innocently believed the PCI-E slot would have enough clearance for the video card, what with these things being standardized and all.

    Turns out that the heatsink collided with a flange on the hard drive carrier, with about 5 mm of overlap. Fortunately, the bracket is plastic and I have no qualms about chopping up the hardware. A few minutes of Quality Shop Time removed a section of the offending flange and gave the video card just enough clearance:

    Optiplex 780 SFF drive bracket
    Optiplex 780 SFF drive bracket

    The heatsink reflects in the shiny surface of the carrier, with the scar from the missing flange just above that. The small dark-gray disk on the far left is a grommet holding a pin that supports the drive; it installs through the larger circular opening and snaps leftward.

    You must install the video card and then snap the drive carrier into place. The heatsink protrudes above the flange, with the left side just barely clearing that grommet.

  • LAW Lifetime Member Plaque: Rejuvenation Thereof

    The brass plate from this plaque rattled down the basement stairs(*) a while ago:

    League of American Wheelmen plaque
    League of American Wheelmen plaque

    As you might expect, the adhesive failed and has been replaced at least once. This time, I drilled a pair of 2-56 clearance holes in the plate, match-marked the wood with a punch, drilled a pair of tapping holes, and put it all back together.

    There’s not much to see, but I’m pretty sure that plate won’t fall off ever again:

    League of American Wheelmen plaque - detail
    League of American Wheelmen plaque – detail

    The lacquer finish has begun disintegrating, but I wasn’t in the mood to strip-and-restore that. The tile remains firmly affixed; when that falls out, it won’t be pretty.

    The LAW long ago morphed into the League of American Bicyclists, after deeming Wheelmen as too gender-specific for the modern era.

    (*) We hang plaques, certificates, diplomas, and suchlike on the walls beside the basement stairs. Every time we pass by, it’s an Ego Trip…

  • Driveway Drain Pipe Grate vs. Chipmunks

    Known to be true: chipmunks love drain pipes!

    Chipmunk peering from drainpipe
    Chipmunk peering from drainpipe

    Obviously, an open pipe attracts rodents.

    That didn’t matter with a three-foot pipe attached directly to the downspouts, but, as part of the driveway project, I routed the house storm drains and wall footing drain pipes about 20 feet down from the new retaining wall, with the two joining into a single outlet. There’s a cleanout plug on the storm drain line, but the footing drain consists of about 50 feet of corrugated and perforated tubing that would be just about the finest possible chipmunk habitat.

    In principle, one would simply glue a grate into the final fitting and be done with it, but leaves from the gutter will pack behind the grate, so it must be removable. Leaving the grate loose means it’ll pop out at the slightest provocation and, most likely, roll another hundred feet down the driveway into the street.

    Rather than coping with that, I drilled a clearance hole in the elbow and tapped a matching hole in the grate:

    Drain pipe grate - hole tapping
    Drain pipe grate – hole tapping

    I have a few white nylon 1/4-20 cutoffs from the bike fairing clamps, so I wrecked the threads on one and jammed it into a black nylon thumbscrew:

    Drain pipe grate - thumbscrew
    Drain pipe grate – thumbscrew

    Now, of course, the critters can still climb down the drainpipes from the gutters and set up housekeeping in the plumbing, but I’m not putting grates where I must climb onto the roof to clear them. A chipmunk dropped from two stories will scamper away; I’d never walk again.

    We shall see how this works out…

  • Windows 7 Home Premium Remote Desktop: The Missing Link

    The tiny Lenovo Q150 has become the dedicated Windows box for running TurboTax this season. In earlier years, I used the Token Windows Laptop through a remote desktop session that appears on a Xubuntu desktop, but the Q150 runs rings around the old laptop.

    This time, no matter what I tried, I couldn’t connect to the Windows 7 desktop on the Q150 from my Xubuntu desktop. The usual search results suggested Windows configuration settings that didn’t quite match what the Q150 provided; a bit more searching revealed that Windows 7 Home flavors of the OS (this one is Home Premium) lack the Remote Desktop Protocol server required to export the desktop. The Q150 could act as a client that controlled another machine’s desktop server, but not the other way around.

    The suggested solutions required applying patches, in the form of EXE files downloaded from sketchy websites, or dropping in replacement DLLs obtained from similar sites. All that seems like Bad Practice, particularly for a Windows box used to prepare our taxes, and I was unwilling to proceed along those lines.

    Instead, I fetched UltraVNC, installed it on the Q150, and it works perfectly. Remmina occasionally requires a resize-window-to-match-server at startup and then it’s all good.

    From what I hear, Windows 7 doesn’t display the classic Blue Screen of Death nearly so often as before, although I did manage to lock it up during the course of this adventure. That’s OK, I can still use my favorite Windows wallpaper image:

    Windows 7 Home - UltraVNC via Remmina
    Windows 7 Home – UltraVNC via Remmina