はじめに
デバイスの名前はかなりうるさいことがわかりましたが、実際には単なる楽しいおもちゃです。 とはいえ、私たちはギターを弾きながら友人とドラマーとして何度か使っていました。
何を集めているの? 打楽器の録音サンプルを再生するためにクリックすることで、8つのタッチボタンを持つデバイスを組み立てます。
完全なデバイスは次のとおりです。

そして、これはそれがどのように働くかです(ケースに置かれる前のビデオドラムで)。
構造的には、デバイスはドラマレコーダーボード自体で構成され、その上にコントロールコントローラー、mikruhaフラッシュメモリ、SDカードスロット、12ビットDACおよびアンプ、ループケーブル(SPIインターフェイス)とスピーカーでメインボードに接続されたセンサーボードがあります。 これらすべての電子機器は、古いGeniusスピーカーのケースに完全に収まります。

一般に、このビジネスを採用することをお勧めします-多少大きな音を出力するデバイスを組み立てており、どちらの場合にそれを押し込むかを考えている場合は、古いスピーカーを見て、彼らがあなたに合っている可能性は十分にあります。
回路にもディスプレイがありましたが、テストメッセージに加えて、何も表示し始めなかったため、無視しました。
タッチキーボードを組み立てる方法対応する記事で既に説明しました。 メインボードの回路に目を向けます。
回路
デバイスのレイアウトは非常にシンプルです。 4ワットの増幅器は、完全にデータシートで推奨されているスキームに従って、TDA1904チップに組み込まれています。 コンデンサC14によって電圧の不必要な一定成分をカットします。R2とC16のローパスフィルターは、DACの後の波形を復元します(いわゆる補間フィルター)。

デジタルパーツは、ATMega32マイクロコントローラー、AT25FD161フラッシュメモリチップ、SDカード、および12ビットDAC7611 DACで構成されています。 外部タッチキーボードを含むすべての周辺機器は、SPIバスを介して接続されます。

私の最初のプロジェクトの1つであるプロジェクトは古いため、コンポーネントの選択が理想的とは言えません。 当初、計画はナポレオンだったので、私は「より大きな」メガを取り、ディスプレイを貼り付けました-実際には、それが現在組み立てられている形で、ATMega88で十分です。 メガとDACは5Vで駆動され、カードとフラッシュドライブは3.3を必要とするため、レベルは分周器と一致しています。 これは良い解決策ではありません。今はしませんが、信号面を圧倒しないように特別なコンバーターを使用します(そして何よりも、3.3Vエレメントで回路全体を構築します)。
SDカードについては、接続するときに、次のサイトの情報を使用しました。
ABPでの作業を開始した場合は、必ず多数の興味深いプロジェクトと有用なドキュメントが用意されていることを確認してください。
このデバイスは9Vバッテリーで駆動され、アンプはそれから直接駆動され、デジタル回路は3.3および5Vの線形安定器を介して提供されます。

