- IC PT2258
- Paano gumagana ang PT2258 IC
- Ang Iskolar
- Kinakailangan ang Mga Bahagi
- Code ng Arduino
- Pagsubok sa Digital Audio Volume Control Circuit
- Karagdagang Pagpapahusay
Ang potensyomiter ay isang aparatong mekanikal na ginagamit kung alin ang maaaring magtakda ng paglaban ayon sa nais na halaga, kaya binabago ang kasalukuyang dumadaan dito. Mayroong maraming mga application para sa isang potensyomiter, ngunit karamihan sa isang potensyomiter ay ginagamit bilang isang tagasuporta ng lakas ng tunog para sa mga audio amplifier.
Ang isang potensyomiter ay hindi makokontrol ang nakakuha ng signal, ngunit bumubuo ito ng isang divider ng boltahe at iyon ang dahilan kung bakit napahina ang input signal. Kaya sa proyektong ito, ipapakita ko sa iyo kung paano bumuo ng iyong Digital Volume Controller sa IC PT2258 at i-interface ito sa isang Arduino upang makontrol ang dami ng isang amplifier circuit. Maaari mo ring suriin ang iba't ibang mga circuit na nauugnay sa Audio dito kasama ang VU meter, tone control circuit, atbp.
IC PT2258
Tulad ng nabanggit ko kanina, ang PT2258 ay isang IC na ginawa upang magamit bilang isang 6 -Channel Electronic Volume Controller, ang IC na ito ay gumagamit ng teknolohiyang CMOS na espesyal na idinisenyo para sa mga multi-channel na application ng audio-video.
Nagbibigay ang IC na ito ng I2C Control Interface na may saklaw ng pagpapalambing ng 0 hanggang -79dB sa 1dB / hakbang at dumating sa isang 20-pin DIP o SOP na pakete.
Ang ilan sa tampok na pangunahing kaalaman ay may kasamang,
- 6-Input at mga output channel (Para sa 5.1 Home Audio Systems)
- Napipiling I2C address (Para sa Daisy-chain Application)
- Paghihiwalay ng mataas na channel (Para sa Mababang Aplikasyon ng Ingay)
- S / N ratio ng> 100dB
- Ang boltahe sa pagpapatakbo ay 5 hanggang 9V
Paano gumagana ang PT2258 IC
Ang IC na ito ay nagpapadala at tumatanggap ng data mula sa microcontroller sa pamamagitan ng mga linya ng SCL at SDA. Ang SDA at SCL ang bumubuo sa interface ng bus. Ang mga linyang ito ay dapat na hilahin ng mataas ng dalawang 4.7K resistors upang matiyak ang matatag na operasyon.
Bago kami pumunta sa aktwal na pagpapatakbo ng hardware, narito ang detalyadong paglalarawan ng pagganap ng IC. kung hindi mo nais na malaman ang lahat ng ito, maaari mong laktawan ang bahaging ito dahil ang lahat ng bahagi ng pagganap ay pinamamahalaan ng Arduino library.
Pagpapatunay ng Data
- Ang data sa linya ng SDA ay itinuturing na matatag kapag ang signal ng SCL ay TAAS.
- Ang mataas at mababang estado ng linya ng SDA ay nagbabago lamang kung ang SCL ay Mababa.
Start at Stop Condition
Ang Isang Panimulang Kundisyon ay naaktibo kung kailan
- ang SCL ay nakatakda sa TAAS at
- Ang SDA ay lumilipat mula sa TAAS hanggang sa mababang estado.
Ang Stop Condition ay naaktibo kung kailan
- Ang SCL ay nakatakda sa TAAS at
- Ang SDA ay lumilipat mula sa Mababang patungo sa Mataas na Estado
Tandaan! Napaka kapaki-pakinabang ng impormasyong ito para sa pag-debug ng mga signal.
Format ng Data
Ang bawat byte na ipinadala sa SDA Line ay binubuo ng 8 bits, na bumubuo ng isang byte. Ang bawat byte ay dapat na sundan ng isang Bit ng Pagkilala.
Pagkilala
Tinitiyak ng pagkilala ang matatag at wastong operasyon. Sa panahon ng Acknowogn Clock Pulse, hinihila ng microcontroller ang SDA pin HIGH sa eksaktong oras na ito ng peripheral device (audio processor) na pull-down (LOW) ang linya ng SDA.
Ang peripheral device (PT2258) ay tinutugunan ngayon at kailangang makabuo ng isang pagkilala matapos makatanggap ng isang byte, kung hindi man, ang linya ng SDA ay mananatili sa Mataas na antas sa panahon ng ikasiyam (9th) Clock Pulse. Kung nangyari ito, bubuo ang master transmitter ng STOP Impormasyon upang maibawas ang paglilipat.
Na-clear ang hindi kailangang maging lugar para sa isang wastong paglilipat ng data.
Pagpili ng Address
Ang address ng I2C ng IC na ito ay nakasalalay sa estado ng CODE1 (Pin No.17) at CODE2 (Pin No.4).
CODE1 (PIN No. 17) |
CODE2 (PIN No. 4) |
HEX ADDRESS |
0 |
0 |
0X80 |
0 |
1 |
0X84 |
1 |
0 |
0X88 |
1 |
1 |
0X8C |
Logic High = 1
Mababang Logic = 0
Interface Protocol
Ang interface protocol ay binubuo ng mga sumusunod:
- Isang Start bit
- Isang Chip Address Byte
- ACK = Pagkilala ng kaunti
- Isang byte ng Data
- Isang Stop bit
Isang maliit na Paglilingkod sa Bahay
Matapos mapagana ang IC, kailangang maghintay ng hindi bababa sa 200ms bago ilipat ang unang data bit, kung hindi man, maaaring mabigo ang paglilipat ng data.
Matapos ang pagkaantala, ang unang bagay na dapat gawin ay i-clear ang rehistro sa pamamagitan ng pagpapadala ng "0XC0" sa linya ng I2C, tinitiyak nito ang wastong operasyon.
Ang hakbang sa itaas ay nalilimas ang buong rehistro, ngayon kailangan naming magtakda ng isang halaga sa rehistro, kung hindi man, ang rehistro ay nag-iimbak ng halaga ng basura at nakakakuha kami ng isang pekas na output.
Upang matiyak ang wastong pagsasaayos ng lakas ng tunog, kinakailangan upang magpadala ng maraming 10dB na sinusundan ng isang 1dB code sa attenuator nang magkakasunod, kung hindi man, ang IC ay maaaring kumilos nang hindi normal. Ang diagram sa ibaba ay higit na nililinaw nito.
Ang parehong mga pamamaraan sa itaas ay gagana nang maayos.
Upang matiyak ang wastong operasyon, siguraduhin na ang bilis ng paglipat ng data ng I2C ay hindi hihigit sa 100KHz.
Iyon ang paraan kung paano mo maipapadala ang isang byte sa IC at palayawin ang signal ng pag-input. Ang seksyon sa itaas ay upang malaman kung paano gumana ang IC, ngunit tulad ng sinabi ko nang mas maaga, gagamit kami ng isang Arduino library upang makipag-usap sa IC na namamahala sa lahat ng hard code, at kailangan lamang naming tumawag ng ilang mga function na function.
Ang lahat ng impormasyon sa itaas ay kinuha mula sa datasheet, mangyaring mag-refer dito para sa karagdagang impormasyon.
Ang Iskolar
Ipinapakita ng imahe sa itaas ang eskematiko ng pagsubok ng PT2258 batay sa Volume Control Circuit. Kinuha ito mula sa datasheet at binago ayon sa pangangailangan.
Para sa demonstrasyon, ang circuit ay itinayo sa isang solderless breadboard sa tulong ng eskematiko na ipinakita sa itaas.
Tandaan! Ang lahat ng mga bahagi ay inilalagay nang malapit hangga't maaari upang mabawasan ang parasitiko capacitance inductance at paglaban.
Kinakailangan ang Mga Bahagi
- PT2258 IC - 1
- Arduino Nano Controller - 1
- Generic Breadboard - 1
- Screw Terminal 5mm x 3 - 1
- Pindutan ng Push - 1
- 4.7K Resistor, 5% - 2
- 150K Resistor, 5% - 4
- 10k Resistor, 5% - 2
- 10uF Capacitor - 6
- 0.1uF Capacitor - 1
- Jumper Wires - 10
Code ng Arduino
Para sa pagiging simple, gagamit ako ng isang PT2258 library mula sa GitHub, na ginawa ng sunrutcon.
Ito ay isang napakahusay na nakasulat na silid-aklatan kung kaya't napagpasyahan kong gamitin ito, ngunit dahil ito ay matanda na, ito ay isang maliit na buggy at kailangan naming ayusin ito bago namin ito magamit.
Una, i-download at i-extract ang library mula sa GitHub repository.
Makukuha mo ang dalawang mga file sa itaas pagkatapos ng pagkuha.
# isama ang # isama
Susunod, buksan ang PT2258.cpp file kasama ang iyong paboritong Text Editor, gumagamit ako ng Notepad ++.
Maaari mong makita na ang "w" ng wire library ay nasa maliliit na titik, na hindi tugma sa mga pinakabagong bersyon ng Arduino, at kailangan mong palitan ito ng isang cap na "W", iyon lang.
Ang kumpletong code para sa PT2258 Volume Controller ay matatagpuan sa pagtatapos ng seksyon na ito. Dito ipinaliwanag ang mahahalagang bahagi ng programa.
Sinimulan namin ang code sa pamamagitan ng pagsasama ng lahat ng kinakailangang mga file ng library. Ang Wire library ay ginagamit upang makipag-usap sa pagitan ng Arduino at ng PT2258. Naglalaman ang library ng PT2258 ng lahat ng kritikal na impormasyon sa pag-time ng I2C at pagkilala. Ginagamit ang ezButton library upang mag-interface gamit ang mga push-button.
Sa halip na gamitin ang mga imahe ng code sa ibaba, Kopyahin ang lahat ng mga instance ng code mula sa file ng code at gawin itong Na-format tulad ng dati nating ginagawa sa ibang mga proyekto
# isama
Susunod, gawin ang mga bagay para sa dalawang mga pindutan at ang library ng PT2258 mismo.
PT2258 pt2258; ezbutton button_1 (2); ezbutton button_2 (4);
Susunod, tukuyin ang antas ng lakas ng tunog. Ito ang default na antas ng dami na magsisimula ang IC na ito.
Int dami = 40;
Susunod, simulan ang UART, at itakda ang dalas ng orasan para sa I2C bus.
Serial.begin (9600); Wire.setClock (100000);
Napakahalaga na itakda ang I2C na orasan, kung hindi man, hindi gagana ang IC dahil ang maximum na dalas ng orasan na sinusuportahan ng IC na ito ay 100KHz.
Susunod, gumawa kami ng isang maliit na pag-aalaga ng bahay na may isang kung ibang pahayag upang matiyak na ang IC ay nakikipag-usap nang maayos sa I2C bus.
Kung (! Pt2258.init ()) Serial.printIn ("PT2258 Matagumpay na Pinasimulan"); Iba Pang Serial.printIn ("Nabigong Simulan ang PT2258");
Susunod, itinakda namin ang pagkaantala ng pag-debounce para sa mga pushbutton.
Button_1.setDebounceTime (50); Button_2.setDebounceTime (50);
Panghuli, simulan ang PT2258 IC sa pamamagitan ng pagse-set up nito sa default na dami ng channel at numero ng Pin.
/ * Iniciating PT na may default na dami at Pin * / Pt2258.setChannelVolume (dami, 4); Pt2258.setChannelVolume (dami, 5);
Ito ang marka ng pagtatapos ng seksyon ng Void Setup () .
Sa seksyon ng Loop , kailangan naming tawagan ang loop function mula sa button button; ito ay isang pamantayan sa library.
Button_1.loop (); // Mga pamantayan sa Library Button_2.loop (); // Mga pamantayan sa Library
Ang nasa ibaba kung seksyon ay upang bawasan ang dami.
/ * kung ang pindutan 1 ay pinindot kung ang kondisyon ay totoo * / If (button_1.ispressed ()) {Volume ++; // Pagdaragdag ng counter ng dami. // Ito kung tinitiyak ng pahayag na ang dami ay hindi lumalagpas sa 79 Kung (dami> = 79) {Dami = 79; } Serial.print (“dami:“); // pag-print sa antas ng lakas ng tunog Serial.printIn (dami); / * itakda ang dami para sa channel 4 Alin ang nasa PIN 9 ng PT2558 IC * / Pt2558.setChannelVolume (dami, 4); / * itakda ang dami para sa channel 5 Alin ang PIN 10 ng PT2558 IC * / Pt2558.setChannelVolume (dami, 5); }
Ang nasa ibaba kung seksyon ay upang taasan ang dami.
// Ang parehong nangyayari para sa pindutan 2 Kung (button_2.isPressed ()) {Volume--; // ito kung tinitiyak ng pahayag na ang antas ng lakas ng tunog ay hindi bababa sa zero. Kung (dami <= 0) Dami = 0; Serial.print (“dami:“); Serial.printIn (dami); Pt2258.setChannelVolume (dami, 4); Pt2558.setChannelVolume (dami, 5); }
Pagsubok sa Digital Audio Volume Control Circuit
Upang subukan ang circuit, ginamit ang sumusunod na patakaran ng pamahalaan
- Isang transpormer na mayroong 13-0-13 Tapikin
- 2 4Ω 20W speaker bilang isang pagkarga.
- Pinagmulan ng audio (Telepono)
Sa isang nakaraang artikulo, ipinakita ko sa iyo kung paano gumawa ng isang Simple 2x32 Watt Audio Amplifier na may TDA2050 IC, gagamitin ko rin ito para sa demonstrasyong ito din.
Na-disorde ko ang mekanikal na potensyomiter at pinababa ang dalawang lead na may dalawang maliit na mga jumper cable.
Ngayon, sa tulong ng dalawang mga push-button, maaaring makontrol ang dami ng amplifier.
Karagdagang Pagpapahusay
Ang circuit ay maaaring karagdagang nabago upang mapabuti ang pagganap nito. Ang mga pagpapabuti tulad ng circuit ay maaaring gawin sa isang PCB upang higit na matanggal ang ingay na nabuo ng digital na seksyon ng IC. Maaari din kaming magdagdag ng isang karagdagang filter upang tanggihan ang mga ingay ng mataas na dalas. Gayundin, suriin ang iba pang mga circuit ng Audio Amplifier at iba pang mga proyekto na nauugnay sa Audio.
Inaasahan kong nagustuhan mo ang artikulong ito at may natutunan na bago dito. Kung mayroon kang anumang pag-aalinlangan, maaari kang magtanong sa mga komento sa ibaba o maaaring magamit ang aming mga forum para sa detalyadong talakayan.