CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

TMS320

DDS出力波形

DDSプログラムによる出力波形例です 周波数は計算どおり約440Hzになっています。 設定できる周波数の分解能はサンプリング周波数fs/テーブルブロック数となるので25kHz/8192で約3Hz。これは全帯域で一定ですが、楽音の周波数領域の3Hzは結構大きく楽器には…

波形発生ルーチン

DDSによる出力周波数Fは F=サンプリング周波数fs×N/デーブルブロック数 で与えられるのでNを算出してNづつテーブルを読み飛ばして出力すればいいわけです 以下がコーディングした波形発生ルーチンの抜粋で440Hzの正弦波を出力します N(=DELTA 位相速度)…

波形データ登録

ちょっとやってみたいことがあって、久々にDSP基板をいじっています DSPで波形を合成し音源にしようとしているのですが、正攻法では共振器を構成するところです。ですが、ここでは簡単に波形テーブルからデータを読み出してD/Aに出力、 DDSアルゴリズムで任…

DSP入手

手持ちでPLCCパッケージのTMS320C25があるので基板をもう一枚くらい仕上げようかと思っていたところジャンクのチップが大量に出ていたのでついつい買ってしまいました。はっきり言って1個50円以下です。 これで部品つき基板頒布なんてのもありかも。 デジタ…

コーラス・フランジャー

ディレイモジュールの遅延時間をダイナミックに変化させると信号のピッチや位相が揺らぎ原音と混ぜ合わせることでモジュレーション系のエフェクトを作り出せます。 ごく薄く掛けるとビブラートやコーラス効果、出力をフィードバックさせると強烈に音色が変化…

デジタルリバーブ(2)

この処理を行った出力波形です。 入力は1kHzのサイン波で今回は10波分のバーストです。 ディレイの全体の様子です。直接音の後に第1タップから第6タップからの遅延音が出力されています。 それぞれの到達時間は計算どおりで、第6タップでは166.4msと…

デジタルリバーブ

ディレイの単一出力をフィードバックさせると繰り返しエコーが得られますが、エフェクトとしては繰返しが規則正しすぎ、町の防災放送か野球場のアナウンスのようで不自然で品がありません。 実際の建物の中での反射音は複数回壁に反射してあゆる方向から来る…

デジタルディレイ(3)

信号処理のフロー中で信号レベルの調整ができるようにゲイン可変のモジュールを準備しました。 ソース中でうっかり実数型変数をつかうと浮動小数点処理に展開されコード効率がめちゃくちゃに悪くなるので固定小数点演算です 中身は単なる16ビット×16ビット=…

デジタルディレイ(2)

信号の遅延をオシロで測定しました。 ここで遅延時間が長いとオシロの管面に収まらないので一時的に短くしています。 遅延時間を短くするにはリングバッファを小さくする手もありますが、ここでは書込みポインタと読出しポインタの初期値に100のインターバル…

デジタルディレイ

楽器など音声信号に効果を与えるエフェクターとして代表的なものにディレイ、エコーといった時間系の処理がありますが、これをDSP基板で実現してみます。 基本的なエコー処理はこのようなアルゴリズムで示されますが、これはデジタル信号処理のフローそのも…

割込みC言語化

割込みプログラムをCで書いてみました。 割込みサービスルーチンをベクタで示される特定アドレスに配置することはCではできないのでリンカに対して指示を与えることになります。 コンパイラのマニュアルを読んで見ると、なるほどこういう指定がちゃんとあり…

フィルタ処理実行時間

フィルタ処理のコードはそのままで、係数テーブルのみそっくり入れ替えてハイパスフィルタを構成しました。 これもカットオフ周波数を1kHzとしています このフィルタ処理のDSP負荷率をみてみます。 前回と同じようにフィルタ処理の全てを行っている受信割り…

FIRフィルタ

DSPボードでFIRデジタルフィルタを実行してみました A/Dコンバータから取り込んだ値を時系列で入力バッファXnに格納し、それぞれにフィルタ係数h[n]を掛け合わせ総和したものをD/Aコンバータに送る処理になりますが これらをサンプリング間隔の1スロット間…

裸の周波数特性

DSP基板でADCの読取値をそのままDACに書いて折り返すプログラムの周波数特性を 見てみました。 PC上でテスト信号を発生するWaveGeneとFFTのWave Spectraを同時に起動し WaveGeneの設定をサイン波出力、周波数を20Hzから20000Hzまでスイープとなる 設定をして…

PC上でFFT

DSP基板でデジタルフィルタを構成した場合、特性が設計どおりかどうか実測してみなければなりません。 最初、オシレータとAC電圧計で対数方眼紙にプロットしていこうかと思っていましたがPCのサウンドボードをつかってオーディオアナライザ的な測定ができる…

