Commit 19c8c4ce authored by Prashant Patil's avatar Prashant Patil
Browse files

added the documentation

parent f025c728
Pipeline #1012 canceled with stage
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>FabFTDI</title>
</head>
<body>
<h1>FabFTDI: A Do-It-Yourself FTDI Cable (i.e. USB to Serial Converter) </h1>
<h1>&nbsp;</h1>
<h1>1 Introduction </h1>
<p>FabFTDI is DIY version of FTDI cable that can be made in fablab and this page descirbes how to make it. &nbsp;The FabFTDI uses an Atmega16U2 microcontroller and is based on USbtoSerial example of LUFA library. Figure below shows the schematic diagram of the FabFTDI:</p>
<img src="FabFTDI_Schematic.png" width="900" height="560" alt=""/>
<p><em>Schematic circuit diagram of FabFTDI</em></p>
<p>&nbsp;</p>
<p>The FabFTDI is powered through USB port which provides 500mA at 5V. The USB data line D+/D- is used to communicate with the microcontrolle's USB controller. Since the data lines operate at 3.3V, two voltage limiting zener diodes are used to limit the voltage in these pins. The D- line is pulled-up to the 5V through 1.5K resistor to indicate to the host computer that the connnected device is a low-speed USB device. The USB controller needs a precise clock, therefore, an external 16MHz crystal is used as a precise clock source. The LED and the corresponding resistor R4 is optional but if used can be used as visual indication of data communication. The FabFTDI is a USB 2.0 Full-speed device and support upto&nbsp;38400bps of serial communication. The Unix and Mac OS doesn not require any drivers, however, a driver is required for windows operating system (more on this later). </p>
<h1>2 Fabrication of FabFTDI</h1>
<h2>2.1 FabFTDI Using ATTiny102</h2>
<p>ATTiny102 is a low-cost 8-pin micro-controller with in-built UART. This version of the FabFTDI uses V-USB for software-only implementation of a low-speed USB device and is based on V-USB CDC example. Figure below shows the schematic diagram of the circuit</p>
<h3>2.1.1 Schematic Circuit Diagram</h3>
<img src="FabFTDIAttiny102/FabFTDITSchematic.png" width="800" height="430" alt=""/>
<p>Figure below shows the routed board. </p>
<h3>2.1.2 Board Design</h3>
<img src="FabFTDIAttiny102/FabFTDIBoard.png" width="800" height="298" alt=""/>
<h3>2.1.3 Board Fabrication and Assembly</h3>
<ol>
<li>Download the PNG files for trace and board outline from links below - FabFTDI traces (1000dpi) FabFTDI board outline (1000dpi) </li>
<li>Use the standard PCB milling process to fabricate PCB. </li>
<li>You will need following components: Attiny45, two 3.3V Zener diode, 0.1uF capacitor, two 49ohm resistors, two 470ohm resistors, 1K resistor, 499ohm resistor, 2x3 pin header and 1x6 pin header. </li>
<li>Make sure to solder zerner diode in the right orientation. The anode (A) should be connected to GND and cathode (C) should be connected to D- or D+. </li>
<li>If there is any access copper left in front of the middle two pads of USB footprint in the board, remove it using a knife and apply some solder to all the pads of USB lines as shown below-</li>
</ol>
<h3>2.1.4 Programing Fuses &amp; Firmware</h3>
<ol>
<li>Download the firmware file from <a href="Firmware/default/cdctiny45.hex">here</a>. Flash it using the following command (replace avrisp2 with usbtiny if you are using fabisp)<br />
<br />
sudo avrdude -p t45 -c avrisp2 -P usb -U flash:w:cdctiny45.hex:i <br />
<br />
</li>
<li>Flash fuses using following commands<br />
<br />
<ul>
<li>sudo avrdude -p t45 -c avrisp2 -U lfuse:w:0xF1:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U hfuse:w:0xCE:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U euse:w:0xFF:m<br />
</li>
</ul>
</li>
</ol>
<h2>2.2 FabFTDI Using Attiny441</h2>
<h3>2.2.1 Schematic Circuit Diagram</h3>
<img src="FabFTDI Attiny441/FabFTDSchematic.png" width="800" height="459" alt=""/>
<h3>2.2.2 Board Design</h3>
<img src="FabFTDI Attiny441/FabFTDIBoard.png" width="800" height="427" alt=""/>
<p>&nbsp;&nbsp;</p>
<h3>2.2.3 Board Fabrication and Assembly</h3>
<ol>
<li>Download the PNG files for trace and board outline from links below - FabFTDI traces (1000dpi) FabFTDI board outline (1000dpi) </li>
<li>Use the standard PCB milling process to fabricate PCB. </li>
<li>You will need following components: Attiny45, two 3.3V Zener diode, 0.1uF capacitor, two 49ohm resistors, two 470ohm resistors, 1K resistor, 499ohm resistor, 2x3 pin header and 1x6 pin header. </li>
<li>Make sure to solder zerner diode in the right orientation. The anode (A) should be connected to GND and cathode (C) should be connected to D- or D+. </li>
<li>If there is any access copper left in front of the middle two pads of USB footprint in the board, remove it using a knife and apply some solder to all the pads of USB lines as shown below-</li>
</ol>
<h3>2.2.4 Programing Fuses &amp; Firmware</h3>
<ol>
<li>Download the firmware file from <a href="Firmware/default/cdctiny45.hex">here</a>. Flash it using the following command (replace avrisp2 with usbtiny if you are using fabisp)<br />
<br />
sudo avrdude -p t45 -c avrisp2 -P usb -U flash:w:cdctiny45.hex:i <br />
<br />
</li>
<li>Flash fuses using following commands<br />
<br />
<ul>
<li>sudo avrdude -p t45 -c avrisp2 -U lfuse:w:0xF1:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U hfuse:w:0xCE:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U euse:w:0xFF:m<br />
</li>
</ul>
</li>
</ol>
<h2>2.3 FabFTDI Using ATTiny45 </h2>
<h3>2.3.1 Schematic Circuit Diagram</h3>
<img src="FabFTDIAttiny45/FabFTDISchematic.png" width="800" height="452" alt=""/>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The figure above shows the schematic diagram of the FabFTDI circuit. The circuit is powered by a USB port which can provide 5V voltage and up to 500mA current.</p>
<p> A USB port has four lines: 5V, D-, D+ and GND. The line D- and D+ are called data lines and used to for communication. These data lines can tolerate only upto 3.3V voltage, and therefore, two Zener diodes are used to limit the voltage to 3.3V. The line D- is connected to 5V using 15k (10kohm + 499ohm) which is used by the host (your computer) to determine that the connected device is a low speed device. Resistors R5 and R6 are used to protect TxD and RxD pins.</p>
<p>&nbsp;</p>
<h3>2.3.2 Board Design </h3>
<img src="FabFTDIAttiny45/Board.PNG" width="800" height="378" alt=""/>
<p>&nbsp; </p>
<p>Use the above image as a guideline for solder components.</p>
<p>If you would like to edit original eagle files, here is the link for the <a href="FabFTDI.sch">schematic</a> and <a href="FabFTDI.brd">board</a> files.</p>
<p>&nbsp;</p>
<h3>2.3.4 PCB Fabrication and Assembly</h3>
<ol>
<li>Download the PNG files for trace and board outline from links below -
<ul>
<li><a href="FabFTDITrace.png">FabFTDI traces (1000dpi)</a></li>
<li><a href="FabFTDIBG.png">FabFTDI board outline (1000dpi)</a></li>
</ul>
</li>
<li>Use the standard PCB milling process to fabricate PCB.</li>
<li>You will need following components: Attiny45, two 3.3V Zener diode, 0.1uF capacitor, two 49ohm resistors, two 470ohm resistors, 1K resistor, 499ohm resistor, 2x3 pin header and 1x6 pin header.</li>
<li>Make sure to solder zerner diode in the right orientation. The anode (A) should be connected to GND and cathode (C) should be connected to D- or D+. <br />
<br />
<br />
<br />
</li>
<img src="FabFTDIAttiny45/IMG_0266.jpg" width="800" height="364" alt=""/>
<li>If there is any access copper left in front of the middle two pads of USB footprint in the board, remove it using a knife and apply some solder to all the pads of USB lines as shown below-<br />
<br />
<br />
<br />
</li>
<img src="FabFTDIAttiny45/IMG_0272.jpg" width="800" height="724" alt=""/>
</ol>
<h3>2.3.5 Programing Fuses &amp; Firmware</h3>
<ol>
<li>Download the firmware file from <a href="Firmware/default/cdctiny45.hex">here</a>. Flash it using the following command (replace avrisp2 with usbtiny if you are using fabisp)<br />
<br />
sudo avrdude -p t45 -c avrisp2 -P usb -U flash:w:cdctiny45.hex:i <br />
<br />
</li>
<li>Flash fuses using following commands<br />
<br />
<ul>
<li>sudo avrdude -p t45 -c avrisp2 -U lfuse:w:0xF1:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U hfuse:w:0xCE:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U euse:w:0xFF:m<br />
</li>
</ul>
</li>
</ol>
<p>Note that the current version of firmware does not support hardware flow control using RTS/CTS. If you would like to edit the firmware, here is the link to original <a href="Firmware.zip">files</a>.</p>
<p>&nbsp;</p>
<h1>3 Testing your FabFTDI</h1>
<ol>
<li>Connect your FabFTDI to a computer. Mac/Unix operating system should be able to detect it without any driver. For Windows, download driver from <a href="http://www.recursion.jp/prose/avrcdc/avrcdc_inf.zip">here</a>.</li>
<li>For testing FabFTDI, we will use Neil's <a href="http://academy.cba.mit.edu/classes/embedded_programming/index.html">hello.ftdi.44.echo</a> board. Since our cable support baud rate up to 4800, we need to specify this baud rate in hello.ftdi.44.echo.c file. Open this file and change bit_delay_time = 208.3, compile and flash it into hello.ftdi.44.echo board. </li>
<li>Next step is same as what you did in <a href="http://academy.cba.mit.edu/classes/embedded_programming/hello.ftdi.44.program.png">Embedded programming week</a>. Connect FabFTDI to hello.ftdi.44.echo and execute command<br />
<br />
python term.py /dev/ttyACM0 4800</li>
</ol>
<p>if you can see the typed character in term.py window echo'ing back then you have a working FabFTDI. Congratulations!!</p>
<img src="FabFTDIAttiny45/IMG_0280.jpg" width="800" height="471" alt=""/>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1>4 Troubleshooting</h1>
<p>If things don't workout, try following things</p>
<ol>
<li>Double check the polarity of the two Zener diodes.</li>
<li>Consider using other USB port on your computer. </li>
<li>Check if the FabFTDI is connected in the right orientation. Match GND pin of FabFTDI to GND pin of hello.ftdi.44.echo board.</li>
<li>Make sure FabFTDI is plugged-in properly and not loose.<br />
</li>
</ol>
<p>&nbsp;</p>
<a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.
</body>
</html>
This diff is collapsed.
This diff is collapsed.
......@@ -552,8 +552,8 @@ design rules under a new name.</description>
<elements>
<element name="D1" library="fabPatil" package="SOD123" value="3.3V" x="21.1836" y="17.907" rot="R90"/>
<element name="D2" library="fabPatil" package="SOD123" value="3.3V" x="18.2626" y="16.256" rot="R90"/>
<element name="R1" library="fabPatil" package="1206" value="22" x="26.0858" y="13.3604"/>
<element name="R2" library="fabPatil" package="1206" value="22" x="26.0858" y="15.8242"/>
<element name="R1" library="fabPatil" package="1206" value="499" x="26.0858" y="13.3604"/>
<element name="R2" library="fabPatil" package="1206" value="499" x="26.0858" y="15.8242"/>
<element name="JP1" library="fabPatil" package="1X06-SMD" value="FTDI" x="54.6354" y="15.5956" rot="R90"/>
<element name="C1" library="fabPatil" package="1206" value="0.1uF" x="26.1366" y="23.3426"/>
<element name="JP2" library="fabPatil" package="USB_PCB" value="USBPCB" x="5.5626" y="15.24"/>
......@@ -654,9 +654,9 @@ design rules under a new name.</description>
<wire x1="49.3268" y1="23.4438" x2="49.3268" y2="19.2786" width="0.4064" layer="1"/>
<wire x1="27.5586" y1="23.3426" x2="27.5586" y2="23.4438" width="0.4064" layer="1"/>
<wire x1="27.5586" y1="23.4438" x2="31.5214" y2="23.4438" width="0.4064" layer="1"/>
<wire x1="55.9854" y1="16.8656" x2="51.9938" y2="16.8656" width="0.4064" layer="1"/>
<wire x1="51.9938" y1="16.8656" x2="51.9938" y2="19.304" width="0.4064" layer="1"/>
<wire x1="51.9938" y1="19.304" x2="48.9956" y2="19.304" width="0.4064" layer="1"/>
<wire x1="55.9854" y1="16.8656" x2="52.6034" y2="16.8656" width="0.4064" layer="1"/>
<wire x1="52.6034" y1="16.8656" x2="52.6034" y2="19.304" width="0.4064" layer="1"/>
<wire x1="52.6034" y1="19.304" x2="48.9956" y2="19.304" width="0.4064" layer="1"/>
<wire x1="48.9956" y1="19.304" x2="48.9956" y2="19.2786" width="0.4064" layer="1"/>
<wire x1="26.1236" y1="22.18799375" x2="26.1236" y2="11.8286" width="0.3556" layer="1"/>
<wire x1="26.1236" y1="11.8286" x2="26.0982" y2="11.8286" width="0.3556" layer="1"/>
......@@ -731,18 +731,18 @@ design rules under a new name.</description>
<contactref element="IC1" pad="24"/>
<contactref element="R3" pad="1"/>
<wire x1="33.4712" y1="20.9804" x2="33.4712" y2="19.4818" width="0.3556" layer="1"/>
<wire x1="50.51810625" y1="15.494" x2="50.8752" y2="15.85109375" width="0.4064" layer="1"/>
<wire x1="50.8752" y1="15.85109375" x2="50.8752" y2="17.62610625" width="0.4064" layer="1"/>
<wire x1="50.8752" y1="17.62610625" x2="50.51810625" y2="17.9832" width="0.4064" layer="1"/>
<wire x1="43.5356" y1="14.1986" x2="44.831" y2="15.494" width="0.4064" layer="1"/>
<wire x1="44.831" y1="15.494" x2="50.51810625" y2="15.494" width="0.4064" layer="1"/>
<wire x1="50.51810625" y1="17.9832" x2="47.3202" y2="17.9832" width="0.4064" layer="1"/>
<wire x1="47.3202" y1="17.9832" x2="46.2534" y2="19.05" width="0.4064" layer="1"/>
<wire x1="46.2534" y1="19.05" x2="47.3202" y2="17.9832" width="0.4064" layer="1"/>
<wire x1="46.2534" y1="20.954515625" x2="46.2534" y2="19.05" width="0.4064" layer="1"/>
<wire x1="46.2534" y1="20.954515625" x2="46.227515625" y2="20.9804" width="0.4064" layer="1"/>
<wire x1="33.4712" y1="20.9804" x2="46.227515625" y2="20.9804" width="0.4064" layer="1"/>
<wire x1="31.5214" y1="20.5998" x2="31.5214" y2="20.9804" width="0.4064" layer="1"/>
<wire x1="31.5214" y1="20.9804" x2="33.4712" y2="20.9804" width="0.4064" layer="1"/>
<wire x1="51.2318" y1="15.494" x2="50.292" y2="15.494" width="0.4064" layer="1"/>
<wire x1="47.3202" y1="17.9832" x2="51.2318" y2="17.9832" width="0.4064" layer="1"/>
<wire x1="51.2318" y1="17.9832" x2="51.2318" y2="15.494" width="0.4064" layer="1"/>
<wire x1="50.292" y1="15.494" x2="50.51810625" y2="15.494" width="0" layer="19" extent="1-1"/>
</signal>
<signal name="SCK">
<contactref element="U$1" pad="3"/>
......
......@@ -6,66 +6,47 @@
</head>
<body>
<h1>FabFTDI: A Do-It-Yourself FTDI Cable (i.e. USB to Serial Converter) </h1>
<h1>Building the FabFTDI (i.e. USB to Serial Converter) </h1>
<h1>&nbsp;</h1>
<h1>1 Introduction </h1>
<p>This page descirbes making your own FabFTDI cable. There are three versions of the FabFTDI using three different microcontrollers. All version of FabFTDI uses V-USB to implement low-speed USB device and implement USART differently. The Attiny45 version of FabFTDI implements USART using software and is limited to boud rate of 4800bps. The Attiny102 and Attiny441 versions uses hardware USART and support boud rate of upto 38400bps. The FabFTDI is powered through USB port which provides 500mA at 5V. The USB data line D+/D- is used to communicate with the micro-controller. Since the data lines operate at 3.3V, two voltage limiting zener diodes are used to limit voltage in these pins to 3.3V. The D- line is pulled-up to the 5V through 1.5K resistor to indicate to the host computer that the connnected device is a low-speed USB device. </p>
<p>FabFTDI is DIY version of FTDI cable that can be made in fablab and this page descirbes how to make it. &nbsp;The FabFTDI uses an Atmega16U2 microcontroller and is based on USbtoSerial example of LUFA library. Figure below shows the schematic diagram of the FabFTDI:</p>
<img src="FabFTDI_Schematic.png" width="900" height="560" alt=""/>
<p><em>Figure: Schematic circuit diagram of FabFTDI.</em></p>
<p>&nbsp;</p>
<p>The FabFTDI is powered through USB port which provides 500mA at 5V. The USB data line D+/D- is used to communicate with the microcontrolle's USB controller. Since the data lines operate at 3.3V, two voltage limiting zener diodes are used to limit the voltage in these pins. The D- line is pulled-up to the 5V through 1.5K resistor to indicate to the host computer that the connnected device is a low-speed USB device. The USB controller needs a precise clock, therefore, an external 16MHz crystal is used as a precise clock source. The LED and the corresponding resistor R4 is optional but if used can be used as visual indication of data communication. The FabFTDI is a USB 2.0 Full-speed device and support upto&nbsp;38400bps of serial communication. The Unix and Mac OS doesn not require any drivers, however, a driver is required for windows operating system (more on this later). </p>
<h1>2 Fabrication of FabFTDI</h1>
<h2>2.1 FabFTDI Using ATTiny102</h2>
<p>ATTiny102 is a low-cost 8-pin micro-controller with in-built UART. This version of the FabFTDI uses V-USB for software-only implementation of a low-speed USB device and is based on V-USB CDC example. Figure below shows the schematic diagram of the circuit</p>
<h3>2.1.1 Schematic Circuit Diagram</h3>
<img src="FabFTDIAttiny102/FabFTDITSchematic.png" width="800" height="430" alt=""/>
<p>Figure below shows the routed board. </p>
<h3>2.1.2 Board Design</h3>
<img src="FabFTDIAttiny102/FabFTDIBoard.png" width="800" height="298" alt=""/>
<h3>2.1.3 Board Fabrication and Assembly</h3>
<p>Figure below shows the FabFTDI board. </p>
<h2>2.1 Board Design</h2>
<img src="FabFTDI_Board.png" width="900" height="400" alt=""/>
<p><em>Figure: Board design of FabFTDI.</em></p>
<h2>2.2 PCB Fabrication</h2>
<p>Download the PCB trace file and outline file from the links below:</p>
<ul>
<li>FabFTDI Board Traces (2000dpi) </li>
<li>FabFTDI Board cutout (2000dpi) </li>
</ul>
<p>Figure below shows the milled board. Inspect for error and make sure no wires are short-circuiting. </p>
<img src="Documentation/FAbFDI_Milled2.JPG" width="900" height="836" alt=""/>
<h2>2.3 PCB Assembly</h2>
<p>For stuffing FabFTDI board you will need following components:</p>
<ol>
<li>Download the PNG files for trace and board outline from links below - FabFTDI traces (1000dpi) FabFTDI board outline (1000dpi) </li>
<li>Use the standard PCB milling process to fabricate PCB. </li>
<li>You will need following components: Attiny45, two 3.3V Zener diode, 0.1uF capacitor, two 49ohm resistors, two 470ohm resistors, 1K resistor, 499ohm resistor, 2x3 pin header and 1x6 pin header. </li>
<li>Make sure to solder zerner diode in the right orientation. The anode (A) should be connected to GND and cathode (C) should be connected to D- or D+. </li>
<li>If there is any access copper left in front of the middle two pads of USB footprint in the board, remove it using a knife and apply some solder to all the pads of USB lines as shown below-</li>
<li>Atmega16U2 (or compatible microcontroller such ast Atmega8U2 or Atmega32U2 and same pin count).</li>
<li>Two 3.3V voltage limiting zener diodes.</li>
<li>Two 18pF capacitors, one 0.1uF capacitor, and one 1.uF capacitor.</li>
<li>One 0ohm resistor, four 499ohm resistors, and one 10K resistor.</li>
<li>One 16MHz crystal. </li>
<li>One 6 pin 2x3 connector (aka ISP connector), and one 6 pin 1x6 connector. </li>
<li>Optionl: An LED and a 1K resistor.</li>
</ol>
<h3>2.1.4 Programing Fuses &amp; Firmware</h3>
<p>It is recommended to start with stuffing smaller and difficult component and then bigger and easy components such as connectors. For this board soldering the micro-controller is tricky as the pins are very close to each other. Here, I am showing an easy way to solder the microcontroller. First, carelessly solder all the pins to the pads and then use copper braid to remove excess solder. </p>
<img src="Documentation/FabFTDI_Assembled.JPG" width="900" height="856" alt=""/>
<h1>3 Programing Fuses and Firmware</h1>
<ol>
<li>Download the firmware file from <a href="Firmware/default/cdctiny45.hex">here</a>. Flash it using the following command (replace avrisp2 with usbtiny if you are using fabisp)<br />
<br />
sudo avrdude -p t45 -c avrisp2 -P usb -U flash:w:cdctiny45.hex:i <br />
sudo avrdude -p t45 -c avrisp2 -P usb -U flash:w:usbtoserial.hex:i <br />
<br />
</li>
<li>Flash fuses using following commands<br />
<br />
<ul>
<li>sudo avrdude -p t45 -c avrisp2 -U lfuse:w:0xF1:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U hfuse:w:0xCE:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U euse:w:0xFF:m<br />
</li>
</ul>
</li>
</ol>
<h2>2.2 FabFTDI Using Attiny441</h2>
<h3>2.2.1 Schematic Circuit Diagram</h3>
<img src="FabFTDI Attiny441/FabFTDSchematic.png" width="800" height="459" alt=""/>
<h3>2.2.2 Board Design</h3>
<img src="FabFTDI Attiny441/FabFTDIBoard.png" width="800" height="427" alt=""/>
<p>&nbsp;&nbsp;</p>
<h3>2.2.3 Board Fabrication and Assembly</h3>
<ol>
<li>Download the PNG files for trace and board outline from links below - FabFTDI traces (1000dpi) FabFTDI board outline (1000dpi) </li>
<li>Use the standard PCB milling process to fabricate PCB. </li>
<li>You will need following components: Attiny45, two 3.3V Zener diode, 0.1uF capacitor, two 49ohm resistors, two 470ohm resistors, 1K resistor, 499ohm resistor, 2x3 pin header and 1x6 pin header. </li>
<li>Make sure to solder zerner diode in the right orientation. The anode (A) should be connected to GND and cathode (C) should be connected to D- or D+. </li>
<li>If there is any access copper left in front of the middle two pads of USB footprint in the board, remove it using a knife and apply some solder to all the pads of USB lines as shown below-</li>
</ol>
<h3>2.2.4 Programing Fuses &amp; Firmware</h3>
<ol>
<li>Download the firmware file from <a href="Firmware/default/cdctiny45.hex">here</a>. Flash it using the following command (replace avrisp2 with usbtiny if you are using fabisp)<br />
<br />
sudo avrdude -p t45 -c avrisp2 -P usb -U flash:w:cdctiny45.hex:i <br />
<br />
</li>
<li>Flash fuses using following commands<br />
<br />
<ul>
......@@ -76,63 +57,9 @@
</ul>
</li>
</ol>
<h2>2.3 FabFTDI Using ATTiny45 </h2>
<h3>2.3.1 Schematic Circuit Diagram</h3>
<img src="FabFTDIAttiny45/FabFTDISchematic.png" width="800" height="452" alt=""/>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>The figure above shows the schematic diagram of the FabFTDI circuit. The circuit is powered by a USB port which can provide 5V voltage and up to 500mA current.</p>
<p> A USB port has four lines: 5V, D-, D+ and GND. The line D- and D+ are called data lines and used to for communication. These data lines can tolerate only upto 3.3V voltage, and therefore, two Zener diodes are used to limit the voltage to 3.3V. The line D- is connected to 5V using 15k (10kohm + 499ohm) which is used by the host (your computer) to determine that the connected device is a low speed device. Resistors R5 and R6 are used to protect TxD and RxD pins.</p>
<p>&nbsp;</p>
<h3>2.3.2 Board Design </h3>
<img src="FabFTDIAttiny45/Board.PNG" width="800" height="378" alt=""/>
<p>&nbsp; </p>
<p>Use the above image as a guideline for solder components.</p>
<p>If you would like to edit original eagle files, here is the link for the <a href="FabFTDI.sch">schematic</a> and <a href="FabFTDI.brd">board</a> files.</p>
<p>&nbsp;</p>
<h3>2.3.4 PCB Fabrication and Assembly</h3>
<ol>
<li>Download the PNG files for trace and board outline from links below -
<ul>
<li><a href="FabFTDITrace.png">FabFTDI traces (1000dpi)</a></li>
<li><a href="FabFTDIBG.png">FabFTDI board outline (1000dpi)</a></li>
</ul>
</li>
<li>Use the standard PCB milling process to fabricate PCB.</li>
<li>You will need following components: Attiny45, two 3.3V Zener diode, 0.1uF capacitor, two 49ohm resistors, two 470ohm resistors, 1K resistor, 499ohm resistor, 2x3 pin header and 1x6 pin header.</li>
<li>Make sure to solder zerner diode in the right orientation. The anode (A) should be connected to GND and cathode (C) should be connected to D- or D+. <br />
<br />
<br />
<br />
</li>
<img src="FabFTDIAttiny45/IMG_0266.jpg" width="800" height="364" alt=""/>
<li>If there is any access copper left in front of the middle two pads of USB footprint in the board, remove it using a knife and apply some solder to all the pads of USB lines as shown below-<br />
<br />
<br />
<br />
</li>
<img src="FabFTDIAttiny45/IMG_0272.jpg" width="800" height="724" alt=""/>
</ol>
<h3>2.3.5 Programing Fuses &amp; Firmware</h3>
<ol>
<li>Download the firmware file from <a href="Firmware/default/cdctiny45.hex">here</a>. Flash it using the following command (replace avrisp2 with usbtiny if you are using fabisp)<br />
<br />
sudo avrdude -p t45 -c avrisp2 -P usb -U flash:w:cdctiny45.hex:i <br />
<br />
</li>
<li>Flash fuses using following commands<br />
<br />
<ul>
<li>sudo avrdude -p t45 -c avrisp2 -U lfuse:w:0xF1:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U hfuse:w:0xCE:m</li>
<li>sudo avrdude -p t45 -c avrisp2 -U euse:w:0xFF:m<br />
</li>
</ul>
</li>
</ol>
<p>Note that the current version of firmware does not support hardware flow control using RTS/CTS. If you would like to edit the firmware, here is the link to original <a href="Firmware.zip">files</a>.</p>
<h3></p>
<p>&nbsp;</p>
<h1>3 Testing your FabFTDI</h1>
<h1>4 Testing your FabFTDI</h1>
<ol>
<li>Connect your FabFTDI to a computer. Mac/Unix operating system should be able to detect it without any driver. For Windows, download driver from <a href="http://www.recursion.jp/prose/avrcdc/avrcdc_inf.zip">here</a>.</li>
<li>For testing FabFTDI, we will use Neil's <a href="http://academy.cba.mit.edu/classes/embedded_programming/index.html">hello.ftdi.44.echo</a> board. Since our cable support baud rate up to 4800, we need to specify this baud rate in hello.ftdi.44.echo.c file. Open this file and change bit_delay_time = 208.3, compile and flash it into hello.ftdi.44.echo board. </li>
......@@ -141,10 +68,9 @@
python term.py /dev/ttyACM0 4800</li>
</ol>
<p>if you can see the typed character in term.py window echo'ing back then you have a working FabFTDI. Congratulations!!</p>
<img src="FabFTDIAttiny45/IMG_0280.jpg" width="800" height="471" alt=""/>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1>4 Troubleshooting</h1>
<h1>5 Troubleshooting</h1>
<p>If things don't workout, try following things</p>
<ol>
<li>Double check the polarity of the two Zener diodes.</li>
......
......@@ -2198,13 +2198,13 @@ Source: 008-0260-0_E.pdf</description>
<instance part="R6" gate="G$1" x="35.56" y="10.16"/>
<instance part="P+3" gate="VCC" x="68.58" y="10.16"/>
<instance part="GND5" gate="1" x="68.58" y="-7.62"/>
<instance part="U$1" gate="G$1" x="63.5" y="-25.4"/>
<instance part="P+5" gate="VCC" x="76.2" y="-15.24"/>
<instance part="GND6" gate="1" x="76.2" y="-33.02"/>
<instance part="U$1" gate="G$1" x="55.88" y="-25.4"/>
<instance part="P+5" gate="VCC" x="68.58" y="-15.24"/>
<instance part="GND6" gate="1" x="68.58" y="-33.02"/>
<instance part="C2" gate="1" x="-43.18" y="-5.08" rot="R180"/>
<instance part="IC1" gate="G$1" x="-12.7" y="-12.7"/>
<instance part="P+4" gate="VCC" x="-38.1" y="22.86"/>
<instance part="GND4" gate="1" x="-48.26" y="-10.16"/>
<instance part="GND4" gate="1" x="-50.8" y="-10.16"/>
<instance part="GND8" gate="1" x="-38.1" y="-43.18"/>
<instance part="R3" gate="G$1" x="-60.96" y="-22.86" rot="R90"/>
<instance part="P+6" gate="VCC" x="-60.96" y="-12.7"/>
......@@ -2252,14 +2252,14 @@ Source: 008-0260-0_E.pdf</description>
<segment>
<pinref part="U$1" gate="G$1" pin="GND"/>
<pinref part="GND6" gate="1" pin="GND"/>
<wire x1="68.58" y1="-27.94" x2="76.2" y2="-27.94" width="0.1524" layer="91"/>
<wire x1="76.2" y1="-27.94" x2="76.2" y2="-30.48" width="0.1524" layer="91"/>
<wire x1="60.96" y1="-27.94" x2="68.58" y2="-27.94" width="0.1524" layer="91"/>
<wire x1="68.58" y1="-27.94" x2="68.58" y2="-30.48" width="0.1524" layer="91"/>
</segment>
<segment>
<pinref part="C2" gate="1" pin="2"/>
<pinref part="GND4" gate="1" pin="GND"/>
<wire x1="-45.72" y1="-5.08" x2="-48.26" y2="-5.08" width="0.1524" layer="91"/>
<wire x1="-48.26" y1="-5.08" x2="-48.26" y2="-7.62" width="0.1524" layer="91"/>
<wire x1="-45.72" y1="-5.08" x2="-50.8" y2="-5.08" width="0.1524" layer="91"/>
<wire x1="-50.8" y1="-5.08" x2="-50.8" y2="-7.62" width="0.1524" layer="91"/>
</segment>
<segment>
<pinref part="GND8" gate="1" pin="GND"/>
......@@ -2310,8 +2310,8 @@ Source: 008-0260-0_E.pdf</description>
<segment>
<pinref part="U$1" gate="G$1" pin="VCC"/>
<pinref part="P+5" gate="VCC" pin="VCC"/>
<wire x1="68.58" y1="-22.86" x2="76.2" y2="-22.86" width="0.1524" layer="91"/>
<wire x1="76.2" y1="-22.86" x2="76.2" y2="-17.78" width="0.1524" layer="91"/>
<wire x1="60.96" y1="-22.86" x2="68.58" y2="-22.86" width="0.1524" layer="91"/>
<wire x1="68.58" y1="-22.86" x2="68.58" y2="-17.78" width="0.1524" layer="91"/>
</segment>
<segment>
<pinref part="IC1" gate="G$1" pin="VCC"/>
......@@ -2372,8 +2372,8 @@ Source: 008-0260-0_E.pdf</description>
<net name="MOSI" class="0">
<segment>
<pinref part="U$1" gate="G$1" pin="MOSI"/>
<wire x1="68.58" y1="-25.4" x2="76.2" y2="-25.4" width="0.1524" layer="91"/>
<label x="73.66" y="-25.4" size="1.778" layer="95"/>
<wire x1="60.96" y1="-25.4" x2="68.58" y2="-25.4" width="0.1524" layer="91"/>
<label x="66.04" y="-25.4" size="1.778" layer="95"/>
</segment>
<segment>
<pinref part="IC1" gate="G$1" pin="PB2(PDI/MOSI/PCINT2)"/>
......@@ -2384,8 +2384,8 @@ Source: 008-0260-0_E.pdf</description>
<net name="RST" class="0">
<segment>
<pinref part="U$1" gate="G$1" pin="RST"/>
<wire x1="60.96" y1="-27.94" x2="53.34" y2="-27.94" width="0.1524" layer="91"/>
<label x="50.8" y="-27.94" size="1.778" layer="95"/>
<wire x1="53.34" y1="-27.94" x2="45.72" y2="-27.94" width="0.1524" layer="91"/>
<label x="43.18" y="-27.94" size="1.778" layer="95"/>
</segment>
<segment>
<pinref part="IC1" gate="G$1" pin="/RESET(PC1)"/>
......@@ -2398,8 +2398,8 @@ Source: 008-0260-0_E.pdf</description>
<net name="SCK" class="0">
<segment>
<pinref part="U$1" gate="G$1" pin="SCK"/>
<wire x1="60.96" y1="-25.4" x2="53.34" y2="-25.4" width="0.1524" layer="91"/>
<label x="50.8" y="-25.4" size="1.778" layer="95"/>
<wire x1="53.34" y1="-25.4" x2="45.72" y2="-25.4" width="0.1524" layer="91"/>
<label x="43.18" y="-25.4" size="1.778" layer="95"/>
</segment>
<segment>
<pinref part="IC1" gate="G$1" pin="PB1(SCK/PCINT1)"/>
......@@ -2410,8 +2410,8 @@ Source: 008-0260-0_E.pdf</description>
<net name="MISO" class="0">
<segment>
<pinref part="U$1" gate="G$1" pin="MISO"/>
<wire x1="60.96" y1="-22.86" x2="53.34" y2="-22.86" width="0.1524" layer="91"/>
<label x="50.8" y="-22.86" size="1.778" layer="95"/>
<wire x1="53.34" y1="-22.86" x2="45.72" y2="-22.86" width="0.1524" layer="91"/>
<label x="43.18" y="-22.86" size="1.778" layer="95"/>
</segment>
<segment>
<pinref part="IC1" gate="G$1" pin="PB3(PDO/MISO/PCINT3)"/>
......
This diff is collapsed.
......@@ -2147,8 +2147,8 @@ Source: 008-0260-0_E.pdf</description>
<part name="D1" library="fabPatil" deviceset="ZENER_DIODE" device="SOD123" value="3.3V"/>
<part name="D2" library="fabPatil" deviceset="ZENER_DIODE" device="SOD123" value="3.3V"/>
<part name="GND3" library="FAB_Hello" deviceset="GND" device=""/>
<part name="R1" library="fabPatil" deviceset="RESISTOR" device="1206" value="22"/>
<part name="R2" library="fabPatil" deviceset="RESISTOR" device="1206" value="22"/>
<part name="R1" library="fabPatil" deviceset="RESISTOR" device="1206" value="499"/>
<part name="R2" library="fabPatil" deviceset="RESISTOR" device="1206" value="499"/>
<part name="P+2" library="FAB_Hello" deviceset="VCC" device=""/>
<part name="JP1" library="fabPatil" deviceset="FTDI_CONNECTOR" device="SMD" value="FTDI"/>
<part name="C1" library="fabPatil" deviceset="UNPOLARIZED_CAPACITOR" device="1206" value="0.1uF"/>
......
FabFTDI_package/FabFTDI_Trace.png

