<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arduino中国 &#187; 手册</title>
	<atom:link href="http://blog.flamingoeda.com/category/manual/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.flamingoeda.com</link>
	<description>Flamingo EDA</description>
	<lastBuildDate>Sat, 13 Aug 2011 11:41:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Arduino L298N 电机驱动扩展板 V03 使用手册</title>
		<link>http://blog.flamingoeda.com/2011/02/18/arduino-l298n-%e7%94%b5%e6%9c%ba%e9%a9%b1%e5%8a%a8%e6%89%a9%e5%b1%95%e6%9d%bf-v03-%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</link>
		<comments>http://blog.flamingoeda.com/2011/02/18/arduino-l298n-%e7%94%b5%e6%9c%ba%e9%a9%b1%e5%8a%a8%e6%89%a9%e5%b1%95%e6%9d%bf-v03-%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 01:25:28 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[手册]]></category>
		<category><![CDATA[l298n]]></category>
		<category><![CDATA[电机]]></category>

		<guid isPermaLink="false">http://blog.flamingoeda.com/?p=716</guid>
		<description><![CDATA[Arduino电机驱动扩展板 L298N V03是我们最新的电机驱动扩展板： 同前一版本的Arduino L298N 电机驱动扩展板相比，V03版本的改动主要是添加了更多的设置开关，以满足不同场合下的应用要求： VLO（Voltage Logic Onboard） 电机驱动芯片L298N在工作的时候有两个电压：逻辑电压和电机电压，其中逻辑电压是5V，一般会小于电机电压（比如7.2V，9V或者12V）。为了能够将接在VEX端子上的电机电压转换成5V逻辑电压使用，电机驱动板上提供了相应的电压转换电路。电压转换电路的工作电压是受限的（小于20V），所以如果电机大于20V的时候，就不能使用这个电压转换电路了。VLO开关的作用就是选择是打开（开关置于ON）还是关闭（开关置于OFF）板上这一逻辑转换电路。 VLC（Voltage Logic Connected） L298N电机驱动扩展板上的逻辑电压除了可以通过上面介绍的电压转换电路提供之后，也可以通过与Arduino控制板上的5V逻辑电压直接连接来提供。VLC开关的作用是决定是否将电机驱动扩展板上的5V逻辑电压与Arduino控制板上的5V逻辑电压连接起来：当开关置于ON的位置上时连接，当开关置于OFF的位置上时不连接。 VM（Voltage Motor）： VM的作用是对电机电压进行选择。当L298N电机驱动扩展板与Arduino连接起来之后，有两种办法为电机提供电源：通过Arduino板上的Vin引脚（开关置于VIN）和通过电机驱动扩展板上的VEX端子（开关置于VEX）。 相对于Arduino来讲，L298N电机驱动扩展板所承载的电流和电压都是比较高的，因此在使用的过程中要特别注意连线。下面提供几种典型的电路连接方式供大家在使用中参考： 1. 电机电压为6~12V 一般来讲，Arduino可以通过外接的6V-12V变压器进行供电（Arduino上的Vin引脚），如果你的电机电压正好在这个范围之内，那就正好可以利用这一外接电源来同时为Arduino和电机供电。这种情况下VLO、VLC和VM三者的设置为： VLO：OFF，不需要电机驱动扩展板上的电压转换电路 VLC：ON，与Arduino的5V引脚进行连接，为电机驱动扩展板提供逻辑电压 VM：VIN，与Arduino的Vin引脚进行连接，为电机驱动扩展板提供电机电压 2. 电机电压小于6V 这种情况下只能通过电机驱动扩展板上的GND和VEX两个端子来给电机供电，此时电机驱动扩展板上的5V逻辑电压转换电路无法正常工作（VEX电压太低），所以我们只能同Arduino板上的5V引脚连接来为电机驱动扩展板提供5V逻辑电压。这种情况下电机驱动扩展板的设置为： VLO：OFF，不需要电机驱动扩展板上的电压转换电路 VLC：ON，与Arduino的5V引脚进行连接，为电机驱动扩展板提供5V逻辑电压 VM：VEX，通过电机驱动扩展板上的VEX/GND端子为电机提供驱动电压 3. 电机电压为12V-20V 这种情况下也只能是通过电机驱动扩展板上的GND和VEX两个端子来给电机供电，此时电机驱动扩展板上的5V 逻辑电压转换电路可以正常工作。这种情况下电机 驱动扩展板的设置为： VLO：ON，需要电机驱动扩展板上的电压转换电路 VLC：OFF，不与Arduino的5V引脚进行连接，安全隔离 VM：VEX，通过电机驱动扩展板上的VEX/GND端子为电机提供驱动电压 上述设置中因为VLC并没有将Arduino的5V引脚与电机扩展板上的5V逻辑电压连接起来，因此我们仍需要再额外为Arduino供电（通过USB线或者外接电源），主要是出于安全隔离的考虑，特别是在VEX上的电压比较高的情况下。 4. 电机电压为20V-46V 这种情况下也只能是通过电机驱动扩展板上的GND和VEX两个端子来给电机供电，此时电机驱动扩展板上的5V 逻辑电压转换电路无法正常工作（VEX电压太低）。这种情况下电机 驱动扩展板的设置为： VLO：OFF，不需要电机驱动扩展板上的电压转换电路 VLC：ON，与Arduino的5V引脚进行连接，为电机驱动扩展板提供5V逻辑电压 VM：VEX，通过电机驱动扩展板上的VEX/GND端子为电机提供驱动电压 除了这些配置上的不同之外，V03与前一版本不存在太大的区别，因此你可以参考Arduino L298N 电机驱动扩展板中的代码进行电机的驱动。]]></description>
			<content:encoded><![CDATA[<p>Arduino电机驱动扩展板 L298N V03是我们最新的电机驱动扩展板：</p>
<p><img class="aligncenter" title="l298n" src="http://image.flamingoeda.com/albums/userpics/10002/shield_l298n_v03_3.JPG" alt="" width="460" height="345" /></p>
<p>同前一版本的<a href="http://blog.flamingoeda.com/2009/04/19/arduino-l298n-%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8%E6%89%A9%E5%B1%95%E6%9D%BF/">Arduino L298N 电机驱动扩展板</a>相比，V03版本的改动主要是添加了更多的设置开关，以满足不同场合下的应用要求：</p>
<p><img class="aligncenter" title="l298n" src="http://image.flamingoeda.com/albums/userpics/10002/shield_l298n_v03_1.JPG" alt="" width="460" height="345" /></p>
<ul>
<li>VLO（Voltage Logic Onboard）</li>
</ul>
<p>电机驱动芯片L298N在工作的时候有两个电压：逻辑电压和电机电压，其中逻辑电压是5V，一般会小于电机电压（比如7.2V，9V或者12V）。为了能够将接在VEX端子上的电机电压转换成5V逻辑电压使用，电机驱动板上提供了相应的电压转换电路。电压转换电路的工作电压是受限的（小于20V），所以如果电机大于20V的时候，就不能使用这个电压转换电路了。VLO开关的作用就是选择是打开（开关置于ON）还是关闭（开关置于OFF）板上这一逻辑转换电路。</p>
<ul>
<li>VLC（Voltage Logic Connected）</li>
</ul>
<p>L298N电机驱动扩展板上的逻辑电压除了可以通过上面介绍的电压转换电路提供之后，也可以通过与Arduino控制板上的5V逻辑电压直接连接来提供。VLC开关的作用是决定是否将电机驱动扩展板上的5V逻辑电压与Arduino控制板上的5V逻辑电压连接起来：当开关置于ON的位置上时连接，当开关置于OFF的位置上时不连接。</p>
<ul>
<li>VM（Voltage Motor）：</li>
</ul>
<p>VM的作用是对电机电压进行选择。当L298N电机驱动扩展板与Arduino连接起来之后，有两种办法为电机提供电源：通过Arduino板上的Vin引脚（开关置于VIN）和通过电机驱动扩展板上的VEX端子（开关置于VEX）。</p>
<p>相对于Arduino来讲，L298N电机驱动扩展板所承载的电流和电压都是比较高的，因此在使用的过程中要特别注意连线。下面提供几种典型的电路连接方式供大家在使用中参考：</p>
<h3>1. 电机电压为6~12V</h3>
<p>一般来讲，Arduino可以通过外接的6V-12V变压器进行供电（Arduino上的Vin引脚），如果你的电机电压正好在这个范围之内，那就正好可以利用这一外接电源来同时为Arduino和电机供电。这种情况下VLO、VLC和VM三者的设置为：</p>
<ul>
<li>VLO：OFF，不需要电机驱动扩展板上的电压转换电路</li>
<li>VLC：ON，与Arduino的5V引脚进行连接，为电机驱动扩展板提供逻辑电压</li>
<li>VM：VIN，与Arduino的Vin引脚进行连接，为电机驱动扩展板提供电机电压</li>
</ul>
<p><img class="aligncenter" title="l298n" src="http://image.flamingoeda.com/albums/userpics/10002/shield_l298n_v03_4.JPG" alt="" width="460" height="345" /></p>
<h3>2. 电机电压小于6V</h3>
<p>这种情况下只能通过电机驱动扩展板上的GND和VEX两个端子来给电机供电，此时电机驱动扩展板上的5V逻辑电压转换电路无法正常工作（VEX电压太低），所以我们只能同Arduino板上的5V引脚连接来为电机驱动扩展板提供5V逻辑电压。这种情况下电机驱动扩展板的设置为：</p>
<ul>
<li>VLO：OFF，不需要电机驱动扩展板上的电压转换电路</li>
<li>VLC：ON，与Arduino的5V引脚进行连接，为电机驱动扩展板提供5V逻辑电压</li>
<li>VM：VEX，通过电机驱动扩展板上的VEX/GND端子为电机提供驱动电压</li>
</ul>
<p><img class="aligncenter" title="l298n" src="http://image.flamingoeda.com/albums/userpics/10002/shield_l298n_v03_5.JPG" alt="" width="460" height="345" /></p>
<h3>3. 电机电压为12V-20V</h3>
<p>这种情况下也只能是通过电机驱动扩展板上的GND和VEX两个端子来给电机供电，此时电机驱动扩展板上的5V 逻辑电压转换电路可以正常工作。这种情况下电机 驱动扩展板的设置为：</p>
<ul>
<li>VLO：ON，需要电机驱动扩展板上的电压转换电路</li>
<li>VLC：OFF，不与Arduino的5V引脚进行连接，安全隔离</li>
<li>VM：VEX，通过电机驱动扩展板上的VEX/GND端子为电机提供驱动电压</li>
</ul>
<p><img class="aligncenter" title="l298n" src="http://image.flamingoeda.com/albums/userpics/10002/shield_l298n_v03_6.JPG" alt="" width="460" height="345" /></p>
<p>上述设置中因为VLC并没有将Arduino的5V引脚与电机扩展板上的5V逻辑电压连接起来，因此我们仍需要再额外为Arduino供电（通过USB线或者外接电源），主要是出于安全隔离的考虑，特别是在VEX上的电压比较高的情况下。</p>
<h3>4. 电机电压为20V-46V</h3>
<p>这种情况下也只能是通过电机驱动扩展板上的GND和VEX两个端子来给电机供电，此时电机驱动扩展板上的5V 逻辑电压转换电路无法正常工作（VEX电压太低）。这种情况下电机 驱动扩展板的设置为：</p>
<ul>
<li>VLO：OFF，不需要电机驱动扩展板上的电压转换电路</li>
<li>VLC：ON，与Arduino的5V引脚进行连接，为电机驱动扩展板提供5V逻辑电压</li>
<li>VM：VEX，通过电机驱动扩展板上的VEX/GND端子为电机提供驱动电压</li>
</ul>
<p><img class="aligncenter" title="l298n" src="http://image.flamingoeda.com/albums/userpics/10002/shield_l298n_v03_7.JPG" alt="" width="460" height="345" /></p>
<p>除了这些配置上的不同之外，V03与前一版本不存在太大的区别，因此你可以参考<a href="../2009/04/19/arduino-l298n-%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8%E6%89%A9%E5%B1%95%E6%9D%BF/">Arduino L298N 电机驱动扩展板</a>中的代码进行电机的驱动。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2011/02/18/arduino-l298n-%e7%94%b5%e6%9c%ba%e9%a9%b1%e5%8a%a8%e6%89%a9%e5%b1%95%e6%9d%bf-v03-%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arduino 官方支持下载线 USBtinyISP 使用手册</title>
		<link>http://blog.flamingoeda.com/2009/05/01/arduino-%e5%ae%98%e6%96%b9%e6%94%af%e6%8c%81%e4%b8%8b%e8%bd%bd%e7%ba%bf-usbtinyisp-%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</link>
		<comments>http://blog.flamingoeda.com/2009/05/01/arduino-%e5%ae%98%e6%96%b9%e6%94%af%e6%8c%81%e4%b8%8b%e8%bd%bd%e7%ba%bf-usbtinyisp-%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/#comments</comments>
		<pubDate>Fri, 01 May 2009 07:15:51 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[手册]]></category>
		<category><![CDATA[下载线]]></category>

		<guid isPermaLink="false">http://blog.arduino.cn/?p=377</guid>
		<description><![CDATA[USBtinyISP也是一款为AVR单片机设计的基于USB接口的ISP下载线，使用它可以为大部分AVR单片机下载程序。在Arduino IDE中，USBtinyISP是一直被支持的下载线，用来下载其bootloader，与之前使用的USBasp 下载线相比，使用起来更加简单了;-) 首先从这里下载USBtinyISP驱动程序，将其解压缩到硬盘上备用。将下载线通过USB线连接到计算机后，系统会提示找到相应的硬件： 在随后出现的“找到新的硬件向导”对话框中，选“否，暂时不”，然后单击“下一步”按钮： 在随后出现的对话框中，选“从列表或指定位置安装（高级）”，然后单击“下一步”按钮： 接着指定之前解压缩开的驱动文件所在的目录： 单击“下一步”按钮之后，系统就开始安装USBtinyISP所需要的驱动文件： 最后单击“完成”按钮，就大功告成了： 此时在系统的硬件管理器中，我们能够找到“USBtinyISP AVR Programmer”，表明该下载线已经可以使用了： USBtinyISP V2在设计的时候，设置了相应的跳线来为单片机供电。在为Arduino下载bootloader的时候，我们需要将该跳线短路，这样就不需要再为Arduino提供额外的电源了： 用6芯的连接线将USBtinyISP和Arduino上的ICSP座连接起来： 注意由于Arduino的ICSP座并没有设计反插反的座，你需要6芯连接线上带三角形的那一位是对应于ICSP座上的“1”： a 硬件连接好之后，此时可以打开Arduino的IDE了。在菜单“Tools”-&#62;“Board”列表中选择好你的Arduino板子的型号之后，就可以通过菜单“Tools”-&#62;“Burn Bootloader”-&#62;“w/ USBtinyISP”来下载Arduino的bootloader： 整个下载的过程中，USBtinyISP上红色的BUSY灯会一直亮着，表明其正在工作： 整个下载过程会持续一段时间，但速度与USBasp相比还是要快一些。下载完成之后，在Arduino IDE窗口中会显示“Done burning bootloader”：]]></description>
			<content:encoded><![CDATA[<p>USBtinyISP也是一款为AVR单片机设计的基于USB接口的ISP下载线，使用它可以为大部分AVR单片机下载程序。在Arduino IDE中，USBtinyISP是一直被支持的下载线，用来下载其bootloader，与之前使用的USBasp 下载线相比，使用起来更加简单了;-)</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_1.png" alt="" width="400" height="300" /></p>
<p style="text-align: center;"><img class="alignnone" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_2.png" alt="" width="400" height="300" /></p>
<p>首先从这里<a href="http://blog.flamingoeda.com/wp-content/uploads/2009/05/usbtinyisp-w32-driver-v112.zip">下载USBtinyISP驱动程序</a>，将其解压缩到硬盘上备用。将下载线通过USB线连接到计算机后，系统会提示找到相应的硬件：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/usbtinyisp_detec_hardware.png" alt="" width="135" height="111" /></p>
<p>在随后出现的“找到新的硬件向导”对话框中，选“否，暂时不”，然后单击“下一步”按钮：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_wizard_1.png" alt="" width="400" height="292" /></p>
<p>在随后出现的对话框中，选“从列表或指定位置安装（高级）”，然后单击“下一步”按钮：</p>
<p style="text-align: center;"><a href="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_wizard_2.png"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_wizard_2.png" alt="" width="400" height="292" /></a></p>
<p>接着指定之前解压缩开的驱动文件所在的目录：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_wizard_3.png" alt="" width="400" height="292" /></p>
<p>单击“下一步”按钮之后，系统就开始安装USBtinyISP所需要的驱动文件：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_wizard_4.png" alt="" width="400" height="292" /></p>
<p>最后单击“完成”按钮，就大功告成了：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_wizard_5.png" alt="" width="399" height="292" /></p>
<p>此时在系统的硬件管理器中，我们能够找到“USBtinyISP AVR Programmer”，表明该下载线已经可以使用了：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_hardware_manager.png" alt="" width="400" height="331" /></p>
<p>USBtinyISP V2在设计的时候，设置了相应的跳线来为单片机供电。在为Arduino下载bootloader的时候，我们需要将该跳线短路，这样就不需要再为Arduino提供额外的电源了：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_3.png" alt="" width="399" height="297" /></p>
<p>用6芯的连接线将USBtinyISP和Arduino上的ICSP座连接起来：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_5.png" alt="" width="400" height="300" /></p>
<p>注意由于Arduino的ICSP座并没有设计反插反的座，你需要6芯连接线上带三角形的那一位是对应于ICSP座上的“1”：</p>
<p style="text-align: center;">a<img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_4.png" alt="" width="400" height="300" /></p>
<p>硬件连接好之后，此时可以打开Arduino的IDE了。在菜单“Tools”-&gt;“Board”列表中选择好你的Arduino板子的型号之后，就可以通过菜单“Tools”-&gt;“Burn Bootloader”-&gt;“w/ USBtinyISP”来下载Arduino的bootloader：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_ide_burn.png" alt="" width="400" height="331" /></p>
<p>整个下载的过程中，USBtinyISP上红色的BUSY灯会一直亮着，表明其正在工作：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_6.png" alt="" width="400" height="300" /></p>
<p>整个下载过程会持续一段时间，但速度与USBasp相比还是要快一些。下载完成之后，在Arduino IDE窗口中会显示“Done burning bootloader”：</p>
<p style="text-align: center;"><img class="aligncenter" src="http://image.flamingoeda.com/albums/userpics/normal_usbtinyisp_ide_done.png" alt="" width="399" height="150" /></p>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2009/05/01/arduino-%e5%ae%98%e6%96%b9%e6%94%af%e6%8c%81%e4%b8%8b%e8%bd%bd%e7%ba%bf-usbtinyisp-%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Arduino L298N 电机驱动扩展板</title>
		<link>http://blog.flamingoeda.com/2009/04/19/arduino-l298n-%e7%94%b5%e6%9c%ba%e9%a9%b1%e5%8a%a8%e6%89%a9%e5%b1%95%e6%9d%bf/</link>
		<comments>http://blog.flamingoeda.com/2009/04/19/arduino-l298n-%e7%94%b5%e6%9c%ba%e9%a9%b1%e5%8a%a8%e6%89%a9%e5%b1%95%e6%9d%bf/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 16:07:26 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[手册]]></category>
		<category><![CDATA[电机]]></category>

		<guid isPermaLink="false">http://blog.arduino.cn/?p=373</guid>
		<description><![CDATA[之前设计的基于L293D的直流电机驱动扩展板，虽然也能够接两个直流电机，但由于从于对接口数目的考虑，因此无法分别控制两路电机的旋转方向。此外，在带动较大功能的电机时，L293D也显得稍有些不足。出于这些考虑，在吸纳了一些网友的建议之后，此处设计了一个基于L298N的电机驱动扩展板。L298N是S一种高电压、大电流电机驱动芯片，其中最高工作电压可达46V，持续工作电流为2A，瞬间峰值电流更是可达 3A。该芯片内含两个H桥的高电压大电流全桥式驱动器，可以直接驱动两个直流电动机。 该扩展板在电路连接上首先要考虑的是如何给电机供电，如果你的Arduino采用的是外部供电方式（比如接9V的变压器时），而且该供电方式同你的电机也是驱配的（比如9V的直流电机），那么就可以将电机接到MA（A+和A-两个接线座）或者MB（B+和B-两个接线座）上： 然后再将VM跳线接到VIN端就： 另外一起连接方式是直接给电机单独提供一个不超过35V的电源，分别接在电机扩展板的GND和VEX接线座上，电机同样还是接在MA或者MB上： 但VM跳线此时则需要接到VEX端： 从控制原理上讲，L298N与L293D基本是一样的，都是分别通过两根方向引脚来控制电机的旋转方向，再通过一根使能引脚上的PWM信号来控制电机的转速。具体到该扩展板上，电机MA的方向引脚为Arduino的13和12号管脚，速度引脚则是Arduino的10号管脚；电机MB的方向引脚为Arduino的11和8号管脚，速度引脚则是Arduino的9号管脚。示例代码如下所示： // motor A int dir1PinA = 13; int dir2PinA = 12; int speedPinA = 10; // motor B // motor A int dir1PinB = 11; int dir2PinB = 8; int speedPinB = 9; unsigned long time; int speed; int dir; void setup() { pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT); pinMode(speedPinA, [...]]]></description>
			<content:encoded><![CDATA[<p>之前设计的基于L293D的直流电机驱动扩展板，虽然也能够接两个直流电机，但由于从于对接口数目的考虑，因此无法分别控制两路电机的旋转方向。此外，在带动较大功能的电机时，L293D也显得稍有些不足。出于这些考虑，在吸纳了一些网友的建议之后，此处设计了一个基于L298N的电机驱动扩展板。L298N是S一种高电压、大电流电机驱动芯片，其中最高工作电压可达46V，持续工作电流为2A，瞬间峰值电流更是可达 3A。该芯片内含两个H桥的高电压大电流全桥式驱动器，可以直接驱动两个直流电动机。</p>
<p><img class="aligncenter" title="Arduino L298N 电机驱动扩展板" src="http://image.flamingoeda.com/albums/userpics/l298N_shield_2.png" alt="" width="460" height="345" /></p>
<p>该扩展板在电路连接上首先要考虑的是如何给电机供电，如果你的Arduino采用的是外部供电方式（比如接9V的变压器时），而且该供电方式同你的电机也是驱配的（比如9V的直流电机），那么就可以将电机接到MA（A+和A-两个接线座）或者MB（B+和B-两个接线座）上：</p>
<p><img class="aligncenter" title="L298N" src="http://image.flamingoeda.com/albums/userpics/l298N_shield_3.png" alt="" width="460" height="345" /></p>
<p>然后再将VM跳线接到VIN端就：</p>
<p><img class="aligncenter" title="L298N" src="http://image.flamingoeda.com/albums/userpics/l298N_shield_4.png" alt="" width="460" height="345" /></p>
<p>另外一起连接方式是直接给电机单独提供一个不超过35V的电源，分别接在电机扩展板的GND和VEX接线座上，电机同样还是接在MA或者MB上：</p>
<p><img class="aligncenter" title="L298N" src="http://image.flamingoeda.com/albums/userpics/l298N_shield_5.png" alt="" width="460" height="345" /></p>
<p>但VM跳线此时则需要接到VEX端：</p>
<p><img class="aligncenter" title="L298N" src="http://image.flamingoeda.com/albums/userpics/l298N_shield_6.png" alt="" width="460" height="345" /></p>
<p>从控制原理上讲，L298N与L293D基本是一样的，都是分别通过两根方向引脚来控制电机的旋转方向，再通过一根使能引脚上的PWM信号来控制电机的转速。具体到该扩展板上，电机MA的方向引脚为Arduino的13和12号管脚，速度引脚则是Arduino的10号管脚；电机MB的方向引脚为Arduino的11和8号管脚，速度引脚则是Arduino的9号管脚。示例代码如下所示：</p>
<pre class="java">// motor A
int dir1PinA = 13;
int dir2PinA = 12;
int speedPinA = 10;

// motor B
// motor A
int dir1PinB = 11;
int dir2PinB = 8;
int speedPinB = 9;

unsigned long time;
int speed;
int dir;

void setup() {
  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
  pinMode(speedPinA, OUTPUT);
  pinMode(dir1PinB, OUTPUT);
  pinMode(dir2PinB, OUTPUT);
  pinMode(speedPinB, OUTPUT);

  time = millis();
  speed = 0;
  dir = 1;
}

void loop() {
  analogWrite(speedPinA, speed);
  analogWrite(speedPinB, 255 - speed);
  // set direction
  if (1 == dir) {
    digitalWrite(dir1PinA, LOW);
    digitalWrite(dir2PinA, HIGH);
    digitalWrite(dir1PinB, HIGH);
    digitalWrite(dir2PinB, LOW);
  } else {
    digitalWrite(dir1PinA, HIGH);
    digitalWrite(dir2PinA, LOW);
    digitalWrite(dir1PinB, LOW);
    digitalWrite(dir2PinB, HIGH);
  }
  if (millis() - time &gt; 5000)  {
    time = millis();
    speed += 20;
    if (speed &gt; 255) {
      speed = 0;
    }
    if (1 == dir) {
      dir = 0;
    } else {
      dir =1;
    }
  }
}</pre>
<p>为了对电机的工作状态有更加直观的理解，扩展板上还专门添加了4个LED来分别表示电机的转动方向，其亮度也正好表明了电机转速的高低，非常方便：</p>
<p><img class="aligncenter" title="L298N" src="http://image.flamingoeda.com/albums/userpics/l298N_shield_7.png" alt="" width="460" height="345" /></p>
<p>另外，该扩展板上还设计了一个VL跳线，是用来对为L298N选择逻辑电平的，通常我们接到V5V这端，即从Arduino板子上取得该逻辑电压。</p>
<p style="text-align: center;"><img class="aligncenter" title="L298N" src="http://image.flamingoeda.com/albums/userpics/l298N_shield_8.png" alt="" width="180" height="135" /></p>
<p>上述VL跳线如果接VEX的话，相应的逻辑电压则是通过电机外接电源VEX分压后得到的，该分压器采用的是LM3940，其最高耐压值为35V，这也一定程序上决定了该扩展能够随受的最高电压为35V。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2009/04/19/arduino-l298n-%e7%94%b5%e6%9c%ba%e9%a9%b1%e5%8a%a8%e6%89%a9%e5%b1%95%e6%9d%bf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Arduino Mini使用手册</title>
		<link>http://blog.flamingoeda.com/2008/05/02/arduino-mini%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</link>
		<comments>http://blog.flamingoeda.com/2008/05/02/arduino-mini%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/#comments</comments>
		<pubDate>Fri, 02 May 2008 03:44:47 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[手册]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2008/05/02/arduino-mini%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</guid>
		<description><![CDATA[Arduino Mini虽然非常小巧，但同样具有Arduino的所有功能，只是在使用上稍有区别。标准版的Arduino板上自带USB转串口的下载电路，因此只需要再加一条USB线就可以完成所有的开发工作。Arduino Mini出于体积上的考虑，将程序下载电路和功能电路分开了，因此开发过程稍显麻烦一些。 由于Arduino Mini没有相应的下载电路，因此程序下载需要借助相应的USB适配器来完成： 将Arduino Mini和USB适配器插到万用板上后，首先用线将两者的5V和GND连接起来： 接着再将两者的TX和RX分别连接起来： 最后再通过一个100nF的电容，将USB适配器上的DTR（上排第6个引脚）和Arduino Mini上的RST连接起来。这部分电路是借助DTR上的信号，对Arduino Mini进行复位，Arduino Diecimila提到的自动复位，指的就是这个： 好了，连上USB线，开始为你的Arduino Mini下载程序吧，所有的操作跟标准版的Arduino是完全一样的:)]]></description>
			<content:encoded><![CDATA[<p>Arduino Mini虽然非常小巧，但同样具有Arduino的所有功能，只是在使用上稍有区别。标准版的Arduino板上自带USB转串口的下载电路，因此只需要再加一条USB线就可以完成所有的开发工作。Arduino Mini出于体积上的考虑，将程序下载电路和功能电路分开了，因此开发过程稍显麻烦一些。</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_mini_pin.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_mini_pin.png" /></a></p>
<p>由于Arduino Mini没有相应的下载电路，因此程序下载需要借助相应的USB适配器来完成：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_usb_adapter_pin.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_usb_adapter_pin.png" /></a></p>
<p>将Arduino Mini和USB适配器插到万用板上后，首先用线将两者的5V和GND连接起来：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_mini_manual_power.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_mini_manual_power.png" /></a></p>
<p>接着再将两者的TX和RX分别连接起来：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_mini_manual_rxtx.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_mini_manual_rxtx.png" /></a></p>
<p>最后再通过一个100nF的电容，将USB适配器上的DTR（上排第6个引脚）和Arduino Mini上的RST连接起来。这部分电路是借助DTR上的信号，对Arduino Mini进行复位，Arduino Diecimila提到的自动复位，指的就是这个：</p>
<p><a href="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_mini_manual_reset.png"></a></p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_mini_manual_reset.png"><img src="http://blog.booksforce.com/wp-content/uploads/2008/05/arduino_mini_manual_reset.png" /></a></p>
<p>好了，连上USB线，开始为你的Arduino Mini下载程序吧，所有的操作跟标准版的Arduino是完全一样的:)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2008/05/02/arduino-mini%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Arduino XBee模块使用手册</title>
		<link>http://blog.flamingoeda.com/2007/11/28/arduino-xbee%e6%a8%a1%e5%9d%97%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</link>
		<comments>http://blog.flamingoeda.com/2007/11/28/arduino-xbee%e6%a8%a1%e5%9d%97%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/#comments</comments>
		<pubDate>Wed, 28 Nov 2007 15:51:09 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[手册]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2007/11/28/arduino-xbee%e6%a8%a1%e5%9d%97%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</guid>
		<description><![CDATA[XBee是美国MaxStream公司基于ZigBee技术的一个无线传输模块，该模块使用起来非常简单，我们只需要简单的把数据输入到一个模块，它就能自动的被发送到无线连接的另一端，同时也支持AT 命令进行高级配置。 这里介绍的Arduino XBee模块包括一块针对Arduino量身定制的扩展板，以及一个XBee Pro模块： 使用这样一对Arduino XBee模块，我们就可以实现一个最简单的包含两个结点的ZigBee网络，完成Arduino之间的无线通信。ZigBee技术本身也支持多个结点组成的复杂网络。 XBee模块在正常工作之前必须进行相应的设置。对XBee模块的设置既可以按照XBee手册里介绍的AT指令，通过串行终端完成，也可以借助X-CTU这一工具来完成，你可以在这里下载本文用到的版本进行安装。 将Arduino XBee扩展板连接到Arduino母板上，然后将Arduino XBee扩展板上的两个跳线置于USB一端，这样X-CTU才能通过Arduino的USB接口对XBee模块进行配置： 注意，下面的步骤会用到Arduino的USB接口以及TX和RX管脚，所以请确保运行在Arduion上的工程里没有对串行接口的操作，或者将AVR芯片从Arduino板上取下之后再进行下面的步骤。 在用USB电缆将Arduino与PC机连接好之后， 运行X-CTU软件。首先我们在“PC Settings”中里选择对应的通信端口，并设置好波特率等参数。XBee模块出厂里默认的设置为9600，8N1。 此时我们可以单击“Test/Query”按钮，来测试是否能够正确地连接上XBee模块。如果一切正常，我们将看到如下的对话框。如果通信参数设置都是正确的，但仍然无法与XBee模块通信上，则请检查USB连线和Arduino XBee扩展板上的跳线，必要的时候可以拨掉Arduino上的ATmega单片机再试。 测试正常之后转到“Modem Configuration”。首先单击“Modem Parameters and Firmware”中的“Read”按钮读出XBee模块中的当前参数，接着在读出的“Networking &#38; Security”中将“Channel”设为“C”，将“PAN ID”设置为“1234”。 我们在这里要实现的是一个最简单的点对点网络，所以只需要对另外一个Arduino XBee模块做完全相同的设置就可以了。两个Arduino XBee模块都设置好之后，运行两个X-CTU并在“PC Settings”中选择不同的通信接口，分别对两个Arduino XBee模块进行控制。 在X-CTU的“Terminal”中我们可以手工输入需要XBee模块传输的数据，这些数据在收到之后会被自动发送到另一个XBee模块，并在另一个X-CTU的“Terminal”中显示出来。其中蓝色的表示发送的数据，红色的表示接收的数据： 至此，基本说明你的Arduino XBee模块能够正常收发数据了，接下去要做的就是在Arduino工程里如何利用XBee进行无线数据的收发了。通过上面的步骤不难看出，在Arduino工程中只需要将要发送的数据通过Arduino的串行通信接口发送给XBee模块就可以了，然后在另一个Arduino模块中通过串行接口读出来就可以了。但要想要构建更加复杂的网络，就得仔细读读XBee的使用手册，并好好了解ZigBee技术了;-)]]></description>
			<content:encoded><![CDATA[<p><span style="color: black; font-family: 宋体">XBee是美国</span><span style="color: black" lang="EN-US"><a href="http://www.maxstream.net/" target="_blank">MaxStream</a>公司基于ZigBee技术的一个无线传输模块，该模块使用起来非常简单，我们只需要简单的把数据输入到一个模块，它就能自动的被发送到无线连接的另一端，同时也支持AT 命令进行高级配置。</span></p>
<p>这里介绍的Arduino XBee模块包括一块针对Arduino量身定制的扩展板，以及一个XBee Pro模块：</p>
<p><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_shield.png"></a></p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_shield.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_shield.png" /></a></p>
<p>使用这样一对Arduino XBee模块，我们就可以实现一个最简单的包含两个结点的ZigBee网络，完成Arduino之间的无线通信。ZigBee技术本身也支持多个结点组成的复杂网络。</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_module.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_module.png" /></a></p>
<p>XBee模块在正常工作之前必须进行相应的设置。对XBee模块的设置既可以按照<a href="http://site.gridconnect.com/docs/MaxStream/XBee_Manual_GC.pdf" target="_blank">XBee手册</a>里介绍的AT指令，通过串行终端完成，也可以借助<a href="http://www.maxstream.net/support/xctu/setup_x-ctu.exe" target="_blank">X-CTU</a>这一工具来完成，你可以在这里<a href="http://blog.booksforce.com/wp-content/uploads/2007/11/setup_x-ctu.exe" target="_blank">下载</a>本文用到的版本进行安装。</p>
<p>将Arduino XBee扩展板连接到Arduino母板上，然后将Arduino XBee扩展板上的两个跳线置于USB一端，这样X-CTU才能通过Arduino的USB接口对XBee模块进行配置：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_jumper.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_jumper.png" /></a></p>
<p><font color="#800000">注意，下面的步骤会用到Arduino的USB接口以及TX和RX管脚，所以请确保运行在Arduion上的工程里没有对串行接口的操作，或者将AVR芯片从Arduino板上取下之后再进行下面的步骤。</font></p>
<p>在用USB电缆将Arduino与PC机连接好之后， 运行X-CTU软件。首先我们在“PC Settings”中里选择对应的通信端口，并设置好波特率等参数。XBee模块出厂里默认的设置为9600，8N1。</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_settings.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_settings.png" /></a></p>
<p> 此时我们可以单击“Test/Query”按钮，来测试是否能够正确地连接上XBee模块。如果一切正常，我们将看到如下的对话框。如果通信参数设置都是正确的，但仍然无法与XBee模块通信上，则请检查USB连线和Arduino XBee扩展板上的跳线，必要的时候可以拨掉Arduino上的ATmega单片机再试。</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_test.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_test.png" /></a></p>
<p> 测试正常之后转到“Modem Configuration”。首先单击“Modem Parameters and Firmware”中的“Read”按钮读出XBee模块中的当前参数，接着在读出的“Networking &amp; Security”中将“Channel”设为“C”，将“PAN ID”设置为“1234”。</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_configuration.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_configuration.png" /></a></p>
<p> 我们在这里要实现的是一个最简单的点对点网络，所以只需要对另外一个Arduino XBee模块做完全相同的设置就可以了。两个Arduino XBee模块都设置好之后，运行两个X-CTU并在“PC Settings”中选择不同的通信接口，分别对两个Arduino XBee模块进行控制。</p>
<p>在X-CTU的“Terminal”中我们可以手工输入需要XBee模块传输的数据，这些数据在收到之后会被自动发送到另一个XBee模块，并在另一个X-CTU的“Terminal”中显示出来。其中蓝色的表示发送的数据，红色的表示接收的数据：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_transmit.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_xbee_manual_transmit.png" /></a></p>
<p> 至此，基本说明你的Arduino XBee模块能够正常收发数据了，接下去要做的就是在Arduino工程里如何利用XBee进行无线数据的收发了。通过上面的步骤不难看出，在Arduino工程中只需要将要发送的数据通过Arduino的串行通信接口发送给XBee模块就可以了，然后在另一个Arduino模块中通过串行接口读出来就可以了。但要想要构建更加复杂的网络，就得仔细读读XBee的使用手册，并好好了解ZigBee技术了;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2007/11/28/arduino-xbee%e6%a8%a1%e5%9d%97%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino下载线使用手册</title>
		<link>http://blog.flamingoeda.com/2007/11/17/arduino%e4%b8%8b%e8%bd%bd%e7%ba%bf%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</link>
		<comments>http://blog.flamingoeda.com/2007/11/17/arduino%e4%b8%8b%e8%bd%bd%e7%ba%bf%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/#comments</comments>
		<pubDate>Sat, 17 Nov 2007 15:26:27 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[手册]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2007/11/17/arduino%e4%b8%8b%e8%bd%bd%e7%ba%bf%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</guid>
		<description><![CDATA[Arduino使用的是Atmel公司的AVR单片机，一般为ATmega8和ATmega168，这一系列的单片机都支持ISP（In System Programmability ）编程，无需依赖昂贵的编程器就可以完成程序的下载。Arduino电路在设计上考虑到了ISP功能，也留出了相应的接口（ICSP），从而允许我们通过ISP下载线来完成bootloader的下载。 新买来的Arduino模块上一般都已经预先下载好了bootloader，因此上电之后就能够直接通过Arduino集成开发环境下载相应的Arduino程序。正常情况下我们在用Arduino时是不需要ISP下载线的，但在某些情况下可能会出现在Arduino集成开发环境中无法正常下载程序的现象，这很可能是由于bootloader受损所致。解决的办法就是重新将bootloader烧写到ATmega芯片中，此时你就需要用到这里介绍的ISP下载线了。 Arduio网站上给出的并口下载线电路我只成功地更新过ATmega8的bootloader，而无法为Diecimila上的ATmega168下载bootloader。此外，Arduino给出的这一下载线电路过于简单，没有做相应的隔离和保护， 经常使用可能会对Atmega芯片带来一定的损害。AVR建议使用一片74HC244来隔离并口和ATmega芯片，下面是我所使用的下载线的原理图： 以及自制的下载线： 使用并口下载线的时候，我们需要先到计算机的BIOS中将并口设为ECP（The extended capabilities port ）模式，同时将I/O基地址设置成378： 此时在Windows的设备管理器中，我们会发现并口已经被标记为“ECP 打印机端口”： 用鼠标右键单击后从弹出的菜单中选择“属性”命令打开属性对话框，在“资源”页面中我们会看到相应I/O基地址的设置已经生效： 现在就可以用ISP下载线连接计算机并口和Arduino上的ICSP接口了，请特别留意连接方向：ISP下载线六口插座上标有小三角的一端应该靠近 Arduino的ICSP接口上标为1的一端。虽然计算机并口能够为下载电路提供一定的电压，但一般我还是建议给Arduino模块加上5V电压（通过USB线和外接电源都可以），以保证下载过程的稳定。 硬件准备好之后，我们就可以通过相应的软件将bootloader烧到Arduino中。支持AVR下载线的软件比较多，如AVRDUDE和SLISP等，我们在这里使用的是PonyProg。下载并安装好PonyProg v2.07a BETA版本，启动PonyProg时会提示你进行相应的校准和设置工作。首先选择“Setup”菜单中的“Calibration”命令进行校准，然后再选择“Setup”菜单中的“Intreface Setup&#8230;”命令进行相应的并口设置： 根据你的Arduino模块上的芯片类型，从“Device” 菜单中的“AVR micro”子菜单中选择“ATmega8”或者“ATmega168”。你也可以从工具栏上的Device下拉框中进行相应的选择： 首先从“Command”菜单中选择“Read All” 命令，从Arduino模块上读出ATmega中的当前数据和设置，其中最重要的是之后要设置的熔丝位。 然后选择“File”菜单中的“Open Program (FLASH) File&#8230;” 命令，打开“Open program (FLASH) content file”对话框。从你的Arduino安装目录下找出对应于的bootloader。对于Arduino 0010版本来讲，我们可以在hardware\bootloaders目录下找到atmega8和atmega168两个目录，分别对应ATmega8和ATmega168芯片所对应的bootloader（文件扩展名为.hex），在atmega168目录下可以找到ATmegaBOOT_168_diecimila.hex和ATmegaBOOT_168_ng.hex两个文件，分别对应Diecimila和NG模块。你需要根据你的Arduino模块的具体情况，加载相应的bootloader文件。 AVR通过熔丝来控制芯片内部的一些功能，比如JTAG，时钟的使用，掉电检测电压，是否允许调试等。熔丝位的配置是为Arduino下载bootloader过程中最复杂的一步，而且设置出错很有可能导致芯片锁死，所以一定要仔细。选择“Command”菜单中的“Security and Configuration Bits &#8230;”命令，打开相应的熔丝设置对话框。 Arduino的bootloader对熔丝位有一定的要求，主要是同外部时间设置相关的。对于串口模块采用的ATmega8来讲，相应的熔丝字节要设置成0xCA（Fuse High Byte）和0xFF（Fuse Low Byte），具体每位的含义可以参见Wolf Paulus的文章。在PonyProg中对ATmega8的熔丝位设置为下图所示： 对于NG和Diecimila采用的ATmega168来讲，相应的熔丝字节要设置成0xF8（Extended Fuse Byte）, 0xDF（Fuse High Byte）和0xFF（Fuse [...]]]></description>
			<content:encoded><![CDATA[<p>Arduino使用的是Atmel公司的AVR单片机，一般为ATmega8和ATmega168，这一系列的单片机都支持ISP（In System Programmability ）编程，无需依赖昂贵的编程器就可以完成程序的下载。Arduino电路在设计上考虑到了ISP功能，也留出了相应的接口（ICSP），从而允许我们通过ISP下载线来完成bootloader的下载。</p>
<p>新买来的Arduino模块上一般都已经预先下载好了bootloader，因此上电之后就能够直接通过Arduino集成开发环境下载相应的Arduino程序。正常情况下我们在用Arduino时是不需要ISP下载线的，但在某些情况下可能会出现在Arduino集成开发环境中无法正常下载程序的现象，这很可能是由于bootloader受损所致。解决的办法就是重新将bootloader烧写到ATmega芯片中，此时你就需要用到这里介绍的ISP下载线了。</p>
<p>Arduio网站上给出的<a href="http://www.arduino.cc/en/Hacking/ParallelProgrammer" target="_blank">并口下载线电路</a>我只成功地更新过ATmega8的bootloader，而无法为Diecimila上的ATmega168下载bootloader。此外，Arduino给出的这一下载线电路过于简单，没有做相应的隔离和保护， 经常使用可能会对Atmega芯片带来一定的损害。AVR建议使用一片74HC244来隔离并口和ATmega芯片，下面是我所使用的下载线的原理图：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_schematic.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_schematic.thumbnail.png" /></a></p>
<p>以及自制的下载线：</p>
<p><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_cable.png"></a></p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_cable.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_cable.png" /></a></p>
<p>使用并口下载线的时候，我们需要先到计算机的BIOS中将并口设为ECP（<font size="-1">The extended capabilities port </font>）模式，同时将I/O基地址设置成378：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_parallel.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_parallel.png" /></a></p>
<p>此时在Windows的设备管理器中，我们会发现并口已经被标记为“ECP 打印机端口”：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_devices.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_devices.png" /></a></p>
<p>用鼠标右键单击后从弹出的菜单中选择“属性”命令打开属性对话框，在“资源”页面中我们会看到相应I/O基地址的设置已经生效：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_iobase.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_iobase.png" /></a></p>
<p>现在就可以用ISP下载线连接计算机并口和Arduino上的ICSP接口了，请特别留意连接方向：ISP下载线六口插座上标有小三角的一端应该靠近 Arduino的ICSP接口上标为1的一端。虽然计算机并口能够为下载电路提供一定的电压，但一般我还是建议给Arduino模块加上5V电压（通过USB线和外接电源都可以），以保证下载过程的稳定。</p>
<p>硬件准备好之后，我们就可以通过相应的软件将bootloader烧到Arduino中。支持AVR下载线的软件比较多，如<a href="http://savannah.nongnu.org/projects/avrdude/" target="_blank">AVRDUDE</a>和<a href="http://www.sl.com.cn/" target="_blank">SLISP</a>等，我们在这里使用的是<a href="http://www.lancos.com/prog.html" target="_blank">PonyProg</a>。下载并安装好<a href="http://downloads.sourceforge.net/ponyprog/ponyprogV207a.zip" target="_blank">PonyProg v2.07a BETA</a>版本，启动PonyProg时会提示你进行相应的校准和设置工作。首先选择“Setup”菜单中的“Calibration”命令进行校准，然后再选择“Setup”菜单中的“Intreface Setup&#8230;”命令进行相应的并口设置：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_interface.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_interface.png" /></a></p>
<p>根据你的Arduino模块上的芯片类型，从“Device” 菜单中的“AVR micro”子菜单中选择“ATmega8”或者“ATmega168”。你也可以从工具栏上的Device下拉框中进行相应的选择：</p>
<p align="center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_avr.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_avr.png" /></a></p>
<p>首先从“Command”菜单中选择“Read All” 命令，从Arduino模块上读出ATmega中的当前数据和设置，其中最重要的是之后要设置的熔丝位。</p>
<p>然后选择“File”菜单中的“Open Program (FLASH) File&#8230;” 命令，打开“Open program (FLASH) content file”对话框。从你的Arduino安装目录下找出对应于的bootloader。对于Arduino 0010版本来讲，我们可以在hardware\bootloaders目录下找到atmega8和atmega168两个目录，分别对应ATmega8和ATmega168芯片所对应的bootloader（文件扩展名为.hex），在atmega168目录下可以找到ATmegaBOOT_168_diecimila.hex和ATmegaBOOT_168_ng.hex两个文件，分别对应Diecimila和NG模块。你需要根据你的Arduino模块的具体情况，加载相应的bootloader文件。</p>
<p>AVR通过熔丝来控制芯片内部的一些功能，比如JTAG，时钟的使用，掉电检测电压，是否允许调试等。熔丝位的配置是为Arduino下载bootloader过程中最复杂的一步，而且设置出错很有可能导致芯片锁死，所以一定要仔细。选择“Command”菜单中的“Security and Configuration Bits &#8230;”命令，打开相应的熔丝设置对话框。</p>
<p>Arduino的bootloader对熔丝位有一定的要求，主要是同外部时间设置相关的。对于串口模块采用的ATmega8来讲，相应的熔丝字节要设置成0xCA（Fuse High Byte）和0xFF（Fuse Low Byte），具体每位的含义可以参见<a href="http://wolfpaulus.com/journal/embedded/arduino3.html" target="_blank">Wolf Paulus的文章</a>。在PonyProg中对ATmega8的熔丝位设置为下图所示：</p>
<p><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_8fuse.png"></a></p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_8fuse.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_8fuse.png" width="480" /></a></p>
<p>对于NG和Diecimila采用的ATmega168来讲，相应的熔丝字节要设置成0xF8（Extended Fuse Byte）, 0xDF（Fuse High Byte）和0xFF（Fuse Low Byte）。在PonyProg中对ATmega168的熔丝位设置为下图所示：</p>
<p align="center"> <a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_168fuse.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_isp_manual_168fuse.png" width="480" /></a></p>
<p>熔丝位设置好之后，选择“Command”菜单中的“Write All”命令，将bootloader下载到Arduino中。下载过程中Arduino上的发光二极管L会不断闪烁。下载完成之后，我们可以通过Arduino集成开发环境下载一个Arduino工程，来验证新下载的bootloader是否能够正常工作。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2007/11/17/arduino%e4%b8%8b%e8%bd%bd%e7%ba%bf%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Arduino USB 模块使用手册</title>
		<link>http://blog.flamingoeda.com/2007/11/10/arduino-usb-%e6%a8%a1%e5%9d%97%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</link>
		<comments>http://blog.flamingoeda.com/2007/11/10/arduino-usb-%e6%a8%a1%e5%9d%97%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/#comments</comments>
		<pubDate>Sat, 10 Nov 2007 12:34:36 +0000</pubDate>
		<dc:creator>flamingoeda</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[手册]]></category>

		<guid isPermaLink="false">http://blog.booksforce.com/2007/11/10/arduino-usb-%e6%a8%a1%e5%9d%97%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/</guid>
		<description><![CDATA[Arduino USB模块使用了FTDI公司的USB转串口芯片FT232BM，因此使用一根USB电缆就能够完成Arduino程序的下载。相应地，你需要在你的计算机上安装该USB芯片的驱动，在FTDI网站上可以找到相应的驱动安装程序。FDTI提供了两种驱动：虚拟串口（VCP）方式和直接访问（DX22）方式。我选择安装的是DX22方式的驱动程序，从该页面下载相应操作系统所对应的可执行文件，然后执行就可以了。 接下来就是安装Arduino集成开发环境了，从Arduino网站下载相应的压缩包（我用的是0010 Windows版本），然后解压缩就可以了。第一次运行Arduino集成开发环境时console窗口出现了一大堆警告信息，但似乎只需要简单地忽略就行了，因为再次运行Arduino集成开发环境时不会再出现这些警告信息。 现在可以开始连接Arduino USB模块了。Arduino USB模块可以用两种供电方式，一种是通过USB接口提供的5V电压，另一种是通过外接的9V变压器，这两者可以通过Arduino电路板USB接口旁边的“PWR SEL”跳线来确定。当用跳线连接标为“USB”的两脚时，使用USB接口提供的5V电压；当用跳线连接标为“EXT”的两脚时，使用外接的变压器作为电源。 用USB电缆将Arduino USB模块与计算机连接，在设备管理器中就会立即找到相应的设备： 此时再启动Arduino集成开发环境，从Tools-&#62;Board菜单中选择“Arduino Diecimila”： 再从Tools-&#62;Serial Port菜单中选择设备管理器里“USB Serial Port”所对应的串口设备： 为了实验Arduino USB模块的基本功能，仍旧可以从最简单的Hello World开始，即创建一个下面的Arduino工程： int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); } 按照Arduino USB模块的原理图，在数字I/O管脚13上没有再接电阻，以保持与其他数据I/O接口的一致，但该管脚上接了一个发光二极管L。上述程序正是通过对该管脚的操作，实现发光二极管不断亮灭的效果。出厂时的Arduino USB模块里已经下载了一个Arduino程序，它会循环地控制数字I/O端口2~12，每隔一定的时间就会将其中一个端口的输出置为高，而其它端口的输出置为低，你看到的效果就是板子上的发光二极管L有节奏地亮灭。 在Arduino集成开发环境中按Ctrl+R编辑该程序，然后再按Ctrl+U将编译好的工程上传到Arduino USB模块中，整个过程不需要按Arduino USB模块的Reset按钮（S1）即可以完成，同之前的Arduino串口模块相比确实方便了不少。在上传工程的过程当中，Arduino USB模块上的发光二极管TX和RX在有数据通过USB接口发送的时候会闪烁。程序下载完之后也不需要按Reset按钮，下载结束后工程会自动运行起来。]]></description>
			<content:encoded><![CDATA[<p>Arduino USB模块使用了FTDI公司的USB转串口芯片FT232BM，因此使用一根USB电缆就能够完成Arduino程序的下载。相应地，你需要在你的计算机上安装该USB芯片的驱动，在<a href="http://www.ftdichip.com/FTDrivers.htm" target="_blank">FTDI网站上</a>可以找到相应的驱动安装程序。FDTI提供了两种驱动：虚拟串口（VCP）方式和直接访问（DX22）方式。我选择安装的是DX22方式的驱动程序，从该<a href="http://www.ftdichip.com/Drivers/D2XX.htm" target="_blank">页面</a>下载相应操作系统所对应的<a href="http://www.ftdichip.com/Drivers/CDM/CDM%202.02.04.exe">可执行文件</a>，然后执行就可以了。</p>
<p>接下来就是安装Arduino集成开发环境了，从<a href="http://www.arduino.cc/en/Main/Software" target="_blank">Arduino网站</a>下载相应的压缩包（我用的是<a href="http://www.arduino.cc/files/arduino-0010-win.zip">0010 Windows</a>版本），然后解压缩就可以了。第一次运行Arduino集成开发环境时console窗口出现了一大堆警告信息，但似乎只需要简单地忽略就行了，因为再次运行Arduino集成开发环境时不会再出现这些警告信息。</p>
<p>现在可以开始连接Arduino USB模块了。Arduino USB模块可以用两种供电方式，一种是通过USB接口提供的5V电压，另一种是通过外接的9V变压器，这两者可以通过Arduino电路板USB接口旁边的“PWR SEL”跳线来确定。当用跳线连接标为“USB”的两脚时，使用USB接口提供的5V电压；当用跳线连接标为“EXT”的两脚时，使用外接的变压器作为电源。</p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_usb_jumper.png"><br />
<img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_usb_jumper.png" /></a></p>
<p>用USB电缆将Arduino USB模块与计算机连接，在设备管理器中就会立即找到相应的设备：</p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_usb_manual_com.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_usb_manual_com.png" /></a></p>
<p>此时再启动Arduino集成开发环境，从Tools-&gt;Board菜单中选择“Arduino Diecimila”：</p>
<p style="text-align: center"><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_usb_manual_ide1.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_usb_manual_ide1.png" width="460" /></a></p>
<p>再从Tools-&gt;Serial Port菜单中选择设备管理器里“USB  Serial Port”所对应的串口设备：</p>
<p><a href="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_usb_manual_ide2.png"><img src="http://blog.booksforce.com/wp-content/uploads/2007/11/arduino_usb_manual_ide2.png" width="460" /></a></p>
<p>为了实验Arduino USB模块的基本功能，仍旧可以从最简单的<a href="http://blog.booksforce.com/2007/08/28/diy-arduino-hello-world/">Hello World</a>开始，即创建一个下面的Arduino工程：</p>
<pre><code>
int ledPin = 13;

void setup()
{
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}
</code></pre>
<p>按照Arduino USB模块的原理图，在数字I/O管脚13上没有再接电阻，以保持与其他数据I/O接口的一致，但该管脚上接了一个发光二极管L。上述程序正是通过对该管脚的操作，实现发光二极管不断亮灭的效果。出厂时的Arduino USB模块里已经下载了一个Arduino程序，它会循环地控制数字I/O端口2~12，每隔一定的时间就会将其中一个端口的输出置为高，而其它端口的输出置为低，你看到的效果就是板子上的发光二极管L有节奏地亮灭。</p>
<p>在Arduino集成开发环境中按Ctrl+R编辑该程序，然后再按Ctrl+U将编译好的工程上传到Arduino USB模块中，整个过程不需要按Arduino USB模块的Reset按钮（S1）即可以完成，同之前的Arduino串口模块相比确实方便了不少。在上传工程的过程当中，Arduino USB模块上的发光二极管TX和RX在有数据通过USB接口发送的时候会闪烁。程序下载完之后也不需要按Reset按钮，下载结束后工程会自动运行起来。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flamingoeda.com/2007/11/10/arduino-usb-%e6%a8%a1%e5%9d%97%e4%bd%bf%e7%94%a8%e6%89%8b%e5%86%8c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

