アナログシンセ掲示板ログ閲覧所
Library of BBS for DIYers of Analog Synth

[ トップページへ / 一覧表示 / 最新記事 / 管理用 ]
[ to Top Page / Title List ]


セット表示

【雑談】試しながら学ぶAVR入門 : takeda (2008年04月15日23時31分)
校正 : takeda (2008年04月16日21時58分)
AVRマイコンのクセ? : やすだ(や) (2008年04月17日20時26分)
avrで10bitのPWMと、アナログコンパレーターをつかったAD変換 : takeda (2008年04月18日22時16分)
I/O 設定 : やすだ(や) (2008年04月18日23時40分)
A-D変換 : やすだ(や) (2008年04月19日14時22分)
ローコストLFO実装 : takeda (2008年04月21日23時11分)
Re:ローコストLFO実装 : takeda (2008年04月23日22時02分)
ブレゼンハムのアルゴリズムによるLFOのまとめ : takeda (2008年04月28日19時47分)
LFOのスピードを変化させるためのソフトウエアアンチログのまとめ : takeda (2008年04月28日19時48分)
鍵盤走査 : やすだ(や) (2008年04月25日22時37分)
Re:鍵盤走査 : takeda (2008年05月07日23時43分)
[投稿者削除] : gan (2008年05月08日08時43分)
Re[2]:鍵盤走査 : gan (2008年05月08日08時44分)
秋月PUSHスイッチ : analog (2008年05月08日13時45分)
鍵盤型スイッチ特注できるの? : takeda (2008年05月12日19時51分)
Re:鍵盤型スイッチ特注できるの? : analog (2008年05月13日00時28分)
Re[2]:鍵盤走査 : やすだ(や) (2008年05月10日21時21分)
Re[3]:鍵盤走査 : takeda (2008年05月11日15時53分)
Re[4]:鍵盤走査 : takeda (2008年05月12日19時48分)
回路図類更新しましたー : takeda (2008年05月13日22時44分)
Re[5]:鍵盤走査 : やすだ(や) (2008年05月13日22時45分)
mini-keyboard最初の版を公開 : takeda (2008年05月16日23時14分)
目が覚めた! : takeda (2008年05月19日22時44分)
[投稿者削除] : gan (2008年05月20日13時21分)
Re:目が覚めた! : gan (2008年05月20日13時24分)
[投稿者削除] : gan (2008年05月20日13時39分)
どんまいー! : takeda (2008年05月22日20時07分)
Re:どんまいー! : gan (2008年05月24日15時37分)
Re[2]:どんまいー! : やすだ(や) (2008年05月25日21時06分)
正式名称、「MInI-BOARD」にけってー : takeda (2008年05月26日03時15分)
Re:正式名称、「MInI-BOARD」にけってー : analog (2008年05月26日10時10分)
いえいえ、んーなわけないですー : takeda (2008年05月26日22時13分)
安価なジョイスティックは? : やすだ(や) (2008年05月27日22時31分)
Tiny2313でケチケチADコンバーターの実験 : takeda (2008年05月29日19時18分)
Re:Tiny2313でケチケチADコンバーターの実験 : Chuck (2008年05月30日09時07分)
Re[2]:Tiny2313でケチケチADコンバーターの実験 : takeda (2008年06月02日22時06分)


返事を書く|リスト
8892 Root [8893]
雑談 試しながら学ぶAVR入門
#8892
この記事の投稿者にメールを送信 takeda (2008年04月15日23時31分)
Chuckさんのブログ、
http://emusic.g.hatena.ne.jp/Chuck/20080411
で話題の「試しながら学ぶAVR入門」

http://www.cqpub.co.jp/hanbai/books/46/46041.htm

手に入れましたー。手にとって、ぱらぱらとめくっちゃうと、買う気がうせる気がして、ラジオデパートの2Fの本屋で、平積みになった一番上から2冊目を選んで買ってきました。発売日当日に、秋葉店頭で、領収書?結構です、現金で!ご祝儀、もってケー、がんばれー、色々!

先日、パソコンのマザボ/OSを入れ替えて、ぜんぜん触ってなかった、AVRの開発環境を新たに入れ直す所からスタート。本の方にもアトメル社が無償提供しているAVR StudioとWinAVR(gnuベースのフリークロスコンパイラ)のインストールの紹介にもページが割かれています。
この本から勉強をスタートしようと思う人が心配するに違いない、ライターについては、残念ながら、メーカー製を買え、以上!って感じで、ほとんど紹介されてません。僕は、
http://elm-chan.org/works/avrx/report.html
で紹介されているシリアルのライターを組み立てて、こちらで配布されているソフトをセットで使ってます。(実は、Chuckさん経由で、純正の開発キットも手に入れてるんだけど、まだ、手がついてないです)

内容的には、マイコンの歴史から始まっちゃって、どーしよーとも思ったんですが、ざっと、最後まで目を通してから、実際手を動かしながら読むと、イラストや一覧表が多くて、読みやすと言うよりは使いやすい印象。
マイクロプロセッサの変遷という歴史モノの記事からいきなりアセンブラの命令一覧表、さらに、それを書かせるという流れに若干の無理は感じなくもないかなー、いや、でもそーでもないかなー。
めちゃでかい字のソースコードは、コメントをたくさん入れるための工夫なのか、ちょっと調べたんだけど、この本に紹介されているコードはZipで圧縮してこちらに、という記述がみあたんなくて、全部手打ちで入れんのかよ...という感じ。挙句の果てには、hexファイルのダンプまで、紹介されてて、どーすんだよ、これ、打ちこめっちゅーのかよ...まあ、アセンブラと、Cで書いたときのメモリー効率の違いの直感的な理解には役立つかなと..(ってか、普通、そんなモン見るか?!)
C言語の初心者は、ここからはスターとできなさそうです、別途、入門書を手に入れて勉強した上で、この本のソースで実践が正解かも。

AVRの魅力が全部紹介されているかといえばそうでもないです。仕様書を見直して、あらびっくりがまだまだたくさんあるかも。
何もかもが書いてあるけど、めちゃ読みにくいメーカーの仕様書とは違って、1/2ぐらいしか書いてないけど、めちゃ読みやすい、という感じかしら。それなりの経験のある方なら、メーカーの仕様書を読むためのガイドブック的な印象で手に入れるのはありだと思います。

Windowsのプログラミングに関する記事は、マイクロソフトの(フリーの)エクスプレス版のコンパイラのインストール方法(しかも、古い2005版、現在は2008がリリースされてます)が紹介されてて、本文の中で書くソフトはDOS窓版。いまどき、それかー!とか、思いつつも、トータルではバランス取れた感じもします。
ここから、AVR勉強スタートするぞ、という方を狙いにした本だ、というのは良くわかります。それなりに経験のある方は、後半の物作り、写真もたっぷりついてて、実装のアイディアとか、見る所がたんまりかもしれません。(ネタ的にはありがちなものばかりで、食いつきは悪いと思います。)

ちょっと辛めに評価してますが、トータルポイントは高いです。
一点に突っ込みすぎてスタックすることなく、全体としてよくまとまっていてサクサクと最後まで流れてます。幅広いテーマに、それぞれ軽く触れる方向。PICかAVRか、まだ迷っている向きには間違いなくお勧め。

いつも、chuckさんや、RJBさんのあとから、チョコチョコとついていくのが精一杯、IO周りの構造がぜんぜん理解できないでいた、というのが本当のところ。わかりにくいオリジナルの仕様書にだまされてたことに気がついたりして、なんか1晩読んだだけで、モトは取れたかも!
16bitタイマー使って、10ビット幅のPWM、書けちゃった。MIDI-CVにベンド混ぜてみよーっと。


返事を書く|リスト
8893 [8892] [8895]
雑談 校正
#8893
この記事の投稿者にメールを送信 takeda (2008年04月16日21時58分)
59pページの一番上の図、一番最後のビットと、2番目のビット、内容が入れ替わってます。

タイマーの割り込み機能のマスクの紹介なんだけど、8ビットタイマーのTOIE0は2ビット目、OCIE0Aは1ビット目です。逆になってます。

頓珍漢だった、タイマーの理解が進んできて、16ビットのタイマーと8ビットのタイマー並列で走らせてそれぞれ別の割り込み処理できたー。

