PCB’s from MakePCB

I just got a batch of PCB’s in from MakePCB : 25 Arduino MP3 shields. The design is from brokentoster.

I have tweaked the layout a little to allow for larger tolerances. 12 mil minimal trace width and 12 mil minimal clearance.

Solder side
Bottom side.

I wanted to try something new and chose a yellow solder-mask. The white is still readable. I suspect the color did cause a little delay.

Ordered : 25-April-2010
Shipped : 28-May-2010
Delivered : 7-June-2010

As mentioned earlier, MakePCB does not communicate very well. They use 3rd party website to keep you posted on the status of your delivery. This delivery seems to be stuck on “in production”.

One board had some rework done :

Rework done on one board in 25.

Other than that, the boards are fine and the price is hard to beat.

Having cheap PCB’s made

The PCB’s for the kits and projects on this blog are made by cheap manufacturers. These manufacturers don’t especially cater to hobbyists but would like to have filler orders to keep production running when there are no large orders available.  The PCB manufacturers sell this production time cheaply, the downside for the customer is the long or uncertain delivery time.

When shopping for PCBs you can sometimes tweak two parameters : the delivery time and the number of boards. A longer delivery time will lower the cost, a larger number of boards will raise the total cost but in general lower the cost per board, sometimes by a lot.

The manufacturers will typically want you to deliver gerber files. Making and checking gerbers is a blogpost by itself, the BatchPCB FAQ has an entry about them and Sparkfun has a tutorial. Before I have PCB’s made I check them at circuitpeople.com and if the board is really new I usually render it with Eagle3D.

Here is a list of PCB manufacturers I have used and some that I have not yet used but offer interesting services.

MakePCB

MakePCB is by far the cheapest PCB manufacturer I have found. The site is not as detailed as the competitors site and the communication is not very helpful at all. The price is unbeatable. I have used their service in the past expect to use them in the future.

BatchPCB

BatchPCB is Sparkfun’s PCB Pooling service. The designs are panelised by BatchPCB and the panels are made and cut by by Gold Phoenix and sent to the US in bulk. BatchPCB then sends out the PCB’s to the end  customers. Specs and tolerances can be found here, prices are here.  BatchPCB is a great service and offers other services like selling your boards to other users. I have stopped using BatchPCB because BatchPCB is expensive and located in the US. Sending boards from China to the US and sending them from the US to Europe adds to the cost and delivery times.

Eurocircuits

Eurocircuits have their own manufacturing and pooling service. The quality of the boards is high and the price is too.  Where MakePCB keeps communication to just below the bare minimum, Eurocircuits has a hand-full of sites in different languages, and a coice of 4 or 5 different PCB services. The result is pretty confusing. The price calculator is shared between all sites but needs magic parameters in the URL to determine the price. I suspect they have different prices for different kinds of customers.  Eurocircuits have been partnering with Elektor and offer Elektor PCB’s no longer offered by Elektor themselves.

Board and price examples

Say we’d like to have 25 Arduino shields made. The shields are double sided, with double sided solder mask and a single silkscreen. The PCB’s are not rectangular but have the traditional Arduino Shield bump and holes. The board is 69 x 53 mm.  Shipping is to the Netherlands.

Manufacturer clearance trace via Price 1 Price 25 S&H 1 S&H 25 Total 1 Total 25 Lead time
MakePCB 0.2 mm (8 mil) 0.2 mm (8 mil) 0.3 mm (12 mil) 26.72 € 56.76 € 6.21 € 14.73 € 32.48 € 71.49 € about 4 weeks
BatchPCB 8 mil (0.2 mm) 8 mil (0.2 mm) 20 mil (0.5 mm) 15 USD 375 USD about 18 USD about 18 USD 33 USD 393 USD about 20 days
Eurocircuits 8 mil 8 mil 0.35 mm 53.81 € 121.13 € 10.01 € 10.16 € 63.81 € 131.29 € about 30 days

Other PCB services

There are a couple PCB services that I have not used yet but that seem to offer interesting services.

Gold Phoenix PCB

