วันเสาร์ที่ 4 กรกฎาคม พ.ศ. 2558

สรุปการทำงานโดยรวมของ UltraSonic Theremin (re)

Block Diagrame

ขั้นตอนการดำเนินงาน 
  1. อ่านค่าจาก HC-SR04 UltraSonic  
  2. สร้างสัญญาณเสียงโดยโดยใช้หลักการ PWM 
  3. ใช้ TPA2016D2 ในการควบคุมความดังหรือเบาของเสียง โดยใช้การติดต่อสื่อสารด้วยระบบ I2C
  4. ความคุมพฤติกรรมบางอย่างของระบบผ่าน Ethernet โดยใช้ 
ความสามารถของระบบ
  1. สามารถสร้างสัญญาณเสียงระดับโน๊ต C4, D4, E4, F4, G4, A4, B4, C5 แปรผันตามระยะทางได้ 
  2. สามารถความคุม Volume ความดังเบา หรือ ระดับเสียง ผ่านหน้า Browser ได้
เอกสารแนบ
  1. CODE_1 : ทำตัวเป็น Webserver และส่งค่ามาสร้างเป็นเสียง และกด SW2 และ 3 เพื่อ/ลด Volume
  2. CODE_2 : ทำตัวเป็น Webserver และส่งค่ามาเพิ่ม/ลด Volume และใช้ Ultarsonic วัดระยะทางเพื่อสร้างเสียง


VDO แสดงการทำงานของระบบ Code_1



VDO แสดงการทำงานของระบบ Code_2

ทดลองการสร้างเสียงตัวโน๊ต ด้วยสัญญาณ PWM



แนวคิด : เนื่องจากเสียงก็เป็น คลื่นสัยญาณชนิดหนึ่งฉนั้นแล้ว สัญญาณสี่เหลี่ยม( SquareWave )ที่เราคุ้นเคยกันดี นั้นก็อาจจะมีเสียงหนึ่งๆ ตามความถี่ที่เปลี่ยนไปของสัญญาณ เราจึงใช้สํญญาณ PWM ที่ขา OC5 (RD4) ของ PIC32MX460F512L ออกมาเป็นสัญญาณ Square Wave ที่มี Duty Cycle = 50% 

รูปที่ แสดงค่าความถี่ของตัว Note ต่างๆ

อุปกรณ์ที่ใช้ในการทดลอง
  1. Broad DEV-PIC32-001-V3
  2. PIC KIT 2 
  3. UltraSonic HC-SR04
  4. Mono Audio Jack (Female)
การต่อวงจร : ต่อขาสัญญาณของ Mono Audio Jack เขากับขา OC1หรือRD5 ของบอร์ด PIC32
รูปที่ 2 แสดงการเชื่อมต่อ Jack Mono กับ บอร์ด PIC32

ผลการสร้างสัญญาณ

สัญญาณตัวโน๊ต C4 ความถี่ 261 Hz         สัญญาณตัวโน๊ต D4 ความถี่ 294  Hz

สัญญาณตัวโน๊ต E4 ความถี่ 331 Hz          สัญญาณตัวโน๊ต F4 ความถี่ 349  Hz

         สัญญาณตัวโน๊ต G4 ความถี่ 393 Hz         สัญญาณตัวโน๊ต A4 ความถี่ 442  Hz         

 
 สัญญาณตัวโน๊ต B4 ความถี่ 495 Hz           สัญญาณตัวโน๊ต C5 ความถี่ 523  Hz

- VDO ทดลองไล่ความถี่ตั้แต่ 50 Hz - 800 Hz




เอกสารแนบ
  1. Code ที่ใช้ในการทดลอง
  2. PIC32MX : PWM , LINK_1, LINK_2


การต่อใช้งาน Adafruit Stereo 2.8W Class D Audio Amplifier - I2C Control AGC - TPA2016

Adafruit Stereo 2.8W Class D Audio Amplifier - I2C Control AGC - TPA2016


ที่มาจาก : http://www.adafruit.com/

เป็นอุปกรณ์ Audio Amplifier ขยายสัญญาณเสียง แม้จะตัวเล็กแต่สามารถขับเสียงโดยต่อลำโพงขนาด 8 โอห์ม ออกมาได้ดังกว่าขนาดตัวหลายเท่า โดยสามารถควบคุมการทำงานได้โดยสั่งผ่าน การติดต่อสื่อสารแบบ I2C โดยสามารถปรับได้หลากหลาย เช่น
  • Gain(อัตราการขยาย) ได้ตั้งแต่ -28 dB ถึง 30 dB , 
  • Limiter Level
  • Compression Ratio
  • Noise Gate Threshold
  • Attack Time
  • Release Time
  • Hold Time