16ビット側でPWMの周期をずらす処理、8ビット側は、内部にステータスをキープしてそれをみながら、さっきとっポートの内容をバタバタ変える、というもの。
8Mの内部で発生するCRクロックを8周分してるのでトータルでは1Mのマスタークロックで動いてる状態。10ビットのPWMの周期は、1024/1M 、大体0.97kHz。(最終的に20MHzのクロックで動かすつもりなら、19.53kHz、スピード足りるかな..DC化したときのリップルがちょいと心配。RJBさんのってどーなってたっけな..調べなきゃだわ。)
8ビットのほうは200カウント数えたらポート叩く。1M/200さらに半分(パタ/パタで2回だから)、ドンの2.5kHzチャンと出ました。
ただ、ジッタがでてます。16ビットのほうの割り込みのワリ食ってんだろうなと。割り込み処理中は、割り込み禁止しないとだめんんだろーなー。割り込み禁止は、優先したい処理のほうのみに入れてやらないと、結局一緒になるのかな?

ちょっとづつ、前進!


返事を書く|リスト
8895 [8893] [8896]
雑談 AVRマイコンのクセ?
#8895
この記事の投稿者にメールを送信 やすだ(や) (2008年04月17日20時26分)
ご紹介の本は、未だ読んでいないのですが、
タイマ割り込みのマスク(TIMSK) を含めて、最近は、拡張性を考えてか
デバイスによって I/O アドレスが違ったり、ビットの位置が違ったりしてますね.

アセンブラで書くときも、冒頭にデバイスのインクルードファイルを宣言して、
ldi r16, (1<<TOIE0)
out TIMSK, r16
(拡張領域に有る場合は、sts TIMSK, r16)
とすれば、ビットの位置が違っても、間違いはありません.

データシートは、「HERO'S Download」の日本語訳が、
色分けされていて、メーカのオリジナルより見やすいです.
最近は、ちょっとベタなオリジナル直訳で、日本語的に(!)判りづらい箇所もありますけど..

タイマ割り込みの優先順位(割り込みベクタの位置)もデバイスによって違っています.
データシートで、ご確認を.

先日の AVR シンセも、多重割り込みで、コキ使っています.


返事を書く|リスト
8896 [8895] [8900] [8901] [8919]
雑談 avrで10bitのPWMと、アナログコンパレーターをつかったAD変換
#8896
この記事の投稿者にメールを送信 takeda (2008年04月18日22時16分)
8ビットのタイマーが0、16ビットのタイマが1、追加の8Bitタイマーが2だったり、タイマの比較用のレジスタもあとから追加になったBは後ろのほうにあったりして、Cのインクルードファイルで見てる分には気がつかない(ようにするのがインクルードファイルの狙いだから正解だけど)ポイントっておおいっすよね。

秋月でひとつ100円のTiny2313(20M)
http://akizukidenshi.com/catalog/items2.php?c=avr&s=popularity&p=1&r=1&page=
やすだ(や)さん、ご紹介のページどのドキュメントはこちら。
http://reef.path.ne.jp/~hero/pdf/TINY2313.PDF
ブレボに乗せて遊んでます。

8bitタイマーでPWMしてローパスフィルタで、鋸歯状波出るようにして、それをアナログコンパレーターに突っ込んでその出力で割り込みして、16bitタイマーを使って10bitのPWMで入力信号にあわせてDC出力するっちゅーの試してみました。
とりあえず、内臓校正済みRC発信のクロックを8分周の1Mで走らせてます。
http://www.aleph.co.jp/~takeda/radio/parm/software/ADCNV-test.zip

元ネタは
http://ioio.at.infoseek.co.jp/AVR/LessonA_06.html

アセンブラで書かれた版をあえてCで書き直してます。IOの設定が肝で、ソフト自体は全部割り込みで動いてます、プログラム自体はほんの数行。
IO周り、わざと機能別に分けて初期化するようにして、切り張りしやすいようにしてみました。
諸兄のご指導を仰ぎたくー!!

ローパスフィルタのせいで、鋸歯状波の立下り、立ち上がりの部分がなまってて、低いほう、リニアリティイが(原理的に)出ません。
コンパレーターの出力で掛ける割り込み、状態変化でも取り出せるようなので、鋸歯状波やめて、三角波だすようにすると、急激な変化の部分が少なくなって、もうちょい、リニアリティでるかも、今度試してみよー。

アルゴ算法堂さんの
http://homepage2.nifty.com/sampodo/main.html
電子工作、PIC ピコピコ、すげえ興味深く見てて、おりしも、山の所長君が鍵盤ユニットが手に入ったとか入らないとかのうわさももれ聞こえてきたりで、常々やってみたいと思ってたキースキャンのアルゴリズムを考えてみました。
http://briefcase.yahoo.co.jp/bc/motohiko_takeda/lst?.dir=/1d81&.view=l
keyscan.c
最低音優先のモノフォニック。
pwm_width.c
は、ベンドのデータを混ぜるアルゴリズムのつもり。
ziggy stardust.mp3
は、今年の誕生日ソング。ジジープレイギター!!
マイクアンプは玉を使った手作りののやつ。使い込んでくると、低音が足りないかな、という印象が強くなってきたな、そこが、いいところという気もしないでもなけど。

アナログ2.0支援(電源が共用できるだけだけど)で、このキースキャナ付けて、ベンダー付のCV/GATE鍵盤作ってみようかと。メカの部分は難しいけどねえ。
キースキャン周りAPI化して、MIDI-CVのときに書きかけにしてるMIDI-perserと組み合わせて、鍵盤からもMIDIからもCVだせるとか、いつかやるぞなウインドコントローラーへの布石になるかもー。


返事を書く|リスト
8900 [8896] なし
雑談 I/O 設定
#8900
この記事の投稿者にメールを送信 やすだ(や) (2008年04月18日23時40分)
I/O の設定記述は、アセンブラでもC言語でも、あまり変わりませんね.

リセット直後の I/O レジスタの初期値は、0でしょうから、
使う機能だけ、(1<<xxx)でビットを立てるようにすると、判りやすいと思います.
(xxx は、機能名称)


返事を書く|リスト
8901 [8896] [8903]
雑談 A-D変換
#8901
この記事の投稿者にメールを送信 やすだ(や) (2008年04月19日14時22分)
A-D変換IC が高価だった頃、D-A コンバータIC と逐次比較レジスタとコンパレータを組み合わせて作ったのを思い出しました.
http://techon.nikkeibp.co.jp/article/WORD/20061113/123485/

A-D 変換機能が内蔵されていないチップでの手法は、メーカサイト "Application Notes" の
 AVR400: Low Cost A/D Converter
 AVR401: 8-Bit Precision A/D Converter
にも出ています.ご参考まで.
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607


返事を書く|リスト
8903 [8901] [8906]
雑談 ローコストLFO実装
#8903
この記事の投稿者にメールを送信 takeda (2008年04月21日23時11分)
やすだ(や)さん、毎度フォローありがとうございますー。
早速拝見しました。分解能が6ビット程度、もうひと超え欲しいかもとか思いつつ、取り出すスピードは速くないけど、鋸歯状波やめて三角波でスキャンする式に変更してみました。なんかうごくっぽいぞと、外から可変のパラメーターを食わせられるということで、今年の初めに、アルゴリズムの確認で書くだけ書いて放置してたソフトLFOをTiny2313に実装してみました。

スキャンの三角波のリップルのせいで、毎回、それっぽいけど違う値が帰ってきたりしてます。0から255の値が取れるはずなんだけどリップルが凶悪にでかくなる、64-180ぐらいの間では、プルプル毎度違う値が帰ってきてしまい、LFOのスピードの変化に使おうとすると誤差が0にリセットされちゃって、思ったとおり動きません。折り返しポイントでスピードを変えるかどうかをチェックする式に書き換えました。
しかも分解能下げて、ADコンバートのノイズ(というか、誤差)を吸収してたりして、8ビットの分解能全部使い切れてません。

外付けの発振器なし、内蔵CRの8Mでうごかしてます。LFOを動かす、最高速16Hzぐらいを実現するための、ポーリングタイミングの124uSは、8Mのクロックをプリスケーラなしでカウントする10ビットのPWMの桁あふれ割り込みが、大体そんなところかと適当に使ってます。

最速は、8M/1024/255/2=15.3Hz(最後の2は、傾き1の線が上がって下がって1サイクルになるので..)。まだ、初期化のミスが残っていて、電源入れた直後は最速で走るのでちゃんと15Hzでてます。ただ、その後、ADコンバーターで得た数字をスピードに突っ込むと、13Hzぐらいまでしかあがりません。(下のほうは0.3Hzのはずなんだけど、遅すぎて読めない...)たぶん、0周辺とか、255周辺がちゃんと読めてねーのかな、簡易ADコンバーターの限界かなーとか、想像してます。

