uclinux的MAX197--A/D驱动调试
时间:2009-03-08 来源:c5435
问题分析:向max197发送控制字0x40设置max197的工作模式为常规、操作内部时钟模式、内部控制采集、满量程电压为0-5v。正常的反映应该是max197的会发出一个中断。但是max197没有发出。
分析问题,可能产生的原因有:
1) 44b0采用的是3.3v的工作电压,CS、WR高电平都是3.3V的,数据线也是3.3v的。而原来在单片机上都是5v的电压。
2) 44b0的时钟周期比单片机快好多倍,max197接受没有这么快。
3) 控制字没有发送成功。
4) 芯片坏了。
5) 供电电压低了。因为我采用的是arm板上的5v电压经过一个保护二极管的电压。
问题排查:
1. 查了资料max197的工作电压是4.75-5.25v。所以改到保护二极管前,问题依旧。
2. 查了max197的资料,并且询问了maxim公司的技术支持的工程师,他说datasheet芯片的参数绝对是真是的,而资料上的输入的高电平在2.4v以上就是高电平,低电平是低于0.8v就是低电平。所以这个也没有问题。
3. CS,WR的脉冲宽度最小是80ns,44b0的CS,WR脉宽大盖在200ns,所以这点不会有问题。
4. 换了原来做好的水质检测仪上的好芯片,问题还在。
5. 分析时序:最开始我也曾注意到时序的问题,用了个循环,不停的发控制字,用示波器捕捉信号,CS和WR低电平都有2个,第一个低电平的时候发出的数据是40,第二个低电平发出的数据是00。我认为这是一个正确的工作时序,能够发出数据。
所有的问题排除之后今天又来分析时序。又重新做了51的板子来连接max197,用51分析时序。51的时序只有一个低电平,在一个低电平的时间内发送。Max197可以正常的产生中断。重新去分析时序。我发送0x4040。得到的结果和发0x40的时序是相同的。于是就试着发送0x400040。这个时候时序是第一个第二个低电平都是发送40产生了正常中断;44b0如果按照16位的模式的话,先发送低位然后发送高位的,也就是说0x00000040发送的时候第一个脉冲低8位的实际发的是40,第二个脉冲实际发出去的是00。改成0x400040,第一个第二个脉冲都是发的40,这个时候正常中断。再改成0x400000第一个是00,第二个是40,这个时候也是正常中断。综上所述: 必须在第二个电平发出的40控制字才可以正常中断。也就是说控制字必须写在高字段内才行。0x00400000;也就是说必须写在17—23位时,这个时候对应的DATA0—8第一次低电平发的时候0――7位,第二个低电平发的是17-23位就是40。这个时候就可以正常中断了。