スポンサーリンク


RAKUTEN

  • スポンサーリンク

« 2013年9月 | メイン | 2013年11月 »

2013/10/30

AITENDOのOLEDで階調表示

Aitendo様がOLEDモジュールの新しいのを出していますね。

 

乗っているOLEDは今までのと同じ128x64で、インタフェースが3種類から選べる、というもののようですが、使っている写真の富士山の絵はちょっと。。。。はめ込みなのは良いのですが、これ階調表示ですよね。。。しかも8階調くらいはあるような。

 

 ちょうどあちこちで偽装表示が騒がれているこのタイミングで1bppモノクロディスプレイの紹介画像にこれはいかがなものか、と一瞬思いましたが。

 

1bppでも時分割表示すれば残像で階調は出せるな、と思い直しまして、OLEDでやったらどうなるか、昨日からちょっと試してました。

成果は下の写真です。

Dscf2610

こんな感じでなんとか4階調だせました。

しかし正直に言うとデジカメのパラメータを調整したのでそれなりに写っていますが、実はかなりちらついています。

昔モノクロLCDで同じような階調表示を作った時はほとんどちらつきなくできました。今思うとSTN液晶だったので応答速度が遅いのが幸いして残像としてはきれいにみえたのかもしれません。

OLEDは応答速度が速いのがこういう制御では良くない方向にころぶのかな、と思っています。

大まかな原理は以下の通りです。

 ・仮想フレームメモリを1bppから2bppにする。

 ・OLEDへの転送をアセンブラ化して速くする。

 ・画面更新をソフトからの関数コールからタイマー割り込みにする。

 ・画面更新時に表示フレームごとに表示データにパターンの違うマスクを

  かけて、ピクセルの階調ごとにオンオフを制御する。

 

せっかく作ったのでソースも公開します。

「GS_MAIN.c」をダウンロード  :確認用メインです。

「graphics_gs.c」をダウンロード :階調表示対応グラフィックルーチンセットです。

                     各関数のcolパラメータに0〜3の階調を指定します。

「oled_ctrl_gs.c」をダウンロード :階調表示対応OLED操作ルーチンです。

「oled_trans.s」をダウンロード :OLED転送部の高速(アセンブラ)ルーチンです。

                    速度重視でとてもベタな書き方になっています。

「font8x8.h」をダウンロード :フォントデータ(変えてません)

「oled.h」をダウンロード :OLED定義(変えてません)

  

これで一応Aitendo様の写真は決して偽装表示ではない、と証明できた。。。らいいな、と思います。

同じような時分割制御で、もう少し階調を増やして、あとはカメラのシャッター速度さえ遅くしてやれば、あの写真と同じものは実機動作でもきっと撮れます。そこまではやりませんが。

  

OLEDへの転送速度をもっと早くすればちらつきも低減されるはずですが、今のところこれ以上速くする算段がつきません。多少のちらつきには目をつぶって、この次はこれで一度4階調を使ったソフトを何か作ってみたいと思います。

  

それではまたです。

2013/10/28

【動画紹介】BABY LED suit

妙にアクセスが多いので覗いてみました。

動画だから笑えるけど、もしこれに夜会ったら逃げますね。

 

ここで買えるみたいですが、サインアップしないと値段とか分からないです。

http://www.ledbaby.com/

個人のサイトみたいな感じですが、1週間で1000万アクセスを超えてるので結構売れてるかもしれないですね。しかしよく考えるもんです。

 

それではまたです。

2013/10/27

AITENDOのジョイスティック

今日は良いお天気でしたね。昼間ちょっと出かけた後、また軽くFRISKーPICの機能追加してみました。

物はAITENDOのアナログジョイスティックです。少し前に買ってありました。

Dscf2582  Dscf2584

FRISKに比べると大きめですが、中々よくできています。

先日オシロスコープもどきを作った際にADCの動作をコーディングしてましたので、それをちょっとアレンジして動かします。回路図とつないだ状態は以下の通りです。

Oled_joy  Dscf2586

プログラムコネクタに出ているAN2,AN3入力を使っています。

 

とりあえず、X-Y座標の数値と簡単な表示だけ作ってみました。

「XY_MAIN.c」をダウンロード :メインです。これ以外のファイルは先日のオシロのときと同じです。

 

これでなにをやるか、というと、やっぱりゲームでしょうか。元々スイッチを3つしか付けてなくて、左右移動しかできなかったのをちょっと失敗したなと思っていまして、これで改善のつもりです。上下左右移動できるようになりますので、ゲームの幅が広がります。

    

次にこれを使ったゲームでも何か作ってみます。

それではまたです。

PICマイコンでワイヤレスオルゴール

先日偶然AMラジオから音が聞こえた現象を、意図的に動かしてみました。

Dscf2568_2  Dscf2559

原理はとても簡単で、PICマイコンが持っているPWM機能を以下のように使います。

 ・PWM周期をAMラジオの周波数帯に設定する。今回は630KHzにしました。

 ・20KHzインターバルタイマ割り込みでPWMのパルス幅を出したい音に合わせて制御する。

 

まずは動きをどうぞ。前回の現象はスプリアス的に周波数のあちこち聞こえてましたが、今回のものはラジオを周波数を630KHzに合わせるときっちり聞こえます。

 

電波法的には。。。3mどころか10cmも離せば聞こえなくなるので大丈夫でしょう。

