Introduction: Make Your Own 1x1 22 IO Pin Ardunio Compatible

About: "If you want to build a ship, don't drum up people to collect wood and don't assign them tasks and work, but rather teach them to long for the endless immensity of the sea." - Antoine de Saint Exupéry. I long …
Tested ExtraCore boards and kits are now available for sale from Rugged Circuits.

What is it?

This Instructable will give you all the files and information you need to make your own Arduino Compatible in small surface mount package.

It requires a board manufactured to about 9mil precision. I recommend having the board manufactured at BatchPCB.com, Sunstone.com or your favorite board house.

We will be using a hot plate reflow method. It's pretty easy and the components in this project tolerate the heat pretty well. I have not used a solder mask. Surface tension is your friend, but I did get some speckles on the boards and had to fix up one bridge. So feel free to make one if you know how. Solder masks won't be covered here. Note: The fine commentators over at Hack A Day noted that you can actually do this project with a regular soldering iron using a method called "Tack and Drag." So, if you don't want to get a hot plate and solder paste, you have choices. That's the magic of DIY.

Is this Instructable for you?
If you like Arduino and think you might like to learn how to do surface mount soldering, this is a great project to start with. If you don't know about Arduino, you should get a development board and try it out. This isn't a great beginner's Arduino Compatible. It needs an external voltage regulator and it's small form factor isn't as friendly as the full sized boards. If you ever built a breadboard Arduino you will feel right at home here.

Can I modify this Instructable to do something custom?
You could make an Arduino with an on board compass, or on board robot controls. If you know how to make something work with Atmega328 you can move it on board with these files as a jumping off place.

What good is an Arduino anyway?
Just search Instructables for "Arduino". This clone is really good for adding cores to existing projects or embedding in projects where space is at a premium.

What should I already know?
You should know your way around the Arduino IDE well enough to "burn the blink program" and have some practice wiring up an Arduino with simple circuits. It helps if you can already solder some. If you know how to make PCB's or have ever build a "boarduino" you will be fine.

You will need the ability to open a command prompt in windows (or Linux), change directories and run programs as directed. The directions assume you are running Windows. If you run Linux I have faith you will figure it out.

Is this physically demanding at all?
You will need decent eye sight, a fair amount of hand eye co-ordination and good fine motor control. The griddle is also hot, so parts of this are sweaty work despite being physically easy

Open source goodies
The board is open source with a Creative Commons non-commercial license. You can get the eagle files from GitHub if you want to modify the board or use it as a jumping off point for your own clone.

https://github.com/dustinandrews/ExtraCore

This looks hard but I want one, can I just buy one?
Yep, for sale from Rugged Circuits.

Step 1: Tools You Will Need

Physical Tools
  • Electric skillet or griddle
  • Good ventilation
  • Fine tweezers that are not even a little magnetized. Plastic is OK.
  • Fine tweezers that can take 250 degrees F. Magetized is OK, clearly plastic is not.
  • Magnifying glass. Depending on your eyes, higher magnification might be helpful.
  • Solder paste
  • Syringe or heavy duty zip top bag with a needle hole in the corner for applying paste
  • Sewing needle
  • Soldering Iron (Adjustable if at all possible)
  • Fine solder wick
  • Solderless breadboard and jumpers.
  • 1-3 spare LEDs and 220-1k ohm resistors. (Tools since you can re-use them after this project)
  • Any arduino compatible or ISP known to work with Atmega chips. These instructions assume an Arduino loaded with ArduinoISP
  • A PC, these instructions assume windows. Linux will also work for sure.
  • 5v FTDI breakout or cable or know how to do without.
Software

Note: You can use another bootloader if you wish, but you are on your own for burning the fuzes correctly. Messing up the fuzes can brick a chip, and the on board resonator will make it impossible to recover with even a high voltage programmer.

Step 2: Get the Circuit Boards

