佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2964|回复: 38

PIC Project (IR 计数 + RS232)

[复制链接]
发表于 17-1-2007 01:50 AM | 显示全部楼层 |阅读模式
PIC大大,救救我。我的Final Year Project就快到期了。可是我还是不懂怎样写pic code.我的project是这样的: 我有一对IR是放在入口和一对放在出口,每当有人进去那个门口时,IR beam will break和relay会click.每当那个relay click一下就是说现在有一个人进去我的店里,然后relay会送一个signal给pic16F877A,在送到RS232然后去电脑。我的project's main purpose是要收集每天有多少个人进和离开我的店。所有的data会显示在VB.我的问题是,我不会写code,我用的是PICbasicPro. 我想请大家帮帮我。我下个星期六就要交了。。。拜托。。谢谢。
[ 本帖最后由 meimeyz 于 17-1-2007 01:55 AM 编辑 ]

[ 本帖最后由 pic 于 11-3-2007 12:13 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 17-1-2007 11:37 AM | 显示全部楼层

回复 #1 meimeyz 的帖子

你已经做了什么?
很清楚的说。。。
如有PIC Code, 电路, 请放出来。
回复

使用道具 举报

 楼主| 发表于 18-1-2007 09:17 AM | 显示全部楼层

回复 #2 pic 的帖子

PIC大大,老实的说一句我还没有开始写任何的code.因为我根本就不懂要怎样写, 还有,我要怎样把我的电路图放出来???我最大的问题是PIC code.
回复

使用道具 举报

发表于 18-1-2007 12:16 PM | 显示全部楼层

回复 #3 meimeyz 的帖子

首先,不要指名,因为还有其它网友能够帮你。

学生问来问去,都是围绕着几个问题,以后我会办教学,可以解决大部分的疑问和基本入门技巧。

在教学办起来前,可以破例帮助你, 作为以后MCU分区的教材参考。
但不要误会说这里是为大家做学校Project的地方,而且是有求必应那种。
当然, 如果是商业的Project,欢迎你付费找我,我会乐意帮你完成,因为那是我的工作和饭碗。

如你可以用CCS C 的PIC code,那你可以参考近两个月的旧帖,会找到完整的PIC code, VB范例, 电路设计,对你会很有帮助。你只要略作修改,就转成你要的project 。

要先看看你的电路图,在看看如何做吧。。。
<hr>

如何贴图: 参考:
如何贴图+提供免费网上空间+照片编辑软件下载和教学(新手必看)
http://chinese2.cari.com.my/myforum/viewthread.php?tid=100477

∴°☆ 【原创】『 貼圖教學 』简单上手 ☆ ∴°
http://chinese.cari.com.my/myforum/viewthread.php?tid=94035&fpage=1
回复

使用道具 举报

发表于 18-1-2007 06:57 PM | 显示全部楼层
抱歉,我不是要扑冷水。

(assume hardware 100% ok)
但下个星期六要交货,现在还没开始写 pic code,而且还无从下手,你须要的是一个能为你写完整个 code 的人。

pm pic 大大吧!
原帖由 pic 于 18-1-2007 12:16 PM 发表
...
当然, 如果是商业的Project,欢迎你付费找我,我会乐意帮你完成,因为那是我的工作和饭碗。
...
回复

使用道具 举报

 楼主| 发表于 18-1-2007 11:01 PM | 显示全部楼层
PIC大大,很抱歉可能我弄你生气了吧! 我真的不知道该怎么办。。。我已经是“热锅上的蚂蚁”了,我现在很紧张。。。我真的希望在线的各位大大可以帮帮小女子。。。 我的电路图:(有点小张请别见怪,因为是我用protel画的)



我已经等不及了,我下个星期五要DEMO了。。。。请给位大大高抬贵手帮帮小女子。。谢谢

[ 本帖最后由 pic 于 19-1-2007 07:33 AM 编辑 ]
回复

使用道具 举报

Follow Us
发表于 19-1-2007 09:22 AM | 显示全部楼层
meimeyz,

建议你 发 短消息(pm) 给 PIC大大,以 "商业的Project" 来看待这问题,"请$" PIC大大 帮你 "解决"。



发短消息 给 PIC大大 (link):
http://chinese.cari.com.my/myfor ... =send&uid=53232
回复

使用道具 举报

发表于 19-1-2007 10:20 AM | 显示全部楼层

回复 #6 meimeyz 的帖子

你放的图, IR 的部分能操作吗?那是receiver吗? Transmitter呢?
先不管,我假设你的IR beam是可以操作的,有人走过时relay会click 一下。
其实, 还有更简单的方法,就是用PWM 产生38Khz 的IR signal, 再用IR Module 接收,可是我看不要节外生枝了。

以下是电路, 和PIC code。我花1.5小时作的,你要珍惜。
Firmware 已在Simulator操作, 没问题的。
PC 的RS232接收,用hyperterminal, baud :9600,N,8, flow control:none

当有relay 触发(count/ trigger), counter会自动送出到PC。
如你要request value, 可以按“Q”键。
如你要reset counter, 可以按“X”键。

如你要VB program,请参考旧贴, 有源码。


  1. /*
  2. Project Desc:
  3. 1. This program will count relay input at Pin B0,
  4. 2. and will automatic send value to PC
  5. 3. User can request counter value by command "Q"
  6. 4. User can reset counter value by command "X"

  7. At PC side:
  8. a. To test the code, use hyperterminal
  9. b. Set baud rate : 9600,N,8, Flow control: None

  10. Code written by: PIC@cArI
  11. Date: 19 Jan 2007
  12. Note: This code is tested and work fine in simulator
  13. */
  14. #include <16F877A.H>
  15. #fuses   HS,NoPROTECT,noWDT,put,nobrownout,noLVP
  16. #use delay(clock=20000000) // 20 Mhz
  17. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,ERRORS)

  18. #define oLED      pin_B1
  19. #define iRelay    pin_b0

  20. #define LEDOn     output_high(oLED); // Turn on LED
  21. #define LEDOff    output_low(oLED); // Turn off LED



  22. int16 counter; // define a 16 bit counter, from 0- 65535


  23. void ReadRS232()
  24. {
  25.    int cmd;

  26.    ////////////////////////////////
  27.    // Check If there is Data from PC
  28.    if(kbhit())
  29.    {
  30.       cmd=getc(); // Get Data

  31.       //////////////////////////////
  32.       // If data is "X", Reset Command
  33.       if(cmd=='X')
  34.       {
  35.          counter=0; // reset Counter to 0

  36.          // Send counter to PC
  37.          printf("%lu\n\r",counter);
  38.       }

  39.       //////////////////////////////
  40.       // If data is "Q" , Query command
  41.       if(cmd=='Q')
  42.       {
  43.          // Send counter to PC
  44.          printf("%lu\n\r",counter);
  45.       }

  46.    }
  47. }



  48. void main()
  49. {
  50. int x;
  51.    
  52.    // Blink LED 5 time, to Indicate MCU is working
  53.    for (x=0; x<5;x++)
  54.    {
  55.       LEDOn;         // On LED
  56.       delay_ms(100); // delay 100ms
  57.       LEDOff;        // Off LED
  58.       delay_ms(100); // delay 100ms
  59.    }

  60.    counter=0;        // reset counter value

  61.    while(1)
  62.    {
  63.       ///////////////////////////////////////
  64.       // If Input is Low, Relay Close/Short
  65.       if(!input(iRelay))
  66.       {
  67.          counter++;  // increase counter by 1
  68.          LEDOn;      // On LED
  69.          
  70.          printf("%lu\n\r",counter); // send counter value to PC

  71.          while( !input(iRelay) )
  72.          {
  73.             // wait until input go high
  74.             ReadRS232(); // Read RS232
  75.          }

  76.          LEDOff; // Off LED

  77.       }

  78.       ///////////////////////////////////////
  79.       // Read RS232
  80.       ReadRS232();
  81.    }
  82. }
