Professional Documents
Culture Documents
Electronics - 1
by Nate |
June 19, 2008 |
49 comments
}
Guess what that code does? It toggles a pin high/low every 2 seconds. Fancy right?
This is the 'Hello World' of the microcontroller world. It seems trivial, but by god
when you've been trying to get a micro up and running after 5 hours of tearing your
hair out and you see that LED blinking for the first time, it's just glorious!
What types of microcontrollers are there and how do I get one blinking?
Here's a very shallow breakdown of the micros in my world:
• PIC - This is the classic micro from Microchip. Very simple, very proven, but it
lacks many of the features that other mfg's are building into their chips. This is
a big deal for me. I was a die-hard PIC person for years and I've started to see
the limits of PICs and the benefits of other micros!
• AVR - This is basically a direct competitor of PICs. They do everything a PIC
does, but in my new opinion, better, faster, cheaper, and simpler.
• MSP - These are very good micros by Texas Instruments (TI), not as beefy as
AVR or PICs. However they truly excel at low-power applications. More on this
later, but imagine running a complete system on one AA battery for 5 years.
This is in the realm of nano-amp current consumption. Crazy!
• ARM - Why are all these three letters? I don't know actually... ARMs are the
new kids on the block and they are huge. Very powerful, very low-cost, they
are taking over the world but can be really intimidating if you've never played
with a micro before.
• 8051 - The '8051 core' was the de facto standard in 8-bit (and 4-bit!)
microcontrollers. Developed by Intel in the 1980s, it still seems to be the
instruction set they love to teach you in college. They are based on archaic,
but field proven instruction sets. Very old tech in my humble opinion, but these
ICs have been significantly improved over the years (now Flash based, ADC,
SPI, etc.).
• 68HC08/11 - Another very common instruction set developed by Motorola.
Extremely popular, and a micro commonly taught at university, it's the
microcontroller I love to hate. These original micros often lack on-board RAM
and flash based memory.
Google any of these for more info. I have chosen the ATmega168 as the learning IC
of choice. Why?
• 20 MIPs (million instructions per second!) is powerful enough to do some
really cool projects
• It's cheap! $2.13 currently
• It's got all the goodies under the hood (UART, SPI, I2C, ADC, internal osc,
PWM, kitchen sink, etc)
• 16K of program memory is enough for almost any beginner project
• The tools are free! (C compilers for many of the other micros cost a lot of
money)
• The programming and debugging tools are low cost ($20 will get you started)
With a little work and probably $40 worth of parts, you too can get an LED blinking.
As with any new hobby (also known as a drug addiction), the extra cost of 'goodies'
can grow very quickly.
You want to play microcontrollers today?
With any IC, you need to power the thing. There are two power connections on basic
micros : VCC and GND. What the heck is VCC? This is the label for the positive
voltage. Don't worry, after a few days of this, seeing 'VCC' will become very normal.
GND is short for ground. All electrical current needs a way to flow back to ground.
This can be called 'common' but is often just labeled GND.
There are thousands of different micros out there, but 5V (five volts) is the typical
VCC. 3.3V is also typical but you'll also see 2.8V and 1.8V VCCs on more exotic
micros. For now, just worry about 5V and GND.
Where do I find this 5V?
You can get all the parts for this lecture here.
You need to hook up 5V and GND to your micro. Your house outlet runs at 110V AC
(or 220V for many countries). AC = alternating current and is very bad for 5V DC
(direct current) micros. So you'll need to convert the 110V AC from your outlet to a
useable 5V DC.
Quick note: If you reverse the connection on your micro - bad things happen.
Always make sure your 5V power supply is connected to the VCC pins and GND to
GND. If you reverse this and connect 5V to GND on the micro and GND to VCC on
the micro, things won't explode, probably no smoke, things will probably heat up
like crazy, and you'll probably damage your $2 micro. You probably will. I did. Many
times. Try not to do it.
Ok! You need 5V. Time to build a simple voltage regulator circuit!
You can buy something called a 'wall wart'. Don't ask me why they call it that, ask
google. A wall wart takes a higher voltage and converts it to a lower voltage. DO
NOT assume a wall wart labeled '5V' will output 5V. This is a major misconception - I
know, I know, faulty advertising. Just hook up your multimeter to the barrel plug and
see what voltage you read. Probably more like 8 or 9V. This will kill your micro so
keep reading! For a more detailed explanation check out the Unregulated Power
Supply Tutorial.
Let's assume you are using a wall wart with an output of something nice like 9V.
Dandy. Unfortunately this 9V output is rather noisy - meaning there is a lot of ripple.
Ok what does ripple mean? You want a DC voltage meaning you want a solid
voltage (the opposite of alternating). A wall wart uses some cheap tricks to get
110V AC down to 9V DC. So the DC signal coming out of the wall wart tends to
alternate 100-500mV. Instead of a solid 9VDC, you see a signal that rises and falls
between 8.5 and 9.5 volts. This 'ripple' can cause havoc with your system, and 9V is
too high (we need 5V!) so we need to pass 110V through this wall wart, and send
the 9V through a regulator to get down to a clean 5V DC signal. If this all sounds
scary - don't worry. After you get your 5V power system built, you'll wonder why
you were scared in the first place (it's simple, I swear).
The most common regulator is called the LM7805. Why? I dunno. I've never actually
touched a component with LM7805 stamped on the outside. There's always other
letters stamped on the outside like 'LM7805' or 'LV78X05' or some such crazyiness.
Just know that there are many many manufacturers out there and they are all
producing the same basic part, with small tweaks to each one. What you need is
one of these generic parts that is designated as a '5V linear regulator'. If you're
playing in a breadboard, you'll also want it in the TO-92 or TO-220 package. More
about packages in a later lecture, just go with it for the moment.
You've got your regulator in hand, you've got the wall wart. Time to connect them
up.
Here you can see the 'pin-out' of the LM7805. Say 'IGO' in your head and commit
this to memory (input, ground, output). You'll probably hook up a lot of these. When
in doubt, always check the datasheet before hooking up a new part - or else be
close to the on/off switch! Input is the input voltage of anything greater than about
7V. GND is ground. Output is the 5V output pin. Your wall wart should have two
wires. One is 9V, the other is GND. All grounds need to be connected together for
current to flow across the system. One more time - connect all grounds. This is the
#2 reason why novii can't get a system to work. For our breadboard, we will be
inputting 9V (or whatever transformer you've got up to about 15V) and outputting
0V (GND) and 5V to our breadboard rails.
We are going to go through a bunch of iterations of the power supply, adding parts
as we go. Shown above, we have a basic regulator configuration. 9V in, we should
see a rough 5V on the output.
Schematic note: The two ground pins are not shown connected. We assume that
nets (the green wires) of the same name are connected together. Schematics can
get big and complex, so you won't see all the wires together, but in your
breadboard you need to connect all the GND pins together. In this case it's the GND
wire from your wall wart connected to the GND pin on the regulator.
Cool. But why doesn't the multimeter read 5.000V? Electronics are not that good.
The cheap-o regulators are +/-5% tolerate meaning you'll see between 5.25 and
4.75V. In practice, you should see between 5.1 and 4.9V with most run of the mill
regulators. You can of course spend many $$ and get tighter tolerances but 5.1-
4.9V will work fine for our purposes.
Now we should be worried about ripple. There is noise coming in the input pin, the
regulator tries hard, but some of that noise gets onto the output pin. Your
multimeter says 5.08V, but that's because it's averaging many readings together
and showing you only the average. Do you know someone with a oscilloscope? If so,
show them this tutorial and ask them to show you the noise on your 5V rail. With no
filtering caps, you could see as much as 200mV of noise.
Whoa - what's a filtering cap? Filtering capacitors are large bulky capacitors that
help smooth out ripple. There've been lots of analogies about capacitors so here's
another one for ya:
Capacitors act like water tanks. When your circuit pulls a bunch of water out of the
system, the capacitor helps hold the voltage up temporarily until the power system
can catch up. For example: you may live in a city with water and water pressure. If
you take a shower you affect the pressure in the municipal water system ever so
slightly. If everyone turned on their shower and flushed every toilet in the city, odds
are the water pressure would fluctuate quite a bit! A big water tank helps minimize
these pressure fluctuations. A big cap helps minimize the voltage fluctuations on
your breadboard.
Is this something you can see happen? Unfortunately not really. You can probably
run your system without filtering caps, but it's not good engineering practice. Give it
a whirl without caps! But when things don't work, you'll wonder if it's the caps, or
your code, or your timing, or maybe you blew out the sensor. Too many unknowns
will make you crazy. My recommendation: just use a couple basic caps...
100uF (one-hundred micro farad) on the input and 10uF on the output. You will use
a lot of 100uF and 10uF around power systems and you will eat 0.1uF (point one
micro farad) caps like candy around micros. These two caps should smooth the
input into the regulator and will smooth the output nicely.
Capacitors cannot deliver their stored energy instantaneously. Larger caps (1ouF
and 100uF) store more energy, but they react more slowly. The smaller the
capacitor, the faster it can deliver its stored energy. If you have a large power
outage (power dips for 10-100ms), a big cap (100uF to 1000uF) will help 'hold up'
the falling voltage. A smaller cap (0.1uF) will help suppress higher frequency noise
and shorter power dips (noise in the 1us to 100us range). Therefore, 0.1uF caps are
located near the microcontroller to help with short bursts, where 100uF and 10uF
caps are used on the power rails.
Now you see the schematic symbol looks a bit odd. What's with + and curved lines?
This schematic component is indicating that the 100uF and 10uF cap are polarized.
Oh jeebus, what's that? Time for a capacitor breakdown:
• Electrolytic caps: These are larger caps capable of storing 10uF to 1,000,000s
of farads. They are cheap and great for bulk capacitance. They are polarized
meaning there is a positive pin and a negative pin.
The cap has a minus '-' sign on the cover indicating that pin needs to go to GND.
• Ceramic caps: These are the cheapest and most common cap you'll play with
on a breadboard. They are NOT polarized so you can stick em in the
breadboard any way you want. Ceramic caps cannot handle as large of
capacitance as electrolytics so you'll need both on your breadboard system.
• There are many more different kinds of capacitors but for the sake of your
head exploding, we won't cover them here.
Okay - now you need to work through some logic here. You know the positive part
of the 100uF cap needs to be connected to the input pin, but only the negative pin
is marked. Yes it's confusing - but you'll get used to it. Negative marked pin goes to
ground, the other goes to the input pin.
What happens if you get them switched? Well here's where things may go poof.
From the left: Bad, good, ugly
This is what happens when you over-voltage or reverse voltage a polarized
capacitor. The middle cap is normal. The cap on the left, you can see the top is
slightly raised up. This is what happens when the electrolyte inside expands. And
the cap on the right shows us what happens when this pressure is so great, it busts
through the metal top. Notice the '+' imprinted into the tops of these caps? That
imprint is there so that if the pressure does build up, the cap will fail like the unit on
the right - rather than blowing the top half of the cap across the room.
This picture was taken from the inside of an old Gateway computer (circa 1999).
Gateway had used some 'marginal' 1000uF/16V capacitors. The /16V means they
are rated to 16V. A 16V rating means they can withstand voltages up to 16V but no
more. These caps were sitting on the 12V rail to smooth out the ripple but obviously
they where failing. Gateway was trying to save $0.50 by using a capacitor that was
too close to the maximum. Manufacturing is not perfect! With any production run,
the population of capacitors and their tolerance looks like a bell curve. The majority
of the 16V rated caps can withstand 16V. Some can 18V, even 22V! But the
tolerance bell curve goes both ways; a small number of the capacitors rated at 16V
will fail at 10V, some at 8V. You get a big enough ripple on the 12V line and you
could pop the 16V rated cap. This is why most engineers talk of 'de-rating'
capacitors. If you have a 5V rail, you do not stick a 5V rated cap on the rail! A good
rule of thumb is to de-rate any capacitor by 50%. So a 12V cap is good to be used
on 6V rail, 24V cap on a 12V rail, etc.
Guess what happens when an electrolytic cap fails like the ones above? They quit
working. In most cases, they 'fail safe' meaning they won't work as a capacitor
anymore but they won't short to ground. The real fun begins when the failure is so
bad that the internals fuse together and you get a short to ground - then you can
have some fun melt downs! In the case of this computer, the motherboard had all
sorts of bad software failures because the power supply had too much ripple! The
big filtering caps on the power supply had failed so the 12V was all over the place.
Similar failures can happen if you reverse the polarization of the cap. If the voltage
is low (less than around 25V) the cap will probably just be damaged a bit. If you've
got a vacuum bell sitting around and you want to really cause some damage, ask a
trained professional to hook up 10V cap backwards to 10,000V. It should
instantaneously blow up like a pop corn kernel.
For your power supply filtering caps, I recommend using a 25V rated 100uF cap
(100uF/25V) on the input and a 10uF/10V cap on the output. Engineers will tell you
to 'derate' the cap by 50% meaning if the label says 100V don't trust it past 50V.
This is generally good practice. Following this idea, our 100uF/25V is good for inputs
up to about 12.5V before we should worry that we may pop the electrolytes. Again,
not mandatory, just don't expect a 5V rated cap to withstand a 9V input.
Back to our power supply! Don't worry about blowing things up just yet, you should
be at low enough voltages you won't do any harm. Again, if things heat
up/smoke/spark, just unplug or turn off the system. Speaking of turning things off -
we need a power switch!
This will allow you to turn on/off the system. Handy. It can get really annoying
pulling and inserting the power wires to power/kill your system.
Inside the small black enclosure, is a switch. The switch has three pins. It looks like
a see-saw inside. The center pin is always connected to the middle of the see-saw
and as you slide the switch back and forth, the see-saw rocks up and down. Slide
the switch forward and the see-saw shorts from the center pin to the forward pin.
Slide the switch back and the see-saw disconnects from the forward pin and shorts
to the rear pin. We recommend you connect power to the center pin of the switch.
When you slide the switch forward, power will short to an unconnected pin and do
nothing (no power to your system). Slide the switch back and the center power pin
will short to the wire running into your regulator, delivering power to your system
(power on!).
Remember all the warning about reversing VCC and GND and how that is bad? Well
if you connect your power supply backwards, that's bad. So let's protect ourselves!
That's a diode (marked D1). A diode lets current flow in one direction (in the
direction of the arrow) and it blocks current from flowing in the opposite direction.
This will allow 9V to flow in the right direction, and if you accidentally hook your
power supply up the wrong way, it will block current from flowing backwards and
damaging your system. Is it overkill? Pretty close. But we always design them into
our development boards because we don't know what type of power supply you
knuckleheads (also known as our paying customers) will plug on to our boards. If
you plug the wrong type of wall wart onto a board, we want to protect you from
yourself.
There are some down sides to a protection diode:
• All diodes have a voltage drop, meaning 9V on one side will drop to about
8.5V on the other. So your 9V wall wart just became 8.5V.
• Diodes have a current rating. If you try to suck 1A (1 amp) through a 0.1A
(one hundred mili-amp) rated diode, the diode will quickly heat up and fail. For
reverse protection, we recommend a 1A 1N4001 diode. These are dirt cheap
and very common.
Note that diodes are polarized. They have a direction that you need to pay attention
to. Many diodes have a band indicating the cathode. What's a cathode? Go google.
All you really need to know is that the line on the schematic part is the same as the
line on the diode. If you can't remember which is which, remember 'arrow is for
anode'. Cheesy, yes.
So if you want to install this 'reverse protection diode', the 9V from your wall wart
goes into the end of the diode without the band (the anode). The banded end
(cathode) goes into your switch. Your switch then goes into the input. Throw the
switch and you should see 5V on the output using your multimeter. Nifty. But I am
tired of using my multimeter each time to check the 5V output. There must be a
better way! Time to wire in the power LED.
Light emitting diodes (LEDs) are bits of silicon that light up when current flows
through them. Go google for the science. As a general rule of thumb, LEDs can have
20mA max current flowing through them before they begin to fail.
So if you hooked up your LED like in the above schematic, it would light up very
bright for a split second and then burn out. That's cause the LED is a diode and the
current will flow from the anode (arrow) to the cathode (line) to ground -
uncontrolled! The silicon will flow current at something like 1 amp for a split second
and burn up. To limit this current flow to 20mA, we need Ohm's law. Yea, the book
worms in the room suddenly perked up:
V = IR (this is Ohm's law)
If we have 5V, and we only want 20mA flowing through the LED:
5V = 0.02 * R
R = 250 Ohm
Now this is not completely true because the LED has a forward voltage drop, but
don't worry too much about that. Hooking up LEDs is very common with micros. All
you need to remember is that you're going to need to limit the current. The most
basic way to do this is with a resistor. 220 Ohms will work (LED will be brighter),
330Ohm is also good (LED a bit dimmer), 1K (1000) will work as well. 220, 330, and
1K are more common resistor values.
I highly recommend you get your hands dirty. Hook up an LED to a 1k resistor, then
a 330, then a 220, 100, 50, then finally blow the thing up by hooking it with no
resistor. That was fun right? Good. You had a back-up right? Once the bit of silicon
inside the LED is burned out, it is no good and the LED can be thrown away.
An LED
Do you see the arrow? Do you see the flat line? A is for arrow. A is for anode. The
physical LED will have a flat side corresponding to the flat line (the cathode) in the
schematic picture. And there you go! When connecting an LED, you know that
diodes only pass current in one direction (from anode to cathode - in the direction of
the arrow!) so the flat side of the LED needs to be connected to ground some how
(usually through a resistor first) and the other side (remember arrow) is the anode
and needs to be connected to power for current to flow. If you hook it up backwards,
it won't turn on, and you might damage the LED but probably not. Just verify that
you've got 5V on the correct rail and then flip your LED around if need be.
This is how the PTC looks in circuit. The PTC is wired in line. As the current of the
circuit flows through the PTC, it will trip if the current is too large, cutting off the
rest of the system.
ATmega8 (works the same with ATmega168, and 328) straddling the middle row of
the breadboard
You will need to slightly bend in the legs of the DIP (dual inline package) to get the
ATmega to straddle the breadboard center. Be careful! Do not bend the pins too far
inward. The pins of the ATmega should insert into the inner two most rows on the
breadboard. I find it best to to insert one side and then slightly push the IC sideways
until the other side of pins can insert into the opposite row on the breadboard.
Confusing, I know.
Note: The 5V 'rail' is the horizontal row of holes next to the red line. You should
have a wire connecting your 5V power regulator circuit to one hole on the 5V rail.
This will energize all the holes next to the red line with 5V. This is true about the
blue line as well. All the horizontal holes next to the blue line are connected
together. One of these holes should be connected to the ground pin on your voltage
regulator, and to the ground connection of your wall wart. You can connect the VCC
pins on the ATmega328 to any holes along the 5V rail, and you connect the GND
pins on the ATmega328 to any hole along the blue GND rail.
Oh, hey! If no one ever told you, there is a really simple way to figure out where pin
1 is on an IC. The manufacturer of anything polarized (tantalum caps, electrolytic
caps, LEDs, ICs, etc) will always put some sort of marking on the device to indicate
the how the device is supposed to be oriented. For ICs, there is a small dimple on
one end of the IC. The blue arrow in the picture is pointing to this dimple. The
orange arrow points at pin 1, and the blue labels show how the pin numbers
increase.
Pin labeling on an IC
Counting from the dimple, pin 1 is on the left and increases down the left side of the
IC. The pin numbers jump to the right side row of pins and count up. See image
from the ATmega328 datasheet below.
The ATmega328 should be in the breadboard, pin 7 (VCC) and pin 20 (AVCC) should
be connected to your 5V rail and pins 8 and 22 (GND) should be connected to GND
on your bread board. If you turn your power circuit on, the ATmega328 is now
running, but it has nothing to run!
Actually this is not wholly true - there is one more connection that needs to be
made before the ATmega328 starts running code. The RESET pin on the
ATmega328 needs to be connected to VCC. You can either wire the RESET pin
directly to 5V or you can 'tie it high' by connecting the RESET pin to VCC through a
resistor. This will allow you to add a momentary reset button. What's this? The reset
line on the ATmega328 is exactly what it sounds like - it resets the micro just like
the reset works on your computer. If you look at the ATmega328 datasheet you'll
see the RESET label is written with a line above it. This is nomenclature that
indicates the reset pin is active low. What is 'active low'? The RESET pin is an input.
A low level on this pin will put the micro into reset - i.e. the pin is activated with a
low input, aka 'active low'. So unless you want your ATmega328 to stay in reset,
you'll need to pull this pin high.
Now you need a reset button. A momentary switch is a switch that is activated (or
closed) while you're touching it and open when you release the button. These are
often called 'tactile switches' because they 'click' when you depress them giving the
person pressing the button some 'tactile' feedback.
This is what the schematic part looks like. Notice pins 1 and 2 are connected
together. 3 and 4 are connected together. And when you press 'de button, it
temporarily connects 1/2+3/4 together.
Notice this button has five legs. If your button has five legs, just ignore the middle
leg - it's not connected to anything and can be clipped off.
To test this button, whip out the trusty multimeter and set it to the continuity
setting. This is the setting on nicer, mid-grade multimeters that is crucial to
troubleshooting and experimenting. Touch the probes together - you should hear a
tone indicating that there is continuity or a (nearly) zero resistance path between
the probes. Insert the button into the breadboard and probe the two pins on one
side of the button. If you picked pins 1/2 or 3/4 you should hear a tone. These pins
are permanently connected inside switch. If you picked pins 1/3 or 2/4, you won't
hear a noise - but hit the button. By hitting the button you will make an electrical
connection between all four pins - and you should hear the tone! This means you
have electrical continuity.
The schematic shows pins 1 and 2 of the reset switch connected together
(connected to ground) and pins 3/4 connected together (connected to !RESET) . In
practice, you just need the switch to work. Play with your multimeter and find two
pins that don't make noise when the button is not touched, and do make noise
when the button is depressed. Use these two pins.
The schematic shown above is what we're going for. The 10K resistor 'pulls' the
reset pin high during normal activity. By pulling the reset pin high, the ATmega328
runs normally. When you push the reset switch (S2), the reset pin sees a continuous
connection to ground. Since the resistance through the depressed switch is nearly
zero, it wins (compared to the resistance of the 10K resistor!) and the reset pin is
pulled low, RESET is activated and the ATmega328 goes into reset. Release the
button and the reset pin is pulled high again and the ATmega328 comes out of
reset. Nifty!
ATmega328 pinout
See the dimple from the ATmega328 datasheet? Looking at the top of the IC (legs
down), with the dimple to the top, pin numbers increase starting from 1 in the top
left corner. This is how every IC pin is number. However, the orientation marking
varies a bit between manufacturers and between packaging types. Look for a non-
congruent marking like a dimple, small dot, white arrow, a notched corner -
anything that makes that area of the chip different from the other parts of the chip
probably indicates pin 1. When in doubt, check the datasheet.
Reset wired next to a ATmega8 (same applies for the ATmega168, and ATmega328)
Learn how to use the the continuity setting on your multimeter. It will be vital to
troubleshooting down the road!
Each microcontroller manufacturer has a different method to get code in the flash
memory of the micro. In the past few years there has been emphasis placed on ISP
or "in system programming". ISP allows you to program the IC without having to
disconnect the microcontroller from the application. This is not trivial! History was
much more painful. Atmel has designed a relatively straight forward method that
requires the control of a few pins (6 total). Because of this simple interface, the
hardware programmer that is required to connect your computer to this ISP
interface is very straight forward (cheap!) as well.
Jamming wires into the ISP connector is not a good long-term solution but for the
sake of getting the LED to blink, it'll do. I've cut short wires and stripped both ends.
One stripped end is inserted into the end of the black programming connector, the
other end is inserted into the breadboard.
The AVR-PG2 parallel programmer wired into the ATmega328. I've also wired up two
0.1uF caps. These decoupling caps are placed near the VCC and GND pins on the
ATmega328 to help reduce noise into the IC. You may think you have a straight DC
5V but not really - these 0.1uF caps help reduce ripple on the 5V line. Yes, the
ATmega328 will probably run without them but they're good to have installed.
AVR ISP Note: You really do have to wire all 4 GND pins. You cannot wire just one
of the GND pins on the ISP connector.
Additionally we need an LED to control. This can be tied to any GPIO pin. PC0 looks
like a good spot.
The resistor/LED order does not matter - just remember (from Tutorial 1) that you
must have the resistor! The GPIO pin doesn't actually matter. blink_1MHz.hex will
toggle all the pins on all ports so you can hook the resistor to any pin. As you add
more peripheral hardware you will want to dedicate some pins for alternate use
(such as TX and RX pins for serial communication).
You're getting closer! Time to program the chip!
Once WinAVR is installed, you should have a few new icons on your desktop.
Programmers Notepad is a nice code editor and highlighter.
What's a code editor/highlighter? When programming, you will need a text editor on
your computer so that you can create (type) code. Once you've created this 'code'
on your computer (inside the code editor) you will pass this code to the compiler
(you will click a button that runs the compiler with the C file you've typed) and the
compiler will create a HEX file (assuming there are no problems or typos in your
code). The highlighter? When creating code, it's often nice to have various parts of
your program color coded so that you can tell a common things like for( ) and
#define. This highlighting helps a lot when programming.
Use whichever text tool you like. Notepad will work, but is pretty rudimentary. I also
like JFE from my PIC days. Both have a 'tools' option which is great but JFE is better
in my opinion because it lists the C functions that you can double click on and
navigate to. If there is a way to do a similar trick in Programmer's Notepad 2, please
let me know! Because Programmers Notepad v2 (aka PN2) comes with the WinAVR
installation, we'll use it!
AVR-GCC is extremely powerful, very complex, and difficult to use initially. I am
used to passing a *.c file to a PIC compiler (CC5x) and getting a HEX file back out.
No fuss, no mess. Believe you me, the pain of getting AVR-GCC up and running is
worth it. AVR-GCC is a truly nice compiler, and it's free. I've included a stock
Makefile and blink_1MHz.c file in blink_1MHz.zip to get you started. I am by no
means a Linux or make type of person. All you need to know is that when you type
'make' at the command prompt, the compiler is going to look for a file called
'Makefile' (no file extension!) and use that file to direct how to compile your C file.
These are the only two files you should need to get blink to compile. Open up
blink_1MHz.c in programmer's notepad and click on Tools->Make All. This is the
same as typing 'make all' from the command prompt from what ever directory you
saved these two files. For example
C:\Code\Blink>make all
should compile your code as well. It's just a bit easier to do this through the
Programmer's Notepad interface rather than toggling back and forth to the
Command Prompt window. Once you have successfully compiled the C file into a
HEX file, you now need to get that hex file onto the AVR. It's finally time to power up
your system! The cheap AVR programmers require the target (that's your
breadboard) to provide power to the programmer (that's the AVR-PG1 or PG2).
Power up your bread board - you should see the power LED come on. From here on
out, I will assume you're using the AVR-PG2 parallel port programmer.
There is only two spots in the makefile that you should be concerned about at this
time. These two spots are located under the programming options section. This
makefile is huge, but scroll down to the Programming Options (avrdude) section.
Now put a '#' in front of lines you want to comment out.
If you're using the AVR-PG1 (serial port programmer) you edit like this:
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = ponyser
ATmega8 with power supply and MAX232 circuit. Eagle schematic / PDF
You may have noticed C9 magically appeared next to the ATmega168 in the
schematic above. This is a 0.1uF decoupling capacitor for the ATmega168. A 0.1uF
capacitor places near the ATmega168's VCC and GND pins will help reduce power
supply noise being injected into the ATmega168. Again, your board will more than
likely run without decoupling caps but I just want to instill in you a habit of using
0.1uF like candy.
This is my cheap-o Sunkko iron. It was under $100, it can solder lead-free solder just
fine, and I use the standard included iron tip. You don't really need a digital read-out
for home use, but do get an iron that has an adjustable temp dial. I set mine temp
to about 350C for leaded solder. Notice my sponge is wet!
A cold iron tip. You can see the barrel and upper area of the iron are discolored by
heat over time. No problem. You do not need an needle-sized iron tip to solder SMD
devices. This is a common fallacy. This tip works very well!
Here's my solder. I stole this from work because 1) It's leaded and we use lead-free
for production. 2) It's 0.020" diameter which is really too thin for production.
Because it's so thin, the assemblers would have to use many many inches of solder
to solder larger joints (like DB9 connectors). Smaller diameter solder helps you
control how much solder goes into very tight pitch joints but it's not magic - it is not
required. Just don't buy the solder at the hardware store that they sell for copper
pipe plumbing, that stuff is ridiculously thick.
This solder is SN63PB37 meaning it's 63% tin and 37% lead. It's also called 'rosin
core solder' because it has an organic core of rosin. As you melt the solder into the
joint, a small amount of rosin inside the core will come out and help the solder flow.
Rosin basically changes the surface tension of the solder allowing it to flow better
(we're talking about liquid metal after all). Rosin will burn off and that's the small
amount of smoke you see while you're soldering. Standard rosin smoke is not
harmful! It has been known to irritate some people's eyes but I've never known
anyone to have a problem with it. When in doubt, get a fan or open a window. Lead
is known to be a carcinogen. In general, don't eat the solder. Wash your hands
before you eat and you should be safe.
This is a 1lb spool which should last me until 2020. $18.95 from JB Saunders.
JBSaunders is a surplus shop in Boulder, CO. They sell some handy tools and
supplies but it's not your standard hobby shop - it can be tricky to get help some
days. Solder aficionados may watch the DOM (date of manufacture) and claim that
solder will go bad at some point. I have no idea. I imagine the rosin may change
slightly over time but this solder is probably good for many years to come.
Here is a hot iron, with a blob of oxidized solder on the tip.
A quick double swipe on the sponge and the tip is clean and shinny. This is the iron
you should be soldering with! Keep your tip clean and shinny. Clean it often. Wipe it
on the sponge every time you take it out of the base. Add a bit of solder to the end
of your cleaned tip to increase heat flow
That's the starters. Soldering takes practice! Just go and get your hands dirty
already.
So let us build up this kit and replace the MAX232 circuit in the breadboard with our
shifter circuit. Always lay out all your parts to make sure you've got everything you
need.
Plated through-hole (PTH) resistors have color bands on them. Surface mount
device (SMD) resistors have readable numbers on them. I can't read the color bands
on resistors to save my life, but your multimeter can! The shifter kit is easy to tell
which is which - there are five 10k resistors and two 220Ohm resistors.
Resistors are non-polarized meaning they can be inserted into the board either way.
You can pre-bend the resistor leads if you like. After the resistor is inserted into the
board, bend the legs out the other way so that it stays in place. Pull out your iron
and solder the resistor from the bottom side of the board.
Hold the iron against the PCB and the leg of the component. Insert solder into this
trio. It should melt as you add it. If not, re-orient the iron to get better heat
conduction. It's not hard, just practice. Once you've got the two joints soldered, clip
off the legs.
Clip off the legs. Don't worry about clipping the legs absolutely flush. Doing so can
stress the mechanical nature of the joint and the PCB.
The kit has various indicators showing the assembler how to orient parts. Pay close
attention to these and the resistor values.
Notice the small pool of solder at the base of the resistor legs we just soldered in?
This is good. Enough solder was applied to come through the holes from the bottom
of the board to fill all the way through the via.
The single diode in the kit is polarized so you'll need to get the orientation right. In
the picture above, the black line on the diode matches with the white line on the
silkscreen.
Soldering the diode like this would be bad. Make sure you get the component flush
against the PCB, within reason. Some components (like the transistors we're about
to solder) ride above the PCB. Solder up the rest of the resistors.
LEDs installed. Note the flat side of the LED matches the silkscreen polarization.
Install the 2N3904 and 2N2906 transistors. Note the flat side of the BJT transistor
matches the flat side of the silkscreen. Make sure you get the correct '3904' and
'3906' labeled parts in the correct spot.
Here is a short video to demonstrate how to clean your iron tip, solder a through
hole component, and clip off the extra leads.
Install and solder the DB9 connector.
You can see now why it would have been a bad idea to solder the DB9 connector
first. The PCB would have been at an angle during soldering.
Solder in the four connection wires - VCC, GND, TX, and RX. Pick your own color
scheme. I only recommend that red and black go to VCC and GND respectively.
Power your board, pound some characters into hyperterminal and verify that you
get an echo. You should see the TX and RX LEDs blink briefly. Congrats! You now
have a serial connection for all your future breadboard prototypes! This should open
up some significant space on your breadboard and allow you to skip building a
MAX232 circuit for future breadboard projects.
In the end, I use the shifter board on all my breadboard prototyping and a
conventional MAX3232 circuit on my PCB designs. Sorry to confuse you so much.
When you solder together as many prototype PCBs as I do, you really want to limit
how many solder connections you have to solder. Inserting through-hole
components for the shifter circuits takes much more time than a MAX3232 circuit. I
also like the MAX3232 circuit because it has fewer parts that could break.
Clean your iron on the wet sponge. Place a blob of solder on one or two pads on the
PCB. Slide the component into the blob and remove the iron. If the IC is not lined up,
or is not flat against the PCB, heat the blob back up and re-align the IC square and
flush against the PCB. You can do this 3-4 times before you start to thermally stress
the PCB.
Once you have the IC to your liking, solder the other pins. Don't worry about
jumpers.
If you have jumpers, pull out the solder wick. Watch the video closely! First I put a
blob of solder on the end of the iron, hold the wick over the jumper, then I hold the
iron w/ blob against the wick. You will notice a change in color of the wick - this is
the solder climbing the wick! The blob on the iron aids in transferring heat and flux
to the wick and jumper. After a few seconds, the blob travels up the wick and pulls
the jumper along with it. Remove the wick along with the iron (do not remove the
iron and allow the wick to attach to the component). The jumper is removed.
Not so bad, right? Now let's solder the diode.
Add solder to one pad. Make sure the white mark on the diode lines up with the bar
on the silkscreen. Slide the diode in, hold it in place while you remove the iron. If
alignment looks good, solder down the other end.
NCP1400 with inductor and diode
The inductor requires a bit more solder and patience. The footprint is pretty tight.
Make sure you slide the inductor all the way over your first pad so that you can
solder the 2nd pad.
Solder on the 10uF cap and 47uF cap. Make sure you get the polarization correct.
Solder in the power switch.
Solder in the AA battery lugs. They will require a bit more heat and time because
they act like heat sinks. Once you have all these power components attached, insert
a AA battery into the power clips. Be sure the '+' and '-' signs on the board match
up to the battery.
Whip out your multimeter, cross your fingers, flip the power switch to 'On', and
measure the voltage across the 47uF capacitor. It should read approximately 5V.
4.8V to 5.2V is fine. If you read something much lower, turn off the board
immediately and check to see if anything is warm. Check your polarization of
components (diode, caps, and battery). Check to make sure all the solder
connections are sound. Touch up as necessary and re-test. Make sure you've got a
solid 5V supply before moving on. Remove the battery to prevent accidental turn on
during soldering.
Time to solder the ATmega168!
Same steps: put a blob of solder on one or two pads as the anchor. Slide the IC into
the molten solder and align the IC. Once you have everything square and flush
against the PCB, remove the iron. Do not worry about jumper, but do not solder
more than 2-3 pads while you are doing this alignment step.
Soldering Side 1: Now that you've got the IC in place, jumper the opposite side like
crazy. Make sure each pin gets heat/solder. Then go back with wick and wick away
the excess.
Soldering Side 2: More of the same. Jumper, and wick away.
Soldering Side 3: If the wick starts to get in your way, cut off the used wick (once it's
silver, it's not re-usable) and throw it away.
Soldering side 4: Same motions, but two of the pins should already have a jumper.
Add solder to all pins like before, and wick away the extra.
The ATmega168 should now be soldered! Congrats! That was the hardest part! Let's
solder the crystal next.
Add solder to an anchor pad, slide and and align the crystal so that you can see
equal parts of all four pads. Solder the other four pads. Be careful not to allow
solder to jumper from the pad to the top cover. The crystal packaging is ceramic
(non-conductive) but the top is metal and will short pads together if you're not
careful. This shouldn't harm the crystal, it just won't oscillate.
All right! We've got the components onto a board and most of the nets connected,
time for PCB layout!
How to copy and paste in Eagle Schematic:
This is perhaps the most counter intuitive part of Eagle. As with any new technical
software, it's like learning a new language. Once you know the intricacies, you'll
love it.
To copy one thing within a schematic is reasonably simple. Click on the 'Copy'
button, then click on the thing you want to copy and that thing (component, wire,
net name) will be duplicated and floating under your cursor. Drop it wherever you
want it.
To copy a group of stuff within a schematic is completely wacky. First click on the
group command:
You are going to create a frame around the stuff you want to group together. Left
click and hold on one corner. Drag to the opposite corner. Now release the mouse
button. The items that are part of the group should now be highlighted like this:
Now click on the Cut button. I know you don't want to delete these items - this is
just how it works. Click on cut, move your mouse cursor to the middle of the group,
and left click. Nothing happened right? That's okay. The group of items has been
copied to the buffer. Now click on the paste button:
You should now have a copy of the group of items floating around. Drop these items
wherever you need them in the schematic, or hit escape to return to the schematic
window. I know, very odd but this type of group/modify steps comes in very handy
over time.
This just means that you are trying to put a component outside of the allowed area.
With the Light edition of Eagle, you can only place components in quadrant I (upper
right quadrant), whereas the components show up by default in quadrant II (upper
left quadrant). Just move the parts to a positive X and Y coordinate and you should
be ok.
Starting with our current layout:
The first thing to do is correct the board outline. I don't know why Eagle slightly
offsets the default border.
Make sure you're on a 0.1" grid by pressing F10. Then hit F7 and hold control while
clicking near the origin. This will grab the frame corner and force it onto the 0.1"
grid. Make the bottom left corner sit at (0,0):
Do this for the other three corners bringing them in to make a 1.5x1.0" square
board size.
Now go to town bringing the components into the board area. Keep in mind the gold
color un-routed 'air' wires. The less twisted you make these by creatively arranging
your components, the easier the trace routing will be.
Remember:
• Press F7 to move a component
• Right click to rotate
• Hold control to grab a component at its origin
• Scroll wheel to zoom in/out
Hit the Ratsnest button from time to time to recalculate the air wires.
Here are the components arranged in a basic configuration. Another beef I have
with Eagle is the default colors for the various layers make it impossible to see what
is going to be printed on the silkscreen layer. Let's change the 'tPlace' layer to pure
white and change the 'tDocu' layer to lemon yellow.
Click on the 'Display' button, scroll down to layer 51 and double click on the gray
box next to 'tDocu':
Then click on the gray 'Color' box and change it to something interesting like lemon
yellow, then click ok. Anything you do on this layer will now be yellow. Do the same
for layer 21 'tPlace'.
Now this is starting to make sense! Anything in yellow is just there to indicate
physical size. The yellow part of the USB connector is only there to indicate that the
connector sticks over the edge that far. Only the white part of the USB connector
footprint will actually show up on the silkscreen print on our PCB. Anything in light
gray (tNames and tValues layers) will not print on the silkscreen layer. They're just
there for your own reference. We can of course change how the various layers are
processed (and include the value and name layers on the silkscreen) but this can
cause a lot of squeezing and hassle. It's up to you and your design but we will leave
the part indicators and values out of this layout.
The next thing we need to do, for all PCB layouts, is to add stand-off holes. These
holes will allow you to insert a simple screw and hold a stand-off in place. Without
standoffs, PCBs will sit uneven against a flat surface (because of the bumpy solder
joints protruding on the bottom of the board). Having a PCB sit flat against a surface
is also a bad idea electrically - I've sent $200 up in smoke because some bits of
clipped wire shorted against the bottom of my board when I was troubleshooting it.
I like to use 4-40 screws and 0.25" diameter plastic standoffs on everything. These
4-40 screws need a 0.13" diameter hole and the standoffs have a 0.25" outside
diameter that we will need to take into account. If you have not already done so,
add four of the 'Stand-Off' components to the schematic (and therefore PCB). This
component was created to couple the 0.13" drill with a keepout ring. This keepout
ring helps show were the screw head will fall. If you fail to take this keepout layer
into account, the screw will go through the hole, but the screw head may run into or
short components.
Throw four standoff holes around the corners of your board.
Ahah! Now I see why I made that keepout circle. You can see where the standoffs
would have run into the USB connector. Looks like we've got some bumping to do...
By using the group (Alt+F7) and the move (F7) commands, I increased the border to
1.5x1.2" which is a bit bigger than I would like, but for the purposes of this tutorial,
we're not going to stress tight packing of components - rather we want to stress the
basics for a good PCB. Notice how I flipped and dropped C3 and C4 down a bit? Time
to add labels!
A 'C2' label is handy when you're populating a board or when you're troubleshooting
a complex circuit, but on a day to day basis, you probably won't need to know
where C2 is. On the other hand, the TX and RX pins will probably be used every
time you use the board! You really should label anything that will be connected to
the outside world. To add a text label to a pin, click on the 'Text' button:
A window will pop up asking you what text you would like to add. Type 'TX' and
press enter. You will notice that the text may be appearing on an odd layer. Be sure
that you add text on the tPlace layer.
Drop down the layer menu and select tPlace for top silkscreen text
Once you've placed 'TX', press escape. Eagle will now show the text window again.
Enter 'RX' and press enter. Repeat for RX, VCC, and GND. When done, press escape
twice to return to the layout window.
In this case we have VCC/GND/TX/RX to label:
To check which pin is connected to which net, hit the eye button and click on a pin.
Checkout the text at the bottom of the Eagle window - pin 1 is VCC. Do this for all
the pins and arrange the labels accordingly. You should also take the font size down
to 0.05:
To change the font size, click on the Wrench ('Change' button), select 'Size', then
0.05. Now click on each text that you want to change the size on.
Labels in place and lined up
Try to get all the labels with the same vertical and horizontal alignment. This is a nit
picky aesthetic thing, but it shows on the final board.
You will have many board revisions. It's always good to add a date code to the
board so that you can match your files to the board version in hand. Add text to the
bottom copper layer to an inconspicuous spot. The easiest way to do this is to add
text to the top copper layer then hit the mirror button (you can also hit the scroll
wheel on the mouse to move the component to a different layer). This will
automatically mirror the text and drop it to the bottom layer.
6-3-07 mirrored, on the bottom copper layer, and underneath the USB connector.
There shouldn't be any signal traces in this part of the board so we're not wasting
space. You could add text to the bottom silkscreen layer but some fab houses don't
allow bottom silkscreen (it adds an extra printing step).
Also add some text to the top silkscreen layer indicating what the board is, what it
does, who made it, etc.
Above is the completed board ready for trace routing.
Many people swear up and down that an auto-router is a bad idea. It may be, but if
we're not concerned about trace impedance or high speed signals, an auto-router is
a great way to whip up protos. Spend your time innovating, not routing mundane
traces.
To auto-route the board, click on the 'Auto' button. The defaults are all fine except
for the 50mil grid:
Change the Routing Grid to 8 (our fab house uses 8 mil traces and spaces).
Once you're good and happy with your PCB layout (there is no turning back after
you submit the files!), click on the CAM button to bring up the processor. This
window will allow you to do different things to different layers. Eagle comes with a
couple default *.cam files. The most common ones are the gerb274x.cam and
excellon.cam. I got tired of running two seperate processors. I am also a hold over
from Protel and a different naming convention so I created my own single file CAM
processor. You can snag it here. The sfe-gerb274x.cam is based on the default
Eagle file with a few tweaks:
• Layers are renamed for easier reading - top copper, bottom silkscreen, etc.
• All the mirroring is turned off - this will make gerber inspection much easier
• A top paste layer was added in case you want to create a solder paste stencil
• Excellon drill file is created along with the 6 magic layers
• Drill file is 2:4 Leading (remember this!)
What are these magical layers you ask of? Anytime you transmit a PCB layout to a
fab house, you need to pass them 7 files, and 7 files only:
• Top Copper (GTL)
• Top Soldermask (GTS)
• Top Silkscreen (GTO)
• Bottom Copper (GBL)
• Bottom Soldermask (GBS)
• Bottom Silkscreen (GBO)
• Drill File (2:4 leading - remember this)
What is this GTL, GTS? These are the file extensions that the CAM processor will
produce. A silkscreen is also called an 'overlay' (hence, GTO). And for your
reference, a soldermask is also called a solder 'stop layer' because the soldermask
prevents solder from being where it is not wanted.
Some fab houses will charge extra for a bottom silkscreen layer. You can just ignore
this layer if you need to. You will also see a GTP file extension. This is the Gerber
Top Paste file. You can use this file to get a solder paste stencil cut it you want. One
would think that a GTP file would be the same as the GTS (top soldermask file). But
no!
On the left, the soldermask layer. On the right, the top paste layer. The soldermask
layer exposes the pads and the vias. You wouldn't want solder paste in vias! So the
paste layer only has the SMD component pads exposed.
To create these layers, click on File->Open->Job
And select the sfe-gerb274x.cam file. Then click 'Process Job'. Some status bars will
blink by, and within a few seconds, you should have a handful of extra files in your
project directory:
The magic 7 gerber files
Something I highly recommend is to review the gerber files before submitting them
for fabrication. Viewing just what is going to the fab house can exposed potential
problems that were shrouded before by all the extra layers and graphics in the
Eagle layout window. There are some free viewers out there that will let you view
the gerber layers together. Most of the free viewers require you to enter an email,
require 15 seconds for them to advertise at you, limited to one layer, or other really
annoying limitations. Luckily, Viewplot still exists. This free program will let you
open and look at your layers easily and you don't have to fill out any silly forms to
get to the download link! Be sure to select the drill file type '2:4 Leading' to
matchup the holes to the layers.
Simple
But oh wait, what is that?
With the magic of television, I can jump 20 days into the future and show you...
In the flesh
It looks great! Time to whip out some parts and the soldering iron.
Assemble your new board!
Soldering was not too bad. Silkscreen looks good. Standoffs look good. Time for
testing!
Always assume a proto will short out the first time you use it. Be very cautious and
be ready to kill power immediately. Plugging this board onto the computer - guess
what happens?
Uh-oh
What went wrong? Nothing is heating up. Nothing smoked or popped. The FT232 IC
doesn't seem to be enumerating onto the USB bus. But why? Let's check the
schematic one more time...
FT232 Breakout v1.0 Schematic
Son of a... This is why we prototype! Mistakes like this happens to the best of us.
What is the problem you ask? Checkout the GND pin on the USB connector. It's not
connected to anything. Without a ground connection to the board, no current can
flow, the FT232RL will never enumerate. The board is shot! Or is it?
Once you have everything selected (everything should be highlighted red), press F7
and right click to move the group over the center cross. In my example part, I the
right side was one block too far over so I sucked in the right side one square.
The image above shows the part centered and symmetrical.
• NEVER change the grid size in the library editor or in the schematic layout
editor. Leave it on 0.1inch steps and don't use the alternate 0.01 step. If you
do, you won't be able to hook wires to the pin tie points.
Name and Value tags are always nice. Click on the text button and type '>NAME'
and '>VALUE'. (Ok I lied. It's okay to use the alternate step size when moving
around non-critical items like text. Hold the Alt key down while your placing the
Name and Value tags to get them where you want them):
Once you have Name and Value placed, you'll notice that these are red when they
are normally gray in color. Be sure to modify what layer these two strings are on.
We need to change the >NAME tag to the Name layer, and >VALUE tag to the value
layer. To do this:
Click on the wrench, then Layer.. Choose the layer you'd like to change the object
to
Here is the final schematic part, centered and happy. If you want, you can change
the pin definitions to indicate which pins are inputs, outputs, pwr, etc. I find these
settings useful in a handful of situations. This is a simple enough part, we'll skip it.
Now for the footprint. Remember, when in doubt create your own footprint. Trusting
anyone else' footprint without scrutinizing it closely is a very bad idea. If you're
lucky, your datasheet will include a recommended footprint for the part you are
working with. If it does not, google for the words 'recommended land pattern SOT-
23' or whatever package you are looking for. The words 'land pattern' is the key.
Lucky us! The NCP1400 datasheet has a recommend footprint:
This takes some getting used to. There are two numbers from every dimension, and
not all the dimensions are indicated?! Lower left corner shows mm/inches meaning
the top number is the dimension in mm and the bottom number is that same
dimension in inches. Sorry folks, it's a metric world. More and more devices are
spec'd in mm only (connectors, ICs, etc). From the Library editor, click on Package
and let's start creating the footprint for this device. This is actually a pretty common
package type called SOT23-5, so let's use that name:
Let's start with the easy pad - pin #2 will be located at (0,1.2). Before we can start
moving pads, we need to adjust the alternate grid so that we can get the the side
pads to 0.95mm. Click on the points/grid box:
Change the Alt: box from 0.1 to 0.05 and click on ok. Now lets move pin 2. In the
work area, press F7, then hold control and click on a pad:
F7 issues the move command. Holding control while clicking on a pad causes the
pad to try to center to the cursor (this way you know that the coordinates displayed
in the upper left task bar are displaying where the very center of the pad is at and
not where your cursor may have been off when you first clicked on the pad).
Because the pads are locked onto the 1mm grid, you'll notice the pad jump from
3mm to 4mm, etc. While holding control, hold alt as well. The pad should now jump
on the alternate grid of 0.05mm instead of 1mm. Important buttons to know:
• Again, the scroll wheel will zoom in/out
• Clicking the scroll wheel will drag the work area around
• Holding the shift key will allow you drag the work area further
To position this pad to (0,1.2) I literally had to:
1. Hold Control and click on the pad
2. Hold Alt, Shift, and control with one hand
3. Scroll in with the scroll wheel
4. Click+drag the scroll wheel to get the work area centered
5. Release Shift
6. Move the cursor to position (0,1.2) (Remember to hold alt!)
This sounds really scary but after creating two footprints, you'll have it down
without thinking about it.
Nifty
Press F4 and click on each pad renaming them to match the datasheet numbering:
Did you number them wrong? Double check. Make sure you get it right! We need to
add a dimensional layer to indicate the size of the device. This is different than a
silkscreen indicator. I like to use layer 51 (named 'tDocu' meaning top document
layer?). This layer will only be displayed while we're playing on the layout window
and won't show up on any production files. This allows us to display the physical
size of awkward parts, hopefully avoiding collisions between bulky parts when we
go to populate the PCB.
Why should be even care about these layers?
Here is our NCP1400 (label U4) next to three capacitors. See how crazy board layout
can get? Notice C1 is next to U4 but the distance between them looks ok? When we
add in the tDocu layer:
Whoa! That cap is way too close to the body of the NCP1400. You might be able to
get those two components soldered onto the board, but it would be a mash up job.
We need to know the rough physical outline of components during layout. To do
that, we need to add a frame to our footprint.
Before we add lines to our footprint to indicate the physical size of our part, let's
change the layer color - gray is a horrible color to try to see! Click on the 'Display'
button, scroll down to layer 51 and double click on the gray box next to 'tDocu':
Then click on the gray 'Color' box and change it to something interesting like lemon
yellow, then click ok. Anything you do on this layer will now be yellow.
Click on the 'Wire' button. Select layer 51 (this layer will be yellow in the drop down
box the next time you close/open the Library editor).
You should now be able to lay down yellow lines. Put four of them down in a box:
Press escape to stop drawing. Now we need to move the edges of the box to the
outside edge of our part. Checking the datasheet again:
Ahh manufacturing tolerances. They can't really tell us how big the B and A
dimensions will be, so I always pick a value in the middle of the min/max. A = 3mm,
B = 1.5mm. Remember we have to center the frame so the upper right corner of
the frame will be at (1.5, 0.75).
Now go back to the footprint, press F7 to issue the move command. Hold the control
key and click on the upper right corner of the frame. When you do this, the 1 pad
may light up - this is because Eagle does not know which part you are trying to
move - the pad or the line? If you left click, Eagle will begin moving the 1 pad
because it is highlighted. Right click and the frame should highlight. Now left click
and you should be moving the upper right corner of the frame. I know, its really
confusing at first. It's actually really handy once you're used to it!
Once you've got the corner at (1.5,0.75), left click to anchor the corner at that
location and adjust the other three corners.
I can almost see it now! Notice how the part extends past the edges of the pads? If
we would have put a component (like an 0603 resistor) next to pads 3 and 4 the
two component may have been bumping into each other. Electrically, the layout
would have been fine but when we would go to populate the PCB, this regulator
might have been right up against the neighboring part.
Finally, I highly encourage you to add a bit of silkscreen to this part. What does a
board look like without silkscreen?
Can you tell where the components go and how they are supposed to get oriented
without a silk indicator? I can't.
Add a little silkscreen and it's suddenly very apparent where the NCP1400 is
supposed to go.
When you get a PCB with nothing but silver pads, the 4/5 pads on this part look a lot
like the spot for an 0805 capacitor! Select layer 21 tPlace. You may notice this layer
is gray as well! I hate gray. Re-color this layer to white. When you get your PCBs,
the silkscreen is white, right? Might as well make them agree.
I zoomed way in, held alt to get onto the alternate grid, and ran the line from (-0.25,
-0.75) to (0.25, -0.75). You really do not want to put silkscreen across your pads.
This will negatively affect how the pads react to solder. It would foul a board or
anything, it's just best to keep the silkscreen layer away from pads. You could butt
the white line right up against the pad, but the silkscreen layers has the worst
tolerances and the greatest skew. The white lines in your beautiful layout could end
up a couple mm to the left or right when you get your PCBs from the fab house.
Besides, 0.25 is such a nice start/finish number!
Create silkscreen lines for the sides as well. Don't worry about itty-bitty silkscreen
lines inbetween the upper pads or the little corners. Very small silkscreen lines will
either be ignored by the fab house or else they will just flake off.
When we laid out the tDocu layer, the wire thickness was 0.127mm or 0.005".
0.005" is also pronounced as '5 mil'. Time and time again, you will hear that fab
houses can handle 8 mil traces and 8 mil spacing for their basic service (aka their
cheap service). This means that no trace can be less than 0.008" in thickness and
two traces cannot be closer than 0.008" to each other. Well guess what thickness
our silkscreen traces are? The 5mil tDocu lines don't matter because they will not
be printed or fabbed, but the 5mil silkscreen traces may give some fab houses fits!
The fab house may increase the line thickness to 8mil, they may try to print the
5mil line as is and have it come out very thin with no weight, or they may not print
it at all! Let's alter the thickness of the silkscreen lines to 8mil so that we are kosher
with any fab house.
We're switching back to Imperial units! Press F10. Next click on the wrench, width,
and '...':
Why doesn't Eagle have 8mil listed? I have no idea. Enter 0.008 into the box
prompt. Click on the three silkscreen lines:
It looks a bit odd, but once you see it on a PCB, it will look great! The last things we
need to do (I promise!) is to add a >NAME and >VALUE tag. Review the schematic
component section to see how to do this in detail. Add two strings ('>NAME' and
'>VALUE') and then modify the layers for these two strings to tName and tValue
respectively.
And we're done with the footprint creation for this one part! Now you see why
engineers and companies hoard their libraries. The first couple footprints you create
will be totally botched and will probably kill your PCB layout. But once you get a part
created, and you use it once or twice successfully, the part will be proven and you'll
never have to worry about it again! With a collection of 20-30 known good parts,
you'll be able to whip up very reliable PCBs in surprisingly little time.
To finish this part in our library, we need to relate the pin numbers on our footprint
to the pin identifiers on our schematic part. Save your library and click on the
Device button:
Name the new device NCP1400 and then click on the Add button:
Drop the schematic part in the center of the work area. Hit escape twice to get rid
of the part window. Now click on the 'New' button in the Package area:
Double click on the SOT23-5 listing.
Notice the yellow exclamation point in the Package area? This means that a
footprint is associated with the schematic part but the pins have not yet been
assigned. Double click on the 'SOT23-5' text in the Package area:
Review page 1 of the NCP1400 datasheet to know what pins connect to what pad
numbers:
Double clicking on a given name on one side will assign it to the highlighted choice
on the opposite side. You've done a great job up to this point! Double check that
your pad assignments are correct!
Right click on the Package name and click on Rename. Various different footprints
can be associated with any given schematic part. To differentiate between parts,
you can give the pin assignments different names. I mis-use this function a bit. I
often name variants 'SMD', 'A', 'B', '8', '10', or in this case 'NCP1400'. Pick your
poison.
It's ok if you do not give this device a variant name, but if you leave the default
variant name as " and then try to add a new pad assignment you will get the
"Package variant " already defined!" error:
Just rename one of the variants to a different name so that Eagle can add this new
variant with the default " name.
Now let's add this newly created part to our schematic. Close the library editor and
go back to the Eagle Control Panel. Click on File->New->Project. Name this new
project - in this example we'll do 'Simon'. Right click on the Simon project and
create a new Schematic:
The schematic editor should open. Now go back to the Eagle Control Panel and open
your new Library:
You should see the NCP1400 part and the SOT23-5 footprint. Highlight the NCP1400
part and in the right screen click on ADD. The schematic editor will pop up allowing
you to place the NCP1400.
And that's it! You now know how to create a component from scratch. Be sure to do
a 1 to 1 print of your layout before sending it to the PCB fab house to verify all the
parts against their respective footprints.