やすださんのご紹介くださった技法、ハードはちょっと変えると(まだ、ブレボなので)試せるし、こっちも試してみなくちゃだわ。分解能はともかく、直線性よさげ。僕のやつが、結局、7ビット分ぐらいしか使えてないことを考えると6ビットもとれりゃ十分なのかな、という気もそこはかとなく...ただよっって見たり。

http://briefcase.yahoo.co.jp/bc/motohiko_takeda/lst?.dir=/1d81
LFO-test2.c


返事を書く|リスト
8906 [8903] [8923] [8924]
雑談 Re:ローコストLFO実装
#8906
この記事の投稿者にメールを送信 takeda (2008年04月23日22時02分)
アルゴリズムの問題なのか、他の問題なのかの切り分けのために、ナンチャッテADコンバーターがどんな値を出してるのか、チェックするべく、空いているシリアルポートから、パソコンへ今の値を出力するルーチンを追加しました。
ハードウエア的にはナンチャッテシリアルということで以前からMIXIのほうで実験している回路
http://www.aleph.co.jp/~takeda/radio/work/curve-tracer-CPU-schem.gif
から、Q2周辺だけブレボに乗せました。

http://briefcase.yahoo.co.jp/bc/motohiko_takeda/lst?.dir=/1d81
LFO-test3.c

上は253ぐらいまではでてますので、狙いの0.3Hzぐらいは出ていそうです。問題は早い方。本当は15Hzぐらいまで出るはずなのだけど、ADコンバーターの出力は25ぐらいまでしか下がりません。ソース中のテーブルをみると25とかは、7ぐらいに変換されてます。5/7=7割ぐらい。最高速が15Hzとして大体10Hzぐらい。思ったとおりの動作をしてそうだなという感じです。

一番安価なTiny2313で、ナンチャッテADコンバーターとナンチャッテシリアルアウトのテストプログラム。
とりあえず、Vフォロ付ければ、なんちゃって、VCLFOにはなるかも。

コントロールする電圧だけど、VRに18mmぐらいのつまみを付けたものを人の指で普通に操作して、どれくらいの分解能がだせるんだろう。よし、127に設定するぞ、とつまみをぐいっとまわして、人の指は127ぴったりにあわせられるんだろうか?

ひょっとして、7ビットをちょっとはしょった100段階ぐらいが限界だったりするんじゃないかしら。2桁以上の精度を人間の指のほうが出せなかったりしないかしら。
絶対値として127は認識できない気がする。
たとえば、微妙な音程のチューニングのとき、耳ではずれてるのわかるんだけど、指は本当に動かしたかどうか、相対感覚としてわかんないもん。(逆に、アナログ値の変化出してるから、指がわかんなくても耳がわかるということなんだけどね)指そのものは、128と126とのずれを認識してないきがする。


返事を書く|リスト
8923 [8906] なし
雑談 ブレゼンハムのアルゴリズムによるLFOのまとめ
#8923
この記事の投稿者にメールを送信 takeda (2008年04月28日19時47分)
もともと、ブレゼンハムのアルゴリズムは、パソコンの画面に高速に直線を描画するときに使われるアルゴリズム。これをシンセのCVの生成に使えないかな、というのが狙い。

y=axの直線をグラフ化するのをイメージすれば良い。x軸方向(この場合は時間)に1ステップ進むとき、Y軸方向に変化するかどうかを足し算で蓄積していく誤差が一定値を超える稼動かのみを判断なので、ランタイムの計算コストがとても小さいのが魅力。
欠点としては、Y=aXのa(傾き)を1以上にできない事から、高速なオペレーションには不向き。少なくとも20MHzで動かす、AVRで、EGのすべてのカーブを表現するのには若干の無理があるようだ。LFOぐらいならちょうど良い感じ。

最高速の時、一番上に行って戻ってくるまで8ビット幅出力なら最小タイミング512回繰り返す。
16Hzは、62.5ms。512回ステップするのだから、、最小ステップは122us。

スピードを変えるには、Y=aXの傾きの係数aを変化させることになる。たとえば、8ビット幅出力(256段階)で0.33Hzから16Hzまで変化させるのなら、傾きが1のとき16Hz、最小タイミング、0.3Hzのときは傾きは、(16Hz/0.32Hz=)50なのだから、傾きは、1/50になれば、0.32Hzが出力できそうだ。
さらに、分母と分子をそれぞれ50倍して、分母ではなく、分子を変化させることでリニアに1から1/50までを変化させるというところがアルゴリズム的なミソ。5/255から255/255までの分子を増やしていく。

ブレゼンハムのアルゴリズムの詳細は、
http://dencha.ojaru.jp/programs_07/pg_graphic_07.html
にくわしい。



返事を書く|リスト
8924 [8906] なし
雑談 LFOのスピードを変化させるためのソフトウエアアンチログのまとめ
#8924
この記事の投稿者にメールを送信 takeda (2008年04月28日19時48分)
スピードを変えるパラメーターとしてADコンバーターからの0から255までの出力を使う予定だけど、このリニアな変化に対して、周波数もリニアに変わると、発振器としてはえらく使いにくい。つまみの回し具合と周波数の変化を聴感上リニアにするには、つまみのリニアな変化を指数カーブに変換してやらなきゃいけない。ソフトウエアアンチログ変換。

指数カーブを得たいのなら普通には y=exp(x)。yが5から255まで変化するxは、log(5)=0.698、log(255)=2.406。
エクセルで計算するとこんな数字がでるけど、これは、10を底としたときの数字。指数関数の逆関数が対数対数なのだけど、基準と成る底が違ったらそりゃ結果も違う。エクセルで動作をチェックするときには、指数関数のかわりに、log(n,x) pwoer(n,x)(それぞれnが底)という関数に置き換える。底は10でも2.718でもカーブの形は変わらない。

底を2にしたときの5と255の対数は、2.321と7.99。この間をリニアに変化する数字をy=exp(x)に突っ込んで出てきた数字をスピードの設定値として、リニアに変化する発振器に突っ込めばいい。まずはADコンバーターの出力を2.321から7.99にマッピングしなきゃいけない。ADコンバーターの出力をNとすると..

(N X (7.99-2.321) / 256) + 2.321
http://www.aleph.co.jp/~takeda/radio/parm/software/exp-curve1.gif

エクセルのBの列。Cの列がそれを指数関数に突っ込んで得た結果。思ったとおり、あのカーブが出ている。この計算が面倒くさいかなーということで、256個のデータのテーブルにしたのが、先日のバージョン。
ただ、小さなCPUには相対的に巨大なこのテーブルを持たせるのはのどーよ、ということで、C言語で安価に計算する手がないかな、と。

指数関数の性格として分割することができるので、計算の比較的簡単な整数部分と、面倒げな小数点以下のぶぶんとに分ける。
整数部分は普通に掛け算で得られる。しかも、2を底とするとさらにお得なボーナスがついて計算はシフトで済ませられる。小数点乗部分はやっぱ面倒だからテーブル化しちゃえは竹プランと、実際計算してグラフ化してみるとほとんど直線ジャン!そのまま行ってもばれねえよの梅プラン、それぞれ、Chuckさんと、RJBさんが実装されている。
http://www.aleph.co.jp/~takeda/radio/parm/software/exp-curve2.gif

小数点以下の数字と整数の部分とを分けて計算する方向ということでここで固定小数点による演算を検討する。
簡単に言えば、
A X B = C
だったら、
A X B X D = C'
でC'を計算して後から、Dで割りゃ良いんじゃん?ということ。Dが2の乗数ならば、シフトだけで済む。ADコンバーターの0から255までの出力を固定小数点の数字にマッピングするわけだ。Dをどんな値すれば良いかの検討がミソ。

いまここでターゲットにしている数字は、2.321から、7.99までの値。普通に引き算すると5.669。8ビットでこの値を表現しようとすると5.669/255で0.022。1ビットの重みが0.022なら、1は、(1/0.022=)45.5。とりあえず6ビット必要。
というわけで、小数点を6ビット目にするのなら、最小単位は、(1/64=)0.0156となり、この系で7.99を変換すると(7.99/0.0156=)512.17。同様に最小値は、2.321は(2.321/0.0156=)148.782。
まずは0から、255の値Nを、149から512にマッピングしなきゃいけない。

(N X (512-149) / 256) + 149

これで得た数字の6ビット目以上は整数部分。以下は、小数点以下部分となる。
ただ、問題が一つ。perlなどで、アルゴリズムのチェックはOKでも、C言語で書くと16ビットの整数でという制限が掛かって、(512-149)=363に入力の最大値255を掛けると、16ビットを超えちゃう。どうせ後で、256で割るんだから、先に定数を2で割っとけ作戦へとシフト。

(N X ((512-149)/2) / 128) + 149

