Deryoung Electronics
         arduino lab note
 
Welcome to ... Guest! Not yet Open Comming Soon | Login

เจาะลึกคำสั่ง delay

  • delayMicroseconds()

คำสั่ง delayMicroseconds() นั้นเป็นการออกคำสั่งเพื่อการทำงานของโปรแกรม เป็นหยุดเวลาในช่วงสั้นๆ อยู่ในระดับไมโครวินาที ซึ่ง 1,000 ไมโครวินาที(us) เท่ากับ 1 มิลลิวินาที (ms) หรือ 1,000,000 ไมโครวินาที เท่ากับ 1 วินาที (s) นั่นเอง

และค่าที่มากสุดในการให้ระยะเวลาที่แม่นยำคือ 16,383 และน้อยสุด คือ 3 ไมโครวินาที ซึ่งเป็นสิ่งสำคัญของนักโปรแกรม ที่จะต้องใส่ใจในการเลือกใช้คำสั่งดังกล่าวให้เหมาะสมกับช่วงเวลาที่ต้องการนั้นด้วย ลองดูชุดคำสั่งต่อไปนี้

//*************************************
//Program:testMicroDelay.pde
//Crate by:Deryoung.com
//Resulte: on-off in rage microsecond time.
//Interface: none
//*************************************
int outPin=9;
void setup()
{
  pinMode(outPin,OUTPUT);
}

void loop() 
{
  digitalWrite(outPin, HIGH);   // sets the pin on
  delayMicroseconds(50);        // pauses for 50 microseconds      
  digitalWrite(outPin, LOW);    // sets the pin off
  delayMicroseconds(50);        // pauses for 50 microseconds   
  
}

รูปที่ 1. แสดงการเปิดปิดของ port Digital-9 ด้วยเวลา 50us

หลังจากเราได้ใช้คำสั่ง

digitalWrite(outPin, HIGH); จะอยู่ในสถานะ HIGH (5vdc)
delayMicroseconds(50); คำสั่งนี้จะทำการหยุดโปรแกรมชั่วขณะเป็นเวลา 50 ไมโครวินาที ทำให้ขา digitital-9
เป็น HIGH นาน 50 ไมโครวินาที

digitalWrite(outPin, LOW);จะอยู่ในสถานะ LOW (0V)
delayMicroseconds(50); คำสั่งนี้จะทำการหยุดโปรแกรมชั่วขณะเป็นเวลา 50 ไมโครวินาที ทำให้ขา digitital-9
เป็น LOW นาน 50 ไมโครวินาที

ทดลองอีกครั้ง โดยเราจะทดลองป้อนสถานะ HIGH ให้ขา digital-9 เป็นเวลา 25 us (ครึ่งหนึ่งของสถานะ Low)

void loop() 
{
  digitalWrite(outPin, HIGH);  
  delayMicroseconds(25);        // pauses for 25 microseconds      
  digitalWrite(outPin, LOW);    
  delayMicroseconds(50);           
  
}

หลังจาก Run โปรแกรมข้างต้น จะผลลัพธ์ที่ออกมาดังแสดงด้านล่าง


รูปที่ 2. ป้อนสถานะ HIGH นาน 25 ไมโครวินาที

 

เพื่อเป็นหาค่า min ที่ต่ำสุด (อย่างแม่นยำ) ทดลองป้อนเวลาเป็น 1 ไมโครวินาทีในสภาวะ HIGH ที่ digital-9 และ LOW เป็นระยะเวลา 5 ไมโครวินาที

int outPin=9;
void setup()
{
  pinMode(outPin,OUTPUT);
}

void loop() 
{
  digitalWrite(outPin, HIGH);   // sets the pin on
  delayMicroseconds(1);        // pauses for 1 microseconds      
  digitalWrite(outPin, LOW);    // sets the pin off
  delayMicroseconds(5);        // pauses for 5 microseconds   
  
}


ผลจากการตรวจวัดด้วย Oscilloscope จะผลลัพทธ์ช่วง HIGH ได้ผลลัพธ์ประมาณ 2.3us (ใกล้เคียง 3 us) ส่วนผลลัพธ์ของช่วงล่างที่เป็น LOW ยังคงได้ระยะเวลาที่ใกล้เคียงกับ 5.0us มากกว่า ตามที่เราป้อนหรือโปรแกรมมันลงไปในโปรแกรมข้างต้น.

 

This website is personally and all reserved right of meterial, you can copy and use its with refer link to this site
Email contact : support@deryoung.com