历史上的今天
返回首页

历史上的今天

今天是:2025年07月17日(星期四)

正在发生

2020年07月17日 | 【蓝桥杯单片机组】PCF8591 关于蓝桥杯坑爹I2C的吐槽

2020-07-17 来源:eefocus

根据datasheet的时序:

编程步骤:初始化AD,给AD传送采样通道与输入方式(写过程,上图)


(1)打开总线


(2)发送ADDRESS(BIT0 = 0)


(3)等待PCF应答


(4)发送控制位(控制参考下图)


(5)等待PCF应答


(6)结束总线


附:控制位

地址位:

综上所述:初始化PCF8591时的代码如下:


void PCF8591_init() //wirte:fig.16 in datasheet

{

EA = 0;

IIC_Start();

IIC_SendByte(0x90);     //Address byte:fixed part + programmable part + R/W 

 

while(!IIC_WaitAck());

// IIC_WaitAck();

 

IIC_SendByte(0x03); //Control byte CH3

 

while(!IIC_WaitAck());

// IIC_WaitAck();

 

IIC_Stop();

EA = 1;

somedelay(10);

}


----------------------------------------------------------------------------------------------------------------------------

编程步骤:(读数部分:根据下图,是一个读数据过程)

(1)开始总线


(2)发送地址位(BIT0 = 1)


(3)等待PCF的应答


(4)读数据


(5)向PCF回应“1”表示收到


(6)结束总线




综上所述:以下为读数代码


unsigned char PCF8591_adc() //read:fig.17 in datasheet

{

unsigned char vo;

EA = 0;

IIC_Start();

IIC_SendByte(0x91); //Address byte:fixed part + programmable part + R/W 

 

while(!IIC_WaitAck());

// IIC_WaitAck();

 

vo = IIC_RecByte(); //read data

    IIC_Ack(1); //ack

IIC_Stop();

EA = 1;

somedelay(10);

return vo;

}

注意在读写过程中关闭EA,防止时序被打乱,



附:主程序:


#include

#include "init.h"

#include "iic.h"

#include "display.h"

void Delay500ms(); //@11.0592MHz

void sendchar(unsigned char dat);

 

sfr AUXR = 0x8E; //IAP15F2K61S2单片机特殊功能寄存器

unsigned char vol = 0;

unsigned char ms500flag = 0;

 

 

void main()

{

cls_buzz();

Timer0Init();

    PCF8591_init();

UartInit();

while(1)

{

display1(vol);

if(ms500flag == 1)

{

ms500flag = 0;

vol = PCF8591_adc();

// sendchar(vol);

}

 

 

}

}

 

void T0_isr() interrupt 1

{

static int i = 0;

TL0 = 0x00; //设置定时初值

TH0 = 0xB8; //设置定时初值

i++;

if(i >= 25) //0.5S

{

ms500flag = 1;

i = 0;

}

}



--------------------------------------------------------------------------分割线----------------------------------------------------------------------------

2017-2-27


程序还是有点问题,感觉在软件延时上,因为使用的IAP15的运行速度为1T,所以需要修改iic.h中对somenop的定义:


#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();    _nop_();_nop_();_nop_();_nop_();_nop_();  _nop_();_nop_();_nop_();_nop_();_nop_();    _nop_();_nop_();_nop_();_nop_();_nop_();  _nop_();_nop_();_nop_();_nop_();_nop_();  _nop_();_nop_();_nop_();_nop_();_nop_();}  //4

对,就他妈这么多个nop,但是还他妈有错,读数一直显示正常,知道将电位器调节到65以下的时候,就开始乱跳,原因还没找到,估计还是延时时间的问题。

2017-3-2


好了,修改好了,群里也有人碰到了同样的问题


解决方法:将读数据后的应答改成


IIC_Ack(0);

另外,数了一下亲测可用的NOP,33个nop,记住!!!!!!

推荐阅读

史海拾趣

CYANLITE公司的发展小趣事

在XXXX年,CYANLITE公司迎来了一次重要的技术突破。他们成功研发出了一种新型的LED芯片,这种芯片具有更高的发光效率和更长的使用寿命。这一技术的突破使得CYANLITE公司的产品在市场上更具竞争力,公司也借此机会进一步扩大了市场份额。随着品牌知名度的提升,CYANLITE公司开始拓展国际市场,其产品逐渐出口到欧洲、北美等地区,公司的业绩也实现了快速增长。

CMOSIS公司的发展小趣事