复制代码
回复

使用道具 举报


ADVERTISEMENT

发表于 19-1-2007 11:40 AM | 显示全部楼层
原帖由 GeMan 于 19-1-2007 09:22 AM 发表
meimeyz,

建议你 发 短消息(pm) 给 PIC大大,以 "商业的Project" 来看待这问题,"请$" PIC大大 帮你 "解决"。

“商业的Project”, 指的是真的商业用途的Project。  
比如你有点子(idea),想开发产品,或电子的部份想要制作原型(prototype),或要咨询(consultant),就可以归划成“商业的Project”了。 (广告?)

关于做“枪手”,和楼主没仇, 帮她是害她 。但如果楼主是性'马'的, 我可能会放下身段考虑 ,考虑。。。答应。。。要吃饭嘛 。。。Ok 啦 。。。(但我不是圣贤。。pm我吧。。开玩笑的啦。。。)
回复

使用道具 举报

发表于 19-1-2007 02:13 PM | 显示全部楼层
我在提醒 楼主 在这么短的时间内,要从 完全不会 coding 到 完成project 做 demo, 机会接近零。 (以我本身的经验,自己第一次 从 0 到 完成 pic coding 也要超过1个星期,而且已有多年电脑 programming 经验)

这一次帮她是救她,以后就。。。保重。。。