Note: If you used the files to get a board before 5:00PM PST August 5th 2010 the header holes are a little too small. You can use them, but you will need to sand or file the headers down a little. Alternatively you can make your own headers out of stiff wire, like the legs off through hole components. Sorry for the bad design upload.

You can now get a board with all the electronics from Rugged Circuits for $10.

If you want to have a circuit board made you have to DIY or send it to a "fab house." These services require design files in a compatible format. "Gerber" is a common format that the Eagle software I used outputs and just about every board manufacturing service accepts.

The Gerber files I used are attached to this step. You can also get the Eagle Files from GitHub and make your own Gerber (or whatever) files if you need to modify the design. You can send the Gerbers to a fab house like BatchPCB or www.sunstone.com. I have used both. BatchPCB will cost about $13 not including shipping for one board and it will arrive in about a month. So far they have always sent me 2 boards when I ordered one, but I have had one board (of the two) have problems. Sunstone's prototype service costs about twice as much and you will have boards in half the time. I quality of the Sunstone boards is good, but the silk screen isn't as clear as BatchPCB with the same Gerber files. The price at Sunstone is the same for one or two boards so go ahead and get two.

If you want, you can order boards from BatchPCB via files I have already uploaded here.

(For the adventuresome an Untested version using 0805 sized components. Big thanks to RugedCircuits.com for help. You will need different parts than the ones listed in the next step as well and the layout is a little different.)

If you want to modify the design and make your own Gerber files, Spark Fun has a good tutorial and job file.

You can upload Gerbers to BatchPCB and have their DRC bot check them for free, Sometimes the design rules in Eagle show problems that you can ignore, but the "DRC bot" there rarely has false alarms.

There is also great, free online Gerber viewer here: http://circuitpeople.com/

Step 3: Gather Components

Surface Mount Parts
Here are the parts you need and the digeykey part numbers. For items that don't have a minimum of 10, I recomend you get at least 2 and possibly more. If you have 2 good boards, you can make two Ardunio Compatibles. The small parts are really, really easy to lose so having extras is great. Be careful with them when you open the packages.

2x 445-6389-1-ND INDUCTOR MULTILAYER 10UH 0603
2x 490-1198-1-ND CER RESONATOR 16.0MHZ SMD
2x 754-1547-1-ND LED GREEN ROUND CLEAR SMD
2x ATMEGA328-AU-ND IC MCU AVR 32K FLASH 32TQFP
10x 541-10.0KSCT-ND RES 10.0K OHM .25W 1% 0603 SMD
10x 445-1316-1-ND CAP CER .10UF 25V X7R 10% 0603

This bill of materials costs about $15 + shipping at the time of this writing. If you know what you are doing you can make substitutions. All these parts are really standard. Don't substitute the Atemga328 chip unless you are super sure you know what you are doing. This one works, I promise. If you get another I can just about promise the fuze settings I recommend turn it into a tiny coaster.


Recommended Headers
You will also need some standard headers and some right angle headers. I like long headers so you can push them into a breadboard and still put female jumpers on the top.

18 x Standard long Headers
12 x Right Angle Headers

Optional External Voltage Regulation
2 x P5149-ND 22uf capacitors
1 x IFX25001TS V50-ND 5.0V 400MA Voltage Regulator

