文号
t60015
阅读
5294
回复
3
收藏
3
利用M8自制简易Arduino平台的一点小经验
2013/08/24
IP:山东
Arduino作为基于AVR高性能单片机的便捷开发平台受到广大爱好者的喜爱,业余时间俺也准备研究下。由于最近口袋紧张的要命,正巧手头有几片闲置的ATmega8芯片,想尝试自制一个Arduino平台。参考了网上的教程,借助USBASP将固件下载到M8芯片里,但是发现用串口线始终无法正常Upload程序。但是用USBASP烧录的程序可以正常运行。

一开始以为串口线有问题,换了若干根皆无效。用USBASP烧录了一个串口发送文本的小程序测试,发现串口收到的数据不正常:程序里设置波特率为9600,但是在串口调试窗口里必须用4800波特率才可收到正常字符否则为乱码。想了下,立马查看boards.txt文件,发现对“Arduino NG or older w/ ATmega8”的定义中“atmega8.build.f_cpu=16000000L”,这么看问题就明确了,原来Arduino对M8的支持仅仅是ATmega8-16PU,即16MHz版本的,而我用的是8PU,晶振装的也是8MHz的,所以时钟不对,串口自然不能正常收发,也就解释了为什么用串口下程序不行。

那么解决办法很简单,把atmega8.build.f_cpu后改为=8000000L即可,但是这又带来新的问题,因为Arduino原自带固件是针对16MHz主频下的,所以即使改了编译环境对时钟频率的定义串口也不能正常下载程序。所以俺又百度了下,找到一个老外开发的针对8MHz主频的M8的修改版固件,下载后替换原固件,写入芯片,发现依然不能通过串口下程序。反复折腾了几次,终于发现此固件是针对ATmega8L低压版设计的,并且是使用内部8MHz RC振荡器作为时钟源的,而我用的是ATmega8A,虽然理论上讲8L和8A可以互换没什么大的区别,但是抱着试一试的心态,换一颗8L到板上,并且配置熔丝位为使用8MHz内部RC振荡器,烧写修改版固件,终于串口下载正常了!

总结下:使用M8芯片制作Arduino需要ATmega8-16PU或者ATmega8L-8PU,其中后者需要使用老外的修改版固件并且修改boards.txt里对下载波特率、CPU时钟和熔丝位的定义,固件已上传附件,boards.txt文件修改方法见readme.txt文件~

(最后说一下M8的价格已经直逼STC51了,很值得一玩的~)
attachment icon Atmega8_8M.zip 7.60KB ZIP 38次下载
+2
科创币
20!Dopaminor
2013/08/25
高质量发帖
+300
科创币
novakon
2013/08/25
优质资料
+10
科创币
发热门诊
2013/08/30
高质量发帖
3
13年4个月前IP:未同步
563417
1楼
最近这个单片机很火啊,俺还木有下手,观望。。。。。。。另外,对这个单片机不是很了解,能简单的解释下吗?为嘛不干脆叫AVR为什么叫那个ARDUINO??他们有什么区别?
引用
评论
13年4个月前IP:未同步
563445
2楼
回 1楼(飞天狂想) 的帖子
arduino就是AVR穿上了漂亮的代码外衣,焊上了漂亮的开发板之后的名字。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的