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

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
วิกินี้เป็นส่วนหนึ่งของรายวิชา 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