I have tested this regulator in a bread board with 12v "wall warts". It works great and it has a lot of built in protection. It also has plenty of power to run your Atmega chip and lots of other stuff besides. Remember not to sourcemore than 150 MA directly from your Arduino pins. (That's about 7 LEDs at full brightness.)

Step 4: Put the Solder Paste on the Chip

If you want, you can follow the process outlined at Spark Fun here. I didn't find the need for a solder mask.

Eat a snack, scratch your nose, rub your eyes, go potty and get any other eating, drinking and face touching out of the way for a while. Once you start with the solder paste, you won't want to do any of that till you get a chance to wash up.

Clean the board(s). I like to use isopropyl alcohol. Use the flux on every pad.

This solder paste is lead based. It's great because it melts at a low temperature and is pretty easy to work with. It's bad because it's lead and because it will get on things. Have some paper towels handy. Wash your hands well when you are done. Gloves might be a good idea, but I find they make me slightly clumsier and this is fine work.

If you aren't near sighted (like me) get your magnifier(s) set up so you can use both hands under magnification.

Look at the diagram. It highlights all the pads.

If you have a syringe that is big enough to pass the solder paste but small enough to be accurate, you can put some paste on each pad using that. I have one that sort-of works, but if you find a good size please share.

This method worked better than the syringe for me. Put some solder paste in the corner of a heavy duty zip top bag and put a needle hole in the very corner. Then just use the bag like you are frosting a (very small) cake. Concentrate on getting some paste on each pad. Don't worry if you are a little sloppy on the Atmega footprint. Surface tension will suck the solder into the center of the pads pretty well. You can fix it up with some wick and soldering iron if there are bridges. The size of the hole was key. A needle hole is too small, but you only need to widen it bit for it to work pretty good.

Use the sewing needle to touch up or clean up any spots where the paste didn't go quite right. Be gentle with it, but you can clean up the paste with it pretty well. You have a really wide tolerance for the amount of paste that will work. Go a little sparse on the Atmega footprint and more generous for the other components.

Use a magnifier and inspect your work carefully. Gently use the needle to clean up any messes or bridges.

Step 5: Place Components

If you like caffeine, like me, try to make sure you are midway between doses. It does make you tremble a little and that makes this harder. If you have too little, you might make mistakes. If you don't like caffeine, I admire you but I don't want to be you.

Make sure the cat's or kids can't knock your work on the floor while you do the next two steps. Even someone walking by can cause enough vibrations on some floors to be a problem.

For best results, print out the picture for this step scaled up to the size of your paper on a color printer. There is also a black and white version.

The trick for every component is to gently place it down with the tweezers then push very lightly down to seat it into the paste. Use the tweezers or the needle to nudge crooked parts.

The really small parts come in a strip. Using tweezers or a sharp knife carefully cut them free. These are really easy to lose in the carpet. If you grab too hard with the tweezers they can shoot out and you will never find them (ask me how I know...) . Lucky you listened to me and got spares, right?
  1. The only component on the board with a polarity besides the Atmega is the LED. Look on the bottom and you will see a little green arrow (unless you got some other LED). Match that with the diagram. Put it down in the paste and push it slightly down to seat it.
  2. Next add C3. Make sure it's not touching LED1 and clean any paste trails between them. This is the tightest fit on the board. It works fine with 0402 and 0602, but you need to pay extra attention to this spot.
  3. Next add L1 (the inductor)
  4. Add R1 and R2
  5. Add C1 and C2
  6. Add the Atmega chip. Try to line it up as strait as you can. It will "snap" a little into place, but not as much as the other components. The chip has a circle and a cut off corner indicating the corner near pin 1. The board silkscreen has the same markings. Make sure you get the chip the right way round!
  7. Finally add Resonator Y1. make sure it's not touching the nearest pin on the Atmega chip and any paste between them isn't a bridge.
Use a magnifier and inspect your work carefully. Double check you got the Atmega chip the right way round. Take a deep breath, you have completed the hardest part, but you still have one delicate step to go.

Don't forget to refrigerate your remaining solder paste. You can seal the zip top bag and fold it over to save what is in there.

Step 6: Reflow the Solder

Set up your skillet in well ventilated place on a heat resistant surface. I have a fume extractor. Make sure you won't be breathing the fumes however you set up. Have a bit of wood handy to set the finished board on to cool.

This step is pretty easy and fast. Pay attention so you don't get burned (literally). Read through once or twice so you know the rhythm before we start the dance.
  1. Find a pair of tweezers that you can grab the board by a corner hole with easily. Alternately a thin bit of metal to use like a pizza peal works.
  2. Look under the hot plate and get an idea where the element is. You will have a hot spot here. For this small chip it doesn't matter a lot, but it's good to know.
  3. Heat your hot plate to 375 and wait till it's hot.
  4. Drop the board gently on the hot plate. In 10-30 seconds you will see the solder start to melt.
  5. Turn the chip or move it to the other side of the heating element to get it to heat evenly.
  6. Once the solder is all melted, try to get the chip off in the next 10-20 seconds.
  7. Using the tweezers or your bit of metal gently get the chip off the heat.
  8. Gently set the chip down on the piece of wood. It's still molten and you can knock stuff right off if you aren't reasonably careful.
Wait a minute for it to cool completely and check you work with the magnifier. Check the ends of the components for solder that didn't flow up the end.

If things don't quite look right you can add more paste and heat it again. You can also touch up individual components with a regular soldering iron if you have a gentle touch. I was able to rescue a resistor that put on upside down that way. You might be able to fix a misaligned Atmega chip with tweezers while it's hot.



I don't know how many times you can re-work these components. They datasheets say two or three is the magic number. I have reworked one board four times and it still works as far as I can tell. The LED is probably the most delicate component. You can smush the plastic housing when it's hot. The resistors and caps are really tough. You would have to work hard to ruin them. I have never ruined an Atmega chip with anything but programming the wrong fuzes. Those things are tougher than they have any right to be.

Turn off your hot plate or repeat the steps for chip #2-#n. Put your new board in a safe place and go wash your hands and take a break. You earned it! Congratulations on becoming a surface mount pro.

Step 7: Fix Up Any Problems

If there are solder bridges anyplace, they can be tricky to fix. You might be tempted to add some flux and reheat the board. I tried that and it didn't help at all. In fact I just made things worse.

Just get some small solder wick, put some flux on the end and put it on the problem area. A quick heat with the soldering iron and it's fixed. Turn it down a little from where you would solder through hole stuff.

Step 8: Add the Header Pins

You need some way to connect the arduino to the outside world. This is the recomended breadboard configuration.
Once you solder the headers, re-work on the skillet becomes impossible. So make sure you are happy with that first. I know it's a chicken and egg problem since you need to test it before you can be sure you are happy. Use spring headers or tiny alligator clips to test if you are concerned.
  1. Take 6 right angle header pins and put them in the FTDI programming port. That starts in the top left at GND and ends at DTR. Solder just one pin. Check the alignment, then solder the rest.
  2. Take another 6 right angle pins and put them in A6-D5. Solder one pin, check alignment, solder the rest.
  3. Solder 8 standard pins down the left side from GND to A5. Solder one, check, continue.
  4. Solder 9 pins down the right side from D6-RST. Solder one, check fit in a breadboard preferably, continue.
  5. Optionally solder a pin in AREF. If you don't know why you would use AREF, don't bother. :)

