Tech Proto Tech - Series Series ศักดิ์ชยั ผางส�ำเนียง
เรี ย น-เล่ น -ใช้
ไมโครคอนโทรลเลอร์ MCS-51 ด้วยโปรแกรม ภาษาเบสิก ตอนจบ : เล่นกับเสียง
ส่ ง ท้ า ยการทดลองเบื้ อ งต้ น ของบทความชุดนีก้ บั การสร้าง สัญญาณเสียงเพื่อน�ำไปสู่การ ทดลองสร้ า งออร์ แ กนอย่ า ง ง่ า ยๆ ที่ ค วบคุ ม ด้ ว ยไมโคร คอนโทรลเลอร์ MCS-51
จากผู้เขียน บทความเชิงปฏิบตั ิการในชุด BASIC-51 Course เดินทางมาถึง ตอนจบส�ำหรับเรื่ องราวของการทดลองเขียนโปรแกรมเพื่อใช้ งานไมโคร คอนโทรลเลอร์ MCS-51 เบื ้องต้ นด้ วยโปรแกรมภาษเบสิก นักทดลอง ที่ติดตามมาอย่างต่อเนื่อง น่าจะมองเห็นแล้ วว่า โปรแกรมภาษาเบสิก ที่พฒ ั นาขึ ้นจาก Bascom-51 ไม่ธรรมดา ด้ วยโปรแกรมที่ไม่ซบั ซ้ อนแต่ สามารถน�ำมาใช้งานกับไมโครคอนโทรลเลอร์ P89V51RD2 เพือ่ น�ำไปต่อ ยอดสร้ างโครงงานได้ โดยใช้เวลาในการพัฒนาไม่นาน ในตอนจบของส่วนการทดลองเบื ้องต้ นนี ้ เราจะปิ ดท้ ายกันด้ วยการ เขียนโปรแกรมเพือ่ ท�ำให้ ไมโครคอนโทรลเลอร์ MCS-51 สร้ างหรือก�ำเนิด สัญญาณเสียงได้
ค�ำสั่งก�ำเนิดเสียงของ Bascom-8051 การก� ำ เนิ ด เสี ย งของไมโครคอนโทรลเลอร์ ท� ำ ได้ โ ดยการเขี ย น โปรแกรมกลับสภาวะลอจิกที่ขาพอร์ ตไปมาระหว่างลอจิกสูงและต�่ำ ส่วน ความถี่ของสัญญาณเสียงที่เกิดขึ ้นจะสูงหรื อต�่ำขึ ้นอยู่กับช่วงเวลาที่ถูก หน่วงระหว่างก่อนการกลับลอจิก ใน Bascom-8051 มีค�ำสั่งพิเศษเฉพาะส�ำหรั บใช้ ในการก� ำเนิด สัญญาณเสียง นัน่ คือค�ำสัง่ Sound มีรูปแบบค�ำสัง่ ดังนี ้
Sound Pin, duration, frequency
พารามิเตอร์
- Pin
หากต้ องการความถี่ 1kHz ซึง่ มีคาบเวลาเท่ากับ 1/1kHz = 1/1000 = 1 มิลลิวินาที = 1000 ไมโครวินาที ค่าของพารามิเตอร์ Frequency จึงเท่ากับ 1000/4.64 = 215.51 เมื่อ น�ำมาใช้ ในโปรแกรมของ Bascom-8051 ต้ องตัดทศนิยมทิ ้งไป จึงได้ คา่ โดย ประมาณเป็ น 215 ชนิดของตัวแปร Frequency ก�ำหนดได้ หลายแบบ เป็ นไบต์ หรื อ เวิร์ด ก็ได้ แต่ต้องเป็ นเลขจ�ำนวนเต็ม อย่างไรก็ตาม การก�ำหนดค่าของ พารามิเตอร์ ตวั นี ้ต้ องค�ำนึงถึงความสามารถในารได้ ยินเสียงของมนุษย์ด้วย เนื่ องจากหูของมนุษย์ สามารถตอบสนองหรื อได้ ยินเสียงที่มีย่านความถี่ 20Hz ถึง 20kHz เท่านัน้
ตัวอย่าง
Sound P0.0,100,100
เป็ นการก�ำหนดให้ สร้ างสัญญาณที่มีคาบเวลา 464 ไมโครวินาที ซึง่ เท่ากับ 2.15kHz เป็ นจ�ำนวน 100 รูปสัญญาณส่งออกมาทางขาพอร์ ต P0.0 ของไมโครคอนโทรลเลอร์ MCS-51
เป็ นขาพอร์ ตที่เลือกใช้ งาน
- Duration คือ จ� ำนวนรู ปคลื่นที่ ถูกสร้ างขึน้ จึงน� ำมาใช้ ก�ำหนดระยะเวลาในการก�ำเนิดสัญญาณเสียง ก�ำหนดค่าได้ ตงแต่ ั ้ 1 ถึง 32,768 (ดูรูปที่ 6-1 ประกอบ) 70
- Frequency คือ ค่าส�ำหรับก�ำหนดความถี่ เป็ นค่าในหน่วย 4.64 ไมโครวินาที (โดยอ้ างอิงกับระดับโทนเสียงในออกเตฟที่ 5) ดังนันหาก ้ ต้ องการค�ำนวณกลับมาเป็ นค่าความถี่ ต้ องด�ำเนินการดังนี ้
The Prototype Electronics
รูปที่ 6-1 แสดงความเกี่ยวข้องกันระหว่างค่า Duration กับ Frequency
การท�ำงานของล�ำโพงเปียโซ เป็ นอุปกรณ์ที่ใช้ ในการเปลี่ยนสัญญาณไฟฟ้าเป็ นสัญญาณเสียงแบบ หนึง่ ประกอบด้ วยแผ่นสัน่ ไหวหรื อไดอะแฟรมที่เป็ นตัวท�ำให้ เกิดเสียง ขด ลวดที่พนั บนแกนเหล็ก ในรูปที่ 6-2 แสดงรูปร่างของล�ำโพงเปี ยโซและหลัก การท�ำงานของล�ำโพง เมื่อป้อนสัญญาณไฟฟ้าให้ แก่ขดลวดถูกขัว้ จะเกิดแรงดึงแม่เหล็กดูด แผ่นเหล็กเหนี่ยวน�ำที่ตดิ อยูก่ บั แผ่นสัน่ ไหวเข้ ามา เมื่อสัญญาณไฟฟ้ากลับ ขัว้ ความเป็ นแม่เหล็กก็จะหมดไป แผ่นสัน่ ไหวจึงดีดตัวกลับ หากสัญญาณ ไฟฟ้ามีการป้อนเข้ าอย่างต่อเนื่อง แผ่นสัน่ ไหวก็จะดีดตัวเข้ าออก เกิดการ กระพือขึ ้น ท�ำให้ เกิดเสียงดังออกมา ตามความถี่ของสัญญาณไฟฟ้าที่ป้อน ให้ ส�ำหรับในงานของไมโครคอนโทรลเลอร์ จะนิยมใช้ งานล�ำโพง 2 แบบ ั ญาณย่าน คือ ล�ำโพงปกติ ความต้ านทาน 8Ω ที่สามารถตอบสนองให้ สญ ความถี่เสียงครบ และล�ำโพงเปี ยโซ ความต้ านทาน 16 ถึง 32Ω ที่สามารถ ตอบสนองสัญญาณย่านความถี่เสียงในช่วง 1kHz ถึง 3kHz ส�ำหรับการ ทดลองขับเสียงในบทความนี ้จะใช้ ล�ำโพงเปี ยโซ
รูปที่ 6-3 วงจรขับล�ำโพงเปียโซของไมโครคอนโทรลเลอร์ MCS-51
ความถี่สัญญาณเสียงของโน้ตดนตรี โน้ ตดนตรี หลักๆ มี 8 ตัวคือ โด, เร, มี, ฟา, ซอล, ลา, ที, และโดสูง ความถี่ของโน้ ตดนตรี แต่ละตัวแสดงดังตารางที่ 6-1
ตารางที่ 6-1 แสดงความถี่ของโน้ตดนตรีหลักทั้ง 8 ตัว
รูปที่ 6-2 แสดงการท�ำงานของล�ำโพงเปียโซ
วงจรขับเสียง โดยปกติไมโครคอนโทรลเลอร์ MCS-51 จะมีความสามารถในการ ขับกระแสไฟฟ้าแบบซอร์ สได้ ไม่ดีคือ สามารถจ่ายกระแสไฟฟ้าได้ เพียง 1 ถึง 4mA เท่านัน้ ซึง่ ย่อมไม่เพียงพอต่อการขับโหลดแบบล�ำโพง ดังนันเมื ้ ่อ ต้ องเชื่อมต่อกับล�ำโพงเพื่อขับสัญญาณเสียงจึงจ�ำเป็ นต้ องมีวงจรขับเสียง ภายนอกเข้ ามาช่วย ดังแสดงวงจรในรูปที่ 6-3 อุปกรณ์หลักนัน่ คือ ทรานซิสเตอร์ เบอร์ BC547 อันเป็ นทรานซิสเตอร์ ชนิด NPN ดังนันทรานซิ ้ สเตอร์ จะแอกตีฟเมื่อได้ รับสัญญาณลอจิก "1" ส่ง มายังขาเบส เมื่อทรานซิสเตอร์ ท�ำงาน ก็จะท�ำให้ เกิดกระแสไฟฟ้าไหลผ่าน ล�ำโพง หากทรานซิสเตอร์ ได้ รับลอจิก "0" ที่ขาเบส ตัวทรานซิสเตอร์ จะไม่ ท� ำงานหรื อ หยุดท� ำงาน นั่น คื อทรานซิสเตอร์ จะท� ำ งานหรื อหยุดท� ำ งาน ตามจังหวะของสัญญาณที่ ได้ รับเข้ ามา ซึ่งก็ มาจากขาพอร์ ตของไมโคร คอนโทรลเลอร์ MCS-51 นัน่ เอง
หลัก ในการสร้ างเสี ย งดนตรี คื อ ท� ำ ให้ ไ มโครคอนโทรลเลอร์ ส ร้ าง ลอจิก "1' และ "0" ออกมาทางขาพอร์ ตเอาต์พตุ โดยให้ มีความถี่ตรงกับ โน้ ตแต่ละตัวตามที่แสดงในตารางที่ 1 เช่น หากต้ องการสร้ างโน้ ตเสียงโด สามารถท�ำได้ ดงั นี ้ (1) หาคาบเวลา (Period : T) ของความถี่ของโน้ ตเสียงโด จากความ สัมพันธ์ T=1/f =1/1046.52 ได้ คา่ T= 955.55 มโครวินาที (2) น�ำค่า 4.64 ไปหาร 955.55 เนื่องจากเราเลือกสร้ างสัญญาณ เสียงที่ระดับออกเตฟ 5 สาเหตุที่เลือกระดับออกเตฟนี ค้ ือ ล�ำโพงเปี ยโซ ที่ใช้ ในการทดลองเป็ นล�ำโพงที่ตอบสนองความถี่ได้ ดีในช่วง 1 ถึง 3kHz หากพิจารณาจากข้ อมูลความถี่ ของตัวโน้ ตดนตรี ในตารางที่ 6-1 พบว่า ในออกเตฟ 5 เป็ นช่วงที่มีค่าความถี่ ซึ่งล�ำโพงเปี ยโซสามารถตอบสนอง ได้ ค รบ ดัง นัน้ ค่า ที่ น� ำ ไปใช้ ใ นการสร้ างสัญ ญาณความถี่ ข องโน้ ต ตัว โด คือ 955.55/4.64 = 205.9 หรื อเท่ากับ 206 ส่วนความถี่อื่นๆ ให้ ใช้ วิธีการ เดียวกัน
The Prototype Electronics
71
BASIC-51 : เล่นกับเสียง
การทดลองที่ 10 การขั บ เสี ย งออกล� ำ โพงของไมโคร คอนโทรลเลอร์ MCS-51 อย่างง่าย (L10.1) ต่อวงจรตามรูปที่ L10-1 โดยต่อวงจรขับล�ำโพงลงบนแผง ต่อวงจร แล้ วต่อสายจากจุดต่อขาพอร์ ต P3.7 บนบอร์ ด TPE-51 เข้ ามายัง อินพุตของวงจรขับล�ำโพง
รูปที่ L10-1 วงจรทดลองขับเสียงออกล�ำโพงเปียโซของไมโครคอนโทรลเลอร์ MCS-51
(L10.2) เปิ ดโปรแกรม Bascom-8051 ขึ ้นมา เขียนโปรแกรมที่ L10-1 บันทึกชื่ อเป็ น SoundOut.bas จากนัน้ ท� ำการคอมไพล์ และดาวน์ โหลด โปรแกรมลงบอร์ ด TPE-51 (L10.3) เมื่อดาวน์โหลดโปรแกรมลงบนบอร์ ด TPE-51 ท�ำการรัน โปรแกรม วงจรจะก�ำเนิดสัญญาณเสียงที่มีความถี่ประมาณ 842 Hz ต่อ เนื่องกัน 400 รูปสัญญาณหรื อ 400 มิลลิวินาที เป็ นจังหวะ โดยมีชว่ งหยุด ประมาณ 1 วินาที
การทดลองที่ 11 MCS-51 เล่นโน้ตดนตรี หลังจากที่ขบั เสียงได้ แล้ ว ก็ต้องขยับมาขับเป็ นเสียงโน้ ตดนตรี ดังนัน้ สิง่ ต้ องท�ำกันต่อคือ สร้ างสัญญาณที่มีความถี่ตรงกับตัวโน้ ตดนตรี ตัวโน้ ต ดนตรี หลักๆ มีทงสิ ั ้ ้น 8 ตัวคือ โด (Do - C), เร (Re - D), มี (Mi - E), ฟา (Fa F), ซอล (Sol - G), ลา (La - A), ที (Ti - B) และโดสูง (C1) แต่ละตัวมีความถี่ แตกต่างกัน ซึง่ ขึ ้นกับโทนเสียงหรื อออกเตฟที่ต้องการ ในการทดลองนี ้เลือก ใช้ ออกเตฟ 5 ความถี่ของแต่ละตัวโน้ ตจึงเท่ากับ
โด (C) ความถี่ 1046.52Hz ใช้ คา่ 206
เร (D) ความถี่ 1108.76Hz ใช้ คา่ 184
มี (E) ความถี่ ใช้ คา่ 1318.52Hz ใช้ คา่ 164
ฟา (F) ความถี่ 1396.92 Hz ใช้ คา่ 155
ซอล (G) ความถี่ 1568 Hz ใช้ คา่ 137
ลา (A) ความถี่ 1760 Hz ใช้ คา่ 122
ที (B) ความถี่ 1975.56 Hz ใช้ คา่ 109
โดสูง (C1) ความถี่ 2093.04 Hz ใช้ คา่ 103
(L11.1) ยังคงใช้ วงจรจากการทดลองที่ 10 ในการทดลอง
(L11.2) เปิ ดโปรแกรม Bascom-8051 ขึ ้นมา เขียนโปรแกรมที่ L111 บันทึกชื่อเป็ น NoteOut.bas จากนันท� ้ ำการคอมไพล์และดาวน์โหลด โปรแกรมลงบอร์ ด TPE-51 ด้ วยโปรแกรม Flash Magic (L11.3) เมื่อดาวน์โหลดโปรแกรมลงบนบอร์ ด TPE-51 ท�ำการรัน โปรแกรม วงจรจะก�ำเนิดสัญญาณเสียงโน้ ตดนตรี ตงแต่ ั ้ เสียงโด-เร-มี ไป จนถึง โดสูง แล้ ววนกลับไปที่ โด-เร-มี อย่างไม่ร้ ูจบ โน้ ตแต่ละเสียงจะถูกขับ ให้ ดงั ชัว่ ขณะ มีระยะห่างระหว่างตัวโน้ ตประมาณ 1 วินาที
โปรแกรมที่ L10-1 ไฟล์ SoundOut.bas โปรแกรมขับเสียงของไมโครคอนโทรลเลอร์ MCS-51 (ค�ำอธิบายโปรแกรมภาษาไทยไม่ต้องพิมพ์) $regfile = “89C51RD.DAT” $default Xram $large
$ramstart = 0 $ramsize = 1024
$crystal = 11059200
Dim Frequency As Integer Dim Duration As Integer Frequency = 256 Duration = 400 Tone Alias P3.7 Do
Sound Tone , Duration , Frequency Wait 1
Loop
72
The Prototype Electronics
ส�ำหรับไมโครคอนโทรลเลอร์ 89C51RD2 (TPE-51) ‘ ก�ำหนดให้ใช้หน่วยความจ�ำ 1024 ไบต์ ‘ เขียนโปรแกรมที่มีขนาดมากกว่า 2048ไบต์ ‘ เริ่มต้นการท�ำงานที่ต�ำแหน่งแรก ‘ ก�ำหนดให้ใช้หน่วยความจ�ำ 1024 ไบต์ ‘ ใช้ความถี่คริสตอล 11.059200MHz ‘ ประกาศตัวแปร Frequency แบบ Integer ‘ ประกาศตัวแปร Duration แบบ Integer ‘ ก�ำหนดให้ Frequency = 256 ‘ ก�ำหนดให้ Duration = 400 ‘ ก�ำหนดพอร์ตส�ำหรับส่งเสียงออกเป็น P3.7 ชื่อว่า Tone ‘ จุดเริ่มต้นการวนรอบไม่รู้จบ ‘ ก�ำเนิดสียงออกออกทางพอร์ต P3.7 ‘ หน่วงเวลา 1 วินาที ‘ จุดสิ้นสุดการวนรอบไม่รู้จบ ‘
โปรแกรมที่ L11-1 ไฟล์ NoteOut.bas โปรแกรมขับเสียงโน้ตดนตรีในออกเตฟ 4 ของไมโครคอนโทรลเลอร์ MCS-51 (ค�ำอธิบายโปรแกรมภาษาไทยไม่ตอ้ งพิมพ์) $regfile = “89C51RD.DAT” $default Xram $large $ramstart = 0 $ramsize = 1024 $crystal = 11059200
‘
ส�ำหรับไมโครคอนโทรลเลอร์ 89C51RD2 (TPE-51)
‘
ใช้ความถี่คริสตอล 11.059200MHz
Dim Freq As Byte Dim I As Byte
‘ ‘
ประกาศตัวแปร Freq เป็นแบบไบต์ ประกาศตัวแปร i เป็นแบบไบต์
Speaker Alias P3.7 Duration Alias 400 ‘ ก�ำหนดค่าส�ำหรับสร้างสัญญาณความถี่ของโน้ตดนตรี ‘ โดยน�ำค่าคงที่นี้ไปคูณกับ 4.64 x 10-6 แล้วค�ำนวณส่วนกลับ Keydo Alias 206 Keyre Alias 184 Keymi Alias 164 Keyfa Alias 154 Keysol Alias 137 Keyla Alias 122 Keyti Alias 109 Keydo1 Alias 103
‘ ‘
ก�ำหนดพอร์ตส�ำหรับส่งเสียงออกเป็น P3.7 ชื่อว่า Speaker ก�ำหนดให้ Duration = 400
Do For I = 0 To 7 Freq = Lookup(i , Note) Sound Speaker , Duration , Freq Waitms 100 Next Wait 1 Loop
(1/x) จะได้เป็นค่าความถี่ออกมา ‘ ความถี่ตัวโน้ต-โด 1046Hz ‘ ความถี่ตัวโน้ต-เร 1174Hz ‘ ความถี่ตัวโน้ต-มี 1318Hz ‘ ความถี่ตัวโน้ต-ฟา 1396Hz ‘ ความถี่ตัวโน้ต-ซอล 1568Hz ‘ ความถี่ตัวโน้ต-ลา 1760Hz ‘ ความถี่ตัวโน้ต-ที 1975Hz ‘ ความถี่ตัวโน้ต-โดสูง 2093Hz ‘
จุดเริ่มต้นการวนรอบไม่รู้จบ
‘ ‘
เลือกค่าส�ำหรับก�ำเนิดความถี่เสียงจากตารางข้อมูล Note ก�ำเนิดสัญญาณเสียง
‘
จุดสิ้นสุดของการวนรอบ
Note: ‘ ตารางข้อมูลก�ำหนดความถี่ของโน้ตดนตรี Data Keydo , Keyre , Keymi , Keyfa , Keysol , Keyla , Keyti , Keydo1
การทดลองที่ 12 ออร์แกน 51 มาปิ ดท้ ายกันด้ วยการสร้ างเครื่ องดนตรี เพื่อเล่นโน้ ตดนตรี อย่างง่าย นัน่ คือ ออร์ แกน 51 โดยใช้ หลักการจากการทดลองที่ 11 มาผนวกเข้ ากับ การตรวจสอบการกดสวิตช์ 8 ตัว เราก็จะได้ ออร์ แกนอย่างง่ายๆ มาลอง เล่นกัน (L12.1) ต่อวงจรตามรู ปที่ L12-1 ส�ำหรับสวิตช์กดติดปล่อยดับ 8 ตัว ในที่นี ้ใช้ บอร์ ด miniButton8 อันเป็ นบอร์ ดสวิตช์กดติดปล่อยดับ 8 ตัว ให้ ผลการท�ำงานเป็ นลอจิก "0" เมื่อต่อสวิตช์ ซึง่ ได้ เคยตีพิมพ์แนะน�ำให้ สร้ าง ใน TPE ฉบับที่ 20 (L12.2) เปิ ดโปรแกรม Bascom-8051 ขึ ้นมา เขียนโปรแกรมที่ L121 บันทึกชื่อเป็ น Organ51.bas จากนันท� ้ ำการคอมไพล์และดาวน์โหลด โปรแกรมลงบอร์ ด TPE-51 ด้ วยโปรแกรม Flash Magic
รูปที่ L12-1 วงจร "ออร์แกน 51" เครื่องเล่นโน้ตดนตรีอย่างง่าย The Prototype Electronics
73
BASIC-51 : เล่นกับเสียง โปรแกรมที่ L12-1 ไฟล์ Organ51.bas โปรแกรมเครือ่ งเล่นออร์แกนทีค่ วบคุมการท�ำงานด้วยไมโครคอนโทรลเลอร์ MCS-51 (ค�ำอธิบาย โปรแกรมภาษาไทยไม่ตอ้ งพิมพ์) $regfile = “89C51RD.DAT” $default Xram $large $ramstart = 0 $ramsize = 1024 $crystal = 11059200
‘
ส�ำหรับไมโครคอนโทรลเลอร์ 89C51RD2 (TPE-51)
‘
ใช้ความถี่คริสตอล 11.059200MHz
Dim Freq As Byte
‘
ประกาศตัวแปร Freq เป็นแบบไบต์
Speaker Alias P3.7 Duration Alias 400
‘ ‘
ก�ำหนดพอร์ตส�ำหรับส่งเสียงออกเป็น P3.7 ชื่อว่า Speaker ก�ำหนดให้ Duration = 400
ก�ำหนดค่าส�ำหรับสร้างสัญญาณความถี่ของโน้ตดนตรี โดยน�ำค่าคงที่นี้ไปคูณกับ 4.64 x 10-6 แล้วค�ำนวณส่วนกลับ (1/x) จะได้เป็นค่าความถี่ออกมา Keydo Alias 206 ‘ ค่าของตัวโน้ต-โด Keyre Alias 184 ‘ ค่าของตัวโน้ต-เร Keymi Alias 164 ‘ ค่าของตัวโน้ต-มี Keyfa Alias 154 ‘ ค่าของตัวโน้ต-ฟา Keysol Alias 137 ‘ ค่าของตัวโน้ต-ซอล Keyla Alias 122 ‘ ค่าของตัวโน้ต-ลา Keyti Alias 109 ‘ ค่าของตัวโน้ต-ที Keydo1 Alias 103 ‘ ค่าของตัวโน้ต-โดสูง ‘ ‘
C5 Alias P1.0 D5 Alias P1.1 E5 Alias P1.2 F5 Alias P1.3 G5 Alias P1.4 A5 Alias P1.5 B5 Alias P1.6 C51 Alias P1.7 Do
Debounce Debounce Debounce Debounce Debounce Debounce Debounce Debounce Loop
‘
‘ ก�ำหนดให้ขาพอร์ต P1.0 ต่อกับสวิตช์ของตัวโน้ต-โด ‘ ก�ำหนดให้ขาพอร์ต P1.1 ต่อกับสวิตช์ของตัวโน้ต-เร ‘ ก�ำหนดให้ขาพอร์ต P1.2 ต่อกับสวิตช์ของตัวโน้ต-มี ‘ ก�ำหนดให้ขาพอร์ต P1.3 ต่อกับสวิตช์ของตัวโน้ต-ฟา ‘ ก�ำหนดให้ขาพอร์ต P1.4 ต่อกับสวิตช์ของตัวโน้ต-ซอล ‘ ก�ำหนดให้ขาพอร์ต P1.5 ต่อกับสวิตช์ของตัวโน้ต-ลา ‘ ก�ำหนดให้ขาพอร์ต P1.6 ต่อกับสวิตช์ของตัวโน้ต-ที ‘ ก�ำหนดให้ขาพอร์ต P1.7 ต่อกับสวิตช์ของตัวโน้ต-โดสูง
‘ C5 , 0 , Sdo , Sub D5 , 0 , Sre , Sub ‘ E5 , 0 , Smi , Sub ‘ F5 , 0 , Sfa , Sub ‘ G5 , 0 , Ssol , Sub ‘ A5 , 0 , Sla , Sub ‘ B5 , 0 , Sti , Sub ‘ C51 , 0 , Sdo1 , Sub ‘
ตรวจสอบการกดสวิตช์ของโน้ต-โด หากเป็นจริง ต้องกระโดดไปยังโปรแกรมย่อยก�ำเนิดเสียงโด ตรวจสอบการกดสวิตช์ของโน้ต-เร หากเป็นจริง ต้องกระโดดไปยังโปรแกรมย่อยก�ำเนิดเสียงเร ตรวจสอบการกดสวิตช์ของโน้ต-มี หากเป็นจริง ต้องกระโดดไปยังโปรแกรมย่อยก�ำเนิดเสียงมี ตรวจสอบการกดสวิตช์ของโน้ต-ฟา หากเป็นจริง ต้องกระโดดไปยังโปรแกรมย่อยก�ำเนิดเสียงฟา ตรวจสอบการกดสวิตช์ของโน้ต-ซอล หากเป็นจริง ต้องกระโดดไปยังโปรแกรมย่อยก�ำเนิดเสียงซอล ตรวจสอบการกดสวิตช์ของโน้ต-ลา หากเป็นจริง ต้องกระโดดไปยังโปรแกรมย่อยก�ำเนิดเสียงลา ตรวจสอบการกดสวิตช์ของโน้ต-ที หากเป็นจริง ต้องกระโดดไปยังโปรแกรมย่อยก�ำเนิดเสียงที ตรวจสอบการกดสวิตช์ของโน้ต-โดสูง หากเป็นจริง ต้องกระโดดไปยังโปรแกรมย่อยก�ำเนิดเสียงโดสูง
โปรแกรมย่อยก�ำเนิดเสียงตัวโน้ตดนตรีในออกเตฟที่ 5
Sdo: ‘ โน้ตโด Sound Speaker , Duration , Keydo Return Sre: ‘ โน้ตเร Sound Speaker, Duration , Keyre Return Smi: ‘ โน้ตมี Sound Speaker , Duration , Keymi Return Sfa: ‘ โน้ตฟา Sound Speaker , Duration , Keyfa Return Ssol: ‘ โน้ตซอล Sound Speaker , Duration , Keysol Return Sla: ‘ โน้ตลา Sound Speaker , Duration , Keyla Return Sti: ‘ โน้ตที Sound Speaker , Duration , Keyti Return Sdo1: ‘ โน้ตโดสูง Sound Speaker , Duration , Keydo1 Return
74
The Prototype Electronics
รูปที่ L12-2 แนวทางการต่อวงจรเพื่อทดลองสร้างเครื่องดนตรี "ออร์แกน 51" จากบอร์ด TPE-51 จากโปรแกรมที่ L12-1 ส่วนส�ำคัญของโปรแกรมมีด้วยกัน 3 ส่วนคือ ส่วนก�ำหนดค่าคงที่เพื่อใช้ ในการสร้ างสัญาณเสียงโน้ ตดนตรี , ส่วนของการ ตรวจสอบการกดสวิตช์ และส่วนของโปรแกรมย่อยก�ำเนิดเสียงตัวโน้ ตดนตรี โดยในโปรแกรมได้ ก�ำหนดให้ ตวั โน้ ตแต่ละตัวมีความยาวประมาณ 400 มิลลิวินาทีตอ่ การก�ำเนิดเสียงหนึง่ ครัง้ ส�ำหรับการตรวจสอบปุ่ มกดทัง้ 8 ตัว จะใช้ ค�ำสัง่ Debounce โดยวางอยูใ่ นภายในลูป Do…Loop เพื่อให้ เกิด การวนตรวจสอบอย่างต่อเนื่องตลอดเวลา เมื่อมีการกดสวิตช์หรื อปุ่ มตัวใด ขึ ้น ซีพียจู ะกระโดดไปยังโปรแกรมย่อยของปุ่ มที่ถกู กดนันทั ้ นที เพื่อท�ำการ สร้ างเสียงโน้ ตดนตรี ขบั ออกทางขาพอร์ ต P3.7
บทความเชิงปฏิบัติการชุด BASIC-51 Course ได้มาถึงบทสุดท้าย ส�ำหรับการทดลองเบื้องต้น แต่การน�ำเสนอตัวอย่างการประยุกต์ใช้งาน บอร์ด TPE-51 และไมโครคอนโทรลเลอร์ MCS-51 ยังไม่จบครับ เพราะยัง มีเรื่องราวที่น่าสนใจอีกมากมาย ไม่ว่าจะเป็นการเชื่อมต่อกับอุปกรณ์ผ่าน ระบบบัส I2C, บัสหนึ่งสาย, สื่อสารข้อมูลอนุกรมกับคอมพิวเตอร์ และการ ขับเซอร์โวมอเตอร์ เรื่องราวทั้งหมดนี้จะได้ทยอยน�ำเสนอแก่คุณๆ ผู้อ่านใน รูปของบทความเชิงปฏิบัติการและการประยุกต์ใช้งานที่จบในตอน ได้โปรด ติดตามกันในฉบับต่อๆ ไปด้วยนะครับ
ยกตัวอย่าง ที่ค�ำสัง่ Debounce C5 , 0 , Sdo , Sub หาก มีการกดสวิตช์หรื อปุ่ ม C5 นัน่ คือขา P1.0 ได้ รับลอจิก "0" จากการที่สวิตช์ ถูกต่อลงกราวด์ เงื่อนไขการตรวจสอบของค�ำสัง่ Debounce เป็ นจริ ง จึง กระโดดไปยังโปรแกรมย่อยชื่อ Sdo เพือ่ ก�ำเนิดเสียงทีม่ คี วามถี่ตรงกับโน้ ตโด ในการสร้ างโปรแกมย่ อ ยทุ ก ครั ง้ จะมี ตัว อัก ขระ : หรื อ โคล่ อ น ต่อท้ ายชื่อของโปรแกรมย่อยนันๆ ้ เสมอ เป็ นการประกาศให้ รับรู้วา่ ชื่อนี ้คือ โปรแกรมย่อย หลังจากทีท่ ำ� งานในโปรแกรมย่อยเสร็จสิ ้นลงแล้ ว จะพบค�ำสัง่ Return เพือ่ ก�ำหนดซีพยี กู ลับไปท�ำงานในค�ำสัง่ ถัดไปของโปรแกรมหลัก
www.tpemagazine.com
(L12.3) หลังจากดาวน์โหลดโปรแกรม ท�ำการรัน ให้ ทดลองกดสวิตช์ เรี ยงไปตามล�ำดับจากสวิตช์ที่ขาพอร์ ต P1.0 ไปจนถึง P1.7 จะได้ ยินเสียง โน้ ตดนตรี ตงแต่ ั ้ เสียงโด ไปจนถึง โดสูง เป็ นการยืนยันว่า ขณะนี ้ ออร์ แกน 51 อย่างง่ายของเราพร้ อมใช้ งานแล้ ว จะกดเล่นเพลินๆ หรื อกดเล่นเป็ นเพลงก็ แล้ วแต่ความสามารถและพรสวรรค์ของแต่ละท่านล่ะครับ
The Prototype Electronics
75