Arduino
ATtiny10 の「OSCCAL」レジスタ (アドレス 0x39) に設定する値と、内蔵 8 MHz クロック・オシレータの発振周波数の関係を測定し、グラフにしてみました。 単に CPU クロック周波数の測定なら、フューズ・ビットの設定で、CLKO 端子 (4 番ピン) にクロックが…
ATtiny10 用のサイン波発生プログラムを作りました。 (12/27 追記: 「sin_tn10.c」で USE_ADC 未定義の場合にコンパイル・エラーになる問題と、「stab128.S」の 2 の補数計算のバグを修正したプログラムに差し替えました) フェーズ・アキュムレータとサイン…
今回は、 ブレッドボード・シールドの製作 ターゲットへのプログラム書き込み後に自動でそのターゲット・プログラムが走り出すようにするためのスケッチの修正点 を取り上げます。
今回は前回の記事に関して、いくつかの補足を示します。 まず、前回は、ライセンスについて明記しませんでしたが、このプログラムは Atmel の AVR918 のソースにわずかな変更を加えただけなので、もともとの Atmel のライセンス条件がそのまま適用されるもの…
Arduino を AVR918 相当のデバイスとして機能させるスケッチ「Arduino918」を作って、ATtiny10 の書き込みに成功しました。 バイナリ・スケッチ・サイズは 2612 バイトです。 スケッチのアーカイブ・ファイルと readme ファイルを以下の Yahoo ボックスに置…
最近話題の「米粒 AVR」こと 6 ピン SOT-23 パッケージの「ATtiny10」を私も手に入れましたが、TPI (Tiny Programming Interface) 方式の ATtiny10 に対応したプログラム書き込み器は持っていません。 新たなデバイス/ハードウェアの購入や、書き込み器の組…
8 月 20 日の記事で検討した spigot アルゴリズムの変更点を、8 月 15 日の記事の Arduino 用のスケッチに適用し、乗除算部分をインライン・アセンブラによる 8 ビット演算に置き換えたプログラムを下に示します。 (Spigot 関数の部分のみ) 全体のスケッチの…
8 月 13 日版のプログラム・リストを下に掲載します。 (8 月 17 日追記: コメント中の aran255 の公式の 44*acot(2072) の符号が誤っていたのを修正しました。 プログラム本体には誤りはありません。)
8 月 9 日版のプログラムを改訂し、ATmega168 使用の Arduino でも修正なく実行可能にした 8 月 13 日版のプログラムを作りました。 バイナリ・スケッチ・サイズは 5602 バイトです。 プログラム・リストは次回、掲載します。 今回のプログラムでは、arctan …
前回までの記事で書き忘れていたことがあったので、補足しておきます。 まず、「pi_atan.pde」の中の #define ADDSUBONLY 1 の行を削除あるいはコメント・アウトして、「ADDSUBONLY」というシンボルが未定義な状態にすると、MUL / ROL 命令を使ったプログラ…
Arduino 用のスケッチを下に示します。 (8 月 11 日追記: ATmega328P を使ったタイプの Arduino 用のプログラムです。 ATmega168 を使ったタイプでの実行には修正が必要になります。 修正方法は 8 月 11 日の記事を参照してください。) 「pi_atan.h」と、「…
今回からは、シンセ関係から離れて、円周率の計算について触れたいと思います。 それと言うのも、20 個ほどの LSTTL を使った「RETROF-8」という 8 ビット・コンピュータを製作されている方がいて、Web サイト上で進行状況を公開されています。 TTLのみでコ…
エンベロープ・ジェネレータ・シミュレータのスケッチ "EG.pde" を下に示します。 16 MHz クロックの ATmega328P を使用した Arduino 互換ボードと、Arduino 0022 IDE 環境でコンパイルして確認してあります。 スケッチのバイナリ・サイズは 4 KB 程度なので…
前回の EG プログラムを Arduino 上の「スケッチ」として実現してみました。 スケッチ自体は長くなるので、次回に回し、今回は簡単な説明のみ行います。 今回は、「音」や「EG 波形」の出力をメインに考え、Arduino に接続したノン・オーバーサンプリング・…
温度補償回路の温度特性を測定してみて、効果があることが確認できました。 予備実験として、トランジスタ・アレイ内のトランジスタを「ヒーター」として利用して温度設定する方法も試してみたのですが、差動ペアのトランジスタ間に無視できない温度勾配が生…
前回の最後の図を下に再掲します。 このグラフは、 ある特定の ICR1 の値 (となるような CAPT タイミングを発生する OCR1B の設定) で、 CAPT 割り込みサービス・ルーチン内で TOV1 フラグの状態を観測し、記録するのを 10000 回繰り返すことにより発生頻度…
CAPT と OVF のタイミングの関係を推測するために行った実験のようすを説明したいと思います。 CAPT 割り込みの発生タイミングを、1 クロック単位で可変するために、同じタイマ 1 の PWM 出力である OC1B 端子とコンペアレジスタ OCR1B を使いました。 analo…
前回の最後の図、つまり、 OVF 割り込み要求の方が先に発生するが 実行中の命令が 2 サイクル (以上) かかるので 命令実行中に優先度の高い CAPT 割り込み要求に「追いつかれて」しまい、 命令終了時に優先度の高い CAPT 割り込みの方が先にサービスされてし…
以降の記事では、記述を簡略化するために、WinAVR (AVR 用 GCC) の割り込みベクトルの表記にしたがって、 「インプット・チャプチャ」を「CAPT」 「タイマ・オーバーフロー」を「OVF」 と略記します。 たとえば、「インプット・キャプチャ割り込み」は「CAPT…
LPF 出力部の OP アンプの直線性が気になったので、LMC662 を使った場合と、 TLC272 を使った場合との、出力電圧が小さい領域での直線性の測定を行い、比較してみました。 結果のグラフを下に示します。
前回とほぼ同じハードウェアで、XR2206 を自動測定してみました。 LM331 の結果と合わせてプロットしたグラフを下に示します。
周期測定ライブラリを利用してリニア VCO の特性を自動測定する Pakurino (Arduino) 用のスケッチを作成し、LM331 についてデータを取ってみました。 結果のグラフを下に示します。 20 Hz から 20 kHz までの 10 オクターブの範囲で、誤差は ±4 セント程度に…
12 月 7 日の記事の「PeriodCounter」ライブラリを使って、200 Hz の信号1〜2周期の測定を多数回繰り返してみたところ、やはり数千分の1程度の頻度でエラーが生じました。 エラー対策のための修正を施したバージョンで同じ測定を試すと、ほほ丸一日、数百…
周波数を計測するのに、基準クロックから作成した正確な 1 ms とか 1 s とかの一定時間幅のゲート信号を使って入力信号をカウントする「普通」の方式では、周波数の分解能はゲート・タイムの逆数に比例する形になります。 たとえば、ゲート・タイム 1 s では…
VCO などの発振周波数の自動測定を目的として、AVR マイコンでオーディオ帯域信号の周期を測定するライブラリの作成をしています。 プロトタイピングのツールとして Arduino (Pakurino) を使い、簡単な周波数/周期カウンタとして機能するサンプル・スケッチ…
秋月で ATmega328P の取り扱いが始まりました。 単価 250 円 と安価なので、ATmega を使った FM 音源プログラムの対象デバイスを ATmega168 から ATmega328P に変えることにしました。 プログラム・メモリが 32 K バイトに倍増しているので、168 では共存で…
この話題は前回の記事で完結のはずでしたが、予期せぬトラブルがあり、続編を書くはめになりました。 それは、 ブートローダ書き込み直後の、ユーザープログラム領域が消去されて 0xFFFF で埋まっている状態 (初回) ではスケッチ書き込みに成功するが、2回…
千石から ATmega328P を、秋月から ATmega168P を買ってきて、Pakurino (Arduino) の 328P 化を行いました。 AVR 用の書き込み器としては、オプティマイズ製の「MINI EZ-USB」ボードに書き込みソフト「avrezusb」を組み合わせて使っています。 「avrezusb」…
シュトレーレ近似の値を PWM によるアナログ電圧値として出力する Arduino 用のスケッチを示します。 シュトレーレ近似の最大誤差は ±0.2 % 程度で 8 ビット相当ですから、ATmega168 内蔵の 10 ビット ADC で傾向がとらえられるのではないかと考え、PWM 出力…
まず、タイトルの「シュトレーレ回路」というのは、そういう名前の回路があるわけではなく、回路自体は特に珍しくもない一般的な回路で、その回路定数の決定に以前の記事で触れた「シュトレーレ近似」を使うものと定義します。 以前の記事 (→こちら) の内容…