[Print][Back]

จุฬาลงกรณ์มหาวิทยาลัย

คณะวิศวกรรมศาสตร์

ภาควิชาวิศวกรรมคอมพิวเตอร์

2110262 Microprocessor Systems Lab.

ชื่อ ______________________________

เลขประจำตัว ________________________

หมายเลขเครื่อง ______________________

วันที่ ______________________________


4. การสร้างเสียงเพลงด้วยวิธีการ Direct Synthesis

วัตถุประสงค์

  1. เพื่อให้นิสิตคุ้นเคยกับการใช้วงจร Interface ต่างๆ มากขึ้น
  2. เพื่อให้นิสิตเข้าใจหลักการของวงจรสร้างสัญญาณเสียงอย่างง่าย
  3. เพื่อให้นิสิตเกิดทักษะในการเขียนโปรแกรมภาษา Assembly มากขึ้น
  4. เพื่อให้นิสิตสามารถพัฒนาโปรแกรมในลักษณะของ Time Critical หรือ Real Time Application ได้

อุปกรณ์ที่แจกให้

ทฤษฎีที่เกี่ยวข้อง/อ้างอิง

จากการศึกษาในวิชาฟิสิกส์ เราสามารถสรุปได้ว่าเสียงเกิดจากการสั่นสะเทือนของวัตถุ เสียงดนตรีก็เช่นเดียวกัน โน้ตดนตรีที่มีการแบ่งเป็นตัวโน้ตต่างๆ เกิดจากการสั่นสะเทือนที่ความถี่ที่แตกต่างกัน เครื่องดนตรีต่างชนิดกันจะมีความถี่มูลฐานเดียวกันเมื่อเล่นตัวโน้ตเดียวกัน (ดังแสดงในตาราง) ส่วนคุณภาพหรือความไพเราะของเสียงขึ้นอยู่กับค่า Harmonic ของเครื่องดนตรีแต่ละชนิด

ตัวโน้ต

ความถี่(Hz)

C

261.63

D

293.67

E

329.63

F

349.23

G

392.00

A

440.00

B

493.89

C'

523.26

ในการสังเคราะห์เสียงดนตรีสามารถทำได้โดยการสร้างสัญญาณเพื่อให้ Speaker สั่นสะเทือนด้วยสัญญาณความถี่มูลฐานของโน้ตดนตรีที่ต้องการ ซึ่งวิธีการที่ง่ายที่สุดคือการสร้างสัญญาณ Square Wave ออกมายัง Speaker ให้มีความถี่ต่างๆ ตามตัวโน้ตที่ต้องการ ในที่นี้เราจะใช้ Speaker ราคาถูกซึ่งหาซื้อได้ทั่วไปความต้านทานภายในระหว่าง 8-10 Ohm หากเราขับ Speaker ด้วย Square Wave ก็จะได้กำลังประมาณ 0.78 W (จาก V2/R) ซึ่งเป็นกำลังที่ต่ำมาก แต่ก็เพียงพอที่จะให้เราได้ยินเสียงได้ ในการต่อ Speaker เข้ากับวงจรเราควรจะต้องมี Transistor ช่วยขยายกระแสหรือเป็น Buffer สำหรับป้องกัน Microcontroller ให้เรา ดังภาพวงจรที่ดีที่สุดคือวงจรทางขวามือเพราะมี Transistor สำหรับช่วย Pull UP และ Pull Down

ทั้งนี้เพื่อเป็นการประหยัดอุปกรณ์ในปฏิบัติการจึงอนุโลมให้นิสิตต่อ Speaker เข้ากับ Port โดยตรง ทั้งนี้ให้เลือกใช้ Port ที่มีลักษณะเป็น Open Collector ด้วยเพื่อให้สามารถรับกระแสที่สูงขึ้นได้

การทดลอง

  1. ให้นิสิตต่อวงจรสำหรับขับ Speaker เข้ากับ RB4 ของ PIC ในบอร์ดทดลองโดยใช้ Connector ขนาด 4x2 (ตามที่แจกให้) ตามลักษณะของวงจรดังภาพ
  2. เขียนโปรแกรมสำหรับสร้างสัญญาณเสียง ตามโน้ตที่ความถี่ต่างๆ (ให้ไล่ Scale ไปกลับจาก C D E F G A B C B A G F E D C) เรื่อยไป ให้แสดงแต่ละตัวโน้ตเป็นเวลา 1 วินาที
  3.  

  4. ดัดแปลงโปรแกรมดังกล่าวให้รับค่าของตัวโน้ตจาก ROM ได้ ดังรูปแบบที่กำหนดให้ดังนี้

3

1

ความยาว (ระหว่าง 0-1)

โน้ต (0-F)

แต่ละ Byte จะบอกถึงความยาวของโน้ต และ ตัวโน้ตที่ต้องให้ระบบเล่น โดย Hi Order ขนาด 4 บิตจะใช้บอกความยาว ทั้งนี้ 0 คือ ประมาณ 0.5 วินาที และ 1 คือ 1 วินาทีตามลำดับ และ Low Order ขนาด 4 บิต จะใช้บอกตัวโน้ต ดังแสดงในตาราง ทั้งนี้เมื่อข้อมูลที่อ่านจาก ROM เป็น 0?Fh ให้หยุดเล่น

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

เงียบ

C

D

E

F

G

A

B

     

หยุดเล่น / จบเพลง

ตัวอย่าง

11 12 13 0F จะเล่นตัวโน้ต C D และ E ตามลำดับ ตัวโน้ตละประมาณ 1 วินาที

 

(ให้นิสิตแสดงการทดสอบโดยบันทึกโน้ตเพลงมหาจุฬาลงกรณ์ 1 วรรคลงใน ROM)

Hint: นิสิตอาจใช้ PWM ช่วยในการสร้างสัญญาณที่ความถี่ที่ต้องการก็ได้

[Print][Back]