ターゲットの数字を6ビット右にシフトして得た整数部分で2を左にシフト。これにテーブルから持ってきた小数点以下の指数を掛け算。最終的に得た数字を6ビット右にシフトして小数点以下を切り捨てて整数化。割り算はすべてシフトで済むので本気で掛け算は2回だけ。
シミュレーターでチェックすると、この関数、8MHzで走らせて47uSぐらい。このLFOの最小タイミングが122usなので、処理的には収まりそうだ。

プログラム全体の評価としては、テーブルメソッドで
Program: 846 bytes (41.3% Full)
http://www.aleph.co.jp/~takeda/radio/parm/software/2313LFO-A.zip
計算メソッドで
Program: 768 bytes (37.5% Full)
http://www.aleph.co.jp/~takeda/radio/parm/software/2313LFO-B.zip

プログラムそのものは、テーブルサイズしか小さくならない。
このアプリのようにスピードだけしか変えないのであればシンプルにテーブルを見るのが高速で且つシンプル。
計算アルゴリズムで持つ小数点以下の乗数のテーブルは一種の定数として使えるので、LFOのほか、音量や、違うタイミングの計算などに共通で使える。プログラムサイズのがパンクしかけな場合には検討に値するかもしれない。

さらに直線近似メソッドで2の0乗(1)から、2の1乗(2)まで変化する、6ビット目が小数点とする数字に0から64まで変化する入力をマッピングするんだけど、ふと気がつけば、単純に64を足すだけで済む。
Program: 692 bytes (33.8% Full)
http://www.aleph.co.jp/~takeda/radio/parm/software/2313LFO-C.zip

さらにシミュレーターで同様のチェックすると、8MHzで走らせて21uS。早い、安い!さらに、プログラムメモリから、配列データそのもののほか、配列のデータを引っ張る関数がなくなるので、思いがけず小さくなる。精度は、Zipファイルにエクセルにしてグラフを入れておいたけど、ほとんどわかんない状態。いいんでねーの?


返事を書く|リスト
8919 [8896] [8930]
雑談 鍵盤走査
#8919
この記事の投稿者にメールを送信 やすだ(や) (2008年04月25日22時37分)
先日の「AVR シンセ」のキーボード・スキャナは、ドキュメントにも書きましたが、
http://home.concepts-ict.nl/~nctnico/midi.htm
の "Built your own Midi keyboard" を参考にしています.
MIDI なので(?)、後押し優先になってます.

サイトは、世界的に有名な Intel 8051 のニモニックで書かれていますが、
記述は、AVR マイコンと比べて、さほど変わりませんので、理解は容易だと思います.
仔細をネット上から "8051 Instruction Set" で調べてもらってもイイです.

私が、AVR のアセンブラ用に書き直したのが、整理出来ていなくて
(走り書きのまま..苦笑)
すぐに公表出来ずに申し訳ないです.


返事を書く|リスト
8930 [8919] [8931] [8932] [8933] [8935] [8942]
雑談 Re:鍵盤走査
#8930
この記事の投稿者にメールを送信 takeda (2008年05月07日23時43分)
> 私が、AVR のアセンブラ用に書き直したのが、整理出来ていなくて
> (走り書きのまま..苦笑)
> すぐに公表出来ずに申し訳ないです.

チャンスがありましたら、ぜひー!拝見したいですー。

こちらのCで書いてるイージーバージョン、ソフト完成してないんだけど、キースキャンに関する基本的な部分は動いたかなと。

http://www.aleph.co.jp/~takeda/radio/takedanote/vol12.html
とりあえず、テスト公開。ソフト以外はAVRの開発環境まで込みで一通りそろえたつもり。

ソフトだけど、キースキャナ込みだと、Chuckさんのソフトがサイズ的に乗らないので、昔書いたきりになっているMIDIパーサーを蔵から出してきました、プログラムサイズ的には何とかセーフっぽい。
連休中にハードやっつけて、ソフトはたらたらと書こうかな、というか、MIDIパーサー見直してみたら、たまたま、MIDIからの入力用のリングバッファ実装してあるのでこれにキースキャンの出力も混ぜちゃうともうちょっと使い勝手良くなりそうな(ごく普通の膠着優先、えっ!後着優先!!)予感もあって、もうちょいソフト練ってみようかなという感じです。MIDI入力と、キーボード入力のマークをつけて区別しないとだめだろうなあとかとか、7ビット目つかってなかったはずだよなーとか。
プログラムサイズ、余裕がでたらMIDI出力も混ぜちゃおうかなとか、ちょっと欲がでてますが、まずは、Analog2.0支援ということで、早めに最初のソフトをリリースして、徐々にバージョンアップかなと。

チャタリングキャンセルって、ちゃんとやろうと思うと結構面倒くさいなあとかとか。アルゴさんのところにタイマーを使う記事が出てたはずだなあとか...。


返事を書く|リスト
8931 [8930] なし
雑談 [投稿者削除]
#8931
gan (2008年05月08日08時43分)
投稿者によって削除されました。(2008年05月08日08時43分)


返事を書く|リスト
8932 [8930] なし
雑談 Re[2]:鍵盤走査
#8932
この記事の投稿者にメールを送信 gan (2008年05月08日08時44分)
ありがとうごじゃりまする。
さっそく追試させてください。
あっタクトスイッチ
こないだの山分けに私も参加すればよかったです。
12個ぎりぎりあったかなー


返事を書く|リスト
8933 [8930] [8938]
雑談 秋月PUSHスイッチ
#8933
この記事の投稿者にメールを送信 analog (2008年05月08日13時45分)
あの秋月PUSHスイッチは短期間でダメになります。
ほとんど使わない設定スイッチなら事足りますが…
症状は接触不良やチャッタリングが激しくなって
ソフトで逃げると待ち時間をかなり長くとらなければなりません。
まぁ、どのようなSWでも対応できるソフト作りって考え方も無いことなないですが。
接触不良が起きると、ついつい強く押しがちになり不良が加速度的に進みます。
たかがテストボードでも接触不良が起こるとイライラします。
追試する方はアルプス製などを激しくお勧めします。


返事を書く|リスト
8938 [8933] [8939]
雑談 鍵盤型スイッチ特注できるの?
#8938
この記事の投稿者にメールを送信 takeda (2008年05月12日19時51分)
Analogさん、情報さんきゅっす!なるほど、安いスイッチ、安いなりにアレなのねー。

アナログ2.0対応なら、見た目も大事だぞと、なんかいいスイッチねえかなと思ったらオッショさんがご紹介くださったのが、こちら。
マルサンネーム
http://www.marusan-name.co.jp/index.html
15cmX5cmぐらいのサイズで鍵盤の絵がついたシートスイッチ、イニシャル費込みで、1000枚で100万ぐらいだそうです。
一つ2千円で500人分。ちょっときつい。お忙しい中、営業の方にanalog2.0も込みで色々お話聞いたら、

東京センサー
http://www.t-sensor.co.jp/index.html
日本開閉器
http://www.nikkai.co.jp/
というスイッチのメーカーをご紹介くださいました。がんばってくださいねーとかいわれて、ちょっとそのきになったりして。調子に乗って日本開閉器に電話してみたら、シートキーボードカスタムで作ってもらって100枚で50万ぐらいで何とかなるかもよとのこと。(一つ5千円!)詳しくは、ホームページのフォームで図面等やり取りしてつめなきゃいけない感じです。どちらにしてもサラリーマンのこずかい、3万が限度だねえ...とほほ。

どちらもメーカーで小売(って、カスタムだからねえどーなんだろ)はやってないんだそうで、作ってもらうにはもう一工夫、小売店とか、代理店とか探さなきゃいけなさそうです。


返事を書く|リスト
8939 [8938] なし
雑談 Re:鍵盤型スイッチ特注できるの?
#8939
この記事の投稿者にメールを送信 analog (2008年05月13日00時28分)
リンク先のシートスイッチで鍵盤できたら、まぢカッコいいなぁ。
しかし値段もカッコよすぎて、ちょっと趣味の工作では500人分の
リスク背負えないですよね。
やっぱ鍵盤はあり物買うのが一番現実的な選択なのか?


返事を書く|リスト
8935 [8930] [8936]
雑談 Re[2]:鍵盤走査
#8935
この記事の投稿者にメールを送信 やすだ(や) (2008年05月10日21時21分)
AVRシンセで使っている、スイッチ入力の処理(matrix)ルーチンを
まとめましたので、
http://homepage2.nifty.com/ya2_com/bin/matrix_doc.pdf
にアップします.

