查看: 3289|回复: 9

DIY Arduino USB模块

  [复制链接]
  • TA的每日心情
    奋斗
    2014-2-9 10:11
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2013-11-8 23:28:51 | 显示全部楼层 |阅读模式
    分享到:
    虽然之前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外大部分用的是直插元件。电路板这回坚持要工厂用蓝色油墨,又多花了好些银子,但做出来的板子拿到后感觉好像做工没有上次仔细了,不过整体感觉还是不错的:
    1.jpg
    元件配备上这次电容100nF用的是安规电容,这是参考了Arduino成品图后专门去打听的。按照官方的说法,安规电容器失效之后不会导致电击,因此不会危及人身安全。另外电路中用到了一个陶瓷晶振,刚开始不明白为什么晶振会有三只管脚,后来Google才知道这种晶振是包含了滤波电路的,因此在 FT232BL芯片周围就不需求搭其它的滤波电路了。看起来仔细研究每个电路都会有所发现啊!
    元件配齐之后就开始焊接了。第一次焊接QPF封装的芯片,一开始还真不知如何下手,最后弄坏了一块才明白原来只需要靠焊盘上的焊将芯片焊上就行了,又交了一次学费;-) 其它元件焊起来就相对容易多了,基本上没有遇到什么问题。
    2.jpg
    本来以为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。刚买的那个编程器里面就能够直接设置这些熔丝位:
    3.jpg
    重新编程Atmega168,这回总算能够在Arduino集成开发环境中下载工程了,试了数字I/O和模拟I/O,一切正常;-)
    4.jpg

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-15 06:28
  • 签到天数: 3747 天

    连续签到: 60 天

    [LV.Master]伴坛终老

    发表于 2013-11-9 08:08:31 | 显示全部楼层
    很不错,多一个途径吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-11-9 08:14:43 | 显示全部楼层
    赞一个~~~~~~~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2015-2-14 09:02
  • 签到天数: 656 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2013-11-9 09:28:58 | 显示全部楼层
    谢谢楼主分享调试过程。
    我觉得没必要用安规电容,USB口供电,也就5V500mA的电流,电不死人的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-4-9 11:17
  • 签到天数: 364 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-11-9 11:28:00 | 显示全部楼层
    支持一下!!!!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-6-10 09:41
  • 签到天数: 41 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-11-9 16:02:24 | 显示全部楼层
    感谢分享{:soso_e142:}
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-2-9 10:11
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

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

    这个是为了考虑与其他控制接口,以及其他使用者商品化
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2017-1-8 12:23
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2014-1-14 22:04:51 | 显示全部楼层
    没必要用这样的电容吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-2-6 17:43
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2014-7-11 11:02:53 | 显示全部楼层
    請問樓主,
    我自己焊接了一片Uno SMD 板子, 一直沒有辦法將 bootloader 燒寫進 Atmega328P , 我用原裝的 Uno 版當作燒錄器去燒 DIY 的板子, 方法是照 葉難 大大的帖子做, 但是都失敗, 是否請樓主指點看看哪裡有問題要注意的..感謝.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-2-9 10:11
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

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

    先要用ISP 进行烧录bootload,用对bootload即可
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-24 06:05 , Processed in 0.198610 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.