GPIB To USB, With A Python API


If you’re not so daft as to think Arduino-based oscilloscopes and multimeters are actually useful for all but the simplest tests and measurements, you just might have some big iron sitting around your workbench from the likes of HP, or Tektronix. You might have noticed a strange port on the back of these machines, labeled GPIB or IEEE-488. This is the standard interface for these devices, and if you’ve ever priced out a USB to IEEE-488 converter, you can see why [Steven] thought it would be cheaper to build his own.

This build is an update to an earlier version we saw a few years ago. Since then, [Steven] has taken some advice from the community and replaced a bunch of resistors with proper GPIB line driver ICs, and generally cleaned up the firmware.

Because a USB to GPIB adapter is only one small part of the tools necessary to connect these old measurement devices to a modern computer, [Steven] has also been working on InstrumentKit. It’s a Python library that takes all the standardized instrument commands and wraps them up in an easy to use API. You can check out the docs for InstrumentKit here, or just look through the board files and firmware on the Github

Using A ThinkPad Keyboard Over USB

kbIt doesn’t have buckling springs, Cherry blues, or even the wonderful if forgotten Alps switches, but the keyboard found in ThinkPads has the best keyboard action of any laptop around. They would make a great USB conversion keyboard, but the board to board connector is very hard to find, and no one has yet managed to get the keyboard and track point working as a USB HID device. Until [rampadc] came along, that is.

[Rampadc]’s keyboard adapter is built for the ThinkPad T60 keyboard, which is shared between the Lenovo T60, T61, Z60, Z61, R400, R500, T400, T500, and X41 laptops, among many others. The connector is an extremely odd proprietary deal, that can be found through the usual channels for about $5 in quantity 100. On top of this, the keyboard doesn’t have a controller – that’s offloaded to the laptop’s main board. The only electronics in this keyboard is just a matrix. Despite all this, [rampadc] managed to create a breakout board with a decade counter and an SPI GPIO expander.

The board [rampadc] made features one of the proprietary connectors, a few chips, and a receptacle for an Arduino Micro. With just a little bit of code, the old keyboard becomes one of the best portable keyboards in existence, and probably a bit cheaper than the official Lenovo USB-bound ThinkPad keyboard.

[rampadc] has a few of the expansion boards available over on Tindie should you want to build your own. It’s only cost-effective if you have one of these T60 keyboards sitting around in a junk pile; not a likely situation because these machines just don’t die.

Continue reading “Using A ThinkPad Keyboard Over USB”

What’s Inside a USB Isolator?

Coil Die


In this acid powered teardown, [Lindsay] decapped a USB isolator to take a look at how the isolation worked. The decapped part is an Analog Devices ADUM4160. Analog Devices explains that the device uses their iCoupler technology, which consists of on chip transformers.

[Lindsay] followed [Ben Krasnow]’s video tutorial on how to decap chips, but replaced the nitric acid with concentrated sulphuric acid, which is a bit easier to obtain. The process involves heating the chip while applying an acid. Over time, the packaging material is dissolved leaving just the silicon. Sure enough, one of the three dies consisted of five coils that make up the isolation transformers. Each transformer has 15 windings, and the traces are only 4μm thick.

After the break, you can watch a time lapse video of the chip being eaten by hot acid. For further reading, Analog Devices has a paper on how iCoupler works [PDF warning].

[Thanks to Chris for the tip!]

Continue reading “What’s Inside a USB Isolator?”

Tearing Down a Cheap External USB Battery

[cpldcpu] recently received an external USB battery as a promotional gift and thought it would be a good idea to tear it down to see its insides. At first glance, he could see that the device included a USB micro-b socket used as a 5V input (for charging), a USB-A socket for 5V output, a blue LED to indicate active power out and a red one to indicate charging.

