9回答

1收藏

DIY Arduino USB模块

 

#开源分享 #开源分享 3625 人阅读 | 9 人回复 | 2013-11-08

虽然之前DIY出来的串口模块一直工作得很正常,但USB无孔不入的事实让我明白DIY那款USB 接口的Arduino只是迟早的事情,于是暂时放弃了超声波模块和各种基本电路,开始DIY Arduino USB模块。Arduino官方网站上为USB接口的Arduino给出了不同的名称(NG和Diecimila),两者似乎只是采用的USB芯片有所差 异,电路上并没有太多的变化,但bootloader似乎也有些不同。
一切依旧从原理图开始,对比Arduino串口模块与USB模块的原理图后发现,原来电路图上只是将串口部分的电路用FT232BM芯 片替换了,并且将Atmega8换成容量更大的Atmega168。我在自己DIY板子上用的是FT232BL,就是FT232BM的无铅版本,电子市场 里淘到的是几十块钱一片,还真是不便宜(越发应该支持串口版本了)。Atmega8同Atmega168引脚上是完全兼容的,原则上原来那款串口模块上也可以接Atmega168的,只需要更新bootloader就可以了。
考虑到今后焊接上的方便,除了FT232BL外大部分用的是直插元件。电路板这回坚持要工厂用蓝色油墨,又多花了好些银子,但做出来的板子拿到后感觉好像做工没有上次仔细了,不过整体感觉还是不错的:
元件配备上这次电容100nF用的是安规电容,这是参考了Arduino成品图后专门去打听的。按照官方的说法,安规电容器失效之后不会导致电击,因此不会危及人身安全。另外电路中用到了一个陶瓷晶振,刚开始不明白为什么晶振会有三只管脚,后来Google才知道这种晶振是包含了滤波电路的,因此在 FT232BL芯片周围就不需求搭其它的滤波电路了。看起来仔细研究每个电路都会有所发现啊!
元件配齐之后就开始焊接了。第一次焊接QPF封装的芯片,一开始还真不知如何下手,最后弄坏了一块才明白原来只需要靠焊盘上的焊将芯片焊上就行了,又交了一次学费;-) 其它元件焊起来就相对容易多了,基本上没有遇到什么问题。
本来以为Atmega168和Atmega8在管脚和ISP电路上没有任何区别,因此装完后就能够用Arduino网站介绍的那条简易下载线烧写 bootloader了。刚开始装上Atmega168,下载bootloader就会出错,以为是板子安装的问题,仔细查找和分析后用Atmega8换下Atmega168,发现下载bootloader正常。怀疑原来用在Arduino串口模块上的下载线太简单,可能在Atmega168上无法正常工作,但此时已经能够确认板子安装基本是正确的了:-)
在Arduino网站上找到一篇介绍如何烧写Atmega168的 文章,但文章中用到的是编程器而不是下载线。此时看起来有两种选择,一种是继续在下载线上纠缠,DIY一款适合Atmega168的下载线;另一种是买一 个编程器,直接在编程器上完成bootloader的烧写。权衡再三后还是确定买一款编程器,虽然贵点,但以后在开发各种单片机应用的时候估计都能够用得 着。此时只能用“工欲善其事,并先利其器”来安慰自己了!
编程器买回来之后,将Arduino安装目录bootloader168下的ATmegaBOOT_168_diecimila.hex文件用编程 器烧到Atmega168芯片中。按下Arduino板子上的复位按钮,总算能看见接在13号管脚上的灯闪烁了,说明bootloader已经运行起来 了。
安装完FT232BMUSB驱动程序之后,试着在Arduino集成开发环境中打开了一个最简单的工程,编译之后再下载,再次出错!首先怀疑是Arduino设置的问题,检查了MCU的类型和串口,都没有问题,看了little bird放在YouTube上的安装过程视频, 也没有发现什么不对的地方。为了定位问题所在,直接在串口调试软件里不断地给Arduino模块发数据,能够看到TX灯不断闪烁,但给 bootloader发送相应的命令却得不到任何反应,RX灯也不闪烁。难道是从Arduino向外界发送数据的电路有问题?拿着万用表一段一段检查电 压,似乎都正常,没有任何头绪,看起来下一个该投资的设备就是一台好一点的示波器了;-)
没有办法,只好修改bootloader的源码,让其在启动后不断地向外界发送数据。这回RX灯能够闪烁了,在串口调试软件里也能够收到数据, 看来硬件接线是正确的,总算松了一口气。不过收到的数据很奇怪,不论bootloader发送什么数据,收到的都是0×00!按照之前的经验,通常这种情况都是串口配置导致的问题,如波特率等。
继续Google没有什么收获,开始怀疑是不是时钟设置的问题,导致Atmega168发送数据时没有合适的时钟。在Makefile里找到了 AVR_FREQ参数(默认值为16000000L),是外部晶振的频率,对它做了相应的修改,也不解决问题。继续在Makefile里游荡,看到 ISPFUSES 参数时突然眼前一亮,会不会是熔丝(fuse)位的问题?熔丝位是Atmega168在工作时的配置参数,其中最重要的是有关频率的设置。Google到的Thetale of AVRdude, ATmega168 and extended fuses bits和ATmega 8 / 168internal clock and fuse settings证实了我的猜测。仔细阅读了Arduino网站上的说明之后,确定相应的熔丝位应该设置成0xF8, 0xDF和0xFF。刚买的那个编程器里面就能够直接设置这些熔丝位:
重新编程Atmega168,这回总算能够在Arduino集成开发环境中下载工程了,试了数字I/O和模拟I/O,一切正常;-)

