利用STM8单片机检测环境光照强度的原理是什么?

利用STM8单片机检测环境光照强度的原理是什么?,第1张

无论什么单片机要想检测环境光照强度其基本原理都是一样的,即要有一个感受光照强度的传感器件或模块,传感器如果是模拟量输出还需要配置一个A/D转换器或选用内含A/D转换器的单片机,这样就可以把反映光照强度的数据采集到单片机,余下的工作就可以交给软件来完成了,软件要么通过模型公式算出强度值要么通过查表方式获取强度值,最后把处理结果送到显示器显示出来就OK了。

#define CCR (((volatile int)0x007F0A))
我不了解stm8,访问某个内存地址可以用上面的宏,其实PIC的STATUS也是这样来的。
#define STATUS (((volatile int)addr))

#include "adch"
 u16  TempADC;
void ADC_Config(void) 
{
    ADC_CR1 |= 0x01;    //开始启动初始化必须启动一次
                        //第一次写1,ADC从低功耗唤醒,第二次写1,启动ADC转换
   //ADC_CR1 |= 0x20; //使能转换结束中断,本例中采用的查询方式。
}
 
uint16_t Get_ADCCH_Value(ADC1_Channel_TypeDef ADC_Channel)

  ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,ADC_Channel, ADC1_PRESSEL_FCPU_D2,
     ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, DISABLE);
    //你也可以用 *** 作寄存器的方式代码如下,但未验证。
#if 0
ADC_CR2 = 0x00;             // A/D结果数据左对齐
CLK_PCKENR2 |= 0x08;        // 使能fMASTER与ADC的连接
ADC_CR1 = 0x00;// ADC时钟=主时钟/2=8MHz,单次转换模式
ADC_CSR = 0x01;             // 选择通道2
ADC_TDRL = 0x01;            // 禁止施密特触发功能 
ADC_TDRH = 0x01;
ADC_CR1 = 0x03; //2分频,连续转换,启动ADC
ADC_CR2 = 0x31; //外部事件保留,数据右对齐,禁止扫描模式,
ADC_CSR|= 0x01; //选择通道1
#endif
 ADC1_ConversionConfig(ADC1_CONVERSIONMODE_CONTINUOUS, ADC_Channel,ADC1_ALIGN_RIGHT);
     ADC_CR1 |= 0x01;      //开始启动转换
     while(!(ADC_CSR & 0x80));   //等待转换结束
    return ADC1_GetConversionValue(); //返回ADC结果
}
//这个初始化代码很重要,不能省,每次切换通道都要初始化一次!
在main函数中直接调用即可:
  TempADC=Get_ADCCH_Value(ADC1_CHANNEL_1); //获取AD转化值
  WetADC=Get_ADCCH_Value(ADC1_CHANNEL_3; //获取AD转化值

原因找到了。不是定时器设置的问题。而是程序中有这两条蓝色标记的语句: PC_DDR |= 0XE0;//将PC7,,6,5 设为输出 //pc2,pc1看起来设置为了输入,但其实该芯片没有这两个引脚 PC_CR1 |= 0XE0;// 推挽输出 PC_CR2 &= ~0XE0;// MAX SPEED 2MHZ //PC_CR2 |=~0XE0;// 错误的语句,看作是误 *** 作了PC2,PC1引脚,使中断不能进入。暂时看起来,这个程序不进入中断,可能是因为将PC_DDR的bit2,bit1位设置为0(复位值也是0),并且又将PC_CR2的bit2,bit1位设置为1(复位值是0),可是STM8S103F3P6又没有对应的PC2,PC1引脚,于是程序出错,从而不能进入定时中断,也不执行其它语句。不过如果不用中断,其它语句是可以正常执行的,定时器的溢出标志也可以软件查询到。

没有掉电中断,有一个低电复位设置,复位后可以判断复位原因,上电复位、低电复位,看门狗复位等等。自己做一个电压检测,电压低到一定程度保存数据,然后进入掉电模式(这是最好的方式)。专业的电源管理IC 例如ATMEGE406 有你说的这个功能,但是掉电原因很多,速度可能很快是一瞬间的事情,保存的数据量非常有限,通常只保存几个字节。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13409781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存