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了,很值得一玩的~)
Atmega8_8M.zip
7.60KB
ZIP
36次下载