“商业的Project”>>钱是可以解决问题的,不一定是商业问题。。。hint hint 。。。
回复

使用道具 举报

 楼主| 发表于 22-1-2007 11:34 AM | 显示全部楼层
PIC Brother, sorry i need to use english comminicate with you is it due to I am using my University's PC to online. I notice some problem, when I test the program there have many "QQQQQ" appear in the hyperterminal. It is i need to add up all the "QQQQQ" when display on my VB???Sry for always disturb.

==========================================

请尽快编辑你的帖子。网上中文输入法 [ 本帖最后由 pic 于 22-1-2007 05:51 PM 编辑 ]
==========================================

GeMan 的翻译:
{翻译}
PIC大大, 对不起, 我须要用英文来与你沟通因为我正在用大学的电脑上网。 我发现一些问题,当我测试程序时,有很多"QQQQQ"出现在 hyperterminal。 我是否需要在 VB 里显示出来的时后,将所有的 "QQQQQ"加起来? 对不起,经常打扰。
{翻译完}

[ 本帖最后由 pic 于 23-1-2007 10:29 AM 编辑 ]
回复

使用道具 举报

 楼主| 发表于 22-1-2007 12:22 PM | 显示全部楼层
PIC bro, I am sorry for disturb. I just found that i have make a stupid mistake.  I put the wrong cystal for my PIC and now my problem solved and it works very well.Thanks. I will try to make some changes on the PIC code it is because I need 2 Relay input for the PIC. That means I need to collect 2 relay data.

==================================
请尽快编辑你的帖子。网上中文输入法 [ 本帖最后由 pic 于 22-1-2007 05:52 PM 编辑 ]
==================================

GeMan 的翻译:
{翻译}
PIC大大, 对不起 又打扰了。 我刚发现我犯了一个错误。 我在 PIC 里使用不对的 cystal。现在我的问题解决了,操作得非常好。 我现在将要更改一些 PIC 程序,因为我的 PIC 需要 2 个 relay input。 也就是说我需要读 2 个 relay 资料。
{翻译完}

[ 本帖最后由 pic 于 23-1-2007 10:31 AM 编辑 ]

评分

参与人数 1积分 -5 收起 理由
pic -5 用英文发表,积分转移给翻译作者。

查看全部评分

回复

使用道具 举报

发表于 22-1-2007 05:57 PM | 显示全部楼层

网上中文输入法

很多人用大学电脑没中文输入法为理由,而用英文输入。

我想信你是知道佳礼中文论坛是不允许用英文,这里我们也没很严格, 但你还是犯规了。

告诉你,你可以用 网上中文输入法
或在版面最上面的连接。

希望你尽快重新编辑过你用英文发表的贴。

或,有谁可以把搂主的帖翻译成中文,我会把楼主的积分转移给他/她, 不够我再加。
回复

使用道具 举报

发表于 22-1-2007 06:37 PM | 显示全部楼层
原帖由 pic 于 22-1-2007 05:57 PM 发表
...
或,有谁可以把搂主的帖翻译成中文,我会把楼主的积分转移给他/她, 不够我再加。


如何改楼主的帖? 没有他的 password ?!
回复