Step 9: Flash the Bootloader

This step will burn the boot loader to the chip. You will need an Arduino with ArduinoISP loaded on it. If you have another programmer, I assume you know how to use it.

Wiring from the existing Arduino
The picture shows a Pro-Mini, but any Arduino compatible should work.
  1. Load ArduinoISP to your existing (or borrowed) Arduino.
  2. Connect D9 to a resistor (220ohm-1k works with most leds) and a LED so you can see the "heartbeat".
  3. Optionally connect  D7 and D8 so you can see what's going on. I don't normally use them when things are working.
  4. Connect VCC and GND between the boards.
  5. Connect D10 on the programmer to RST on your new board.
  6. Connect D11 to D11
  7. Connect D12 to D12
  8. Connect D13 to D13
Connect the computer to the Arduino via the USB cable and determine the USB port. Mine was com16 so all my examples use that. Change to fit your situation.

On the computer

Prepare your software

  1. Open the Arduino IDE
  2. Load the ArduinoISP sketch
  3. Double check the Serial.begin command is set to 19200.
  4. Load it onto your Arduino and make a note of the serial port you used. You will need to use it below with AVRDude.
  5. Check the heartbeat is working. If it ever stops when AVRDude isn't running, hit the reset button.
  6. Install or locate WinAVR.
  7. Download Optiboot.hex and put it in the WinAVR bin directory