オリジナルの設定スイッチ部分のスキャンに、鍵盤部分を追加し、
鍵盤部分から取り込んだデータは、オリジナルの MIDI のサブルーチンを
使って処理しています.
(今回は、スキャン部分の説明だけです 汗;)

プログラムの説明は、アセンブラのニモニックだと馴染みがないと思って、
動作をそのまま表記しました.
RAM に置いた変数を一旦レジスタに移して処理していますが、C言語だと
そのまま書けると思います.

スキャンデータを PD4-7 に出力して、
設定スイッチは PB0-3 で、鍵盤は PC0-7 から、内部でプルアップしたポートから
読み込んでいます.
(このマトリックス配列が、8ビットで区切られている玩具のキーボードにうまく合いました)

スキャンデータは、 PD4〜PD7 の4ビットの内、どれか1つが 0 ( L レベル)、
他は、1 ( H レベル)を出力して、読み込み処理が終わると、0 が1つ上位の
(隣の)ビットに移動します.

PD
 7 6 5 4
 --------
 1 1 1 0
 1 1 0 1
 1 0 1 1
 0 1 1 1

7ビットめまで行くと、次は4ビットに戻り、これを繰り返します.


返事を書く|リスト
8936 [8935] [8937]
雑談 Re[3]:鍵盤走査
#8936
この記事の投稿者にメールを送信 takeda (2008年05月11日15時53分)
やすださん、丁寧に解説ありがとうございます。勉強になりますー。

Cの関数はほとんどできてて、最後の調整してました。大体考え方はそんなに大きなずれないです。(いま、MIDI入力のほうの調整やってます)

僕のハードは、ノイズを引き込む可能性のある入力ポートをケチろう、出力は、外付けの47HC138で3ビットにしちゃえというものです。
138は、負論理なので、0-7までのデータを3bitで突っ込むとどっかがLOになるというもので、仕様的には、やすださんのハードとほぼ一緒です。
これが、CPU内部でプルアップした入力ポートにダイオードを介してスイッチされて、スイッチが押されると、プルアップで1だったポートがLowの138に引っ張られてLowになるという構造を考えてました。
僕の図面とはダイオードの向きが逆に見えますけど、入出力の向きが逆なだけで、アルゴリズム的には一緒。

仮組みしたソフトを最高速で走らせてみたら500uS程度だったので、1mSごとに呼び出すようにして、最初の1回目は、チャタリング/外来ノイズを疑ってスキップ、2回目さっきと同じ値だったらスイッチの状態が確定したと踏んで、処理します。
キーの立ち上がりと立下りをピンポイントで拾いたいので、ノイズフィルタ用のバッファと、確定してるいまの状態のバッファと2種類のバッファをもたせました。いまのキーの状態と、さっきのキーの状態をくらべて、立ち上がり立下りをByte単位で見るようにしたところがちょっと工夫ポイント。

実際ソフトを走らせて見ると、チャタリングというか、ひとつ前のスキャンのデータが、残ってる感じ、雰囲気的にはワークエリアをクリアしそこなったような状態。実際は初期化が不要な処理なので、まるで、138がワンテンポ、モタって動作してるんじゃないか状態。あわてて、仕様書チェックして、138の動作スピード見直したら、20MHzで走るポートのにくらべても桁が違います。138、無実。で、入力ポートの状態を見たのがこれ。
http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/key-scan1.jpg
上の矩形波は、138をドライブする入力。3ビット目立ち下がってるのが、入力ポート。で、4bit目のスキャンに移ったとき、ちゃんと立ち上がってません。
処理的には、OUTしたら、すぐ、狙いのポートをINしてますから、のんびり立ち上がってくる、ところ読んじゃって、さっきと同じ状態。138や、ダイオードの持ってるC成分を高速に充電するほどの電流は、CPUの内蔵プルアップからは取れないという事だと思います。スキャナをスイッチした後、その状態が確定するまで20uSぐらいかかります。コンパイラの最適化の影響を受けないwait関数を
http://ww2.tiki.ne.jp/~maro/AVR/programing/index.html#inlineasm
から、いただいて、8MHz時に1uS待つように書き換え、20uS待つように書き換えました。
ただ、これ、使うCPUのばらつきや配線で、大きく変わる部分にも思えますので、確定のつもりだったハード手を入れて、入力ポートはプルアップ抵抗を追加する事にしました。(ごめん、追試準備されてた方々!)千石で買える集合抵抗(10k、瞬間だけど0.5mAも使っちゃう!!)を1発入れると、立ち上がりスピードは3uSぐらいに短縮されますので、絶対安心マージンで、やっぱ、20uS待ってからデータを読み出すようにしました。詳細は近々にCのソースで公開しますね。コメントたくさん入れるつもりです。

ピンポイントで、スイッチの状態をサンプリングする事でチャタリングの影響をキャンセルする手法は、ELMさんの
http://elm-chan.org/docs/tec/te02.html
に紹介されてて、さらに同氏の2度読みで、ノイズキャンセルまで突っ込んだんだけど、過剰だったかしら。いや、なにかに組込むべく、(たとえば足鍵盤とかから、手元のメカまで)ケーブル引っ張るぞとかやられて、チャタリング以外のノイズとかにやられねーようにとか珍しく石橋をたたいてみたんだけど...。

MIDI入力つけたら、プログラム領域あと60バイトしかない、ベンドの処理入れられるかしら。どっか(っちゅーかMIDIバーサー以外ないと思うけど)アセンブラ化するしかないですね。


返事を書く|リスト
8937 [8936] [8940] [8941]
雑談 Re[4]:鍵盤走査
#8937
この記事の投稿者にメールを送信 takeda (2008年05月12日19時48分)
Analogさん、情報さんきゅっす!なるほど、安いスイッチ、安いなりにアレなのねー。

ソフト、最初の版が動き始めました。ベンドの処理は(サイズ的に)入れられそうになかったりして。

キースキャナ、最初の、なにかキーが押されてたら以降のチェックはやめて音出しちゃう式から、キーは全部調べる式へ変更して、チャタリングキャンセルは積極的になしにする代わりに、タイマーでサンプリングする方式に変えました。
スキャナ部分は掛け算割り算一切無し。ひらがなで書いたソフト。先日の問題点は、こちらのページにも紹介されていました。
http://www.ei.fukui-nct.ac.jp/~t-saitoh/exp/h8/key-matrix.html
この手の細かいページの情報はオッショさんのネタです。(まいどさんきゅ!)乾電池3本の実験だったんだけど5Vの電源ちゃんと掛けると結構早くて、ソフトのタイマーだけで、ハードの追加なくてもいいかな、な気もちょっとしたりして...

で、ハードのキーボードからもMIDIからもOKにするべく、お蔵入りだったMIDIパーサを組み合わせみたらうまくいきません。以前、泣きながらデバッグしたはずのMIDIパーサーなのにー!と色々見直してみたら、シリアルからの割り込み以外、割り込み無しの前提になってたりして。とりあえず、シリアルの受信中も割り込み禁止処理追加してもまだだめ。
結局、スキャナの起動タイミングが早すぎて、シリアルを取りこぼしてルらしいという判断で、1mSごとにキーボードスキャンを10mSにしたら問題なく動くようになりました。プログラムメモリー残り10バイト。シビレルー!

以前からMIDI-CVの入力に使っている特殊なバッファ、リングでもFIFOでもないというか、来た順に上に積むは積むんだけど、どこが抜けるかわかんない式、でも、タイミング的に最後に押されたノートが一番上にキープされるという、達磨落とし式のMIDI入力のバッファ、音を出す部分と直結なので、これをスキャナと共用しました。
キースキャナ自体はポリフォニック対応、というか、管理なし。これを先の達磨落としバッファに積んで、達磨だけに注目してCVを出すようにして狙い通りのモノフォニック化。(達磨から数えて4つめまではCVを出すとかにすれば4ポリCVとかバリエーションは色々ありそ)レガートもできます。タクトスイッチでやるかどーかはともかくグリスOK。

で、1難去ってもう1難。「そう言えば、20080430版のコンパイラが出てたな」、とインストールしてみたら、ぎりぎりだったプログラムこぼれたー。
AVRスタジオの、ProjectのConfiguration OptionのなかのCustom Optionsに、-mcall-prologuesを追加して、MIDICV部分だけコンパイルしてみると。2098バイト。えー。オッショさんネタの
http://www11.ocn.ne.jp/~akibow/AVR/winavr_misc.html
を参考に、MIDIパーサーのSwitch文の山をぜんぶif/else if/elseに書き換えてちょーど2048バイト。量ったろ!って感じ。こちらのページに紹介されてる技法で確実にプログラムは小さくできるんだけど、さすがに、300バイトは無理。
切り張りできるソースを公開が狙いなのに、収まらないかもじゃ、意味、半減。
プログラム書き込み済みのCPUを配布するつもりだったのでこれはこれでいいか?とか。

