2012年5月15日星期二

注意Atmega128的103兼容模式

今天在做V12的S.Bus解码程序,这次用的Atmel128的片子,不是用的开发板,所以熔丝位是自己设定的。熔丝位也就改了用片外晶振。做Sbus的时候用的是Asynchronous Operation ; Even Parity ; 2-bit stop;8-bit 的串口。程序怎么也不对,通信错误非常多。但同样的程序在开发板上做一点问题没有。程序上找了很长时间的原因,都没有找到,只能又回到硬件上,也考虑过是不是晶振不稳定,是不是要把外壳接地,但网上又说加热晶振会有把晶振弄坏的可能,加上现在又没有大的干扰,故此方法放弃。想来想去也可能就只有熔丝位不同了,找出开发板,读其熔丝位,一位一位的比较,尝试。当改到Extended Fuse 的 Atmega 103 compatibility mode的时候,程序正常了。马上翻看说明书,在USART的UCSRnC的寄存器上发现一行字: Note that this register is not available in ATmega103 compatibility mode.而这个寄存器就是设定SBus的特殊通信方式的。至此问题解决。一共花了近10个小时。总结一下,这个单片机用了3年了,还是有不了解、遗漏的地方,遇到问题哪怕是一点点的问题还是得保持非得弄清楚的信念,不可把问题放过!

没有评论: