ผลต่างระหว่างรุ่นของ "ตัวอย่างโปรแกรมสำหรับไมโครคอนโทรลเลอร์"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 10 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 1: แถว 1:
 
: ''วิกินี้เป็นส่วนหนึ่งของรายวิชา [[01204223]]''
 
: ''วิกินี้เป็นส่วนหนึ่งของรายวิชา [[01204223]]''
  
 +
* '''โปรแกรมสาธิตการทำงานแบบมัลติทาสกิ้ง''' [ดาวน์โหลด [http://www.cpe.ku.ac.th/~cpj/204223/multitask.zip multitask.zip]]
 +
: แสดงตัวอย่างการเขียนโปรแกรมแบบมัลติทาสกิ้งที่ทำให้ LED กระพริบอิสระ พร้อมตรวจสอบสถานะสวิตช์ไปพร้อม ๆ กัน ภายในไฟล์มีซอร์สโค้ดของเฟิร์มแวร์ที่ให้พฤติกรรมการทำงานเดียวกัน แต่ใช้เทคนิคที่แตกต่างกัน 3 รูปแบบคือ (1) ใช้ if (2) ใช้ goto และ (3) ใช้ไลบรารี protothreads
 +
: [https://www.cpe.ku.ac.th/~cpj/204223/sim/blink-2leds-sw.html ดูซิมูเลชันแสดงการทำงาน]
 +
: บทความเพิ่มเติม: [[มัลติทาสกิ้งบนไมโครคอนโทรลเลอร์]] และ [[มัลติทาสกิ้งด้วยไลบรารี Protothreads]]
 
* '''โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นอุปกรณ์จอยสติ๊ก''' [ดาวน์โหลด [http://www.cpe.ku.ac.th/~cpj/204223/joystick.tgz joystick.tgz]]
 
* '''โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นอุปกรณ์จอยสติ๊ก''' [ดาวน์โหลด [http://www.cpe.ku.ac.th/~cpj/204223/joystick.tgz joystick.tgz]]
: อาศัยไลบรารี V-USB เพื่อให้คอมพิวเตอร์มองเห็นบอร์ดไมโครคอนโทรลเลอร์เป็นอุปกรณ์ในกลุ่ม [http://en.wikipedia.org/wiki/USB_human_interface_device_class USB HID (Human Interface Device)] ซึ่งทำให้ใช้งานบนระบบปฏิบัติการทั่วไปเช่น Linux และ Windows ได้ทันทีโดยไม่ต้องเขียนไดรเวอร์เพิ่มเติม
+
: อาศัยไลบรารี V-USB เพื่อให้คอมพิวเตอร์มองเห็นบอร์ดไมโครคอนโทรลเลอร์เป็นอุปกรณ์ในกลุ่ม [http://en.wikipedia.org/wiki/USB_human_interface_device_class USB HID (Human Interface Device)] ซึ่งทำให้ใช้งานบนระบบปฏิบัติการทั่วไปเช่น Linux และ Windows ได้ทันทีโดยไม่ต้องเขียนไดรเวอร์เพิ่มเติม โปรแกรมนี้จะรายงานว่าบอร์ดทำหน้าที่เป็นอุปกรณ์จอยสติ๊กที่มีปุ่มแบบดิจิทัล 1 ปุ่ม และแกนแบบแอนะล็อก 1 แกน โดยอ่านสถานะจากปุ่มและตัววัดแสงบนบอร์ดพ่วงตามลำดับ
 +
* '''โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นแป้นพิมพ์''' [ดาวน์โหลด [http://www.cpe.ku.ac.th/~cpj/204223/keyboard.tgz keyboard.tgz]]
 +
: ทำงานคล้ายคลึงกับโปรแกรมจำลองบอร์ดให้เป็นจอยสติ๊ก แต่รายงานให้โฮสท์เห็นเป็นแป้นพิมพ์ โดยมีการวนส่งคีย์ p r a c t i c u m SPACE ไปเรื่อย ๆ ตัวอย่างนี้สร้าง HID report ที่รองรับการส่งสถานะการกดคีย์ได้เพียงครั้งละหนึ่งคีย์เท่านั้น หากต้องการส่งสถานะการกดคีย์มากกว่าหนึ่งคีย์ให้ศึกษาจากตัวอย่าง [http://codeandlife.com/2012/06/18/usb-hid-keyboard-with-v-usb/ USB HID Keyboard with V-USB]
 +
* '''โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นแป้นพิมพ์ (เวอร์ชัน Protothreads)''' [ดาวน์โหลด [http://www.cpe.ku.ac.th/~cpj/204223/keyboard-pt.tgz keyboard-pt.tgz]]
 +
: ทำงานเหมือนกับโค้ด keyboard.tgz แต่ใช้ไลบรารี Protothreads ช่วยในการวนลูปอนันต์เพื่อส่งคีย์โค้ดทีละค่า
 +
* '''โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นแป้นพิมพ์และเมาส์''' [ดาวน์โหลด [http://www.cpe.ku.ac.th/~cpj/204223/usb-ghost.zip usb-ghost.zip] [http://www.cpe.ku.ac.th/~cpj/204223/usb-ghost-arduino.zip usb-ghost-arduino.zip] (สำหรับ Arduino)]
 +
: ตัวอย่างการจำลองอุปกรณ์ให้เป็นทั้งเมาส์และคีย์บอร์ดในเวลาเดียวกัน ทำแสงบริเวณตัวรับแสงให้มืด (จนกระทั่ง LED สีแดงติด) เพื่อให้กดคีย์และเมาส์ขยับไปมาบนหน้าจอได้เอง อาศัยไลบรารี Protothreads ในการทำงานหลาย ๆ งาน
 
* '''โปรแกรมไฟกระพริบโดยใช้ไทเมอร์''' [ดาวน์โหลด [http://www.cpe.ku.ac.th/~cpj/204223/timer-led.tgz timer-led.tgz]]
 
* '''โปรแกรมไฟกระพริบโดยใช้ไทเมอร์''' [ดาวน์โหลด [http://www.cpe.ku.ac.th/~cpj/204223/timer-led.tgz timer-led.tgz]]
 
: แสดงตัวอย่างการใช้งานวงจรไทเมอร์ภายในตัวไมโครคอนโทรลเลอร์ ซึ่งสามารถตั้งค่าให้ทำงานอิสระจากโปรแกรมหลัก เมื่อไทเมอร์จับเวลาถึงค่าที่ตั้งไว้ก็จะสร้างสัญญาณขัดจังหวะหรืออินเทอร์รัพท์ (interrupt) ที่มีผลให้โค้ดในโปรแกรมหลักกระโดดไปทำงานในรูทีนบริการอินเทอร์รัพท์ (interrupt service routine) ในตัวอย่างนี้รูทีนบริการอินเทอร์รัพท์บรรจุโค้ดให้ตั้งสถานะของ LED กลับไปกลับมา มีผลทำให้ LED กระพริบเป็นจังหวะที่สม่ำเสมอ
 
: แสดงตัวอย่างการใช้งานวงจรไทเมอร์ภายในตัวไมโครคอนโทรลเลอร์ ซึ่งสามารถตั้งค่าให้ทำงานอิสระจากโปรแกรมหลัก เมื่อไทเมอร์จับเวลาถึงค่าที่ตั้งไว้ก็จะสร้างสัญญาณขัดจังหวะหรืออินเทอร์รัพท์ (interrupt) ที่มีผลให้โค้ดในโปรแกรมหลักกระโดดไปทำงานในรูทีนบริการอินเทอร์รัพท์ (interrupt service routine) ในตัวอย่างนี้รูทีนบริการอินเทอร์รัพท์บรรจุโค้ดให้ตั้งสถานะของ LED กลับไปกลับมา มีผลทำให้ LED กระพริบเป็นจังหวะที่สม่ำเสมอ
* '''โปรแกรมสร้างความถี่เสียงโดยใช้ไทเมอร์''' [ดาวน์โหลด timer-sound.tgz]
+
* '''โปรแกรมสร้างความถี่เสียงโดยใช้ไทเมอร์''' [ดาวน์โหลด [http://www.cpe.ku.ac.th/~cpj/204223/timer-sound.tgz timer-sound.tgz]]
: เนื่องจากวงจรไทเมอร์ภายในตัวไมโครคอนโทรลเลอร์ทำงานอย่างเป็นอิสระจากโปรแกรมหลัก จึงนิยมนำมาใช้สร้างสัญญาณความถี่ที่แม่นยำกว่าการเขียนโปรแกรมวนลูปสร้างสัญญาณ ตัวอย่างนี้แสดงการเปิดใช้งานไทเมอร์หมายเลข 0 โดยตั้งค่าให้การจับเวลาครบแต่ละรอบก่อให้เกิดการกลับไปมาของลอจิกที่ขา OC0A (Timer Output Compare Match A Output) ซึ่งเป็นขาเดียวกันกับขา PD6 เมื่อนำ[http://en.wikipedia.org/wiki/Buzzer#Piezoelectric ลำโพงเปียโซ]มาต่อกับขานี้ก็จะทำให้เกิดความถี่เสียงขึ้นมา
+
: เนื่องจากวงจรไทเมอร์ภายในตัวไมโครคอนโทรลเลอร์ทำงานอย่างเป็นอิสระจากโปรแกรมหลัก จึงนิยมนำมาใช้สร้างสัญญาณความถี่ที่แม่นยำกว่าการเขียนโปรแกรมวนลูปสร้างสัญญาณ ตัวอย่างนี้แสดงการเปิดใช้งานไทเมอร์หมายเลข 0 โดยตั้งค่าให้การจับเวลาครบแต่ละรอบก่อให้เกิดการกลับไปมาของลอจิกที่ขา OC0A (Timer Output Compare Match A Output) ซึ่งเป็นขาเดียวกันกับขา PD6 เมื่อนำ[http://en.wikipedia.org/wiki/Buzzer#Piezoelectric ลำโพงเปียโซ]มาต่อกับขานี้ดังรูปด้านล่างก็จะทำให้เกิดความถี่เสียงขึ้นมา
 
[[Image:board-with-speaker.png|center|500px]]
 
[[Image:board-with-speaker.png|center|500px]]

รุ่นแก้ไขปัจจุบันเมื่อ 02:55, 14 มีนาคม 2565

วิกินี้เป็นส่วนหนึ่งของรายวิชา 01204223
  • โปรแกรมสาธิตการทำงานแบบมัลติทาสกิ้ง [ดาวน์โหลด multitask.zip]
แสดงตัวอย่างการเขียนโปรแกรมแบบมัลติทาสกิ้งที่ทำให้ LED กระพริบอิสระ พร้อมตรวจสอบสถานะสวิตช์ไปพร้อม ๆ กัน ภายในไฟล์มีซอร์สโค้ดของเฟิร์มแวร์ที่ให้พฤติกรรมการทำงานเดียวกัน แต่ใช้เทคนิคที่แตกต่างกัน 3 รูปแบบคือ (1) ใช้ if (2) ใช้ goto และ (3) ใช้ไลบรารี protothreads
ดูซิมูเลชันแสดงการทำงาน
บทความเพิ่มเติม: มัลติทาสกิ้งบนไมโครคอนโทรลเลอร์ และ มัลติทาสกิ้งด้วยไลบรารี Protothreads
  • โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นอุปกรณ์จอยสติ๊ก [ดาวน์โหลด joystick.tgz]
อาศัยไลบรารี V-USB เพื่อให้คอมพิวเตอร์มองเห็นบอร์ดไมโครคอนโทรลเลอร์เป็นอุปกรณ์ในกลุ่ม USB HID (Human Interface Device) ซึ่งทำให้ใช้งานบนระบบปฏิบัติการทั่วไปเช่น Linux และ Windows ได้ทันทีโดยไม่ต้องเขียนไดรเวอร์เพิ่มเติม โปรแกรมนี้จะรายงานว่าบอร์ดทำหน้าที่เป็นอุปกรณ์จอยสติ๊กที่มีปุ่มแบบดิจิทัล 1 ปุ่ม และแกนแบบแอนะล็อก 1 แกน โดยอ่านสถานะจากปุ่มและตัววัดแสงบนบอร์ดพ่วงตามลำดับ
  • โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นแป้นพิมพ์ [ดาวน์โหลด keyboard.tgz]
ทำงานคล้ายคลึงกับโปรแกรมจำลองบอร์ดให้เป็นจอยสติ๊ก แต่รายงานให้โฮสท์เห็นเป็นแป้นพิมพ์ โดยมีการวนส่งคีย์ p r a c t i c u m SPACE ไปเรื่อย ๆ ตัวอย่างนี้สร้าง HID report ที่รองรับการส่งสถานะการกดคีย์ได้เพียงครั้งละหนึ่งคีย์เท่านั้น หากต้องการส่งสถานะการกดคีย์มากกว่าหนึ่งคีย์ให้ศึกษาจากตัวอย่าง USB HID Keyboard with V-USB
  • โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นแป้นพิมพ์ (เวอร์ชัน Protothreads) [ดาวน์โหลด keyboard-pt.tgz]
ทำงานเหมือนกับโค้ด keyboard.tgz แต่ใช้ไลบรารี Protothreads ช่วยในการวนลูปอนันต์เพื่อส่งคีย์โค้ดทีละค่า
  • โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นแป้นพิมพ์และเมาส์ [ดาวน์โหลด usb-ghost.zip usb-ghost-arduino.zip (สำหรับ Arduino)]
ตัวอย่างการจำลองอุปกรณ์ให้เป็นทั้งเมาส์และคีย์บอร์ดในเวลาเดียวกัน ทำแสงบริเวณตัวรับแสงให้มืด (จนกระทั่ง LED สีแดงติด) เพื่อให้กดคีย์และเมาส์ขยับไปมาบนหน้าจอได้เอง อาศัยไลบรารี Protothreads ในการทำงานหลาย ๆ งาน
  • โปรแกรมไฟกระพริบโดยใช้ไทเมอร์ [ดาวน์โหลด timer-led.tgz]
แสดงตัวอย่างการใช้งานวงจรไทเมอร์ภายในตัวไมโครคอนโทรลเลอร์ ซึ่งสามารถตั้งค่าให้ทำงานอิสระจากโปรแกรมหลัก เมื่อไทเมอร์จับเวลาถึงค่าที่ตั้งไว้ก็จะสร้างสัญญาณขัดจังหวะหรืออินเทอร์รัพท์ (interrupt) ที่มีผลให้โค้ดในโปรแกรมหลักกระโดดไปทำงานในรูทีนบริการอินเทอร์รัพท์ (interrupt service routine) ในตัวอย่างนี้รูทีนบริการอินเทอร์รัพท์บรรจุโค้ดให้ตั้งสถานะของ LED กลับไปกลับมา มีผลทำให้ LED กระพริบเป็นจังหวะที่สม่ำเสมอ
  • โปรแกรมสร้างความถี่เสียงโดยใช้ไทเมอร์ [ดาวน์โหลด timer-sound.tgz]
เนื่องจากวงจรไทเมอร์ภายในตัวไมโครคอนโทรลเลอร์ทำงานอย่างเป็นอิสระจากโปรแกรมหลัก จึงนิยมนำมาใช้สร้างสัญญาณความถี่ที่แม่นยำกว่าการเขียนโปรแกรมวนลูปสร้างสัญญาณ ตัวอย่างนี้แสดงการเปิดใช้งานไทเมอร์หมายเลข 0 โดยตั้งค่าให้การจับเวลาครบแต่ละรอบก่อให้เกิดการกลับไปมาของลอจิกที่ขา OC0A (Timer Output Compare Match A Output) ซึ่งเป็นขาเดียวกันกับขา PD6 เมื่อนำลำโพงเปียโซมาต่อกับขานี้ดังรูปด้านล่างก็จะทำให้เกิดความถี่เสียงขึ้นมา
Board-with-speaker.png