手电大家谈-手电筒爱好者之家

 找回密码
 注册成为会员,享受更多功能。

QQ登录

只需一步,快速开始

只需一步,快速开始

搜索
查看: 7275|回复: 19

共享一个AVR调光2*7135程序

[复制链接]

该用户从未签到

发表于 2008-11-13 01:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册成为会员,享受更多功能。

x
采用ATtiny13v,5脚6脚各控制一个7135,程序很简单,很容易就能修改成你想要的电流等。
在开启60ms和2060ms之间关闭手电时能调光,60ms的延迟是出于防抖动的考虑。在DEBUG模式下,4脚接的LED可以指示可调时间段。调光顺序为单7135-双7135-单35ma-单175ma。
两个7135全开时最亮,用单个7135全开或PWM来调节其余亮度。

之所以这样考虑,是因为一个设想:我们知道PWM时电流=占空比*最大电流,
那么PWM时的光通量是不是也是=占空比*最大光通量呢?
如果设想成立,2只7135PWM50%和单个7135全开来比较,因LED在大电流时光电效率降低,应该会得出同样的电流下后者比前者要亮的结论。我写了对应的程序来测试,但苦于没有有效手段来测试PWM情况下的光通量,没法证实。

程序如下,采用GCC,够简练吧。初学AVR,还请前辈们斧正。

#include <io.h>
#include <util/delay.h>
#include <eeprom.h>
#include <interrupt.h>
#include <sleep.h>

#define DEBUG
// 9.6MHz
#define FREQ 9.6
#define ClkDIV 8
#define StepAddress ((uint8_t *) 62)
#define MaxStep 4
unsigned char step;
void DelayMs (unsigned int t)
{
unsigned int i;
for (i = 0; i < t; i++)
  _delay_loop_2 (250 * FREQ / ClkDIV);
}
void disp ()
{
switch (step) {
  case 0:  // 单点1个7135
  {
   DDRB |= _BV (PB0);
   PORTB |= _BV(PB0);
   break;
  }
  case 1:  // 点2个7135
  {
   DDRB |= (_BV (PB0) | _BV (PB1));
   PORTB |= (_BV (PB0) | _BV (PB1));
   break;
  }
  case 2:  // 单个7135 35ma (350ma/10)
  {
   DDRB |= _BV (PB0);
   OCR0A = 0x100 / 10;
   TCCR0A |= (_BV (COM0A1) | _BV (WGM01) | _BV (WGM00));
   TCCR0B |= (_BV (FOC0A) | _BV (CS01) | _BV (CS00));
   break;  
  }
  case 3:  // 单个7135 175ma (350ma/2)
  {
   DDRB |= _BV (PB0);
   OCR0A = 0x100 / 2;
   TCCR0A |= (_BV (COM0A1) | _BV (WGM01) | _BV (WGM00));
   TCCR0B |= (_BV (FOC0A) | _BV (CS01) | _BV (CS00));
   break;  
  }
  default:
   break;
}
}
int main ()
{
char newStep;
step = eeprom_read_byte (StepAddress);
if (step >= MaxStep)
  step = 0;
disp ();

if ((newStep = step + 1) >= MaxStep)
  newStep = 0;
DelayMs (60); // 延迟60ms到2060ms之间关闭可以调光
eeprom_write_byte (StepAddress, newStep);
#ifdef DEBUG
DDRB |= _BV (PB4);
PORTB |= _BV(PB4);
#endif
DelayMs (2000);
#ifdef DEBUG
PORTB &= ~ _BV(PB4);
#endif
eeprom_write_byte (StepAddress, step);
for (;;) {
  set_sleep_mode(SLEEP_MODE_IDLE);
  cli();
  sleep_enable();
  sei();
  sleep_cpu();
}
return 0;
}
回复 dsu_marcocopyright:copyright

使用道具 举报

该用户从未签到

发表于 2008-11-13 01:09 | 显示全部楼层
改成控制3个7135就完美了
回复

