CCS5.4+Proteus8的F28027实践课九、比较器

今天写的不顺畅,一个AD写了八个小时,然后一个温度传感器又卡了四个小时,哎,没人能一马平川,特别是搞技术,我们的目的不是走马观花式的学习,而是真正了解寄存器的操作,不要怕时间不够,就怕时间花了还吃不透,反而透露着阿Q精神安慰自己,我们不要这样。
来来来,直接进入比较器的学习。

可以提供两个外部模拟输入,一个DAC内部基准;输出可以异步传输,也可以通过限定单元与系统时钟周期同步,进行简单滤波;输出被传送到ePWM触发区(Trip Zone)模块和GPIO输出多路复用器。
比较器大家应该是不陌生的,两路输入,当正极输入大于负极时,输出高电平;反之输出低电平,下面是真值表

每个比较器模块都包含一个10位的DAC电压基准。电压输出大小由DACVAL寄存器或者斜坡发生器控制,这个由第一个比较器的图解大家就可以了解到。
当DACVAL寄存器选择为DAC的输入时,输出大小为

现在来说下斜坡发生器这个,稍微复杂一点

在这种模式下,是把RAMPSTS寄存器的前十位当做DAC的输入
上面看了斜坡发生器的结构图,下面就是它的控制型号

现在来说比较器的操作了:

操作大概步骤如下:
1、使能ADC内的帶隙:ADCTRL1.ADCBGPWD=1;
2、使能比较器模块:COMPCTL.RAMPMAXREF=1;
3、使能COMP时钟:PCLKR3.COMPxENCLK=1;
4、GPIO和AIO引脚复用设置;
5、若用DAC,使能VSSA:ADCTRL1.VREFLOCONV,设置DACVAL.DACVAL,COMP控制寄存器COMPCTL设置:使能、反向输入源、输出取反、同步等

现在来看下具体的寄存器,只有几个,我们耐心看下吧:
首先是控制寄存器

然后是状态寄存器

DAC控制寄存器

DACVAL寄存器

斜坡发生器相关寄存器

好了,理论知识讲完了,现在来开始写程序,步骤已经说了,再复述一遍:
1、使能ADC内的帶隙:ADCTRL1.ADCBGPWD=1;
2、使能比较器模块:COMPCTL.COMPDACEN=1;
3、使能COMP时钟:PCLKR3.COMPxENCLK=1;
4、GPIO和AIO引脚复用设置;
5、若用DAC,使能VSSA:ADCTRL1.VREFLOCONV,设置DACVAL.DACVAL,COMP控制寄存器COMPCTL设置:使能、反向输入源、输出取反、同步等

直接写程序了

   InitComp1Gpio();

   EALLOW;

   SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK=1;
   SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
   AdcRegs.ADCCTL1.bit.ADCPWDN = 1;
   AdcRegs.ADCCTL1.bit.ADCBGPWD = 1;

   Comp1Regs.COMPCTL.bit.COMPDACEN=1;
   Comp1Regs.COMPCTL.bit.QUALSEL = 0;
   Comp1Regs.COMPCTL.bit.SYNCSEL = 0;
   Comp1Regs.COMPCTL.bit.COMPSOURCE = 1;
   EDIS;

   while(1);

终于写完了,好困,准备洗洗睡了,明天见

早上我用PROTEUS仿真了昨晚的程序,死活不行,妹的,然后直接下载到我的实验板里面,把COMP1OUT直接连到一个LED上面,发现程序是正常的,哎,又被仿真软件搞了一个小时,上面的程序是对的,大家可以使用,不过我那是两路都是模拟输入。

我刚刚又去写了下DAC控制的模拟输入方式,也很简单,直接给大家程序吧,效果图跟上面是一样的

   InitComp1Gpio();

   EALLOW;

   SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK=1;
   SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
   AdcRegs.ADCCTL1.bit.ADCPWDN = 1;
   AdcRegs.ADCCTL1.bit.ADCBGPWD = 1;
   AdcRegs.ADCCTL1.bit.VREFLOCONV=1;

   Comp1Regs.COMPCTL.bit.COMPDACEN=1;
   Comp1Regs.COMPCTL.bit.QUALSEL = 0;
   Comp1Regs.COMPCTL.bit.SYNCSEL = 0;

   Comp1Regs.COMPCTL.bit.COMPSOURCE = 0;
   Comp1Regs.DACVAL.bit.DACVAL=500;

   EDIS;

   while(1);

