ผลต่างระหว่างรุ่นของ "ตัวอย่างโปรแกรมสำหรับไมโครคอนโทรลเลอร์"
ไปยังการนำทาง
ไปยังการค้นหา
Chaiporn (คุย | มีส่วนร่วม) |
Chaiporn (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 13 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 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 แกน โดยอ่านสถานะจากปุ่มและตัววัดแสงบนบอร์ดพ่วงตามลำดับ |
− | * '''โปรแกรมไฟกระพริบโดยใช้ไทเมอร์''' [ดาวน์โหลด timer-led.tgz] | + | * '''โปรแกรมจำลองบอร์ดไมโครคอนโทรลเลอร์ให้เป็นแป้นพิมพ์''' [ดาวน์โหลด [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]] | ||
: แสดงตัวอย่างการใช้งานวงจรไทเมอร์ภายในตัวไมโครคอนโทรลเลอร์ ซึ่งสามารถตั้งค่าให้ทำงานอิสระจากโปรแกรมหลัก เมื่อไทเมอร์จับเวลาถึงค่าที่ตั้งไว้ก็จะสร้างสัญญาณขัดจังหวะหรืออินเทอร์รัพท์ (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]] |
รุ่นแก้ไขปัจจุบันเมื่อ 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 เมื่อนำลำโพงเปียโซมาต่อกับขานี้ดังรูปด้านล่างก็จะทำให้เกิดความถี่เสียงขึ้นมา