Gold Phoenix PCB is the manufacturer that supplies the PCB to BatchPCB. BatchPCB collects orders to fill up panels. Once a panel is full, BatchPCB has the panel made, cut up to the individual boards and sent to BatchPCB.  This “buy a panel” service is also available to end users. The panel sizes for 2 layers are 1000 cm2 or 650 cm2. The shield in this example has an area of about 37 cm2. One panel would yield 27 Arduino shields. Gold Phoenix is a bit more expensive than the cheapest option I have used but is interesting because they support tighter tolerances and, for a fee, inner cuts, different color soldermasks and different color silkscreens. You could do stuff like white PCB’s with black lettering.

PCB-Pool

PCB-Pool is one of the older PCB manufacturers that offer their services online. PCB-Pool is interesting because the offer solder paste stencils, sometimes for free. They also have a Front panel service.

More price examples

Two notes about the prices here :

  • In this example PCB-Pool will make 30 PCB’s for the same total price as 25. Apparently they are filling panels.
  • In this example GoldPhoenix will make 27 PCB’s.
Manufacturer clearance trace via Price 1 Price 25 S&H 1 S&H 25 Total 1 Total 25 Lead time
GoldPhoenixPCB 7 mil 7 mil 15 mil 99 USD 99 USD 10 USD 10 USD 109 USD 109 USD 8 working days
PCB-Pool 0.15 mm (6 mil) 0.15 mm (6 mil) 0.3 mm (12 mil) 43.73 198.30 Euro ? ? ? ? ?

Using the CC2500 Arduino Shield

Software : the Arduino Library

( the hardware is described here )

Update #2 : the LivingColors library has been updated, the transmit power is higher and the range should be longer.

Update : the example program and library has been updated to Arduino version 1.0. New version of the example program is here : a_LiCo_Control_A1.zip , the LivingColors library is here : LivingColors.zip

The software consist of a library for the Arduino that can control a Philips LivingColors and a couple of sample programs. The library takes care of sending an receiving of messages using the CC2500 and can be used as a basis to communicate between two shields.

The library can be found here for Arduino version 1.0 (and here for older versions) and should be saved in the  “libraries” directory of the Arduino environment (this is the “hardware/libraries” directory in older versions of Arduino). You should have a  “<arduino>\libraries\LivingColors” directory with the files :

  • CC2500.cpp
  • CC2500.h
  • ColourConversion.cpp
  • ColourConversion.h
  • keywords.txt
  • LivingColors.cpp
  • LivingColors.h

The library can be found here for Arduino version 1.0 (and here for older versions) and the files are well documented.

The source code has a GPL license.  The code is based on code by Jeroen Domburg, known from various hacks on Hack a day and Tweakers, and described in an article van of the dutch edition of Elektor in May 2008. George Mathijssen cleaned up the code and got it working as an Arduino library.

The library is likely to have bugs and omissions. The RGB to HSI conversion seems a bit wrong and we ignore the ACK and NACK responses from the LivingColors lamp. Fixes and improvements are welcome !

LiCo_Control : an example of an Arduino application.

To test the library i have made an application to control LivingColors lamps. The application receives commands by serial over USB, you can control it with something like Putty or HyperTerminal.

When LiCo is ready to execute a command it sends a “!”. If it did not understand a command it sends a “?”.

The available command’s are :

Command Function
r reset
wn-rrr-ggg-bbb r, g and b are numbers 000 to 255. Example “w000-255-000\” for bright green. n is the lamp number.
hn-hhh-sss-iii h, s and i are numbers 000 to 255. No example for now. n is the lamp number.
i print info
nn turn lamp number n on
fn turn lamp number noff
ee e = 0 echo off, e = 1 echo on.
l listen for addresses. Use i to list addresses.
saabbccddeeffgghhii store address in a..i. 9 numbers as 2 digit hex
? dummy command.

Using the application to control a LivingColors lamp :

In LiCo-Control you can get control over the lamp by  :

  • Switching the lamp on with the remote.
  • Opening a connection to the Arduino board with a terminal application (putty, hyperterminal.. etc.).
  • Telling the application to learn the code of the lamp by sending the “l” command..
  • .. and control the lamp with the remote..
  • The Arduino will the eavesdrop on the communication between the remote and the lamp and will learn the addresses of  lamp and remote.
  • The command “i” will display the learned addressees.
  • With “w0-255-000-000” you should be able to set lamp 0 (zero) to bright red (R=255, G=000 and B=000).
  • With “w1-000-000-010” you can set lamp 1 to faint blue.