使用道具 举报

  • TA的每日心情
    开心
    2021-11-10 09:38
  • 签到天数: 392 天

    [LV.9]以坛为家II

    发表于 2008-11-13 01:41 | 显示全部楼层
    进了学习下
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-6-24 04:56
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2008-11-13 01:42 | 显示全部楼层
    见个见识
    回复

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2008-11-13 09:09 | 显示全部楼层

    改成3个、4个都很简单。ATtiny13 共有6个IO脚,除去一个用作RESET,还有5个可以单独控制5路,硬件PWM输出只有2路。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-25 09:11
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-11-13 11:29 | 显示全部楼层
    学习一下.....
    回复

    使用道具 举报

    该用户从未签到

    发表于 2008-11-13 12:26 | 显示全部楼层
    可以给一些多关于AVR的资料网页吗,好像怎样写到AVR我也不知怎么做.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-25 09:11
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-11-13 12:34 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    发表于 2008-11-13 15:38 | 显示全部楼层
    请问一个最低配置,是不是要有这些东西
    - 下载一个编程软件
    - 并口51/AVR ISP下载器
    - JTAG或ISP座(2*5,90°弯脚)
    回复

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2008-11-13 16:44 | 显示全部楼层
    原帖由 ak47fans 于 2008-11-13 15:38 发表
    请问一个最低配置,是不是要有这些东西
    - 下载一个编程软件
    - 并口51/AVR ISP下载器
    - JTAG或ISP座(2*5,90°弯脚)


    差不多。
    我是自制的一个Altera 的ByteBlaster  ISP 下载线,线路极其简单,只用了一个74LS244和几个电阻,资料从ISPlay 1.3或1.5的文档中找。
    ISP座倒也无所谓,我是用6针杜邦线和2个6脚的2.54mm间距排插。
    ISP上位机软件是muCodeISP, http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=404397&bbs_page_no=1&sub_kind_id=1210&bbs_id=1000

    这软件我找了好几个,就这个能用。isplay只能下51,不能下AVR。

    avr市场做得差啊,好的网站不多,www.ouravr.com     算一个
    回复

    使用道具 举报

    该用户从未签到

    发表于 2008-11-14 11:51 | 显示全部楼层
    谢谢你的分享,我装好了 AVR Studio 4 及 WINAVR, 尝试了ouravr.com的第一个范例,已经能成功编译范例.用AVR studio编译你分享的程序時,找不到Header Files.
    ../test.c:1:16: error: io.h: No such file or directory
    ../test.c:3:20: error: eeprom.h: No such file or directory
    ../test.c:4:23: error: interrupt.h: No such file or directory
    ../test.c:5:19: error: sleep.h: No such file or directory
    请问应该怎样解决
    回复

    使用道具 举报

    该用户从未签到

    发表于 2008-11-14 12:22 | 显示全部楼层
    解决了,改为
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/eeprom.h>
    #include <avr/interrupt.h>
    #include <avr/sleep.h>
    但我发觉在AVR Studio内编译跟在WinAVR内编译的结果不同,请问你是用那个编译的.

    [ 本帖最后由 ak47fans 于 2008-11-14 12:35 编辑 ]
    回复

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2008-11-14 12:46 | 显示全部楼层
    原帖由 ak47fans 于 2008-11-14 12:22 发表
    解决了,改为
    #include
    #include
    #include
    #include
    #include
    但我发觉在AVR Studio内编译跟在WinAVR内编译的结果不同,请问你是用那个编译的.


    我是用AVR Studio编译的。忘了说了,我把include/avr的目录加到include的搜索路径里了,所以不需要在.h前加avr/
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-25 09:11
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-11-14 13:02 | 显示全部楼层
    "我写了对应的程序来测试,但苦于没有有效手段来测试PWM情况下的光通量,没法证实。.........."

    也许可以拿相机用手动曝光的方式拍摄光斑进行对比,不过微小的亮度差别可能看不出来。
    回复

    使用道具 举报

    该用户从未签到

     楼主| 发表于 2008-11-14 14:00 | 显示全部楼层
    原帖由 artie 于 2008-11-14 13:02 发表
    "我写了对应的程序来测试,但苦于没有有效手段来测试PWM情况下的光通量,没法证实。.........."

    也许可以拿相机用手动曝光的方式拍摄光斑进行对比,不过微小的亮度差别可能看不出来。 ...


    眼睛直接看,PWM的电路和直流电路是一样的。通过相机一看,PWM的电路明显有点闪。可惜我相机没手动,否则固定光圈和曝光时间,曝光时间超过1秒,应该能看出区别来吧。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-3-11 14:35
  • 签到天数: 97 天

    [LV.6]常住居民II

    发表于 2009-2-1 22:06 | 显示全部楼层
    支持!!!!
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2021-8-13 15:48
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-3-16 00:07 | 显示全部楼层
    本帖最后由 kgje 于 2010-3-16 00:09 编辑

    我对手电电路 很感兴趣,做个记号,明天再来看。
    回复

    使用道具 举报

    该用户从未签到

    发表于 2010-3-16 08:51 | 显示全部楼层
    眼睛直接看,PWM的电路和直流电路是一样的。通过相机一看,PWM的电路明显有点闪。可惜我相机没手动,否则固定光圈和曝光时间,曝光时间超过1秒,应该能看出区别来吧。 ...
    sogohz 发表于 2008-11-14 14:00


    手电电路因为体型成本限制要在led端做到直流估计有难度,个人感觉还是直接控制单个7135开闭效果比较好,设定为单个、二个、三个7135工作比较好
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2014-10-20 14:27
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-3-16 09:29 | 显示全部楼层
    {:1_217:}非常感谢17楼挖出来这么好一个帖子,学习了
    回复

    使用道具 举报

    头像被屏蔽
  • TA的每日心情
    开心
    2015-7-31 10:16
  • 签到天数: 110 天

    [LV.6]常住居民II

    发表于 2010-3-16 21:46 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    回复

    使用道具 举报

    本版积分规则

    小黑屋|手机版|Archiver|论坛自带搜索|下载论坛app|手电大家谈-手电筒爱好者之家 ( 备案序号:鲁ICP备05002565号 )
    以上言论纯属个人观点,与手电大家谈立场无关。
    最佳浏览模式:1920*1080


    GMT+8, 2024-9-28 11:22 , Processed in 0.160473 second(s), 63 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表