|
楼主 |
发表于 12-2-2012 11:38 PM
|
显示全部楼层
还是很模糊, 你的机械结构是怎样也不知道, 两个motor? 独立操作? 如果一个motor 要上。 一个motor 要 ...
pic 发表于 12-2-2012 10:37 AM
不好意识... 可能表达能力有些问题。ok.... 当我的power on 的时候,pic 回先detect limit switch 2, (是否curtain 已经scroll down)如果limit switch 2 已经是=1,那么dc motor idle。(所以说,当我turn on pic 的时候,我的curtain 一定要是已经scroll down 了)
1.我 set dc motor 1(scroll up),跟limit switch 1 配对。当我的curtain 触碰到limit switch 1 的时候,dc motor 1 会idle,当dc motor 1 在走着的时候,dc motor 2 will be idle.
2. 我set dc motor 2(scroll down), 跟limit switch 2 配对.当我的curtain 触碰到limit switch 2 的时候,dc motor 2 会idle,当dc motor 2 在走着的时候,dc motor 1 will be idle.
其实我的light and heat sensor will only work when the car is turning off, 意思是说,当车启动的时候,我的heat 和 light sensor 是不会起作用,heat 和light sensor 只会在当车没在启动的状况下才会有作用。
所以说,当我的车turn off 的时候,light 和 heat sensor 才会turn on。
流程: 当我的车turn off 了,pic 会先detect limit switch 2 =“1” ,如果成立,那么就会就会activate light sensor,当light sensor=“1” ,就会activate heat sensor,如果是在我设定的temperature range,例如 40 C 到 50 C 之间,他就会trigger dc motor 1 scroll up, 当不是在我设定的range 的时候,它会loop 回去light sensor, 直到hit 到我设定的temperature range。如果< 40 degree,dc motor 2 会scroll down。
希望这次我解释的清楚点
另外想问pic 有那个网站可以让我学习写这类的programming 吗? |
|
|
|
|
|
|
|
发表于 13-2-2012 09:09 AM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 13-2-2012 03:27 PM
|
显示全部楼层
看来, 39°C 时就会scroll down, 然后又热了, 又Scroll up, 又比较凉了, 又scroll down, 一直上上下 ...
pic 发表于 13-2-2012 09:09 AM
好吧.... 我就尝试去摸索. 最后一个问题,如果要做到车不启动的时候,我得temperature sensor 才启动,可以用什么方法? |
|
|
|
|
|
|
|
发表于 14-2-2012 08:47 AM
|
显示全部楼层
好吧.... 我就尝试去摸索. 最后一个问题,如果要做到车不启动的时候,我得temperature sensor 才启动,可以用什么方法?
gozli_andrew88 发表于 13-2-2012 03:27 PM
车启动, 可以检测ACC, 或Key on.
就是当钥匙转On 时, ACC 输出12V, 你用分压器 检测ACC。
ACC 接Vin, Vout 接去你的MCU, R1,R2 可以用20K。
-
- // gozli_andrew88
- // pseudocode
- // 14 Feb 2012
- // By pic@cari
- #include <16F84A.H>
- #fuses XT,NoPROTECT,NoWDT
- #use delay(clock=4000000)
- #byte PortA = 0x05
- #byte PortB = 0x06
- #bit iLimitSw1 = PortA.0
- #bit iLimitSw2 = PortA.1
- #bit iSensor_Light = PortA.2
- #bit iSensor_Heat = PortA.3
- #bit oMotor_SclUp = PortB.0
- #bit oMotor_SclDw = PortB.1
- #bit iACC = PortB.2 // 新加
- Void MotorScrollDown()
- {
- oMotor_SclDw=1;// turn on Scroll down motor
- while(iLimitSw2==0)
- {
- // When LimitSw2 not 1, on motor Scroll down
- // Here we wait until Limit Sw2 =1
- }
- oMotor_SclDw=0;// turn off Scroll down motor
- }
- Void MotorScrollUp()
- {
- oMotor_SclUp=1;// turn on Scroll Up motor
- while(iLimitSw1==0)
- {
- // When LimitSw1 not 1, on motor Scroll Up
- // Here we wait until Limit Sw1 =1
- }
- oMotor_SclUp=0;// turn off Scroll Up motor
- }
- void main()
- {
- set_tris_A(0b11111111);
- set_tris_B(0b00000100);
- //////////////////////////
- // Init
- if (iLimitSw1==1) // If Limit Switch =1
- {
- MotorScrollDown();
- }
- //////////////////////////
- while (1)
- {
- if(iSensor_Light==1 && iSensor_Heat==1 && iLimitSw1==0 && iACC==0) // 新加ACC 检测
- {
- // 当Light =1,Temp=1, LimitSw =0
- MotorScrollUp();
- }
- }
- }
复制代码 |
|
|
|
|
|
|
|
楼主 |
发表于 15-2-2012 11:03 PM
|
显示全部楼层
本帖最后由 gozli_andrew88 于 16-2-2012 01:12 AM 编辑
车启动, 可以检测ACC, 或Key on.
就是当钥匙转On 时, ACC 输出12V, 你用分压器 检测ACC。
ACC 接 ...
pic 发表于 14-2-2012 08:47 AM
pic 我想问一下,这个programming 行得通吗?// gozli_andrew88
// pseudocode
// 12 Feb 2012
// By pic@cari
#include <16F84A.H>
#fuses XT,NoPROTECT,NoWDT
#use delay(clock=4000000)
#byte PortA = 0x05
#byte PortB = 0x06
#bit iLimitSw1 = PortA.0
#bit iLimitSw2 = PortA.1
#bit iSensor_Light = PortA.2
#bit iSensor_Heat = PortA.3
#bit oMotor_SclUp = PortB.0
#bit oMotor_SclDw = PortB.1
//我的意思是当motor scroll down的时候,
//我的curtain 触碰到limit sw2 的时候,dc motor 2 就会idle 了。
//我用两个dc motor 是因为一个让它 卷上,一个卷下,
//当motor 卷上的时候,碰到limit sw1 ,dc motor 1 就会停止了。
Void MotorScrollDown()
{
oMotor_SclDw=1;// turn on Scroll down motor
while(iLimitSw2==0)
{
// When LimitSw2 not 1, on motor Scroll down
// Here we wait until Limit Sw2 =1
}
oMotor_SclDw=0;// turn off Scroll down motor
}
Void MotorScrollUp()
{
oMotor_SclUp=1;// turn on Scroll Up motor
while(iLimitSw1==0)
{
// When LimitSw1 not 1, on motor Scroll Up
// Here we wait until Limit Sw1 =1
}
oMotor_SclUp=0;// turn off Scroll Up motor
}
void main()
{
set_tris_A(0b11111111);
set_tris_B(0b00000000);
//////////////////////////
// Init
if (iLimitSw1==1) // If Limit Switch =1
{
MotorScrollDown();
}
if (oMotor_SclDw==1) //If motor scrolling down ( ×××× 当motor scroll up 的时候, motor scroll down 的就不会activate)
{
oMotor_Sclup=0; //turn off scroll Up motor
}
if (iLimitSw2==1) // if Limit Switch =2
{
MotorScrollUp();
}
if (oMotor_SclDw==1) //If motor scrolling down ( ××××× 当我的motor scroll down 的时候,motor scroll up 不会activate)
{
oMotor_Sclup=0; //turn off scroll Up motor
}
//////////////////////////
while (1)
{
if(iSensor_Light==1 && iSensor_Heat==1 && iLimitSw1==0)
{
// 当Light =1,Temp=1, LimitSw =0
MotorScrollUp();
}
// 什么时候scrioll Down? 因为你没有讲,就自己写吧~
因为我想到,如果我的curtain 在中间的时候,不会碰到任何一个limit switch,所以如果我的curtain 在中间的时候,两个limit switch会=0,那么就会同时trigger 两个dc motor。所以问下,这样能吗?
还有我的dc motor 需要用H-bridge 来控制吗?如果需要的话?我需要做任何的programming 对H-bridge吗?也想知道#fuses XT,NoPROTECT,NoWDT, 这个什么作用? |
|
|
|
|
|
|
|
发表于 16-2-2012 07:48 PM
|
显示全部楼层
因为我想到,如果我的curtain 在中间的时候,不会碰到任何一个limit switch,所以如果我的curtain 在中间的时候,两个limit switch会=0,那么就会同时trigger 两个dc motor。所以问下,这样能吗?
gozli_andrew88 发表于 15-2-2012 11:03 PM
你的流程一定要清楚。。如果是卡在中间, 最简单的做法就是, 关闭scroll up 的motor, 开启scroll down 的 motor。
- //////////////////////////
- // Init
- if (iLimitSw1==0 && iLimitSw2==0 )
- {
- oMotor_SclUp=0;// turn off Scroll Up motor
- MotorScrollDown();
- }
复制代码
还有我的dc motor 需要用H-bridge 来控制吗?如果需要的话?我需要做任何的programming 对H-bridge吗?
我很好奇, 其实你是在纸上谈兵, 还是已经有硬体了?
你是先做硬体, 才写Firmware, 还是先写firmware, 后做hardware?
如果你已经做好硬体了, 可以放照片看看吗? 看看为什么要用两个motor, 你的机械结构是怎样的。。。
也想知道#fuses XT,NoPROTECT,NoWDT, 这个什么作用?
XT = 因为你是用16F84A, 4Mhz crystal, (XTAL)
NoPROTECT = 你的源码没有Code Protect, 能够被烧录器读出你的code
NoWDT = 不使用看门狗 (no WatchDog) |
|
|
|
|
|
|
|
楼主 |
发表于 17-2-2012 12:43 AM
|
显示全部楼层
你的流程一定要清楚。。如果是卡在中间, 最简单的做法就是, 关闭scroll up 的motor, 开启scroll down ...
pic 发表于 16-2-2012 07:48 PM
我是先做firmware,过后才做hardware的,我想.... 一个project 应该要有他的“心脏”,才能让他的手脚使用。
我的意识不是说卡在中间,我的意识是说,如果我的curtain在scrolling up 或 scrolling down 的时候,都不会触碰到limit switch,这样的情况的时候,那么就会同时trigger 两个dc motor。使它不能完全scroll up 或 scroll down |
|
|
|
|
|
|
|
发表于 17-2-2012 11:47 AM
|
显示全部楼层
我是先做firmware,过后才做hardware的,我想....
gozli_andrew88 发表于 17-2-2012 12:43 AM
理想和现实, 是有差距的。
所以, 在单晶分区的版规里
x. 有照片证明你做的东西吗?还是只是概念性的空谈?
建议你先把机械部分做好。
一个project 应该要有他的“心脏”,才能让他的手脚使用。
理论和实践, 是并存, 互补的。
可以想到很完美, 但是身体不行, 变成“有心无力”
我的意识不是说卡在中间,我的意识是说,如果我的curtain在scrolling up 或 scrolling down 的时候,都不会触碰到limit switch,这样的情况的时候,那么就会同时trigger 两个dc motor。使它不能完全scroll up 或 scroll down
你的机械出来了, 你会有另一番看法。
其实, 程序都很清楚了, 一次只是做一件事, motor 往下, 就要下到到底才停止。
- Void MotorScrollDown()
- {
- oMotor_SclDw=1;// turn on Scroll down motor
- while(iLimitSw2==0)
- {
- // When LimitSw2 not 1, on motor Scroll down
- // Here we wait until Limit Sw2 =1
- }
- oMotor_SclDw=0;// turn off Scroll down motor
- }
复制代码
一直到你的机械部分弄清楚了, 不然我没有能力给你任何回复了。 |
|
|
|
|
|
|
|
楼主 |
发表于 19-2-2012 11:24 PM
|
显示全部楼层
本帖最后由 gozli_andrew88 于 20-2-2012 01:54 AM 编辑
如果我在那里接去我的Pic 会拿到digital output 吗?还有我想问我的temperature sensor 应该接去 Lm339 的那个脚? positive 还是negative? |
|
|
|
|
|
|
|
楼主 |
发表于 20-2-2012 12:51 AM
|
显示全部楼层
车启动, 可以检测ACC, 或Key on.
就是当钥匙转On 时, ACC 输出12V, 你用分压器 检测ACC。
ACC 接 ...
pic 发表于 14-2-2012 08:47 AM
ACC 的全名是什么? |
|
|
|
|
|
|
|
发表于 20-2-2012 08:51 AM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 20-2-2012 12:17 PM
|
显示全部楼层
本帖最后由 gozli_andrew88 于 20-2-2012 12:20 PM 编辑
如按你的图, 不会。
你理解Comparator 的原理后, 自己会解答自己了。
ACC = ACCessories ...
pic 发表于 20-2-2012 08:51 AM
敢问pic 那么我要如何接才能得到digital output 呢?
我已经用了window voltage comparator, 可是在我set 的range 里,它的output还是一样,我做错了什么? |
|
|
|
|
|
|
|
发表于 20-2-2012 09:06 PM
|
显示全部楼层
本帖最后由 pic 于 20-2-2012 09:15 PM 编辑
敢问pic 那么我要如何接才能得到digital output 呢?
gozli_andrew88 发表于 20-2-2012 12:17 PM
你的PIC port 都接去Ground 了 , 你期待拿到什么output?只能是Logic 0.
请接去Q1 C脚。
我已经用了window voltage comparator, 可是在我set 的range 里,它的output还是一样,我做错了什么?
1. 请问你set 什么range? 算来看看?
2. 你的输出是那里一个?
3. 再三检查你的电路对有错吗? |
|
|
|
|
|
|
|
楼主 |
发表于 21-2-2012 01:50 AM
|
显示全部楼层
本帖最后由 gozli_andrew88 于 21-2-2012 01:52 AM 编辑
分享一下我做的一个temperature sensor, 当温度> 34度 时,circuit 就会activate。但只是用了一个voltage comparator 而已,在做着用两个voltage comparator.... 成功了再放上。
另外想请教一下,我把你写给我的programming 放到MPLAB 去debug,可是却出现了build failed。想问下什么问题....
|
|
|
|
|
|
|
|
楼主 |
发表于 1-3-2012 12:10 AM
|
显示全部楼层
还是很模糊, 你的机械结构是怎样也不知道, 两个motor? 独立操作? 如果一个motor 要上。 一个motor 要 ...
pic 发表于 12-2-2012 10:37 AM
我想问下,PIC 用什么Compiler呢? 我用mikroc c compiler 他出现Unknow #directive bit, 和出现 Unknown #directive byte,其实是我忘了做些什么是吗? |
|
|
|
|
|
|
|
发表于 1-3-2012 05:02 PM
|
显示全部楼层
本帖最后由 whitemilk 于 1-3-2012 05:05 PM 编辑
这里建议楼主换去用拥有A/D的单片机。不然就用PIC大大的VOLTAGE DIVIDER方法计算TRIGGER POINT。
楼主可以用MPLAB+HITECH C。
关于程序先个别做。
例如:
SWITCH1
void TRIGGERSW1()
{
if(switch1==0) <- 之前要define
{
MotorUp=1;
}
}
void TRIGGERSW2()
{
if(switch2==0)<- 之前要define
{
MotorUp=2;
}
}
void main() <---记得LOOP
{
TRIGGERSW1()
TRIGGERSW2()
} |
|
|
|
|
|
|
|
楼主 |
发表于 2-3-2012 11:46 AM
|
显示全部楼层
这里建议楼主换去用拥有A/D的单片机。不然就用PIC大大的VOLTAGE DIVIDER方法计算TRIGGER POINT。
楼主可以 ...
whitemilk 发表于 1-3-2012 05:02 PM
你是说我的heat sensor 是吗? 我已经用了voltage comparator 拿我的trigger point 了。programming 在第二十楼有了。可是当我酱这一个programming 放入mikroC compiler 的时候出现unknow byte 和 unknown bit.... 是什么问题? 希望你能帮我一下。谢谢 |
|
|
|
|
|
|
|
发表于 2-3-2012 03:13 PM
|
显示全部楼层
本帖最后由 whitemilk 于 2-3-2012 03:15 PM 编辑
那个program是ccs c 的(program software不同),pic大大应该只是让你参考如何用c写你的程式。还有我是说楼主的pic16f84a可以换去有A/D的PIC。这样可以更容易更改你的温度触发点。楼主也应该用面包板做个简单的circuit来测试你的软件。可以先用2颗LED代替step motor.用SWITCH代替所有的input。
问个问题,楼主是学生?这是学校的PROJECT? |
|
|
|
|
|
|
|
楼主 |
发表于 2-3-2012 06:23 PM
|
显示全部楼层
那个program是ccs c 的(program software不同),pic大大应该只是让你参考如何用c写你的程式。还有我是说楼 ...
whitemilk 发表于 2-3-2012 03:13 PM
那么要compile 这个program 要用什么software。对我还是学生,我对programming是从零开始。所以才会有那么多的问题。我知道用其他的pic 如pic 16f877里面已经a/d converter 了。可是就如我所说的。我对programning真的只会一点点而已。写a/d 的program我不是很清楚。所以只好用voltagecomparator来解决我的温度的trigger point 咯 |
|
|
|
|
|
|
|
发表于 3-3-2012 12:36 PM
|
显示全部楼层
哦~好的。不过我只能教你HITECH-C。因为我现在只用HITECHC了。
楼主还是自己写PROGRAM比较好。
因为PIC如果不知道自己的SOFTWARE的话真的很难做。
先下载MPLAD, 然后再下在HITECHC。GOOGLE就有了。下载LITE的就可以。
楼主可以加我MSN。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|