Thaimicrotron.com : Home |
|
Sound
Generator |
|
|
การใช้ไมโครคอนโทรลเลอร์กำเนิดเสียง |
|
|
|
|
|
|
|
|
วงจรขยายสัญญาณเพื่อขับ ลำโพงขนาดเล็กทั้งแบบที่ใช้ทรานซิสเตอร์
ชนิด PNP และ NPN |
|
|
|
|
|
|
|
|
รูปการต่อวงจรขยายสัญญาณเข้ากับไมโครคอนโทรลเลอร์ |
|
|
|
|
|
- ผลการทดลองเมื่อจ่ายไฟให้บอร์ดทดลอง จะมีเสียงบิ๊บ
ออกมาทางลำโพง |
|
|
|
|
|
การทำงาน |
|
|
|
|
|
วงจรขยายสัญญาณที่ใช้ในบอร์ดทดลอง |
|
|
|
|
|
- จากรูปเป็นวงจรขยายสัญญาณ โดยใช้ทรานซิสเตอร์ ชนิด PNP เบอร์ BC557
สัญญาณอินพุต ที่ต่อมาจาก ขาที่กำเนิด สัญญาณเสียง จากไมโครคอนโทรลเลอร์
ต่อผ่าน R1 เพื่อ จำกัดกระแส ให้กับทรานซิสเตอร์ ,R2 ต่อไว้กับ +5V เพื่อไม่ให้ทรานซิสเตอร์
ทำงาน ขณะที่ไม่ได้ต่อใช้งาน ส่วน R3 มีไว้เพื่อป้อนกลับ แบบลบ เพื่อป้องกันไม่ให้
ทรานซิสเตอร์เสียหายเนื่องจากการดึงกระแส จากลำโพง มากเกินไป
- การกำเนิดเสียงทำได้โดยการให้เอาต์พุตเป็นโลจิก "1" และ "0"
สลับกันไป สามารถกำหนดความถี่ได้จาก f = 1/T และเมื่อ t = T/2 ,เมื่อ
t เป็นครึ่งหนึ่งของคาบเวลา ดังนั้นเมื่อเราให้เอาต์พุตเป็นโลจิก "1"
เป็นเวลาเท่ากับ t และกลับเป็นโลจิก "0" เป็นเวลาเท่ากับ t เราก็
จะสามารถ กำเนิดความถี่ ที่ต้องการได้
- เนื่องจากบนบอร์ดทดลอง ทางด้านอินพุต ของทรานซิสเตอร์ ไม่ได้ต่อกับตัวเก็บประจุ
เพื่อป้องกันแรงดันไฟตรง ดั้งนั้น ก่อนออกจาก โปรแกรมย่อยที่ใช้ ในการกำเนิดเสียง
จะต้องให้ ระดับโลจิกเป็น 1 ด้วยเพื่อไม่ให้ทรานซิสเตอร์ นำกระแสขณะที่ไม่ได้ใช้งาน
|
|
|
|
|
|
|
|
|
การต่อสายจากไมโครคอนโทรลเลอร์ จาก pin p3.7 บนบอร์ดทดลองไปยังอินพุตของวงจรขยายสัญญาณ |
|
|
|
|
|
|
|
|
|
|
|
โปรแกรมย่อย SOUND |
|
|
|
|
|
- ก่อนอื่น ต้องกำหนดค่า ให้กับตัวแปรก่อน วางไว้ในส่วนบนของไฟล์
|
|
|
|
|
|
SPKER |
EQU
|
P3 |
;ให้ Speaker เป็น PORT3 |
SPKBIT |
EQU |
10000000B |
; ให้ Speaker bit เป็น P3.7 (เป็นขาที่ใช้ส่งสัญญาณไปยังลำโพง) |
SNDCON |
EQU |
3 |
; ค่าชดเชย ให้กับคาบเวลา ของช่วงเวลา กำเนิดสัญญาณ (Frequency Length) |
|
|
|
|
|
|
|
|
|
|
- เราสามารถกำหนดให้ขาใดๆไมโครคอนโทรลเลอร์ เป็นขาที่ใช้กำหนดสัญญาณโดยกำหนดที่ตัวแปรเหล่านี้
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- การเรียกใช้งานโปรแกรมย่อย โดยการกำหนดให้ R2=ค่าความถี่ และ R3=ระยะเวลาที่ใช้กำเนิดเสียง
|
|
|
- R4 คัดลอกค่าเพื่อใช้นับรอบ ในการกำหนดคาบเวลา (t) จาก R2 เพื่อกำหนดคาบเวลาให้กับเอาต์พุต
เมื่อลดค่าจนเป็น 0 แล้ว จะอ่านค่าความถี่ จาก R2 เพื่อเริ่มต้นในการนับใหม่
(Reload)
|
|
|
- R3 กับ R5 ใช้นับรอบเพื่อกำหนดระยะเวลาที่ใช้กำเนิดเสียง (Frequency
Length) R3 เป็นตัวแปร ที่ผู้ใช้กำหนด ในตอน เรียกใช้งาน โปรแกรมย่อย ส่วน
R5 เป็นค่าคงที่ๆ ใช้ปรับระยะเวลา ให้เหมาะสม ซึ่งจำนวนรอบในการกำหนดคาบเวลา
จะเป็นผลคูณของ R3 กับ R5
|
|
|
- การทำให้เอาต์พุตเป็นโลจิก "1" และ "0" สลับกันไป
ด้วยการนำมา XOR กับบิทที่เป็น 1 เช่นเราต้องการให้ P3.7 เป็นเอาต์พุต
โดยการ กำหนดให้ Speaker bit = 10000000H
วิธีการที่เราอ่าน ค่าเดิมของพอร์ตนั้น มาแก้ไขเฉพาะบิต
ที่ต้องการ แล้วเขียน กลับไปที่ พอร์ตเดิมนั้น เราเรียก วิธีการ แบบนี้ว่า
"READ-MODIFY-WRITE" เป็นวิธีการที่นิยมใช้กัน
เพราะไม่มีผลกระทบ ต่อบิตที่ใช้งาน อย่างอื่น ในพอร์ตเดียวกัน
|
|
|
- เนื่องจากทรานซิสเตอร์ที่ใช้เป็นแบบ PNP ก่อนออกจากโปรแกรมย่อยนี้ต้องกำหนดให้
Speaker bit = โลจิก 1 เพื่อป้องกัน ไม่ให้ ทรานซิสเตอร์ นำกระแสขณะที่ไม่ได้ใช้งาน
โดยการนำมา OR กับตัวแปร SPKBIT
|
|
|
|
|
|
|
|
ORL |
SPKER,#SPKBIT |
;Set Speaker bit =1 |
|
|
|
|
|
|
|
|
|
|
EXAM4 |
|
|
;Sound Beep Demo
;Generate Sound on pin P3.7
;Define Speaker Port & Speaker Pin
SPKER EQU P3
SPKBIT EQU 10000000b
SNDCON EQU 50 ;SOUND CONSTANT
ORG 0000H
INIT: CLR EA ;DISABLE ALL INTTERRUPT
ANL P3,#11000011B ;CLEAR BIT 2 TO 5
MOV A,#0FFH
MOV P1,A
;DEMO SOUND
MOV R2,#35 ;Load Frequency to R2
MOV R3,#10 ;Load Length to R3
LCALL SOUND
LOOP: LJMP LOOP ;Loop here
;*** SOUND ***
;function Generate Sound
;input freq in R2 & Length in R3
;use R2,R4,R3,R5
;R2=freq
;R3=Length
;R4=buffer reload freq form R2
;R5=Length correction
;no return
SOUND: MOV A,#SNDCON ;load Length correction
MOV R5,A
SNDNX: MOV A,R2 ;Load freq
MOV R4,A ;and save to R4
;Toggle Speaker bit
MOV A,SPKER ;Read Port value
XRL A,#SPKBIT ;Modify Speaker bit
MOV SPKER,A ;and Write back to Speaker Port
;Frequency time delay
SNDLP: NOP
NOP
NOP
NOP
NOP
DJNZ R4,SNDLP ;test frequency time is done
DJNZ R5,SNDNX;
DJNZ R3,SOUND ;test Length time is done
;Set Speaker bit High for protect Transistor PNP
ORL SPKER,#SPKBIT ;Set Speaker bit =1
RET
END
|
|
|
|
|
|
|
|
|
|
|
|
|
ตัวอย่างการสร้างเสียงแบบต่างๆ |
|
|
|
|