PIC16F1503。 ポンプ用手押し車-1.音

すべての親は、チェックアウト時に店で何かを持つ子供を発見する瞬間を持っていると思います。子供は、これが地球上の全世界、特に彼にとって非常に重要であると主張します。 それでまた私に起こった。 すぐにこれの費用を評価して、親ヒキガエルは手を振って、一度我々が生きて、まだすべてのお金を稼がないと決めました。 理由は、これの死の速さを高く評価し、また緑色の光を与えました。



その結果、子供たちの艦隊は中国工学のそのような奇跡を補充されました。 「シャンデリア」とウインチを備えたジープ!







奇跡は「シャンデリア」と「ヘッドライト」を点滅させ、3つの録音された音を大きくすることができました。 すべての規範によると、機械はすぐに「死」、修理のために持ち込まれました。 私は車を修理に出すことを拒否し、洗っていない手と栄養不良の夕食で拒否したことを説明しました。 さらに、中国人はどういうわけか、私の頭蓋骨(多くの歯が痛む)に共鳴する周波数で、このマシンからいくつかの余分なデシベルを絞り出すことができたので、同じ感覚を再体験するためにまったく笑いませんでした。



長い交渉の結果、バッテリーの簡単な交換はもはや流行ではないと判断されました。 結局のところ、すべての実際のドライバーは特別なスタジオで車を調整し、その後誰も持っていない車を運転します。 だから私はチューニングのためにスタジオ「All My」に車を持ち込みました...



最初にすることは何ですか? そうです、どれだけの作業が私たちにかかったかを評価するために。 車を分解します。





内部には3つのLED(青、明るい、安い)、ツイーター、未知の中国の鼻水クラスマイコンがあります。 これらはすべて3個のLR4バッテリー(20mAh程度の容量)で駆動されるため、自動車がこんなに早く死亡したのは驚くことではありません。 この素晴らしさはすべてボタンによって引き起こされます。ボタンは、中国の自動車産業の最高の伝統で、つかんで噛みます。



一般に、ここですべてを変更する必要があります。 まあ、またはほとんどすべて。 何のために?



もちろん、STM32F4を内側に貼り付けても構いませんが、評価ボードが入り込むことはありません。 この下で回路基板を開くことは率直に言えば怠。です。 引き出しをざっと見て、PIC16F1503にデモボードを見つけました。 最大16メガヘルツ、3キロバイトのフラッシュ、最大128バイトのメモリ。 最もそれは機械のためです!



私の練習を繰り返したい場合は、OlimexのPIC-H1503(これはマイクロコントローラー自体)とPIC-KIT3(これはプログラマー)に従って検索する必要があります。 また、microlab WebサイトからMPLAB X IdeおよびXC8をダウンロードしてインストールする必要があります。 OTとは異なり、Windows、Linux、およびOS Xがサポートされています。



チューニングを開始する方法は? そうです、すべてを音で始めましょう。 声を大きくする必要はありません。「警察で」聞こえる必要があり、声を大きくする必要はありません。



機械からキーキーを取り出し、それが何であるかを理解しようとします。 識別マークが見つからないため、抵抗計にしがみついています。 オーム計は15オームを示します。 これは、マイクロダイナミックスピーカーを意味します。抵抗計が「崖」を示した場合、これはピエゾツイーターです。



スピーカーをマイクロプロセッサの脚に直接接続することは意味がありません(3ボルトで15オームは200 mAの電流を与えますが、マイクロコントローラは目で20であることは明らかに気に入らないでしょう)。







宗派は実質的に重要ではありません。 回路のプラスまたはマイナスはほとんど変化をもたらしません。 回路内にコンデンサを配置する理由は、後で説明します(原理的には、トランジスタと並列に接続できます)。 入力は、マイクロコントローラーの9番目のレッグに接続されます。