随着CMOS图像传感器在智能手机、安防监控、汽车等领域的广泛应用,CMOSIS公司看到了巨大的市场潜力。公司加大了市场拓展力度,不仅在国内市场取得了显著成绩,还积极开拓海外市场。同时,公司注重品牌建设,通过提升产品质量、加强售后服务等方式,树立了良好的企业形象和口碑。

展恒电子(Broadic)公司的发展小趣事

2012年,展恒电子与FANSO(孚安特)签订战略合作协议,共同向智能电表厂家提供配套销售服务。这一合作不仅拓宽了展恒电子的销售渠道,也提升了公司在智能电表市场的影响力。此后,展恒电子继续与多家知名企业建立战略合作关系,通过资源共享和优势互补,实现了共赢发展。

Altech公司的发展小趣事

凭借在铝合金导体领域的卓越成就和持续创新,Altech公司成功获得了国家级高新技术企业的认定。这一荣誉不仅是对公司技术实力和创新能力的肯定,也为公司未来的发展提供了有力的支持。作为国家级高新技术企业,Altech公司将继续加大研发投入,推动技术创新,为电子行业的发展做出更大的贡献。

Cypress Industries公司的发展小趣事

为了更好地服务全球客户,Cypress积极实施海外扩张和本土化战略。公司在菲律宾、印尼等地设立了组装和检测工厂,同时在美国、欧洲和亚洲等多个国家和地区设立了设计中心。这种本土化战略使Cypress能够更好地了解当地市场需求,提供定制化的产品和解决方案。

力芯微(ETEK)公司的发展小趣事

力芯微公司在数字信号处理器领域拥有丰富的经验和深厚的技术积累,是行业内领先的企业之一。公司拥有一支高素质的研发团队,不断推进技术创新和产品升级。通过持续的研发投入和技术创新,力芯微在数字信号处理器领域保持了领先地位,并赢得了客户的广泛认可。

问答坊 | AI 解惑

CSR-HF主要部分的说明

CVC-OMS:OMS处理过程是一个实时的处理过程,它采用语音抽取技术来选择并获取感兴趣的语音信息,从而减小了背景噪音的干扰。在捕获有小的失真的语音信息的时候,容易产生在统计上相对比较稳定的非白噪声(Colored Noise),OMS对这类信号尤其有用,对 ...…

查看全部问答>

如何看待就业中“国进民退”

国家公务员考试11月29日开考,共有104万人争1.5万职位,又创历史新高,成为名副其实的国家第一考。 金融危机以来,有关“国进民退”的问题引起了企业、舆论和市场的关注与担忧。但与此同时,还有一种“国进民退”少受到人们的重视,这就是就业中的 ...…

查看全部问答>

TAPI下使用linedrop无法挂断来电?函数返回正确~100分,等待高手~~~

用TAPI来做一个modem来电显示的程序,现在碰到了一个问题,使用linedrop无法挂断来电,但是可以挂断自己播出的电话。 LONG CTapiLine::HangupCall( void ) {         LONG retcode = 0;          ...…

查看全部问答>

算时间问题

一个延时函数: void delay_8us(unsigned int us) { while(--us);   } 生成汇编 C:0x0023    7FF4     MOV      R7,#0xF4 C:0x0025    7E01      ...…

查看全部问答>

串口 数据位

为什么我把串口调试助手的数据位设为8、7,结束位设为1、2都可以正常通行呢?…

查看全部问答>

请问MAXIM的工程师,这个驱动方案可以吗?

max16804, 12v输入,3个LED为一串,共6串并连,每串用一小电阻做均流,这个方案可否?    …

查看全部问答>

关于real6410下MFC硬编解码的问题

最近需要使用摄像头去视频,并通过硬编码器编码显示在本地并同时上传服务器,开到这款开发板有MFC硬解码支持,但是需自己添加相关的组建,根据三星提供的手册重新制作了NK.BIN,但是编译的时候出错,不知道哪位大侠有这方面的经验,看看以下问题怎 ...…

查看全部问答>

【MP430共享】气敏传感器阵列实时动态测试系统设计

介绍 了一种用 于电子鼻研究 的 F e   0   系列气敏传感器阵列动态测试 .控制和识别系统 ;该系统 能够 同时采集 6路 0 ~2 . 5 V的模拟电压信号,测量系统温度、硬件对传感器进行温度补偿,同时具有液晶显示和语音功能;加 ...…

查看全部问答>

与专业AD芯片对比,我选择了C8051

我做过一个数据采集与传输的方案,要求能完成16路AD信号的采样,并通过SPI传递给主芯片(LM3S系列) 具体要求是:完成每路AD信号采样200点,采样精度不低于10位,采样及数据传输耗时不超过25ms   当时的对比方案有两个 方案一:2片AD78H90 ...…

查看全部问答>