使用道具 举报

发表于 22-1-2007 06:50 PM | 显示全部楼层
原帖由 meimeyz 于 22-1-2007 11:34 AM 发表
PIC Brother, sorry i need to use english comminicate with you is it due to I am using my University's PC to online. I notice some problem, when I test the program there have many "QQQQQ" appear in the hyperterminal. It is i need to add up all the "QQQQQ" when display on my VB???Sry for always disturb.

{翻译}
PIC大大, 对不起, 我须要用英文来与你沟通因为我正在用大学的电脑上网。 我发现一些问题,当我测试程序时,有很多"QQQQQ"出现在 hyperterminal。 我是否需要在 VB 里显示出来的时后,将所有的 "QQQQQ"加起来? 对不起,经常打扰。
{翻译完}

原帖由 meimeyz 于 22-1-2007 12:22 PM 发表
PIC bro, I am sorry for disturb. I just found that i have make a stupid mistake.  I put the wrong cystal for my PIC and now my problem solved and it works very well.Thanks. I will try to make some changes on the PIC code it is because I need 2 Relay input for the PIC. That means I need to collect 2 relay data.

{翻译}
PIC大大, 对不起 又打扰了。 我刚发现我犯了一个错误。 我在 PIC 里使用不对的 cystal。现在我的问题解决了,操作得非常好。 我现在将要更改一些 PIC 程序,因为我的 PIC 需要 2 个 relay input。 也就是说我需要读 2 个 relay 资料。
{翻译完}

[ 本帖最后由 GeMan 于 22-1-2007 06:52 PM 编辑 ]

评分

参与人数 1积分 +30 收起 理由
pic + 30 很精确的翻译。

查看全部评分

回复

使用道具 举报

发表于 23-1-2007 10:38 AM | 显示全部楼层

回复 #15 GeMan 的帖子

很精确的翻译,赞赞赞!
楼主的分全给你了 ,我也相信楼主不介意这项交易。

但我不是鼓励大家用英文发表,所以请不要犯规。