今では、音を抽出する方法を理解する必要があります。 学校の物理学コースから、音は空気の振動であることを知っています。 そして、スピーカーは電気の振動を空気の振動に変換します。 そのため、スピーカーを振る必要があります。 しかし、スピーカーはマイクロコントローラーに直接接続されており、「1」(足があります)と「0」(何もありません)しか出力できません。 はい、でも(偶数ですか?はい、これはまれです)このマイクロコントローラーには5ビットDACがあります(もしあれば、シングルビットのものから自分自身を引きずります。スメール)。しかし、これはスポーツではありません。



物理学は再び私たちを救います:スピーカーに「1」を置いても、「0」の直後に磁石がリリースされないように、磁石はディフューザーをすぐに引き上げません。



最も簡単なことは、このようなコードを書くことです

while(1) { dinamikON(); pause(1); dinamikOFF(); pause(1); }
      
      







一時停止がミリ秒単位でカウントされる場合、ダイナミクスでは500Hzで「きしみ」が発生します。 また、ポーズの長さを変更することで、自分自身に適切なサウンドを得ることができます。 問題は何ですか? 問題は、「脚のけいれん」に常に注意をそらす必要があることです。



しかし、まともなマイクロコントローラーにはPWMのようなものがあり、それはPWMでもあります(それは何ですか?同じウィキペディアで写真と長い説明で簡単に探します)。 彼女はピークにいます。 MPLABを開き、新しいプロジェクトを作成し、Code Configurator([ツール]の[埋め込み]メニュー。最初にプラグインにインストールする必要がある場合があります)を使用して、新しいPWMを追加します。







足の便利さだけのためにPWM4を使いました。 ピーク時のPWMはタイマーなしでは実行できないので、見てみましょう。







まだ何も明確ではないので、「コードを生成」をクリックして結果を実行してみてください。 いつものように、何も起こらないはずです-プログラムはありません。 VDDに関するエラーが発生した場合、Run-Project Configuration-PICKit3-Powerで、PowerターゲットCircuitの隣のボックスをチェックする必要があります。 ボードを「作業中」にプログラムすることは可能ですが、プログラマーからの電流は常に回路に電力を供給するのに十分ではありません。



最初のコードをダイヤルします。 すべてがmain.cで行われ、そこでブロックをコメントで分割しました。



 uint16_t count; for(count=0; count<1024; count++) { PWM4_LoadDutyValue(count); __delay_ms(10); }
      
      







オシロスコープをアップロードして、一方の入力をマイクロコントローラーの出力(青線)に、もう一方をスピーカー(赤)に接続します。







それで、私たちは何を見ますか? 青い線はPWMの結果です。 0から100%まで充填し、再びゼロにジャンプします。 しかし、フィリングの真ん中のどこかにある赤い線は、サイン波に漠然と似ています。 正直に言うと、この遠隔性は、美しいgifを得るために、0.47 uFのコンデンサをトランジスタと並列に接続することで得られます。 実際の写真は以下のとおりです。



コンデンサを取り外します。



赤のピークが見えますか? この「リバース」スピーカーはジェネレーターのように機能し、3xから電力を供給されると簡単に1ボルトを放ちます。 原則として、特定の条件の下で、回路を焼くのは簡単です。 しかし、ここでは、これらのピークは誰も気にしませんので、Conderをインストールするかどうかはあなた次第です。 私は美のために設定しました。



もう一度入れます。 すでにありましたが、この写真は静的です。



0.1μfに変更します。 音の容量の影響を比較して表示するだけです:)





原則として、すでに15キロヘルツのきしみ音を受け取っていますが、蚊を除いて誰がそれを必要としますか? そのため、周波数を調整する必要があります。 PWMの周波数はタイマーに依存し、タイマーが「ティック」する頻度は、タイマーが起動するたびに設定されるカウンターに依存します。



つまり、タイマーアルゴリズムは次のようになります

-タイマーを開始します。

-タイマーがカチカチになり、カウンターが減少しました。

-カウンターはゼロですか? そうでない場合は、再度チェックします。 その場合、割り込みを生成します。



割り込みハンドラー:

-ああ! タイマーが作動しました!

-タイマーを再度リセットする





