北斗
发表于 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>