佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

12
返回列表 发新帖
楼主: gozli_andrew88

PIC 16f84a

[复制链接]
 楼主| 发表于 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 吗?
回复

使用道具 举报


ADVERTISEMENT

发表于 13-2-2012 09:09 AM | 显示全部楼层
如果是在我设定的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。

看来, 39°C 时就会scroll down, 然后又热了, 又Scroll up, 又比较凉了, 又scroll down, 一直上上下下。。

  希望这次我解释的清楚点
gozli_andrew88 发表于 12-2-2012 11:38 PM

你描述描述, 又突然多了一个条件“ 当车启动的时候”
功课是你自己最理解就可以了。
CCS C 做ADC 的sample code 已经提供了, 你的Code 的也写了示范, 你自己琢磨, 不明白可以问。

还有一点, 很多上来问功课的网友, 做好后, 一般是消失不见人影, 很少会回来报告的。
或者典型的报告就是: “我完成了, 谢谢” 。。。
但是具体是怎样完成? 或只是草草带过, 没有分享的意愿。我希望你不是哦。。

举例, 2楼
已经解决。
gozli_andrew88 发表于 8-2-2012 11:03 PM

怎样解决的? 没有说明。。我实际是要删帖了, 因为是没有意义的帖子, 没有贡献的帖子, 也没有参考价值的帖子。


另外想问pic 有那个网站可以让我学习写这类的programming 吗?

PIC 的开发工具有很多。。CCS C, PICBasic, HiTech C, MicroChip C18, MIcroC, CC5X, SourceBoost C,  IAR Embedded Workbench 等等, 他们都各有优劣。但是都是C 语言, 分别是ANSI C, 不是ANSI C, 内建功能的差异等等。

如果是指CCS C 的书, 那么 google: CCS C Nigel Gardner   
努力找,你会找到以下的Ebook


你在学习的过程, 如果有疑问, 你可以问。但是在问之前, 组织一下你的语言, 务必让网友明白你的问题,能图文并茂是最好不过了。
回复

使用道具 举报

 楼主| 发表于 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。



  1. // gozli_andrew88
  2. // pseudocode
  3. // 14 Feb 2012
  4. // By pic@cari

  5. #include <16F84A.H>
  6. #fuses  XT,NoPROTECT,NoWDT
  7. #use delay(clock=4000000)

  8. #byte PortA = 0x05
  9. #byte PortB = 0x06

  10. #bit iLimitSw1     = PortA.0
  11. #bit iLimitSw2     = PortA.1
  12. #bit iSensor_Light = PortA.2
  13. #bit iSensor_Heat  = PortA.3  
  14. #bit oMotor_SclUp = PortB.0
  15. #bit oMotor_SclDw = PortB.1

  16. #bit iACC                = PortB.2    // 新加


  17. Void MotorScrollDown()
  18. {
  19.    oMotor_SclDw=1;// turn on Scroll down motor

  20.   while(iLimitSw2==0)  
  21.    {
  22.       // When LimitSw2 not 1, on motor Scroll down
  23.       // Here we wait until Limit Sw2 =1
  24.    }
  25.    oMotor_SclDw=0;// turn off Scroll down motor
  26. }

  27. Void MotorScrollUp()
  28. {
  29.    oMotor_SclUp=1;// turn on Scroll Up motor

  30.   while(iLimitSw1==0)  
  31.    {
  32.       // When LimitSw1 not 1, on motor Scroll Up
  33.       // Here we wait until Limit Sw1 =1
  34.    }
  35.    oMotor_SclUp=0;// turn off Scroll Up motor
  36. }

  37. void main()
  38. {
  39.    set_tris_A(0b11111111);
  40.    set_tris_B(0b00000100);
  41.    //////////////////////////
  42.    // Init
  43.    if (iLimitSw1==1) // If Limit Switch =1
  44.    {
  45.       MotorScrollDown();
  46.    }
  47.    //////////////////////////

  48.    while (1)
  49.    {  
  50.       if(iSensor_Light==1 && iSensor_Heat==1 && iLimitSw1==0 && iACC==0)  // 新加ACC 检测
  51.       {
  52.          // 当Light =1,Temp=1, LimitSw =0
  53.          MotorScrollUp();
  54.       }

  55.    }
  56. }

复制代码
回复

使用道具 举报

 楼主| 发表于 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。
  1.    //////////////////////////
  2.    // Init
  3.    if (iLimitSw1==0 && iLimitSw2==0 )
  4.    {
  5.        oMotor_SclUp=0;// turn off Scroll Up motor
  6.         MotorScrollDown();
  7.    }

复制代码

还有我的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)
回复

使用道具 举报

Follow Us
 楼主| 发表于 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 往下, 就要下到到底才停止。

  1. Void MotorScrollDown()
  2. {
  3.     oMotor_SclDw=1;// turn on Scroll down motor

  4.   while(iLimitSw2==0)  
  5.      {
  6.         // When LimitSw2 not 1, on motor Scroll down
  7.         // Here we wait until Limit Sw2 =1
  8.      }
  9.     oMotor_SclDw=0;// turn off Scroll down motor
  10. }
复制代码



一直到你的机械部分弄清楚了, 不然我没有能力给你任何回复了。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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 | 显示全部楼层

如果我在那里接去我的Pic 会拿到digital output 吗?
gozli_andrew8 8 发表于 19-2-2012 11:24 PM

如按你的图, 不会。

还有我想问我的temperature sensor 应该接去 Lm339 的那个脚? positive 还是negative?

你理解Comparator 的原理后, 自己会解答自己了。

ACC 的全名是什么?
gozli_andrew88 发表于 20-2-2012 12:51 AM


ACC = ACCessories
回复

使用道具 举报

 楼主| 发表于 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()

}
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 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。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 24-4-2024 12:17 PM , Processed in 0.069236 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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