ผลต่างระหว่างรุ่นของ "แผงวงจรพ่วง (Peripheral Board)"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 29: แถว 29:
  
 
== วงจรวัดแสง ==
 
== วงจรวัดแสง ==
อยู่ระหว่างการแก้ไข
+
อยู่ระหว่างการแก้ไข ดูบทความ[[การวัดสัญญาณแอนะล็อกด้วยไมโครคอนโทรลเลอร์]]เพิ่มเติม
  
 
== โปรแกรมทดสอบแผงวงจรพ่วง ==
 
== โปรแกรมทดสอบแผงวงจรพ่วง ==

รุ่นแก้ไขเมื่อ 02:57, 19 สิงหาคม 2552

เราประกอบแผงวงจรนี้เพื่อใช้เป็นวงจรทดสอบและเรียนรู้การใช้งานไมโครคอนโทรลเลอร์ โดยต่อผ่านสายแพเข้ากับ JP2 (พอร์ท C) ของแผงวงจรหลัก วงจรพ่วงประกอบไปด้วยวงจรย่อยสามวงจร ได้แก่ (1) วงจรแสดงผล LED สามสี (2) วงจรสวิตช์อินพุท และ (3) วงจรวัดแสง

Peri-schem.png

วงจรแสดงผล LED สามสี

เป็นการเชื่อมแต่ละสัญญาณของ PC0..PC2 เข้ากับขาแอโนด (A) ของ LED และต่อด้านแคโทด (K) ผ่านตัวต้านทานลงสู่กราวนด์ ดังนั้นการใช้งานจึงต้องตั้งค่าในรีจีสเตอร์ DDRC ให้ขาทั้งสามทำหน้าที่เป็นเอาท์พุท และส่งลอจิก 1 มายังแต่ละขาผ่านทางรีจีสเตอร์ PORTC เพื่อให้หลอด LED ติด

ตัวอย่างโปรแกรมด้านล่างเป็นการตั้งค่าให้ PC0..PC2 เป็นเอาท์พุท และสั่งให้ขา PC0 และ PC1 มีลอจิกเป็น 1 และ PC2 มีลอจิก 0 โดยที่ไม่กระทบกับค่าในบิตอื่น ๆ ของรีจีสเตอร์ สังเกตว่าเราอาศัยคำสั่งประเภท read-modify-write ซึ่งได้แก่ |= และ &=

DDRC  |= 0b00000111;    // ให้ PC0-PC2 เป็นเอาท์พุท บิตอื่นไม่เปลี่ยน
PORTC |= 0b00000011;    // ให้ PC0,PC1 มีลอจิก 1 บิตอื่นไม่เปลี่ยน
PORTC &= ~(0b00000100); // ให้ PC2 มีลอจิก 0 บิตอื่นไม่เปลี่ยน

หมายเหตุ: คำสั่ง a |= b มีการทำงานเทียบเท่ากับ a = a|b

วงจรสวิตช์อินพุท

วงจรนี้ทำหน้าที่เป็นลอจิกอินพุทโดยต่อสวิตช์แบบกดติด-ปล่อยดับเข้ากับขา PC3 และต่ออีกด้านหนึ่งลงกราวนด์โดยตรง นั่นคือหากสวิตช์โดนกดจะทำให้ขา PC3 มีศักย์เป็นกราวนด์

การใช้งานเพื่อให้อ่านค่าลอจิกเข้ามาอย่างถูกต้องต้องดำเนินการดังนี้

  • ตั้งค่าบิตที่ 3 ของรีจีสเตอร์ DDRC ให้เป็น 0 เพื่อกำหนดให้ PC3 เป็นอินพุท
  • ตั้งค่าบิตที่ 3 ของรีจีสเตอร์ PORTC ให้เป็น 1 เพื่อเปิดใช้งาน pull-up resistor ในวงจร I/O ของไมโครคอนโทรลเลอร์ ซึ่งเสมือนว่าเป็นการต่อขา PC3 ผ่านตัวต้านทานหนึ่งตัวเข้ากับ VCC อันจะทำให้ศักย์ของขา PC3 มีค่าเป็น 5V (ลอจิก 1) หากขาถูกปล่อยลอย
  • อ่านสถานะลอจิกของขา PC3 ผ่านทางบิตที่ 3 ของรีจีสเตอร์ PINC

ตัวอย่างโปรแกรม

DDRC  &= ~(0b00001000);  // ให้ PC3 เป็นอินพุท บิตอื่นไม่เปลี่ยนแปลง
PORTC |= 0b00001000;     // เปิดใช้ pull-up resister ที่ขา PC3
if (PINC & ~(0b00001000))
    // สวิตช์ถูกกด
else
    // สวิตช์ไม่ถูกกด

วงจรวัดแสง

อยู่ระหว่างการแก้ไข ดูบทความการวัดสัญญาณแอนะล็อกด้วยไมโครคอนโทรลเลอร์เพิ่มเติม

โปรแกรมทดสอบแผงวงจรพ่วง

เพื่อตรวจสอบว่าแผงวงจรพ่วงที่ทำขึ้นมาใช้งานได้ถูกต้อง โหลดโปรแกรม testperi.hex (ซอร์สโค้ด) และใช้คำสั่ง avrdude เพื่อเขียนแฟลชบนบอร์ด หากวงจรไม่มีความผิดพลาด โปรแกรมควรมีพฤติกรรมดังนี้

  • LED 3 ดวงบนบอร์ดพ่วงทำหน้าที่เป็นตัววัดแสง โดยจะติดทีละดวงเท่านั้น สีแดงจะติดเมื่อแสงมืด และสีเขียวจะติดเมื่อไฟสว่าง ส่วนสีเหลืองจะติดเมื่อแสงปานกลาง
  • เมื่อกดและปล่อยสวิตช์บนบอร์ดพ่วง (ไม่ใช่สวิตช์รีเซ็ตบนบอร์ดหลัก) LED สีเขียวบนบอร์ดหลักจะติดและดับสลับกันไป