そうそう、やすださんのブログ
http://ya2-com.at.webry.info/
ご本人の許可を取ってChuckさんにチクったので、氏のアンテナで見られます。


返事を書く|リスト
8940 [8937] なし
雑談 回路図類更新しましたー
#8940
この記事の投稿者にメールを送信 takeda (2008年05月13日22時44分)
ハードウエアの図面と、CPUのPCBデザイン例を修正しました。

http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/cpu-schem.gif
http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/mini-keyboard-schem.gif
http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/CPU.pdf

Scan inにプルアップ抵抗を追加しました。PCBデザインの方は、10kが4本セットになった集合抵抗を使ってます。
オプションの5ビット目のプルアップはできませんでしたので、使う場合は、PCBデザインにメモしたとおり、基板の裏側に、抵抗を一本追加で半田付けしてプルアップします。卓上でポチポチと音を出すの、楽器の演奏とは違った楽しみがあって、けっこうたのしーっす。

ついでというか、
http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/keyboards.pdf
作ってみました。175mmX35mmというのが、TB-303の基板デザインからこんなもんだろうとサイズ取り出したもの。縦方向にスンズマリなのは、かわいらしさの演出。
140mmX25mmはpARMと同じ150mmのケースに合わせたサイズ。ケースに両面テープでぺたっと張って...んーどーすりゃいんだろ。


返事を書く|リスト
8941 [8937] なし
雑談 Re[5]:鍵盤走査
#8941
この記事の投稿者にメールを送信 やすだ(や) (2008年05月13日22時45分)
ブログの件、「通報」されてしまいました(笑)
内容は、いっこうに(!)、アナログ(ディスクリート)ネタになりませんが、今後とも、よろしくお願いします.
まとまったら、ホームページにしたいと思っています.

キーボード・スキャンのダイオード、意外と「尾」を引きますね.

この前の AVRシンセでは、オモチャのキーボードのパターンを1本ずつカットして、秋月で買ったチップのショットキーバリア・ダイオードを貼り付けました.
実際のスキャンの具合を、オシロで確認したいけど、実家に持って帰ってしまったので、すぐに見られずに残念..
ソフトの流れから見ると、スキャンデータを最後に出して、ポートの読み込みは、次にコールされてからになりますから、16mS 以上間が有って、データは安定していると思います.

32鍵のオモチャのキーボードなら¥1,000 程度で有りますから、ちょっとしたお遊びにはイイのですが、大きさがミニミニキーボードですからねぇ.. 弾き難くて..(苦笑)

さて、次は、ウチもポリフォニックかなぁ..?!


返事を書く|リスト
8942 [8930] [8943]
雑談 mini-keyboard最初の版を公開
#8942
この記事の投稿者にメールを送信 takeda (2008年05月16日23時14分)

Chuckさんのブログ、
http://emusic.g.hatena.ne.jp/Chuck/20080514
の「WEBサイトやブログで実アプリコードをオープンにしてギャップ・フィラーになれば良いですね」ええ、賛同するっす。僕としても、いろんなコードをオープンに紹介してコントリビュートしていきたいっすー。
というわけで、mini-keyboard最初の版を公開するですー。

http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/mini-keyboard-Ver10.zip

実は、PWMのフィルタ、キツ過ぎて、生のままで糸引きまくりの納豆ミュージック状態。さらに、先日試したコンパイラのバージョン、20080430版だったんですが、現在
http://sourceforge.net/projects/winavr/
での最新版は20080512 (2008-05-12 16:25)でオッショさんが試してくださったんだけど、300バイトぐらいこぼれてます。要するにプログラムでかすぎてチップに書けない状態。
僕が使ってる版が20060421版だと、のこり24バイト。しびれるー。

結局ギタリスト属性の僕としてはチョーキング(ベンドね)なきゃ楽器とはいえねえだろうとか最後までがんばったんだけど、入らなさそうです。自作楽器やってて、こだわりを捨ててどーすんだ。
このプロジェクトは、プログラム書き込み済みのCPUを配布する前提なので、ISPソケットなしの方向はこのままだけど、もう一度フィルタ見直したり、ベンド用の部品はずしたりハードの修正やりますわ。

ディスアセンブラのソースを見てると、どうも、キーボードスキャナの割り込みルーチンのレジスタ退避/復帰がひどいことになってて、それだけで100バイト近く食ってたりして、トータルの戦略としてミスった状態。
最新版のコンパイラではこのセットではコンパイルできません。なんか、色々工夫してチョンボかますとなんとか収まりそうな予感はするんだけど、だったら素直にアセンブラで書けよと言う声が聞こえてくるし。

動作全体は見やすくなってるはずということで、切り張りが楽な、Cで書かれた関数のセットを公開という方針としますわ。

MIDI-debug2.cというやつはChuckさんのソースで勉強させていただいたMIDI関連の構造体を使ったMIDIパーサーを使ったアプリとして、4CVアウトのMIDI-CVです。


返事を書く|リスト
8943 [8942] [8944] [8945]
雑談 目が覚めた!
#8943
この記事の投稿者にメールを送信 takeda (2008年05月19日22時44分)
Analog2.0構想が発表になった当時、電源の設計の際積極的にお手伝いしたっていうか、というか今から考えれば、ただ邪魔しただけだった気もスル..。いやそれはともかく、その名残というか、Analog2.0用だけど、非純正電源が手元にあったりして。
規格が決まる前だったので、ライフラインのコネクタの仕様が違ってるので古いコネクタはずして、(大変だったー)Analog2.0標準コネクタに付け替えて配線し直した。

http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/a20-power.jpg

写真はパイロットランプ用のコネクタと、Farm電源バス、それから、CV/GATEをパネルに引っ張るコネクタ。

Analog2.0支援のためのプロジェクトmini-keyboardなんだけど、次回発表予定のVCOに合わせて公開したいとか、ソフトウエアをどんどん公開したいみたいな狙いもあって、ちょっと気持ちが焦ってるんだけど、よく考えたら、ソフトは公開するけど、今手に入るコンパイラじゃサイズでかすぎてコンパイルできませんって、どーよ。餅は餅だけど、絵に書いた餅で食えませんってのはひどいんじゃない?プログラム焼きこみ済みのチップを頒布しますなんてつごーのいい言い訳じゃないか!道を踏み誤った...。目が覚めた!

だいたい、ギタリスト属性の付いた僕が世に問う(ってほどの事か)プロジェクトにもかかわらず、ピッチベンド省略しましたってのは、やっぱ、だめだろう。技術的に届きませんでしたというのならともかく、たかが(されど)プログラムサイズのせいってのは、どーよ。(書けなかったらどーしよー)

メーカーのエンジニアならともかく、こちとら趣味でやってんだよ。締め切りなんぞくそくらえ!やっぱ、やりたい事をやるぞ!いや、別に威張ることでもないんだけど。(って、自分で決めた締め切りだからねクリアする努力はするとしてもさ)

ピッチベンド機能を優先。MIDI受信機能やめます。そのかわりMIDI-OUT、付けます。いや、威張る事でもなんでもないよね。

だいたいMIDI受信系は、Chuckさんをはじめ、RJBさん、アルゴ堂さん、みんなの素敵なハードをいくつ組み立てりゃ気が済むんだ状態だったんだよな。
MIDI-CVコンバーターに関しては、Chuckさんの、プログラム焼きこみ済みのチップを頒布プランが立ち消えないように支援するのが道理かなと。

色々迷ったけど、決めた!GANさん、VCOの発表に間に合わなかったらごめん。

一般に、ダンパーペダルって、踏んでる間だけダンパーが利くよね、これをモーメンタリーモードとするなら、オルタネートモードのダンパーペダルというあまり聞いた事のない機能を入れようかなと。ライブとかで使うメカで、なんか、鳴ってってちょ見たいな時に使えるモード。脚鍵盤踏んでるとき、両足でペダル踏めないからね、3本脚の人はともかくとして。

MIDIへは、ダンパーデータとして送るけど、実際の動作はモーメンタリ/オルタネートダンパーモードへ切り替えられるようにしようかな。
あとピッチベンド。分解能どれぐらい取れるかがしょーぶかなー。
基本のノートオン/オフ。アクティブセンシングはどうしよ。なしにしちゃうか実装するか..。


返事を書く|リスト
8944 [8943] なし
雑談 [投稿者削除]
#8944
gan (2008年05月20日13時21分)
投稿者によって削除されました。(2008年05月20日13時21分)


