查看: 2047|回复: 0
打印 上一主题 下一主题

ATMEGA32 初学者实践芯片解锁

[复制链接]
跳转到指定楼层
沙发
发表于 2016-4-18 21:59:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 最近我们利用ATMEGA32的芯片完成了一个项目,进入生产。完成PCB焊接,进行程序烧写时,有一些板子有“进入编程式失败”的情况。这个比例在5.4%(我烧写了130块左右,有7块出现这样的情况。不过这7块中有一块很奇怪,烧写程序顺利,拿到车间测试,上电正常,但是突然间插头脱落,重新上电居然没任何反应了^^)
  在了解了相关的知识。我就尝试在XTAL1引脚加载外部频率信号来解决问题。在看到网站马超老师专栏,有具体提到使用1MHZ左右有源信号的方法。但是我手头并没有有源晶体,囧。
  尝试使用好的板子产生一个这样的信号。因为使用的是16M无缘晶振。那我使用ATMEGA32的T/C0定时器计数器,让它工作在CTC波形产生模式,比较匹配输出模式为OC0取反,当然预分频选择1啦。
  TCCR0控制字为0X19。
  TCNT0初始值0X00;
  TOP值(OCR0)0X07;
  这里OCR0寄存器的top值不是8噢。
  我把程序贴下来,希望大家指教

#include<iccioavr.h>

void main()
{
  PORTB=0x00;
  DDRB=0x0C; //开启OC0

  TCCR0=0x19; //设置波形产生模式为CTC,预分频1,比较匹配输出模式:OC0取反
  TCNT0=0x00; //T/C0初始值
  OCR0=0x07;  //TOP值
  while(1);
}

  这个程序我编译后烧写到目标PCB板子上,使用示波器观察,信号的频率很准确1MHZ。
  我将信号加到提示有“进入编程模式失败”的ATMEGA32 XTAL1引脚上,能够读取该芯片的信息了。辛苦了一阵子了(初学者,不过是自己摸索的,很欣慰)
  不过,我在读取这些有问题的芯片的熔丝设置值时,发现不是我预设进去的值?这个我不解,当然也有我失误操作造成的可能。
  还有,我使用的是外部无源晶振,熔丝设置:D9FF(高位在前,低位在后)扩展熔丝FF。这样我本身就有外部晶振,应该不会出现“进入编程模式失败的情况”?(因为提供有外部晶振)。
  利用上面的方法,我解决了4块板子,还有3块问题板子依旧,难道是芯片真的DEATH掉了。新的啊
  大家怎么看。还有说下,我觉得,我以前的操作方法也有问题。我以前是在“芯片选择”先读一下,然后在“熔丝位”这里读取一下,将他设置成我需要的值,最后再烧写程序(使用AVR_fighter for USBASP)。现在,我觉得应该先烧写程序,在设置熔丝。大家参谋一下。







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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