菜鸟交流qq群107691092

(0)

相关推荐

  • STM32 ~ USART接收不定长数据

    IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断.什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据. ...

  • Proteus中,单片机仿真数码管显示的设计思路

    使用仿真软件Proteus可以实现单片机控制数码管显示的仿真.该仿真电路包括单片机的最小系统电路.数码管驱动电路,还需要进行编程.Proteus是支持程序联调的,运行后可以看到最终的仿真效果. 1 单 ...

  • 解决FPGA时序问题的八大忠告

    忠告一 如果时序差的不多,在1NS以内,可以通过修改综合,布局布线选项来搞定,如果差的多,就得动代码. 忠告二 看下时序报告,挑一个时序最紧的路径,仔细看看是什么原因导致,先看逻辑级数是多少?是哪种电 ...

  • 【新品】Cambridge Audio DacMagic 200M DAC/耳放:支持原生MQA解码

    Cambridge Audio(英国剑桥)即将发售DacMagic 200M旗舰级DAC/耳放.作为DacMagic Plus的换代产品,它是Cambridge Audio首个支持本地MQA解码的机型 ...

  • CCS5.4+Proteus8的F28027实践课一、延时函数控制LED流水灯

    又是十二点了,但是很兴奋,因为从这节课开始,我们将会进行F28027一系列的动手实践练习,深入了解一门技术的唯一办法就是多动手实践,多总结反思. 来来来,不扯了,直接开始了. 在正式开始写程序前,我们 ...

  • CCS5.4+Proteus8的F28027实践课二、定时器0控制LED流水灯

    刚游泳回来,看到昨晚那篇博客访问量比较高,对我是莫大的鼓励,所以马不停蹄的去找了相关的手册准备我们今天的课程. 今天我们要说的是用定时器0产生的定时中断让LED闪烁. 大家都是大部分都是工科出身,应该 ...

  • CCS5.4+Proteus8的F28027实践课三、外部中断0控制LED流水灯

    吃完回来了,跟老弟打了个电话,他正处于事业的迷茫期,希望他早点走出这个状态.好了,现在已经晚上八点过十分了,希望十点前能把外部中断这个主题讲完. 外部中断的概念我还是稍微说下吧,就是你映射的外部中断引 ...

  • CCS5.4+Proteus8的F28027实践课四、并行驱动LCD12864

    趁着时间早,晚上九点四十,我们整理下12864的驱动程序,争取也弄成一个跟TI提供的类似源文件,然后共享给大家. 既然是12864,那最重要的肯定是12864时序的解读,在大学时期,12864还玩的真 ...

  • CCS5.4+Proteus8的F28027实践课五、实验板焊接调试

    今天回来的比较晚,但还是简单的把面包板给焊接调试了下,昨天写的那个12864程序果然不行..只能等明晚再搞了.力争做到一天一更,每天学习进步一点,才不会虚的慌. 今天的主要目的是把面包板焊接出来,稍微 ...

  • CCS5.4+Proteus8的F28027实践课六、实验板焊接调试(12864部分)

    下班早早回家就是为了把昨天没做完的事情搞完,但等我把12864调完之后,好想找块豆腐撞死算了,RS引脚跳线不知道什么时候被我弄断了,我竟然一直没有检查板子,只顾着对着时序图和寄存器检查程序,哎,直接给 ...

  • CCS5.4+Proteus8的F28027实践课七、ADC

    吃完饭回来了,现在开始我们的ADC实践操作. 直奔主题我们,那就是ADC编程操作流程是怎么样的. 其实通过上节理论课的学习,大家心里都应该有了模糊的感觉,一般的步骤如下: 1.使能ADC模块时钟( P ...

  • CCS5.4+Proteus8的F28027实践课八、内置温度传感器

    上午发布的ADC解读部分访问好高,呵呵,我又受鼓舞了,再接再励,把温度传感器这部分弄完就去吃晚饭. 看了下手册,温度传感器东西还真的不多,寄存器就一个ADCCTL1.TEMPCONV,其他的操作跟刚才 ...

  • CCS5.4+Proteus8的F28027实践课十、SPI

    刚刚我们已经把SPI的理论知识部分讲完了,现在我们根据寄存器和时序图来写程序了. 首先,既然是SPI,肯定是复用了GPIO,我们先回顾下GPIO引脚说明: 从上面可以看到我们这次实践课需要复用GPIO ...