返事を書く|リスト
8945 [8943] [8946] [8948]
雑談 Re:目が覚めた!
#8945
この記事の投稿者にメールを送信 gan (2008年05月20日13時24分)
takeda さん了解です。活動支援感謝感謝です。
納得行くようにやらないと DIY じゃないのでとことんやってください。
VCO の原稿が出来上がる頃 ping しますね。といっても、こちらもいろいろ立て込んでいて1ヶ月ごとのリリースがやばかったりして。
VCO の調整には、是非ちゃんとしたCV発生器があったほうが良いと思うので(そのわり自分では、1V単位の基準電圧発生器とメトロノームについているA440 テストオシレータだけでやってたりして)、何らかの CV 発生器の製作記事は付録したほうが良いだろうと考えています。


返事を書く|リスト
8946 [8945] なし
雑談 [投稿者削除]
#8946
gan (2008年05月20日13時39分)
投稿者によって削除されました。(2008年05月20日13時39分)


返事を書く|リスト
8948 [8945] [8949]
雑談 どんまいー!
#8948
この記事の投稿者にメールを送信 takeda (2008年05月22日20時07分)

ドンマイっすー!!腹をきめたら早ええぞ、まけねーぞ!とかなんか、勘違いしつつも、なにか重大な決心に満足しちゃって、書かなくてもOKな気分にならないように先にハードの改修からはじめてたりして。(自分でも思うけど、単純だよねー、ひらがななじんせー万歳!、漫才じゃないぞ!)まずは図面、書かかなキャー!

ADコンバートの実験もしなきゃなんだよな、予備実験はあまりいい感じじゃなかったので、もっと高速で、精度の高いなんかを試さなきゃいけない。一方では、汎用じゃなくてピッチベンドしかも、分解能は4とか5ビットとかだと、結構いろんな方法があるんだろうなとか..。再現性があるのかとかもちょっと心配なポイント。
調整が必要になるのはいやだなあ、自動チューニングというか、なんか、そんな機能が必要かも。どしても調整しなきゃだったら、オプション扱いして、じっくり実験して決める部分にします。だれでもスーパーギタリストになれるわけじゃないことはもう20年前に気が付いちゃってるし...こだわりは、再現性の高さのほうが強いです。結構本気でCHIP配ってみようと思ってるしー。

なんか、FiveGで鍵盤型のスイッチ売ってますね。
http://www5f.biglobe.ne.jp/%7efukusan/products/doepfer/OEM/OEM.html
ちなみに僕の愛用の、Oxygen 8の ver2がFiveG 販売価格で¥18,900だからね。


返事を書く|リスト
8949 [8948] [8950]
雑談 Re:どんまいー!
#8949
この記事の投稿者にメールを送信 gan (2008年05月24日15時37分)
鍵盤スイッチいいですねー
自動チューニングネタ、この間どなたかと(多分所長)チャットで話した気がします。
自作機って、スケール調整が微妙に違うだろうし、あると便利そうだなーと思います。
名前だけ先に決まってたりして
「スケールくん」
レンジも自動設定できるようになったら、
「調律くん」
ですか、やっぱし


返事を書く|リスト
8950 [8949] [8951]
雑談 Re[2]:どんまいー!
#8950
この記事の投稿者にメールを送信 やすだ(や) (2008年05月25日21時06分)
趣味の世界ですから、気楽にどうぞ.
ムリして身体を壊したら、何にもなりませんから..

ところで、以前から、疑問に思っているのですが、
自動チューニングのアルゴリズムって、決まっているのでしょうか?
(ウォームアップのしばらくの間、一体何を考えているのやら..!?)
すばやく合わせることが出来れば、イイですね.

「スケールくん」or「調律くん」、楽しみにしています.


返事を書く|リスト
8951 [8950] [8952]
雑談 正式名称、「MInI-BOARD」にけってー
#8951
この記事の投稿者にメールを送信 takeda (2008年05月26日03時15分)
> 趣味の世界ですから、気楽にどうぞ.
> ムリして身体を壊したら、何にもなりませんから..

安田さんに言われると、りあるだわー、気をつけなくちゃ。

今日、某企画のオフ会が催されて、招かれて行ってきましたー。自作楽器を、とのことだったのでpARMの出動。モエモエーボエーっといい音だしてますー(自分で言なー!!)。

これにあわせて、見た目だけでもデビューという事で、ミニ鍵盤やっつけました。開発コードは、mini-keyboardでやってきましたが、正式名称、「MInI-BOARD」としました。
http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/MInI_BOARD1.jpg
http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/MInI_BOARD-case.pdf

YM-130(130mmX90mmX30mm)に入れて、Analog2.0の前にちょこんとおいて、人差し指でつんつんしながら鳴らすのを想定してたんだけど、実際、見てもらったら、みんな両手で持って、タクトスイッチを親指で押すのね。想定外。ゆくゆくは、ウインドコントローラーへ展開しようと思ってたんだけど、これ、そのまんま、いつかやるぞと思っていたMIDIカリンバ状態。ほげー!

人差し指で突っついて演奏するのにはさすがに無理があるんだけど、オヤユビ2本で鳴らすとそれなりに演奏性能が上がって、思いがけず、シーケンスっぽいフレーズを鳴らすのにちょうどいい感じだったりして。
PS2のコントローラーみたいに右手人差し指で押せる場所にボタンを追加して、オクターブスイッチにして、左手はベンドというか、半音上げるボタンをつける。前面のボタンはダイアトニック(要するに黒鍵なし、白鍵のみの7音)にしちゃえとか、思いがけないアイディア連発。ブルースハープ的な演奏感、かなと。そしたら、ウインドセンサをつちゃったりして、電気オカリナへあと一歩な雰囲気。

ケースの加工で一晩かかってしまい、中身は開発途上版のMIDI-INつきのタクトスイッチスキャナと、CV+GATEアウト。

電源周りと、CV+GATEアウト部分のアナログ部分は決定ということで、Analog2.0規格に合うかどうか実機の連動チェックのためにganさんにわたしちゃった。Analog2.0用のコネクタの穴。
http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/MInI_BOARD2.jpg

も、まよわねーぞ、とか言ってた割に、実際動かして見せたら、MIDI入力の機能が結構評判。ちょっと音チェックにはこれでならしてちゃんと演奏したいときにはMIDI経由で鳴らすとか。
音楽制作の現場のでの使い勝手は、自分でもそうだったのだから、MIDI入力は重宝する。
単体のメカ、演奏のためのアイテムとして捕らえると、それもありー、状態。

また、ちょっと迷いが...。というか、形にしてみると色々なアイディアがでてきて、また、次のステップってことなんだろうなと。
まずは、決める。四の五の言わずに作って触ってみて、で、評価してというループは開発の上で大事だなと。形にするところで、次のステップがはじまるんだなーとか。まずは最初のステップを終えるが大事かなーとか。


返事を書く|リスト
8952 [8951] [8953]
雑談 Re:正式名称、「MInI-BOARD」にけってー
#8952
この記事の投稿者にメールを送信 analog (2008年05月26日10時10分)
> また、ちょっと迷いが...。というか、形にしてみると色々なアイディアがでてきて、
> また、次のステップってことなんだろうなと。