[ 本帖最后由 pic 于 23-1-2007 10:45 AM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 24-1-2007 01:53 AM | 显示全部楼层
哇!!! 别扣我的分数嘛。。。对不起咯!!!在那个时候得我根本就没时间找网上中文的软件啊!!!我保证没下次了啦。。。别生气嘛!!! 不过在这同时我还是需要PIC大大帮我最后一个忙,我还是不会写第二个Relay Input的Code耶。。。帮帮我吧!!!我答应你们(所有的大大)我会努力的学习写Programming Code的。。。不过在这之前我还是需要帮忙。。。拜托嘛!!! 我的死期就在这星期五下午两点钟。。。
回复

使用道具 举报

发表于 24-1-2007 10:44 AM | 显示全部楼层
原帖由 meimeyz 于 24-1-2007 01:53 AM 发表
哇!!! 别扣我的分数嘛。。。对不起咯!!!在那个时候得我根本就没时间找网上中文的软件啊!!!我保证没下次了啦。。。别生气嘛!!! 不过在这同时我还是需要PIC大大帮我最后一个忙 ...

你明白那个PIC code, 就自然会写了。
如你不明白,就上来问。

分数不是扣掉,是转移给GeMan,你应该感激他。
分数没了, 再踊跃发帖赚就有咯。。。
回复

使用道具 举报

发表于 24-1-2007 07:39 PM | 显示全部楼层
原帖由 meimeyz 于 24-1-2007 01:53 AM 发表
哇!!! 别扣我的分数嘛。。。对不起咯!!!在那个时候得我根本就没时间找网上中文的软件啊!!!我保证没下次了啦。。。别生气嘛!!! 不过在这同时我还是需要PIC大大帮我最后一个忙 ...


我从来不用中文的软件来打字,我都用:
使用网上输入法发表新帖: 简体英中、 简体拼音、 简繁拼音、 简体仓颉、 简繁仓颉

使用网上输入法回复帖子: 简体英中、 简体拼音、 简繁拼音、 简体仓颉、 简繁仓颉

很好用的。 这次当作是交学费吧。

看了 PIC 大大的 c++ code, (对不起,不是要踢馆), 比较适合 一个 relay input 的操作。

如果要 2 个 relay, 概念要有些改变。 要不然,当一个人站在第一个 IR 前 不动, 第二个 IR 有人走过,就 detect 不到第二个 IR 的人了。
回复

使用道具 举报

发表于 24-1-2007 10:26 PM | 显示全部楼层
OK,受了"学费",就要教一点点。

以下是改至 PIC 大大 的 ,还是要谢谢 PIC 大大:

这个 code 没有经过 compile check 因为我没有 c compiler (我用 assembly 的)。

请 PIC 大大 ,帮忙 complie 看有没有 syntax 问题。


//modifed from PIC da da's code

// relay 1 definition
#define oLED1      pin_B1
#define iRelay1    pin_b0

#define LED1On     output_high(oLED1); // Turn on LED 1
#define LED1Off    output_low(oLED1); // Turn off LED 1

// relay 2 definition
#define oLED2      pin_B???
#define iRelay2    pin_b???

#define LED2On     output_high(oLED2); // Turn on LED 2
#define LED2Off    output_low(oLED2); // Turn off LED 2



int16 counter1;
int16 counter2;



void ReadRS232()
{
   int cmd;

   ////////////////////////////////
   // Check If there is Data from PC
   if(kbhit())
   {
      cmd=getc(); // Get Data

      //////////////////////////////
      // If data is "X", Reset Command
      if(cmd=='X')
      {
         counter1=0; // reset Counter to 0
         counter2=0; // reset Counter to 0

         // Send counter to PC
         printf("%lu\n\r",counter1);
         printf("%lu\n\r",counter2);
      }

      //////////////////////////////
      // If data is "Q" , Query command
      if(cmd=='Q')
      {
         // Send counter to PC
         printf("%lu\n\r",counter1);
         printf("%lu\n\r",counter2);
      }

   }
}


void main()
{
int x;

int RlyInput1;        //relay 1 input
int PrevRlyInput1;        //previous relay 1 input
int RlyInput2;        //relay 2 input
int PrevRlyInput2;        //previous relay 2 input
   
   // Blink LED 5 time, to Indicate MCU is working
   for (x=0; x<5;x++)
   {
      LEDOn;         // On LED
      delay_ms(100); // delay 100ms
      LEDOff;        // Off LED
      delay_ms(100); // delay 100ms
   }


   counter1=0;        // reset counter value
   counter2=0;        // reset counter value


   RlyInput1=input(iRelay1);
   RlyInput2=input(iRelay2);


   while(1)
   {

        // remember previous relay input status
        PrevRlyInput1=RlyInput1;
        PrevRlyInput2=RlyInput2;

        // get current relay input status
        RlyInput1=input(iRelay1);
        RlyInput2=input(iRelay2);


      ///////////////////////////////////////
      // If Input is Low, Relay Close/Short
      if(!RlyInput1)
      {
          if(PrevRlyInput1)  // if previous input high (open) , this means relay clicked, need to add 1
          {
              counter1++;  // increase counter by 1
         
              // always send 2 counter values so that PC will not confuse
              printf("%lu\n\r",counter1); // send counter value to PC
              printf("%lu\n\r",counter2); // send counter value to PC
          }
         LED1On;      // On LED
      }
      if(RlyInput1)              // If Input is high, Relay open
      {
         LED1Off;      // Off LED
      }


      ///////////////////////////////////////
      // If Input is Low, Relay Close/Short
      if(!RlyInput2)
      {
          if(PrevRlyInput2)  // if previous input high (open) , this means relay clicked, need to add 1
          {
              counter2++;  // increase counter by 1
         
              // always send 2 counter values so that PC will not confuse
              printf("%lu\n\r",counter1); // send counter value to PC
              printf("%lu\n\r",counter2); // send counter value to PC
          }
         LED2On;      // On LED
      }
      if(RlyInput2)              // If Input is high, Relay open
      {
         LED2Off;      // Off LED
      }


      ///////////////////////////////////////
      // Read RS232
      ReadRS232();
   }
}
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


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

GMT+8, 23-12-2024 06:51 PM , Processed in 0.207678 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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