AVR

ムライボックス (13) --- ソフトウェア (5)

ストップ・ビットの中央付近で「送信完了」のフラグが立つタイプの UART では、残りの 1/2 ビット・タイム (約 16 μs) 期間の、まだストップ・ビットの中にいる状態で次のキャラクタ・データの書き込みを終えることができれば余分なアイドル状態が挿入される…

ムライボックス (12) --- ソフトウェア (4)

ソフトウェアの話の続きです。 MIDI IN から入力される MIDI ストリームを UART RX から 1 バイト読む MIDI チャネル番号書き換え、ビットマスク・パターン読み出しなどの処理 マスク・パターンの出力、および MIDI バイトを UART TX に出力 という処理の流…

Arduino スケッチで AVR インライン・アセンブラを使う

Arduino IDE では、特に「ファイルをプロジェクトに追加」のような操作をしなくても、メインのスケッチ (.pde / .ino ファイル) があるフォルダに含まれている C/C++ ソース・ファイル (.c / .cpp) を拾ってくれて自動的にコンパイル/リンクしてくれます。 …

無限音階オルガン (1)

220 円の PIC32MX による USB MIDI ホストと組み合わせるのにふさわしいローコストな音源を、ふたつの「はやり」 無限音階オルガン MIDI からの電源供給 に乗っかって作成することにしました。 ターゲットのチップとしては、110 円の LPC1114FN28/102 を考え…

アナログシンセの VCO ブロック (60) -- マルチ出力アンチログ回路の測定 (9)

今回は、現在実装されている 2 つの VCO 間の「混変調」というか「クロストーク」というか、VCO 間相互の影響について調べてみました。 結果としては、問題になるレベルではありませんでした。 トランジスタ・アレイ TD62507 では、16 ピン・パッケージの中…

アナログシンセの VCO ブロック (59) -- マルチ出力アンチログ回路の測定 (8)

これまでは、 ピンポイントの温度における MIDI ノート番号全体に渡る特性の測定 広い温度範囲に渡るオクターブ・スパンの特性の測定 を、それぞれ行ってきましたが、今回は 広い温度範囲での全 MIDI ノート番号に渡るピッチ誤差特性 を リワインド型 VCO リ…

アナログシンセの VCO ブロック (57) -- マルチ出力アンチログ回路の測定 (7)

前回の測定後も測定は続行しており、計 56 時間 (2 日と 8 時間) に渡るデータを収集しました。 温度変化の幅は、最低 23.9 °C から最高 33.6 °C までの 9.7 °C となりました。 9 月 22 日 09 時ごろに測定開始した以降の経過時間と室温とのグラフを下に示し…

アナログシンセの VCO ブロック (56) -- マルチ出力アンチログ回路の測定 (6)

オクターブ・スパン誤差の温度変化の測定を始めました。 今回、実験回路は Arduino の「シールド」の形で作成したので、必要なコントロールはすべて Arduino で行い、シリアルで接続する PC は測定結果のロギングだけに使っています。 とりあえず、室温 27.5…

アナログシンセの VCO ブロック (55) -- マルチ出力アンチログ回路の測定 (5)

残りの 1 系統にリセット型 VCO を実装して、測定を行いました。 アンチログ出力トランジスタから VCO までの部分の回路図を下に示します。 左側が今回追加したリセット型 VCO です。

アナログシンセの VCO ブロック (54) -- マルチ出力アンチログ回路の測定 (4)

PWM CV マルチプレクサ + LPF + アンチログ出力トランジスタ部の回路図を下に示します。 LPF 部は OP アンプを 1 個使用した 3 次アクティブ・フィルタの構成になっています。 OP アンプは、ありあわせで MOSFET 入力の NJU7032 (JRC 製) を使用しています。…

アナログシンセの VCO ブロック (53) -- マルチ出力アンチログ回路の測定 (3)

Spice の Ebers-Moll モデルでは、バイポーラ・トランジスタが大電流領域において理想 PN 接合の特性からズレてくる効果を、理想 PN 接合による「真性トランジスタ」の外部に直列抵抗を接続することにより表現しています。 直列抵抗の「実体」としては、端子…

アナログシンセの VCO ブロック (52) -- マルチ出力アンチログ回路の測定 (2)

今回は、CV に対する VCO 出力周波数のピッチ誤差の測定結果を示します。 PWM による DA でアナログ CV を作り出すわけですが、今回は ATmega168/328 の 8 ビット・タイマである Timer2 を使って PWM 波を発生させることにしました。 Timer0 は Arduino のシ…

アナログシンセの VCO ブロック (51) -- マルチ出力アンチログ回路の測定 (1)

マルチ出力アンチログ回路で、マルチプレクサ → LPF → アンチログ → VCOの系統をとりあえず 1 系統のみ実装した基板を作成しました。 複数出力間の干渉のようすを調べるために、最終的には 2 系統を実装するつもりです。 3 系統以上を実装する予定はありませ…

アナログシンセの VCO ブロック (50) -- ATtiny13 版プログラム (3)

ATtiny13 を含む多くの AVR マイコンと、ATtiny10 とでは、入力ポートのプルアップの設定に関する設定方法に差があり、それに対応して ATtiny13 用プログラムではディスチャージ用の 3 ステート出力操作を変更する必要があります。 また、ATtiny10 用のプロ…

アナログシンセの VCO ブロック (49) -- ATtiny13 版プログラム (2)

ATtiny13 版のプログラム・リストを下に示します。 ATtiny13 ではコンパレータ入力として内部バンドギャップ・リファレンス (約 1.1 V) を選択できるので、そのサポートも付け加えてありますが、動作確認はしていません。 外部クロックへの切り替えは、プロ…

