原创 【博客大赛】MCU之心路分享--倾听你的改变--AD/DA转换(十一)

2014-4-7 00:46 3080 15 16 分类: MCU/ 嵌入式 文集: MCU之心路分享

         用勇气来改变可以改变的事情,用胸怀来接受不可改变的事情,用智慧来分辨两者的不同                                                 

                                                                                                                                     -------李开复

        写到AD/DA转换的时候,突然想到了李开复老师这句语录,曾经确实也陪伴着自己走过了苦涩的时光!要么去改变自己,要么去随波逐流,然后淹没在丛流中!

 

        相信有很多人都是从郭天祥的《51单片机C语言教程》和视频入门单片机的,我也一样!同时,还有很多人在看着郭天祥的书入门的路上!记得自己当初大一看到他书的第五章AD/DA转换的时候,就放弃过学习单片机一段时间,为什么?因为书中讲了许多有关模电啊,数电以及转换原理等的东西,才大一完完全全看不懂呀!后来才发现,入门单片机根本不需要去懂这些,会用AD/DA转换芯片,学了数电模电后,慢慢也就了解了!可谓被书坑了啊!当然,直到今日我依然很敬佩和感谢郭天祥的啊!

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

本小节目录:

           11.1,简介PCF8591 引脚结构

           11.2,PCF8591芯片的地址字节和控制字节

           11.3,PCF8591的A/D及D/A转换模式协议及C语言程序

           11.4,PCF8591与单片机的原理图

11.1简述PCF8591

许多单片机开发实验板都使用了PCF8591芯片,讲解AD/DA,其芯片能在IIC总线协议下,仅用时钟线SCL和数据线SDA就可以实现与单片机通信,同时具有程序较简单、可维护性好、易实现系统扩展、可靠性高等优点。

              1.jpg

                              图 1 PCF8591引脚图

       1,8位A/D及D/A转换器。有4路A/D转换输入,1路D/A模拟输出。既可以作A/D转换也可以作D/A转换。可见性价比还是蛮高的呀!

   2,电源电压典型值为5V,AIN0~AIN3:模拟信号输入端,A0~A3:引脚地址端。
VDD、VSS:电源端。(2.5~6V)
   3,SDA、SCL:IIC总线的数据线、时钟线。
   4,OSC:外部时钟输入端,内部时钟输出端,(一般悬空)
   5,EXT:内部、外部时钟选择线,使用内部时钟时EXT接地。
   6,AGND:模拟信号地;AOUT:D/A转换输出端;VREF:基准电源端。                                                 

11.2)PCF8591芯片的地址字节和控制字节

     1地址字节

  2.jpg

                                               图 2  地址字节(截图于数据手册)

                Fixed part:固定部分   programmable part:可编程部分

由图2可知,1,其高4位固定为1001,为芯片地址,不可以改变

                      2,A2,A1,A0引脚接高,低电平可得到三位编码,与1001形成7位编码,即为该器件地址码,

                      3,R/W(—)为读写标志位,1为读,0为写

         解释:使用各种单片机开发板学习时,需特别注意:看原理图中A2,A1,A0到底是分别接高,还是低电平了!才能在写程序时,发送地址;例如金沙江,锐志的实验板A2,A1,A0就全接了低电平,则写和读地址分别为:0x90,和0x91;而麦光的实验板A2,A1接了低电平,A0接了高电平则写和读地址分别为:0x92,0x93。

      2控制字节

        3.jpg

                     图 3 控制字节(由于图长,只截部分图,具体请下载数据手册)

 

            1,为模拟输出允许标志(设置为1时激活)

     2,为模拟输入控制位(完整数据手册还有01,10,11),00为四路单端输入;01为三路查分输入; 10为单端与差分混合输入;11为两路差分输入

     3,模拟输入通道选择端: 00:通道0;

                                                    01:通道1;

                                                   10:通道2;

                                                   11:通道3;

11.3)PCF8591的A/D及D/A转换模式协议及C语言程序

                          

4 da.jpg

                                         图4  A/D转换,读模式协议

 

