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

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

其实温度传感器和ADCA5就通过一个开关选择控制,如果大家上节课细心的话,也会在ADC图解中发现温度传感器

ADCCTL1.TEMPCONV这一位就是控制温度传感器连接的

下面看下具体转换和计算

简单明了,计算公式就是:Temperature = (sensor - Offset) * Slope
寄存器说完了,现在看个手册提供的示例程序:

从上面可以知道,温度传感器操作就三步:
1、ADC配置采样温度传感器通道;
2、中断采样;
3、结果换算;

直接贴代码了

void main(void)
{//  long sum=0;//  float vol=0;int16 sensorSample,DegreesC;//  int i=0;// Step 1. Initialize System Control:// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the DSP2802x_SysCtrl.c file.
   InitSysCtrl();// Step 2. Initalize GPIO:// This example function is found in the DSP2802x_Gpio.c file and// illustrates how to set the GPIO to it's default state.
   InitGpio();// Step 3. Clear all interrupts and initialize PIE vector table:// Disable CPU interrupts
   DINT;// Initialize PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags// are cleared.// This function is found in the DSP2802x_PieCtrl.c file.
   InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example.  This is useful for debug purposes.// The shell ISR routines are found in DSP2802x_DefaultIsr.c.// This function is found in DSP2802x_PieVect.c.
   InitPieVectTable();// Step 4. Initialize all the Device Peripherals:// This function is found in DSP2802x_InitPeripherals.c// InitPeripherals(); // Not required for this example// Step 5. User specific code:

   InitAdc();
   AdcOffsetSelfCal();

   InitLCD12864();

   EALLOW;
   AdcRegs.ADCCTL1.bit.TEMPCONV = 1;
   AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 1;
   AdcRegs.ADCSOC0CTL.bit.CHSEL  = 5;
   AdcRegs.ADCSOC0CTL.bit.ACQPS  = 6;//   AdcRegs.ADCSAMPLEMODE.bit.SIMULEN0 = 0;
   AdcRegs.ADCCTL1.bit.INTPULSEPOS  = 1;

   AdcRegs.INTSEL1N2.bit.INT1SEL = 1;
   AdcRegs.INTSEL1N2.bit.INT1CONT  = 0;
   AdcRegs.INTSEL1N2.bit.INT1E  = 1;

   PieCtrlRegs.PIEIER1.bit.INTx1 = 1;

   FlashRegs.FOTPWAIT.bit.OTPWAIT = 1;

   EDIS;

   CpuTimer0Regs.TCR.bit.TIE = 1;
   StartCpuTimer0();
   EALLOW;
   PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
   PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
   IER |= 0x0001;
   EINT;
   EDIS;   while(1)
   {       if(AdcRegs.ADCSOCFLG1.bit.SOC0==1)
       {           while(AdcRegs.ADCSOCFLG1.bit.SOC0==1);
           AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
           DELAY_US(10);
           sensorSample=AdcResult.ADCRESULT0;
           DegreesC=GetTemperatureC(sensorSample);
           DISLPLAY_LONGSTRING(2,0,DegreesC);//         sum+=AdcResult.ADCRESULT0;//         i++;   }
/*     if(i==10)
       {//         sum/=10;//         vol=sum*3.3/4095;   WRITECMD_LCD12864(0x01);
           DISLPLAY_LONGSTRING(2,0,sum);//         DISLPLAY_FLOATSTRING(3,0,vol);//         WRITEDATA_LCD12864('v');   sum=0;
           i=0;
       }*/       //sum=AdcResult.ADCRESULT0;   //DISLPLAY_LONGSTRING(2,0,sum);
   }
}

不知道为什么,程序一直卡在非法操作中断那里,坑爹呀,都检查好多遍了,先去吃发个饭再回来继续检查。

吃晚饭回来又调试了下,发现是温度转换成摄氏温度的时候算法有问题,但这是TI提供的标准算法,暂时没发现错在哪里。但前面的步骤都是没问题的,能够读取温度的数字量。

看了下地址数据,这两个0x3D7E83和0x3D7E80地址里面根本没有数据,所以导致最后输出转换异常了,请问大家有类似的经验吗,我的CCS版本是5.4

刚才到处找资料,想找这两个地址的默认值,找到一个,0x28A9,不知道对不对,然后自己把这两个地址的值替换计算了下,结果又差不多,不知道了,等待大神解答

(0)

相关推荐

  • 可以计算海拔高度的BMP180气压传感器,你会使用吗?

    需要测量大气压力.温度和海拔高度的朋友可以玩玩BMP180这个传感器. 这款传感器出自博世,应用非常广泛. 实现目标 使用普通IO口模拟IIC总线驱动BMP180传感器 利用核心板的串口1打印输出芯片 ...

  • 额温枪芯片传感器方案

    红外体温枪又称为红外测温仪,可以在1秒内准确地测量出人体的温度.使用时只需将探头对准额头,按下按钮即可.工作原理其实很简单:当物体的温度高于"零度",即-273℃时,物体会向外辐射 ...

  • 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实践课九、比较器

    今天写的不顺畅,一个AD写了八个小时,然后一个温度传感器又卡了四个小时,哎,没人能一马平川,特别是搞技术,我们的目的不是走马观花式的学习,而是真正了解寄存器的操作,不要怕时间不够,就怕时间花了还吃不透 ...

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

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