Arduino

Arduino を使った ATtiny10 の書き込み (3)

今回は前回の記事に関して、いくつかの補足を示します。 まず、前回は、ライセンスについて明記しませんでしたが、このプログラムは Atmel の AVR918 のソースにわずかな変更を加えただけなので、もともとの Atmel のライセンス条件がそのまま適用されるもの…

Arduino を使った ATtiny10 の書き込み (2)

Arduino を AVR918 相当のデバイスとして機能させるスケッチ「Arduino918」を作って、ATtiny10 の書き込みに成功しました。 バイナリ・スケッチ・サイズは 2612 バイトです。 スケッチのアーカイブ・ファイルと readme ファイルを以下の Yahoo ボックスに置…

Arduino を使った ATtiny10 の書き込み (1)

最近話題の「米粒 AVR」こと 6 ピン SOT-23 パッケージの「ATtiny10」を私も手に入れましたが、TPI (Tiny Programming Interface) 方式の ATtiny10 に対応したプログラム書き込み器は持っていません。 新たなデバイス/ハードウェアの購入や、書き込み器の組…

円周率の計算 (9)

8 月 20 日の記事で検討した spigot アルゴリズムの変更点を、8 月 15 日の記事の Arduino 用のスケッチに適用し、乗除算部分をインライン・アセンブラによる 8 ビット演算に置き換えたプログラムを下に示します。 (Spigot 関数の部分のみ) 全体のスケッチの…

円周率の計算 (5)

8 月 13 日版のプログラム・リストを下に掲載します。 (8 月 17 日追記: コメント中の aran255 の公式の 44*acot(2072) の符号が誤っていたのを修正しました。 プログラム本体には誤りはありません。)

円周率の計算 (4)

8 月 9 日版のプログラムを改訂し、ATmega168 使用の Arduino でも修正なく実行可能にした 8 月 13 日版のプログラムを作りました。 バイナリ・スケッチ・サイズは 5602 バイトです。 プログラム・リストは次回、掲載します。 今回のプログラムでは、arctan …

円周率の計算 (3)

前回までの記事で書き忘れていたことがあったので、補足しておきます。 まず、「pi_atan.pde」の中の #define ADDSUBONLY 1 の行を削除あるいはコメント・アウトして、「ADDSUBONLY」というシンボルが未定義な状態にすると、MUL / ROL 命令を使ったプログラ…

円周率の計算 (2)

Arduino 用のスケッチを下に示します。 (8 月 11 日追記: ATmega328P を使ったタイプの Arduino 用のプログラムです。 ATmega168 を使ったタイプでの実行には修正が必要になります。 修正方法は 8 月 11 日の記事を参照してください。) 「pi_atan.h」と、「…

円周率の計算 (1)

今回からは、シンセ関係から離れて、円周率の計算について触れたいと思います。 それと言うのも、20 個ほどの LSTTL を使った「RETROF-8」という 8 ビット・コンピュータを製作されている方がいて、Web サイト上で進行状況を公開されています。 TTLのみでコ…

FPGA 版 FM 音源 (24) -- YMF262 測定 (16)

エンベロープ・ジェネレータ・シミュレータのスケッチ "EG.pde" を下に示します。 16 MHz クロックの ATmega328P を使用した Arduino 互換ボードと、Arduino 0022 IDE 環境でコンパイルして確認してあります。 スケッチのバイナリ・サイズは 4 KB 程度なので…

FPGA 版 FM 音源 (23) -- YMF262 測定 (15)

前回の EG プログラムを Arduino 上の「スケッチ」として実現してみました。 スケッチ自体は長くなるので、次回に回し、今回は簡単な説明のみ行います。 今回は、「音」や「EG 波形」の出力をメインに考え、Arduino に接続したノン・オーバーサンプリング・…

アナログシンセの VCO ブロック (43) -- 温度補償回路(9)

温度補償回路の温度特性を測定してみて、効果があることが確認できました。 予備実験として、トランジスタ・アレイ内のトランジスタを「ヒーター」として利用して温度設定する方法も試してみたのですが、差動ペアのトランジスタ間に無視できない温度勾配が生…

Arduino 周波数/周期カウンタ (10)

前回の最後の図を下に再掲します。 このグラフは、 ある特定の ICR1 の値 (となるような CAPT タイミングを発生する OCR1B の設定) で、 CAPT 割り込みサービス・ルーチン内で TOV1 フラグの状態を観測し、記録するのを 10000 回繰り返すことにより発生頻度…

Arduino 周波数/周期カウンタ (9)

CAPT と OVF のタイミングの関係を推測するために行った実験のようすを説明したいと思います。 CAPT 割り込みの発生タイミングを、1 クロック単位で可変するために、同じタイマ 1 の PWM 出力である OC1B 端子とコンペアレジスタ OCR1B を使いました。 analo…

Arduino 周波数/周期カウンタ (8)

前回の最後の図、つまり、 OVF 割り込み要求の方が先に発生するが 実行中の命令が 2 サイクル (以上) かかるので 命令実行中に優先度の高い CAPT 割り込み要求に「追いつかれて」しまい、 命令終了時に優先度の高い CAPT 割り込みの方が先にサービスされてし…

