ZMCP3202.TXT - โปรแกรมตัวอย่างสำหรับชิพ MCP3202 12-Bit A/D (พฤษภาคม 2548 โดย เกรียงศักดิ์ บุญเสริมสุวงศ์) ชิพ MCP3202 คือ 12-Bit A/D ที่มีขนาดเล็ก (8 Pin Dip) ใช้งานง่ายและสะดวก ติดต่อกับ MCU ด้วยขาสัญญานเพียง 4 เส้น เป็น SPI Serial Interface สามารถทำเป็น A/D แบบ Single Ended Mode ได้ 2 Channal คือรับสัญญาน Analog เป็น + และ Gnd หรือเป็นแบบ Pseudo Differential Mode ได้ 1 Channel คือรับสัญญาน Analog เป็น + และ - นอกจากนี้ยังมีเบอร์ MCP3208 ให้ เลือกใช้ด้วย ขนาด 16 Pin Dip โดยมีหลักการในทำนองเดียวกัน ปรับโปรแกรมเพียงเล็กน้อย ซึ่งจะ ใช้ได้เป็น 8 Channel ในชิพเดียว (หรือ 4 Channel ในโหมด Differential) โปรแกรมตัวอย่างนี้เขียนไว้สำหรับชิพ MCP3202 โดยต่อกับบอร์ด SLAB-51 เนื้อหาของโปรแกรม ก็จะอ่านค่าจากสัญญาน Analog (Channel 0) โดยใช้โหมด A/D แบบ Single Ended และส่ง ข้อความออกทาง Serial RS232 ซึ่งจะแสดงค่าเป็นข้อมูลที่อ่านได้ รวมทั้งค่า Volt จากการคำนวนด้วย โดยจะแสดงข้อความทุก ๆ 250 mSec นอกจากนี้ยังใช้หลักการอ่านค่าเฉลี่ย โดยจะเฉลี่ยค่าจากข้อมูล ล่าสุด 8 ครั้งเสมอ เพื่อให้ได้ค่าที่นิ่งเรียบพอสมควร ลดอัตราการเปลี่ยนแปลงข้อมูลอย่างรวดเร็ว การต่อชิพ MCP3202 กับ MCU จะใช้ขาสัญญานดังนี้ ขา CS ต่อกับ MCU P1.0 ขา CK ต่อกับ MCU P1.1 ขา DO ต่อกับ MCU P1.2 ขา DI ต่อกับ MCU P1.3 ส่วนขา Analog Input CH0 ก็ให้ต่อกับตัว VR 50K และให้ปลายทั้งสองข้างต่อกับไฟ +5V และ Gnd คือเป็นวงจร R-Divider ธรรมดา และขา Vdd/Vref ก็ต่อกับ +5V และขา Vss ก็ต่อกับ Gnd รายละเอียดการทำงานต่าง ๆ ให้ดูได้จากตัวโปรแกรม โดยเนื้อหาหลักก็จะมีเพียง 2 Function คือ unsigned int mcp3202r0 (void) ซึ่งเป็น Function เพื่อการอ่านค่าจาก MCP3202 โดยตรง โดยจะให้ค่าข้อมูลไว้ที่ตัวแปรแบบ int (ค่าที่เป็นได้คือ 0-4095) ส่วน unsigned int mcp3202a0 (void) เป็น Function ที่ทำการเฉลี่ยค่าจากข้อมูล 8 ครั้งล่าสุด ที่เก็บในตัวแปร ADCBUF[ ] โดยจะให้ค่าทาง ตัวแปร int เช่นกัน ส่วนการแปลงมาเป็นค่า Volt จะกระทำอยู่ใน Main เลย ซึ่งทำได้ง่ายเพียงไม่กี่ บรรทัดเท่านั้น และแล้ว ... โลกของ Analog กับโลกของ Digital ก็อยู่ใกล้กันแค่เอื้อม ...