Arduino中国 | Flamingo EDA

Apr/08

21

与Arduino Mini的首次博弈

制作Arduino Mini的念头由来已久,但直到差不多四周之前才花了一周左右的时间来画Arduimo Mini的原理图和PCB,然后送去工厂做板又一直拖了两周才拿到电路板。这周末总算可以动手焊接了,难度不算太大,唯一能算上的麻烦的就是板子实在太小(长3.1厘米宽1.9厘米)了,要在上面定位表贴元件可不是件轻松的事情。

Arduino Mini采用的是贴片版本的ATmega168,本来打算买一个编程器转换座,直接在编程器上将Bootloader写进去,但一打听价格居然要300多块,最终决定还是决定用自己做的USB编程器。于是在实验板上搭了一个简单的Arduino Mini下载电路,并连接上USB编程器:

之后整整一个下午加一个晚上就浪费在如何将Bootloader下载到Arduino Mini里了。先是USB编程器组装好之后,在Windows上怎么也找不到这一USB设备,好在上次有成功的经验,知道电路肯定没有问题,来来回回研究了好几轮熔丝位的设置,USB编程器总算是可以被Windows识别出来了。期间一直纳闷为啥当初没有把送Whale的那个编程器的熔丝位读出来:(

接下去的过程更加令人郁闷,用avrdude怎么也无法与Arduino Mini正确地通信上,期间一度怀疑是不是Arduino Mini的板子画得有问题,但一根一根线用万用表查看似乎又是正确的,至少是ISP这一部分。于是乎不断地检查复位电路、晶振电路、ISP接口,时间就这样一点一点地流去,一点进展也没有。上网查了不少资料,唯一得到的经验就是用一个LED来检查MISO、MOSI、SCK和RST几个管脚,来看这几个信号是不是正确的,在我的Arduio Mini上,MOSI是没有任何反应的。

现象只能说明一点,ATmega168没有给出任何反馈,但一个最简单的单片机系统就只是依赖一个晶振电路和RST电路,这两部分在我看来都没有什么问题,倒底是怎么回事呢?

最后连我自己都没有想清楚为什么会去检查USB编程器,并在JP2上加了一个跳线,问题得到解决。原因是这样的,默认出厂的ATmega168使用的是内部晶振,频率非常低,而我做的这个USB编程器在芯片频率很低的情况下必须使用JP2这个跳线。这一情况在上次烧写ATtiny的时候也遇到过,并且也是费了好大的劲才解决,看来上次得到的教训还是不够深刻啊。

再后来的过程就算比较正常了,使用avrdude设置Arduino Mini的熔丝位,并下载Bootloader:

avrdude -c usbasp -p m168 -V -e -U lock:w:0x3F:m -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m -U efuse:w:0xf8:m
avrdude -c usbasp -p m168 -V -D -U flash:w:ATmegaBOOT_168_diecimila.hex:i
avrdude -c usbasp -p m168 -V -U lock:w:0xCF:m

第一步老提示我扩展熔丝位要从0xf8变成0,我选了N,没有发现什么问题,再用智峰的ProgISP读出来也是0xf8。Bootloader下载完后,在数字I/O的13号管脚上接了一个小LED,发现是一闪一闪的,总算第一步算是完成了。兴许后面还会有别的问题,留到以后再慢慢解决吧,今天的确没有时间和精力再去纠缠了。

最近的问题是想做的事情和东西很多,自己得保持一个合适的速度和计划,还是觉得时间不够花,效率又不是那么高,不过只是玩玩,无所谓了:)

No tags

3 comments

  • andmaliang · 2008/04/21 at 1:07 PM

    xiao,zhen li hai `

  • whale · 2008/04/21 at 1:19 PM

    再次欢呼

  • pemiamos · 2008/04/21 at 1:57 PM

    搞硬件不容易啊,顶~~~

Leave a Reply

使用新浪微博登录

<<

>>

Theme Design by devolux.nh2.me