Arduino 周波数/周期カウンタ (7)

以降の記事では、記述を簡略化するために、WinAVR (AVR 用 GCC) の割り込みベクトルの表記にしたがって、 「インプット・チャプチャ」を「CAPT」 「タイマ・オーバーフロー」を「OVF」 と略記します。 たとえば、「インプット・キャプチャ割り込み」は「CAPT…

Arduino 周波数/周期カウンタ (6)

LPF 出力部の OP アンプの直線性が気になったので、LMC662 を使った場合と、 TLC272 を使った場合との、出力電圧が小さい領域での直線性の測定を行い、比較してみました。 結果のグラフを下に示します。

Arduino 周波数/周期カウンタ (5)

前回とほぼ同じハードウェアで、XR2206 を自動測定してみました。 LM331 の結果と合わせてプロットしたグラフを下に示します。

Arduino 周波数/周期カウンタ (4)

周期測定ライブラリを利用してリニア VCO の特性を自動測定する Pakurino (Arduino) 用のスケッチを作成し、LM331 についてデータを取ってみました。 結果のグラフを下に示します。 20 Hz から 20 kHz までの 10 オクターブの範囲で、誤差は ±4 セント程度に…

Arduino 周波数/周期カウンタ (3)

12 月 7 日の記事の「PeriodCounter」ライブラリを使って、200 Hz の信号1〜2周期の測定を多数回繰り返してみたところ、やはり数千分の1程度の頻度でエラーが生じました。 エラー対策のための修正を施したバージョンで同じ測定を試すと、ほほ丸一日、数百…

Arduino 周波数/周期カウンタ (2)

周波数を計測するのに、基準クロックから作成した正確な 1 ms とか 1 s とかの一定時間幅のゲート信号を使って入力信号をカウントする「普通」の方式では、周波数の分解能はゲート・タイムの逆数に比例する形になります。 たとえば、ゲート・タイム 1 s では…

Arduino 周波数/周期カウンタ (1)

VCO などの発振周波数の自動測定を目的として、AVR マイコンでオーディオ帯域信号の周期を測定するライブラリの作成をしています。 プロトタイピングのツールとして Arduino (Pakurino) を使い、簡単な周波数/周期カウンタとして機能するサンプル・スケッチ…

Pakurino の ATmega328P 化 (3)

秋月で ATmega328P の取り扱いが始まりました。 単価 250 円 と安価なので、ATmega を使った FM 音源プログラムの対象デバイスを ATmega168 から ATmega328P に変えることにしました。 プログラム・メモリが 32 K バイトに倍増しているので、168 では共存で…

Pakurino の ATmega328P 化 (2)

この話題は前回の記事で完結のはずでしたが、予期せぬトラブルがあり、続編を書くはめになりました。 それは、 ブートローダ書き込み直後の、ユーザープログラム領域が消去されて 0xFFFF で埋まっている状態 (初回) ではスケッチ書き込みに成功するが、2回…

Pakurino の ATmega328P 化

千石から ATmega328P を、秋月から ATmega168P を買ってきて、Pakurino (Arduino) の 328P 化を行いました。 AVR 用の書き込み器としては、オプティマイズ製の「MINI EZ-USB」ボードに書き込みソフト「avrezusb」を組み合わせて使っています。 「avrezusb」…

シュトレーレ回路 (4) -- シュトレーレ PWM (2)

シュトレーレ近似の値を PWM によるアナログ電圧値として出力する Arduino 用のスケッチを示します。 シュトレーレ近似の最大誤差は ±0.2 % 程度で 8 ビット相当ですから、ATmega168 内蔵の 10 ビット ADC で傾向がとらえられるのではないかと考え、PWM 出力…

シュトレーレ回路 (1) -- シュトレーレ PWM (1)

まず、タイトルの「シュトレーレ回路」というのは、そういう名前の回路があるわけではなく、回路自体は特に珍しくもない一般的な回路で、その回路定数の決定に以前の記事で触れた「シュトレーレ近似」を使うものと定義します。 以前の記事 (→こちら) の内容…

シグマデルタ変調 PWM (7)

これまで ΣDM PWM のリニアリティの測定をしていなかったので、整数部 1 LSB の間の小数部 32 レベルについて実測してみました。 結果のグラフを下に示します。 赤の線が 2 次で、青の線が 1 次です。

シグマデルタ変調 PWM (6)

これまでのところで ΣDM PWM 出力の様子は概要が分かったので、今度は実際に VCO につないでみることにします。 と言っても、アナログ・シンセの VCO モジュールとして機能する回路は手許にないので、PX-150 のテスト用基板に作成した LM331/NJM4151 使用の…

シグマデルタ変調 PWM (5)

2 次 ΣDM では 1 次 ΣDM に比べて内部状態の数が増えるため、出力系列の周期が大きくなることが予想されます。 といっても、MASH 方式では 1 段目の ΣDM の動作自体は 2 段目の ΣDM の影響を受けないので、全体としての周期は 1 段目の周期の 2、4、8、16、3…