Archive for the ‘Equipment’ Category

Wanted: An EPROM Programmer that Works on a Mac

Friday, December 28th, 2012

And Linux. And old, high-programming-voltage EPROMs. And USB, naturally. If you know of such a thing, give me a shout in the comments — I can’t find any on Google, and I find plenty of links to other people who also couldn’t find them.

6502 Microprocessor, Apple ][, and Asteroids

A couple of weeks ago, I went to an annual holiday lunch with former coworkers and got to visit with an old friend. He was reminiscing about 6502 assembly programming on the Apple ][ and wondered whether I'd know where he could get one. I told him that I could probably loan him one or two; but (with a mischievous glint in my eye) that I have a couple of upright Asteroids arcade games and they run on 6502s and I’ve always wanted to reprogram one and write my own game.

Bump, set, spike. Yeah, he’s interested.

It’s not a completely impractical idea. I have a large schematic set that includes the addressing of the memory-mapped I/O and some rudimentary information on the operation of the vector generator board. There’s even a project to comment the disassembled ROM, which would give further hints about how to interface to the hardware.

If one were to undertake such a project, one would really like to use a USB-attached EPROM emulator so one could dump new code into the machine frequently and rapidly for testing and development. But at a bare minimum, one would need a stack of EPROMs and a programmer and ideally a ZIF-socket daughterboard to fit into the original EPROM socket and make it easy to swap EPROMs. As I have no Windows machines and do my electronics development on a synchronized fleet of Mac and Linux machines, a commercial EPROM programmer that I can use is going to be a little bit hard to come by.

Yes, I could run Windows under virtualization on my Mac; I think I may even be able to get a legal copy through my campus’s license agreement. But I’m not interested in going that direction unless I have to.

Isn’t it about time the world had a cross-platform EPROM programmer?

If All You Have Is a Logic Analyzer, Everything Looks Like a Timing Problem

Wednesday, June 27th, 2012

I just rewrote the Arduino Playground Nokia LCD screen code to use hardware SPI instead of ShiftOut(). (More work to do before releasing the code back to the community. And I know, not everyone will want to use the hardware SPI, but it should be an option.)

It looked like a trivial change, but after making it, the display’s screen remained blank.

Logic analyzer capture of bad SPI communication

But … but … but … the slave-select line is supposed to be held low during each byte of transmission. I know the ATmega’s SPI hardware doesn’t manage it for you, but surely the Arduino’s SPI.transfer() function does, right???

Working Arduino SPI Transfer

Logic analyzer capture of working SPI communication

No. You have to manage it manually.

void LcdWrite(byte dc, byte data) {
digitalWrite(PIN_SS, LOW);
digitalWrite(PIN_DC, dc);
SPI.transfer(data);
digitalWrite(PIN_SS, HIGH);
}

SPI support is a perfect candidate to be a real object-oriented class rather than a functional library in OO clothing. Instantiate objects that know which slave-select pin is theirs, which may have different bit orders and clock rates and clock modes, and provide a transfer() method that sets all the registers, twiddles SS for you, and transfers your byte.

Sigh.

Faster Arduino SPI Transfer

BTW, notice on the second capture that manually bouncing SS using two digitalWrite()s takes longer than transferring eight bits of data using the hardware SPI. Start to understand why I want to transfer data using hardware instead of bit-banging?

Logic analyzer capture of working SPI communication with fast SS manipulation

Manipulating the SS bit in the port register directly is much faster … at the cost of being much less clear what’s going on to non-native speakers of C.

void LcdWrite(byte dc, byte data) {
PORTB &= ~ (1 << 2);
digitalWrite(PIN_DC, dc);
SPI.transfer(data);
PORTB |= (1 << 2);
}

ATmega I/O Pin Hardware Toggling for Fastest Arduino SPI Transfer (That Isn't Any Faster)

ATmega I/O pin hardware toggle diagram

Logic analyzer capture of working SPI communication with fast SS manipulation

The C-based bit manipulation code above is already fast enough that the timing constraint has moved back to the programmer-selected SPI clocking speed and the ultimate solution -- using the ATmega's hardware-based pin toggle feature -- doesn't save any noticeable time, but the code sure looks cool but it's the right thing to do and it's a risky game to play to assume you always know correctly the logic level of the pin when you enter the function.

void LcdWrite(byte dc, byte data) {
PINB = _BV(PINB2);
digitalWrite(PIN_DC, dc);
SPI.transfer(data);
PINB = _BV(PINB2);
}

(BTW, I had a dream recently -- which I did not know was not real -- in which the latest Arduino release added digitalWrite(pin, TOGGLE) to do the above. Imagine my disappointment tonight to learn it was only a dream. And no, I'm not the first to suggest that feature, by a long shot. Just, maybe, the first to think it had actually happened.)

PCB Milling with the MakerBot CupCake: Aluminum Leveling Platform

Saturday, March 19th, 2011

Last weekend I got my Dremel rigidly mounted in my CupCake for PCB milling, but the platform holding the PCB was attached with double-stick foam and was being deflected by the milling bit cutting the copper, causing considerable deviation from the intended milling path.

Leveling platform in MakerBot CupCake

Last night Steve cut some more aluminum plate for me and today I assembled a rigidly-mounted leveling platform to replace the stock build platform. The lower plate has holes matching the machine screws attaching the top of the Y stage, and I used slightly longer screws to bolt through both the aluminum plate and the original wood top into the Y carriage.

Leveling screw with nylock nut, upper view

I drilled holes in the corners, tapped the upper plate, and enlarged the holes in the lower plate. The socket-head cap screws spin freely in the lower plate while adjusting the upper plate’s height (I used a continuity meter to check when the milling bit was just barely touching the plate in each corner); then the nylon-insert nuts lock the screws in position. The whole assembly is quite rigid once tightened.

A number of designs for leveling build platforms use only springs between the two plates. I was concerned that without a nut, the machine screws might back out under vibration. Also, when extruding, having a platform with some give reduces the damage if you miscalculate the Z position and gouge the platform; but for milling, the whole point of this replacement is to remove any play in the platform.

PCB milled in MakerBot CupCake

The results were not tremendously better than before (left board, top row of pads; right board from commercial mill for comparison), so I slowed the feed rate to .1″ per minute and let the mill finish the rest of the board for five hours, just to see whether I could produce usable traces. The traces cut at an outrageously slow feed rate are much better than previous results, but still a bit, shall we say, interpretive for my taste.

Having watched the Dremel bit trying to cut the copper and having tested it handheld out of the machine, I do recognize that it’s not the right bit for this job. I have some carbide engraving bits recommended by Pierre (exuinoxefr) on the way from Hong Kong, and I think they’ll make a significant difference. In April.

Meanwhile, note the three pads in the center of the board. Even at only one stepper motor step per second, the board took a very consistently incorrect path under the toolhead. Also note that the diagonal lines look like they were drawn with a left-handed quill pen — NE/SW lines are thicker than NW/SE.

I believe this is caused by the considerable play between the original CupCake bushings and the guide rods. Tighter bushings would cause more friction, so they were chosen for a bit of a loose fit. Even though the platform is now rigidly mounted on the Y carriage, the Y carriage wiggles on the Y guide rods and the X-Y carriage wiggles on the X guide rods.

I’m extremely interested in the Mendel-inspired replacement X-Y assembly by Thingiverse contributor “twotimes.” It replaces the bushings with sets of roller bearings spaced around the guide rods; the bearings can be tightened against the rods and still roll smoothly. I intend to get in touch and ask whether it successfully removes the play from the carriages.

Leveling platform in MakerBot CupCake, closeup

Although my immediate interest is whether I can use the CupCake that I already own as a PCB milling machine, the enhancements I’m making will improve it as a filament deposition machine as well. The lack of leveling in my heated build platform prevented me from printing larger models; I’ve already drilled my heated platform to fit interchangeably into this new system. Smoother X-Y action from a replacement carriage can only help, too.

PCB Milling with the MakerBot CupCake and a Dremel (Almost)

Monday, March 7th, 2011

Dremel mounted in MakerBot CupCake (lower view)

My Dremel’s spindle had much more solid bearings than the Handy Grinder, so I mounted it in the CupCake tonight to try milling with it.

Dremel mounted in MakerBot CupCake (upper view)

It fit even worse through the Z stage than the Handy Grinder, but I remember having said something about the drill not even needing to be vertical as long as the bit’s tip made contact with the workpiece.

Dremel milling PCB in MakerBot CupCake

The XY platform wasn’t quite level (deeper cutting on the right than the left); but the real problem was that the Z stage was flexing. Not lifting off the Z stage guides — I could feel the acrylic bending as the tool direction changed. This demanded backing off the Z axis to an extremely shallow, ineffective cut to keep the milling tip from tracking the cutting direction as it did with the Handy Grinder.

Increasing the rigidity of the Z stage by bolting a large plate to it while mounting the Dremel is my top priority for getting closer to usable performance.

PCB after milling attempts

Straight off the mill after a variety of different attempts on the same workpiece. Parts of it almost look usable …

PCB after milling attempts, sanded

But sanded, it’s clear that in most places the bit barely scratched the copper and wasn’t even close to scoring through, because of the obligatory shallow cut.

PCB Milling with the MakerBot CupCake (Almost)

Sunday, March 6th, 2011

I crave a CNC mill for trace-isolation milling prototype PC boards and I haven’t managed to get my CupCake filament deposition machine calibrated so I can use it. (Build platform leveling and filament feed are my current showstoppers. I’ll get back to it.)

I knew that someone had proposed mounting a Dremel in place of the CupCake’s extruder and that MaskedRetriever had modeled a mounting bracket; but curiously, I haven’t heard any more about using the CupCake for milling. Surely someone has done it; I just haven’t run across it.

Last night while I was asleep, the facts and the immediacy of the situation came together: EAGLE can output trace-isolation g-code and ReplicatorG reads g-code and drives the CupCake. Really??? PCB trace-isolation milling is that simple???

Yes. Yes it is.

Circuit board layout drawn with pen in MakerBot CupCake

(more…)

Low-Temperature-Cooked-Eggs in a PID-Controlled Crockpot

Tuesday, December 14th, 2010

The web is ablaze with projects for sous-vide (vacuum-sealed) and low-temperature / long-duration cooking. For those not familiar, the basic idea is that if a perfectly-cooked medium-rare steak is 120°F / 49°C in the center, by cooking traditionally on a grill, you overcook it everywhere but the center. Instead of cooking at a higher temperature and waiting exactly the right amount of time for the inside to warm up to the desired temperature, cook the entire piece in a water bath at the desired final temperature for a long time, then sear the outside to make it extra yummy.

PID-controlled crockpot cooking two eggs

My project this weekend, rolling around in my head for way too long and finally kicked into motion by EMSL’s omelette-in-the-shell post, is nothing new nor revolutionary; it’s merely mine. Like many others before me, I plugged a crockpot into a PID controller to turn the crockpot’s heating element on and off and maintain its temperature precisely over a long period of time.

(more…)

Visiting San Diego

Thursday, October 14th, 2010

I’ve been in Anaheim, California for a conference this week, and I had the happy opportunity over the weekend to drive down to San Diego and meet in real life a couple of long-time blog friends, Scott and Ben.

Keith's Restaurant sign

I knew I was in the right place as soon as I looked out my hotel window.

Scott Smith's laser cutter frame

Scott is building a copy of bdring’s DIY laser cutter, which looks fantastic. Over the weekend Scott was assembling the sleds that transport the mirror over the workpiece. It’s a very nice design — everything is modular and everything is adjustable.

Fly-milled delrin and aluminum

Scott and his machining mentor Peter generously demonstrated milling techniques on Scott’s Sherline mill. Shown is a fly cutter that was just used to smooth the surface of delrin and aluminum blocks. Although it’s not mirror-shiny, I was impressed at how easy it is (with the right cutting and feed rates) to clean up a face. Peter also demonstrated the use of an edge-finder to precisely position a hole drilled into the edge of an acrylic plate for the laser cutter.

Scott Smith's CNC mill interface

Scott’s mill came CNC-ready with mounts for stepper motors on all of the axes. Scott designed and built his own interface between the PC’s parallel port and the stepper controls, adding indicator lights and the all-important stop button.

Lemons on tree

California is full of things I’ve never seen before, like lemons on trees

Ben Wynne soldering an EasyBright

and people other than me

Scott Smith soldering an EasyBright

soldering together EasyBrights. I don’t have the microscope, though, so I don’t have to make the squinty face.

Ben Wynne's RepRap Mendel

Scott and Ben have both been interested in my progress (and lack of usable results) on my MakerBot CupCake and Ben had just finished assembling a RepRap Mendel when I arrived. It’s much more interesting in person than any picture or video I’ve seen has captured. Compared to the CupCake, it’s incredibly smooth, quiet, precise, and easy to calibrate. On day two, Ben was already churning out prints I envied.

Between Scott’s mill, Ben’s RepRap, and Scott’s laser cutter, they’re set to prototype just about anything. I did suggest that Scott should build a water-jet cutter next, but he wasn’t having any of that. I may need some time to warm him up to the idea.

Project boxes at Fry's Electronics

We paid a visit to Fry’s Electronics, a legendary California electronics components and computer retailer. Although they’ve transformed into primarily a big-box electronics store, I was still impressed with their hobbyist / components section, including a larger variety of project boxes than I’d seen in one place and a good selection of components, including SMT passives, right there on the rack for the buying.

Min Smith playing guqin

Back at Scott’s house, his wife Min was practicing her guqin, a Chinese instrument you may remember from a Jet Li movie. Having been raised listening almost exclusively to western music (“We have both kinds!” — no, not that western music), I found its tuning even more unfamiliar than that of the guitar — it’s not tuned in regular intervals.

Sunset over the Pacific

To top it all off, we had time to wander down to the beach for a California sunset. Thanks, Scott, for an excellent visit with good electronics, great food, and local sights!

Installing Batteries in a Liebert GXT2-2000RT120 UPS

Sunday, June 27th, 2010

A while back, I bought a secondhand Liebert GXT2-2000RT120 uninterruptible power supply (UPS) on eBay. The GXT2 is a series of online UPSes, meaning that the output power always comes from the inverters off the battery bank; it doesn’t switch from utility power to battery power like an offline UPS. Besides eliminating any possible switchover glitches, online UPSes always deliver conditioned power at a constant voltage. The 2000RT120 is a 2000VA unit with 120V output — large enough to power all my servers for a good little while.

Liebert GXT2-2000RT120 UPS with battery cage disassembled

The batteries were due for replacement and the seller removed them to save on shipping costs. I got a UPS with a set of wires and no instructions on how to connect them.

Liebert GXT2-2000RT120 UPS battery wiring

Also one of the wires was compromised … but since it appears to be a ground wire, I figured no big deal if it shorts out against the cage. KIDDING!

Yesterday I figured out the wiring, installed batteries, and got the UPS set up in my server rack.

(more…)

Q&A: PIC Programmer, Oscilloscope

Saturday, June 19th, 2010

I get very specific questions via my contact form, but also questions about more general issues that might be of interest to a larger audience. I’m going to start posting the latter category here.

PIC Programmer

Trey asks:

Do you have any recommendations regarding a Microchip programmer? There is the PicKit 2 and the Pickit 3. I have read that there are/were issues with the PicKit 3. I know you have used Microchip parts in your designs, but was wondering what your opinion was?

Trey, I’ve never used a PIC that wasn’t already preprogrammed with the LogoChip environment, so I have no experience with PIC programmers.

After reading through PIC and Atmel datasheets in considerable detail to access hardware features on both platforms, my opinion is that I’ll never use a PIC. That’s based on a couple dozen small things that I don’t even remember any more, but which added up to a pretty powerful opinion that Atmel builds a much better thought-out microcontroller that’s much easier to use.

But … that’s not the answer you were looking for. Readers with PIC experience, can you address Trey’s question? Please clearly phrase your responses as statements of opinion (like my opinion above, which is nothing more than an opinion) or as statements of fact with links to supporting information.

Oscilloscope

I am just now starting my journey into electronics and was wondering if you have any recommendations for any particular make/model of oscilloscope?

For someone starting in electronics, before an oscilloscope, I would recommend:

  • A $3 multimeter. I’ve started buying a few of these whenever I go to Harbor Freight and find them on sale, and I give them away like candy. Ace Hardware also sometimes has cheap meters in the dump bin.

    Is this as accurate as a Fluke? Of course not — but for basic electronics troubleshooting, this is more than adequate. The one useful function it lacks is a beeper for continuity testing — you do have to look up at the screen to read low resistance.
  • A breadboard and some components with a list of projects to try. I’d suggest Adafruit’s $50 Arduino budget pack, $65 Arduino starter pack, or $85 Arduino experimentation kit. Even if you’re not that interested in embedded design, the Arduino is a great platform for trying things out and interfacing to the analog electronics, and the Adafruit kits provide a list of experiments to use as a starting point and get the ideas flowing.

But if you’re already doing PIC programming, you seem to be well past the resistors-and-LEDs stage. If you really need a way to visualize signals in order to progress, my oscilloscope recommendation would be whatever working scope you can get for the lowest price, making sure that you do end up with at least one probe (or find a cheap one on eBay).

I paid $25 for an old, used scope about 20 years ago and have only upgraded to a better scope in the last couple of years — which is 20 years old, which I got from a friend of a friend, and which I haven’t put on my bench and started using yet.

The two times I’ve used a different scope are when I found a cheap scope with X-Y inputs that I use for troubleshooting vector arcade game displays, and when I borrowed a digital Tek scope for doing some precise high-frequency measurements.

Granted, I don’t use my scope for calibrating circuits. If you need to do that, you need a better scope, and one that’s calibrated, and that’s going to cost real money. But if visualization is what you’re after, then the cheapest scope that works will do the job.

MIDI Looper?

Monday, May 31st, 2010

I’m starting to think I’d like a MIDI sequencer that behaves somewhat like a looper, doing the following:

  • Capture a short sample of a MIDI performance, including key velocity data.
  • Quantize to a tempo set by a “tap tempo” pedal continually and dynamically throughout the capture, rather than to an LED or click track.
  • Loop and play back, by default to the last tempo seen but honoring continuous “tap tempo” data from the same pedal.

Using a MIDI sequencer with these “tap tempo” features should give greater flexibility for capture and playback during a live ensemble performance than using a traditional audio looper, which requires the whole ensemble to play to the tempo recorded in the loop.

But my real motivation is to be able to play a pattern and then make gradual, multi-bar changes to the analog character of the sound without having to continue playing with one hand and turn knobs with the other.

Record a one-bar pattern on a MIDI keyboard driving a x0xb0x (or a real TB-303, if you’re filthy rich enough to have one and a DIN-sync MIDI adapter to go with it), then play it back and slowly tweak the knobs while everyone else jams on for a bit.

Am I going to find that all of this functionality already exists within the x0xb0x? (It looks like it might be close — MIDI ports; internal sequencer; variable tempo, although perhaps not that sophisticated.) Alternatively, are there MIDI sequencers that do all of this? Is this de rigeuer for every sequencer under the sun?