Opening the case revealed that most space was taken up by a 2600mAH ICR18650 Li-Ion battery, connected to a tiny PCB. A close inspection and a little googling allowed [cpldcpu] to identify the main components of the latter: a battery mangement IC, a 2A boost converter, a 3A Schottky diode, a few 2A N-Mosfets, a 300mA 2.5V LDO and an unknown 6-pin IC. It is very interesting to learn that every last one of these components seems to be sourced from China, which may explain why this USB battery is given for free. Do you think they designed it in-house and outsourced the manufacturing, or is this a product Digi-Key simply bought and put their name on?

Editorial Note: Digi-Key is an advertiser on Hackaday but this post is not part of that sponsorship. Hackaday does not post sponsored content.

Continue reading “Tearing Down a Cheap External USB Battery”

Bitbanging USB On Low Power ARMs


With the Adafruit Trinket, the Digispark, and some very clever work with the smallest microcontroller Atmel offers, it looks like the ‘in’ thing to do for embedded software developers is to bitbang the USB protocol on hardware that shouldn’t support it. There are a lot of very small ARM chips out there without USB support, so it was only a matter of time before someone was able to bitbang USB on the ARM Cortex M0+.

The board above is based on an Energy Micro EFM32ZG, a very small 24-pin QFN device with up to 32 kB of Flash and 17 GPIOs. As with all the bitbanged USB hacks, the differential data lines are attached directly to the microcontroller. A 24 MHz crystal is needed, but the team behind the project is working on using the internal RC oscillator instead.

The code is portable with minimal changes between other manufacturer’s Cortex M0+ chips, and with a little work, this could become a very, very cheap USB-programmable ARM dev board, something the community could certainly use.

Don’t Just Go Sticking That Anywhere: Protect the Precious With a USB Wrapper

Oooh, look, a public charging station. Should you trust it? You might get juice jacked. Oh wait, you’ve got a USB Wrapper designed by [Scasagrande] to deny access to your datas.

This project was inspired by the USB Condom, but the problem with those is that they completely cut out the data lines and limit the charge rate to USB 2.0 (500mA). The data lines are used to communicate information about the charger’s power sourcing capabilities to the device. Many manufacturers short D+ and D- together, but Apple applies specific voltages to those lines.

[Scasagrande]’s USB Wrapper gives you options. You can set it to Dedicated Charging Port, Sony, Open Circuit, or Apple. The super-cool part of this hack is for you Apple fanboys. The bottom slider lets you emulate any Apple charger and use any USB cube (including one you may have made) as long as you have that funny cable in your messenger bag.  The hardware is open source and available at [Scasagrande]’s repo.

Make the jump to see [Scasagrande]’s nicely detailed video about the project.

Continue reading “Don’t Just Go Sticking That Anywhere: Protect the Precious With a USB Wrapper”

USB On The ATtiny10


Atmel’s ATtiny10 is their smallest microcontroller in terms of physical size – it’s an SOT-23-6 package, or about the same size as surface mount transistors. The hardware inside this extremely bare-bones; three I/O lines, 1kB of Flash, 32 bytes of RAM, and a reduced AVR core with 16 registers instead of 32. With such a minimal feature set, you would think the only thing this micro would be good for is blinking a LED. You’d be right, but [cpldcpu] can blink a LED with the ‘tiny10 over USB.

The V-USB interface usually requires about 1.5kB of Flash in its most minimal implementation, and uses 50 bytes of RAM. This just wouldn’t do for the ‘tiny10, and although [cpldcpu] is working on a smaller, interrupt-free V-USB, there were still some hurdles to overcome.

The biggest issue with putting code on the ‘tiny10 is its reduced AVR core – on the ‘big’ 32-register core, direct memory access is two words. On the ’10, it’s only one word. AVR-GCC doesn’t know this, and no one at Atmel seems to care. [cpldcpu] worked around this problem using defines, and further reduced the code size by completely gutting V-USB and putting it in the main loop.

It’s not much, but now [cpldcpu] can blink an LED with a ‘tiny10 over USB. If you’re wondering, 96.4% of the Flash and 93.8% of the SRAM was used for this project.