実用性は。。。ないかな(^^;? 強いて言えばラジオのボリューム上げれば内蔵ブザーより大音量が得られる、くらいですかね。

 

回路図は以下の通りです。プログラム用コネクタに出ているPB0端子にアンテナ代わりの線を刺しただけです。ソフトでPB0をPWM出力にしています。

Oled2_cir_2

 

ソースは以下の通りです。

「WORG_MAIN.c」をダウンロード  メインです。

「musicdata.h」をダウンロード  2和音3曲分のデータです。

ほかのファイルは以前のTETRISのときと同じです。

音楽データは、音程1バイト+音長1バイトで一つの音符に相当します。

音程の数値は発音したい周波数を20KHzの周期(50us)で割ったものです。

 

20KHz割り込みごとにカウントし、この数値の1/2回ごとにPWMパルス幅の長短を切り替えることで630KHzのPWM出力に変調がかかります。

和音は、それぞれのパートのパルス幅長短の計算値を加算して対応しています。今回2和音ですが、割り込み処理が間に合うならもっと増やすこともできます。

 

実はこのデータとアルゴリズムは以前PIC12Fでオルゴールを作った物を流用しましたので、比較的簡単にできました。

しかし、PIC12Fの時はアセンブラでぎりぎり間に合っていた処理で、今回C言語で記述して間に合うかどうか、と不安でしたが、やってみたら特に問題なしでした。さすがPIC24Fです。

  

ADCを動かせばワイヤレスマイクもできますね。しかしあまり面白くなさそうなので今回はやめときますが。

 

それではまたです。

続きを読む "PICマイコンでワイヤレスオルゴール" »

2013/10/19

PICマイコンでワイヤレスマイク?

先日作ったフリスクゲームをいじっていて、偶然ですが、AMラジオに近づけるとそちらからゲーム音が聞こえることに気づきました。

Dscf2555  こんな感じでラジオのバーアンテナがあるあたりに近づけると結構大きな音で聞こえます。周波数はあちこちで聞こえますがAM下限の530KHzより少し高いあたりが一番よく聞こえるようです。

 

今の内蔵ブザーが弱々しいので、ワイヤレス外部スピーカとして使えそうです。

  

しかし、理屈がよくわかりません。サウンド系の信号の高調波としか思えないのですが、なんでAM周波数帯まで届くのしょうか?

 

サウンドはPWMで作っていて、PWM周期を音程周波数(数100Hz)にして、Dutyをその1/2固定にしています。波形は単純な矩形波なので高調波が相当乗るとは思いますが、1000倍波くらいでなないとAM帯に届かないはず。それがラジオで受信できるほどのレベルがあるのでしょうか?それとも他の信号なのか?

 

と、疑問ではありますが、思いついたこととして、PWM周期をたとえば1000KHz固定としてしまって、Dutyの方をうまいこと制御してやれば搬送波1000KHzで送信するワイヤレスマイクができるな、というのがあります。

  

今はマイク入力がないので、時間ができたらとりあえず今のソフトを改造してワイヤレスオルゴールからやってみようかと思います。 

 

それではまたです。

2013/10/12

AitendoのOLED in FRISK その8 「テトリス」

今日は暑かったですね。出かける気にならず扇風機かけながら次のフリスクソフトを作ってました。

主な構造としては10x20ブロックの仮想スクリーンを作ってその中でブロックを動かしてその状態をOLED表示に反映させるルーチンを作っています。あとは力技です。

BGMと操作音の合成がちょっとうまくいってなくてBGMが途切れがちですね。

あと、そうは見えないかもしれないですが、クリア時に動くのはコサックダンスのつもりです。

ソースはこちらです。

コメントも少なくてすみませんが、ご参考にどうぞ。

「TETRIS_MAIN.c」をダウンロード  :メインです。

「graphics.c」をダウンロード :グラフィックルーチン(今回は変えてないです。)

「oled_ctrl.c」をダウンロード :OLED制御ルーチン(これも変えてないです。)

「oled.h」をダウンロード :OLED用ヘッダ(これも変えてないです。)

「font8x8.h」をダウンロード :キャラクタを変更しました。 

 

それではまたです。

2013/10/07

100円ブザーでインターホン実験

300円で作るインターホンもどきです。
 

先日100円警報機の圧電ブザーで無理やりラジオを作ってみましたが、

その際に、一時的に確認用としてセラミックイヤホンをブザーと並列につないでいたところ、がさがさという音がイヤホンの方から聞えておりまして、どうやら、圧電ブザーがマイクとしても動作しているな、と気付きました。

その後ネットで検索して、どうやら既に実験されている方が結構いるな、とは分かりましたが、

100均グッズだけで作っているの例はなさそうなので、今日早く帰れた所でちょっとやってみました。

耳にあてるとなんとか聞こえる、という代物ですので、

糸電話の実験と大差ない感じですね。(^^;

それではまたです。

2013/10/06

AitendoのOLED in FRISK その7 「オシロスコープ化動作」

とりあえずフリスクオシロとして動かしました。

Dscf2455 信号源に本当のオシロのテスト信号1KHz矩形波を分圧して使っています。矩形波だと面白くないので簡単なCRフィルタ回路をつけています。

動作は以下のような感じです。

Dscf2454 Dscf2456 Dscf2457

実は操作中に動作不安定があり、画面が非常に乱れることがあります。

 

信号源のオシロの矩形波端子につないでいる時だけそうなりますので、安物オシロのためグランドになにかノイズでも乗るのかと思っていますが、ちょっと解析する気力がなく、追っかけてはいません。

 

上はとりあえず安定した時の写真です。

  

 

ソフトはそれなりに動いていると思いますので、ご参考用にソースを開示します。

「OSC_MAIN.c」をダウンロード :メインです。

「graphics.c」をダウンロード :グラフィックルーチンです。

「oled_ctrl.c」をダウンロード :OLED制御ルーチンです。

「oled.h」をダウンロード :OLED定義ヘッダです。

「font8x8.h」をダウンロード :表示用フォントデータです。

  

それではまたです。