利用光敏传感器做自动调光功能

利用光敏传感器做自动调光功能

利用光敏传感器做自动调光功能_第1张图片

照射光线越强,vout越小,通过采取vout处AD值来调节台灯光照强度

电阻Rss可以放在上面,也就是CSDI处电压范围在0-5v左右

利用光敏传感器做自动调光功能_第2张图片

做这个功能的难度在于,因为光敏传感器会不断随着调光而改变AD,所以很难将光度稳定下来而不出现跳动
 

在做处理的时候涉及到,完成一次AD采取的时间,调光做一次PWM改变的时间,需要给AD和pwm做一个互相的匹配区间,然后就是给AD加冗余及门限值,还有pwm区间上下限加冗余,目的就是不让灯光出现抖动
 

启动调光功能,做一次AD采取处理,然后前后两个AD值对比如果大于门限值则这次数据有效否则无效,然后这个AD找到相对应的pwm匹配区间,如果此时灯光pwm值在这个区间则视为达到稳定不做处理,如果不在此区间则需要改变灯光pwm值,大于区间上限值则当前灯光pwm值减小于下限值则增加,然后不断采取AD值调光达到这个稳定,需要注意的是PWM值的改变只要不在匹配区间就会不断发生的并不是采取一次AD值改变一次PWM值
 

间隔500us检一次ad,累计32次平均,完成一次ad检测需要16ms

进入区间匹配并调节pwm的间隔时间定为100ms


;//------------------------------------------------------		
;//	AD Data Handle; Sum: 32 Times;
;//------------------------------------------------------
AD_Data_Handle:
		snzb		Flg_AD_DetOK					;//10Ms
		jp			AD_Data_Handle_Exit
		clrb		Flg_AD_DetOK

		LD			A,AD_DATAH					;//数据128次累加
		CLRB		FLAGS,C
		ADDR		ACCAD_L
		SZB			FLAGS,C
		INCR		ACCAD_H
		
		INCR		ACCCOUNT
		LDIA		.32
		SUBA		ACCCOUNT
		SNZB		FLAGS,Z
		JP			AD_Data_Handle_Exit
		CLR			ACCCOUNT
		
	AD_DATA_RL:								
		CLRB		FLAGS,C						;//累加和做11次带进位右移
		RRCR		ACCAD_H		
		RRCR		ACCAD_L
		
		INCR		ACCCOUNT
		LDIA		.5
		SUBA		ACCCOUNT
		SNZB		FLAGS,Z
		JP			AD_DATA_RL
		ld			a,ACCAD_L
		ld			Liumin_AD,a
		
		szb			Flg_AD_First
		jp			Liumin_AD_Limit
			
		LD			A,Liumin_ADBak
		SUBA		Liumin_AD		
		SNZB		FLAGS,C
		JP			DATA_SMALL
		JP			DATA_CMP
		
	DATA_SMALL:
		LD			A,Liumin_AD
		SUBA		Liumin_ADBak
		
	DATA_CMP:	
		LD			TEMP,A
		LDIA		.10
			
		SUBA		TEMP
		SNZB		FLAGS,C
		JP			AD_DATA_HANDLE_EXIT_	
	Liumin_AD_Limit:		

;===============================================检到3次ad值变化量都大于门限值则数据有效进入调光
		incr		AD_Deb
		ldia		.3
		suba		AD_Deb
		snzb		FLAGS,Z
		JP			AD_DATA_HANDLE_EXIT
		CLR			AD_Deb
;================================================
		LD			A,Liumin_AD
		LD		    Liumin_ADBak,A
		clrb		Flg_AD_First					
		LDIA		.127
		SUBA		Liumin_AD
		SNZB		FLAGS,C
		JP			TestContinue
		ldia		.127
		ld			Liumin_AD,A

	TestContinue:		
		ld			A,Liumin_AD		
		LD			AD_LEVEL,a
		RRR			AD_LEVEL
		RRR			AD_LEVEL
		RRR			AD_LEVEL;;;;;;16级
		
		RRR			AD_LEVEL
		
		LDIA		0FH
		ANDR		AD_LEVEL
		INCR		AD_LEVEL			

		CLR			ACCCOUNT				
		CLR			ACCAD_L
		CLR			ACCAD_H
		jp			AD_DATA_HANDLE_EXIT

AD_DATA_HANDLE_EXIT_:	
		CLR			AD_Deb

;==================================================================		
AD_DATA_HANDLE_EXIT:
		RET

上面是检ad数据处理,下面是匹配区间调光的代码,只放了两个区间

AD_LEVE15_CMP:
	LDIA		.2
	SUBA		AD_LEVEL
	SNZB		FLAGS,Z
	JP			AD_LEVE16_CMP
	
	LEVE15_UPPER_LIMIT:
	LDIA		.104
	SUBA		R_LuminanceValue
	SNZB		FLAGS,C
	JP			LEVE15_LOWER_LIMIT		
	
	jp			AdjustL_LuminanceValue_Dec

	LEVE15_LOWER_LIMIT:
	LDIA		.73
	SUBA		R_LuminanceValue
	SZB			FLAGS,C
	JP			ChangePwmLiumin_exit		

	jp			AdjustL_LuminanceValue_Add
	
AD_LEVE16_CMP:
	LDIA		.1
	SUBA		AD_LEVEL
	SNZB		FLAGS,Z
	JP			ChangePwmLiumin_exit
	
	LEVE16_UPPER_LIMIT:
	LDIA			.85
	SUBA			R_LuminanceValue
	SNZB			FLAGS,C
	JP			LEVE16_LOWER_LIMIT		
	
	jp			AdjustL_LuminanceValue_Dec

	LEVE16_LOWER_LIMIT:
	LDIA			.54
	SUBA			R_LuminanceValue
	SZB			FLAGS,C
	JP			ChangePwmLiumin_exit		
	jp			AdjustL_LuminanceValue_Add

你可能感兴趣的:(pwm调光,触摸芯片应用开发)