そして今、PWMの開始はタイマー割り込みにフックされているだけです。 また、「ティック入力」の周波数(設定のプリスケーラー)とカウンター値の両方をツイストできます。



コードを変更します(stage2です)



 uint8_t count; for(count=0;count<256;count++) { PWM4_LoadDutyValue(count*2); TMR2_LoadPeriodRegister(count); __delay_ms(100); }
      
      









美しい赤い線を見て、それが正弦波から遠く離れており、周波数が変化していることがわかります。 はい、耳は確認します。 必要なもの!



PWMの塗りつぶしを変更する理由は、自分で考えることをお勧めします。 しかし、原則として、精神的にスケジュールを継続し、1つのパラメーターの変更を遅くすると、すべてが明確になります。 特に高度なものは、プロテウスなどのエミュレータで同様の画像を見ることができます



取得した周波数範囲を確認しましょう



255でカウントを破りました



そして今、私たちは10に入れます





グリッドピッチが示されている右上隅に注意してください。 「目で」私は約300-5000Hzの範囲を得ました。 かなり。 そして、頭蓋骨は「乗車」しません。 完璧主義者は、周波数メーターを使用するか、クロック周波数とプリスケーラーから実際の値を計算できます。



しかし、その後、問題が発生しました。 私はそれがどのように聞こえるのか理解していません。 大ざっぱに言えば、チュクチ音楽では読者ですが、作家ではありません。



どの周波数がどの音に対応するのか、半分にはほとんどわかりませんでした。「クリスマスツリーが森に生まれた」というような音を見つけました。



遅延を数え、書いた



 #define do 243 //523Hz #define re 239 //587 #define mi 236 //659 #define fa 231 //739 #define sol 229 //783 #define la 224 //880 #define si 218 //987 // and again +523Hz const uint8_t elka[29]={do,la,la,sol,la,fa,do,do,do,la,la,si,sol,do,do,re,re,si,si,si,la,sol,fa,do,la,la,sol,la,fa}; void play(uint8_t p) { // 255 - 3ms period - 300Hz // 10 - 0,2ms - 5000Hz PWM4_LoadDutyValue(p*2); TMR2_LoadPeriodRegister(p); } .... uint8_t count; for (count = 0; count < 29; count++) { play(elka[count]); __delay_ms(300); PWM4_LoadDutyValue(0); TMR2_LoadPeriodRegister(0); __delay_ms(50); }
      
      







コンパイル、起動。 いいえ、メロディは問題なく推測されますが、そうではありません。 抵抗とコンデンサを選択することで、出力で「ほぼ正弦波の鋸」を実現しましたが、耳には違いが聞こえます。



最後に、私は通常のツートーン信号「高低」で停止しました。 ハリウッド映画の誰もが知っている古典的な警官「すごい」は私にはうまくいきませんでした。 そして、「警察のシレーヌトーンコードプログラムの例」に対応するGoogleは、必要なものだけではなく、何でも提供します。



助けてください? スカンブリングはどの順序でそこに行きますか?



原則として、次のステップとして、通常のwavを取得して再現する段階にすでに達しました。 つまり、トーンなどで苦しむことはありません。 音声を録音し、消化可能な形に変換して再生するだけです。 さまざまなScreamTrackerが当時と同じように。



唯一の問題があります:PCM形式の音声の0.5秒、モノラル、8KHzサンプリングでは、約1キロバイトかかります。 そして、私はたった3キロバイトしかありません。 しません。 ただし、Googleの「pic pcm sound」と入力するだけで、原則と例をよく理解できます。 そして、最初のリンクからは、ソースとプログラム自体があります。



したがって、私たちはプログラマーが注意を必要としない本当の「当時の温かい管音」を手に入れることができるという事実に満足しています。彼はどの周波数にこだわるのかを言い、自分の仕事に取り掛かりました。



しかし、音は戦いの半分です。 良い光もこのチューニングの特徴です :)しかし、これは少し後です。



いつものように、すべてのピースを含むMPLABの完成したプロジェクトをここで選択できます。



All Articles