gaje

2014/03/10

ノイズ源候補トランジスタの試験を開始

Filed under: 技術情報 — Gan @ 7:56 AM

ノイズ源トランジスタの候補について以前の記事に書いたのですが、

http://gaje.jp/2014/01/14/2915/

廃止品となってしまった 2SC3311 の在庫払拭がそろそろ近づいてきたので、トランジスタ選びの試験をいよいよ開始しました。

(more…)

2014/03/04

Python で wav ファイル再生

Filed under: 技術情報 — Gan @ 11:00 PM

下記のリンクが役立ちました。

http://stackoverflow.com/questions/307305/play-a-sound-with-python

私は Windows を使っているので、winsound でうまく行きました。ものすごく簡単これだけです。

#!/usr/bin/env python

import winsound

winsound.PlaySound("ex1.wav", winsound.SND_FILENAME)

2014/03/02

SPI / RX 衝突試験

Filed under: analog3 — Gan @ 3:15 AM

spi_rx_collision_test通信ドライバでの SPI と RX の衝突試験をしました。通信ドライバはいつでも RX 信号を受け取る可能性があります。それはホストがデータの受け渡しをするため SPI 通信をしている最中でも起こります。RX 信号の処理は他の処理を中断して即行わなくてはいけないので外部入力割り込みハンドラで実施しています。このハンドラの処理がやや複雑なので、バグによりもう一つの複雑な処理である SPI 通信で使われているレジスタを壊してしまう可能性があり、実際にそういうバグがいくつか出ました。バグは全て修正されて、負荷試験が通せるようになりました。試験では、負荷生成ドライバがシリアルデータを送り続けている一方、受信ドライバのホストのタイミングを調整して RX 信号と SPI が頻繁に衝突するようにしました。パケット一個おきに衝突が発生しています。負荷試験は10時間走り続け、通信エラーなし、セッションは固まったり暴走したりすることなく続いています。

2014/03/01

ドラゴンのしっぽ

Filed under: 技術情報 — Gan @ 2:15 PM

dragons_tail 以前の投稿に書いたように、AVI Dragon は debugWire インタフェースの SPI ピンに干渉するため、SPI を使ったアプリケーションをデバッグするには、これらのピンを切断する必要があります。さらに、リセットピンも干渉していることに気づきました。今開発しているアプリケーションでは、Arduino からデバイスにリセット信号を送っているのですが、Dragon を繋いでいるとこの機能が無効になってしまいかなり開発がやりにくくなっていました。そこで、前回作った切断回路に改良を加え、リセットピンも干渉からはずせるようにし、さらに回路をブレッドボードから基板に移しかえ、お助けデバイス「ドラゴンのしっぽ」を作りました。いい感じで動作しています。

(more…)

2014/02/25

AVR Dragon と SPI インタフェースの干渉を防ぐ

Filed under: 技術情報 — Gan @ 4:57 PM

photo (3)AVR Dragon を使うと debugWire インタフェースを通して実機上でデバッグが可能です。debugWire は AVR ISP プログラミング用の 6ピンのコネクタを共用します。詳しくは下記のリンクに説明があります。

http://www.atmel.no/webdoc/avrdragon/avrdragon.section.zrr_osd_lc.html

ところが、AVR Dragon を使うと、開発対象のアプリケーションの SPI 機能がうまく働きません。

(more…)

2014/02/13

AVR Dragon について

Filed under: 技術情報 — Gan @ 12:29 AM

AVR Dragon を使い始めましたが、忘れてしまいそうなことをメモ

できること

  • ブレークポイントでプログラムを止める。(デバッグ実行時にはランモードとストップモードがある。)
  • ステップ実行
  • メモリ、レジスタ、プログラムカウンタ等プロセッサ内部の状態をモニタ。(ストップモード時のみ)
  • プログラマとしても使える。ただしデバッグ中はプログラマ機能は使えない。
  • ワッチポイントの設定ができるかどうかは調査中。できないような気がする。

利用のためのメモ

  • チュートリアルはAtmel公式のドキュメントが結局一番わかりやすかった
    http://www.atmel.no/webdoc/avrdragon/index.html
  • Dragon とターゲットを繋ぐ方法は複数サポートされているが、ATTiny* と繋ぐには debugWire を使う。debugWire は ISP プログラミングのための6ピンコネクタがそのまま使えるので便利。
  • Dragon はOCD (On Chip Debugging) デバイスとしてもプログラマとしても使えるが、両方同時には使えない。OCD 時にはターゲットプロセッサのヒューズビットも変更する必要があるので、開発環境全体でモード変更する。AtmelStudio の場合デバッグ実行を開始するとソフトが面倒を見てくれる。デバッグモードから通常モードに戻るには debug -> disable debugWire and close ただしデバッグ実行中でないとこれはできない。
  • Dragon と Arduino が同じ USB ハブに繋がっていると干渉する。具体的には、Dragon を使っていると Arduino のシリアルポートインタフェースが死んでしまう。お互い別の USB ポートに繋ぐこと。

2014/01/08

ノイズ源トランジスタの候補

Filed under: 技術情報 — Gan @ 1:09 AM

