Posts Tagged ‘PCB’

h1

DMX-512 module in development

2010/05/04

In response to a question on answers.hackaday (this one) about an open-source DMX-512 platform, I figured I’d post something about what I’ve got under development as part of a larger project.  The long-term goal is to develop a wall-mounted control panel (e.g. in the standard light-switch box) for lighting scenes.  A number of these would be installed at key places in our church sanctuary, allowing the DMX-controlled lights to be operated without having to trudge upstairs and find the light board.

The module in question would be the brains of such a beast, having a microcontroller and the necessary DMX interfacing.  An ATXmega would form the core, given that it’s the most versatile MCU I’ve used so far.  DMX interfacing uses a pair of MAX13430′s, which are dual-voltage transceivers allowing me to run the DMX ports at the proper 5V yet interface cleanly to the ATXmega running at 3.3V.  A soft-USB port is present for configuration, though that depends on either porting or rewriting the AVR-USB stack to run at 32MHz, or just running the whole module at say 20MHz (the max current speed for AVR-USB).

The module takes the physical form of a 40-pin 600mil DIP, for which sockets are easily available anywhere and everywhere.  All the pins not used by the DMX interfaces are brought out on pins for use by whatever you want to drop this thing into.  DMX and power connections are made via screw terminals, which could be routed to standard 5-pin DMX connectors on whatever chassis you have.

This module is still under development, as in I was modifying and cleaning up the PCB just a few minutes ago.  The DIP power pins are yet to be routed, and there’s more cleanup to be done.  However, I’m waiting to turn the actual boards until I get my baseline Xmega adapters populated and can start developing some of the software so I know I’m not smoking something.  I expect to turn these boards in 2-3mo, and shortly make them available for purchase.

h1

Xmega adapter boards for breadboarding

2010/04/16

I’ve got a number of projects coming up that would be radically simplified by a) using ATXmega parts, and b) breadboarding a prototype.  The problem is that Xmega’s don’t come in anything but surface-mount packages.  The obvious solution is to construct an adapter board.  A straight pin conversion would be a waste of effort, so adding programming headers, clocks, and decoupling capacitors is a necessity.

I posted to the DorkbotPDX list to see if anybody is interested in ordering some of these alongside my own order in the next group PCB buy (April 26th), and got one response almost immediately.  As a result I’m going to tweak the boards up and make sure they’re ready to go, and post them up here for comments.

The first board here is the ATxmega*A4 unit, which is a 40-pin 600-mil DIP.  PDI header on the right, crystal on the left, decoupling and AVCC filter caps scattered around.  Port pins are labeled as are + and -.  PDI pins are accessible on the main header as well as the programming header.  Discretes are all 0603 for ease of assembly, though the chip itself is a QFN (unfortunately).

The second board is a straight extrapolation of the first, designed for the larger A3 chips.  It’s a 60-pin 600-mil DIP with the same basic feature set.

I’ll be tweaking these over the next few days, and hopefully producing a batch of them in the next couple weeks.

h1

Logic Helper under development

2010/03/04

I’ve struggled with juggling all sorts of tools for development for years, ranging from serial adapters to chip programmers to logic analyzers.  So, I decided to do something about it, but I haven’t gotten far enough yet to use it.

FT4232 Logic HelperThis board is built around the FT4232 from FTDI, which has a total of 32 I/Os in 4 groups of 8.  Each group has a serial port, and the first two have MPSSE (Multi-Protocol Synchronous Serial Engine) blocks capable of doing SPI, I2C, JTAG, and others.  All 32 I/Os are routed through 4-bit voltage-level translators, and then grouped to a set of 8 RJ-45 jacks.  Of each of the 4 chip ports, the A jack has pins 1-4 and 7,8, while the B jack has pins 5-8 and 3,4.  The other two pins are GND and VCCIO for that bank.

Pre-made cables could be designed for common interfaces, such as AVR-ISP or JTAG, or include extra components if needed for protocols such as I2C (the FTDI chips require DI/DO be tied together externally, for instance).

I have a software framework underway that will interface with this board and allow you to stack all sorts of modules together to accomplish what you’re after.  An example would be an AVR ISP module that exposes a custom API.  Underneath it would need to talk to 4 pins (MISO,MOSI,SCK,RST), and would use a standard connection API to be attached to a module underneath that provides those resources.  If you hook it to dumb bitbang pins, the ISP code will hammer out the protocol the hard way.  However, if you hook it up to pins that are aware that they can be controlled by an SPI module of some kind, the ISP code would make use of the SPI interface and give you radically faster programming speeds.  This way you can shuffle your use of the RJ-45 ports to best match your requirements for particular ports and acceleration needs.

I plan on developing a very similar board based on an ATxmega128A1 that will have the same 8 connectors in roughly the same arrangement, but add another 4 connectors for A/D and D/A outputs, and possibly add an LPC memory bus on a different connector.  The memory bus would also have an FT2232 for interface to the host computer.  The remaining port may connect with another microcontroller (maybe via backpack?) that could do all sorts of interesting things with the VCCIO pins, e.g. making them inputs or outputs, suppling particular voltages, etc.  The sum of these enhancements would mean an extremely fast device capable of running things like AVR-ISP, AVR-PDI, JTAG, 1-wire, and other protocols with microcontroller assist.  A serialization format between modules would allow compatible modules to be shoved “down” into the hardware.

