After doing some research into Zigbee devices, I've settled on the Jennic 5139 modules for my home automation projects, which I now sell via New Millennium Networking.

The interface to the PC is via RS232 (TTL, so you'll need to level shift to 3.3V or hack a USB to serial cable), and the modules have a lot of cool stuff onboard.

  • 21 GPIO lines
  • 2 wire support
  • SPI support
  • 16MHz OpenCores OpenRISC based CPU
  • 96kB of RAM!! (huge for a microcontroller)
  • 4 analog to digital converters
  • 2 digital to analog converters
  • 27mA current drawn when not sleeping (Xbee pulls 50mA)

The modules themselves comprise a PCB with semicircular solderable notches on the side. You can use them by press-fitting in between some pin headers, or by soldering it directly to another PCB. While this is great for production, it is too fiddly (1.27mm pin pitch!) to easily use for prototyping, so I've whipped up a carrier board that you can solder it to then plug into a prototype board.

Jennic 5139 Carrier Board

You only need to etch the top side of the board for normal use. The underside and JP3-JP6 are required only if you want to make use of the onboard serial & ICSP headers. The header follows the Atmel standard pinout.

Using the Board Without the Bottom Layer

If you do not etch the bottom layer and install the jumpers, you should externally connect SPISSZ (JP1 Pin 9) to SPISSM (JP1 Pin 13) to allow the microcontroller to address the flash chip. Without this connection, the microcontroller will not boot from the internal flash chip.

Using the Board With the Bottom Layer & Jumpers

Etching the bottom layer allows you make use of the ICSP header to program the flash without going through the microcontroller.

S1 Reset Press this button to reset the module
S2 Program Press this button while resetting the module to enable programming the module over the UART
JP3 Serial Connects to UART0 (use a 3.3V TTL serial line), pinout is Ground, RX, TX, +3.3V
JP5 ICSP Enable Move the jumper to pins 2&3 to enable ICSP, move it to pins 1&2 to allow the microcontroller to boot normally
JP7 Write Protect Install this jumper to write protect the module

Constructing the Board

The Jennic 5139 module should be soldered to the carrier board. Ideally, you should use a reflow technique to acheive this (Google "DIY reflow"). If you want to use the additional features of the board, install the switches, jumpers and ICSP header. Finally, install JP1 & JP2 on the underside of the board - they are spaced to fit into a standard 2.54mm prototype board.

Getting the Board

At this time, you will have to fabricate the board yourself.  Download and extract the board layout, it is available in Eagle format (a free to evaluate & use for non-profit use electronic CAD package).

Update 5th June 2009 - Revision 1.1

I have added a header to access UART0 on the Jennic module (JP3). I've also increased the thickness of some of the tracks to reduce the chance of manufacturing errors (there are still a lot of 0.1mm tracks though).

Update 12th June 2009 - Revision 1.2

While checking a physical print, I noticed that a couple of traces were too close together - they have now been moved apart.

Update 7th July 2009

I tried cutting the PCB on my mill tonight, unfortunately the traces are too fine to come out reliably, and end up breaking when the mill runs adjacent to it. I'll have a shot at etching it via toner transfer.

Update 14th July 2009 - Revision 1.3

A few days ago I relaid the board with wider spacing and thicker traces, suitable for milling.

Jennic 5139 Carrier Board - Alternate layout

I was able to successfully cut this version out on the mill.

Jennic 5139 Carrier Board - Top Jennic 5139 Carrier Board - Bottom Jennic 5139 Carrier Board - Top

To solder the Jennic module on, I first filled the wells on the side of the module with solder. I then tinned the PCB and positioned the module carefully. Using a low power, fine tipped soldering iron, I drew the solder down from the wells onto the PCB. I did each of the corners first, then went back and did others.

Since the PCB was milled, the holes are not through plated. As a result, I soldered in small pieces of solid core copper wire to complete the vias, and soldered the pin headers on both sides of the board.

On the rear of the board, I was overzealous when sanding off the rough edges, and accidentally removed part of a trace. I also lifted a few traces (boo) due to excess heat. These were repaired by soldering a single strand of solid core copper wire over the breaks.

Things to add to Revision 1.4

  • Power LED
  • UART RX/TX LEDs
  • GPIO LED (a la Arduino's pin 13)
  • Pullup resistor to Write Protect pin

Update 15th July 2009

I was able to successfully program the module over the UART. In order to do so, I had to pull the WP line up - leaving it floating was not sufficient. I will have to add a pullup resistor to Revision 1.4.

Update 22 July 2009 - Revision 1.4

I've added the features mentioned above, as well as widening most of the traces for increased reliability.

There are 3 0 Ohm resistors on the board, you can short these with a solder blob. They are intended to allow you to disconnect LEDs 2, 3 & 4 from their IO lines, to prevent them from flashing (and loading the lines) if you are going to configure those lines as inputs. Be aware that disconnecting TX & RX will also disconnect the respective lines from the UART header.

I have dropped the small form factor board, as the larger board is easy enough to work with on a breadboard, and also had enough space to cram in the extra LEDs. I have left the files for the Revision 1.3 board available, which does have the small form factor board available, but this will not be updated going forward.

Update 24 July 2009

To err on the safe side, the 68 Ohm resistors should probably be 75 Ohm - I'll correct this in the next revision of the board.

I've written a simple 10 LED scanner to get aquainted with the development environment. I have come across one issue when setting the output pins. It is tracked on the Jennic forums. Grab blinkenlights.c to have a play (yes, I know the UART code is extremely naieve).

Update 16 November 2009 - Revision 1.5

Some minor adjustments, I've added text labels to the pins and changed the LED resistors to 75 Ohms.