Its best to hardcode the learned addresses in the LiCo-Control application.

WheelColor : an example Processing application.

WheelColor is a Processing application that sends commando’s to LiCo_Control. You can set the color of the LivingColors lamp with a colorwheel. The application is simple and ugly but it contains a useful example for robust communication between Processing and Arduinio and in this case WheelColor and LiCo_Control.

Here an example using WheelColor :

Relevant files.

The schematic (as pdf).
The printlayout (as png).
The BOM (as txt).
The Arduino library for Arduino < 1.0 (as zip), library for Arduino 1.0 (as zip).
An Arduino example for Arduino < 1.0 (as zip), example for Arduino 1.0 (as zip).
A Processing example that uses the Arduino example (as zip).
The datasheet of the CC2500 chip from TI. (mirror). There are important bugs mentioned in the errata on the TI site !
The datasheet of the CC2500 module from Quasar. (mirror)
The datasheet of the 74LVC125. (mirror)
The datasheet of the LP2950 voltage regulator. (mirror)
The CC2500 and Atmel on the Arduino use SPI to communicate. TI has a  application note about SPI.

Assembling the CC2500 Arduino Shield

Errata

Please take note of the following changes and non-obvious issues :

  • The kit described ONLY works with the 1st generation LivingColors which is no longer sold.
  • I have made newer and slightly changed versions of the shield.  Little changes as far as assembly is concerned.  The software has changed : it has been upgraded to Arduino 1.0 and the output power has been increased.
  • Do NOT use JP1 en JP3 unless you understand what the do and how you intend to use them. They can be used for interrupting the Atmel when packets have been sent or received by the CC2500. This would require changes in the library.
  • The via’s of the surface mounted module are too close to the metal USB connector of the Arduino. The via’s are tented but it is best to punt some tape on the PCB just to be on the safe side after assembling the shield.

What is it ?

The CC2500 Shield for Arduino is a kit that interfaces an Arduino to a CC2500 radio transmitter – receiver.
What do you need :

  • An Arduino or Arduino clone like the Freeduino.
  • The Arduino development-environment.
  • (optionally) The Processing development-environment.
  • This kit.
  • Standard tools and skills om needed to assemble an electronics kit. At least you will need a small soldering iron, soldering tin, and diagonal cutters. A multi-meter is useful for finding errors and some solder wick or a solder vacuum. You can find various guides on how to use these tools.

Assembly.

Assembly is fairly easy :

  • Smallest parts first. In this case the two 74LVC125 and the DPAK voltage regulator.
  • If you are assembling the version of the CC2500 module with the eternal antenna, you should solder it now. Check the alignment with the holes in the PCB and the notches on the module.
  • If you have the module with the internal antenna, now is the time to solder the 8 pin header.
  • Solder the rest of the parts.
  • Make sure the IC’s are mounted correctly, pin 1 should be near the 8 pin header.
  • There are two different values resistors on the board. R2 and R3 are  680 Ohm, R4 is 10k Ohm. There is no R1.
  • The LED’s should be mounted with the cathode (the short pin) in the ground plane. The short pen should be near the prototyping area, the long pen near the resistors.
  • Do NOT mount JP1 and JP3 unless you know what you want to use them for. There is no JP2.

I have made a couple of clips showing how the prototype was assembled.

Mounting the  SMD’s  part 1.

Mounting the SMD’s part 2.

The LED’s and the 8 pin header.

The pin headers.

Testing the board.

After mounting the parts it is best to check a few things.

  • Check the top and bottom of the board for shorts and faulty connections.  Use the multi-meter to check for a short between 5V and GND on J1.
  • After that you can put the shield on the Arduino without the CC2500 module (if you have the internal antenna version). On the header for the module you should check the voltages. You should measure 3.3 V between pin 6 and pin 1. You can use the cut off pens of the LED’s to put in the 8 pins header.  S1 should reset the board.
  • If everything checks out you can remove the shield from the Arduino, place the CC2500 module on the shield and put the shield back on the Arduino.

Next : the software

The built up Arduino CC2500 Shield
Eagle3D allows you to render an image of the board.
Eagle3D allows you to render an image of the board.