I also have a tiny version based on the FT232R, which can provide both RS-232 and 12-bit I/O (only 10 with RS-232 active).  Unlike the FT4232, there is no sync-serial engine, so everything would have to be done via bitbang…

FT232R Logic Helper

I have the two boards shown actually fab’d, but I haven’t put the parts on them yet.  The software is much more theoretical at this point ;-(

h1

Isolated USB cable, hub

2010/03/01

The next design I’m showing off is a tiny little board (1.4″ x 0.45″) that houses both an ADuM4160 USB 2.0 low/full-speed isolator, and an ADuM5000 100mW power isolator.  The two together form the core of a fully-isolated USB cable, which means you can safely connect your externally-powered device to your computer without any worries about where the relative ground potentials are.  This is critical for my main contract, because each board takes power from further and further down a main power bus, which means that even after the regulators do their thing, the ground potential on each subsequent node on the wire is different from the previous.

The ADuM4160 requires power on both sides of the transformer isolation barrier to run its encode/decode circuitry, which is why the ADuM5000 is required to provide power.  The upstream port of a USB device does not provide any power to the cable, so there’s no power for the device side of the isolator without the ADuM5000.  However, the 100mW limit means you really can’t run most bus-powered devices off the isolator.  OTOH, why would you be putting a ground isolator on a bus-powered device anyway…?

Isolated USB cableThe other design is a 7-port USB hub based on the same concept.  The upper-left port is the upstream, the remainder are downstream.  All 8 ports are fully isolated for both USB and power.  The 100mW limit of the upstream ADuM5000 should be sufficient to drive the 7 downstream ADuM4160/ADuM5000 pairs as well as the TUSB2077A hub chip, but not provide any power at all to even the lowest-power of devices…

Isolated USB hub

I haven’t had luck yet getting the cable isolator to work, due to a combination of problems not the least of which was the lack of proper silkscreen in the parts library footprint I stole.  It helps if the ADuM5000 isn’t backwards, eh?  I haven’t gotten back to trying to finish that because the memories of spending a week bashing my head bloody against the problem are still too painful.  I’ll get to it soon though, because I will need a quantity of them very shortly.  The hub is still sitting on my desk as a bare PCB, since I don’t really want to start sticking some $70 of parts on the board until I know the smaller version works…

Once they are confirmed working, I plan to offer them for sale somehow.  I know there’s interest, because only a few days after posting to the DorkbotPDX list about them, I got an email from someone entirely unrelated to dorkbotpdx about wanting to buy some. Go Google!

h1

PCB design showcase

2010/02/26

A few minutes ago I sent an email to the dorkbotpdx mailing list offering to review and tweak people’s PCB to improve them as far as both aesthetics and immunity to assembly and interference problems.  The first example board ended up being Scott Dixon’s IR temp-controller board, which he’s posted on the dorkbot blog along with his original artwork.  The eventual goal is to develop a workshop with handout materials and live demonstration of what it takes to make a shiny-clean board.

However, I thought I’d also start posting some of my existing board artwork as examples.  Between these and the process of reviewing others’ boards, I hope I can help advance the “state of the Art” in the DIY electronics world.

The first board I’ll post here is one that I am actually starting to bootstrap and write firmware for right now, between working on my contract and spec “job” projects.

64-channel RGB LED controller

This is a 4×2.5″ board with 4 microcontrollers and a whole lot of header pins.  The ATXmega16A4 on the left is the master interface to the world, with the top-left 2×5 header providing VCC/GND as well as I2C, SPI, and serial interface options.  The 2×2 header is a debug serial port for development.  Bottom left 2×5 are for main V+ and ground to drive the LEDs.  A +3.3V regulator provides logic power for all 4 chips.  The 3 big uC’s are ATXmega128A1′s with 64 I/O’s each wired directly to the bulk headers.  Each column of 4 pins provides V+ and R,G,B cathode drivers for a single RGB LED.  The 3 main uC’s are connected to the driver uC via I2C for internal communications, and all 4 chips have their PDI programming interfaces routed to the 2×4 header on the right.

Identical software on each x128A1 will use Bit-Angle-Modulation to drive all 64 pins in 8 phased groups, controlled by the x16A4, which will interpret data from a variety of interfaces and formats up to the limits of flash size.  An x64A4 could be fit in the same place if the software gets too bulky.

The intent is to wire 5mm, 10mm, or Piranha-style common-anode LEDs to directly to 1×4 headers and plug them straight into the board.  Depending on the V+ fed to the board, one or more of the elements will need resistors.  A +3.6V supply would only require a single 60-ohm resistor  on the red LED.  Higher voltages can be used because the software will be switching the I/O drive rather than the level, and since they are being pulled to ground rather than up to a given voltage, I anticipate no problems with I/O’s going south.

I have 3 of these PCBs on hand, and one of them is currently populated and being bootstrapped.  I hope to be able to sell these as kits at some point, as this radically simplifies the task of building a large-scale display.  This design was posted on Hackaday today, and demonstrates the insane expense and lengths to which one has to go currently to drive a decent number of LEDs…

Follow

Get every new post delivered to your Inbox.