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
 
 
     
 
DOWNLOAD
 
     
  ตัวอย่างการสร้างเสียงแบบต่างๆ