分享到:
回复

使用道具 举报

回答|共 9 个

倒序浏览

沙发

dwwzl

发表于 2013-11-9 08:08:31 | 只看该作者

很不错,多一个途径吧
用技术,爱生活!
板凳

fj1161

发表于 2013-11-9 08:14:43 | 只看该作者

赞一个~~~~~~~~~
第五年了,这次一定要坚持到底,不留遗憾!!!
地板

hxz0123

发表于 2013-11-9 09:28:58 | 只看该作者

谢谢楼主分享调试过程。
我觉得没必要用安规电容,USB口供电,也就5V500mA的电流,电不死人的。
轻轻地
    我走了
       正如我轻轻地来
挥一挥衣袖
   不带走一片云彩
我的博客:http://blog.timcu.com/
5#

123de7

发表于 2013-11-9 11:28:00 | 只看该作者

支持一下!!!!!!!!
从不依靠,从不寻找。
非常沉默,非常骄傲。
6#

myrskypcb

发表于 2013-11-9 16:02:24 | 只看该作者

感谢分享{:soso_e142:}
7#

ETRH Studio

发表于 2013-11-10 11:52:08 | 只看该作者

exiao 发表于 2013-11-9 09:28
谢谢楼主分享调试过程。
我觉得没必要用安规电容,USB口供电,也就5V500mA的电流,电不死人的。 ...

这个是为了考虑与其他控制接口,以及其他使用者商品化
8#

会飞的

发表于 2014-1-14 22:04:51 | 只看该作者

没必要用这样的电容吧
9#

southwol

发表于 2014-7-11 11:02:53 | 只看该作者

請問樓主,
我自己焊接了一片Uno SMD 板子, 一直沒有辦法將 bootloader 燒寫進 Atmega328P , 我用原裝的 Uno 版當作燒錄器去燒 DIY 的板子, 方法是照 葉難 大大的帖子做, 但是都失敗, 是否請樓主指點看看哪裡有問題要注意的..感謝.
10#

ETRH Studio

发表于 2014-7-12 10:53:10 | 只看该作者

southwol 发表于 2014-7-11 11:02
請問樓主,
我自己焊接了一片Uno SMD 板子, 一直沒有辦法將 bootloader 燒寫進 Atmega328P , 我用原裝的 Uno ...

先要用ISP 进行烧录bootload,用对bootload即可
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条