搜索
bottom↓
回复: 50

尝试LED负偏压感光试验,成功!拿出来给大家分享一下! 【恢复】

[复制链接]

出0入0汤圆

发表于 2008-12-10 02:51:02 | 显示全部楼层 |阅读模式
电路十分简单:



单片机位ATMega8,单片机的PD口和PC.0-PC.1口连接12232F液晶用于显示亮度值和检测状态;

PB.0接作为感光器的红色LDE的负极,LED的正极接地;当PB.0置位时便对该LED加负偏压;置为高阻输入状态后即可检测LED结电容充电后的残余电压;

PB.1接作为指示灯的蓝色LED负极,LED正极通过220欧限流电阻接VCC,当PB.1清零时,该蓝色LED点亮。



估计大家都可以看懂,就不用画图了罢……

出0入0汤圆

 楼主| 发表于 2008-12-10 02:53:21 | 显示全部楼层
上成品的照片:



 (原文件名:ATmega8_12232_LED1.jpg) 

出0入0汤圆

 楼主| 发表于 2008-12-10 03:00:43 | 显示全部楼层
程序设计思路:



1:给LED反向偏值后,将PB.0置为高阻输入状态,然后循环计数到PB.0为地电平为止,循环计数的数值即可代表光照强度,并将该数值在12232F液晶上显示出来。



2:如果在255个循环内PB.0仍然没有到低电平,则认为照度不足,跳出循环计数,在液晶上显示亮度值为0。



3:每次计数结束后判断一下,如果亮度值高于220,则开启蓝色指示灯,并在液晶上显示我们OurAvr网站的Logo。



4:保持显示一段时间后返回计数显示的界面,重复下一次计数。





程序运行的效果见视频:





在线观看:



http://v.youku.com/v_show/id_XNTg0NjA5NzY=.html

把上述地址字串粘贴到IE地址栏即可观看。





下载观看:

点击此处下载 ourdev_535037.rar(文件大小:8.14M) (原文件名:MVI_7508.rar) 







注意手电筒照射红色感光用LED时液晶屏上数值的变化。

本贴被 i387DX 编辑过,最后修改时间:2008-12-10,03:15:04.

出0入0汤圆

 楼主| 发表于 2008-12-10 03:03:13 | 显示全部楼层
主程序(Main函数)如下:

void main()

{

uchar n,i;

init_devices();//端口初始化

LCD_Init();//LCD初始化

 delay(5);

LCD_sendIN(0x01);//清屏

 delay(50);

   PORTB = 0x03;//PB.0/PB.1同时输出高电平,其中PB.0的高电平为感光LED加负偏压;

   DDRB = 0x03; //PB.1的高电平用于关断用作指示灯的LED。

   delay2(1);

while(1)

{

 DDRB &=~ (1<<0);//DDRB &=~1(DDRB0 清零)

 PORTB &=~ (1<<0);//PORTB &=~1(PORTB0 清零)

 LCD_PlayLine(0x80,"光照检测:");//在LCD第1行第一位开始显示提示信息

 n=0xff;



   while (((PINB|0xfe)!=0xfe))

    {

     n--;

         LCD_PlayNum(0x85,n);//在LCD第1行提示信息后显示当前的循环计数值,(主要用于程序调试时排错)

         if (n==0x00) break;

         }//当检测到PB.0变为低电平时结束循环;若长时间PB.0不变低,计数器累计255次后,

          //认定当前亮度过低,跳出循环。

          

 LCD_PlayLine(0x90,"当前亮度:");//在LCD第2行第一位开始显示提示信息

 LCD_PlayNum(0x95,n);//在LCD第2行提示信息后显示最终的循环计数次数值,作为亮度的度量值。

 if (n>220)

  {

  LED_ON(); //亮度高于指定值后,指示灯开启

  LCD_Init();

  pic_Disp(AVR1);

  delay2(120); //同时屏幕上显示OURAVR的Logo,并持续一段时间

  LCD_Init();

  delay2(1);  

  }

 if (n<100) //亮度低于指定值后,指示灯关闭,屏幕恢复正常显示

  {

  LED_OFF();

  }

 PORTB |=(1<<0);//PORTB |=1;//;(PB0置位)

 DDRB |=(1<<0);//DDRB |=1;//(DDRB0置位),为感光LED加负偏压,进行下循环的检测。

 delay2(10);

}

}

