Pages: [1]   Go Down
Print
Author Topic: สอบถามเรื่องการใช้ขาpicรับสัญญาณพัลคับ  (Read 11922 times)
0 Members and 4 Guests are viewing this topic.
chakatphon
Jr. Member
**
Offline Offline

Posts: 14


Email
« on: March 27, 2013, 03:24:04 PM »

คือเซนเซอร์ของผมoutputเป็นสัญญาณสแควพัลเปลี่ยนเปลงสัญญาณสั้นยาว คือผมจะจับเวลาขอบขาขึ้นและขอบขาลงของสัญญาณพัลแล้วให้picแบ่งสัญญาณออกเป็น3ช่วง
1 ต้องใช้ขาใดเพิ่อรับสัญญาณพัลจากเซนเซอร์เข้าpic
2 วิธีเขียนเขียนอย่างไร

ขอขอบคุณล่วงหน้านะคับ
Logged
gundam
Global Moderator
Hero Member
*****
Offline Offline

Posts: 292



« Reply #1 on: March 27, 2013, 03:59:07 PM »

การวัดคาบเวลาคุณต้องมีรายละเอียดด้วยว่าขนาดของสัญญาณอยู่ในช่วงไหน
เช่น 10us-100us คุณถึงจะออกแบบการวัดได้

หากการวัดต้องการเปรียบเทียบว่ากว้างกว่านี้เป็น 1 น้อยกว่าเป็น 0
ก็ใช้วินี้ก็วนลูบนับเอาก็ได้ครับ


หากต้องการวัดเป็นค่าเวลาก็ใช้ Timer จับเวลา ตัวอย่างการวัดด้วย timer
http://www.thaimicrotron.com/CCS-628/Timer/Timer0_EX1.htm

แล้วแบ่งสัญญาณออกเป็น3ช่วง นั้นไปทำอะไร อย่างนั้นก็เอาผลของการวัดหาร 3 ได้ไหม
Logged
chakatphon
Jr. Member
**
Offline Offline

Posts: 14


Email
« Reply #2 on: March 27, 2013, 04:45:24 PM »

ขอเมลได้ป่าวคับผมจะส่งรูปสัญญาณไปให้ บนนี้อัพไม่ได้อะคับ
Logged
gundam
Global Moderator
Hero Member
*****
Offline Offline

Posts: 292



« Reply #3 on: March 27, 2013, 05:20:49 PM »

วิธีฝากรูปครับ
http://www.thaimicrotron.com/webboard2/index.php/topic,867.0.html
Logged
Hanajiji
Jr. Member
**
Offline Offline

Posts: 19


Email
« Reply #4 on: March 27, 2013, 05:36:54 PM »

count = 0;
if(input == 1)
{
     while(input == 1)
     {
           count++;
     }
}
return(count);

แค่นี้ได้ป่าวคับ
Logged
chakatphon
Jr. Member
**
Offline Offline

Posts: 14


Email
« Reply #5 on: March 27, 2013, 05:51:07 PM »

สัญญาณขณะปกติ
Logged
chakatphon
Jr. Member
**
Offline Offline

Posts: 14


Email
« Reply #6 on: March 27, 2013, 05:53:34 PM »

สัญญาณที่เซนเซอร์แล้ว
Logged
chakatphon
Jr. Member
**
Offline Offline

Posts: 14


Email
« Reply #7 on: March 27, 2013, 06:09:45 PM »

ของผมคือเครื่องตรวจจับสนามไฟฟ้าอะคับผมจะทำให้มันเตือนด้วยLEDและบัสเซอร์โดยใช้pic 16f88
โดยเตือน3ระดับ ระดับแรก ดับปิบๆ ห่างๆ ระดับที่2 ถี่ๆ ระดับที่3ดังยาวคับ
Logged
gundam
Global Moderator
Hero Member
*****
Offline Offline

Posts: 292



« Reply #8 on: March 27, 2013, 06:18:14 PM »

count = 0;
if(input == 1)
{
     while(input == 1)
     {
           count++;
     }
}
return(count);

แค่นี้ได้ป่าวคับ

- ตัวแปรที่ใช้ในการนับจะต้องมีขนาดพอที่จะเก็บข้อมูลนับได้ เช่น unsigned int16,unsigned int32
- การนับต้องกำหนดขอบเขตด้วยว่าไม่เกินเท่าไร


#define DATAIN                PIN_A1
#define BIT_ONE_MAX     428

unsigned int16 count;

signed int RxBit(void)
{
    while(input(DATAIN)==1)
    {
     Cnx++;
     if(Cnx>BIT_CN_MAX)   //ขนาดเกินกว่ากำหนด
      return -1;
    }
  return Cnx;
}






Logged
Hanajiji
Jr. Member
**
Offline Offline

Posts: 19


Email
« Reply #9 on: March 27, 2013, 06:40:59 PM »

count = 0;
if(input == 1)
{
     while(input == 1)
     {
           count++;
     }
}
return(count);

แค่นี้ได้ป่าวคับ

- ตัวแปรที่ใช้ในการนับจะต้องมีขนาดพอที่จะเก็บข้อมูลนับได้ เช่น unsigned int16,unsigned int32
- การนับต้องกำหนดขอบเขตด้วยว่าไม่เกินเท่าไร


#define DATAIN                PIN_A1
#define BIT_ONE_MAX     428

unsigned int16 count;

signed int RxBit(void)
{
    while(input(DATAIN)==1)
    {
     Cnx++;
     if(Cnx>BIT_CN_MAX)   //ขนาดเกินกว่ากำหนด
      return -1;
    }
  return Cnx;
}

ผมว่า แก้ปัญหาค่าสูงสุด โดย ใช้วิธี ใส่ delay_us() ไว้ในลูปดีกว่าครับ แถมแยกแค่สามระดับ น่าจะได้อยู่ ส่วน -1 return ออกมาไม่ได้ใช้
« Last Edit: March 27, 2013, 06:46:10 PM by Hanajiji » Logged
Pages: [1]   Go Up
Print
 
Jump to: