This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430L092:使用MSP430L092 (ADC)读取光电二极管传感器值

Guru**** 2540720 points
Other Parts Discussed in Thread: MSP430L092

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/584696/msp430l092-reading-photodiode-sensor-value-with-msp430l092-adc

部件号:MSP430L092

我得到了msp430l092的这个例子,并且我已经修改了获取光电二极管传感器值的方法。 我尝试过当通道A2大于150 (整数值)时,WFP 1.6 为高,WFP 1.5 为低。 当频道A2的值低于150时  ,WFP的1.5 值较高,WFP的1.6 值较低。 我曾经经历过,如果我向光电二极管提供闪光,传感器值将大于150 (整数值)。 不幸的是,我意识到五分钟后,我的项目就被破坏了。 WFP 1.5 和WFP 1.6 正在随意闪烁。 读取光电二极管传感器值的代码是否正确。 我是否需要使用" P1DIR &=~BIT6;"来设置输入方向WFP 1.6。 读取传感器值时我有点困惑。 有人能帮我吗? 提前感谢

/*  说明:多个ADC信道*/

/********************** A_Pool ADC转换******************************* /

/*                                                                              */

/*                                                                              */

/*                     ++--L092--+                                       */

/*                      |*1     14 |                                       */

/*                       | 2     13 |                                       */

/*                       | 3     12 |<-通道A0 (0-256mV)                 */

/*                       | 4     11 |                                       */

/*                       | 5     10 |                                       */

/*通道A2 (0-256mV)-> | 6      9 |                                       */

/*通道A1 (0-256mV)-> | 7      8 |                                       */

/*                         +----------- +                                       */

/*                                                                              */

D. Dang/ D. Archbold/ D. Szmulewicz                                            *

/* 德州仪器(TI)                                                      */

/* 使用IAR版本5.10 构建.................4*/                                                

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

 

#include <MSP4S.h>

 

 

Int ChannelA0,ChannelA1,ChannelA2;

 

内部主(无效)

  

  WDTCTL = WDTPW + WDTHOLD;                             //停止WDT

  

    P1DIR =(BIT5 | BIT6);                    //将WFP 1.0 设置为输出方向

    

    

 // A池寄存器的开始配置  

   APCTL = 0;                                           //清除APCTL寄存器

   APCNF = CMPON+DBON+CONVON+EOCBU+APREFON+CLKSEL_MCLK; //配置A池元素,选择MCLK作为A池时钟源

   APINT = 0x00;                                        //清除ADC-DAC-REG

   

   同时(1)

   {

     

     /*

   APIE = EOCIE;                                       //为转换结束启用中断    

   APINT = 0x00;                                        //清除ADC-DAC-REG

     APCTL = Osel+CBSTP+RUNSTOP+APNSEL_0+APPSEL_5;      //设置通道并开始转换

   __bis_sr_register(LPM0_bits + GIE);                  //输入启用中断的LPM0

   ChannelA0 = APINT;                                   //获取A0的结果

   */

   

  

  

   /*

   APIE = EOCIE;                                       //为转换结束启用中断    

   APINT = 0x00;                                        //清除ADC-DAC-REG

    APCTL = Osel+CBSTP+RUNSTOP+APNSEL_1+APPSEL_5;       //设置通道并开始转换

   __bis_sr_register(LPM0_bits + GIE);                  //输入启用中断的LPM0

   ChannelA1 = APINT;                                   //获取A1的结果

  */

     

   APIE = EOCIE;                                       //为转换结束启用中断

   APINT = 0x00;                                        //清除ADC-DAC-REG

   APCTL = Osel+CBSTP+RUNSTOP+APNSEL_2+APPSEL_5;        //设置通道并开始转换

   __bis_sr_register(LPM0_bits + GIE);                  //输入启用中断的LPM0

   ChannelA2 = APINT;                                   //获取A2的结果    

  //__no_operation();                                    //在此处放置断点

   

    IF (信道A2<150){

      P1OUT || BIT5;

      P1OUT&=~BIT6;

   }

   

   否则IF (ChannelA2>150){

      P1OUT || BIT6;

      P1OUT&=~BIT5;

   }

   

   否则{

       P1OUT&=~BIT5;

         P1OUT&=~BIT6;

   }

   

   

   }

 

}

 

//a_pool Interrupt Service例程

#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)

#pragma vector=APOOL_vector

__interrupt void a_pool (void)

#Elif已定义(__GMNU__)

void __attribute__((interrupt (APOOL_vector)) a_pool (void)

#否则

错误编译器不受支持!

#endif

 

   APIFG = 0;                                       //清除中断标志      

__BIC_SR_REGISTER_ON_EXIT (LPM0_bits);                //退出活动模式以采样下一个通道

 

}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外,我不确定是否能读取光电二极管传感器值,因为我无法在终端控制台上看到我的输出值。 Msp430l092中缺少UART。 如何在不看到我的输出值的情况下解决此问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果LED连接到了WFP 1.6 ,则不能将其输入。

    要确定传感器的实际值,请使用莫尔斯代码输出该值。 或使用软件UART。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道LED是输出。 因为没有UART软件,所以看不到光电二极管的输出值。

    读取传感器值的代码是否正确?

    谢谢Ladisch
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您说过,在五分钟内,它就能正常工作。 不是吗?

    如果它随机闪烁,可能会发出噪音。
    您真的必须知道ADC的结果是什么才能了解发生了什么。 如果您没有UART,请使用其他机制来获取值。 我建议使用Morse代码并不是开玩笑。