หน่วงเวลาในarduino

Started by oldsnake13, June 10, 2015, 08:23:29 AM

Previous topic - Next topic

oldsnake13

ผมอยากทราบว่าถ้าต้องการหน่วงเวลาเป็นusและค่าที่น่วงมากกว่า32700จะเขียนอย่างไรครับ

S.poolpong93

http://www.arduino.cc/en/Reference/DelayMicroseconds

อยากได้เพิ่มก็วนลูปfor เอาครับ

oldsnake13

Quote from: S.poolpong93 on June 10, 2015, 12:47:18 PM
http://www.arduino.cc/en/Reference/DelayMicroseconds

อยากได้เพิ่มก็วนลูปfor เอาครับ
รบกวนช่วนแนะนำเรื่องloop forหน่อยครับว่า1รอบใช้เวลาเท่าไร


RoLRoR

loop , call , for , while , if แปลงเป็น asm แล้ว avr นับคำสั่งละ 1cycle ครับ
เพิ่มเติม : คำสั่งตรวจสอบและกระโดดไปทำงานอีกบรรทัดใช้ 2cycle

delay_us(int32_t dx)
{ while(dx > 32767)
{ delayMicroseconds(32767);
dx = dx - 32768;
} delayMicroseconds(dx);
}

ทดสอบแบบนี้ได้ไหมครับ?
รบกวนช่วยแจ้งผลการทดสอบด้วย. :D

oldsnake13

Quote from: RoLRoR on June 10, 2015, 06:52:18 PM
loop , call , for , while , if แปลงเป็น asm แล้ว avr นับคำสั่งละ 1cycle ครับ
เพิ่มเติม : คำสั่งตรวจสอบและกระโดดไปทำงานอีกบรรทัดใช้ 2cycle

delay_us(int32_t dx)
{ while(dx > 32767)
{ delayMicroseconds(32767);
dx = dx - 32768;
} delayMicroseconds(dx);
}

ทดสอบแบบนี้ได้ไหมครับ?
รบกวนช่วยแจ้งผลการทดสอบด้วย. :D
ผมแปลงไม่เป็นน่ะครับมือใหม่ อิๆ รบกวนด้วยครับ

crywolf

เปลี่ยนจาก DelayMicroseconds เป็น Delay เฉยๆครับ

Delay เฉยๆหน่วยเป็น ms

เช่นต้องการ delay 500000 uS ก็ใช้เป็น Delay(500);

RoLRoR

เลือกตามขนาดฟังก์ชั่นหน่วงเวลา.ตามท่าน crywolf แนะนำเลยครับ
www.arduino.cc/en/Reference/Delay
ถ้าไม่พอค่อยใช้วิธีเขียนโปรแกรม เรียกซ้ำ เพิ่มเอาได้

ให้แปลงโค้ดเองคงไม่ทำเหมือนกันครับ
เห็นพอมีตัวอย่างที่นี่
www.avr-tutorials.com/assembly/calculating-execution-time-code-single-loop

มีโปรแกรมช่วยสร้างโค้ดด้วยครับ

moneyp1000