原則として、回路部分に関係するのはこれだけです。 プロジェクトは2年以上前であるため、何かを見落としているか、回路がハードウェアで組み立てたものの古いバージョンであることが判明した可能性がありますが、主なアイデアを伝えました。 あなたが私が提案したことを繰り返して改善したいなら、それはあなたにとって難しいことではありません。
ソフトウェア実装
どのように機能しますか?
もともとこれをどのように考えていたのかという質問(ディスプレイなど)を省略すると、次のようになります。カードからサンプルを直接再生しなかったのは、 データを読み取るのに十分な時間がないのではないかと心配したため(SDI SPIモードはかなり遅い)、カードを使用してサンプルをUSBフラッシュドライブに一度転送した後、デバイスから切断し、再度接続しませんでした。
デバイスは、数ミリ秒ごとにSPIキーボードをポーリングし、そこからデータを受信して、どのボタンがクランプされているかを見つけます。 彼には「ポリフォニー」がないため、最後に押されたものが優先されます。 その後、タイマーが開始され、16 KHzのサンプリング周波数で、対応するサンプルボタンがフラッシュドライブから読み取られ、DACに発行されます。
カードを操作するためのプログラムの原則は、すでに言及したサイトに記載されています。 つまり、カードはSPIと標準の2つのモードで動作できます。 デフォルトでは、標準モードが有効になっており、SPIでは1つのコマンドのみを受け入れることができます-モードを切り替えます。 標準モードでは速度に追加の制限が課せられず、1本ではなく4本の導体のバスを使用できますが、CRC計算が必要です。 したがって、カードにはモードを変更するコマンドが与えられます(このコマンドではCRCがチェックされますが、事前に計算してハードコードで出力できます)。その後、同じコマンドで通信できますが、CRCなしでは標準SPI信号です。 カードを操作するためのライブラリはこちらにあります 。 繰り返しになりますが、AVRに関与しているのはこのリンクをお気に入りに追加することです。これは周辺機器ドライバー(カード、ディスプレイなど)、プロトコル実装などを含む巨大なライブラリです。 ファイルシステムでエネルギーを無駄にしないために、16ビットx 16 KHzでエンコードされたサンプルが、カードの最初のバイトから生で追加されました。 これは、物理メディアへの低レベルの記録を可能にする優れた16進エディターであるWinHEXを使用して簡単に実現できます。 同じ形式で、サンプルはフラッシュメモリチップ上で上書きされます。 便宜上、すべてのサンプルの期間は同じで、8000個のサンプル(16KHzのサンプリング周波数で0.5秒)になります
DACとフラッシュドライブの操作も簡単です。DACは、最上位ビットである12ビットのデータを送信し、LDピンにジャンプするだけで済みます。つまり、入力レジスタから内部レジスタに転送します。 メガはバイトで動作するため、16ビットのゼロに12ビットを追加する必要があります。
フラッシュドライブは、読み取り、消去、および書き込みコマンドを受け入れます。 読み取り/書き込みコマンドの後、次のように、ストリームによってデータを受信/返すことができます。 その中のアドレスカウンターは自動的にインクリメントされます。
いつものように、プログラムコードを共有できれば幸いです。しかし、残念ながら、ハードディスクのフォーマット中にソースコードが失われたようです。見落としたため、保存しませんでした。しかし、タイマーを16 KHzに設定して割り込みを発行することは難しくないと思いますDACでは、フラッシュドライブから読み取られた値)
おわりに
トレーニング中に開発された私の古いプロジェクトについての記事を書くのは数年後にはかなり面白いと言わなければなりません。 「ええ、私は何をしているのか、違うやり方でできたならもっと良かったのに!」 要素ベースも静止していないという事実は言うまでもなく、同じSTM32F1xxで同様のデバイスを開発する場合、外部DAC(組み込みのものがあります!)またはレベルの調整(カードのように3.3Vから給電)を心配することはできません)、またはカードとの通信についても(STMkaはCRCを使用して通常モードで通信できます)。 ただし、このプロジェクトが何であれ、デバイス開発の優れたトレーニングとして役立ちました。 したがって、すべての初心者にお勧めします。点滅するLEDを習得した後、興味のあるプロジェクトを選択して、それを実装してみてください。 誰でも-私が説明したドラムでさえ、インターネットでカバーされている他の何百ものAVRプロジェクトの少なくとも1つ、あるいはそれ以上-完全に私のものです。 最終的にそれが元々考えられていたものではないことが判明し、後でそれはあなたにとって単純で曲がったように見えますが、それはあなたに非常に有用な経験を与えるでしょう。
開発に頑張ってください!
PS
記事からのリンク:
- ABPの特定のデバイス開発者のサイト、多くのプロジェクトおよび有用な情報-特に-SDカードの使用: http : //elm-chan.org/docs/mmc/mmc_e.html
- AVR用の周辺機器ドライバーとその他の便利なライブラリの巨大なライブラリ: http : //www.procyonengineering.com/embedded/avr/avrlib/
- wikiのWinHEX hexエディターに関する情報: http : //en.wikipedia.org/wiki/WinHex
- 典型的な接続図を示し、すべての詳細の目的を説明するTDA1904のデータシート: http ://www.datasheetcatalog.org/datasheet/stmicroelectronics/1445.pdf