アナログシンセの VCO ブロック (48) -- ATtiny13 版プログラム (1)

約 1 年前 (2012 年 6 月 29 日) に書いた記事 http://d.hatena.ne.jp/pcm1723/20120629 のマルチ出力アンチログ回路の温度特性を調べる実験の準備を始めました。 VCO 回路の簡略化および高精度化を目指して、マイコンによる「ディジタル・サイリスタ」を使…

ICSP 接続で PIC32MX のフラッシュに書き込む (14)

LPC1114 / NUC120 / ATmega / Arduino 共用のソース・パッケージと、Arduino のスケッチをアーカイブしたものを公開しました。(→ こちら) ファイル名は。LPC1114/NUC120/ATmega/Arduino 版、Arduino スケッチ版それぞれ、 pic_icsp-20130722.zip icsp_arduin…

ICSP 接続で PIC32MX のフラッシュに書き込む (13)

Arduino ライブラリを使わない「素」の AVR ATmega 用プログラムに「空っぽ」のメイン・スケッチ・ファイルを追加し、「形式上」 Arduino スケッチ化することができました。 (Arduino 1.0.5 のみ確認、他のバージョンでは未確認) 最も簡単には、 20130706 版…

ICSP 接続で PIC32MX のフラッシュに書き込む (12)

LPC1114 / NUC120 / ATmega 共用のソース・パッケージを公開しました。(→ こちら) ファイル名は pic_icsp-20130706.zipです。 Atmega 版のソース・プログラムは C 言語で記述されたプログラムとなっており、Arduino の「スケッチ」としては実現できていない…

ICSP 接続で PIC32MX のフラッシュに書き込む (11)

移植第 2 弾として、Atmel AVR ATmega328P/168/88 用のプログラムを作り、動作を確認しました。 フラッシュ 8 K、RAM 1 K におさまったので、ATmega88 でも動作します。 「ハードウェア」としては、専用に回路を作るほかに、既存の「Arduino」(互換ボード) …

円周率の計算 (13) -- BBP 公式による計算 (2)

今回は AVRStudio で ATtiny13A 用にコンパイルするソースファイル一式を掲載します。 使用したのは AVRStudio 4.19 (build 730) gcc Version 4.5.1 (AVR_8bit_GNU_Toolchain_3.3.0_364) の組み合わせで、他の環境では試していません。 まず、AVRStudio で A…

円周率の計算 (12) -- BBP 公式による計算 (1)

フラッシュ ROM 2 K バイト、RAM 128 バイトの ATtiny2313 で円周率Πの値を BBP 公式 (後述) を使って UART 経由で 16 進数で 4000 桁出力するという記事 (ドイツ語のサイト) 4000 Stellen von Pi mit ATtiny2313 – Mikrocontroller.net があることを知り、…

ATtiny10 用プログラム (18)

ATtiny10 の 6 番ピン (PB3) の特性を測定するのに使った回路を下に示します。 外部から PB3 に電圧を与えて、PB3 側に流れ込む電流 (シンク電流) の向きを「正」とし、ソース電流の場合は「負」とします。 電流検出回路を構成して、電圧値として読み出すこ…

ATtiny10 用プログラム (17)

今回は、マイコン・チップ上のフラッシュ・メモリにオブジェクト・プログラムを書き込むという意味の「プログラミング」の話題です。 ATtiny10 では、フューズ・ビットの設定により、通常はリセット端子として使われる 6 番ピンを PB3 の入出力ポートや、そ…

ATtiny10 用プログラム (16)

「scr_tn10.asm」プログラムについて、いくつか補足の説明をしたいと思います。 まず、「SYNC_MODE = 2」、つまり、外部 SYNC 入力モードの場合の波形写真を下に示します。

ATtiny10 用プログラム (15)

VCO 回路の「コンパレータ + ワンショット」部分として機能する ATtiny10 のプログラム「scr_tn10.asm」のソースを下に示します。 AVR Studio 4.19 で「Atmel AVR Assembler」プロジェクトとして「scr_tn10」を新規作成し、デフォルトで自動作成される空の「…

ATtiny10 用プログラム (14)

VCO 回路の「コンパレータ + ワンショット」部分を ATtiny10 のプログラムとして実現しました。 (gcc の gas ではなく)AVR ネイティブのアセンブラで書いてあり、そのソースリストは次回に掲載します。 タイマ IC 555 を使ったリセット型 VCO 回路なら 555 …

ATtiny10 用プログラム (13)

ATtiny10 版の MIDI to CV プログラム「m2c_tn10」のソースリストを下に示します。 FM 音源プログラムの MIDI データ処理部を再利用しているので、機能を削った部分はコメント・アウトしたり、#if (0) 〜 #endif で無効にしており、プログラム・ソースとして…

ATtiny10 用プログラム (12)

ATtiny10 版の MIDI to CV プログラムができました。 ソースリストは長くなるので次回に掲載します。 Arduino につないだままではなく、「応用回路」中に差し替えた場合の回路図を下に示します。 シリアル MIDI / レガシー MIDI インターフェース回路部分に…

ATtiny10 用プログラム (11)

ピン変化割り込みと AD 変換完了割り込みを利用したソフトウェア UART 受信プログラムのソース・リストを下に示します。 AD 変換完了割り込みサービス・ルーチン (108 バイト) ピン変化割り込みサービス・ルーチン (50 バイト) 初期化関数 tn10_sw_uart_setu…