本贴被 i387DX 编辑过,最后修改时间:2008-12-10,13:14:15.

出0入0汤圆

 楼主| 发表于 2008-12-10 03:11:39 | 显示全部楼层
如果懒得看视频,那就看看图片吧。这是用手电筒照射感光用LED时的效果:





 (原文件名:ATmega8_12232_LED2.jpg) 





 (原文件名:ATmega8_12232_LED3.jpg) 

出0入0汤圆

 楼主| 发表于 2008-12-10 03:18:57 | 显示全部楼层
补充:



作这个试验,不同的LED管,效果相差甚大。经检测,手头的绿色3mmLED管、红色3mmLED管、黄色3mmLDE、黄色5mm透明LDE、蓝色5mm透明LDE中,效果最好的就是这个红色3mm管,其次就是蓝色5mm管。最差的是那个黄色5mm管,几乎一点感光效果都没有……

出0入0汤圆

发表于 2008-12-10 07:42:15 | 显示全部楼层
好,看视频去了

出0入0汤圆

发表于 2008-12-10 08:16:52 | 显示全部楼层
不错啊,学习了

出0入0汤圆

发表于 2008-12-10 08:26:47 | 显示全部楼层
普通的1N4148也有反向光电流,有一个产品,模拟电路放在阳光下飘逸很严重,就是1N4148反向电流造成的。

要想做产品,还是光敏电阻的一致性好。

出0入0汤圆

 楼主| 发表于 2008-12-10 09:26:14 | 显示全部楼层
8楼貌似没有搞清楚。这个用的不是光电流,而是PN结的结电容。



这里的LED当作变容二极管来用,因为LED的PN结结电容容量会受光照的影响而变化,光照强则容量小,反之容量大。



给二极管反偏实际上就是给这个结电容充电,然后置IO脚为高阻输入状态用循环计数计算其自然放电到单片机认为是低点平的时间,然后根据此放电时间推断电容容量的大小,进而估算光照的强度。





这个原理来自于前面几个精华贴,参考:

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1386729&bbs_page_no=1&search_mode=1&search_text=LED&bbs_id=9999

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=859325&bbs_page_no=1&bbs_id=1000

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1883911&bbs_page_no=1&search_mode=1&search_text=LED&bbs_id=9999



但是,那些贴子搞得太复杂了,我把电路和程序都精简了一下,以适合于新手做着玩儿。这个只用一个IO口就可以了,主程序也只有十来行(我3楼程序里面多余的那些大多是用于LCD显示的,如果只是用来驱动指示灯,就用不了呢么多了)

出0入0汤圆

发表于 2008-12-10 09:28:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-12-10 10:41:09 | 显示全部楼层
不错,

出0入0汤圆

发表于 2008-12-10 11:05:35 | 显示全部楼层
挺好,又长见识了!呵呵

出0入0汤圆

 楼主| 发表于 2008-12-10 11:42:18 | 显示全部楼层
还是补充个电路图吧,感兴趣的可以参考一下。液晶用1602也可以,只需要把显示驱动有关的函数稍微更改下就行了。





 (原文件名:LED_感光.GIF) 

出0入0汤圆

 楼主| 发表于 2008-12-10 11:47:03 | 显示全部楼层
PS:电源用的是标称3.6V的单节锂离子电池,也可以用三节干电池。但是,用5V稳压电源的效果不是太好,数值跳动的比较厉害,应该是电源带来的杂波干扰的缘故。

出0入0汤圆

发表于 2008-12-10 12:28:53 | 显示全部楼层
不错,谢谢共享

出0入0汤圆

发表于 2008-12-10 13:04:11 | 显示全部楼层
谢谢  

出0入0汤圆

发表于 2008-12-10 13:26:31 | 显示全部楼层
MARK

出0入0汤圆

发表于 2008-12-10 15:36:07 | 显示全部楼层
可以在PROTEUS仿真吗?不可以吧,哪有光源啊?

出0入0汤圆

 楼主| 发表于 2008-12-10 16:18:23 | 显示全部楼层
Proteus当然没法仿真……