アナログ式のノイズジェネレータは、トランジスタの EB 間に耐圧 (Vebo) を超える逆方向電圧をかけ、その結果生じるツェナー電流の交流成分を増幅する方式が一般的です。Analog2.0 のノイズジェネレータもその方式を使っています(こんな回路です)。

このノイズ源としてどんなバイポーラトランジスタを使ってもたいていノイズは発生するのですが、聴いた感じの良し悪しは、型番によってけっこう違います。良いノイズ源として有名なのは 2SC828A ですが、とっくに廃止されていて今やレア部品です。そのため Analog2.0 では、設計当時の現行品で評判が良かった 2SC3311 を推奨しています。しかしこのトランジスタもついに廃止になり入手できなくなりました。以前からやらねばと思いつつ先延ばしにしていた後継トランジスタ探しを始めなくてはなりません。

(more…)

2013/12/09

Arduino UNO での Serial.println() にかかる時間

Filed under: 技術情報 — Gan @ 12:25 AM

今やっている実験の一環でこんなコードを走らせています:

   if (digitalRead(pinDeviceReadReady) == HIGH) {
    Serial.println("DATA READY");
    spiSend(0x20); // command "read request"
    readBuffer.deviceId = spiReceive();
    Serial.println(readBuffer.deviceId);
    readBuffer.wireId = spiReceive();
    Serial.println(readBuffer.wireId);
    readBuffer.length = spiReceive();
    Serial.println(readBuffer.length);
    for (int i = 0; i <= readBuffer.length; ++i) {
       readBuffer.data[i] = spiReceive();
       Serial.println(readBuffer.data[i]);
    }
  }

where

inline void spiSend(uint8_t data)
{
  // wait for device ready to write
  while (digitalRead(pinDeviceWriteReady) == LOW);
  SPI.transfer(data);
}

inline uint8_t spiReceive()
{
  while (digitalRead(pinDeviceReadReady) == LOW);
  uint8_t data = SPI.transfer(0);
  return data;
}

実際の動作パタンは以下のようになりました。赤線は DATA READY をあらわすインジケータの出力で、青線はそれを受けて起動される SPI 転送クロックです。見てわかるように、かなり大きな遅延が出ています。

data_ready_and_SPI_clock_with_serial

遅延は、デバッグのためにSPI転送の間に挿入されている Serial.println() が原因のようです。Serial.println() の実装は見ていませんが、どうもこの行の実施には 100μS から 150μS  ぐらいの所要時間がかかるようです。

Serial.println() 行を取り除くと、大きな遅延は見られなくなりました。

data_ready_and_SPI_clock_without_serial

でも波形を拡大してみるとまだ遅延があるようです。

data_ready_and_SPI_clock_closeup

これはおそらく DATA READY インジケータを読むための digialRead() による遅延か SPI.transfer() の実施に遅れがあるためと思われます。この実験では今すぐ除去する必要はないのですが、3μS ほどの遅延があることは頭に入れておいたほうがよさそうです。

2013/10/13

Arduino IDE のフォントを Consolas にする

Filed under: 技術情報 — Gan @ 11:18 AM

default_font

日本語 Windows で Arduino IDE を使うと、エディタのフォントに MSゴシックが使われていて、見づらいことこの上ありません。そろそろストレスに耐えられなくなってきたので、見慣れた Consolas フォントに設定変更しました。少しだけ面倒だったので備忘のためやり方をこの記事に残しておきます。

この IDE は、メニューの
ファイル (File)  > 環境設定 (Preference)
から、フォントサイズなどある程度の設定変更ができますが、フォント自体は一見変更できないかのようです。でもできます。変更するには、設定ファイル preferences.txt を直接編集します。このファイルは、Preference ダイアログの下のほうにある ”More preferences can be edited directly in the file” あるいは「以下のファイルを直接編集すれば、より多くの設定を行うことができます」という記述のあるところのリンクから簡単にたどり着けます。

preferences.txt ファイルを Notepad などのエディタで開いて、2行修正を入れます。

修正を入れる2行:

editor.antialias=false
editor.font=Monospaced,plain,12

修正後:

editor.antialias=true
editor.font=Consolas,plain,12

これで IDE を再起動するとフォントが変わります。ソースコードがぐっと読みやすくなりました。日本語コメントがあると読めなくなるので要注意。

consolas

2012/10/13

電圧制御エンベロープジェネレータ 基礎検討:アナログ式

Filed under: 未分類 — Gan @ 5:44 PM

色んな用途で使う予定があって、電圧制御エンベロープジェネレータの設計の基礎検討をしています。

エンベロープジェネレータ回路は、アナログシンセサイザーの中では単純なほうですが、通常の単純な設計では電圧制御ができません。コンデンサへの充放電の速さを制御することで振る舞いを変えるので、可変抵抗器を使えば簡単に作れてしまうのですが、もっと速く細やかな制御をしたいときには可変抵抗の抵抗値で、というのはちょっと不都合です。そういうわけで電圧制御の必要性が出てきます。

電圧制御式のエンベロープジェネレータを作るには色々なアプローチが考えられます。いくつかを実際に試作して検討する予定ですが、まずはアナログ式を試してみました。

(more…)

« Newer PostsOlder Posts »

Powered by WordPress