/* *************************************************************************************

函数名称:ReadADC()

函数功能:读取AD转换程序   

入口参数:Channel 表示需要转换的通道,范围从0-3

出口参数:Val ,返回值范围0-255

特别提醒:发送器件地址完后必须由主机发送非应答信号,否则读操作将失败!

 ****************************************************************************************/

uchar8 ReadADC(uchar8 Channel)

{

   uchar8 Val;

   IIC_Start();                                  //发起始信号,启动总线

   IIC_WriteByte(AddWr);         //发送器件地址

   IIC_NoAck();                               //主机发送非应答信号

   IIC_WriteByte(0x40|Channel);       //发送器件子地址

   IIC_Rd_Ack();                      //从机应答

   IIC_Start();

   IIC_WriteByte(AddRd);

   IIC_NoAck();                               //主机发送非应答信号

   Val=  IIC_ReadByte();

   Delayms(5);

   IIC_NoAck();                  //主机发送非应答信号

   IIC_Stop();                    //发终止信号,结束总线

   return(Val);

}

5 ad.jpg

                                                  图5  D/A转换,写模式协议

 

/* **************************************************************************************

函数名称:WriteDAC()

函数功能:写入DA转换程序

入口参数:dat,表示需要转换的DA数值,范围是0-255

出口参数:NO

特别提醒:

 ******************************************************************************************/

bit WriteDAC(uchar8  dat)

{

   IIC_Start();                   //启动总线

   IIC_WriteByte(AddWr);        //发送器件地址

   IIC_Rd_Ack();                //从机发送应答信号

   IIC_WriteByte(0x40);          //发送器件子地址

   IIC_Rd_Ack();                //从机发送应答信号

   IIC_WriteByte(dat);            //发送数据

   IIC_Rd_Ack();                //从机发送应答信号

   IIC_Stop();                   //发终止信号,结束总线

   return 0;

}

 

11.4)PCF8591与单片机的原理图

6.jpg

                                                   图6  麦光电子PCF8591与单片机连接图

                  1,A0接高电平,A1,A2接低电平

                  2,Aout端连接了一个LED和一个1K电阻,用于DA转换实验

                  3,将AGND和EXT接地,OSC悬空。

                  4,SCL和SDA分别连接单片机P3.6,P3.7

                  5,AIN0连接了一个可调变位器,用于AD转换实验

 

 

         完整程序和PCF8591数据手册,如有需要者请在下面下载!如有不对,请批评并指出!本人将不胜感激!

 

  

 

                                                                                             于2014年04月07日 夜

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

shihlin_812989226 2014-4-15 16:08

相关推荐阅读
流年一束光 2014-05-20 13:32
有时候,我也不知道我是否还能坚持下去
       退学?真的要退学么? 这个问题伴随着我整个大学,从第一天开始就一直到现在!       一面是对未来,或许说是梦想的追求,渐渐清晰地看见,并学会接受现实,走在自己选择未来的电子路...
流年一束光 2014-04-07 00:55
【博客大赛】MCU之心路分享-----前言
        如果你想要得到从未有过的东西,那就去做你从未做过的事情!!!                                                          ...
流年一束光 2014-04-05 17:28
【博客大赛】MCU之心路分享—有种爱叫:IIC(十)
         在工科男的世界里,连IIC都能想象成浪漫的牵手,而一个对单片机充满热爱的工科男,有什么理由不去认识它,学会它,并去驾驭它啊!当然,在我知道的世界里,貌似大学老师从来都没有真正教过...
流年一束光 2014-03-20 00:34
【博客大赛】MCU之心路分享—你小小的心令我感动(九)
          如果说,学过单片机,却连单片机最小系统都没有焊接过或者搭建过!甚至连电烙铁都没有摸过,那是个多么巨大的笑话呀?          但现实不幸的是,这样的笑话,一直重演在许多...
流年一束光 2014-03-10 20:29
【博客大赛】MCU之心路分享—偷偷爱你--12864液晶(八)
       时隔3个月没有更新《MCU之心路分享》了,不知道我是否有幸,让胖螃蟹小编对我拍拍砖呢?嘿嘿…….这3个月,一直都没有离开过EDN,一直都潜伏着,这3个月中,见证,陪伴,小小地参与...
EE直播间
更多
我要评论
1
15
关闭 站长推荐上一条 /1 下一条