微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 写AD转换程序的一些心得

写AD转换程序的一些心得

时间:10-02 整理:3721RD 点击:

首先是模仿别人已有的程序的,然后自己写程序,调试了有一个星期左右,怎么调也调试不出来,最后在老师的点拨下,找到了原因,原因在于调试的方法不对,以及对于datasheet的理解不够。总结了一下,有几个方面:
一.调试方法不对,我是自己写了程序,然后把自己的程序往人家那里改,写的很乱,如果出了错误,那么不好找,可能是多个错误,不好检查。
二.调试没有一个条理性,应该学会分析,写程序的时候应该先分析软件的错误,如果软件没错误,再分析硬件的错误,而我调试的时候感觉很乱,没有一个正确的顺序。
三.最终我找到了是哪个函数出了错误,却怎么也调不出来,还是对datasheet的理解不够,就是当SCL处于高电平的时候,SDA是有效的,哪个在前,哪个在后,时序乱了,时序没有对好,导致读不出来数据。
错误一:


  1. Right:void slave_NOACK(void)
  2. {
  3.          SDA = 1;    //
  4.          SCL = 1;    // 这个顺序是有讲究的,如果SCL在前的话,那么这条时序前的SDA也是有效的,如果前面的SDA是低电平,会导致一个跳变。
  5.          delayNOP();
  6.          SDA = 0;
  7.     SCL = 0;
  8. }
  9. Wrong:void slave_noack()
  10. {
  11.          SCL=1;
  12.          SDA=1;
  13.          delayNop();
  14.          SDA=0;
  15.          SCL=0;
  16. }

复制代码


错误二:IIC总线初始化没加,如果不加,导致可能IIC可能正在处于工作状态,AD的时序也会被打乱。


  1. Right:iic_init();              //I2C总线初始化
  2.     PCF8591_ADC(0x04);

  3.          if(systemerror == 1)          //有错误,重新来
  4.           {
  5.                    iic_init();             //I2C总线初始化
  6.              PCF8591_ADC(0x04);
  7.             }
  8. void iic_init()
  9. {
  10.          SCL=0;
  11.          iic_Stop();
  12. }

复制代码


LZ大人的帖子一定要顶~~  

我现在正在调AD,学习了。

学习学习学习

看帖回帖是一种态度

好啊 学习啦

嗯,datasheet,确实要反反复复的看,每次看每次的理解和获得的信息都是不一样的,对芯片的原理就理解的越透彻~~

hao

小编能否发个关于pcf8591p的AD/DA转换的程序来给我学习啊?邮箱:1397449438@qq.com  拜托了!

学习学习真好需要

受教啦!

    不错

学习中……

谢谢

谢谢小编!

看帖必回是种美德,很显然我有这种美德

赌东道赌东道赌东道

学习了····谢谢分享!

学习了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top