北斗
				发表于 2007-5-10 01:37	
			
		呵呵,我终于找到你了,原来最终导致第五页打不开的就是你啊!哈哈,怪不得你可以看到。呵呵				
					发烧友
				发表于 2007-5-10 06:27	
			
		<div class="quote"><b>以下是引用<i>北斗</i>在2007-05-10 01:37:07的发言:</b><br />呵呵,我终于找到你了,原来最终导致第五页打不开的就是你啊!哈哈,怪不得你可以看到。呵呵</div><font style="background-color:#f3f3f3">我也是很难才看到第五页的,难道与我用IE7有关?</font>				
					ujff0574
				发表于 2007-5-10 08:05	
			
		这个是论坛BUG 还是一种防止信息过多的保护措施??				
					xiewg
				发表于 2007-5-10 11:13	
			
		<p>估计是引用的问题,偶那个回复里引用了楼上的数据</p>				
					xiewg
				发表于 2007-5-10 11:18	
			
		搞定了,偶用FF的IE tab可以看到,从外部修改数据编辑帖子。。。这论坛还真不少bug啊。。。				
					ldch
				发表于 2007-5-10 11:56	
			
		哈哈,竟然通过这个帖子发现论坛BUG,也算有点贡献了				
					jljhma2000
				发表于 2007-5-13 17:34	
			
		<p>长学文啊。</p><p>可以看看TI的TPS6103X的资料,它的曲线很好(个人认为),但是很遗憾输入是1.8-5.5的,不能用在1AA上。</p><p></p>				
					ldch
				发表于 2007-5-13 22:53	
			
		<p><font size="5">TPS6103X是升压模式的,不是 非常 适 合 驱动 LED,适 合 2AA,锂电 的话电压 高于 LED 电压,这个 IC 就不是很好了。</font></p><p><font size="5">TPS63000 就是升降压的 , 适 合 单锂电 条件 应用,外部 最好 再配置 电流 检测 IC</font></p><p><font size="5">TPS6120x是兼容AA的,只是AA条件下效率仍然不够满意,但是可以兼容到AA,还是它的优势。</font></p><p><font size="5">上面这些IC估计都不便宜,反正济南这里是根本找不到。有个深圳的网友说可以找到样品,希望将来搞高级货时可以用上。</font></p>[此帖子已经被作者于1179072808编辑过]				
					ldch
				发表于 2007-5-14 00:16	
			
		<p><font size="5">    刚才试验成功了软件PWM程序,也学会了PIC的中断的使用,这样一来,想设计什么样的闪光模式就设计成什么样的了。软件PWM速度不高,不过对付眼睛暂留作用也够了。往后继续学习、改进,发掘更多功能出来。</font></p><p><font size="5">    这几个程序段的调试成功,离第一步目标越来越近了。先搞出第一个具有各种功能的,以后再慢慢改进。</font></p>				
					ldch
				发表于 2007-5-14 00:40	
			
		<font size="5">PWM按照256级分辩率,频率较低,改为32级,频率就高些了,对手电来说也没没必要分这么细。频率明天拿示波器测试测试。很晚了,困了,明天接着搞</font>				
					ujff0574
				发表于 2007-5-14 09:50	
			
		精度10位吧 至于频率高于500HZ就可以了				
					jljhma2000
				发表于 2007-5-15 16:26	
			
		<p>我不是很明白。上面提到的这些元件都是输出电压可以调整的。而LED是要调电流的呀。怎样调整电流呀?</p><p>——是在IC的输出端再加一些电路,来控制LED的电流供给吗?</p><p></p>				
					jljhma2000
				发表于 2007-5-15 16:28	
			
		<p>我提到的IC(TPS6103X)也是输出电压可以控制的。但是怎样控制电流啊?</p><p></p>				
					ldch
				发表于 2007-5-15 19:12	
			
		<div class="quote" twffan="done"><b>以下是引用<i>jljhma2000</i>在2007-05-15 16:28:01的发言:</b><br /><p>我提到的IC(TPS6103X)也是输出电压可以控制的。但是怎样控制电流啊?</p><p></p></div><p><font size="5"> TPS6xxx1都是输出电压3.3V的,TPS6xxx2输出电压都是5.0V的,TPS6xxx0都是可调输出电压的,反馈电压是0.5V。即使是3.3V的也可以通过外部电阻改成3.3~5之间可调。</font> </p><p><font size="5"> 这些IC本身都不带电流取样反馈电路,按照标准的电阻分压接法取得反馈信号,电路外特性表现为稳压电路。控制输出电流本质上也是控制电压,可以在LED回路上串联小电阻对LED电流进行取样,然后通过运放把这个信号放大,运放输出接IC的反馈端子。当然,更可以用专用的电流取样反馈IC,如下图所示:</font></p><p><font size="5">这个图来自论坛,主IC应该是TPS61030。从这个图中看,标记为ACM的IC跟美信的MAX4073T相似,这是个专用的电流取样IC。MAX4073T的电压增益是20倍,图中两个取样电阻是0.22和0.12并联,大约78毫欧,通过700mA电流的话压降为.0546V,乘20得1.092,比TPS61030的反馈电压高,通过电路板上的R2、R3分压取得反馈电压。TPS61030自身的电池检测在这里好像没有使用。</font></p><p><font size="5"> 其实,还有很多手电实际上就是用PWM来调光,通过改变LED点亮所占的时间比,也就是所谓占空比来调节亮度。如果PWM频率低的话,就会有频闪感觉了。</font><br /></p>[此帖子已经被作者于1179230658编辑过]				
					ldch
				发表于 2007-5-16 00:39	
			呵呵,程序终于完成了
		<p><font size="5">程序功能:</font></p><p><font size="5">   高亮-50%-10%-暴闪,采用软件PWM模式调节亮度,单片机GPIO0端子作为控制输出端子。</font></p><p><font size="5">切换方式:</font></p><p><font size="5">   每次打开电源后,如果2秒内关闭,则下次再开电源将改变模式;如果持续时间高于2秒,则下次打开电源按照上次模式点亮。持续2秒后会有个低频闪烁作为模式记忆提示。</font></p><p>#include "P12F629.INC"</p><p>EEADDRA EQU 20H  ;定义EEPROM A地址<br />EEADDRB EQU 21H  ;定义EEPROM B地址<br />TEMP EQU 22H  ;定义临时变量<br />EEREADA EQU 23H  ;定义EEPROM A预写<br />EEREADB EQU 24H  ;定义EEPROM B预写<br />DELY1 EQU 25H  ;定义延时变量1<br />DELY2 EQU 26H  ;定义延时变量2<br />DELY3 EQU 27H  ;定义延时变量3<br />TEMP1 EQU 28H  ;定义临时变量1<br />AA EQU 29H  ;定义PWM低电平时间常数<br />BB EQU 2AH  ;定义PWM低电平时间常数<br />COUNT0 EQU 2BH  ;定义定时器延时常数</p><p> ORG 00H  ;复位向量地址<br /> GOTO STAR ;转向主程序</p><p> ORG 04H  ;中断向量地址<br /> GOTO T0INT</p><p> ORG 06H  ;主程序起始地址<br />STAR<br /> BCF STATUS,RP0  ;体选择BANK0<br /> MOVLW 01H<br /> MOVWF EEADDRA  ;初始化EEPROM A地址<br /> MOVLW 02H<br /> MOVWF EEADDRB  ;初始化EEPROM B地址<br /> MOVLW 1EH<br /> MOVWF COUNT0  ;初始化定时器延时常数</p><p> CLRF GPIO  ;清GPIO寄存器<br /> CLRF TMR0  ;清Timer0</p><p> MOVLW 07H<br /> MOVWF CMCON  ;关闭比较器19H</p><p> BSF STATUS,RP0  ;体选择BANK1<br /> <br /> MOVLW 87H<br /> MOVWF OPTION_REG  ;禁止上拉,预分频系数256<br /> MOVLW 20H<br /> MOVWF INTCON   ;关全局中断,允许Timer0中断,中断标志清零</p><p> ;CLRF ANSEL  ;清9FH模拟选择寄存器</p><p> MOVLW 08H<br /> MOVWF TRISIO  ;除GPIO3外,其他管脚都是输出</p><p> BCF STATUS,RP0<br /> CALL DELAY1  ;延时<br /> ;CALL DELAY1</p><p> CALL EEREAD_A ;读取EEPROM A数据<br /> CALL EEREAD_B ;读取EEPROM B数据</p><p> MOVF EEREADB,W<br /> XORLW 01H  ;EEPROM A数据跟01比较<br /> BTFSS STATUS,Z<br /> GOTO A4   ;不相等,跳转A3执行<br /> GOTO A_A   ;相等,跳转A_A执行<br /> <br />A4     ;判断EEPROM A数据是否超过4<br /> BCF STATUS,RP0<br /> INCF EEREADA<br /> MOVF EEREADA,W<br /> XORLW 05H<br /> BTFSS STATUS,Z<br /> GOTO WRA<br />  <br />A_1     ;EEPROM A数据超过3,则令其为1<br /> MOVLW 01H<br /> MOVWF EEREADA</p><p>WRA<br /> MOVF EEREADA,W<br /> MOVWF TEMP<br /> CALL WREEA</p><p> BSF STATUS,RP0<br /> BSF INTCON,GIE  ;开全局中断<br /> <br />A_A<br /> BCF STATUS,RP0<br /> MOVF EEREADA,W<br /> XORLW 01H<br /> BTFSS STATUS,Z<br /> GOTO AA2</p><p> BCF STATUS,RP0<br /> MOVLW 00H<br /> MOVWF TEMP<br /> CALL WREEB   ;EEPROM B写入0</p><p> BCF STATUS,RP0<br /> MOVF EEREADA,W<br /> MOVWF TEMP<br /> CALL WREEA   ;重写EEPROM A</p><p>FINISH BCF STATUS,RP0<br /> BSF GPIO,00H   ;GP0输出高电平,对应全亮</p><p><br /> NOP<br /> GOTO FINISH</p><p>T0INT     ;Timer0中断程序<br /> BSF STATUS,RP0<br /> BCF INTCON,T0IF   ;清Timer0中断标志</p><p> BCF STATUS,RP0<br /> DECFSZ COUNT0,F<br /> RETFIE   ;中断返回<br /> BSF STATUS,RP0<br /> BCF INTCON,GIE   ;关闭全局中断<br /> BCF INTCON,T0IE   ;关闭Timer0中断</p><p> BCF STATUS,RP0<br /> MOVLW 01H<br /> MOVWF TEMP<br /> CALL WREEB   ;EEPROM B写入1</p><p>LIGHTA BCF STATUS,RP0   ;闪烁<br /> CLRF GPIO<br /> CALL DELAY1<br /> CALL DELAY1<br /> CALL DELAY1<br /> COMF GPIO<br /> CALL DELAY1<br /> CALL DELAY1<br /> CALL DELAY1<br /> BCF STATUS,RP0<br /> RETFIE   ;中断返回</p><p>AA2<br /> BCF STATUS,RP0<br /> MOVF EEREADA,W<br /> XORLW 02H<br /> BTFSS STATUS,Z<br /> GOTO AA3</p><p> BCF STATUS,RP0<br /> MOVLW 00H<br /> MOVWF TEMP<br /> CALL WREEB   ;EEPROM B写入0</p><p> BCF STATUS,RP0<br /> MOVF EEREADA,W<br /> MOVWF TEMP<br /> CALL WREEA   ;重写EEPROM A</p><p> BCF STATUS,RP0<br /> MOVLW 01FH<br /> MOVWF AA<br /> MOVWF BB  ;50%占空比<br />LIGHT1 BCF STATUS,RP0<br /> CLRF GPIO<br /> CALL DEYA<br /> COMF GPIO<br /> CALL DEYB<br /> GOTO LIGHT1</p><p>AA3<br /> BCF STATUS,RP0<br /> MOVF EEREADA,W<br /> XORLW 03H<br /> BTFSS STATUS,Z<br /> GOTO AA4<br /> BCF STATUS,RP0<br /> MOVLW 00H<br /> MOVWF TEMP<br /> CALL WREEB   ;EEPROM B写入0</p><p> BCF STATUS,RP0<br /> MOVF EEREADA,W<br /> MOVWF TEMP<br /> CALL WREEA   ;重写EEPROM A</p><p> BCF STATUS,RP0<br /> MOVLW 05H<br /> MOVWF AA<br /> MOVLW 2DH<br /> MOVWF BB  ;10%占空比<br />LIGHT2 BCF STATUS,RP0<br /> CLRF GPIO<br /> CALL DEYA<br /> COMF GPIO<br /> CALL DEYB<br /> GOTO LIGHT2</p><p>AA4<br /> BCF STATUS,RP0<br /> MOVF EEREADA,W<br /> XORLW 04H<br /> BTFSS STATUS,Z<br /> GOTO AA1<br /> BCF STATUS,RP0<br /> MOVLW 00H<br /> MOVWF TEMP<br /> CALL WREEB   ;EEPROM B写入0</p><p> BCF STATUS,RP0<br /> MOVF EEREADA,W<br /> MOVWF TEMP<br /> CALL WREEA   ;重写EEPROM A</p><p>LIGHT3 BCF STATUS,RP0   ;闪烁<br /> CLRF GPIO<br /> CALL DELAY1<br /> COMF GPIO<br /> CALL DELAY1<br /> GOTO LIGHT3</p><p>AA1<br /> MOVLW 01H<br /> MOVWF EEREADA<br /> GOTO WRA<br /> <br />EEREAD_A  ;读取EEPROM A<br /> BCF STATUS,RP0<br /> MOVF EEADDRA,W<br /> BSF STATUS,RP0<br /> MOVWF EEADR<br /> BSF EECON1,RD<br /> NOP<br /> MOVF EEDATA,W<br /> BCF STATUS,RP0<br /> MOVWF EEREADA<br /> RETURN</p><p>EEREAD_B  ;读取EEPROM B<br /> BCF STATUS,RP0<br /> MOVF EEADDRB,W<br /> BSF STATUS,RP0<br /> MOVWF EEADR<br /> BSF EECON1,RD<br /> NOP<br /> MOVF EEDATA,W<br /> BCF STATUS,RP0<br /> MOVWF EEREADB<br /> RETURN<br /> <br />WREEA    ;写EEPROM A,TEMP传送写入数据<br /> BCF STATUS,RP0  ;取BANK0<br /> MOVF EEADDRA,W  ;取A地址<br /> BSF STATUS,RP0  ;取BANK1<br /> MOVWF EEADR  ;A地址进入EEADR<br /> BCF STATUS,RP0  ;取BANK0<br /> MOVF TEMP,W  ;取写入数据<br /> BSF STATUS,RP0  ;取BANK1<br /> MOVWF EEDATA  ;待写数据进入EEDATA<br /> BSF EECON1,WREN<br /> BCF INTCON,GIE<br /> MOVLW 55H<br /> MOVWF EECON2<br /> MOVLW 0AAH<br /> MOVWF EECON2<br /> BSF EECON1,WR<br /> BSF STATUS,RP0<br /> BSF INTCON,GIE<br /> RETURN</p><p>WREEB    ;写EEPROM B,TEMP传送写入数据<br /> BCF STATUS,RP0  ;取BANK0<br /> MOVF EEADDRB,W  ;取B地址<br /> BSF STATUS,RP0  ;取BANK1<br /> MOVWF EEADR  ;B地址进入EEADR<br /> BCF STATUS,RP0  ;取BANK0<br /> MOVF TEMP,W  ;取写入数据<br /> BSF STATUS,RP0  ;取BANK1<br /> MOVWF EEDATA  ;待写数据进入EEDATA<br /> BSF EECON1,WREN<br /> BCF INTCON,GIE<br /> MOVLW 55H<br /> MOVWF EECON2<br /> MOVLW 0AAH<br /> MOVWF EECON2<br /> BSF EECON1,WR<br /> BSF STATUS,RP0<br /> BSF INTCON,GIE<br /> RETURN</p><p>DELAY1  MOVLW  4FH     ;外循环常数<br /> MOVWF  DELY1     ;外循环寄存器<br />LOOP0 MOVLW  0FFH     ;中循环常数<br /> MOVWF  DELY2     ;中循环寄存器<br />LOOP1 DECFSZ  DELY2     ;中循环寄存器递减<br /> GOTO  LOOP1     ;继续中循环<br /> DECFSZ  DELY1     ;外循环寄存器递减<br /> GOTO  LOOP0     ;继续外循环<br /> RETURN</p><p>DEYA MOVF AA,W<br /> MOVWF TEMP<br />D1 DECFSZ TEMP<br /> GOTO D1<br /> RETURN</p><p>DEYB MOVF BB,W<br /> MOVWF TEMP<br />D2 DECFSZ TEMP<br /> GOTO D2<br /> RETURN</p><p>END</p>				
					mioa
				发表于 2007-5-16 09:40	
			
		<p>这个强.....</p><p>让调光不再神话!</p><p>就让暴风雨来得得猛烈些吧.</p>				
					sdwhailong
				发表于 2007-5-16 14:56	
			
		高人!				
					xiewg
				发表于 2007-5-16 15:28	
			
		<p>这样的话,是不是可以做成最简单的锂电驱动,锂电直驱,用PWM控制电路的通断,记得LED可以承受比较大的脉冲电路。</p>				
					hanarmy
				发表于 2007-5-16 16:45	
			
		祝贺下!				
					ldch
				发表于 2007-5-17 10:28	
			
		<div class="quote" twffan="done"><b>以下是引用<i>xiewg</i>在2007-05-16 15:28:26的发言:</b><br /><p>这样的话,是不是可以做成最简单的锂电驱动,锂电直驱,用PWM控制电路的通断,记得LED可以承受比较大的脉冲电路。</p></div><p></p><font size="5">  这倒是,可以构成最简单的锂电调光电路了,基本元件:PIC12F629、MOS、限流电阻(限制LED电流最大值)、电源滤波电容,然后根据自己需要刷程序,想要几档要几档</font>