这个发光二极管的用法属于坛子里几位老大从老外的网站里挖到的“偏方”,现实当中没有这样正规的应用的。

出0入0汤圆

发表于 2009-1-27 22:09:46 | 显示全部楼层
发个我做的山寨版的图,GIF的,有点大没法直接显示,点击此处打开 ourdev_602504.gif(文件大小:768K,只有400K以内的图片才能直接显示) (原文件名:20081206_1a1db9e6cad6bd588be3REhXFWSmpWr3.gif) 

出0入0汤圆

发表于 2009-9-5 13:01:23 | 显示全部楼层
cool

出0入0汤圆

发表于 2009-9-5 14:15:04 | 显示全部楼层
jh

出0入0汤圆

发表于 2009-9-26 00:45:01 | 显示全部楼层
cool
头像被屏蔽

出0入0汤圆

发表于 2009-9-26 06:21:16 | 显示全部楼层
Cool !

出0入0汤圆

发表于 2009-9-26 06:36:28 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-12-24 22:11:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-24 22:46:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-25 08:37:41 | 显示全部楼层
好 学习ING

出0入0汤圆

发表于 2009-12-25 12:07:53 | 显示全部楼层
忍不住要mark,呵呵

出0入0汤圆

发表于 2009-12-25 12:30:45 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-12-25 12:54:07 | 显示全部楼层
记号一下,学习中……

出0入0汤圆

发表于 2009-12-25 13:45:23 | 显示全部楼层

出0入0汤圆

发表于 2009-12-25 20:46:36 | 显示全部楼层
呵呵 最近很火啊~~mark下

出0入0汤圆

发表于 2009-12-26 16:57:25 | 显示全部楼层
回复【楼主位】i387DX
-----------------------------------------------------------------------

楼主有无12864液晶(串并口模式)显示图片程序?现在学搞液晶。有的话可以发份到我邮箱吗?metalqiu@hotmail.com

出0入0汤圆

发表于 2009-12-26 18:09:05 | 显示全部楼层
mark~~~

出0入0汤圆

发表于 2009-12-26 18:26:52 | 显示全部楼层
非常不错,过两天有空了也试试。

出0入0汤圆

 楼主| 发表于 2009-12-26 19:12:11 | 显示全部楼层
回复【35楼】metalmadman
回复【楼主位】i387DX  
-----------------------------------------------------------------------
楼主有无12864液晶(串并口模式)显示图片程序?现在学搞液晶。有的话可以发份到我邮箱吗?metalqiu@hotmail.com
-----------------------------------------------------------------------

呵呵,好久以前的东西了,翻了翻,程序还在。这个就是上面主程序里用到的绘图函数,其实很简单……


//图片取模方式:横向取模,字节正序
void pic_Disp(const *pic)    //显示图片
{
uchar x,y;
for(y=0;y<32;y++)
{
  for(x=0;x<8;x++)
  {
   LCD_Command(0x36);    //写扩充指令,开绘图显示
   LCD_Command(0x80+y);  //写行地址
   LCD_Command(0x80+x);  //写列地址
   LCD_Data(*pic++);  //写高八位数据
   LCD_Data(*pic++);  //写低八位数据
   LCD_Command(0x38);    //返回基本指令
  }
}
}

这个是我那个ST7920的汉字12832的屏用的,如果是12864的屏那就把for循环里面的32改成64就是了……

出0入0汤圆

发表于 2010-4-18 22:15:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-6 18:27:52 | 显示全部楼层
标记

出0入50汤圆

发表于 2010-5-6 21:33:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-5 00:29:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-8 22:30:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-13 09:53:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-13 10:54:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-13 11:05:49 | 显示全部楼层
mark!!

出0入0汤圆

发表于 2011-1-13 12:15:03 | 显示全部楼层
学习了。谢谢

出0入0汤圆

发表于 2011-1-13 12:15:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-4 20:20:46 | 显示全部楼层
mark,真是有趣的东西,连AD都不用了……

出0入0汤圆

发表于 2011-10-20 17:07:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-20 18:16:04 | 显示全部楼层
好现.下次试下.转个思路用两只IO.接地脚接到另一只IO上.实现测完光后然后点亮.暗就亮一点.亮反之.不知有朋友这样搞不
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 01:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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