Vdo แนะนำการทำงานของอุปกรณ์ (นาที ที่ 6.10 )


การทดลองปรับอัตตราการขยาย
รูปที่ 2.1 การต่อวงจร TPA2016D2 กับ PIC32MX460F512L

Single-Byte Write
รูปที่ 2.2 การส่งข้อมูลแบบ Single-Byte Write ไปยัง TPA2016D2 Stereo Amplifier
  • TPA2016D2 I2C Device Address สำหรับเขียนคือ 0xB0 (binary 10110000)


รูปที่ 2.3 AGC FIXED GAIN CONTROL(Address: 5)

เราใช้ TPA2016D2 เพื่อใช้ปรับความดังเบาของเสียง โดยการใช้งานจะเป็นการสื่อสารแบบ I2C โดย Adrees ของอุปกรณ์คือ 0x58 และจะส่งข้อมูล ตั้งแต่ -28 ถึง +30 ไปยัง Register : AGC FIXED GAIN CONTROL( Address 0x05 ) ทดสอบโดยส่งคำสั่งไปยัง Register AGC FIXED GAIN CONTROL โดยที่ส่ง Gain เป็นบวก( + ) แบบปกติ แต่ส่ง Gain เป็นลบ( – )เป็นแบบ 2’ Complement

รูปที่ 2.4 แสดงการส่งคำสั่ง SET Gain 0 DB (“10110000 - 0000 0101 – 0000 0000”)

รูปที่ 2.5 แสดงการส่งคำสั่งSET Gain 1 DB (“10110000 - 0000 0101 – 0000 0001”)


รูปที่ 2.6 แสดงการส่งคำสั่งSET Gain -2 DB (“10110000 - 0000 0101 – 11111110”) # 2’Complement


เอกสารแนบ
  1. Code สำหรับการทดลอง (กด Switch2 และ Switch3 เพื่อเพิ่มลด Volume)
  2. Datasheet : TPA2016D2

การใช้งาน Ethernet ของบอร์ด DEV-PIC32-001-V3

รูปที่ 1 บอร์ด DEV-PIC32-001-V3

บอร์ด DEV-PIC32-001-V3 นี้นั้นทางผู้พัฒนาได้ออกแบบบอร์ดให้รองรับการใช้งาน Ethernet มาแล้ว โดยใช้ ENC28J60 เชื่อมต่อกับ  PIC32MX460F512L ที่ชุด SPI2 และสามารถเชื่อมต่อผ่านสาย LAN ที่ Port RJ-45 แสดงดังรูปที่ 2 ( สามารถกดขยายดูวงจรได้ )


รูปที่ 2 แสดงการเชื่อมต่อระหว่าง ENC28J60 กับ PIC32MX460F512L
(หรือสามารถดูวงจรทั้งหมดได้จาก คู่มือการใช้งาน  DEV-PIC32-001-V3)

ปัญหาที่พบ?
- Code TCP/IP Stack ที่ให้มากับบอร์ดนั้น ไม่สามารถสั่งการ/ใช้งาน ENC28J60 ได้ ? และไฟแสดงสถานะที่ Port RJ-45 นั้นไม่ติด?

= สาเหตุนั้นเกิดจาก บอร์ด DEV-PIC32-001-V3 นั้นได้มีการต่อ MOSFET ชนิด PNP ไว้ ถ้าเราต้องการใช้งาน ENC28J60 นั้น เราจำเป็นต้องสั่งงานขา ETN_ON( คือขา RA9 ) ให้เป็น Logic LOW ก่อน ENC28J60 ถึงจะสามารถให้งานได้
หมายเหตุ : แนะนำให้ดู Schematic ของบอร์ดจาก คู่มือการใช้งาน  DEV-PIC32-001-V3

- Code TCP/IP Stack นัั้นได้ใช้ Timer1 ในการกำหนดจังหวะการทำงานทั้งหมด 
= ฉะนั้นถ้าเราจะใช้ TCP/IP Stack เราไม่ควรใช้ Timer1 ให้เปลี่ยนไปใช้ Timer ตัวอื่นแทน