搜索
bottom↓
回复: 12

和大家分享一个我折腾几天才解决的AVR单片机与编程器通.....

[复制链接]

出0入0汤圆

发表于 2015-12-9 23:01:05 | 显示全部楼层 |阅读模式
本帖最后由 chengyang79 于 2015-12-9 23:02 编辑

前段时间做一个项目用的ATMEGA48单片机,用的淘宝几块钱的U盘式USBASP下载器,发现编程器和目标板无法正常通讯,校验ID码出现随机性错误,编程和校验都出现错误。
将ISP接口仔细检查了N遍(N>10),还是无济于事,
换了一块以前做的其他项目的ATMEGA48样板,发现通讯正常了,
于是以为是淘宝上买的单片机有问题,就马上联系代理商要了正品的ATMEGA48PA样片,失望的是问题依然存在。
接着怀疑到下载器上面,因为下载器是几块钱的USBASP,于是又弄了个双龙的USBISP,发现有时能通讯,但是大部分时候不行。
于是怀疑是板子布线的问题,于是又用剩下的空PCB只焊了单片机上去,下载程序,发现能下载了,但是再读ID码又错误了,并且也无法继续正常通讯。
从来没有遇过代码影响程序下载的,因为编程器会拉RST脚使器件进入编程模式,代码是不会运行的,所以即使SPI接口被配置成输出,也不会有问题啊。
接着折腾,又用新的空白单片机焊了一块样板,这次用U盘式的USPASP和双龙的USBISP都试了校验ID码和查空,都很顺利,证明通讯不稳定和PCB布线以及编程器无关。
心想这个问题确实只有可能和代码有关了,因为熔丝设置都是默认的,于是找来找去,觉得和程序中将系统时钟预分频器设定的语句相关度大一些,
于是把这句删除,再将编译后的代码下载到空白的新单片机中,再试了校验ID码和FLASH一切正常了。

我想,出现这个问题可能是以下的原因:

空白的AVR芯片熔丝默认选择的是内部8M RC振荡器,并且经过8分频,所以初始的系统时钟是1M的。
ATMEGA48的DATASHEET表明,CKDIV8熔丝位决定CLKPS位的初始值。若CKDIV8未编程,CLKPS位复位为“0000”;若
CKDIV8 已编程,CLKPS 位复位为“0011”,给出启动时分频因子为8。我用的空白芯片默认的熔丝设置,CLKPS 位复位为“0011”,然而在程序中又把CLKPS编程为“0000”,
导致下载器进入编程模式后读出熔丝位认为单片机时钟是1M,然而编程后接下来在下载器拉下单片机RST引脚进入编程模式之前,单片机中的程序已经“偷偷”把系统时钟改回8M了,
于是导致单片机和下载器通讯发生错误。


不知道我的分析是否对,有没有遇见相同问题的坛友?希望我的遭遇能对大家有一点点帮助!

PS:以前老工艺生产的ATMEGA48和现在新工艺生产的ATMEGA48PA 识别字(ID码)是不一样的。前者是:1E9205 后者是:1E920A

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-12-9 23:21:13 来自手机 | 显示全部楼层
新芯片不都是默默内部1M晶振吗!

出0入0汤圆

发表于 2015-12-9 23:23:42 | 显示全部楼层
新的芯片初始都是默认1M的,要使用低速模式。

出0入0汤圆

发表于 2015-12-10 01:38:59 | 显示全部楼层
以前用老款双龙ISP,未遇到这种情况,由于不支持WIN7,买了你说的那种几块钱的下载器,下小程序凑合,程序大点就校验错误,很不稳定,写坏好几片mega32,换有源晶振都救不活。最后买了个MKII ISP,挺好用。

出0入22汤圆

发表于 2015-12-10 01:47:55 来自手机 | 显示全部楼层
哦,熔丝位可以在代码里面修改?

出0入0汤圆

发表于 2015-12-10 07:18:35 | 显示全部楼层
USBisp上有一个跳线,可以切换低速模式.1M的就要用低速模式.

出130入20汤圆

发表于 2015-12-10 07:49:01 | 显示全部楼层
我之前一直在代码里将时钟修改为不分频,下载空白片子(出厂8分频)从来没有这种情况发生。不过新的片子,用那种U盘式下载器配合上位机下载会出错,不管我有没时钟分频。我用MKII ISP+cvavr下载,同样的固件就不会有问题。

出110入26汤圆

发表于 2015-12-10 07:51:06 来自手机 | 显示全部楼层
我之前用mega168pa遇到跟楼主一样的情况,后来换了台电脑就没问题了。

出0入0汤圆

发表于 2015-12-10 08:32:26 | 显示全部楼层
nengcai0313 发表于 2015-12-9 23:23
新的芯片初始都是默认1M的,要使用低速模式。

这应该才是正解,估计!!

出0入0汤圆

 楼主| 发表于 2015-12-10 13:01:31 | 显示全部楼层
新片子并不是使用的不是1M的RC振荡器,事实上ATMEGA48芯片里没有1M的RC振荡器,而是出厂时熔丝默认是使用内部8M振荡器,并且使能了系统时钟8分频,所以默认系统时钟实际上是1M。并且熔丝位设置的八分频也是实际上也是通过自动更改CLKPS 位复位值为“0011”实现的。

出0入0汤圆

 楼主| 发表于 2015-12-10 13:07:07 | 显示全部楼层
zxq6 发表于 2015-12-10 01:47
哦,熔丝位可以在代码里面修改?

熔丝我估计实质上也是特殊功能寄存器,只是熔丝位的值不能在代码中更改而已。只是熔丝位的CKDIV8的值影响复位后的CLKPS位值,反过来CLKPS无法影响熔丝位CKDIV8的值。

出0入0汤圆

发表于 2016-4-14 22:19:51 | 显示全部楼层
>>不知道我的分析是否对

推说ISP问题是MCU时钟太快是错的。

ISP 只要求 MCU 的 CLK 至小须为ISP的时钟四倍或更高,所以MCU时钟由1MHz->8MHz会引起 ISP失败并不可能出现。反之如果MCU 的 CLK 低於1MHz,则ISP就大有可能出事,这时ISP就必需使用更低的速度。

出0入0汤圆

发表于 2016-4-15 06:39:13 来自手机 | 显示全部楼层
好帖,学习中,准备做AVR,可能出现类似问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-12 03:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表