查看: 3319|回复: 49
|
一个 Button 做 On Off 的 circuit
[复制链接]
|
|
请问,要如何做,当我按push button 时, 电路会‘开’,再按时,电路会‘关’。
这电路名是不是叫 One Button On Off Switch circuit?
小弟去survey 过,只知道可用一些 IC 来做。但如只用 平常的 hard wiring, 1X NO push button 和 relay 而已,可以做出来吗?
小弟很想学, 因为可能在FYP 时可以用。请各位帮忙。
如给我一些资料,website, 有circuit 或 ladder diagram 的最好,让我参考。谢了。 |
|
|
|
|
|
|
|
发表于 15-1-2010 04:51 PM
|
显示全部楼层
本帖最后由 fayelife2007 于 16-1-2010 10:11 PM 编辑
这个很简单。你是要用microcontroller 的吗?我当你的final project 是用microcontroller了。
optional resistor 是拿来limit你的current flow to microcontroller. So that, 你的microcontroller才不会draw 太过多的current 导致你的source exhausted.
compulsory 是来clear 掉pin的floating voltage. 你可以试一试不放ground, 你会发现你的LED是dim的。其实它是flickering. 因为有floating voltage。 放ground 一定要放resistor, 否则你的source 会被short circuit 的。
optional 的current 要视你的microcontroller为准。因为不一样的IC 有不一样的rating.
你要确定你经过resistor 的current 和voltage 足够让你的microcontroller differentiate "High" or "Low".
Compulsory 的Resistor value 不要太过高。通常是低于你的optional resistor . 要记得,current prefers path with lower resistance.
所以,当你没有按button时,永远“High”supply 去给microcontroller, 当你按下去 时,microcontroller的pin 永远detect"Low"。
Check_button:
if(button==0 && LED==0) // button pressed
{
LED=1; // On LED
goto button_release;
}
else if(button==0 && LED==1)
{
LED=0; // On LED
goto button_release;
}
else
goto Check_button;
button_release:
if(button!=0)
goto Check_button;
else
goto button_release;
操作:本来的LED是没有亮的。第一次按下去时,亮着。手离开button后还是亮着。第二次按下去,就是要off掉LED.第三次按下去,又on LED......如此类推。
其实还有别的写法,可是我建议你用state machine 来做。 这个方式有时候看起来很多余因为有更短的方式。可是短的方式别人很难明白你做什么。当你的code 有问题时就会更麻烦了。用我的方式,一步一步的。别人也比较容易理解,也可以避免你的code clash 跟别的部分。Debug是也方便多了。
P/S:我的code 没有更据syntax, 只供参考。因为我本身已经忘了C和ASM的language 了。 |
评分
-
查看全部评分
|
|
|
|
|
|
|
发表于 15-1-2010 07:20 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 16-1-2010 10:55 AM
|
显示全部楼层
本帖最后由 fritlizt 于 16-1-2010 10:57 AM 编辑
回复 1# cyong87
按一下short,按一下open,
直接去买push button.有这种push button的。
要大power就买大粒的。。。 |
|
|
|
|
|
|
|
楼主 |
发表于 16-1-2010 06:51 PM
|
显示全部楼层
回复 2# fayelife2007
谢谢,我先用LED 试试。希望能了解optional resistor 和 compulsory resister 的作用。希望可以用在project 上。 |
|
|
|
|
|
|
|
楼主 |
发表于 16-1-2010 06:53 PM
|
显示全部楼层
回复 3# waiweng83
谢了,但觉得 pololu 好像很难用,不知容易买到没有。 |
|
|
|
|
|
|
|
楼主 |
发表于 16-1-2010 06:56 PM
|
显示全部楼层
回复 4# fritlizt
没办法,某人要求。 但如果用这样的button 就好像学不到什么。 |
|
|
|
|
|
|
|
楼主 |
发表于 16-1-2010 07:10 PM
|
显示全部楼层
回复 8# sushi-x
意思是说,如果code 不对,按着button 的话。 circuit 会一着 “开” 和“关”?
那如果做 inter lock, 或放 timer 可解决吗? |
|
|
|
|
|
|
|
发表于 16-1-2010 07:16 PM
|
显示全部楼层
我不清楚 inter lock 和timer 的情况
bouncing的出现不是在按着 button的时候,而是在 release button的那一杀那。 |
|
|
|
|
|
|
|
发表于 16-1-2010 09:38 PM
|
显示全部楼层
回复 8# sushi-x
我明白你写的。 我上述的circuit 已经解决这个问题了。因为有少少的电流造成这个现象。所以connect 5V永远让它"High", 按下去时永远让它“LOW”。 5V已经 Pull high 它的voltage 了。 所以不会一直“high, low, high low" 那样。( 我在上文中提到LEDflickering).
当你一trigger它时,全部在那pin+source 的current 会Draw去ground. 所以,那pin 是在0V状态。
V=IR=0V
这个Circuit只会让那pin 读either "high" or "low" based on the condition of the switch.
如果你要按一次ON, 按一次OFF,就要靠你的code了。 |
|
|
|
|
|
|
|
发表于 16-1-2010 09:52 PM
|
显示全部楼层
本帖最后由 sushi-x 于 16-1-2010 09:53 PM 编辑
我知道什么问题了。。。问题不在release。。。 my mistake
我把 problem 从新写过,请忽略#8
问题的名称还是叫 on off bouncing
问题原因是,当你在按button的一瞬间,其实在microcontroller已经进了 好几百个 cycle
就拿#2的code,就是没做好de-bouncing
我简单的说明#2的code有什么问题。
手按button->detect button = 0->statement (button==0 && LED==0)->LED on->detect button = 0->statement (button==0 && LED==1)->LED off->detect button = 0->statement (button==0 && LED==0)->LED on->重复
所以就算你很快的按button,可是LED已经 on off 几百次了,这就是我要说的 on off bouncing。 |
|
|
|
|
|
|
|
发表于 16-1-2010 09:56 PM
|
显示全部楼层
回复 9# cyong87
所以你的swtich 一定要有source (5V) + ground 来control 咯。
如果你只放5V, 没有放ground. 如下图
当你按时,5V去pin, microcontroller read as "High"
可是当你release时,你的pin已经是在一个”Unknown state" ..工程里是用“X”来标号。
X的意思是可以是" high" 也可以是" low".
原因:你的microcontroller 本身是需要source 来power up. 所以这些source 会supply current+voltage 给你的input/ output pins. 如果你已经declare 你的pins as input, 基本上是已经通电了(很小的电流)来operate ( current is to drive your voltage)你的pin 来read input. 可是当你release button 时没有告诉你的pin 本身present 的condition, 所以pin 里面会induced voltage 一直穿梭在threshold voltage 之间,这就会一直照程你的switch 自己持续的ON and Off.
所以, 没有用到的pins最好不要去declare 它。小小的project 可能不会照成太大的影响。可是,给大project includes Critical signal 的话,declare 了pin, 有connect 去另一个部分的circuit, 会影响整个power consumption的。
P/S:不懂你了解吗, 我打得一塌糊涂。 不太会中文表达这些technical 的东西。
http://i739.photobucket.com/albums/xx38/sebastian_brosnan/Random/pushbutton2.jpg |
|
|
|
|
|
|
|
发表于 16-1-2010 10:03 PM
|
显示全部楼层
本帖最后由 fayelife2007 于 16-1-2010 10:12 PM 编辑
回复 11# sushi-x
哎呀! 我写错 。谢太多,有点累。 谢谢sushi-X 提醒
改一改
button_release:
if(button!=0)
goto Check_button;
else
goto button_release;
|
|
|
|
|
|
|
|
发表于 16-1-2010 10:06 PM
|
显示全部楼层
回复 sushi-x
哎呀! 我写错 。谢太多,有点累。 谢谢sushi-X 提醒
改一改
button_release: ...
fayelife2007 发表于 16-1-2010 10:03 PM
不好意思,我在班门弄斧 |
|
|
|
|
|
|
|
发表于 16-1-2010 10:08 PM
|
显示全部楼层
本帖最后由 fayelife2007 于 16-1-2010 10:14 PM 编辑
回复 14# sushi-x
我很久没做这些了。有点忘记了。
别这么说大家一起分享分享
楼主最好sketch 一个flow chart 出来。否则会像我这样miss 掉两行
还有记得connect LED要放resistor 大约400-500 ohm..LED最耗电的(based on 5V as source). |
|
|
|
|
|
|
|
发表于 17-1-2010 11:10 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 17-1-2010 11:40 AM
|
显示全部楼层
本帖最后由 pic 于 17-1-2010 12:15 PM 编辑
回复 cyong87
原因:你的microcontroller 本身是需要source 来power up. 所以这些source 会supplycurrent+voltage 给你的input/ output pins. 如果你已经declare 你的pins as input,基本上是已经通电了(很小的电流)来operate ( current is to drive your voltage)你的pin 来readinput. 可是当你release button 时没有告诉你的pin 本身present 的condition, 所以pin里面会induced voltage 一直穿梭在threshold voltage 之间,这就会一直照程你的switch 自己持续的ONand Off.
基本上, 很少很少会有人用上面的那种接法。
所以, 没有用到的pins最好不要去declare 它。小小的project 可能不会照成太大的影响。可是,给大projectincludes Critical signal 的话,declare 了pin, 有connect 去另一个部分的circuit,会影响整个power consumption的。
一般上, 没有用的IO, 会设定成输出,logic 1 或logic 0 都可以。
如set 成input 的话, 不稳定的Logic, 会消耗更多的电流。 |
|
|
|
|
|
|
|
发表于 17-1-2010 11:48 AM
|
显示全部楼层
请问,要如何做,当我按push button 时, 电路会‘开’,再按时,电路会‘关’。
这电路名是不是叫 One Button On Off Switch circuit?
cyong87 发表于 15-1-2010 03:29 PM
你的应用是什么? 这个只是Project 的一部分?
希望你按板规清楚的说明。
小弟去survey 过,只知道可用一些 IC 来做。但如只用 平常的 hard wiring, 1X NO push button 和 relay 而已,可以做出来吗?
没有错, Logic gate IC ,( flip flop), 或relay 都可以做出这个效果。
还是希望你按板规说清楚你的应用,那么你会得到准确的回覆,
如果你是真正想学习的话, 就不要把问题的一部分拆出来问 。
|
|
|
|
|
|
|
|
发表于 17-1-2010 12:01 PM
|
显示全部楼层
我想纠正一些观念, 和理论, 就不客气直接评论了。。
上图那“optional” resistor 的位置, 正确名词 ...
pic 发表于 17-1-2010 11:10 AM
请问不用transistor吗?我以前circuit design都会根据 mcu 的 example circuit
|
|
|
|
|
|
|
|
发表于 17-1-2010 12:24 PM
|
显示全部楼层
本帖最后由 pic 于 17-1-2010 12:47 PM 编辑
请问不用transistor吗?我以前circuit design都会根据 mcu 的 example circuit
sushi-x 发表于 17-1-2010 12:01 PM
一般上, 当有人用Transistor 的时候, 他们的目的我能想到的是
1. 保护MCU 的pin, 如果出错, 也是Transistor 坏而已。
2. logic 电压的转换, 如 3.3V 去5V, 或5V 去3.3V 之类的。。
3. 输入信号很弱, 要靠transistor放大、
4. 用Transistor 来做invertor, 把信号 正反(invert)
上面我说的, 接法并不是像你发的图那样。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|