21.6 KB | W: | H:

FabFTDI_package/FabFTDI_Trace.png

21.7 KB | W: | H:

FabFTDI_package/FabFTDI_Trace.png
FabFTDI_package/FabFTDI_Trace.png
FabFTDI_package/FabFTDI_Trace.png
FabFTDI_package/FabFTDI_Trace.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -251,6 +251,69 @@ chip</description>
<text x="-1.639" y="2.27" size="0.4064" layer="25">&gt;Name</text>
<text x="0.361" y="-2.774" size="0.4064" layer="27">&gt;Value</text>
</package>
<package name="6MM_SWITCH">
<description>&lt;b&gt;OMRON SWITCH&lt;/b&gt;</description>
<wire x1="3.302" y1="-0.762" x2="3.048" y2="-0.762" width="0.1524" layer="21"/>
<wire x1="3.302" y1="-0.762" x2="3.302" y2="0.762" width="0.1524" layer="21"/>
<wire x1="3.048" y1="0.762" x2="3.302" y2="0.762" width="0.1524" layer="21"/>
<wire x1="3.048" y1="1.016" x2="3.048" y2="2.54" width="0.1524" layer="51"/>
<wire x1="-3.302" y1="0.762" x2="-3.048" y2="0.762" width="0.1524" layer="21"/>
<wire x1="-3.302" y1="0.762" x2="-3.302" y2="-0.762" width="0.1524" layer="21"/>
<wire x1="-3.048" y1="-0.762" x2="-3.302" y2="-0.762" width="0.1524" layer="21"/>
<wire x1="3.048" y1="2.54" x2="2.54" y2="3.048" width="0.1524" layer="51"/>
<wire x1="2.54" y1="-3.048" x2="3.048" y2="-2.54" width="0.1524" layer="51"/>
<wire x1="3.048" y1="-2.54" x2="3.048" y2="-1.016" width="0.1524" layer="51"/>
<wire x1="-2.54" y1="3.048" x2="-3.048" y2="2.54" width="0.1524" layer="51"/>
<wire x1="-3.048" y1="2.54" x2="-3.048" y2="1.016" width="0.1524" layer="51"/>
<wire x1="-2.54" y1="-3.048" x2="-3.048" y2="-2.54" width="0.1524" layer="51"/>
<wire x1="-3.048" y1="-2.54" x2="-3.048" y2="-1.016" width="0.1524" layer="51"/>
<wire x1="-1.27" y1="1.27" x2="-1.27" y2="-1.27" width="0.0508" layer="51"/>
<wire x1="1.27" y1="-1.27" x2="-1.27" y2="-1.27" width="0.0508" layer="51"/>
<wire x1="1.27" y1="-1.27" x2="1.27" y2="1.27" width="0.0508" layer="51"/>
<wire x1="-1.27" y1="1.27" x2="1.27" y2="1.27" width="0.0508" layer="51"/>
<wire x1="-1.27" y1="3.048" x2="-1.27" y2="2.794" width="0.0508" layer="21"/>
<wire x1="1.27" y1="2.794" x2="-1.27" y2="2.794" width="0.0508" layer="21"/>
<wire x1="1.27" y1="2.794" x2="1.27" y2="3.048" width="0.0508" layer="21"/>
<wire x1="1.143" y1="-2.794" x2="-1.27" y2="-2.794" width="0.0508" layer="21"/>
<wire x1="1.143" y1="-2.794" x2="1.143" y2="-3.048" width="0.0508" layer="21"/>
<wire x1="-1.27" y1="-2.794" x2="-1.27" y2="-3.048" width="0.0508" layer="21"/>
<wire x1="2.54" y1="-3.048" x2="2.159" y2="-3.048" width="0.1524" layer="51"/>
<wire x1="-2.54" y1="-3.048" x2="-2.159" y2="-3.048" width="0.1524" layer="51"/>
<wire x1="-2.159" y1="-3.048" x2="-1.27" y2="-3.048" width="0.1524" layer="21"/>
<wire x1="-2.54" y1="3.048" x2="-2.159" y2="3.048" width="0.1524" layer="51"/>
<wire x1="2.54" y1="3.048" x2="2.159" y2="3.048" width="0.1524" layer="51"/>
<wire x1="2.159" y1="3.048" x2="1.27" y2="3.048" width="0.1524" layer="21"/>
<wire x1="1.27" y1="3.048" x2="-1.27" y2="3.048" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="3.048" x2="-2.159" y2="3.048" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="-3.048" x2="1.143" y2="-3.048" width="0.1524" layer="21"/>
<wire x1="1.143" y1="-3.048" x2="2.159" y2="-3.048" width="0.1524" layer="21"/>
<wire x1="3.048" y1="-0.762" x2="3.048" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="3.048" y1="0.762" x2="3.048" y2="1.016" width="0.1524" layer="21"/>
<wire x1="-3.048" y1="-0.762" x2="-3.048" y2="-1.016" width="0.1524" layer="21"/>
<wire x1="-3.048" y1="0.762" x2="-3.048" y2="1.016" width="0.1524" layer="21"/>
<wire x1="-1.27" y1="-2.159" x2="1.27" y2="-2.159" width="0.1524" layer="51"/>
<wire x1="1.27" y1="2.286" x2="-1.27" y2="2.286" width="0.1524" layer="51"/>
<wire x1="-2.413" y1="1.27" x2="-2.413" y2="0.508" width="0.1524" layer="51"/>
<wire x1="-2.413" y1="-0.508" x2="-2.413" y2="-1.27" width="0.1524" layer="51"/>
<wire x1="-2.413" y1="0.508" x2="-2.159" y2="-0.381" width="0.1524" layer="51"/>
<circle x="0" y="0" radius="1.778" width="0.1524" layer="21"/>
<circle x="-2.159" y="-2.159" radius="0.508" width="0.1524" layer="51"/>
<circle x="2.159" y="-2.032" radius="0.508" width="0.1524" layer="51"/>
<circle x="2.159" y="2.159" radius="0.508" width="0.1524" layer="51"/>
<circle x="-2.159" y="2.159" radius="0.508" width="0.1524" layer="51"/>
<circle x="0" y="0" radius="0.635" width="0.0508" layer="51"/>
<circle x="0" y="0" radius="0.254" width="0.1524" layer="21"/>
<smd name="1" x="-3.302" y="2.286" dx="2.286" dy="1.524" layer="1"/>
<smd name="2" x="3.302" y="2.286" dx="2.286" dy="1.524" layer="1"/>
<smd name="3" x="-3.302" y="-2.286" dx="2.286" dy="1.524" layer="1"/>
<smd name="4" x="3.302" y="-2.286" dx="2.286" dy="1.524" layer="1"/>
<text x="-3.048" y="3.683" size="1.27" layer="25" ratio="10">&gt;NAME</text>
<text x="-3.048" y="-5.08" size="1.27" layer="27" ratio="10">&gt;VALUE</text>
<text x="-4.318" y="1.651" size="1.27" layer="51" ratio="10">1</text>
<text x="3.556" y="1.524" size="1.27" layer="51" ratio="10">2</text>
<text x="-4.572" y="-2.794" size="1.27" layer="51" ratio="10">3</text>
<text x="3.556" y="-2.794" size="1.27" layer="51" ratio="10">4</text>
</package>