890 likes | 1.44k Views
การพัฒนาโปรแกรมบน IPST-MicroBOX. กฤษดา ใจเย็น นคร ภักดีชาติ วรพจน์ กรแก้ววัฒนกุล. 2. บริษัท อินโนเวตีฟ เอ็กเพอริเมนต์ จำกัด www.inex.co.th. แผงวงจรแสดงผลและพอร์ตเอนกประสงค์. ชุดที่ 5. การทดลอง. แผงวงจรแสดงผลและพอร์ตเอนกประสงค์. ตัวต้านทาน ปรับค่าได้ PA7. คอนเน็กเตอร์
E N D
การพัฒนาโปรแกรมบน IPST-MicroBOX กฤษดา ใจเย็น นคร ภักดีชาติ วรพจน์ กรแก้ววัฒนกุล 2 บริษัท อินโนเวตีฟ เอ็กเพอริเมนต์ จำกัด www.inex.co.th
แผงวงจรแสดงผลและพอร์ตเอนกประสงค์แผงวงจรแสดงผลและพอร์ตเอนกประสงค์ ชุดที่ 5 การทดลอง
แผงวงจรแสดงผลและพอร์ตเอนกประสงค์แผงวงจรแสดงผลและพอร์ตเอนกประสงค์ ตัวต้านทาน ปรับค่าได้ PA7 คอนเน็กเตอร์ สำหรับสื่อสารอนุกรม สวิตช์ PB5 PB6 และ PB7 จอแสดงผล LCD
วงจรของแผงวงจรแสดงผล • ใช้พอร์ต PC2 ถึง PC7 ในการติดต่อกับโมดูล LCD • PC0 และ PD1 สำหรับการสื่อสารอนุกรมแบบ I2C บัส • PD0 และ PD1 สำหรับการสื่อสารอนุกรม • PB5,PB6 และ PB7 สำหรับเชื่อมต่อกับสวิตช์ • PA7 สำหรับอ่านค่าแรงดันอะนาลอกจากตัวต้านทานปรับค่าได้ • PA6 เป็นจุดต่อเอนกประสงค์
ชุดคำสั่งสำหรับแสดงผลข้อความที่โมดูล LCD แบบ 16*2 ฟังก์ชั่น lcd หรือ LCD สำหรับการแสดงผลข้อความที่โมดูล LCD แบบ 16*2 รูปแบบฟังก์ชั่นvoid lcd(char *p,...) พารามิเตอร์ p ทำหน้าที่รับการกำหนดกลุ่มข้อความที่ต้องการแสดงผลที่โมดูล LCD โดยสามารถกำหนดรูปแบบการแทรกสัญลักษณ์พิเศษเพื่อร่วมแสดงผลค่าข้อมูลตัวเลขรูปแบบอื่นๆ อันได้แก่
ชุดคำสั่งสำหรับแสดงผลข้อความที่โมดูล LCD แบบ 16*2 ตัวอย่าง 1 lcd(“Hello LCD”); // แสดงข้อความ “Hello LCD”ที่โมดูล LCD ผลลัพธ์ที่โมดูล LCD ตัวอย่างที่ 2 lcd("abcdefghijklmnopqrstuvwxyz"); // แสดงผลข้อความเมื่อสายอักขระเกิน 16 ตัวอักษร // อักขระตัวถัดไปจะขึ้นบรรทัดที่ 2 ทันที ผลลัพธ์ที่โมดูล LCD
ชุดคำสั่งสำหรับแสดงผลข้อความที่โมดูล LCD แบบ 16*2 ตัวอย่าง 3 lcd(“Value: %d unit ”,518); // แสดงข้อความร่วมกับข้อมูลตัวเลข(518)ที่โมดูล LCD ผลลัพธ์ที่โมดูล LCD ตัวอย่าง 4 lcd(“Value: %d ”,analog(4)); // อ่านค่าอะนาลอกที่ช่อง 4 (ตรงกับพอร์ต PA4) มาแสดงผลที่โมดูล LCD ผลลัพธ์ที่โมดูล LCD
ชุดคำสั่งสำหรับแสดงผลข้อความที่โมดูล LCD แบบ 16*2 ตัวอย่าง 5 char c_test=’j’; lcd(“abcd%cxyz”,c_test); // แสดงข้อความอักระ “j” ร่วมกับข้อความอื่นๆ ผลลัพธ์ที่โมดูล LCD ตัวอย่าง 6 lcd(“Value: %f ”,125.450); // แสดงข้อความร่วมกับข้อมูลตัวเลขจำนวนจริงที่โมดูล LCD(แสดงทศนิยม 3 หลัก) ผลลัพธ์ที่โมดูล LCD
การทดลองที่ 12 การแสดงผลออกจอ LCD อย่างง่าย เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ากับแผงวงจรหลัก MicroBOX #include <ipst.h> void main() { while(1) { lcd("Hello LCD"); } }
การทดลองที่ 13 การแสดงผลออกจอ LCD 2 บรรทัด เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ากับแผงวงจรหลัก MicroBOX #include <ipst.h> void main() { while(1) { lcd("Line1#nLine2"); } } new line
การทดลองที่ 14 การแสดงผลตัวเลข แบบจำนวนเต็ม เชื่อมต่อโมดูลแผงวงจรแสดงผลโมดูล LCD เข้ากับแผงวงจรหลัก MicroBOX #include <ipst.h> void main() { int x = 1568; while(1) { lcd("Integer: %d ",x); } }
การทดลองที่ 15การแสดงผลตัวเลขแบบทศนิยม #include <ipst.h> void main() { float x = 238.592; while(1) { lcd("Float: %f ",x); } }
การทดลองที่ 16ใช้งานสวิตช์บนแผงวงจรแสดงผล #include <ipst.h> void main() { lcd("Test switch"); while(1) { if(sw1()==0) { while(sw1()==0); lcd("SW1 Active!"); sleep(1000); lcd_clear(); } else if(sw2()==0) { while(sw2()==0); lcd("SW2 Active!"); sleep(1000); lcd_clear(); } else if(sw3()==0) { while(sw3()==0); lcd("SW3 Active!"); sleep(1000); lcd_clear(); } } } สวิตช์ PB5, PB6 และ PB7
บททดสอบ 4 เขียนโปรแกรมแสดงค่าการนับขึ้นทีละ 1 ค่าทุกๆ 1 วินาทีโดยประมาณ และแสดงค่าการนับที่โมดูล LCD ซึ่งรูปแบบข้อความที่หน้าจอ LCD รูปแบบ Time: xxx sec โดยที่ xxx คือค่าเวลาที่นับได้ ณ ปัจจุบัน
บททดสอบ 5 เครื่องตั้งเวลา 30 วินาทีแบบนับลง เขียนโปรแกรมแสดงค่าการนับลงครั้งละ 1 ค่าทุกๆ 1 วินาทีโดยประมาณ ค่าเริ่มต้นถูกตั้งค่าไว้ที่ 30 วินาทีและแสดงค่าการนับที่โมดูล LCD รูปแบบ CountDown! Time: 30 sec เมื่อนับค่าถึง 0 ให้แสดงข้อความ Complete Time: 0 sec
บททดสอบ 6 เครื่องตั้งเวลาแบบนับลงสามารถกำหนดค่าได้ เขียนโปรแกรมแสดงค่าการนับลงครั้งละ 1 ค่าทุกๆ 1 วินาทีโดยประมาณ โดยค่าเริ่มต้นสามารถถูกตั้งค่าได้จากผู้ใช้งานจากการกดสวิตช์ SW1,SW2 และ SW3 ช่วงเริ่มต้นของโปรแกรมจะเป็นการรับค่าการกำหนดเวลาการนับในหน่วยวินาทีโดยมีเงื่อนไขคือ เมื่อกดสวิตช์ SW1 ค่าที่ถูกตั้งจะเพิ่มขึ้นครั้งละ 1 ค่า เมื่อกดสวิตช์ SW2 ค่าที่ถูกตั้งจะลดลงครั้งละ 1 ค่า ซึ่งในช่วงระหว่างการตั้งค่านี้ที่หน้าจอ LCD จะแสดงค่าการตั้งค่าเวลานับลงเป็น set:xxx sec Time:0 sec เมื่อกดสวิตช์ SW3 จะเข้าสู่ขั้นตอนการนับลงทันที ซึ่งในช่วงระหว่างการนับลงที่หน้าจอ LCD จะแสดงรูปแบบข้อความที่หน้าจอ LCD เป็น Countdown Time:59 sec Time:xxx sec เมื่อนับลงมาจนถึงค่า 0 แล้วที่หน้าจอ LCD จะต้องปรากฏข้อความว่า Complete Time: 0 sec
แผงวงจรตรวจจับแบบอะนาลอกแผงวงจรตรวจจับแบบอะนาลอก ชุดที่ 6 การทดลองอุปกรณ์กลุ่ม
5 ประสาทรับรู้ของมนุษย์ การสัมผัส การมองเห็น การได้ยินเสียง การรับรู้กลิ่น การรับรู้รส
5V 0V 10W วงจรแปลง อะนาลอก เป็นดิจิตอล bit 25 C ฐานสอง 10.5 cm byte ฐานสิบหก ลอจิก อะนาลอก VS ดิจิตอล 0-5V 0-1023 (10 bit)
กระบวนการแปลค่าดิจิตอล (Quantization)
บัญญัติไตรยางค์ Data x V Vdigital = Full Data 512 x 5 Vdigital = 1024 Vdigital = 2.5 V 8 บิต หมายถึงข้อมูลไบนารี่ 8 บิต เกิดค่าที่เปลี่ยนแปลงได้จาก 0 ถึง 255 28 ความละเอียดเพิ่มขึ้น 2 บิต ความละเอียดเพิ่มขึ้น 4 เท่า 10 บิต หมายถึงข้อมูลไบนารี่ 10 บิต เกิดค่าที่เปลี่ยนแปลงได้จาก 0 ถึง 1023 210 ความละเอียดในการแปลค่า (Resolution)
ชุดคำสั่งสำหรับอ่านค่าอะนาลอกชุดคำสั่งสำหรับอ่านค่าอะนาลอก ฟังก์ชั่นanalogสำหรับการอ่านค่าอะนาลอกความละเอียดขนาด 10 บิต ที่ขาสัญญาณใดๆของพอร์ต A รูปแบบฟังก์ชั่น unsigned int analog(unsigned char channel) channelทำหน้าที่กำหนดช่องอะนาลอกที่ต้องการใช้งานโดยมีค่าตั้งแต่ 0 ถึง 7 ซึ่งจะตรงกับพอร์ต PA0 ถึง PA7 ตามลำดับ ตัวอย่างที่ 7 int adc_val=0; adc_val = analog(2); อ่านค่าข้อมูลจากเซนเซอร์อะนาลอกที่ต่ออยู่กับขา RA2 เก็บไว้ในตัวแปรadc_val
แผงวงจรตรวจจับแสง ใช้ตรวจจับแสงสว่าง เลือกเอาต์พุตได้ 2 แบบคือ แรงดันเอาต์พุตเพิ่ม เมื่อแสงตกกระทบมากขึ้น แรงดันเอาต์พุตลดลง เมื่อแสงตกกระทบมากขึ้น
แผงวงจรตรวจจับแสง ได้รับแสง มาก ค่าที่ตรวจวัดได้ มาก ได้รับแสง น้อย ค่าที่ตรวจวัดได้ น้อย
แผงวงจรตรวจจับแสง ได้รับแสง น้อย ค่าที่ตรวจวัดได้ มาก ได้รับแสง มาก ค่าที่ตรวจวัดได้ น้อย
แผงวงจรตรวจจับแสง VLDR = +5V(RLDR/(RLDR+R1)) VR1 = +5V(R1/(RLDR+R1))
การทดลองที่ 17อ่านค่าจากแผงวงจรตรวจจับแสง อ่านค่าอะนาลอกจากการวัดปริมาณแสงจากแผงวงจรตรวจจับแสง จากพอร์ต PA5 และนำค่าที่อ่านได้ไปแสดงผลที่โมดูล LCD 1. ต่อแผงวงจร ZX-LDR เข้ากับบอร์ด IPST ที่ตำแหน่ง PA5
การทดลองที่ 17อ่านค่าจากแผงวงจรตรวจจับแสง 2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตามตัวอย่างต่อไปนี้ #include<ipst.h> void main() { while(1) { lcd("Light: %d ",analog(5)); sleep(100); } } 3.ดาวน์โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์ 4. ดูผลการเปลี่ยนแปลงค่าของ LDR เมื่อสภาวะแสงแตกต่างกัน
บททดสอบ 7 สวิตช์เปิดไฟกลางคืน เขียนโปรแกรมควบคุมการเปิด/ปิดไฟ (แทนด้วย LED ที่ตำแหน่ง PD0 ) จากปริมาณแสงที่ได้จากแผงวงจรตรวจจับแสงตำแหน่ง PA5 ถ้าแสงน้อย LED จะต้องติดสว่างเพื่อแทนการเปิดไฟ ถ้าหากแสงสว่างปกติ LED จะต้องดับซึ่งแทนการปิดไฟ นำค่าอะนาลอกของปริมาณแสงที่อ่านได้ไปแสดงผลที่โมดูล LCD Light : 900 Light : 500 Light : 100
แผงวงจรตรวจจับการสะท้อนแสงแผงวงจรตรวจจับการสะท้อนแสง 1023 512 0
แผงวงจรตรวจจับการสะท้อนแสงแผงวงจรตรวจจับการสะท้อนแสง ใช้ LED แบบความสว่างสูงเป็นตัวกำเนิดแสง แล้วใช้ LDR เป็นตัวรับแสงสะท้อนกลับมา ค่าที่อ่านได้จาก LDR เป็นความเข้มแสง ที่สะท้อนจากวัตถุต่าง ๆ
ใช้แผงวงจรตรวจจับการสะท้อนเป็น Encoder อย่างง่าย
จำนวนช่องเท่ากับ 9 ช่อง เส้นผ่านศูนย์กลาง 10CM เส้นรอบวง = pD เส้นรอบวง = 31.4CM D = 10 CM ช่องการนับ 1 ช่อง = 31.4 / 9 = 3.5 CM / ช่อง
การทดลองที่ 18 อ่านค่าจากแผงวงจรตรวจจับแสงสะท้อน อ่านค่าอะนาลอกจากแผงวงจรตรวจจับแสงสะท้อน จากพอร์ต PA5 และนำค่าที่อ่านได้ไปแสดงผลที่โมดูล LCD 1. ต่อแผงวงจร ZX-Reflect เข้ากับบอร์ด IPST ที่ตำแหน่ง PA1
การทดลองที่ 18 อ่านค่าจากแผงวงจรตรวจจับแสงสะท้อน 2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตามตัวอย่างต่อไปนี้ #include<ipst.h> void main() { while(1) { lcd("Light: %d ",analog(1)); sleep(100); } } 3.ดาวน์โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์ 4. นำแผงวงจร ZX-Reflect ไปวางในตำแหน่งต่าง ๆ สังเกตผลที่จอ LCD
แผงวงจรตรวจวัดอุณหภูมิแผงวงจรตรวจวัดอุณหภูมิ อุณหภูมิสูงขึ้นแรงดันลดลง อุณหภูมิสูงขึ้นแรงดันมากขึ้น
การทดลองที่ 19 อ่านค่าอุณหภูมิพร้อมแจ้งเตือน เมื่ออุณหภูมิสูงกว่า 30 องศาเซลเซียส จะแจ้งเตือนด้วยเสียงจากลำโพงเปียโซ และแสดงค่าอะนาลอกจากแผงวงจรวัดอุณหภูมิที่หน้าจอ LCD กำหนดที่อุณหภูมิ 30 องศาเซลเซียส เทอร์มิสเตอร์ของแผงวงจรวัดอุณหภูมิจะมีค่าความต้านทานไฟฟ้าประมาณ 8 กิโลโอห์ม โดยที่Dคือค่าข้อมูลดิจิตอลที่ได้ Rtคือค่าความต้านทานที่อุณหภูมิของเงื่อนไข (k Ohm) ดังนั้นเมื่อต้องการตรวจวัดที่อุณหภูมิ 30 องศาค่าที่อ่านได้จะมีค่าเท่ากับ 455 โดยประมาณ
การทดลองที่ 19 อ่านค่าอุณหภูมิพร้อมแจ้งเตือน • ต่อแผงวงจร ZX-Thermister เข้ากับบอร์ด IPST ที่ตำแหน่ง PA1 • ต่อแผงวงจรลำโพงเปียโซเข้าที่ตำแหน่ง PD6
การทดลองที่ 19อ่านค่าอุณหภูมิพร้อมแจ้งเตือน 2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตามตัวอย่างต่อไปนี้ #include<ipst.h> void main() { unsigned int value; while(1) { value = analog(1); lcd("Temp: %d ",value); if(value<455) { beep_d(6); } sleep(100); } } 3.ดาวน์โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์ 4. ทดสอบการทำงาน
แผงวงจรตัวต้านทานปรับค่าได้แผงวงจรตัวต้านทานปรับค่าได้ ตัวต้านทานปรับค่าได้แบบตัวตั้ง ตัวต้านทานปรับค่าได้แบบตัวนอน สัญลักษณ์ ตัวต้านทานปรับค่าได้แบบเลื่อน
แผงวงจรตรวจจับเสียง เอาต์พุตที่ได้จากแผงวงจรตรวจจับเสียง จะเป็นระดับแรงดัน 0 ถึง 5 โวลต์ เปลี่ยนแปลงตามระดับความดังของเสียง เสียงดังมากก็ให้ระดับแรงดันมาก เสียงค่อยก็ให้ระดับแรงดันน้อย
แผงวงจร LED อินฟราเรด และ Photo Transistor LED Infrared Photo Transistor
แผงวงจรโมดูลรับแสงอินฟราเรดแผงวงจรโมดูลรับแสงอินฟราเรด
แผงวงจรโมดูลรับแสงอินฟราเรดแผงวงจรโมดูลรับแสงอินฟราเรด
แผงวงจรโมดูลรับแสงอินฟราเรดแผงวงจรโมดูลรับแสงอินฟราเรด
แผงวงจรตรวจจับและวัดสนามแม่เหล็ก : Magnetic field • ใช้วัดความเข้มของสนามแม่เหล็ก • ถ้าทิศสนามแม่เหล็กพุ่งออก ให้ผลลัพธ์เป็นแรงดันบวก • ถ้าสนามแม่เหล็กพุ่งเข้า จะให้ผลลัพธ์เป็นแรงดันลบ • เมื่อไม่มีสนามแม่เหล็กจะได้ค่ากลาง 2.5V • ความไวในการวัดคือ 1.3 mV ต่อความเข้มสนามแม่เหล็ก 1 เกาส์ (Gauss) ค่าแรงดันที่ได้ = 2.5 + (0.0013 x ความเข้มสนามแม่เหล็กในหน่วยเกาส์ : Gauss)
แผงวงจรตรวจจับและวัดสนามแม่เหล็ก : Magnetic field สำหรับแผงวงจรวัดสนามแม่เหล็กสามารถวัดความเข้มสนามแม่เหล็กอ่อนๆได้ในหน่วยเก๊าส์(G) โดยคำนวณได้จากสมการ โดยที่BGคือความเข้มสนามแม่เหล็กในหน่วยเก๊าส์(G) Ainit คือค่าอะนาลอกที่อ่านได้ในสภาวะปลอดสนามแม่เหล็ก Aout คือค่าอะนาลอกที่อ่านได้ในสภาวะใดๆจากแผงวงจรวัดสนามแม่เหล็ก
การทดลองที่ 20อ่านค่าอะนาลอกจากแผงวงจรวัดสนามแม่เหล็ก 1. เชื่อมต่อแผงวงจรวัดสนามแม่เหล็กเข้ากับ PA2
การทดลองที่ 20อ่านค่าอะนาลอกจากแผงวงจรวัดสนามแม่เหล็ก 2.เปิดโปรแกรม AVR Studio เขียนโปรแกรมตามตัวอย่างต่อไปนี้ 3. ดาวน์โหลดโปรแกรมไปยังไมโครคอนโทรลเลอร์ 4. สังเกตค่าอะนาลอกที่อ่านได้จากแผงวงจรวัดสนามแม่เหล็กในขณะปลอดสนามแม่เหล็กเก็บค่านี้เพื่อใช้ในการคำนวณหาความเข้มสนามแม่เล็กในหน่วยเกาส์(G) (หาค่า Ainit ) #include<ipst.h> void main() { unsigned int value; while(1) { lcd("Magnatic: %d ",analog(2)); sleep(100); } }