写AD转换程序的一些心得
时间:10-02
整理:3721RD
点击:
首先是模仿别人已有的程序的,然后自己写程序,调试了有一个星期左右,怎么调也调试不出来,最后在老师的点拨下,找到了原因,原因在于调试的方法不对,以及对于datasheet的理解不够。总结了一下,有几个方面:
一.调试方法不对,我是自己写了程序,然后把自己的程序往人家那里改,写的很乱,如果出了错误,那么不好找,可能是多个错误,不好检查。
二.调试没有一个条理性,应该学会分析,写程序的时候应该先分析软件的错误,如果软件没错误,再分析硬件的错误,而我调试的时候感觉很乱,没有一个正确的顺序。
三.最终我找到了是哪个函数出了错误,却怎么也调不出来,还是对datasheet的理解不够,就是当SCL处于高电平的时候,SDA是有效的,哪个在前,哪个在后,时序乱了,时序没有对好,导致读不出来数据。
错误一:
- Right:void slave_NOACK(void)
- {
- SDA = 1; //
- SCL = 1; // 这个顺序是有讲究的,如果SCL在前的话,那么这条时序前的SDA也是有效的,如果前面的SDA是低电平,会导致一个跳变。
- delayNOP();
- SDA = 0;
- SCL = 0;
- }
- Wrong:void slave_noack()
- {
- SCL=1;
- SDA=1;
- delayNop();
- SDA=0;
- SCL=0;
- }
错误二:IIC总线初始化没加,如果不加,导致可能IIC可能正在处于工作状态,AD的时序也会被打乱。
- Right:iic_init(); //I2C总线初始化
- PCF8591_ADC(0x04);
-
- if(systemerror == 1) //有错误,重新来
- {
- iic_init(); //I2C总线初始化
- PCF8591_ADC(0x04);
- }
- void iic_init()
- {
- SCL=0;
- iic_Stop();
- }
LZ大人的帖子一定要顶~~
我现在正在调AD,学习了。
学习学习学习
看帖回帖是一种态度
好啊 学习啦
嗯,datasheet,确实要反反复复的看,每次看每次的理解和获得的信息都是不一样的,对芯片的原理就理解的越透彻~~
hao
小编能否发个关于pcf8591p的AD/DA转换的程序来给我学习啊?邮箱:1397449438@qq.com 拜托了!
学习学习真好需要
受教啦!
不错
学习中……
谢谢
谢谢小编!
看帖必回是种美德,很显然我有这种美德
赌东道赌东道赌东道
学习了····谢谢分享!
学习了