2313にこだわるんだろうなぁと、なんとなく気持ちがよく分かるから、
黙ってたけど、ADの事とか容量とかで悩む位なら、MEGA88とかに変えるとかで
一気に解決すると思うんだけど。秋月なら150円の差だし
機能削る位なら150円増してもイイんぢゃない?
もしかして2313を一生分(千個とか)買ってしまったとか(笑
MPUチェンジはtakeda道に反するのかなぁ?
大きなお世話だったらゴメンね


返事を書く|リスト
8953 [8952] [8954]
雑談 いえいえ、んーなわけないですー
#8953
この記事の投稿者にメールを送信 takeda (2008年05月26日22時13分)

> MPUチェンジはtakeda道に反するのかなぁ?
> 大きなお世話だったらゴメンね

いえいえ、んーなわけないですー。

このプロジェクト、書き込み済みのCPUを少なくとも1個はどなたかに郵送して気持ちの中では完成ということにしてます。トラぶっっても100円だったら、(郵送費他込みで1件200円かな)10回までならすっぽかされても泣かない、という決心のあらわれということで。
実は気持ちはMEGA88に移っていて、すでに2個入手済み、うふ!、手持ちの2313の在庫(数個だけどね)を掃いちゃおうという狙いもあるし。それなりに時間掛けて準備してる2313のPCBパターンまだ正式にリリースできた版って一つもないし。

一応今後のために、2313、もう一回アナログコンパレーターを使ったADコンバーターの実験だけやってみようと準備中だけど、すでにベンドは、ボツにする可能性も考えてます。
実験の狙いは再現性。ま、やすださんご紹介のアトメルの記事だからそれなりに期待できるとは思っているんだけど、なにより、やすださんもおっしゃるとおり、オートチューニングのアルゴリズムって面倒くさそうなんだもん..。マジに88でやりたいし。

1V/1OCTのスケールの調整は、オペアンプの増幅率の問題でいったんセットすれば、そんなにズレるモンでもないだろうと思ってます。自動で何とかするのはピッチの部分かなと思ってます。
実際検討してたのは、ベンドホイルの位置、ばねを仕込んでいつも中点(というのかな)にあるのが前提で、その位置の値をピッチ+/-0とするっちゅーか、チューニングというより、起動時のホイルの位置のキャリブレーション的なモノを想定してましたー。
ばねを仕込んだベンドホイルなんか、部品としては売ってないし、作るのも(やってみたいとは思うんだけど、だれもがそーとも思ってないし)難しそう。今どの点にあるのか解らないままキャリブレーション?。これのせいで、1V/1OCTのスケールの調整も、基準位置がずれたりして、調整の手順が難しくなっちゃうようなら迷わずオミットの方向です。

このプロジェクト、Analog2.0支援だから、「なんか組み立ててみたー、ちょっと難しげな調整やってみたー、動いたー!ワーイ」という着地点目指してまずは軟着陸を決めよう、まだ完成してないけど、記事のページも組み立てにフォーカスして、あまりソフトのことは触れない。組み立ててみたら動く。やれるじゃん!と思ってもらうのが狙い。で、2313でMIDIアウトとCVアウト付きのミニ鍵盤、CPUの頒布も込みでVer1.0。

このプロジェクト、プロトタイプをちらっと見ていただいただけで、色々なアイディアがでてきてすげえうれしいっす。色々なアイディアをフィードバックして、MEGA88でVer2.0を別途やってみようかなと。


返事を書く|リスト
8954 [8953] [8957]
雑談 安価なジョイスティックは?
#8954
この記事の投稿者にメールを送信 やすだ(や) (2008年05月27日22時31分)
以前 Chuckさんのブログにも出てましたけど、簡単な実験なら、ホイールの代わりにジョイスティックは、如何でしょぅ?
http://blog.livedoor.jp/siliconhouse/archives/50757602.html
http://www2.cyberoz.net/city/hirosan/r.html
ストロークは少ないですけど、グリグリ(?!)は体感できます.

使っているうちに、ピッチ(センター)がズレるかも知れませんね..
電源オンで(最初に)、読み取った位置をセンターとして、補正(オフセット)値を決めますか.


返事を書く|リスト
8957 [8954] [8958]
雑談 Tiny2313でケチケチADコンバーターの実験
#8957
この記事の投稿者にメールを送信 takeda (2008年05月29日19時18分)
>..簡単な実験なら、ホイールの代わりにジョイスティックは、如何でしょぅ?..

そ、それだ!

> 電源オンで(最初に)、読み取った位置をセンターとして、補正(オフセット)値を決めますか.

自動でキャリブレーション、やってみたいテーマの一つですー!

とか言いつつも、最初のテーブルトップでなく、両手で持ってのスタイルなら、ベンドはいらないかも。むしろ、あのメカについているべき機能は、ポルタメントじゃなくて、チューニングのノブのような気がしてきてます。で、Analog2.0的にはオミットして、パネルのつまみを動かすようにしたほうが解りやすいかも。
音楽の演奏に使いやすいかどうかは別で、っちゅーか、やっぱ、タクトスイッチでの音楽は既成のものとは違うものになるだろうなあとか。

2313で、ケチケチADコンバーターの実験やってみました。根がケチなんだろうねえ、こーゆーチープなの大好き。
http://www.aleph.co.jp/~takeda/radio/takedanote/src/2313-AD-Conv.zip
ドキュメントには書き損なったけど8Mで動かしてます。ヒューズは

AVRSP -FL11100100

ネタは、
http://analog-synth.jp/cgi/dkb_as/dkbsystem.cgi?id=&md=viw&no=8901&tn=8892
でやすださんがご紹介くださった
AVR400: Low Cost A/D Converter。
http://www.atmel.com/dyn/products/app_notes.asp?family_id=607
オリジナルはアセンブラなんで、Cに書き直して、Tiny2313に合わせてデファインに差し替えたり、ちょっと工夫して、ハードウエアの配線楽になるようにピン配置配置変えるべくソフト書き換えたり、エラートラップ追加したり、一応、実用1歩手前まで仕上げました。

デバッグ情報を外に出すのに、シリアルを使うサンプル(9600bpsで3桁の10進数をアスキーで出力しますが、規格外、実験用オンリーですね)とか、インラインアセンブラで、コンパイラに最適化されちゃわないウエイトループとか、切り張りのネタにお使いください。ウインドウズ付属の、ハイパーターミナルのパラメーターファイルもついてます。
そうそう、ハイパーターミナルと、AVRSPは、シリアルポート取り合いますのでAVRSP動かした後、ハイパーターミナルは再起動しないとだめです、ってあたりまえですけど。

なんか、このメソッドでは、0は拾えないみたい。0付近はノイズとかでうまく拾えないのか、エラーとしてトラップしなきゃいけないみたい。半固定抵抗の問題かなー。

ドキュメントでは、0V-2Vまでとなってますが、なんでVCCの2/5Vかというと、ELMさんのページ、
http://elm-chan.org/docs/avr/avradc_j.html
によれば、マイコンのプルアップの機能がそこまでは定電流的な動作になるからのようです。
また、オリジナルでは、Cの放電時間は200uS以上となってますが、僕の実験では500uS欲しいかもな気がします。相変わらずマイコンの実験は乾電池ではありますが...。

変換時間そのものは、外付けのコンデンサと、抵抗でタイミングを作ります。この場合、70us以下。準備に、500uSぐらい必要。この版ではカウンタノプリスケーラを1/8にしてるので、8倍ぐらいまでは簡単に解像度を上げられそうですが、数回連続で読み出すと、さっきとにたような違う値が出てくるようです。Zipファイルに同梱したグラフを作るときも、だいたい、いまこれぐらいの値かなーみたいな感じでデータ取りました。
この出力をCVに混ぜて、ノイズっぽいCVにして、アナログくささを演出とか...瞬間頭をよぎりましたが、だれもが組み立てても似たような結果が得られるのが前提ということで、このプロジェクトからはADCをつかったベンドはオミットの方向かなー。

アナログ部分のフィルタ、RJBさんのpARM-TypeRに搭載されたMega88のMIDI-CVの手抜き(いや、この言葉、ほめてないみたいに思えますけど)フィルタを試すにはこれからだときつい(実はすでにパターンができてます)、ということで、定数だけ変えました、0.01uFと22k。デフォルトで掛かるぬめっとした感じが取れて、スピード感2倍アップかな?
http://www.aleph.co.jp/~takeda/radio/takedanote/img/mini-keyboard/MInI-BOARD2.mp3
久しぶりにFarm鳴らしてみた、スタイナーのバンドパスフィルタ。


返事を書く|リスト
8958 [8957] [8959]
雑談 Re:Tiny2313でケチケチADコンバーターの実験
#8958
この記事の投稿者にメールを送信 Chuck (2008年05月30日09時07分)
書き込むのは久しぶりですが、いつも読んでます。

> 2313で、ケチケチADコンバーターの実験やってみました。
> AVR400: Low Cost A/D Converter。

RC網をマイコンのポートで制御して、そのコンデンサの端子間電圧をA/Dして内部のデジタルEGにしたらテーブルが省略できるなと考えてしまいました。

同様に逆バイアストランジスタでのノイズソースを作っておいてA/Dしてマイコン内部で使う、とか…

# アプリケーションノートを見ていたら AV341にタッチスクリーン・コントローラを
# 見つけました。使うときには楽ができそうです。


返事を書く|リスト
8959 [8958] なし
雑談 Re[2]:Tiny2313でケチケチADコンバーターの実験
#8959
この記事の投稿者にメールを送信 takeda (2008年06月02日22時06分)
コメントどうもです。

> RC網をマイコンのポートで制御して、そのコンデンサの端子間電圧をA/Dして内部のデジタルEGにしたらテーブルが省略できるなと考えてしまいました。

な、なぜそこにバッファをつけて外に出さないんだー!!
目的と手段の完全なる逆転かー。て、哲学を感じたりして。

>同様に逆バイアストランジスタでのノイズソースを作っておいてA/Dしてマイコン内部で使う、とか…

これは、ちょっと魅力を感じたりして。