When you finish a PCB design, you typically use the CAM export function of your layout tool to generate a set of gerber files to send to the PCB manufacturer. To avoid errors in the finished board, it’s usually a good idea to review the files before you click send.
Enter gerbv, a free, open source gerber viewer that is available for many platforms, including Debian and OS X (via fink).
I recently upgraded to version 2.0 (I was using the really outdated version 1.0 on Macports) and I am really impressed by the improvements in the GUI and overall usability.
gerbv is a part of the gEDA suite, which also includes layout and schematic capture tools that are slowly becoming more popular vs. more established non-free tools like Eagle.
Let’s say you are designing a printed circuit board in Eagle, and you need to place a component that you’ve never used before. In Eagle, before you can use a new component, you need a land pattern, a schematic symbol, and a mapping between them to fully define the part. Often, you can search through Eagle’s included libraries and find what you need (or something close enough). But what if that fails?
The symbol and pin definitions are usually pretty easy – just copy the datasheet. The hard part is the land pattern: the collection of copper traces, soldermask openings, silkscreen, and other features that define the part on the PCB.
To come up with a land pattern, you usually have a few options:
Someone else may have done you a big favor by creating a part definition and uploading it to the Eagle library directory. Caveat: Use it at your own risk. Surface mount parts tend to be particularly hard to use right out of the box – often someone else’s land pattern won’t even pass your DRC. Whose process were they using, anyway??
Look through the datasheet for the part to try and find a recommended land pattern. (Good luck! Increasingly these are not included, but may be somewhere else on the manufacturer’s website. Google is your friend!)
Take a guess based on the geometry of the part, assuming you have a mechanical drawing or a physical sample somewhere.
Skip 1-3 and use an IPC-7351 land pattern generator.
IPC-7351 is a standard for printed circuit board land pattern designs. The standard attempts to, well, standardize land patterns to try to discourage every PCB designer from having his or her own custom library of land patterns. IPC takes known good land patterns and combines them with accepted manufacturing tolerances to produce a land pattern that will work for most people most of the time. Increasingly you will see references to IPC-7351 in datasheets instead of a land pattern drawing, so access to the standard is becoming more important over time.
Fortunately, PCB Matrix has a free IPC-7351 Land Pattern Calculator (direct download link here) that you can use to generate land patterns based on the standard. You don’t need to own a copy of the standard to benefit from it.
The calculator is somewhat tricky to use but if you click the right buttons you can get something like what is shown below (click to enlarge).
PCB Matrix IPC-7351 Land Pattern Calculator Screenshot
X and Y are the dimensions of the recommended pads for an 8-lead Thin SOT-23, which happens to be the package for the LT3464.
With this information, you can return to Eagle and create a land pattern for your device. PCB Matrix will also sell you premade Eagle libraries, but from their site it was not clear how much they cost. Based on their other products, my guess is several hundred dollars and a yearly maintenance contract – I’ll draw my own, thanks.
Unfortunately, the calculator is Windows only, so Mac guys like me need to use VMware Fusion or similar to use it. Can someone create a web version, please?
This Christmas I received a bunch of great books from friends and family. My O’Reilly collection in particular doubled in size!
Here’s a list of what I’ll be reading in 2009:
Analog Circuit Design: Art, Science and Personalities (EDN Series for Design Engineers) – Several first hand accounts of what it takes to be a good analog circuit designer by leaders in the industry. An older book with lots of circuit examples and historical notes illustrating trade-offs, breakthroughs and the analog circuit design process. Discussion of the looming threats of digital circuits (20+ years ago!).
This is the seventh part of an ongoing series about building a low cost, open source streaming internet radio. If you haven’t already, check out the previous parts (see the links at the end of this article) for some background about the project.
In part six, we used OpenWrt’s UNIX-style shell commands to interface with mpd, the music player daemon, and redirect song and stream information to our ASUS WL-520gU wireless router’s serial port. In this part, we’ll use a Sparkfun 16×2 LCD display and a handful of other components to build an LCD status display for the radio.
The Atmel AVR Microcontroller:
After much thought, I decided to use an Atmel ATmega168 AVR microcontroller to drive the display. I realize that this raises the technical level of this project significantly, but I have been wanting to feature an AVR project on the site and this is a great opportunity. The truth is that an Arduino would work just as well and it shouldn’t be too difficult to port this program to an Arduino sketch. (The Arduino is built with the same ATmega168 microcontroller, after all.) If anyone does this, let me know and I’ll post a link to your version of the display.
If you’re an AVR veteran, you can skip over this part and straight to the bill of materials below.
If you are new to the AVR, don’t be intimidated. There are a number of tutorials online to help you learn how to use this inexpensive and powerful microcontroller. I recommend starting with this one or maybe this one, but see my note about AVR MacPack below if you’re using a Mac. If you’ve never programmed in C before, you’ll have an additional hurdle to get over, although for this project you won’t need any actual knowledge of programming or C to burn the code to the AVR and get things working.
You will need to install some software to work with the AVR, I recommend:
AVR MacPack for OS X (the Adafruit tutorial recommends OSX-AVR, use this instead)
I recommend following a tutorial or two and getting a simple blinking LED example working on your AVR before building the LCD display. That way you can be sure your programmer, development environment, breadboard, etc are working first.
Building the display:
Bill of Materials:
You will need:
one A-B USB cable (the kind with one flat and one square end)
Assembling the circuit on the breadboard is pretty straightforward. Here’s a photo showing all components of the setup. The router is shown above with the serial port wired to the breadboard (the RX line is floating as we’re not using it yet). The USB AVR programmer is on the right, where it is also functioning as a 5V power supply for the circuit. Make sure the 2-pin jumper on the USBTinyISP is installed, this enables the +5V supply. The LCD is shown displaying the current stream name (DI.fm).
Here is a closeup of the components installed on the breadboard to show how I did things, feel free to experiment with the placement of components. As long as you follow the schematic the circuit should still work.
Here is a closeup of the serial port connection to the router, including the 4-pin female 0.1″ header. I soldered wires to the pins of the female header (not the pins on the board).
Once the circuit is assembled on the breadboard, we need to flash the AVR microcontroller with the main.hex file included with the firmware above.
If you’re using AVR MacPack and OS X, this should be easy (since that’s what I’m using). PC guys will need to figure this out for themselves but hopefully the process is similar (please let me know if the Makefile works).
Connect the USBTinyISP to your computer with the USB cable and to the breadboard with the ISP cable. The green light on the programmer should be on, indicating it is ready, and the backlight of the LCD should be lit, indicating that the breadboard is getting power.
Open a terminal window and create a new directory, I used ~/temp. Unzip the firmware into a directory somewhere, and execute ‘make flash’, as shown:
avrdude: Device signature = 0x1e9406
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: writing flash (1326 bytes):
avrdude: verifying ...
avrdude: 1326 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done. Thank you.
If everything went well, the LCD display firmware is now loaded into the ATmega168 and the circuit is ready to go. If not, double check your connections and take a look at the help! page for the USBTinyISP.
Testing the display:
Telnet or ssh into the router. Start mpd and connect to a stream using mpc (we covered this in part five).
Once the stream starts playing, execute the display.sh script we created in part six. Within a few seconds, if everything is working, you should see the stream name on the display, followed by the artist and name of the current song. Congratulations!
Here is a video of the LCD display in action, including the horizontal scrolling feature to show information that is too wide to fit within the visible area of the display:
That’s it for part seven! In part eight, we’ll start working on the input side of the user interface.
Like what you’re seeing? Have suggestions about what could be improved? Leave a comment or contact me directly.
Update:Part eight, in which I add a tuning control to the radio, is now available.
Update 2: There is a new Wifi Radio Discussion Forum, hop over there to ask questions about the project or see what other people are working on! (4/12/09)