Check the connections
  1. Open a command prompt. (Start->cmd.exe)
  2. Use the CD command to change to the WinAVR bin directory. (remove quotes) "CD C:\winavr\bin" for example.
  3. Run the following command (remove quotes and use your own com port)

"avrdude -p m328p -P com16 -c avrisp -b 19200"

If all is well, you will see a chip signature of "0x1e9514" even though AVRDude says "Yikes I was expecting 0x1e951...". Skip down past troubleshooting and burn the bootloader. If you see 0x000000 or another error, do the troubleshooting.


Troubleshooting
  • Hit the reset button on the Arduino,  briefly ground RST on your new board and try again.
  • Triple check your wiring. Did you get GND and VCC right?
  • Double check your com port.
  • Check the board again for defects. Use a meter to check RST, and D11-13.
  • Remove all the wiring and do it over.
  • Take a break, think for a while, look at the setup with fresh eyes.
  • Show it to a helper and explain things. Even (especially?) if they don't care you will notice errors this way often.
  • Look for help with AVRDude online, and post here with photos of your setup.
Burn the bootloader
Make a file called ard328burn.cmd in the WinAVR bin directory and copy this text into the file. Change com16 if you use another port.

Code (Don't include this line)

@echo off
avrdude -p m328p -P com16 -c avrisp -b 19200
echo enter to continue, CTRL-C to exit. Hit enter if you see 0x1e9514
pause
avrdude -p m328p -P com16 -c avrisp -b 19200 -F –e
echo hit enter if there were no errors. CTRL-C to exit.
pause
avrdude -p m328p -P com16 -c avrisp -b 19200 -F -U lock:w:0x3F:m
echo hit enter if there were no errors. CTRL-C to exit.
pause
avrdude -p m328p -P com16 -c avrisp -b 19200 -F -U lfuse:w:0xFF:m -U hfuse:w:0xDE:m efuse:w:0x05:m -U flash:w:optiboot_atmega328.hex -U lock:w:0x0f:m

EndCode (Don't include this line)

Type "ard328burn.cmd" and the burning should start. The first message will complain about the Signature, but that's expected. Hit enter if the signature is 0x1e9514. If it's 0x000000 something is wrong. Often this means you mixed up 11,12 and/or 13s wires. Watch each step and hit Enter if there are no errors.

Check the bootloader.
If all is well, the on board LED is blinking on and off. If not, try resetting the board. Connect RST to GND for a moment and see if the on board LED flashes and starts blinking. If the LED on the existing Arduino is flashing and yours isn't it means the only thing wrong is your LED. Maybe you got it backwards or it (or it's resistor) isn't connected. I had to touch one up with a solder iron when I got the resistor upside down on accident.

If this doesn't work, reset the Arduino and your board. Then run the batch file again. Examine the output carefully to be sure everything went well. AVRDude will read the data back and double check that it is correct.

Now you can plug in your new Arduino Compatible with the FTDI breakout. Set the Arduino IDE to "Uno" and flash a program onto the chip.

Step 10: Using Your New Micro Controller

This micro controller is slightly different than other Arduino Compatibles and Arduinos. It's most similar to the Pro Mini, so lets compare.

Additional Features
  • 2 more analog input pins than the Pro Mini (A6 and A7 are brought out). Unlike A0-A5 these are not general purpose pins. This is how the Atmega chip works.
  • Low Pass filter on AVCC
  • AREF test point
  • Optiboot boot loader allowing slightly larger sketches.
Removed Features
  • No on board power regulator. (I.E. no RAW power pin.)
  • No reset button.
Known issues

  • The board doesn't always reset when the IDE has programmed a new sketch. There is some evidence this is due to the optiboot loader on Atmega328. It could be a bad design of the DTR on the board, but DTR works for programming every time so I suspect not.
  • Like the LilyPad there is no overvoltage or backwards voltage protection. I have hooked up Atmega328 DIP chips backwards and had them heat up, but live. This form factor might not fair so well. Please think twice before you connect to voltage.

Other notes
If you want to reset the board, ground RST for a moment. If you want to use power sources that vary much from +5v you will need to add a power regulator and a couple of capacitors. If you just want to run off USB power, then you are good to go. A diode "backwards" across VCC/GND might be a good idea if you worry about backwards voltage accidents.

Other than the above changes, it should work just like any other Arduino.

Step 11: Programming Using an Existing Development Board.

See this post on Arduino.cc. Same principle. You won't need the 120 ohm resistor, it's built in. http://arduino.cc/forum/index.php/topic,61776.0.html

Step 12: Programming the ExtraCore (or a Pro-mini) With AVRDude and Another Arduino

The ExtraCore and Arduino Pro-Mini don't have on board USB. Therefore you need a way to program them. The easiest way to is to buy an FTDI chip or cable. http://www.sparkfun.com/products/9716 is the one I use.

Here is an alternative method if you have another Ardunio, but don't have an FTDI interface.

WARNING: This will blow away your boot loader. You can always use this method to get it back or just keep loading sketches with this method. This method is for the adventuresome or impatient. AVRdude will happily turn your board into a useless coaster if you experiment with any fuse settings. Tread with caution.

Wiring from the existing Arduino
The picture shows a Pro-Mini, but any Arduino compatible should work.
  1.     Load ArduinoISP to your existing (or borrowed) Arduino. (see below "on the computer" for details).
  2.     Connect D9 to a resistor (220ohm-1k works with most leds) and a LED so you can see the "heartbeat".
  3.     Optionally connect  D7 and D8 so you can see what's going on. I don't normally use them when things are working.
  4.     Connect VCC and GND between the boards.
  5.     Connect D10 on the programmer to RST on your new board.
  6.     Connect D11 to D11
  7.     Connect D12 to D12
  8.     Connect D13 to D13

Connect the computer to the Arduino via the USB cable and determine the USB port. Mine was com16 so all my examples use that. Change to fit your situation.

On the computer

Prepare your software
  1.     Open the Arduino IDE
  2.     Load the ArduinoISP sketch
  3.     Double check the Serial.begin command is set to 19200.
  4.     Load it onto your Arduino and make a note of the serial port you used. You will need to use it below with AVRDude.
  5.     Check the heartbeat is working. If it ever stops when AVRDude isn't running, hit the reset button.
  6.     Install or locate WinAVR.
  7. Load the sketch you want to put on the ExtraCore
  8. Hit the "verify" button. This will compile the sketch to a .hex file.
  9. Locate the .hex file. (the .hex file is written to /tmp (on Mac and Linux) or \Documents and Settings\<USER>\Local Settings\Temp (on Windows)).
Check the connections
  1.     Open a command prompt. (Start->cmd.exe)
  2.     Use the CD command to change to the WinAVR bin directory. (remove quotes) "CD C:\winavr\bin" for example.
  3.     Run the following command  (remove angle brackets and use your own com port)

C:\winavr\bin\>avrdude -p m328p -P <com16> -c avrisp -b 19200

If all is well, you will see a chip signature of "0x1e9514" or "0x1e951"even if AVRDude says "Yikes I was expecting 0x1e951...".

Burn the sketch to the board

Replace the stuff in <angle brackets> with your path and sketch name.
C:\winavr\bin\>avrdude -p m328p -P com16 -c avrisp -b 19200 -F -U flash:w:<Path to your sketch>\<MySketchName>.hex


If all goes well AVRDUDE will put the sketch on the board and then verify that it worked. Your sketch is now ready to go.