Microcontroller - A Beginners Guide - Testing the USBTiny Programmer and Building
the First Circuit for Programming
So far, you should have all the software installed and constructed the interface
that will provide a convenient connection from the programmer to the microcontroller
(MCU). For the next step, you will need a breadboard (the ones with numbers are
very helpful), an LED, and a resistor of a size appropriate for the chosen LED.
You will learn in this section how to test the programmer to determine if the software
and drivers were installed correctly. You will also learn a little bit about LED
lights, Ohm's law, and the resistance value required for the chosen LED.
To check to see if the drivers and the development software installed correctly,
we will test the programmer with a program called avrdude. Avrdude is a program
that is installed with the latest WinAVR installation, and is responsible for the
actual transfer of the file going into the microcontroller . This is
the .hex file, which is basically the binary code that the microcontroller
can understand and execute. If the test is not successful, the programmer will not
be able to transfer the file--therefore this step is crucial to the whole process.
To test the programmer, follow these steps:
- Go to a DOS prompt by clicking the start menu and typing
cmd.exe in the search box. By the way, if you didn't know, DOS stands for
Disk Operating System. This was a prompt created so computer users would be able
to organize their files on floppy disks, thus making it easy to execute (run) programs
from the DOS Prompt. Prompt means the place where the cursor is located and you
can start typing. The prompt is labeled with the drive letter along with the folder
name separated with backslashes "\". (We called these directories in the past.)
- To execute the avrdude program that was installed with WinAVR, simply type
avrdude -c usbtiny -p m32 at the DOS prompt, and the DOS shell output will
report the success of the connection. The "-c" is a flag that is followed by the
parameter used to specify the programmer (usbtiny), and the parameter following
the "-p" flag is used to specify the microcontroller ("m32" for the Atmega32). If
you are using a different microcontroller, you will need to use the appropriate
specification, as shown in the video for this tutorial.
- To exit out of the DOS window, you can type "exit" at the DOS prompt and the DOS
window will disappear... just like my ephemeral kids in Disneyland!
So, you probably wonder, why can't we program yet! Well, we still need to create
a circuit that the program will control. It would be pointless to simply load a
program into a microcontroller and run it without any devices connected to it. We
wouldn't have much to look at! In fact you will soon see that many electronic components
can be controlled by microcontrollers, however one of the easiest devices to control
is an LED.
"LED" stands for Light Emitting Diode, and this component generally has two leads.
Leads are the metal legs (wires) hanging off of the actual LED itself. These leads
are the polar connections that allow current to flow into the LED from one lead
(called the anode) and then out of the LED from the other lead (called the cathode).
One very important caution about powering and using LEDs: The current running through
the LED must be limited so it does not burn out. LEDs have both a current rating,
and a voltage rating. The current rating is the maximum current limit that the LED
can handle--any higher current and the LED life will be shortened; but less current
will result in a dimmer LED that does not emit light as brightly. So, we are faced
with having to compute the optimum value for the resistor we will choose. Note that
if you don't want to do this calculation for some reason, it is generally safe to
use a 1k--but the light will be pretty dim.
So to calculate the resistance needed, we will use Ohm's law which states that resistance
(in Ohms) is found by dividing the voltage by the current. The formula is:
Resistance = volts/current
This is typically written as R = V / I. But, how do we
find the voltage and current values for the LEDTypically, LEDs are rated
at either 2 or 4 volts, and have either a 10 milliamp (mA) or 20mA current rating.
My green LED has a 2 volt rating. In the website linked in the previous sentence,
white and blue LEDs have a voltage rating of 4 volts. I used the 10mA rating since
it is safer to use this value as it results in the smallest denominator in the Ohm's
law formula, and thus represents the largest resistance value for a given voltage.
Therefore it can be considered the "worst case scenario," in terms of choosing a
resistor to insert into the circuit. Another aspect we will need to consider is
the difference between the supply voltage (the voltage we are feeding into the system),
and the rated voltage of the LED. So therefore the new formula becomes
R = (Supply Voltage - LED Voltage) / I
Therefore in the case of our green LED, R = (5v - 2v) / .01A = 300 ohms. Oh yeah,
you need to convert the current to amps. Therefore we need to divide the 10mA number
by 1000, as there are 1000 milliamps in one ampere. So now, what is this formula
telling us? It's telling us that the resistance is equal to the remaining voltage
after the LED is considered (i.e.; the voltage drop across the LED), divided by
the desired current through the LED.
What is that you say? We got a value of 300 out of that formula, but when I went
to the store I couldn't find that number! I hate to tell this, but the money spent
on gas for that trip could have bought you 40 of the correct resistors! 300 Ohms
is a resistance that is probably not available, but don't lose hope--you can always
use a resistor of the next highest value. I have found this to be 330 Ohms in the
mix of resistors I've collected from various thrown away appliances and electronics.
Now we'll create the circuit, which is pretty simple in this tutorial. The hard
part is behind us (the stuff above), so you can wipe your brow now! Let's use Pin
0 of PORT "B" on the MCU in this circuit, and that just so happens to correspond
to the number 1 pin on the Atmega32 microcontroller I am using. So now we are going
to programmatically turn on that pin to light up the LED.
The steps to create the circuit go like this: Connect the resistor to the pin number
1 (note that saying "PORTB0" is one way of referring to pin B0 of PORT B, but you'll
learn other ways as well). Now connect the other end of the resistor to the positive
side of the LED (i.e.; the anode side, or the lead that is the longest, or the lead
opposite to the flat of the LED). Then we will connect the cathode side to the ground
(GND) pin. The programmer will be connected too of course; which will allow the
program to get transferred into the chip, and also provide power to the microcontroller.
Finally, we can now apply the circuit to the breadboard. The videos demonstrate
all the steps needed in this process. From the accompanying image, you can see that
this is a very simple circuit.
Now apply the circuit to the breadboard. The videos demonstrate this with every
step needed. From the image, you can see that this is a very simple circuit.
Check out the close-up of the resistor and the LED. Can you see how the wire is
connected to the resistor and how the resistor is connected to the LED? After this
circuit is completed on the breadboard, we can start to program and make the LED
light up. Excited? I am!