割込み駆動化(2)

この状態でパラレルLEDをプローブしてやると割込みの状況がわかります。 コーデックの初期化でサンプリング周波数を25kHzに設定したので、正確に40μsごとに割込みが発生しています。 でもよく見ると2回づつ割込みが発生しているような・・・ この部分を拡…

割込み駆動化

前回のプログラムは割込みが終了するまでIDLE命令でDSPを待ちの状態にしてしまうのでDSPの利用効率が悪いといえます そこでメインルーチンは空ループにしておき、信号処理自体はADCデータ受信ごとの割り込みルーチンの中で全てやってしまう構造にしてみまし…

Cコーディング

統合開発環境にプロジェクト設定メニューを追加しました。 処理系をアセンブラ、Cコンパイラの選択とコマンドラインに与える簡単なオプション類の設定をおこないプロジェクトファイルに保存できるようになりました。 LEDチカチカプログラムもCで書けばDSPの…

ハード完成

というわけで、ハードが完成したので記念撮影。 左はかなり前に作成したC25プロトタイプ基板。今回とほぼ同じ回路ですがアナログI/Fは載っていません。中央が今回のボードですが、やはり基板外注と表面実装部品の多用で小さくまとまりました。 右は参考で…

A/Dコンバータテスト

コーデックのアナログ入力に発振器を接続し、14ビットA/D変換後、そっくりそのまま D/A変換してアナログ出力するループバックを行います DSP、コーデックの初期化の後、ループの中でA/D変換完了とD/A変換完了の割込みを待ちます LOOP ; メイン信号処理 IDLE …

OPアンプ交換

出力のオペアンプはDACのゲインを絞ればこのままでもいけますが、やはりS/N比の点からもフルスイングさせないともったいないので交換することにしました。 見つけたのがこれ。 単電源5Vでも動作し入出力フルスイング(レールtoレール)で最適です。 …

D/Aコンバータテスト

コーデック内のA/DコンバータとD/Aコンバータを同時に動作させ、 A/Dコンバータの変換完了(=受信完了)でD/Aコンバータにインクリメントデータを出力させてみます。 LEDチカチカのアナログ版といったところです。 以下はコーデックの初期化でサンプリング…

割込みテーブル

DSPとコーデックは専用の同期シリアルインターフェースで接続されますが 送受信チェック用のステータスフラグというのは存在せず、割込み駆動となります。 割込みベクタテーブルはプログラム空間の先頭部分にありますが、ここはモニタプログラムとともにROM…

統合開発環境

現状のプログラム開発方法は (1)テキストエディタでソースファイル作成 ↓ (2)コマンドプロンプト上でアセンブラをコマンドライン起動しオブジェクト作成 ↓ (3)ツールでターゲットボードにバイナリをDLL、実行。 の流れになります。 ここでエディタ…

コーデック実装

ハードウェアで最後に残っていたコーデック(TLC320AC01)をソケットに挿入しました。 マスタクロック10MHzを4分周した内部クロックや電源電圧を1/2にした基準電圧がICのピンに出力されているので一応動作はしているようです。 アナロググラウンドとデジタル…

LCD動作確認

キャラクタLCDを動作させようとするといくつか問題が出てきました 1.LCDの速度が非常に遅い LCDの/WR信号は簡単のためにGNDに固定してしまったのでコマンド間にはディレイを入れなければなりませんが、これが結構な無駄時間です。 ソフトタイマで処理しよ…

LCD I/F修正

液晶表示器のEクロックはI/Oアドレスデコーダの出力をそのまま使っていますが、 現状、I/Oはすべて1ウェイト入っているのでアドレス+I/Oストローブ信号から生成されるパルスは100+100nsで200nsあります。 ch.1:Eクロック ch.2:READY信号 液晶表示器のコン…

LCD接続

16桁×2行のキャラクタ液晶表示器を接続しようとしているところです。 すでにコネクタへのピンアサインを間違えていて直接親子ガメ式に乗せられないことはわかっています では、と、このようにフラットケーブルでつなげば偶数、奇数ピンが入れ替わって正しく…

モニタ組込み

以前作成したC25ボード用のモニタ、ホスト側制御プログラムはそっくりそのまま使えますが 体裁や一部コードの手直しなどを行いました ホストとターゲットボードの通信はテキスト伝文のやり取りではなく、数種のコマレスの組合わせによって 行われるので、単…

シリアル連続出力

シリアルコントローラには定番の8251を使っていますが 動作クロックを決めるのが多少厄介です ボーレートを38400bpsとした場合、 非同期通信なので内部分周比は×16または×64を選択することになりますが 使用した三菱M82C51APFでは、送受信クロックの最大…