Step 2: Make the Programming Cable Adapter

Mostly the programming cable adapter only needs to route signals from the FTDI USB cable to the right pins on the ATmega168 chips; however the capacitor is added on one set of pins to allow the Arduino software to reset the chips (the capacitor allows a short pulse to pass over to the chip's reset when the Arduino software flips the RTS pin).

To start, cut a piece of PC board with 9 holes by 2 holes. Then break off a set of 8 pins from the straight pin header strip, and a set of 8 pins from the right angle header strip (assuming you purchased the longer strips). See the parts picture to see what these should end up looking like.

Through the following steps please see both the attached photographs and diagrams for connecting up pins. The diagrams show much better where the connections need to go, but the photographs help to clarify board orientation, etc. If you have questions please mail me and I'll try to clarify anything that doesn't make sense.

Flip the PC board upside down so you can see the copper around the holes, with one of the long sides towards you. If, like I did here, you used a piece of PC board from the edge of the original, I suggest placing the side with the extra board material towards you.

Poke the bottom (short side) of the straight header through the holes farthest from you, leaving one hole empty on your left and solder the pins in place (see picture). Then poke the bottom (side with the bend) of the right-angle header through the holes closest to you, again leaving the hole on the left empty, and solder the pins in place.

Poke the .1uf capacitor's leads through the empty holes on the left and solder the capacitor in place. Trim the leads. Then solder each of the 2 leads to the header pin closest to it; one will connect to the leftmost pin of the straight header, the other to the leftmost pin of the right angle header. The easiest is probably to just create a solder bridge (melt enough solder to flow between the capacitor pin and the pin next to it, like in the picture). If you need to you can use a short length of wire and solder it to each of the contacts.

Create another solder bridge or connection between the 6th and 7th pins closest to you (third and fourth from the right). This is to connect the "CTS" pin of the cable to ground.

And create another solder bridge/connection between the two headers at the second pin to the right (connect the pin closest to you to the one farther away, just one pin over from the right). This connects what will be the VCC USB power jumper to the chip's VCC pin. This power connection will only be active when a jumper is installed.

Use a short length of wire to connect the rightmost closest-to-you pin to the fifth closest-to-you pin (it's fifth whether counting from the right or the left). This will connect +5 volts from the USB cable to the other pin of the jumper connector.

Now connect another short length of wire between the rightmost pin in the row farthest from you to the 3rd from the right pin in the row closest to you. This connects the cable's ground to the chip's ground.

Two more short wires to add: one from the second-from-the-left pin on the right angle header to the third-from-the-left pin on the straight header (note: since the leftmost holes have the capacitor installed in them, it will be the third-from-the-left hole closest to you to the fourth-from-the-left hole in the row farthest from you).

Second short wire will cross right over the first: from the third-from-the-left pin on the right angle header to the second-from-the-left pin on the straight header (fourth-from-the-left hole to third-from-the-left hole).

These wires connect the TX and RX pins of the cable to those of the chip. Unfortunately the ordering is opposite on the cable from the chip, which is why we need to have the crossed over wires.

Now you just need to plug the FTDI FT232RL cable in, with the green wire connected to the pin to the farthest left (the black wire will connect to the third pin from the right). The remaining two pins on the right are for a jumper; if the jumper is installed, the board will be powered from the USB cable, eliminating the need for batteries or a power supply. This jumper MUST NOT be connected when other power is connected to the board or damage to something (board, cable, computer) is possible.

That's it! You're ready to make some uDuino cores to program with the cable. (When using the programming adapter, the pin next to the capacitor connects to pin 1 of the chip)
<p>Just a note to let you know I have added this ( a year ago ) to the instructable:</p><p> Comprehensive Guide to Electronic Breadboards: A Meta Instructable</p><p>&gt;&gt; <a href="https://www.instructables.com/id/Comprehensive-Guide-to-Electronic-Breadboards-A-Me/" rel="nofollow"> https://www.instructables.com/id/Comprehensive-Gui...</a></p><p>Take a look at a bunch of ideas for using breadboards.</p>
Can i make this with ATMega 328 with Arduino bootloader? Can i connect it same way like this? And then can i use it like normal Arduino?
If you already have an arduino and wish to use an ATMEGA 328 or 168 on a breadboard by itself, go to <a href="http://arduino.cc/en/Tutorial/ArduinoToBreadboard">http://arduino.cc/en/Tutorial/ArduinoToBreadboard</a>. You can use an arduino to not only load the bootloader, but also program the chip. If you already have an arduino this would be cheaper than buying or making an FTDI to usb device.
here is how u can make an usbasp.. http://must-info.blogspot.com/ i tried a lot to use usbasp and make it in easy way
If you're concerned about your oscillator tolerances, you should be using crystal instead of ceramic. 0.5% tolerance is much better than the internal oscillator, but crystal has 0.001% tolerance, and the cost is about the same (70c'ish). Plus, the crystal kind are only two pins, which are way, way easier to install on solderless breadboard. You can run 20mhz as well if you want, the ATmega can handle it (that's it's peak rated speed). Your timing functions will need to be adjusted to compensate if you do run it that fast, though.
Main reason I picked a 3-pin ceramic resonator is because it won't need extra capacitors (in a breadboard there will probably be enough capacitance for it to work anyhow -- though if moved to prototyping board the circuit may well stop working). Ceramic resonators give less accuracy, it's true... though for solid serial communications they're absolutely fine across standard temperature ranges, which the internal oscillator isn't guaranteed to be. And they actually are a bit cheaper, though it's true the difference isn't a big deal for 1-offs. But totally agree if higher precision is needed that a crystal is a better choice.
That's a good point. Excellent Instructible tymm.
Can you use the FTDI basic breakout instead of the FTDI cable. The breakout brings out the DTR pin as instead of the RTS pin. It does have the same pinout.
You certainly can use an FTDI basic breakout -- from my understanding though, the DTR will work under Windows but not under OSX... in which case you'd have to just add a switch on the reset line (to ground) and manually reset when loading code, just like in the old days. It has been a while since I've tested DTR vs. RTS on Windows vs. OSX though. (And never played much with Arduino under Linux, so if that's your development platform... not sure).
hi there:<br /><br />thank you for the response. I am trying to build a Lilypad with theATMega 168.<br />I&nbsp;am drawn to make one because it involves a minimum number ofparts and can be quite small. I&nbsp;make toys, so the smaller theelectronics the better. I was wondering if you could give me some clueson wire it and also how to bootload it. Since all the surface mountATMega 168 do not seam to come bootloaded already. <br /><br />THanks so much!!!<br /><br />
&nbsp;i would actually start with the arduino pro mini schematic:<br /><br /><a href="http://arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf">arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf<br /> <br /></a>(note that you can find schematics &amp; eagle pcb files for thestandard arduino boards on the arduino site).<br /><br />For bootloading you'll need a programmer -- e.g. the USBtinyISP (fromAdaFruit) or the AVRISPmk II which you can get from e.g. mouser.com) --I prefer the mk II just because i've had reliability issues with thetinyUSB in certain situations. &nbsp;with current arduino software,loading the bootloader is easy, pretty much just hooking the programmerto the ICSP connector, powering the board and clicking the &quot;burnbootloader&quot; selection from the arduino software (under&quot;Tools&quot;). &nbsp;You'll have to select the board type beforeyou do so to make sure it gets the right bootloader.<br />
hi there:<br /><br />Is this the same chip as the one in the mini arduino. Would I be able to get the surface mount parts and wire the ATMega168 (square one)the same way? please let me know.<br /><br />thanks!<br /><br />
&nbsp;<span class="Apple-style-span" style="font-family: Times; font-size: medium; "><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; ">&nbsp;yep. just match up with the pinout in the datasheet for that package...</span><div style="background-color: rgb(255, 255, 255); padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; "><br />generally a good idea when laying out a board with an AVR to also add an in-circuit programming header. see<a style="color: rgb(255, 82, 0); text-decoration: none; cursor: pointer; " href="http://www.atmel.com/dyn/resources/prod_documents/DOC0943.PDF">www.atmel.com/dyn/resources/prod_documents/DOC0943.PDF</a>&nbsp;for the pinout on the standard connector. you can pretty much jump ahead and look at figure 2</div></span>
I already have an arduino duemilanove, and i know you can pull the chip from the board and use it as is, so are the parts in step 4 the barebones stuff to simply run the board? I plan on programming my chips in my arduino and then placing them into a circuit.
Yep; that's the very basics. If you're doing pro-level stuff (art installations, etc) it's a good idea to do some more decoupling (.1 uf capacitors between RESET & GND, AVCC & GND and the second VCC line and GND) but for this kind of a minimal setup things will generally run fine without.
I'm having trouble finding an oscillator, if you could point me in the right direction, with a link to a mouser or digikey part, even a manufacturer part number that would help so much, thanks!
Try FCR16.0M6 for cheap & easy... Actually "resonator" is the more precise name for these guys; i'm a bit loose with the terms (and apologize for that) but "oscillator" is more specifically used for the parts that have a circuit for creating an output wave in addition to the crystal/resonator/etc... so you hook up power and they directly spit out clock pulses (or sine waves, etc). the AVR processors have most of this circuitry built in so you only need a crystal or a resonator (and in some cases -- though not with the part mentioned above, since it has them built in -- a few capacitors), rather than a whole external oscillator for your CPU clock.
fyi, on step 4, your 10k resistor is still going from pin 1 - 10
Okay, thanks! btw, great instructable!
Good work.<br/>Do you know if this could be used to programme ATtiny MCUs? There's a fellow who has modified the Arduino IDE to support these devices. (See <a rel="nofollow" href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236434254).">http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236434254).</a><br/>Thanks,<br/><h2>TM</h2>
i cannot get mine to work.... and i dunno why ... it's soldered up nice and clean...checked all pin connections with my meter .... i just cant seem to get it to upload a sketch.<br/><br/>im told the error im getting is a &quot;generic&quot; error, basically stating there is no connection between the chip and the computer<br/><br/>avrdude: stk500_getsync(): not in sync: resp=0x00<br/>avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51<br/><br/>im using XP (tried on 2 machines same outcome)<br/>i also tested on a mac using osx ...also didnt work...<br/><br/>im using a 2 pin 16mhz xtal with the pins going to the chip as well as being tied to ground via a 22pf cap on each. (couldnt find the 3 pin you used)<br/><br/>i was able to program the chip via ponyprog with my parallel programmer and the chip and parts seem to work just fine....<br/><br/>just cant get the darn thing to be seen with the ftdi cable/programming adaptor<br/><br/>thoughts??<br/><br/>=Rik<br/>
Which bootloader did you put on the chip? (with 16mhz osc you need the diecimila or similar, not lilypad)... did you make sure to set the fuses correctly when you programmed the bootloader (making sure to use an external oscillator)? generally for 16mhz arduino hfuse should be 0xdd, lfuse 0xff, efuse 0x00. if you hook up an LED between pin 19 and ground (long lead to pin 19, short lead to ground) does it flash when you apply power / hook up the cable?
i got the chip from sparkfun already bootloaded for the external OSC. yes, i do get the blinking when i hook up the cable...and when i remove the jumper i dont ... so it seems as if things are working at least that far.
Can you verify that you've got the Diecimila selected in the "boards" selection under "tools"? Under windows, also see the next comment -- that apparently the auto-reset doesn't work by default -- you shouldn't have this problem under OSX though.
Duemilanove is selected as my board.....and since i have other arduino chips that i use... my "Set RTS On Close" is enabled. i have tested on a mac..no luck there either... i really appreciate your assistance!
got it working.... tried again after ordering another pre bootloaded chip and it worked great!!!! turns out there was an issue with the bootloader that was burned to the original chip i was testing.....
Great; thanks for the update!
my uDuino works, but i missed the AUTO-RESET feature. when i will upload sketches: first time it works fine - later nothing is happen. the arduino IDE give me some error messages. i think the solution is: the FT232RL USB-TTL cable not provides the DTR-line (used by standard arduino for autoreset) but provides the RTS-line (green wire). for use the FT232RL USB-TTL programmingadapter with the uDuino set on the Device-Manager (for example WinXP) the following modification: / USB Serial Port (COM...) / Port Settings / Advanced Settings / ENABLE: <strong>Set RTS On Close</strong> that makes a short low impulse on the RESET-pin by starting upload sketches. AUTO-RESET works!!! uploading sketches works anytime!!! YAAAH Johannes<br/>
cool! i've been using OSX and it seems to work fine with the RTS line as reset without any changes, but it makes sense that Windows might do things differently; thanks for the workaround info.
would any changes need to be made if i was using a FTDI model TTL-232R-5V cable instead?
nope; the 5v is the same one. the 3.3 v cable also works fine from my experience
Your project has inspired me try my hand at this interface. I'm waiting on the headers. Thanks for the idea!
Oh c'mon! This is like THE tutorial I was looking for, plug'n'program... and then you give me this photo? Seems as if would have to figure it out by myself after all... Good tutorial anyway, thx!
Read a datasheet.
i just noticed a bit where u say to connect the resistor between pins 1 and 10 wen it should be 1 and 7? a typo methinks? ;) altho it does still work if ure not using an external osc or crystal., but its prolly not good :P
You are absolutely right -- sorry about that. Correcting it now.
no probs :3 it just occurred to me after making a circuit including it :P i will correct the circuit (that has been working as lilipad for months) too :D
THANK YOU!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Added to Arduino Group! ;D
cool -- btw i would really like to get feedback from anyone who's built one to make sure that it all makes sense. and if anyone runs into any difficulty, i'd be happy to try to explain any hard parts and help get it working.
works ok with me. i got one running now with a 22 MHz crystal to see how it would run (just blinking as its an old chip that went wrong and i managed to upload a new bootloader to it. but it wouldn't take any sketches, will try burning one via the programmer cable next time) it's running from usb power direct to chip and its cold (had it on 16 MHz all night and its still stone cold) Seems happy with 23MHz but i want to try it with another sketch if i can get one on there :)
great stuff :) minimalise for better integration to projects :)
Great project. As a software guy I knew that the Arduino could be scaled down but I didn't really know how to do it. This makes me a lot more enthusiastic about that project that would need 10-15 MCUs...
thank you thank you thank you!
cool. i like the minimalism :)
Great Instructable, keep up the good work!
still reading it, but coool! I will do this soon
<em><strong>Great</strong></em> job! Pictures are great, good detail, great use of links, great job, +1 rating. It looks awesome too!<br/>

About This Instructable




More by tymm:uDuino: Very Low Cost Arduino Compatible Development Board Lo-tek remote lightswitch/dimmer control Making stencils for solder paste at home 
Add instructable to: