スポンサーリンク


RAKUTEN

  • スポンサーリンク

2014/05/25

Aitendoのタッチパネル付きLCD制御

USB-MIDIの方はもう少し調査と勉強が必要として、はんだ付けしたいので平行してタッチパネル付き表示の方を進めることにしました。

 

物はAitendoのタッチパネル付きLCD【L32C1289P1037B16】を使ってみます。

 

このLCDは16ビットパラレルI/Fですが、FPC上の抵抗位置を変えることで8ビットとしても使えます。まずはそれをやってみました。

Dscf5016 R4を外して、未実装のR5に移せ、というのですが、チップ抵抗を外すのはよいとして、それを再利用というのはちょっと大変です。実行前に抵抗値を測ったところ、このR4というのはチップジャンパ(0Ω抵抗)と分かりましたので、R4は取り外して、R5をショートすることにしました。

Dscf5017結果はこんな感じです。まあ大丈夫そうかな。

 

その後ポリウレタン線で配線用のジャンパをひたすらはんだ付けしました。

Dscf5018 Dscf5019

Dscf5020 ルーペで確認して最後にテープで保護。

全部で20本以上ですが、ポリウレタン線のおかげでそれほどかかりませんでした。

 

とりえあず本日はここまで。

2014/05/18

大人の科学 ポケットミクを改造してみる。 その16

USB-MIDIにつきまして、どうやらMICROCHIPが出しているUSB-FRAMEWORKというものにライブラリとサンプルコードがあるらしい、ということがわかりましたので、まずはそれを見てみることにしました。

 

以下のページからMicrochip Libraries for Applications(MLA)のWindows用をダウンロードします。

http://www.microchip.com/pagehandler/en-us/devtools/mla/

インストールされたフォルダを見ていくとUSB-MIDI用が以下のようにできていました。

Usb_fw PIC24F用もありますね。しかし、どうやらこれはMPLAB-X用です。

今まで面倒くさがってMPLAB-8からバージョンアップしていなかったのですが、この機会にMPLAB-Xに切り替えることにします。

 

以下のページからインストーラ(ZIP)をダウンロードして解凍・実行します。

http://www.microchip.com/pagehandler/en-us/family/mplabx/

 

 

特に問題なくOK,OKで進めていたところFINISHとなり、デスクトップにアイコンができました。クリックしたところが以下です。

Mplabx どうやらインストールはできたようです。

「プロジェクトを開く」で先にダウンロードした MLAのUSB-Audio-MIDIを開いてみました。

Mplabx2 なにか開いたようですが、よくわかりません。

試しにBUILDをやってみたらWARNINGは出ますが、一応Completeまでは行きましたので、使えることは使えるみたいです。

 

ここからどうやったら良いのか、調べてみます。

 

それではまたです。

 

大人の科学 ポケットミクを改造してみる。 その15

ちょっとあいだが空いてしまいました。また本業が少しきつくなってまして。。。

次のステップとして、USB-MIDIに手を出すのと、鍵盤部分をタッチパネルにしてやろうと思っているのですが、中々手がつきません。特にUSB-MIDIの方はPICでもできそうなのですが、いまいち何をすれば良いのか分からず調査&勉強中です。

 

とりあえず、区切りとして前回までのソースを公開したいと思います。

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

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

「spilcd_cl.c」をダウンロード  :SPILCD制御ルーチンです、

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

「miku.h」をダウンロード :ミクの顔データです。

 

「pocketmiku3.zip」をダウンロード  :全プロジェクトの圧縮ファイルです。

 

プログラムとしては、タイマー割り込み処理が苦労したところです。

ポケットミクと同期するために、ステートマシンを構成してスイッチスキャンタイミングをキックとしてステートを動かしてスイッチ、鍵盤読み取り、鍵盤操作のタイミングを作っています。

 

それに記録機能と、再生のためのDAC操作を追加したためごちゃごちゃした作りになってしまいました。

 

次ステップでは是非USB-MIDIを動かしてみたいと思います。。。が、できるかどうか。

それではまたです。

2014/05/06

大人の科学 ポケットミクを改造してみる。 その14

今回はポケミクに録音・再生機能(正確には演奏パターン記憶・再生)を付けました。

音楽の才能がないので凝った演奏はできませんでした。(^^;

 

なお、今回から絵をはちゅねミクから初音ミクに変えて、瞬きも追加しました。

表情付き初音ミクGIFをフリーで公開されている「+猫舌+」様のおかげです。 

 

なお、ポケットミクのスタイラス操作については前回のまままだ半分です。つまり音階はDAC操作でなんとか流しこめますが、タッチオン・オフを操作することができません。

 

コメントで戴いた「スタイラス側からも信号を出しているのでは?」が正解かもしれません。というのは、タッチしていない状態でスタイラスの信号をオシロで見たところ、何か2ms周期でドライブが見られたためです。

 

スタイラス側からの信号を鍵盤で受けているとなると、鍵盤側も操作してやらないといけないわけで。。。ここで降参です。現状に合わせてハード的になんとかすることにしました。

回路図は以下の通りです。

Miku4 赤色のところが今回の変更箇所です。要はスイッチをいれて録音・再生を切り替えます。スイッチをオンにするとDAC出力がスタイラス入力に入るようになり、DACがハイインピーダンスになっているときは分圧抵抗でタッチしているようなレベルがスタイラス入力に入ります。これでDACによる音階制御とタッチ操作を無理やり行えます。

 

次はどうしましょうか。考え中です。

 

それではまたです。

2014/04/29

大人の科学 ポケットミクを改造してみる。 その13

ポケミクを今回内蔵したPICマイコンから操作する方向でのトライを始めました。

まず、操作スイッチの方ですが、これは今の回路でかなり簡単にできました。

通常はPICマイコンのPORTA,Bを入力にして監視しているのを、TRISA,Bを操作して一時的に出力にし、0を出すことで対応したスイッチが押されたかのようにポケミクに思わせることができます。

 

スタイラスの方はそう簡単ではありません。とりあえず10bitDACを付けてスタイラス電圧をPICマイコンから制御できるようにしてみました。回路図と、取り付け位置は以下の通りです。

Miku4  Dscf5001

DACは秋月電子のLTC1660を使いました。 この石は8個アナログ出力を個別に制御できるというすぐれもので、今回の用途には過剰なのですが、他にちょうど良い物がなかったのでこれにしています。

 

このDACは出力をハイインピーダンスにもできますので、普通にスタイラスを使う時はハイインピーにしておいて、PICから演奏操作する時はドライブさせて、鍵盤スキャンタイミングで鍵盤位置相当のアナログ電圧を出力します。

 

これで鍵盤読み取りと組み合わせると操作の記録・再生ができるというはずなのですが。。。。どうやらそれほど甘くはないようです。

 

やってみたところ、DACから鍵盤位置を入れることはできるのですが、鍵盤を押していることをポケミクが受け付けてくれません。現状はスタイラスを鍵盤のどこか(どこでも良い)にスタイラスを当てておいてDACから電圧を入れると対応した音階が出る、という状態です。

ポケミクの鍵盤制御はかなり奥が深い模様です。

Dscf5003 これが鍵盤インタフェースの信号です。上がスタイラス入力、

下が鍵盤に印加されている電圧です。下を見ると電圧を2段階に分けてかけていますね。

推測ではその2段階での差分を見ることで読取精度を上げていて、オンオフ判定もその差分から出しているのだと思いますが、どうもその仕組みがわかりません。。。。

 

とりあえずスタイラスを当てた状態では動くので、それで操作記録・再生までは動かしてみようかと思います。

 

それではまたです。

 

2014/04/28

大人の科学 ポケットミクを改造してみる。 その12

簡単な口パク音声同期をやってみました

音声波形を見ていたところ、振幅だけで以下の3段階に区分できることがわかりましたので、単純に波形の一定周期でMIN,MAXを記録しておき、その差文だけを元に口の絵を変えています。

   @A音: 振幅25くらい

   AO音: 振幅15くらい

   BI,U,E音:振幅12以下(波形は変わりますが振幅では区別できません)

この3パターンに無音の時の口閉じを加えて4パターンです。

なお、今回はポケミク用WEBアプリで歌詞を変えています。

WEBアプリを使おうとしたら「ブラウザがGoogle Chromeでないと動かない」というメッセージが出て、そのインストールにちょっとだけ時間がかかりましたが、後はすんなり動きました。

 

スタンドアローンで改造中ではありますが、PCとの連携も面白いですね。

 

次はDAC接続による無理やり制御をやってみます。

それではまたです。

2014/04/27

大人の科学 ポケットミクを改造してみる。 その11

連休に入りましたね。今日はポケミクに表示エフェクトを付けてみました。

もっと凝った表示をしようと思っていましたが昨日の飲み会で二日酔いぎみのため、とりあえず音声波形までです。

Dscf3330_2 PICのAD入力が余っていたので、そこにフォンジャック出力を繋ぎました。回路図は以下の通りです。

Miku3

フォンジャック出力は当然ACだろうと思っていたのですが、波形を見たところ0〜5V位の範囲のDCだったので、抵抗で分圧しているだけです。

 

なお、鍵盤の今回少し改善しました。これまでは鍵盤位置を鍵盤全体一律の係数で計算していたのですが、今回から27個ある鍵盤一個一個のADC値範囲を定義して、その範囲内かどうかを吟味するようにしました。

メモリと時間のかかる方法なのであまり好きではないですが、とりあえずこれでキーのずれは起きなくなったようです。

 

 

古い一律係数の場合は2つくらいの特定キーでずれ見られたのですが、多分係数の求め方か丸めこみが適切でなくて、その位置で閾値が微妙なところになっていたのかな、と思います。

音声波形の取出しは、なんとか解析して口パクを波形に合わせられないかな、という考えでやってみたのですが、ちょっと簡単じゃないかもしれませんね。FFTをかけて周波数成分を見ないといけないのかな?さすがにPIC24でもCPUパワーがたりないか?

 

あとは、ポケミクの操作状態が一通り読めるようになりましたので、次は逆に制御する方向で考えています。

まずはDACを付けて自動演奏。ただの自動演奏だと面白くないので、ようやく読めるようになった鍵盤リードと合わせて手動演奏の記録・再生にトライ予定です。

 

MIDIでやれば簡単なのかもしれないですが(^^; 大昔シリアルでMIDIを動かしたことはあるのですが、今のPICでUSB-MIDIを動かす方法が分からないので、もうしばらく今やっている無理やりハード方式で進めちゃいます。

 

それではまたです。

2014/04/26

大人の科学 ポケットミクを改造してみる。 その10

ある程度ソースが整理できましたのでご参考に公開しようと思います。

画面はこれまでからあまり変わっていませんが、以下の感じです。

Dscf3318  Dscf3315

地味ですがスイッチ読取りのチャタリング対策を改善して読み取りが安定したのと、

LCDのSPI書き込みを見直して多少高速化してあります。

以下ソースです。

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

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

「spilcd_cl.c」をダウンロード  LCD操作ルーチンです。

「font8x8.h」をダウンロード 8x8dotフォントデータです。

「miku.h」をダウンロード ミク画像データです。

 

「pocketmiku2.zip」をダウンロード :上記を含むプロジェクトの圧縮ファイルです。

 

鍵盤読取り時の時々ずれだけはまだ解決していません。。。。。が、それは気にしつつも別の機能追加をやりたいと思います。

  

それではまたです。

2014/04/22

大人の科学 ポケットミクを改造してみる。 その9

鍵盤読取りがほぼできるようになりました。今回改善したのはチャタリング対策です。

これまでは手を抜いてADC読み取り値の移動平均を取るだけでお茶を濁していたのですが、タッチ時のデータを見ていてそれではだめだと気付きました。(そりゃそうですね。普通のスイッチと一緒ですね。)

今回平均計算をしている所で、ADC値の変動が±25を超えたら棄却するようにしてようやくほぼ安定しました。(±25は観測の結果1キー分の差文です。)

ほぼというのは、まだごくたまに1キーずれることがあるからです。。。。これはノイズ原因かな。。。。

とりあえずちょっと地味ですがドレミの音に合わせた口パクモードを入れ込みました。

分かりにくいと思いますが、画面の下にあるアスタリスクが鍵盤のタッチ位置を示しています。

いままでの動画でも動いていたのですが、ふらふらしていたのがようやく直りました。

鍵盤スタイラスADC読み取り値も安定したので、タッチ位置とADC値(つまり電圧値)の相関を取ってみました。

Graph

横軸が鍵盤タッチ位置です。左側が0番として26番まであります。縦軸がAD変換された電圧の値です。PIC内蔵ADCをVCCレファレンスで使っていますので、1023が3.3Vとなります。

まあリニアと言ってよいのではないかと思います。なお、手前・半音・奥のリボンで値にほとんど違いは見られませんでした。

「ほぼ」の分はおいておくと、とりあえずやりたかったことはできたので、

次に何やろうか考え中です。

例えば:

 ・音声出力の方をAD変換して連動表示(しかし何を?)

 ・キー操作(今IOを入力にして見ていますが、出力にしてしまえば逆に操作もできるはず。)

 ・鍵盤操作(今ADCで見ていますが、逆にDACを付ければ多分操作できるはず。

        しかしそれは普通の自動演奏であって手間の割におもしろくなさそう。)

 ・MIDI操作(できるかな?)

それではまたです。

2014/04/21

大人の科学 ポケットミクを改造してみる。 その8

鍵盤読み取りの方は、LOWパルスタイミングで読むようにしてだいぶ改善はしたのですが、まだ安定していません。もう少しかかりそうです。

 

とりあえず簡単な方の口パク改良を行いました。

色も少し改善しました。裸眼で見ると結構綺麗だと思うのですが、使っているデジカメの動画モードがあまり良くなくて撮られた動画の明るさ・コントラストがいまいちです。

動画補正ソフトで改善はしてみたのですが、それでもいまいち。。。ビデオカメラも欲しくなってきてしまいました。

 

ソフトとしては、母音5つ分の口周りデータを用意しておいて、それをポケットミクプリセットの楽譜に合わせて切り替えています。楽譜との同期は各プリセットパターン用にテーブルを用意することで行っています。

 

鍵盤のドレミモードの場合は鍵盤位置を読み取って、”ドレミファソラシド”→”OIIAOAIO”のような変換をかければできるのですが、いまは鍵盤読み取りがうまくいっていないので、その機能は入れていません。

 

鍵盤の方ですが、LOWパルスタイミングで読むことで殆どのキーは正しく読めるようになりました。数値で見る限りでは手前、半音、奥で値が変わることもなくなっています。

 

しかし、どうも安定しなくて、読み取ったキー番号がふらつくのです。。。ソフトではなく、ノイズ原因かもしれないな、と思い始めたところです。

 

とりあえず今週末はここまで。

それではまたです。

 

2014/04/19

大人の科学 ポケットミクを改造してみる。 その7

鍵盤の波形をオシロで少しまじめに解析してみました。

Dscf3260 オシロがSTN液晶の安物オシロなので見づらくてすみません。最近表示がちらつくのでTFTの新しいのが欲しいのですが、先立つものが中々(^^;

Dscf3259

 

分かったこと:

・鍵盤の抵抗板には2ms間隔でLOWパルスが見えます。幅は80us程です。

・スタイラス入力で見たそのLOWレベルはスタイラスが当たっている鍵盤横位置に相関します。

・そのレベルは鍵盤の手前、半音、奥の無段階に関係なく、横位置だけによって決まります。

・つまり、このLOWパルスのタイミングでAD変換をかければ鍵盤の位置が正しく読み取れるはずです。

 

 

そのLOWレベル以外のタイミングでのレベルは鍵盤横位置と相関しているように見えますが、良く見ると安定しておらず、手前・奥行き方向によって変わります。いまのソフトで鍵盤が正しく読めないのはそこでADCをかけているためです。

 

 

これはおそらく、ポケットミクの制御としては、LOWパルスとして見えているタイミングで抵抗板に与える電圧をドライブしていて、それ以外のところはドライブを切って余韻電圧になっているのではないかと思います。理由は消費電力低減でしょう。ドライブしっぱなしだと電流食いますので。 

 

最初に波形見たときにそうかもしれないと思ったのですが、とりあえず簡単なやり方をしてしまいました。安易なことをしてはいけませんね。

 

LOWパルスタイミングを検出する方法としては抵抗板ドライブ側の変化を監視していれば簡単なのですが、いまはそこはPICに繋いでいません。

PICマイコンのピンの余りがあまりないし、今から配線を追加するのも面倒なんで、できればソフトだけでやろうと思います。キーと同じように20usタイマーで監視してレベルが下がる所を捕まえればよいかと。

 

 

今日はこれから飲み会なので、明日時間が有れば続きやります。

 

それではまたです。

 

2014/04/16

大人の科学 ポケットミクを改造してみる。 その5

週末進行といっておきながら、ポケミクは面白いのでついいじってしまいます(^^;

今日は鍵盤読み取りを試してみました。

回路は以下の通り。鍵盤用スタイラスの信号をPICマイコンのAN1に繋ぎました。

Miku23a

ADCの制御は以前作ったフリスクオシロ用のルーチンをコピペしましたので簡単でしたが、問題はスキャンタイミング。オシロで見たところ、鍵盤にも何かパルスが入っているので、そこを避けてAD変換しています。

 

波形をみたところ、鍵盤のパルスはスイッチスキャンパルスの後にでているようなので、20usタイマーで作っているスイッチスキャンと同期させてADCを動かすようにしてみました。

 

 

動画を見ると分かるように、スタイラスがタッチしているかどうかとある程度の位置は分かるようになっています。。。。しかし、タッチ位置と電圧の相関がリニアではないこと、鍵盤の手前側(正しくはなんと言うのでしょうか?とにかく普通のドレミ音の所です)キーと、半音のキー、さらに奥の無段階の所、で電圧範囲が全然違うことがわかりました。

 

つまり値だけでは手前側、半音側、奥の無段階部分の判別ができません。ポケミク本来の制御はどうやっているのでしょうか?どうも今逃げている鍵盤パルスがキーのような気がしています。言葉だけだとわかりませんね。この次はオシロ波形も載せたいと思います。

 

まだまだソフトの直しが必要です。。。

それではまたです。

2014/04/15

大人の科学 ポケットミクを改造してみる。 その4

キー状態の読み取りとモード表示までできました。

見づらいので今回の動画はHDにしてみました。

バグも目立ちますね。。。。。

現状の回路図は以下の通りです。

Miku2

とにかく力技で空きIOポートをポケットミクのキーパッドに繋いでいますが、これは見た目ほど大変ではありませんでした。

 

苦労しているのはソフトウェアの方です。

キースキャンは2ms間隔で80usのパルスが出ているのはわかっているのですが、それに同期する方法がなくて、考えた末20us割込みをセットしてどれかのキーに2回パルスが出ていたらそこで全キー状態を取りこむようにしました。

 

オンだけ見れば良いモードキーはそれでよいのですが、2つのボリュームキーはクリック的な動きを見る必要が有り、なんとかしたつもりですが、どうもぎこちないです。

他にあからさまな表示バグもあるし画面も単調だし、表示も遅いし、と色々不満がありますので、改善してからソースを公開したいと思います。

 

あとは機能としては鍵盤の状態をADCで読み取って表示反映の予定です。

 

 

それではまたです。

2014/04/13

大人の科学 ポケットミクを改造してみる。 その3

とりあえず表示までできました。

回路図は以下の通りです。

Mikc

DSPラジオから使いまわしているので回路図は楽なものでした。

今回のLCDはレジスタ構成を全く見ていないのでソフトは難航すると思っていたのですが、とりあえずAITENDOのページにあったサンプルを移植してみたら案外簡単に動きました。

現在は最初の文字を表示するだけですが、参考にソースとプロジェクトをアップします。

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

「graphics2_cl.c」をダウンロード カラーLCD用のグラフィックルーチンです。

「spilcd_cl.c」をダウンロード カラーLCD制御ルーチンです。

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

「pocketmiku.zip」をダウンロード 上のソースを含んだプロジェクト全体です。

 

しかしカラーでデータ量が多いところをシリアル転送なんで表示が遅いですね。

全画面書き換えが1秒くらいかかっています。SPIルーチンを高速化しないといけないかな、と思っています。

 

このあと、キーと鍵盤の状態をPICで観測して表示に反映させていくソフトを作る予定です。

次の週末になると思いますが。。。。

 

それではまたです。

 

大人の科学 ポケットミクを改造してみる。 その2

とりあえずPICマイコンとLCDの配線までできました。

Dscf3187 Dscf3190

右のLCD配線が結構苦労しました。Aitendoからキャリーボード付きのを買っていたのですが、構造上キャリーボードが使えず、生LCDに直付けのためです。

 

ところで、このキャリーボードを参考のために配線を見ていて気づきましたが、バックライトのLED-Kがつながっていません。LED-KをGNDにつながないとLEDが光りませんので、お使いになる方はお気を付けください。

 

Dscf3191 Dscf3192

Dscf3195 で、バックライトがオンしたところです。

回路図は動作ができてからアップします。

これからソフトの方を始めます。

 

それではまたです。

大人の科学 ポケットミクを改造してみる。

先日会社の帰りに立ち寄った本屋で「ポケットミク」を見かけまして、つい衝動買いしてしまいました。(なお、発電機の風力化はちょっとうまくいってなくてしばらくお休み中です。。。。)

Dscf3158

とりあえずスタンドアローンで動かしてみたところ。

では早速分解です。

Dscf3167 Dscf3170 Dscf3171

ネジ止めだけなので簡単に分解できます。

次に改造目的でスイッチ、鍵盤のインタフェースを確認してみました。

Dscf3174   Dscf3175

わかったこと。

●スイッチ

  電極の片方がグランド、もう片方には2ms周期で(たぶん)3.3Vのパルスが

  与えられており、キーを押すとそれがショートして、パルスが0V固定になる。

  つまり、パルス側を観測していればON/OFFが分かる。

●鍵盤

  鍵盤はただの抵抗板。

  0−3V程度の電圧に2ms周期でLOWパルスが加えられており、それを

  分圧している。0−3V程度の電圧、LOWパルスの振幅ともに鍵盤をタッチ

  する位置によって変わるが、オシロで見ていた限りではパルスは無視して

  通常の電圧レベルだけ見ていればタッチ状態と位置がわかりそう。

スイッチ、鍵盤ともに信号をつまめば簡単に状態が分かる、ということですので、PICを付けた改造を始めることにしました。

 

まずは表示ですね。これはPC操作用のインタフェースはありますが、ディスプレイはありません。スタンドアローンではスイッチ操作でモードが変わるのですが、今どのモードにあるかわかりません。そこでまずはモード表示できるようにしたいと思います。

Dscf3164 Dscf3166

で、持ってきたのがAITENDOの1.8インチカラーLCD

TFT液晶モジュール(1.8/128x160/SPI)[T18003T01]」です。

まずはモード表示をやりますが、その先は鍵盤に合わせたデモ表示や初音ミクも出したいので、ここはやっぱりカラーでしょう。

週末進行ですので、いつのなるかわかりませんがぼちぼち進めたいと思います。

それではまたです。

2014/03/16

秋月電子の小型マトリクスLED

土曜日に久しぶりに秋月電子に行ってきました。ちょっとした小物部品だけ買うつもりだったのですが、店内の広告で以下の5x7ドット LTP−305HRというのが目にとまりまして、

つい赤と緑を買ってきてしまいました。

http://akizukidenshi.com/catalog/g/gI-07440/

Dscf2954 結構小さいです。

何に使ったものか考え中ですが。とりあえずPIC24Fを使ってブレッドボードで動かしてみました

回路図は以下の通りです。

Matrixled

 Bポートを各アノード、カソードに繋いでいます。LEDのVFが2.0V,IFがTYP20mA、MAX75mAということですので、アノード・カソードそれぞれに22Ωの抵抗を入れて合計44Ωとして電流を調整しています。電源が3Vなので、(3−2)/44で22mAちょっとになるはずです。 

※後からデータシート見たらPIC24FJ64GA002のIOピンドライブ能力はmA単位なのでこの回路はよろしくないです。ドライバが必要と思います。今手持ちがないので後日回路を改めたいと思います。

 

 

さらに、この構成だと、今のテスト動作のように一度に1ドットをオンするだけなら良いですが、今後文字を出すために列単位で複数同時表示を行う場合には表示によって電流が一定しないことになるので、ドライバ回路も追加した上で見直したいと思います。(今回は抵抗がジャンパ代わりになって配線が楽なので、実験用としてこうしてしまいました。)

制御ソースコードは以下の通りです。

「matrixled.c」をダウンロード

今回はとりあえず点けばいいということで、1ドットだけオンにしていますが、

文字くらいは表示したいので、そのうちダイナミック駆動表示にしてみたいと思います。

 

表示ピクセル数は置いておくと今まで使ってきたCDより小型なので、何か小物にでもくみこんでみようかと思うのですが、しかし何に使ったものか?

 

それではまたです。

2014/02/16

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その11

結構な大雪でしたね。昨日は振替出勤日だったので会社に行きましたが、道が全面的に雪と水たまりになっていてかなり大変でした。

 

今日はお休みなので、昼前からソフトの続きを作ってみました。一応当初目標の動作ができましたので動画をアップしています。

操作はロータリーエンコーダ左右回転で普通にチューニング、早く回すと3倍速になります。

ロータリーエンコーダを押したまま回すとバンド切り替えになり、放すとその時表示しているバンドを選択です。

 

バンド切り替えメニューの中に”SCAN”があり、それを選ぶとそれまで聞いていたバンドの状態をスキャンし、グラフ表示します。

スキャン中にロータリーエンコーダを押すとキャンセルです。

バンドの状態ですが、前回書いたようにRSSIレジスタ(0x1b)値はなぜかFMでは有効ですが、AMではやっぱり受信状態と一致しません。

M6955のデータシートを見たところ、RSSI以外にCNR(キャリア・ノイズ比)レジスタ0x16、0x17があり、それを試したところ、AMでは受信状態に一致し、FMの方はそうでもないことがわかりました。

 

そこで、チューニングモードでは、RSSI,CNRを両方バーグラフ表示し、SCANモードではFMはRSSI , AMではCNRの値を表示するようにしました。

 

ここまでのソフトをご参考にアップします。

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

「m6955ctl2.c」をダウンロード M6955制御です。(2014/3/1 ヘッダ指定誤りを修正しました。)

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

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

「spilcd.c」をダウンロード :SPI LCD制御ルーチンです。

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

「m6955_2.h」をダウンロード :M6955用定義です。

「spilcd.h」をダウンロード :SPI-LCD用定義です。

全プロジェクトの圧縮ファイルです。(2014/3/1追加)

「M6955_2.zip」をダウンロード

なお、回路図を一部修正しましたので最新回路をアップします。

Encoder_lcd4

修正内容は以下の通りです。

@ 3.3V生成をレギュレータにしました。ダイオード降下方式だと電圧範囲は

  まあ良かったのですが、LCDのコントラストが安定しないとわかったためです。

A LCDのRST端子を接続しました。データシートには接続なしで良いように

  書いてありますが、私の環境だと表示しない場合が時々有り、接続して

  制御するようにしてそれが解消しました。

B M6955のボリューム下側の抵抗値を変えました。適用な値にしていたの

  ですが、ボリュームを絞った状態で大きな音が聞こえたためです。

 

AMとFMは良く聞こえています。

短波とLWを今夜試してみたいと思います。

 

それではまたです。

2014/02/10

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その10

なんとかM6955のRSSIレジスタ(0x1b)の読み取りができるようになりました。

まずは動いているAM/FMモードにRSSI表示をさせてみました。

Dscf2865 Dscf2866

左が81.3MHzのJ-WAVE受信中、右はわざと外したところです。上のバーグラフがRSSI値を示しています。

しかしまだ問題が2点。

 @FMは大丈夫そうですが、AMの方は安定していません。受信していないところでも
  大きな数値が出たり、受信していても数値が妙に変動します。

 A頻繁にRSSIレジスタ(0x1b)を読みに行くと受信感度が低下します。特にAMの方。
   これは単にM6955のI2Cアクセス動作が悪影響を及ぼすのかと思いましたが、
   他のレジスタ(0x00)を頻繁に読んだ場合にはそういう低下が見えませんので、
   なにかRSSIレジスタアクセス固有の問題があるのかもしれません。

 

ここでFMの方で周波数を振ってグラフ表示をさせてみました。

Dscf2870 横軸が周波数、縦軸がRSSI値です。スキャンをゆっくりしにして音を聞きながら見たところでは、放送受信時にグラフが立つのであっているのだと思います。

 

ここでもうひとつの問題。(多分そうかなと予想はしていましたが)

B周波数を設定してからRSSIの値が安定するまでちょっとタイムラグがあるようです。そこで周波数ごとに設定からRSSIを読むまでにウェイトを入れて調整しました。

その結果、上の画面の表示に20秒くらいかかっています。

 

改善策がないかm6955のマニュアルを見直してみます。ソースはまたツギハギだらけになっているので、改善後に整えてからアップしたいと思います。

 

明日はお休みですがちょっと用事が入っているため、続きは次の週末になりそうです。

 

それではまたです。

2014/02/09

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その9

都知事選の結果はだいたい予想通りでした。実は4位の人にもっと票とって欲しかったのですが。それでもかなりの健闘ですね。今後に期待してます。

 

さて、やっと動画にできるようになりました。(まだAM/FMの2モードですが。)

基本動作のロータリーエンコーダで選局。押下でバンド切り替えです。

LEDは押下で赤、左右回転で青・緑を切り替えています。

ちょっとひねったところでは、ロータリーエンコーダをゆっくり回すとそのバンドの基本ステップ(AMなら9KHz、FMは0.1MHz)で、早めに回すとその3倍のステップで周波数が変わるようにしています。

 

エンコーダはタイマー割り込みで制御していますので、回転速度についてはエンコーダ信号の立ち上がり間隔での割り込み回数を計測しています。

やってみると「早め」って結構定義が難しいですね。とりあえず閾値を少しずつ変えてこんなものかな、というところに設定していますが、まだ調整がいりそうです。

他に、文字表示にスケール機能を持たせて大きく表示できるようにしました。

これで周波数表示を2倍にして表示しています。

一応動くのでソースをアップします。

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

「graphics2.c」をダウンロード :強化したグラフィックルーチンです。

「m6955ctl.c」をダウンロード :M6955の制御ルーチンです。

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

「spilcd.c」をダウンロード :SPI LCDの制御ルーチンです。

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

「m6955.h」をダウンロード :M6955定義ファイルです。

「spilcd.h」をダウンロード :SPI LCDの定義ファイルです。

 

次はスペアナ的バンド状態表示にトライしようと思います。

 

それではまたです。

 

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その8

金曜日から出張に出ていたところ雪に見舞われまして、いろいろあって今日の午後からやっと少し作業できるようになりました。

 

まずは、箱に入れることにしました。むき出しのままだとデバッグ効率が悪いし、操作性の確認は箱に入れた状態でないとわからないだろうと考えまして。

Dscf2856  Dscf2857

どうもボリュームとロータリースイッチの位置が良くないです。これは、基板にロータリースイッチを固定にしたため、内部で基板を置ける場所によって位置が制限されてしまうためです。

 

取り付けが簡単になると思って基板固定にしたのが失敗でした。

使えないことはないので、このまま進めます。

左下のスピーカー穴は、最初放射状に小穴を開けようとしていたのですが、どうも綺麗にならなかったので、しょうがないから中華製ラジオキットのパーツを切って貼り付けました。

 

中華製ラジオパーツはAitendoの福袋に入っていたのですが、作っていないものです。

 

このあとようやくソフト改良に入ります。

 

それではまたです。

2014/02/04

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その7

平日ではありますが、昨日今日と1時間くらいずつ、ついソフトの方をやってしまいました。

 

日曜にだいたいのコーディングまではできてたのですが、バグがあって動かないのがどうも気になってしまいまして。

 

さきほどなんとかAMバンドに設定して、ロータリーエンコーダで周波数を振って聞こえるようになりました。

Dscf2851  Dscf2854

954KHzのTBSを聞いているところです。今はまだAMで単純にエンコーダを左右に回して周波数を変えられるだけです。FMも固定周波数で聞いてみましたがどうやら動きます。音も感度も結構良いようです。

 

しかし文字が思ったよりも小さいですね。8x8フォントでは厳しいかもしれません。

 

ソフトはあちこち直して綺麗ではないので整理してからアップしたいと思います。

M6955に関する情報として、今回苦労したのは主に以下の2点でした。

 

@M6955はレジスタ1、2でバンドと周波数を設定した後にレジスタ0のビット6(TUNE)を

 1→0にする必要があります。これをやらないと電源オンの一回目だけは周波数設定できますが、それ以降は変化しません。

  

A今回の回路のようにROUT-LOUT間に1つのスピーカをつなぐ場合は、レジスタ6の

 ビット1を1とする。これしないと音がかすかになります。

  

どうやら基本的な機能が揃ってきたと思いますので、次はユーザインタフェースの作り込みをやりたいと思います。

 

それではまたです。

2014/02/02

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その6

全モジュールの配線まで行いました。

Dscf2845

回路図は以下の通りです。

Encoder_lcd4_2

M6955の接続はどうしようかなあ、と考えた末、PICKIT3用のコネクタと兼ねてしまいました。

こうすると、書き込みの時に差し替えになって少し面倒ですが、その代わりコネクタがひとつ減り、PICの空きピンが増えて将来の拡張に回せます。

 

音量用のボリュームについても少し悩みました。レジスタ制御でできるようだし、それもロータリースイッチ操作にしてしまうとユーザインタフェースの一元化ができてかっこいいかなあ、と思ったためです。

 

しかし実際の操作を考えてみると、うるさいからボリュームを絞るような場合は即応性が必要で、そこでロータリースイッチを押してモードを変えてから回す、というのはいかにも不便そうなので結局普通にボリュームを付けることにしました。

 

電源を入れてみましたが、ソフトがまだなので当然何の音も出ません。

次はFMかAMで何か聞こえるところまで持っていきたいと思います。

 

それではまたです。

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その5

金、土と飲み会がありましたため、週末作業もちょっと入れませんでした(^^;

今日の午後からまた少し動かしています。

LCD表示の方が案外簡単に動いてくれたので一度アップします。

Dscf2842  Dscf2843

以前作ったAitendoの128x64 SPI OLED用のルーチンを使って、縦方向の解像度と初期化コマンドを修正しました。

初期化コマンドはLCDに添付されていたデータシートに書いてあった通りにしただけで表示できるようになりました。

今のところのソースは以下の通りです。

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

「spilcd.c」をダウンロード  LCDの制御ルーチンです。

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

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

「spilcd.h」をダウンロード LCD制御用のヘッダファイルです。

 

これで、各グラフィックルーチンが使えます。画面表示はラジオを動かしながら作りこみますので、次はいよいよDSPラジオモジュールM6955を接続したいと思います。

 

それではまたです。

2014/01/28

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その4

次はLCDを動かそうと思ってその分の回路だけ引いてみました。

Encoder_lcd2_2 

(2014/02/02 LCDコネクタ周りを修正しました)

回路図の右の方に秋月のLDC超小型グラフィックLCDモジュールAQM1248A(変換基板に搭載)を追加してます。

 

前回使ったキャラクタタイプがI2CだったのでなんとなくこれもI2Cだろう、と思っていたのですが、いま頃になってこのLCDがI2CではなくてSPIだと気づきました。

 

DSPラジオモジュールとM6955と同じI2Cバスにぶらさげて、同じサブルーチンで動かすつもりだったのですが、少なくともサブルーチンは分けないとダメですね。ピンを共用するかどうかはちと考えます。

 

しかし、SPIということなら、去年FRISKに入れたOLEDもそうだったのを思い出して、SPI用のピン配置をそのときの回路と一緒にしました。これでその時使ったサブルーチンがそのまま使えるはずです。

 

早く動くのが見たいところですが、さすがに平日の深夜に半田付けまではできないので、今日はここまでです。

 

それではまたです。

2014/01/27

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その3

平日ですが、ちょっと時間が取れたのでロータリーエンコーダのテストをしてみました。

Dscf2837 動画じゃないので全然わかりませんが、回転方向、回転速度、スイッチ状態によって以下のようにLEDの色を変えるようにしてみました。

 ・右回し/速めに回し   : 青点滅

 ・右回し/遅めに回し   : 紫点滅

 ・左回し/速めに回し   : 緑点滅

 ・左回し/遅めに回し   : 黄色点滅

 ・スイッチオン        :回転を無視して赤点灯

動画は少なくともLCD表示と連動してからにしたいと思います。

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

「encoder_test.c」をダウンロード

最初ms単位のインターバルタイマ割り込みでエンコーダ状態スキャンしていたのですが、それだと取りこぼすことがわかり、現在は100us周期です。意外と速いものですね。チャタリングは3回同じ値が続いたかどうかの判定で回避しています。(多分出来ていると思います。)

  

今のソフトはロータリーエンコーダの動作確認用にはとりあえず良いと思いますが、ラジオのインタフェースとしては実際に操作してみないと何とも言えません。まだ先が長いですが、いずれラジオとして完成してから調整していきたいと思います。

 

それではまたです。

2014/01/26

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ その2

まずCPUとロータリーエンコーダの接続から始めました。

Dscf2834_2 Dscf2836

CPUは以前OLED用に使ったPIC24FJ64GA002にしました。

基板はAitendoのFRISKサイズのものを使い、CPUを乗せたらちょうどエンコーダ分のスペースができたので、一緒に乗せてしまいました。これで、エンコーダを軸ねじで基板ごとケースに固定する予定です。

回路図は以下の通りです。

Encoder_test_v2

エンコーダのLEDは赤と青・緑でVfが違ったので、抵抗値を変えてIfを合わせています。

ロータリーエンコーダのSW端子はオンで電源側に繋がる仕様なので通常大きめの抵抗でプルダウン、SWが押されるとハイレベルになるようにしました。

 

ラジオモジュールとLCDの電源が3.1〜4.5Vです。電池2本だと減ってくると3Vを切ってLCDが薄くなるので、3本で4.5Vとしました。LCDは2.4〜3.6V、M6955は2〜4.5Vでした。ロータリーエンコーダのLEDのVfが3V以上あり、3.3Vでは不足しますので、4.5Vとしました。

しかし今度はCPUが2〜3.6Vなので落としてやる必要があります。3.3V降圧レギュレータの手持ちがなかったので、部品箱にあったシリコンダイオードを使ってVfで電圧を落とすようにしました。

 

あとはソフトです。とりあえずエンコーダRGB-LEDをチカチカさせているだけの状態です。エンコーダ入力のハンドリングができたら一度アップしようと思います。

 

それではまたです。

Aitendo M6955 + 秋月LCD+ロータリーエンコーダ

M6959が結構良く聞こえましたので、そのシリーズで次はLWも聞いてやろうと思い、LW対応のM6955に目をつけました。

Dscf2832 これはI2C制御で前回のM6959とはインタフェースが異なります。

前回と逆にVRの電圧値を読み取って対応する周波数をI2Cで設定しようかな、と最初思いましたが、ちょっと思うところがあって、ロータリーエンコーダ方式にします。

 

Dscf2833 別途秋月電子で買ってきた部品です。LED付きロータリーエンコーダグラフィックタイプの小型I2CーLCDおよびピッチ変換基板です。

 

ロータリーエンコーダはチューニング用ですが、回転速度を見て周波数ステップ幅を変えることでおおざっばな調整からファインチューニングまで1個で対応、ついでに速度に合わせてLED発光色も変えると面白いかな、という考えでこれにしました。

 

グラフィックタイプLCD使用は、M6955がRSSI(受信強度)レジスタを持っていますので、その読み取り値を使ってスペアナ的なバンド状態表示ができたら良いな、という考えによります。

CPUは前回PIC12Fではメモリサイズで苦労しましたし、グラフィック表示も考えていますので、過剰性能かもしれませんがメモリの大きいPIC24Fにしようかと思います。

 

業務多忙のため平日はできず週末進行となりますので、2月末頃完成が目標です。

 

それではまたです。

2014/01/19

Aitendo M6959 + 秋月I2C LCD その9

一応(ほぼ?)完成しましたので、メイキングと動作を動画にしました。

ちょっと音が小さくてピンボケです。。。。

回路は変えていませんが、LCDの接続が間違っていたので修正したものをアップします。

M6959_lcd2_v2_2

(過去記事の回路図は赤字修正済みです。)

プログラムは以下の通りです。

「PIC12F_FMAIN_V2_1.c」をダウンロード  (2014/01/19 PM9 CONFIG BUG FIX)

「PIC12F_I2C_V2.c」をダウンロード

プログラムサイズと有効桁数の両方でかなり苦労しています。

周波数演算でINT型では演算途中でオーバフローするのが明らかなので始めは普通にLONG型を使おうとして一気にサイズオーバになりました。LONG用のライブラリをリンクするためですね。

仕方がないので基本INT型にして演算途中で桁あふれする所で100で割った数値とその余りに分割して別々に演算するようにしましたが、それでも不足して。。。その後はとにかく各所を切り詰めてなんとかコンパイル・リンクできるようになりました。現在のコードでROM使用率98.4%です。良く入ったものです(^^;

 

ご注意ですが、全くの現物合わせで作っていますので、モジュールの個体差に合わせて調整の必要があるはずです。ソース内のbandfreqmin[]、bandfreqmax[]の数値を各バンドごとに調整するように作ってありますので、ご参考にされる場合はそこをご調整ください。

 

今のソースでは私の使っているモジュールに合わせてFMとAMは調整してみましたが、SWは未調整です。いま聞いてみたSWで表示と実際の周波数をいくつかサンプルしてみました。

左が正しい周波数、右が表示です。

   ・ラジオ日経  3.925 -> 3.87MHz
   ・朝鮮の声   9.65  -> 9.60MHz
   ・台湾国際放送  11.605 -> 11.59MHz

数10KHz低めに出ています。係数の丸め込み誤差の影響かなと思いますが、素子の特性かもしれません。現物合わせなんでなんともいえないですね。

各バンドのbandfreqmax[]を少し大きめに調整すると合いそうですが、目安としては結構使えていますのでとりあえずここまでとしてしまいました。

各バンドで2点のサンプルがあればもっと適切に調整できますが放送局任せだと中々都合よくいきませんね、そのうちよい調整方法を思いついたらなんとかしようかと思います。

  

とりあえず今回はここまで。

それではまたです。

Aitendo M6959 + 秋月I2C LCD その8

ふと思いついて前回のAM,FMグラフを正規化してみることにしました。

 

正規化は、 それぞれの周波数範囲(FMAX〜FMIN)を0〜1、電圧変動範囲(VMAX〜VMIN)も0〜1に変換することで行います。つまりFMでしたら70〜93MHzを0〜1に、電圧範囲はVRを値を最小にした状態でのADC値(測定値では327)、最大(1023)を0〜1にします。

 

正規化し、AM,FMのデータ散布図を合成した結果が以下の通りです。

Photo

表の黄色が正規化された数値です。散布図も予想以上に綺麗に並んでくれました。

これでAM,FMともに同じ一次式で周波数計算ができそうです。

データから求めたところでは、その式は以下の通りです。

 ● 正規化周波数 f  = 1.182 *  正規化ADC値 - 0.074

   ※係数はたまたま私が使っているモジュールの値なので

     物によって多少違うと思います。

これから表示周波数を以下で計算できます。

 ● 実際の周波数 F = f * (fmax-fMin)  + fmin

確認できていませんがSWも同じ式で計算できること期待しています。

実はSWに関しては簡単なMHz帯正弦波発信回路を組んでみまして、それで電圧と周波数の関係を取ろうとしているのですがうまくいっていません。。。。受信周波数でTUNED信号がオンするはず、と思ってやってみたところオンしませんでした。

 

発振回路の出力はオシロで見ていますし、市販の短波ラジオで試すと発振周波数でラジオの受信LEDが光るので、狙った周波数はでているはずなのですが。。。このDSPモジュールは変調されていないと認めてくれないのでしょうか?

 

そちらはもうちょっと手間がかかりそうなので、まずは上の計算式をプログラムに入れようと思います。といいながら、実はそっちのほうも今PIC12F683メモリサイズの制限で難航中です(^^; 各バンドの周波数テーブルと上の計算式を入れようとしたtらぎりぎりで足りなくなりまして。

中々スムーズにはいかないですね。また進展したらアップします。

 

それではまたです。

2014/01/18

Aitendo M6959 + 秋月I2C LCD その7

AMとFMで周波数のわかる商用放送局を受信してそのときのADC読み取り値との相関を取ってみました。

 

結果は以下の通りです。

Photo_2

FMの方は途中のコブがちょっと気になりますが、どちらもほぼリニアといっても良いと思います。これなら簡単な一次式で計算ができそうです。

ただし、係数はバンドによって変えないといけないと思われます。

 

この後SWの各バンドでも同様に確認をしますが、AMやFMほどには周波数サンプルにできる局がなさそうだし、私は発信可能な無線機を持っていないので(2級アマ無線の免許はあるのですが開局したこともないペーパです)ちょっと細工をしたいと思います。

 

それではまたです。

Aitendo M6959 + 秋月I2C LCD その6

前回のハード改修に続きましてソフトの動作です。今の表示は以下のような感じです。

バンド切り替えとTUNEDを表示するようにしました。周波数についてはすみませんがまだADC値のそのまま表示です。

Dscf2811 Dscf2812 Dscf2813

左からFM、AM、SW例です。AMの*がTUNEDを示しています。

しかしLCDの下の方はホコリが付きやすいのですね。掃除してから撮影すればよかった。

現状のソースをご参考に公開します。

「PIC12F_FMAIN_1.c」をダウンロード  (2014/01/19 PM9 CONFIG BUG FIX)

「PIC12F_I2C.c」をダウンロード

あとは周波数表示で完成の予定ですが、どうもいじってみていて周波数と電圧が単純比例でないような感じがしていて、ちょっと手間がかかるかもしれません。

補足ですが、8ピンPICを使っていてIO数が少ないため、PICKIT用のプログラムピン2本をVR電圧観測のアナログ入力と共用しています。このため、PICKITを使ったプログラムする際にはVRを中央位にしておく(つまりVREF-P/Nに対して25KΩの抵抗が入った形にする)必要が有りますのでご注意ください。

また進展したらアップします。

それではまたです。

Aitendo M6959 + 秋月I2C LCD その5

昨夜出張から戻りましたので、少し改良しました。

まずハードの方で、電池が減ってくるとADCの読み取り値が変動してしまう現象が有り、それに対処しました。この現象はお恥ずかしい話で、PIC内蔵ADCのリファレンス電圧をVCCにしていたのが原因で、電池駆動なんだから変動してあたりまえでした。

対応として、M6959モジュールのVREF−PをPICのVREFに入れるようにしました。しかしVREFはTUNE電圧観測用にAN1として使っていたので、そちらをAN2にシフト。さらにAN2のピンをTUNED信号の観測用にGP2としてに使っていたので。。。もう入力の空きがなかったのでTUNED信号は抵抗を介してSDAに使っているGP4に入れてしまいました。

修正した回路図は以下の通りです。

M6959_lcd2_v2

(2014/01/19PM6 :回路図間違いを修正しました。)

上のIOシフト以外に、LED−KをGNDに繋いでいます。最初はここを繋がないでLED−AをPICに繋いでいたのですが、なぜかそれだとVRによるTUNEが効かなくなり、ここを繋ぐとそれが解消することが分かったのでこうしています。理由はわかっていません。

 

GP4については、通常は出力モードにしてSDAとして使っていますが、TUNED信号状態を読むときに入力とします。

SDAはI2CプロトコルのACKタイミングでも入力としてM6959が応答を返しますので、そこでTUNED信号とかちあってしまいますが、元々ACK応答を見ていないので、まあいいや、ということにしてしまいました。

なお、もうひとつあいている入力専用ピンGP2をTUNED観測に使おうかとも思ったのですが、ここはリセットと兼ねていて、リセット使用をオフにしてもPICKITとかち合うためプログラム時用の切り替えスイッチをつける方法しか思い浮かばずに断念しました。

長くなりますのでこの改修に対応したソフトは記事を分けます。

それではまたです。

2014/01/13

Aitendo M6959 + 秋月I2C LCD その4

TUNEとBANDの数値表示まで動作しました。

Dscf2808  

8桁表示なのでわかりにくいですが、上のBAがBAND電圧のADC値、下のFRがTUNE電圧のADC値を示しています。現在は調整用のためPICの10ビットADC出力値をそのまま表示しています。

このコーディング中にちょっとトラブルがありました。数値を見ていると、BAは安定しているのですが、FRの方は妙にふらつきが見られました。

まずはADCの操作誤りを疑って見直してもわからず、ノイズかもしれないとADCを複数回動かして平均をとっても改善せず、そこでやっとオシロを取り出して波形を見たところ、以下のようになっていました。

Dscf2807 12us位の周期でTUNE電圧が0.4V位下がります。

PICマイコンのADC入力操作の間違いでドライブしてしまうのかな?と思ってPICを外してみたのですが、それでも出てます。VREF電圧を見たらそちらはは安定しているので、なぜだかわからないけどM6959が自分でTUNE電圧に何か出しているようです。

普通にVRを繋いで使っている分には全く問題ない現象ですが、今回のようにスヌープして電圧を測定しようとする場合には困ります。これは平均とっても解消できるレベルではないし。

悩んだ末、 TUNE電圧に関してはADCサンプル結果で同じ電圧値が3回以上続いた場合に値を採用するようにソースを直しました。(正確には量子化誤差とノイズがあるはずなので下位2ビットを無視して同じ値かどうかを見ています。)

たまたまこの低下をサンプルしてしまった場合はやり直します。ADC周期からみて、偶然この低下タイミングが連続することもないはずです。

この回収後に数値表示を見ている限りでは安定した数値が得られるようになっています。

しばらく見ていた限りでは数値変動は±1ですので、ほぼ量子化誤差だけで、ノイズ影響も心配なさそうです。

今回のソースは以下の通りです。M6959の表示用としてはまだ途中ですが、PICとI2C−LCDによる単なる電圧表示用ソフトとしては使いまわせそうですので、参考に公開いたします。

「PIC12F_ADC_TEST_1.c」をダウンロード (2014/01/19 PM9 CONFIG BUG FIX)

「PIC12F_I2C.c」をダウンロード

TUNE電圧が数値化して見れるようになりましたので、商用放送を使って受信周波数とTUNE電圧数値の関係から周波数表示の演算係数を出すことができるはずです。

なお、BANDに関しては分圧抵抗から計算されるBAND電圧値と実際のバンド選択の対応が確認できましたので、その計算式を使って表示に持っていくことができそうです。

(これはFM,AMの他はSWをラジオ日経の3.925MHz、6.055MHzで試しました。)

このあとはもう少し特性を確認の上で、最終的なバンド&周波数表示付きM6959ラジオをして仕上げたいと思います。

それではまたです。

Aitendo M6959 + 秋月I2C LCD その3

LCDテスト表示ができました。

Dscf2806

ちょっとソフトバグで手間取ってしまいました。I2Cの制御は以前別のDSPラジオIC用に作ったものを流用したのですが、そのSTOP制御が間違ってまして。。。

 

そのときは顕在化しなかったのですが、今回のこのLCDは許してくれないらしく、最初の書込みはうまくいくのですが、その終結が認識されないため、その後の書き込みが妙な具合にずれていく、という現象となり、解析にかなり苦労しました。

 

とりあえず、最初の写真のように、テキストと数字の表示ルーチンができましたので、

そのテスト用ソースをアップします。

「PIC12F_I2C_TEST_1.C」をダウンロード (2014/01/19 PM9 CONFIG BUG FIX)

「PIC12F_I2C.c」をダウンロード

 

この次はADCを動かして、BAND電圧とTUNE電圧の確認をやります。

 

それではまたです。

2014/01/11

Aitendo M6959 + 秋月I2C LCD

コメントで頂いたPUP様からの情報でM6959ではLWバンドは選べないとわかりました。

 

また、ブログ記事を拝見していて、このモジュールはチューニング用ボリュームの位置と周波数の関係が安定している、ということもわかりました。

 

と、いうことはボリュームの電圧を測定して演算すればある程度の周波数表示ができるはず、と考えて次はそれにトライしてみます。

 

表示は手持ちの秋月電子超小型8x2行LCDでやってみます。これは小型だしI2C制御なので配線も簡単にできます。

Dscf2776  Dscf2777

これとPIC12F683を使う構想で半田付けを始めました。

とりあえずPICKIT3でプログラムできるところまで作りました。

Dscf2779  Dscf2780

Dscf2783  

回路図はこのあとM6959と組み合わせて動作できるようになってからアップします。

 

それではまたです。

2013/12/08

100円タッチライトの改造 その6

一応完成しました。懐かしの「サイモン」です。

まずは動作をご覧ください。

中学生くらいの頃買ってもらって遊び倒した覚えが有ります。

確かこんな感じのものだったはずです。

最終的なソースコードは以下の通りです。回路図は前回の記事から変えていません。

「simon.c」をダウンロード

7回から始まって、クリアすると5回ずつ増えていきます。クリアし続ける限り延々と続き、最大100回まで増えますが、そこまではやっていません。(^^;

入力間違いかタイムアウトするとゲームオーバで、LED用のIOを入力にしてから、スリープモードに入り、電源オフ、オンで再起動としています。

使っているPICが低消費電力タイプですので、スリープ状態の消費電流もuAオーダですから、電池も殆ど減らないし、 電源オン状態でIOピン方向も確定した状態になりますので、3本目の電池の件も大丈夫かなあ、と思ってこうしました。

昔遊んだサイモンは裏技がありました。ボタンを押している間はタイムアウト判定がないので、押した状態でじっくりとパターンをメモしてしまえば記憶力に頼らなくてもクリアできてしまうのです。それも同じに作りました。

それではまたです。

2013/12/07

100円タッチライトの改造 その5

今日は圧電ブザーを付けて、タッチした電極に対応したLEDを光らせると同時に、それぞれ違う音階のビープ音が出るようにしました。

Dscf2743

回路は以下の通りです。14ピンをPWM出力にして圧電ブザーを繋いでいます。

Pic18f_3

 

ソースコードは以下の通りです。PWMでド、ミ、、ソ、ドの周波数を出しています。

「ctmu_sound.c」をダウンロード

次はサイモンゲームのメインをつくります。

 

それではまたです。

2013/12/05

100円タッチライトの改造 その4

先ほどようやくPIC18FのCTMUを使った静電タッチ検出が動くようになりました。

 

どうにも動作しないで悩んでいたのですが、原因はOSCCON(内部クロックの周波数決めているレジスタ)の設定漏れで、PICの動作クロックが遅い設定になっていて、CTMUのチャージ時間も異常に長くなっていたのがやっと分かりました。

 

一定チャージ時間での容量成分へのチャージ電圧を測定するのがCTMUの原理ですので、そのチャージ時間が長くなればダメですね。(^^;

 

とりあえず確認用電極を付けて、触ると対応したLEDが点灯するソフトを組んでみました。

Dscf2738_2 Dscf2741 Dscf2742 Dscf2736

回路は以下の通りです。最初のものにTouch0-Touch3をつけただけですが。

AN0-AN3をアナログ設定として、CTMUの入力に使っています。

Pic18f_2

 

 

上の写真の動作を動かしているソースコードは以下の通りです。

「ctmutest.c」をダウンロード

CTMUの制御はPIC18F25J11のデータシートの25.0 CHARGE TIME MEASUREMENT UNIT (CTMU)にあるコード例を参考にしています。(まだちょっと調整がいるかもしれません。)

 

次は音を付けて、いよいよゲーム化に進みたいと思います。

 

それではまたです。

2013/11/30

100円タッチライトの改造 その3

今日の午前中暇が出来ましたので、配線の方を行いました。

Dscf2727  Dscf2729

回路は以下のような感じです。

Pic18f_1

PIC18F25J11に普通にLED4つとプログラム用のICSPピンヘッダを繋いだだけですが、電源だけちょっと変わっています。

 

このPICが2−3.3Vでしか使えないため、三本直列になっている単4電池2本の方にスイッチを付けて、PIC用の3V電源にしています。

 

しかしLEDはVfが3V以上なのでそれでは駆動できません。そのため3本で4.5Vの方から電源をとっています。

 

この回路だとスイッチオフしていてもPICとLEDとの間に常に1.5Vの電位差があるわけですが、PICの方の電源がオンしていないとLEDのカソード側がフロートのため電流が流れないから繋がっていないとの同じはずで。。。PICのIOピンが5Vトレランスになっているので仮に動作中に4.5Vが入っても壊れないはず。LEDの電圧降下があるからそもそも4.5Vには絶対ならないはずだし。

 

しかしなんとなく気持ちのよくない回路ではあるので、完成したらほんとにスイッチオフ時に電流が流れていないか確認したいと思います。PICのIOが電源オフでほんとにフロートかなあ、というのが気になるところです。

 

 

とりあえず配線は出来たので簡単なLED点滅プログラムを入れてみました。

Dscf2732  Dscf2734

ここまでは思ったよりすんなりできました。

次はタッチセンサ用の電極と圧電ブザーを付けて、サイモンゲーム化に進みたいと

思います。

   

それではまたです。

2013/11/12

100円タッチライトの改造 その2

その2といいながらあんまり進んでないです。ちょっとした対応が2点。

 

1.PIC18F環境

 いつもどおりMPLAB+C30でプロジェクト作ろうとして、18Fだとアセンブラしか選べないことに気づきました。そういえばPIC18Fは今まで使ってませんでした。(^^;

 

 あわてて ”PIC18F コンパイラ” 検索したら「マイクロファン ラボ」様のページに詳しい解説があり、C18が使えるということで、MIcrochipのページからダウンロードしてきたところです。「マイクロファン ラボ」様ありがとうございました。

  

 

2.電源電圧

 今回買ってきたPIC18F25J11ですが、データシートをみたら電源電圧が2〜3.6Vでした。

静電容量センサ対応CTMU内蔵なのでこれを選んだのですが、電圧範囲が狭いとは思いませんでした。他のPIC18だとだいたい2〜5.5Vなんですが。

 

CTMUが有るのは電圧が狭いのかなあ、と思いながら秋月電子ページのPIC18Fシリーズを見ていたところ、PIC18F25K22-I/SPというのがCTMU内蔵で2〜5.5Vです。しかも25J11より安いし。

先によく調べてそっちにすればよかったです。

 

といっても、もう基板に半田付けしているので25J11で進めることにします。使おうとしている100円ライトが単4電池x3=4.5Vなので、ちょっと細工がいりますが、できるだけ部品を増やさない方向で対応したいと思います。

  

それではまたです。

2013/11/10

100円タッチライトの改造

久しぶりに100円ショップ工作始めました。物は下のタッチライトです。

Dscf2661  

これは「タッチライト」と言ってますが、実際は押してオンオフするので「プッシュライト」が正しいですね。100円でタッチセンサまで内蔵しろというのは厳しいので、それはそれでよいですが、では本当のタッチライトに改造してみよう、ということで買ってきました。

 

今回のCPUは秋月から買ってきたPIC18F25J11を使ってみます。

機能一覧にあるCTMUというのが静電容量型タッチセンサです。これを使ってタッチ方式にしよう、というのが今回の趣旨です。

 

まずは分解してみます。

Dscf2663Dscf2665Dscf2666_2

白色LEDが4つとスイッチ、電源は単4が3本ですね。

 

さて、これを改造しますが、単にタッチ型にするのは面白くないですね。

そこで、

  @4つのLEDを色違いにする。

  Aタッチセンサを4つにしてLED個別にオンオフできるようにする。

  BついでにブザーもつけてLEDごとに違う音を出す。

    → 最終的に、大昔にあった「サイモン」というゲームにしてしまおう (^^)

      (サイモンについてはWikipediaがありました。)

 

というのが今回の本当の目的です。

とりあえず今日加工したところまで写真をアップします。

Dscf2670 Dscf2671

中の3角型スペースに合わせてPICとLEDを乗せた基板を入れました。元の基板にあったスイッチも取り付けて、電源オン・オフだけはそれで行うようにします。

Dscf2672 単に発光だけさせたところ。4色になっただけでも結構印象が変わりますね。

 

回路図などはもうちょっと動いてからアップということで、このあとソフトを作っていきます。

  

それではまたです。

2013/11/03

FRISKでPACMAN

今日は以前からのジョイスティックと階調表示を使ってゲームを作ってみました。

Dscf2637 出来上がりはこんな感じです。

ジョイスティックで4方向と言えばやっぱりPACMANでしょう。

動作は下の動画でご覧ください。

デジカメ動画だと完全にちらついてますが、肉眼だともう少し階調表現に見えます。

(それでもちらついてはいますが。)

Aitendoのジョイスティックをむき出しで使っていますが、かなり使い勝手が良くないです。

やっぱり何か箱に入れて固定したほうが良いと思われます。

あるいはAitendoのもっと小型の物を使ったほうがよかったかなあ、と少し思っています。

いろいろ課題はありますが、とりあえずソフトを公開します。あまり綺麗なつくりでなくてすみません。

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

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

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

「oled_trans.s」をダウンロード :OLED制御アセンブラルーチンです。

「packdata.c」をダウンロード :PACMANキャラクタとMAPデータです。

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

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

 

階調表示のちらつきを改善したいと考えてますが、やっぱり手がないですね。

階調付きか、カラーのOLEDの販売待ちでしょうか。

 

それではまたです。

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/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/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」をダウンロード :表示用フォントデータです。

  

それではまたです。

2013/09/29

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

前回用意した拡張コネクタを使って超小型のオシロスコープを作成中です。

回路図は以下のとおり。左上の方が拡張部です。特に何も考えずにオペアンプでバッファだけ付けてます。

Oled_osc

これでいきますと、電源電圧とPICのADCの仕様から入力電圧はDC0〜3V限定となります。実用性はあまりないかもしれないですね。(^^;

追加した部品と基板は以下のような感じです。(オペアンプの電源は本体から取ることにして写真にある電池フォルダは使いませんでした。)

Dscf2449 Dscf2450 

 

 

あとはソフトの方ですね。とりあえず表示系と操作部だけ作ったところです。

Dscf2452  

後はAD変換部だけできれば完成(そこが一番大事ではありますが。)となるはずです。

実はPIC24FのADCの操作方法でちょっと手間取っているのと、測定対象となる信号源も何か用意しないと確認もできないと気づきまして、今日はここまでとしてしまいました。

 

それではまたです。

2013/09/24

AitendoのOLED in FRISK その5 「拡張コネクタ追加」

使いやすさを向上するためちょっと改良しました。

改良内容は下の写真の通りです。

Dscf2444 Dscf2442


Dscf2443



箱を開けずにプログラムできるようにするため、PICKIT3用コネクタを変更しました。

プログラム更新の度に開けていて、断線等が怖かったのですが、これで安心して使えます。

ついでにピン数を増やして、このコネクタを外部拡張用にも使えるようにしました。

回路図がちょっと変わったので再掲載します。

Oled2_2

回路としての変更は左のコネクタ周りです。これでRA0、RA1、RB2が外部で使用可能となります。

元々プログラム用のピンはRB0,RB1としても使えますので、合わせて5本のIOが使えるわけです。

5本もあれば単なるIOとしても結構使えますし、URATやI2C等のシリアル制御にも使えます。

他にアナログ入力にも設定できますので、内蔵ADCを動かせばテスター、ロガー、オシロスコープもどきもできてしまいますね。これをプラットフォームとして色々いじりたいと思います。

それではまたです。

2013/09/23

AitendoのOLED in FRISK その4 「インベーダゲーム化」

懐かしいインベーダゲームを作ってみました。

動きとかキャラクタとか適当に作りましたが、こんな感じでしたっけ?

ご参考用にソフトウェアを公開します。サイズが大きくなってきたので、圧縮ファイルです。

※2013/10/06 ファイル誤りが有り差し替えました。

「INVADER.zip」をダウンロード

突貫で結構冗長に作っています。昔のマイコンでこんな作りだと遅くて仕方なかったなあ、という感じですが、今のPIC24Fだと全然問題なしです。むしろウェイトを入れて調整しているくらいです。

クロックもメモリサイズも段違いだし当然と言えば当然ですね。しかしこんなものが安く手に入り、開発環境も無料で充実していているとは、良い時代になった物です。

ハードは特に変えていませんので、回路図などは前の記事をご確認ください。

それではまたです。

AitendoのOLED in FRISK その3

基本機能ができましたのでここまでのメーキングと動作を動画にしました。

ソフトウエアは以下の通りです。表示、サウンド、スイッチ入力までの基本機能が入っていますので、この上にアプリを作れば色々と遊べます。

「OLED_MAIN.c」をダウンロード :メインです。サウンド機能はここに入っています。

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

                        Line,Pset,Putch,Putstrルーチンが提供されます。

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

「font8x8_2.h」をダウンロード :8x8ドットのフォントです。数字/記号と英大文字のみ。

「oled2.h」をダウンロード: OLED制御のための定義ファイルです。
 

前回と変えていませんが回路図も一応アップします。

Oled2_2

この後アプリ部分作成に入ります。とりあえず何かミニゲームでも。

 

 

それではまたです。

AitendoのOLED in FRISK その2

まだ途中ですが、ハードの方を更新しましたので一度アップします。

回路図は以下の通りです。

Oled2

OLED周りは特に変えていません。

操作用スイッチ3個と、サウンド用に圧電スピーカを取り付けました。

スイッチはタクトスイッチをFRISKケースにホットボンド止めしています。ありがたいことに、PIC24FはCNPUxレジスタの設定で内部プルアップを付けることができるのですね。そのおかげでプルアップ抵抗が不要となり助かりました。

他にバッテリを確認用だった単三x2からコイン電池のCR2032に変えて、バッテリ込で

FRISKケースに入るようにしました。

 

今のところのイメージは以下の通りです。表示が思ったより小さいですね。まあ仕方ないか。

Dscf2411  

中は下のような感じです。結構無理やり入れてます。

Dscf2409 Dscf2410

圧電スピーカはAitendoの一番小さいのを使っています。上右の写真で電池をめくった下にあるのがそれです。

この状態で試しにタイマー出力による音を出させてみたところ、音は小さいですが、聞こえることは聞こえるのでよしとしました。

 

全体の配線は0.18mmポリウレタン線を使っています。これは皮膜をコテの熱で溶かしてはんだ付けできるのでカットするだけで線を剥かずにそのまま使えます。

その皮膜を溶かして付ける、というのがなんとなくいやで(溶けた物が混ざって半田不良しそうな気がして。)今まで使っていなかったのですが、今回試したみたら特に問題はないようでした。

こういう小物工作だと線が占める空間というのもばかになりませんが、これは0.18mmと細いので楽に入りました。強度もあるようですし、今後も使いたいと思います。

ハードはここまでとしてこれ以上いじらないつもりです。

ソフトはとりあえずPSETとLINEルーチンまでできたところです。後はキャラクタデータを作ってキャラクタ・テキスト表示を作ってグラフィックモジュールは完成予定です。

ソースはそこまでできてから公開します。

 

その後はそのモジュールを使って何かゲームでも作ってみようと思います。

 

それではまたです。

2013/09/22

AitendoのOLED in FRISK

連休で昨日は釣りにいってきましたが、今日明日は久しぶりにちょっとまともな電子工作を、と思いまして、今朝から工作に入っています。

 

物はAitendoが少し前に出していたキャリアボード搭載のOLEDモジュールです。

Dscf2398  Dscf2399

このサイズならFRISKに入る。ということでお取り寄せしてあったものです。

形から入ったほうがやる気がでるので、まずFRISKケースに入れてみました。

Dscf2384   Dscf2386

次に制御用のマイコンをハンダ付け。マイコンは秋月で買ってきたPIC24FJ64GA002にしました。回路図も載せておきます。OLEDの制御信号はA0,CS,CLK,DIN,RSTがあり、それぞれをPORTBに接続してソフトでタイミングを作るようにしました。

Dscf2391 Oled

後はソフトですが、あえず初期化してテストパターンが表示できたところです。

Dscf2396 初期化についてはAitendoのページにあったサンプルコードのシーケンスそのままで簡単にここまできました。以前失敗したFSTNのときとはえらい違いです。まだ初期化部だけですが参考用にコードを置いておきます。

「OLED_MAIN.c」をダウンロード   :メインです。(まだほとんど空っぽですが。)

「oled_ctrl.c」をダウンロード   : OLEDのレジスタライトと初期化ルーチンです。

「oled.h」をダウンロード  :OLED制御用の定義ヘッダファイルです。

 

ここまで動けばあとはソフト作れば色々と応用が可能となりますね。

FRISKゲーム、FRISKオシロスコープなんかをやっていきたいと考えてます。

  

それではまたです。

2013/05/28

AITENDOのFSTN液晶 その2

昨日からAITENDOにあるサンプルコードを流用してFSTNの設定をやっているのですが、全然動作していません。

 

さきほどネットで”AITENDO FSTN”で検索したら、既に表示に成功された方のブログを見つけました。その内容によると、AITENDOのページの取り付け写真にあるLCDのフレキが逆、というかLCDが裏返し、らしいです。。。

つまり↓のページの写真全部LCDが裏返し?

http://www.aitendo.com/product/5466

でもちゃんと動いてて渦巻きっぽい絵を表示してるではないですか。。。。。。と思ったらバックライトしか配線してないですね(^^;。表示できるはずない。つまり渦巻きははめ込みかな?

 

確かにこのLCDの端子は変わったフレキケーブルで、両面どちらからもはんだ付けできるようになっています。これを使われる皆様はどうぞご注意くださいね。

 

実は、私は一度逆(つまり正しく)取り付けていて、AITENDOの写真をしげしげと見直して、おお、危ない逆だった、と付け直しています。あそこで見直さなければ結果オーライだったのか、と思うとショックもひとしおです。

  

今日は付け替える気力が出ないので寝ます。

それではまたです。

2013/05/26

AITENDOのFSTN液晶モジュール

ちょっとPICAXEの方はお休みして、AitendoのFSTN液晶モジュールというのをいじりはじめました。

Dscf2020_2  Dscf2022_2

 ・インタフェースがシリアル(SPI)で簡単

 ・電源が単一電源(3-3.3V)、バックライトも含む

 ・結構小型で薄い

 

といった理由で何かに使おうと思って買ってあったものです。

ホストCPUに実はPICAXEとの組み合わせを考えていたのですが、速度が気になるので断念して、秋月電子で売っているPIC24FJ64GA002にしました。これですと32MHz動作、FLASH64KB、SRAM8KBですので、ちょっとしたゲーム機ができると思いまして。

 

ケースにはサイズ的にFRISKは無理なので、今回はMINTIAをターゲットとします。

Dscf2024 とりあえずLCDとCPU、スピーカ、スイッチを

入れてみたところです。なんとか入りそうです。電池は外出しになってしまいますが。。。。

まずはLCDの配線までやりました。今はバックライトだけ光ります。

Dscf2027  Dscf2029_2

上の方の写真でミニスピーカを入れていますが、駆動回路が面倒になるし、音も小さそうなので、ちょっと大きめの圧電スピーカに変えました。

 

このあとSPI制御によるLCD駆動ソフトにかかります。

 

それではまたです。

2013/05/22

PICAXEの速度を測ってみました

PICAXEが実に簡単に使えるのは前回確認しました。

次は速さはどうなんだろう?というのが気になりますよね。そこで、今回はベンチマークテスト、というと大げさですが一番簡単なIOパタパタの周期をオシロでとってみました。

Dscf2015 試したPICAXEは8ピンの08M2です。

 

Picaxe_speed1  これが今回試したIOパタパタのコードです。

簡単なものなので、ソースをコピペします。

main:
high C.1  ; Switch on output C.1
low C.1  ; Switch off output C.1
goto main  ; Loop back to start

 

さあ、どうでしょう。インタプリタ内蔵PICの実力とやらを、オシロで見てみました。

Dscf2017  Dscf2018

パタパタのLOOP一周期が1.36msです。。。。。。usじゃないですよ。

  

Dutyが50%でないのは、Goto命令があるためですね。これで見るとIO命令の時間を1とするとGoto命令が3くらいかかっているようです。

  

それは良いとして、周期1.36msってどうなんでしょう?ちょっと計算してみましょう。

  

  ・PICAXE08M2はベースがPIC12F1840(32MHz)だそうです。

  ・PICは1サイクル(分岐は2サイクル)で1命令実行。1サイクルは4クロック周期。

  ・32MHz動作なら1サイクルは4*1/(32*10^6)=125nsのはず。

  ・もし同じIOぱたぱたをアセンブラで組んだらBSF,BCF,GOTOの3命令で

   合計4サイクル(GOTOが分岐なので2)=500nsつまり0.5us。

  ・1.36msってことは、その2,720倍の時間がかかっている?

  

   インタプリタが動いているにしてもちょっと大きいような?インタプリタといっても中間コードで動いているだろうから、解釈にそんなにかかるとも思えないし。

 

もしかしたら意図的に、例えば実行時間を一律にするために、実行周期をあえて大きくとっているとか? 

  

インタプリタで動かしているものをプリミティブな命令と比較するのは意味がないとは思います。通信等の速度が要求される処理はコマンドになっているから問題ないということもあると思います。

 

しかしIO操作に数100usかかるというのは実際の制御系だとちょっと間に合わないケースが多そうな気がします。学習用ということでしたら全く問題ないでしょうが。

 

あとはもしかしたらPICAXEの方の設定にデバッグモードとか何か実際より遅くなる要因があって本当はもっと早いとか? 

とりあえず、何も考えずに、デフォルト設定のままやってみたらこういう結果になりました、ということで、今回はここまで。

2013/05/20

PICAXEで簡単オルゴール

既に遅れているのかもしれませんが、秋月電子でPICAXEなるものが売られているのに先週末気付きました。

BASICというキーワードが有るので、「もしや昔あったBASICインタプリタ内蔵のPIC-BASICスタンプの再来?」かと思って注目していたのですが、どうもそうではなく、PC側の開発環境がBASICやフローチャートという物らしい、ということで、ちょっとテンションが下がってました。
(なお、BASICスタンプは入出力をなんとかして、昔のBASIC内蔵ポケコンもどきにできないかなあ、とちょっと考えているうちになくなってしまった。。。というのがありまして。)

 ところが、その後PICAXEの仕様を見ていたところ、音楽関係の命令があり、しかもRTTTLというもので記述された音楽データがネット上に大量にある、ということに気付きまして、じゃあ電子オルゴールにしてみるか、ということで秋月のスターターキットを買ってきてみました。

基板はシルク印刷を見てICソケット、ジャック、ピンヘッダ、抵抗2個、コンデンサ1個、電池、をつなぐだけです。

 

あと、5ピンとGNDの間に圧電スピーカを付けています。PICAXE-08M2のデータシートによると、サウンド出力(TUNE)はこのピンに出てくるということのようですので。(8ピンよりおおきなチップだと出力ピンが選べるみたいですが。)

 

ソフトは何も考えずについていたCD-ROMからそのままインストールしました。ダウンロードケーブルドライバのインストールだけちょっと手間取りましたが、デバイスマネージャから

Usb_Driver_AXZE027 -> Windows-XP-2000-VIsta-7

を選ぶことで動作するようになりました。

動作については音物ですので、動画でご覧ください。

セットアップからプログラムの書き込みまで実に簡単です。単音なのはちょっと寂しいですが、PICAXEならぬまっさらのPICで同じことをやったら結構大変です。プログラム以前のCONFIGやTRIS,ANSELなんかの設定で最初につまづく人も多そうですし。

 

しかも、動画で紹介している以下のページから1万以上の音楽データがダウンロードできるようですし。

http://www.picaxe.com/RTTTL-Ringtones-for-Tune-Command/

ここからZIPファイルをダウンロードして展開すると”音楽名.BAS”というファイルがいっぱい出てきますので、PICAXE PROGRAMMING EDITORからそれを開いてProgramボタンを押すだけです。

 

今回初めて知ったのですが、このデータはRTTTL形式というもので、NOKIAが音楽データ交換用に規定したものだそうです。

 

動画ではX'mas songsをダウンロードして試しています。実は動画以外にも何曲か聞いてみて「なんかちょっとリズムか音程が変じゃない?」という箇所が結構あるのですが、それはデータが変なのか、使っているPICAXE-08M2の設定か制限の問題なのか、ちょっとわかりかねています。 (データの問題かどうかは楽譜を探してきて比較すればすぐわかるので、そのうち暇が出来たら確認しようと思います。)

 

そういえば、PIcaxeProgrammingEditorにはシミュレーション機能もあって、ProgramしないでもPC画面でシミュレーション動作できて、音楽も聞こえるのですが、その音にもなんか変なことがあるみたいです。オクターブがずれているんじゃないかなあ、という感じの時が。

 

実チップにProgramして動作させると正しく聞こえるので、これはシミュレーションモードの設定の問題かなと思っています。(全くマニュアルをみずにいじってますので。)

まあ簡単に実機で確認できるから、あまり気にしてません。

 

正直ちょっと侮っていたのですが、ここまで簡単にできるなら学習用としてはかなり良いように思います。案外面白い物なので、他の機能もいじってみたいと思います。

それではまたです。

2013/04/29

AITENDO のDSPモジュールRDA5807-M その4

一応RDA5807-Mで普通のFM放送が受信できるようになりましたので、回路とソースをアップします。

Rda5807 回路図はこの通り。PIC12F683でI2C制御しています。

DSPラジオICの確認ようなので、スイッチや表示形無しで決め打ちパターンで動かしています。

ソフトは以下のファイルです。MPLABのプロジェクトに登録すればコンパイル・書き込みできます。

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

「PIC12F_M5807DRV.c」をダウンロード :M5807制御用のルーチンです。

「PIC12F_I2C.c」をダウンロード :I2Cルーチンです。

「PIC12FRADIO.h」をダウンロード :ヘッダです。

現状の物は、FM76−91MHzモードにして、シーク機能を使って放送を10秒ごとに切り替えるだけです。試したところ数局が簡単に受信できて、感度も結構良いようです。

なお、50−65MHzに設定できるようにもしています。データシートによると、内部レジスタ0x07のビット9を0にするとこのバンドが使えると書いてありましたので、その設定を入れています。

しかし、その設定を使ってはまだ何も受信できていません。最初シーク機能でひっかからなかったので、周波数を51MHz〜53MHzで25KHz刻みで振るようにして、しばらく聞いているところですが、今のところ全く何も聞えません。

そもそも50MHzのアマチュア無線バンドが聞えるはずと思って試しているのですが。。。。設定が良くないのか、それとも誰も近くでは話していないのか、どちらとも分かりません。まあ、もうしばらく試してみます。

それではまたです。

2013/04/28

AITENDO のDSPモジュールRDA5807-M その3

今日からRDA5807-Mの設定ソフトを作成中です。インタフェースはI2Cなので、以前作ったBK-1088用のソースを流用して試しているのですが、RDA5807に乗っている石は結構くせがあるようで難航しています。

くせというのは、今のところわかったのが以下のような点です。

@I2CプロトコルにデバイスID(0010000b)はあるが、内部レジスタインデックスはない。

  このため、目的のレジスタにアクセスするためには、先頭からそのレジスタまでの

  全てのレジスタにアクセスしないといけない。

A先頭のレジスタ番号はライト時には0x02、リード時には0x0Aである。

  それより前のレジスタにアクセスするには、一度最後のレジスタまでアクセスして、

  折り返す必要がある。

BAitendoのページに有る参考コードによると、チップIDをリードしてそのIDに有った

  設定を行う必要があるらしい。コードによるとIDは0x5801〜0x5804の4通りが

  あるらしい。なお、今試しているモジュールのIDを読みだしたところ、0x58040x5802でしたので、今回はこれに決め打ちでソフトを作ります。

Dscf1972 文章だけではさびしいので確認中の様子を写真に撮りました。

とにかく、なんとかレジスタ読み書きができるようになりましたので、これから設定に入ります。

それではまたです。

2013/04/21

AITENDO のDSPモジュールRDA5807-M その2

今日やっとDSPモジュールとPICマイコンを配線してみました。

Dscf1968

基板は前回のフリスク用だと幅がちょっと狭くてOLEDモジュールの座りが良くないので千石電商のTNF34-49というのに変えました。

スイッチ3個は、青1個で周波数、ボリューム、他のモードを切り替えて、赤2個でアップ、ダウンする予定です。

 Dscf1971 とりあえず手元有ったスピーカと電池ボックスを繋いで、ロッドアンテナを並べてみました。もちろんソフトがないのでまだうんともすんとも言いません。

OLEDの配線もこれからです。ソフトを組んでラジオとして動くようにできてから繋いで動かそうと思います。

それではまたです。

2013/04/16

AITENDO のDSPモジュールRDA5807-M

ちょっとLEDの思いつきで寄り道していましたが、やっとやる気が出てきたのでDSPモジュールでのFM50MHz受信の方を進めることにしました。

物は先々週買ってありました。

Dscf1963 これがRDA5807-M。390円です。

ラベルには76MHz〜108MHzとなっていますけど、乗っているDSPラジオIC「RDA5807HS」のデータシートは50MHz〜となってるのですよね。ちょっと心配だけどここはデータシートを信じて進めることにします。

これ以外に買ってあるのが、以下のOLEDディスプレイFRISK用基板です。折角だから表示も欲しいと思って買ってきました。

Dscf1964 Dscf1965

このOLEDディスプレイはI2C,SPIインタフェースモードが有るので、ラジオモジュールと共通の線で制御できるはずです。つまり配線がとても楽。

とりあえず、基板にラジオモジュール、OLED、PICマイコンを置いてみたところ。

Dscf1966_3一応乗ることは乗りますね。ピッチが合わないので細工は要りそうですが、予想される配線が少ないのでなんとかなるでしょう。操作スイッチは小さいのを置けば良いし。

しかし、電池とスピーカーがなあ。FRISKケースに入れるために無理に小さい電池使ってもすぐなくなるし。小さいスピーカもあるけど音が貧弱だし。

とりあえずケースは置いておいて、暇を見つつ基板から動かしてみます。動いたら、電池、スピーカ、良いケースを見つくろうということで。

それではまたです。

2013/04/14

信号1本で複数のLEDを制御

少ない信号線でできるだけ多くのLEDを制御する方法について、またあれこれ考えまして、(ちょっといまいちですが)信号一本で3個制御をやってみました。

回路図は以下の通りです。各LEDにチップコンデンサとチップインダクタでLC共振回路を取り付けています。

Twowire

ソフトは以下です。

「TWOEWIRE.c」をダウンロード

PIC12F683のPWM機能を使って各LED共振回路にマッチした周波数を出しています。

実は、動画を良く見ると分かりますように、「真中のLEDだけ」が点灯している状態が有りません。左右のLEDとの分離が完全にはできていないのです。

 コンデンサの容量を1:2:3にしてありますので、共振周波数はそのルートで大体1:1.4倍:1.7倍になっています。元が矩形波ですので、2倍以上にするときっと高調波が問題になるだろうな、と考えてこうしていますが、このためあまり周波数の間隔が取れていません。LC回路のQもかなり良くないのでしょう。

 多分ちゃんとした正弦波発振回路を組んで周波数の間隔も広げれば分離できると思うのですが、回路が複雑になるので今回は妥協してしまいました。。。

それではまたです。

2013/03/24

FRISKケースで音声合成

今日は、またAITENDOのDSPラジオICをいじろうかと思っていたのですが、ちょっと気が変わって、だいぶ前に買ってあった秋月電子の音声合成LSIの方にしました。

この石は、ほとんど外付け回路無し、シリアルでテキストデータを入れてやればそのまんま音声として出してくれるという優れ物です。

なぜこれを引っ張り出してきたか、というと、土曜日にAITENDOでFRISK用の基板をまとめ買いしまして、それを使ってFRISKに入れてしまえるな、と思ったからです。

Dscf1934 基板はこれです。100円で2枚入っていて安い。SOPの座を付けたタイプ等複数種類あります。

まずは動画をご覧ください。

Speech 回路図はこの通り。LSIは28ピンですが実際に接続するピンだけしか書いてありません。実に簡単です。

PICマイコンとLSIの通信はRXD一方向だけにしました。本当はTXDにも繋いでビジーステータスを見るのですが、後述のようにソフトの方が大変になるのでそれはやめて、PLAYステータス信号を直接観測するようにしました。

それと合わせて、PLAY信号にLEDを付けましたので、話している間LEDが点灯します。

(ちょっと2001年宇宙の旅のHALっぽい?)

ソフトは以下の通りです。

「SPEECH.c」をダウンロード

使っているPIC12F683にはUARTがないので、ソフトでRXDに繋いだGPIOを振ってエミュレートしています。送るのは単に時間を切ってH/Lを振るだけなので簡単で良いのですが、受ける方はかなり大変です。そこでTXDは使わずにお茶を濁しています。
 

しかしこんなに簡単にそれなりの音声合成ができてしまうのには驚きました。

今回はただしゃべらせてみた程度ですが、折角だからなにかに応用したいとことです。

それではまたです。

8ピンPIC(PIC12F)用プログラミングケーブル作成

このところ8ピンのPIC(PIC12Fxx)を使うことが多いです。お手軽な石なのでちょっとしたことには重宝するのですが、毎回悩むのが、その書き込みインタフェースです。

 

私はPICKIT3を使っていますが、その口は2.54mmピッチ6ピンのピンヘッダ用になっています。

 

基板にピンヘッダを立てれば簡単ではありますが、それ自体が案外基板スペースを食います。通常こういった石を使う場合は、小さいケース(FRISKとか)に組み込もうとしていることが多く、ピンベッダスペースや高さも苦しかったりします。

 

小さいコネクタをつけて変換ケーブルを作ったり、プログラム時だけ線をPICに直接ハンダ付けしたりもしましたが、どうも使い勝手がよくありません。

 

そこで今回、以下の写真のような変換ケーブルを作ってみました。

Dscf1926 なんのことはない、ピンヘッダと8ピンICソケットをつないだだけのものです。配線は、"ICSP PIC12F"で画像検索すると参考にできる回路図がいっぱい出てきます。なお、MRST端子はICソケットのところで20KΩのプルアップ抵抗を付けています。

 

これで、プログラムの時だけPIC12Fの上からICソケットを押し付けます。

Dscf1927 実際に使ってみたところ、ソケットの足がうまいこと8ピンPICを挟み込みようになって案外しっかりと固定されました。プログラム書き込みも問題なく出来ています。

 

とにかくこれで、基板のピンヘッダスペースも不要だし、そのための配線もいらなくなりますのでかなり便利にできたと思います。

耐久性はわかりません。しばらく使って試してみます。

それではまたです。

2013/03/20

5本のIOで12個のLEDを制御 その2

コメントでご指摘いただきましたように、前回の記事の回路は"Charlieplexing method"という方式で結構前から有った物のようです。

この回路は原理的に1度に1つのLEDしかオンできませんので、今回はダイナミック駆動と組み合わせて残像で複数同時に動くようにしてみました。(これも当然と言えば当然な組み合わせで、新しい物ではないですが。)

回路図は前回のままです。

今回のソフトは以下の通りです。

「MANYLED2.c」をダウンロード

LEDの数だけ配列(display[12])を作り、PIC12F683のタイマー割り込みでそれをスキャンして表示しています。

上位ルーチンではdisplay[]にLED状態を入れるだけですので、ちょっとしたゲーム位なら簡単に作れます。

これで昔の「ラジオの製作」や「初歩のラジオ」にあったようなLEDゲームの再現ができるかな、と考えましたが、この時代に作っても面白くないかな、というか誰も分からないかな、などど思案中です。

それではまたです。

2013/03/17

5本のIOで12個のLEDを制御

以前作った3D LEDディスプレイの絡みで、LEDの配線を少なくする方法ってないかなあ、と考えておりまして、思いついた回路を実験してみました。

どういうものかはまた動画をご覧ください。

回路図は下の通りです。

Manyleds

5ビットのIOですから、情報量からするとデコーダICを使えば最大32個まで制御できますが、

 
この回路はそういう外付けIC等無しでIOの少ないCPUとソフトだけでできるのが特徴です。  
 

ソフトは以下の通りです。今回はPIC用のHI-TECHCで作ってみました。

「MANYLED.C」をダウンロード

回路的には一度に1個の点灯用ですが、組合せによっては複数もオンできます。(抵抗をケチっているので明るさは落ちますが。)動画の最後で交互表示しているのがそれです。

とはいえ1個ずつオンにしてダイナミック駆動で複数を点けて見せるのが本当ですね。

そのうちソフトを直して対応しようと思います。

それではまたです。

2013/03/04

3次元LEDディスプレイにトライ (その2)

昨日の回路図を見た友人から「左下のLEDは何?」という質問が有りました。

確かに何も説明なしでしたので、ここで解説させていただきます。

3dled0304 回路図の赤枠の部分です。

これは、秋月電子の通過型フォトインタラプタ CNZ1023というものです。

回路図にはLEDとフォトトランジスタで書いていましたが、実際は一体のものです。

これで回転角の原点を検出して表示開始タイミングを作っています。

Dscf1869a 実装位置は左の赤丸のところです。

Dscf1882_4 拡大図です。ボードの回転によりスリットの間を下の棒が通ると遮光されて角度原点が分かります。

ソフトではこの出力をPICマイコンのIOで見てHとなるタイミングを待ってから1週分の表示を開始します。位置決め精度がどの程度か心配でしたが、動作を見ると回転ごとのばらつきもなく結構正確に出ているようです。

最初はこのセンサ出力周期を見て1週分の時間を測定し、表示タイミングを微調整する必要が有るかと考えていましたが、その必要もなく、単にセンサ出力待ちと単純なWAITループだけで案外うまくいっています。(これはセンサの精度というより回転系の速度がまあまあ安定しているということですね。)

このセンサは10個300円とお安くなっていますし、他にも使えそうですね。

それではまたです。

2013/03/03

3次元LEDディスプレイにトライ

正直言いましてこのところ動画のために工作してます。

アクセスはそんなに多くないですが、国別を見ると、東欧とか中南米とか意外な国からアクセスが有ったり、たまに英語でコメントくれる人もいたりで中々励みになります。

他の人の工作関係を見ていると、アクセスの多い動画ジャンルでキューブ状のLEDマトリクスというのがありまして、ああいうのも面白そうだなと思っていました。

しかし何番煎じかわかりませんがマネはよくないし、ならば面で回転させて3Dはまだないみたいだしどうかな、ということでやってみました。

回路図は以下です。後日別記事で補足説明をします。

3dled

プログラムソースは以下の通りです。以下2ファイルをMPLABプロジェクトに入れればコンパイルできます。

「LED3D0303.c」をダウンロード
「const0303.c」をダウンロード

ちょっと言い訳すると動画だといまいち綺麗ではないですが、実物はもうちょっとましに3Dに見えていますよ(^^; もっと暗いところだと良く見えるのですが、動画がまともにとれなくて。

ほんとはLED8x8とかカラーにもしたかったのですが配線がとても大変なので5x7で妥協しました。こういうものは力技ですね。

それではまたです。

2013/02/17

極小LEDルーレット

今回は、また昔作ったようなLEDルーレットをできるだけ小型にしてみました。

Ledrot 回路図はこの通り。昔はTTLで組んだものですが、今はマイコンです。PIC12F683のSOPタイプを使っています。

この回路ではLEDの電流制限抵抗が共通になっています。これだと同時に点灯するLEDの数によって明るさが偏ってしまうのでので、普通はLED1個に1抵抗としますが、今回は同時には2つ以上は点灯しない、という割り切りでこうしています。(部品と配線量がこれで相当減りますので。)

こういう小さい物は回路より電池で大きさが左右されます。今回は高性能酸化銀電池SR621SWというのを買ってきて、2個使いで3Vとしています。しかしこの電池は5個で450円と非常に高いです。今後は使わないと思います。

 Dscf1792 出来栄えはこんな感じです。

プログラムはアセンブラで作りました。動きはコピペでつらつらと書いていますのであまり綺麗なソフトでありませんがご参考に。

「LEDROT.asm」をダウンロード

動きはまた動画でご覧ください。

実はLED6個付けて回そうとしていたのですが、GP3(MCLRとシェアになっているIO)だけは入力オンリとプログラム時に分かりました。そのため動画を良く見るとLEDは6個ですが、5個しか動いていません。

それではまたです。

2013/02/11

100円タッチライトをカラー3分タイマーに改造

今回の100円ショップ工作のネタは、下のタッチライトです。

Dscf1709_2 実は以前からこの形とLEDの組合せはタイマー向きだなあ、と思っていまして。連休で久しぶりに時間が取れたので改造に入りました。

 Rgbtimerx 早速ですが、回路図は左の通りです。8ピンのPICマイコンPIC12F675と、秋月のRGBLEDを使っています。LEDドライブのためのトランジスタ回路は先日のファイバーLEDの時に使ったものと同じです。

プログラムはアセンブラで作りました。簡単なものですがご参考にどうぞ。

「RGBTIMERX.asm」をダウンロード

Dscf1719できたところです。これは割と中の空間が広いので簡単でした。

動きの方はまた動画でご覧ください。

仕様として、最初の2分間は2秒間隔で青点滅、その後30秒緑点滅、20秒赤点滅、最後の10秒は速い赤の点滅としてあります。(中間の緑はほんとは黄色にしたかったのですが、スイッチの白いカバーを通すと黄色がなぜか赤にしか見えなくなるため、しかたなく緑としています。)

なお、このところの動画BGMは以下の「甘茶の音楽工房」様の音楽を使用させていただいております。ロイヤリティーフリーで良い曲が多く、イメージ別に分かれていて選びやすく大変ありがたいサイトです。

http://amachamusic.chagasi.com/

それではまたです。

2013/02/03

100円 ファイバーライトインテリアの改造 (その2)

ということで、100円ファイバーライトインテリアをちょっと派手にしてみました。

元々の3個のLEDを手元に合った秋月電子の角型RGB-LEDと交換し、それをPICマイコンで制御したらもっと綺麗で派手な動きになるのじゃないかな、という構想です。

回路図は以下の通り。マルツのPICマイコンモジュールにRGB−LED駆動のためのトランジスタ回路を付けただけです。

Fgiber 

ソフトウェアは下の物です。3個のLEDをR/G/Bで速度を変えながらぐるぐるまわしているだけです。

「blink.c」をダウンロード

出来たものを動画にしました。

苦労して配線した割には。。。。面白くないかもしれませんね。。。。。

せっかくPICマイコンまで付けたので、次に時間ができたらマイクで音を拾って音楽に連動させて見ようかと思います。

それではまたです。

100円 ファイバーライトインテリアの改造

久しぶりに100円ショップでみつけてきた変なものです。

Dscf1616 FiberLightInteriorとあります。

光ファイバーを束ねたものとLEDと電池の入った円盤型の台座からなっています。

Dscf1626

台座の中はこんな感じで、赤、緑、青のLEDと電池が入っています。

スイッチをいれると下のような感じで光ります。

Dscf1625  Dscf1624

Dscf1623

明りを消して見ていると、そんなにわるくないです。特にゆらゆらせさた状態だと海の生き物っぽい感じもして、100円にしては良いと思います。

しかし、残念ながらどうも地味な印象で、すぐに飽きがきます。

RGBの組み合わせ色や自動色変わりなんかのモードが選べるのですが、ゆっくりしていることと、単調な為だと思います。

そこで、これから高輝度RGBーLEDとマイコン制御でちょっと派手にしてみようと思います。

それではまたです。

2013/01/13

AitendoのDSPラジオIC(その8)

短波も受信できるようになりました。原因はお恥ずかしいことにかなり単純なソフトバグで、短波の設定時のREGISTER5のバンド選択ビットの値が誤っていました。

前回アップした記事のソースを差し替えてあります。周波数調整時の表示にもバグがあったのを一緒に直しました。

下の写真は、ラジオNIKKEIの第一の方3.925MHzの受信中です。

Dscf1557

写真だけでは音はわかりませんが、ちゃんと聞こえていますよ。

なお、ラジオの奥の方にあるのは短波用ループアンテナのプリアンプ部です。さすがに短波はこういうものがないと辛いです。

それではまたです。

2013/01/07

AitendoのDSPラジオIC(その7)

2013/01/13 短波が受信できないバグFIXでmain.c , bk1088sub.cを差し替えました。

------------------------------------------------------------------------------------

ある程度動きましたので動画にしてみました。

AM/FMバンドの切り替え、あらかじめ登録した局の選局、ボリューム調整ができます。

動画にはありませんが、左から3,4番目のボタンで周波数の上下調整(長押しで高速調整)ができます。  

回路は前回の回路図の通りです。参考にソースをアップします。

===========================

「RADIOLCD2.zip」をダウンロード :これが以下のの全ファイル

を含むMPLABプロジェクトを圧縮したものです。これを展開すれば

そのままコンパイル、PICへの書き込みができます。

===========================

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

「bk1088sub_v02.c」をダウンロード :ラジオIC BK1088の操作部です。

「lcdsub.c」をダウンロード :ラジオ用LCDの表示制御部です。

「keys.c」をダウンロード :スイッチ入力の制御部です。

                メインのタイマー割り込みから呼ばれます。

「const.c」をダウンロード :定数定義です。主にBK1088のレジスタ設定値です。

「prototypes.h」をダウンロード :各関数のプロトタイプ宣言をまとめたファイルです。

「define.h」をダウンロード :スイッチ状態定義です。

なおSWもソフトとしては入っているのですが、すみませんがどうもうまく受信できていません。

とりあえず動くのはAM/FMのみです。SWの方が受信できるようになったらまたアップします。

(2013/1/13)SWの受信不良原因がソフトのバグと判明し、ソフトを差し替えました。

上のソースはAM/SW/FMすべて受信できます。 

それではまたです。

2013/01/06

AitendoのDSPラジオIC(その6)

回路を基板に移しました。

Dscf1544  こんな感じです。

秋月電子のユニバーサル基板の細いのが手元にあったので、それを使っています。

回路図は下の通りです。前回までの回路にスイッチを追加しました。

PORTCが空いていたので、そこにスイッチを7個付けています。

Radiolcd3

裏側はこんな感じ。

Dscf1545 ラジオICは小さいんですけど、LCD表示と操作スイッチのためにかなりの配線量になってしまいました。

ついでに、AM用のコイルも、もう少し良いものに変えました。そのためか、電波状態のためか、ニッポン放送とラジオ日本もきこえるようになりましたが、かなり弱いです。

やっぱり上の方の周波数特性が良くないのでしょうか? 

これで短波も試しているのですが、短波用ループアンテナをつないでも、判別できない何かがかすかに聞こえるだけです。ラジオNIKKEI位は聞こえても良さそうなものですが、周波数を合わせても聞こえません。

周波数設定がうまくいっていないのか?そういえば短波の時ってAMコイルはこのままでもよいのでしょうか?そのあたりデータシートを見直します。

それではまたです。

2013/01/05

AitendoのDSPラジオIC(その5)

FMも動きました。写真はJ-WAVE(FM81.3MHz)を受信中。音は結構良いです。

Dscf1536

ソフトは以下の通りです。あいかわらずやっつけです。

「bk1088_amfmtest.txt」をダウンロード AM、FMで切り替えるレジスタは以下の2つだけでしたので割と簡単にFMも動きました。

Register 05h. System Configuration2 (bit 8,7 : Band selection)
Register 07h. Test1 (bit 13 : AM/FM mode selection)

なお、なぜかFM→AMと切り替えると最初の1回目だけうまくいかないので、
上記2レジスタの設定を2回やっています。とりあえずそれで動いていますが、こういう治し方はどうもすっきりはしません。

他にやっぱりAMで周波数の高い方の周波数が入りません。
コイルが良くないでしょうか?もしかしてソフトバグで計算ミスってる?

とはいえ一応AM,FMは動いたので次は短波ですね。実は短波がどんなものかが一番気になっていました。やっぱり短波まで動いてマルチバンドと言えますし。

今のバラックではまともなアンテナもつけられないので、続きは基板に移してからトライしようと思います。

それではまたです。

AitendoのDSPラジオIC(その4)

BK1088の動作、AMだけですがようやく音が出るようになりました。

内部レジスタが読み書きできるようになったので、各レジスタの初期設定を入れてみたのですが、「ボツッ」という音がするだけで、その後うんともすんとも言わないので困っていたのですが、

BK1088で検索して見つけたsorriman様のブログ記事にノウハウとサンプルソースまで公開くださってまして、ソースにあった初期値を最初に設定することで動くようになりました。誠にありがとうございました。

とりあえずAMでの動作です。回路は下のように以前アップした回路にAM用のバーアンテナ(正しくは手元にあった88番豆コイル)をつなぎました。

Radiolcd3

ソフトはまだやっつけのままですが、下の通りです。

「BK1088_AMtest.txt」をダウンロード (拡張子を.cにすればそのままPICマイコン用のMPLABで使えます。)

とりあえずAMの7局を周波数指定で巡回するようにしています。

受信状況は下の動画をご覧ください。(受信場所は練馬区です)

ニッポン放送(1242KHz)とラジオ日本(1422KHz)が入らないです。場所の問題なのかもしれませんが、周波数の高い方の2局というのが何かひっかかります。

それはそれとして、FMと短波の対応と、そろそろバラックをやめて基板化したいと思います。

それではまたです。

2013/01/03

AitendoのDSPラジオIC(その3)

オシロが使えるようになったのでBK1088リードテストのデバッグしてみました。

うまくいかなかった原因は一見してI2CのACK、NACKタイミングのクロックパルスが短かったためとわかりました。やっぱりオシロは便利です。

下の写真はwaitを入れて改善したあとのI2C波形とLCD表示です。

I2c  Disp

LCDの方には、DEVICEIDの下二桁0x80(10進数で128)が表示されています。

ついでにLCD制御信号の波形も見てみました。

Lcdon Lcdoff

左はLCDがオンになっているタイミング、右がオフタイミングです。

COMとSEGの差分を見るとうまいことONで最大電圧、オフで0Vになっていることがわかると思います。

なお、今回のソフト(BK1088のDeviceIDをLCDに表示)のソースは以下の通りです。

「BK1088_READ.txt」をダウンロード

長くなってきたのでソースを記事に貼るのはやめました。

拡張子”.TXT”ですが、”.C”にすればそのままMPLABで使えます。

この中の

void Bk1088_Write(unsigned int ad,unsigned int dt)
unsigned int Bk1088_Read(unsigned int ad)

の2関数を呼べば対応したBK1088レジスタの読み書きができます。

次はこれを使っていよいよBK1088を動かしたいと思います。

それではまたです。

2013/01/02

AitendoのDSPラジオIC(その2)

昨夜からBK1088制御ソフトを作成中です。

とりあえず、BK1088のデータシートとこちらのページを参考にしてI2CでデバイスIDを読んでLCDに表示するソフトを作ってみたのですが、うまくいっていないようで、0000表示となっています。

問題がハードなのかソフトなのかはI2Cの波形を見ればすぐわかるのですが、いま帰省中で手元にオシロがないのでそうもいきません。戻ってからということにしました。

動かないソフトをアップしても意味がないので、ソースアップも動いてからにします。

なお、ネットで検索したところBK1088のレジスタ設定値がこの中国語ページにあるらしいです。ここにあるFM用設定らしいところを抜粋してデータシートと照らし合わせました。

code UINT16 HW_Reg[]=
{
0x8000,//0   デバイスID
0x1080,     チップID
0x0281,     Power Configration ※bit0 = Power ON
0x0000,     Channel   
0x60C0,     Systen Configuration1
0x37DA,//5   System Configuration2 ※バンドとチャンネル間隔
0x086E,     Systen Configuration3
0x0901,     Test1 ※AM/FMの切り替えはここらしい
0x9C90,     Test2 ※AFC関係?
0x17A0,     Status1 ※AFC/SNRリード
0x402B,//10  Status2 ※Seek状態、RSSIリード
0x0040,     Read Channel ※現在のチャネル 
0x0000,     RDS1
0x0000,     RDS2
0x0000,     RDS3
0x0000,//15  RDS4
0x7B11,     Boot Confirutation1 ※リザーブ機能?
0x0800,     Boot Confirutation2 ※リザーブ機能?
0x4000,     Boot Confirutation3 ※リザーブ機能?
0x4144,     Boot Confirutation4 ※リザーブ機能(リセット値と違う)
0x829A,//20  Boot Confirutation5 ※ミュート設定らしい
0x7812,     Boot Confirutation6 ※リザーブ機能(リセット値と違う)
0x43BB,     Boot Confirutation7 ※リザーブ機能(リセット値と違う)
0x0B41,     Boot Confirutation8 ※リザーブ機能(リセット値と違う)
0x143C,     Boot Confirutation9 ※リザーブ機能(リセット値と違う)
0x000E,//25  Boot Confirutation10 ※リザーブ機能(リセット値と違う)
0x0000,     Boot Confirutation11 ※リザーブ機能?
0x48D4,     Analog Configuration1 ※リザーブ機能?
0x0000,     Analog Configuration2 ※Clock Divider
0x0200,     Analog Configuration3 ※Clock Divider control
0x80AA,//30  ※以下(0x1E〜0x28)はテスト用レジスタで設定不要らしい
0x0000,
0x0EF7,
0x0600,
0x0000,
0x7000,//35
0x0880,
0x8D83,
0x8000,
0x0000,
0x4400//40
};

どうやらこれだけ設定すれば良いみたいです。これならI2Cさえちゃんと動けばそう大変でもないかな。

あとは変な順番がなければ良いのですが。

それではまたです。

2013/01/01

AitendoのDSPラジオIC

2013年は良い年でありますように。本年もよろしくお願いいたします。

さて、みぞれ混じりの天候の中初詣と挨拶回りが終わりましたので、予定通りハンダ付けに入りました。ものはAitendoのDSPラジオIC基板です。

ICはBK1088というのですか。説明を見ると

●帶域:520-1710KHz(MW)、64-108MHz(FM)、153-279KHz(LW)、2.3-21.85KHz(SW)とありまして、AM,FMだけじゃなくて短波、長波まで対応しているのですね。動かすのが楽しみです。

接続は、前回のラジオLCDテスト回路に追加して以下の通りです。

Radiolcd2_2

とりあえず、FMモノラルで動かしてみようと思いましたので、簡単なものです。

ハンダ付けしたものは以下のとおり。

Dscf1491 バラックにもほどがある状態ですが、動作確認できたらLCDと合わせて綺麗な基板と箱入にする予定ですので今はご勘弁を。

しかしBK1088ってICは、Aitendoのページにあるデータシート見たらレジスタ多いし、初期化ステップなんか書いてないし。サンプルコードもないのかな?いまからソフトに入りますが、結構厄介そうですね。

それではまたです。

2012/12/31

Aitendoのラジオ用LCD(その3)

やっぱり年越しそばまで特にすることもないので、ソフトをタイマー割り込み方に変えました。

ちょっと見てたら簡単に変えられそうだったし。

下が今なおしたソフトです。タイマー1割り込みで、lcdstateの状態でセグメントと位相を判断してLCD制御を行います。

メインからはSet_Num()で表示周波数を、Set_Band()でバンドを設定すれば後は勝手に表示します。

やっつけっぽいコードですが、スピードがいるわけでもないのでこのまま使おうかと思います。

#include "P24FJ64GA004.h"

//config
_CONFIG2(0xF9FC);
_CONFIG1(0x3F7F);

unsigned int coldata[3];
unsigned int lcdstate;

//main loop
int main(void)
{

   unsigned int i,j;

   lcdstate =0;

   //Setup clock
   OSCCON = 0x11C0;  // FRCPLL
   CLKDIV =  0x0030;  // 1MIPS SETTING

   //IO PORT SETTING
AD1PCFG = 0xffff; // Analog input disable
TRISA = 0x000f; // All output (Will be changed)
TRISB = 0x0000; // All output
TRISC = 0x0000; // All output

// INITIALIZE
coldata[0] = 0;coldata[1] = 0;coldata[2] = 0;
Set_Num(1234);    // 4桁で周波数を指定
Set_Band(1);  // バンド指定 0=AM / 1=SW / 2=FM

    // タイマ1の設定 
    PR1 = 300;   
    T1CON = 0b1000000000110000;
    IEC0bits.T1IE = 1; // タイマ1割り込み許可

   //メインループ 周波数・バンド変化

   while(1){
for (i=0;i<=2;i++) {
  for (j=0;j<9999;j++) {
   Set_Num(j);
   Set_Band(i);
   Wait_Time(10);
  }
}
   }
}

// NUMERIC SET 4桁の数字を一気にバッファにセットする

void Set_Num(unsigned int num){
coldata[0] &= 0x0000;coldata[1] &= 0x0001;coldata[2] = 0xe000;
Set_1digit(3,num/1000);
Set_1digit(2,(num%1000)/100);
Set_1digit(1,(num%100)/10);
Set_1digit(0,num%10);

}

// BAND SET SW/AM/FM MHz/KHz/少数点 インジケータをセットする

void Set_Band(unsigned int band){
if (band ==0) { coldata[2] &= 0x1ffe;
     coldata[0] &= 0x0924;
     coldata[0] |= 0x2001;     // AM KHz 小数点以下なし
     coldata[1] &= 0x1ffe;    
}               
if (band ==1) { coldata[2] &= 0x1ffe;
     coldata[0] &= 0x0924;;
     coldata[0] |= 0x8010;     // SW MHz 小数点以下2桁
     coldata[1] |= 0x0001;    
}             
if (band ==2) { coldata[2] &= 0x1ffe;
     coldata[0] &= 0x0924;
     coldata[0] |= 0x0408;     // FM MHz 小数点以下1桁
     coldata[1] |= 0x0001;    
}               
}

// NUMERIC SET 1桁の数字をセットするルーチン

void Set_1digit(unsigned int col,unsigned int num){
unsigned int wk1,wk2,wk3;
wk1 = 0;wk2=0;wk3=0;
switch (num) {           // 0-9す数字に合わせてセグメントデータを設定
  case 0: wk3 =0x07;wk2=0x05;wk1=2;break;
  case 1: wk3 =0x01;wk2=0x01;wk1=0;break;
  case 2: wk3 =0x03;wk2=0x06;wk1=2;break;
  case 3: wk3 =0x03;wk2=0x03;wk1=2;break;
  case 4: wk3 =0x05;wk2=0x03;wk1=0;break;
  case 5: wk3 =0x06;wk2=0x03;wk1=2;break;
  case 6: wk3 =0x06;wk2=0x07;wk1=2;break;
  case 7: wk3 =0x03;wk2=0x01;wk1=0;break;
  case 8: wk3 =0x07;wk2=0x07;wk1=2;break;
  case 9: wk3 =0x07;wk2=0x03;wk1=2;break;
  deafult: break;
}
coldata[0]=coldata[0] | (wk1 << (col*3+1));
coldata[1]=coldata[1] | (wk2 << (col*3+1));
coldata[2]=coldata[2] | (wk3 << (col*3+1));
}

// SEGMENT CONTROL ここでLCDを制御

void __attribute__((interrupt, auto_psv))
   _T1Interrupt(void)
{
unsigned int wk;

wk = coldata[lcdstate/2];

if ((lcdstate%2)==0) {
  PORTB = wk ^ 0xffff;      // オンするセグメントを0Vにする
  PORTA = 0xffff;
  switch (lcdstate/2) {        // Col選択 選択したColだけ1をドライブ(3V)
   case 0 :        // それ以外はフロート(1.5V)
     TRISA = 0xfffe;break;
   case 1 :
     TRISA = 0xfffd;break;
   case 2 :
     TRISA = 0xfeff;break;
   default :break;
  }
}else{
  PORTB = wk;         // オンするセグメントを3Vにする
  PORTA = 0x0000;        // 選択したColを0Vに。それ以外は1.5Vのまま
}
lcdstate++;
if (lcdstate>5) {
  lcdstate =0;
}
   IFS0bits.T1IF = 0;// 割り込みフラグクリア
}

// WAIT LOOP 適当なウェイトルーチン

void Wait_Time(unsigned int t) {
int t0,t1;
for (t0=0;t0<t;t0++) {
  for (t1=0;t1<100;t1++) {
  }
}
}

 ただいま雪国に帰省中です。外は荒れてて出かける気にもならないし、新年もちょっと年始の挨拶回りしたらとくにやることもないです。テレビは面白くないし。ネット環境も遅くていまいち。

 酒飲んで寝てるだけでは体にも心にもよくないので、この正月はDSPラジオ基板の方に手を出そうかと思います。

それではまたです。

Aitendoのラジオ用LCD(その2)

その2です。前回の回路で、とにかく表示だけテストするソフトを組んでみました。

Dscf1481  動作はこんな感じです。

仕様として以下を考慮しています。

 ・周波数4桁表示

 ・AM/SW/FMアイコンの表示

 ・AM時はKHzアイコン、SW/FM時はMHzアイコンの表示

 ・AM時は小数点なし、SW時は小数点2桁、FM時は小数点1桁表示

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

#include "P24FJ64GA004.h"

void Set_Lcd(unsigned int) ;

//config
_CONFIG2(0xF9FC);
_CONFIG1(0x3F7F);

unsigned int coldata[3];

//main loop
int main(void)
{

   unsigned int i,t;

   //Setup clock
   OSCCON = 0x11C0;  // FRCPLL
   CLKDIV =  0x0030;  // 1MIPS SETTING

   //IO PORT SETTING
AD1PCFG = 0xffff; // Analog input disable
TRISA = 0x000f; // All output (Will be changed)
TRISB = 0x0000; // All output
TRISC = 0x0000; // All output

// INITIALIZE
coldata[0] = 0;coldata[1] = 0;coldata[2] = 0;
Set_Num(1234);    // 4桁で周波数を指定
Set_Band(1);  // バンド指定 0=AM / 1=SW / 2=FM

   //Test Loop テストなのでとりあえず適当なループ。後でタイマー割り込みにする。
   while(1){
for (i=0;i<=2;i++) {
  Set_Lcd(i);
}
   }
}

// NUMERIC SET 4桁の数字を一気にバッファにセットする

void Set_Num(unsigned int num){
coldata[0] &= 0xf9db;coldata[1] &= 0x0001;coldata[2] = 0xe000;
Set_1digit(3,num/1000);
Set_1digit(2,(num%1000)/100);
Set_1digit(1,(num%100)/10);
Set_1digit(0,num%10);

}

// BAND SET SW/AM/FM MHz/KHz/少数点 インジケータをセットする

void Set_Band(unsigned int band){
if (band ==0) { coldata[2] &= 0x1ffe;
     coldata[0] &= 0x0924;
     coldata[0] |= 0x2001;     // AM KHz 小数点以下なし
     coldata[1] &= 0x1ffe;    
}               
if (band ==1) { coldata[2] &= 0x1ffe;
     coldata[0] &= 0xfff6;
     coldata[0] |= 0x8010;     // SW MHz 小数点以下2桁
     coldata[1] |= 0x0001;    
}             
if (band ==2) { coldata[2] &= 0x1ffe;
     coldata[0] &= 0x0924;
     coldata[0] |= 0x0408;     // FM MHz 小数点以下1桁
     coldata[1] |= 0x0001;    
}               
}

// NUMERIC SET 1桁の数字をセットするルーチン

void Set_1digit(unsigned int col,unsigned int num){
unsigned int wk1,wk2,wk3;
wk1 = 0;wk2=0;wk3=0;
switch (num) {           // 0-9す数字に合わせてセグメントデータを設定
  case 0: wk3 =0x07;wk2=0x05;wk1=2;break;
  case 1: wk3 =0x01;wk2=0x01;wk1=0;break;
  case 2: wk3 =0x03;wk2=0x06;wk1=2;break;
  case 3: wk3 =0x03;wk2=0x03;wk1=2;break;
  case 4: wk3 =0x05;wk2=0x03;wk1=0;break;
  case 5: wk3 =0x06;wk2=0x03;wk1=2;break;
  case 6: wk3 =0x06;wk2=0x07;wk1=2;break;
  case 7: wk3 =0x03;wk2=0x01;wk1=0;break;
  case 8: wk3 =0x07;wk2=0x07;wk1=2;break;
  case 9: wk3 =0x07;wk2=0x03;wk1=2;break;
  deafult: break;
}
coldata[0]=coldata[0] | (wk1 << (col*3+1));
coldata[1]=coldata[1] | (wk2 << (col*3+1));
coldata[2]=coldata[2] | (wk3 << (col*3+1));
}

// SEGMENT CONTROL ここでLCDを制御

void Set_Lcd(unsigned int seg) {

int i;
unsigned int wk;

wk = coldata[seg];
PORTB = wk ^ 0xffff;      // オンするセグメントを0Vにする
PORTA = 0xffff;
switch (seg) {        // Col選択 選択したColだけ1をドライブ(3V)
  case 0 :        // それ以外はフロート(1.5V)
     TRISA = 0xfffe;break;
  case 1 :
     TRISA = 0xfffd;break;
  case 2 :
     TRISA = 0xfeff;break;
  default :break;
}
Wait_time(100);        // 適当なウェイト 後でタイマー割り込みにする

PORTB = wk;         // オンするセグメントを3Vにする
PORTA = 0x0000;        // 選択したColを0Vに。それ以外は1.5Vのまま

Wait_time(100);        // 適当なウェイト 後でタイマー割り込みにする
}

// WAIT LOOP 適当なウェイトルーチン

void Wait_time(unsigned int t) {
int t0,t1;
for (t0=0;t0<t;t0++) {
  for (t1=0;t1<100;t1++) {
  }
}
}

今回はテストなので本当に表示するだけです。タイマー割り込み型にしないと他になにもできないですね。

実は下にあるAitendoのDSPラジオIC基板を別に買ってあるので、年明けにそれと組み合わせてデジタル表示のマルチバンドDSPラジオにしようと思っています。

Dscf1472

今年もあと2時間ちょっとなので、このへんで。

それではまたです。

Aitdndoのラジオ用LCD

2012年も終わりですね。今年は後半業務多忙で、29日ぎりぎりまで仕事になりましたが、なんとか課題もほぼクリアでき、年越しできるようになりました。

今日は暇が出来たので、今年のハンダ付け納めとして久しぶりに工作してました。

ものは少し前に買ってあったAidtendoのラジオ用LCDです。

Dscf1470 面白そうだなと思って購入していましたが、

さてデータシートにピン定義はありますが、どう動かしたものか。かなり迷いました。

そういえば今まで使ったLCDはIOとしてデータを読み書きするものばかりで、直接制御というのは今回初めてでした。TN液晶は確か電圧を印加する、ただの直流だと劣化するから交流っぽく制御する、と何かで読んだことはありましたが、具体的なところがちょっと。。。

ネットで調べたところ、こちらのページに大変詳しい解説がありようやく分かりました。

ものすごく簡単に言うとCol端子を0、1.5V、3Vの3レベルで振って、Seg端子を1,0制御するのです。

このページの解説はAVR用ですが、やることはPICでも同じだな、と思いまして、以前使ったマルツのPIC24Fボードを取り出して配線しました。

回路図はこんな感じ。PA0,1,8でCOL0-2を制御します。(1,0,Hizの組み合わせで、0V,1.5V、3Vを作ります。分圧抵抗はHiZ=Input設定のときに1.5Vとするためです。)

Seg端子はPB0-15で制御するようにしました。Seg16,17は空いています。これは、

LCDのピン定義から、ここにアサインされているセルは表示しなくてもいいかな、と考えたためrです。その代わり、Seg18は使っています。これはここにアサインされているSWアイコンを表示したかったからです。

Radiolcd

長くなりそうなので、この次の記事でソフトを解説します。

それではまたです。

2012/10/21

Pic24Fマイコンボード その6 【7セグLED】

自分だけの勝手ですが、最近は毎週末ちょっとした何か作ってアップしようと思ってやっています。マルツのボードはその何かをちょっと動かすのに手軽なので先日から使っています。

(PICマイコン動かすための設定等が誰かの参考になれば幸いかな、程度の思いはあります。)

さて、今回は7セグメントLEDを動かしてみました。

LEDは秋月の↓のものです。10個150円とかなりお安くなっています。

http://akizukidenshi.com/catalog/g/gI-01492/

LEDはこれでなくても良いのですが、PICで動かすにはアノードコモンが良いです。

理由はアノードコモンはPICのIOでLレベルでの引き込みで制御することができること、そしてIOの電流がLレベルの方が大きくとれることからです。(PICに限らず、Lの方が大きな電流を引けるマイコンが多いと思います。)

回路図は下の通りです。電池はボタン電池をやめて単三電池2本としています。

Pic24fj

ソフトは、前回のLEDの物にちょっと手を加えただけです。

#include "P24FJ64GA004.h"

//config
_CONFIG2(0xF9FC);
_CONFIG1(0x3F7F);

//main loop
int main(void)
{

static unsigned char fontdata[] = {
0b00000011,  // 0
0b10011111,  // 1
0b00100101,  // 2
0b00001101,  // 3
0b10011001,  // 4
0b01001001,  // 5
0b01000001,  // 6
0b00011111,  // 7
0b00000001,  // 8
0b00001001,  // 9
0b01111111,  // 10
0b10111111,  // 11
0b11011111,  // 12
0b11101111,  // 13
0b11110111,  // 14
0b11111011,  // 15
0b11111110,  // 16
};

   unsigned int i,t;

   //Setup clock
   OSCCON = 0x11C0;  // FRCPLL
   CLKDIV =  0x0030;  // 1MIPS SETTING

   //IO PORT SETTING

AD1PCFG = 0xffff; // Analog input disable

TRISA = 0x0000; // All output
TRISB = 0x0000; // All output
TRISC = 0x0000; // All output

   //Loop
t=25;

   while(1){
for (i=0;i<=16;i++) {
  Set_Port(fontdata[i]);
  Wait_time(t);
}
t *=2;
   }
}

// IO PORT CONTROL

void Set_Port(unsigned char val) {
PORTCbits.RC1 = val & 0x0001;
PORTCbits.RC0 = (val & 0x0002)>>1;
PORTBbits.RB3 = (val & 0x0004)>>2;
PORTBbits.RB2 = (val & 0x0008)>>3;
PORTBbits.RB1 = (val & 0x0010)>>4;
PORTBbits.RB0 = (val & 0x0020)>>5;
PORTAbits.RA1 = (val & 0x0040)>>6;
PORTAbits.RA0 = (val & 0x0080)>>7;
}

// WAIT LOOP
void Wait_time(unsigned int t) {
int t0,t1;
for (t0=0;t0<t;t0++) {
  for (t1=0;t1<10000;t1++) {
  }
}
}

動作は下の動画でご確認ください。

次は複数LEDのダイナミック動作でもやってみようかな。

それではまたです。

2012/10/16

Pic24Fマイコンボード その5 【回路図】

マルツのPIC24FJマイコンボードですが、回路図ないのかなあ、と思って検索したら見つけました
http://hccweb1.bai.ne.jp/~hce26601/bbpic24-new/bbpic24-connection-MPIC24FJ64GA004.pdf

「有限会社イワサキ」さんということろが開発元らしいです。
http://hccweb1.bai.ne.jp/u-iwasaki/

ボード自体の回路図は回路図として、このボードの回路シンボルを

作ってみたので、先日のLED回路を回路図にしてみました。

Pic24fj


見ての通りほんとに電池とLEDを繋いだだけです。

さて、CPUでLEDを直接駆動していますが、大丈夫でしょうか?

電源電圧3.3V、LEDのVf(順方向電圧)が2V(動作中にテスタで測定)です。
1KΩの抵抗を使っていますので、LEDの駆動電流は(3.3-2)/1000=1.3mAです。

CPUのデータシートを見ると、

http://ww1.microchip.com/downloads/en/devicedoc/39881c.pdf

231ページによるとIOポートのIOL(LOWレベルでの引き込み電流)は
8.5mAということですので1.3mAなら十分引き込めます。

(しかしジャンク箱にあった小型LEDですが1.3mA程度の電流で

結構光るものです。)

 
 

電池はどうかな、と考えると、8個のLEDが同時に光るとして
1.3x8=10.4mA。CR2032が定常3mA,パルス15mA。。。。

パルスというにはちょっと長めに光っているので、結構だめそうです。

先日の動画のようにあるていどは動きますが、実はCR2032で

試していて1時間程度しか持ちませんでした。

短時間のデモならともかく、LED応用で少々まともに使うならやっぱり

もうちょっと容量の大きい電池が必要になりますね。

バックライトなしのLCDならどうかなあ?そのうち試してみます。

それではまたです。

2012/10/15

Pic24Fマイコンボード その4 【セットアップ】

順番が逆になりましたが、Pic24Fマイコンボードを使うために必要なハード、ソフトを整理いたします。

【ハード】

1.PIC24FJマイコンボード : マルツ電波で買えます。

簡単に買えるPIC24シリーズのボードとしては一番小型でシンプルだと思っています。

Dscf1404

http://www.marutsu.co.jp/shohin_82198/

2.Pickit3 :やっぱり秋月電子が一番安いかなあ。

Dscf1448

http://akizukidenshi.com/catalog/g/gM-03608/

Pickit3ってなに?という方は ここをクリック してください。

3.ボタン電池と電池ホルダ:Pickit3を買うなら一緒に秋月で買うと良いと思います。

http://akizukidenshi.com/catalog/g/gB-00601/

http://akizukidenshi.com/catalog/g/gP-01443/

【ソフト】

1.MPLAB IDEをこちらからダウンロード(ユーザ登録がいりますが無料です。)

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469

2.CコンパイラC30をこちらから別途ダウンロード

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en535364

必要なものは以上です。

MPLAB IDEのインストール、および C30コンパイラの登録については、

いろんなサイトで解説していますので、上の行のリンク(google検索)を見てくださいね。

それではまたです。

2012/10/14

pic24fマイコンボード その3

マルツのPIC24Fマイコンボードを小型のRCカーに乗せてLEDメッセージ表示実験をやってみました。

まずは動きをどうぞ。

回路はその2の記事と同じです。

動画にあるように、前に買ってあったおもちゃのRCカーに乗っけて、ソフトだけ下のように

変えました。

#include "P24FJ64GA004.h"

//config
_CONFIG2(0xF9FC);
_CONFIG1(0x3F7F);

//main loop
int main(void)
{

static unsigned char textdata[] = {
0b00000000,0b00000000,0b01111111,0b00001000,0b01111111,
0b00000000,0b00000000,0b01111111,0b01001001,0b01001001,
0b00000000,0b01111111,0b01000000,0b01000000,0b00000000,
0b00000000,0b01111111,0b01000000,0b01000000,0b00000000,
0b00000000,0b00111110,0b01000001,0b00111110,0b00000000,
0b00000000
};

   unsigned int i;

   //Setup clock
   OSCCON = 0x11C0;  // FRCPLL
   CLKDIV =  0x0030;  // 1MIPS SETTING

   //IO PORT SETTING

AD1PCFG = 0xffff; // Analog input disable

TRISA = 0x0000; // All output
TRISB = 0x0000; // All output
TRISC = 0x0000; // All output

   //Loop
   while(1){
for (i=0;i<=25;i++) {
  Set_Port(0xff- textdata[i]);
  Wait_time(10);
}
   }
}

// IO PORT CONTROL

void Set_Port(unsigned char val) {
PORTAbits.RA0 = val & 0x0001;
PORTAbits.RA1 = (val & 0x0002)>>1;
PORTBbits.RB0 = (val & 0x0004)>>2;
PORTBbits.RB1 = (val & 0x0008)>>3;
PORTBbits.RB2 = (val & 0x0010)>>4;
PORTBbits.RB3 = (val & 0x0020)>>5;
PORTCbits.RC0 = (val & 0x0040)>>6;
PORTCbits.RC1 = (val & 0x0080)>>7;
}

// WAIT LOOP
void Wait_time(unsigned int t) {
int t0,t1;
for (t0=0;t0<t;t0++) {
  for (t1=0;t1<10000;t1++) {
  }
}
}

配列TEXTDATAにビット情報で文字列を入れてそれを繰り返し出力します。

”HELLO”と出しているのですが、動画ではわかりにくいかも。。。。。

それでは今回はここまでです。

2012/10/13

pic24fマイコンボード その2

マルツのPIC24Fマイコンボードで基本のio動作を動かしました。

まずは動きからどうぞ。

ハードは下の写真のように8個の小型ledを繋ぎました。

Dscf1436_3 ちょっと分かりにくいですが、

ボード左側のピンヘッダCN1AにPORTA,B,Cがでていますので、そこにVCCから

1Kの抵抗を介したLEDを8個つないでいます。

このマイコンボードのCN1AのPORTの配置は以下の通りですので、

それぞれにLEDを繋いでいます。

2pin:RA0 3pin:RA1 4pin:RB0 5pin:RB1 6pin:RB2 7pin:RB3

8pin:RC0 9pin:RC1

このような並びなっていますので、ソフトではRA-RCの各ポートを制御することになります。 

サンプルソフトは以下の通りです。今回はAD1PCFGの設定でちょっとはまりました。

これを設定しないといくつかのIOがADC入力になっており動きません。

#include "P24FJ64GA004.h"

//config
_CONFIG2(0xF9FC);
_CONFIG1(0x3F7F);

//main loop
int main(void)
{
   unsigned int i;

   //Setup clock
   OSCCON = 0x11C0;  // FRCPLL
   CLKDIV =  0x0030;  // 1MIPS SETTING

   //IO PORT SETTING

AD1PCFG = 0xffff; // Analog input disable  //
これがないといくつかのIOが動きません

TRISA = 0x0000; // All output
TRISB = 0x0000; // All output
TRISC = 0x0000; // All output

   //Loop
   while(1){
for (i=0;i<8;i++) {
  Set_Port(0xff - (1<<i));
  Wait_time(40);
}
for (i=0;i<8;i++) {
  Set_Port(0xff - (0x80 >> i));
  Wait_time(40);
}
   }
}

// IO PORT CONTROL

void Set_Port(unsigned int val) {    //ここで8ビットデータを各ポートに振り分けます。
PORTAbits.RA0 = val & 0x0001;
PORTAbits.RA1 = (val & 0x0002)>>1;
PORTBbits.RB0 = (val & 0x0004)>>2;
PORTBbits.RB1 = (val & 0x0008)>>3;
PORTBbits.RB2 = (val & 0x0010)>>4;
PORTBbits.RB3 = (val & 0x0020)>>5;
PORTCbits.RC0 = (val & 0x0040)>>6;
PORTCbits.RC1 = (val & 0x0080)>>7;
}

// WAIT LOOP
void Wait_time(unsigned int t) {
int t0,t1;
for (t0=0;t0<t;t0++) {
  for (t1=0;t1<10000;t1++) {
  }
}
}

簡単なものですが、初めてのマイコンボードでLEDが動くのを見るのは

結構楽しみなものです。

とりあえず今回はここまでです。

2012/10/08

pic24fマイコンボード

最近あまり電子工作っぽくない投稿ばかりだなあ、久しぶりにマイコン関係をやろうかな、
どうせやるなら、色々なネタに使いまわせるのがいいな。
と思いまして、マルツでPIC24Fマイコンボードを買ってきました。

http://www.marutsu.co.jp/shohin_82198/

PICは16,18系は結構持っているのですが、PIC24Fにした理由は以下の通りです。

 @3.3Vでも動く。(PIC16,PIC18は5V)つまりボタン電池で動くはず。
 APIC16,PIC18に比べてテーブルデータの扱いが容易。
 Bやっぱり16BITだから性能もよいでしょう。

Dscf1404箱の中身はこんな感じです。

本体、ピンヘッダ、isp用6ピンピンヘッダ、マニュアルが付いています。

ピンヘッダをはんだ付けします。

Dscf1405


ここでボタン電池でこのボードがどのくらい動かせるのかを計算してみました。

WikipediaによるとCR2032の電流容量は225mAH、最大放流電流3mAということです。

http://ja.wikipedia.org/wiki/%E3%82%B3%E3%82%A4%E3%83%B3%E5%BD%A2%E3%83%AA%E3%83%81%E3%82%A6%E3%83%A0%E9%9B%BB%E6%B1%A0

PIC24F64GA004のデータシート(225P Operating Current)よると、マイコンの消費電流は、1MIPS動作であればMAX1.2mA。

http://ww1.microchip.com/downloads/en/devicedoc/39881c.pdf

つまり、225/1.2=187.5であり、180時間以上もつということになります。連続でも一週間以上です。

マイコン自体は16MIPSまでの速度で動くのですが、その場合は消費電流も20mAとなりCR2032ではまかなえません。ホビー用途ですしそこまで早い必要はないから、1MIPS設定で使うことといたします。

ということで、まずはボタン電池を繋いでみます。ピンの11ピンに+、12ピンに‐を繋いだだけです。

Dscf1406

次にpickit3を繋ぎます。

Dscf1407_2


久しぶりなんでちょっと手間取りましたが、まずは無事動きました。

とりあえず今回はここまでです。

2012/01/09

ミニソーラーカー その5

 久しぶりに回路図を引いてみました。小型のPICマイコンとトランジスタでモータを制御する部分です。

Motors

 今回はとにかく部品を減らすようにしています。

 

 

 トランジスタ部分はHブリッジ回路の半分です。反対側の電圧をVCC(3V)の1/2にして、下の図のようにPNP、NPNのON/OFF状態によって電流の方向が逆転する。。。。という構想です。

Genri

 2SCトランジスタの前の分圧抵抗は、ON電圧を調整しています。Vbeが0.7Vとして、PIC出力が2.8V(2.8*1k/(1;+2.7k)=0.75V)程度になるとONします。

これで上の2SAのON電圧(VCC-Vbe=3.3 - 0.7 = 2.6V)より上で下の2SCがONしますので、これによって2つのトランジスタの同時ONを防ぐ。。。という構想です。

 

 部品点数を極力減らすためにこのような回路にしてみましたが、あまり見たことがないし、うまくいくかなあ。。。

 もちろん部品は全て面実装品を使います。すぐ実験したいところですが、手持ち部品では足りないので、実験と作成は物が手に入ってからとなります。

2010/10/21

専用IC Si4702によるFMラジオ(その2)

 QFNパッケージのGNDPADのはんだ付け方法をまだ検討中です。

 

 その後下図のような2案を考えてみました。

Qfn2

 案2は案1の改良版で、基板に穴を空ける必要は有りますが、ジャンパ線は引き出さなくてもよいです。

 案3は昔eジスpenという物をネットで見たのを思い出して書いてみました。eジスpenとは基板にパターンをペン書きするとそのパターンがそのまま導通して基板パターンのようになる、というものです。なお、ここにeジスpenの説明があります

続きを読む "専用IC Si4702によるFMラジオ(その2)" »

2010/10/18

専用IC Si4702によるFMラジオ

 先月AitendoからLCDを購入した際に、ついでに1Chip FMラジオICのSi4702というのも一緒に購入してありました。

 昨日ちょっと部品箱を整理していてそれについても思い出しましたところで、せっかく買ったのだからできるなら動かしてみようと思います。
 

 物と添付データシートの写真は下の通りです。

Dscn1256  Dscn1257

   このICはシリアルI/Fで受信周波数等を制御するようになっています。その制御を手持ちの8ピンPICマイコン(PIC12F683)でやることにして、とりあえず回路図を引いてみました。

Si4702radio

続きを読む "専用IC Si4702によるFMラジオ" »

2010/09/21

100円スピーカのオーディオアンプ化&カラー表示(その4)

 2013/4/2 CONFIG情報を追加しました。

 9/21 PM 23:45 価格情報を追加しました。

====================================

 一通りできましたので回路図とアセンブラソースを公開いたします。

 まずは回路図です。

100e_amp_lcd2
 
 前回の物とほとんど同じですが、モード切替え用のCDSセンサとLCD周りが修正になっています。

続きを読む "100円スピーカのオーディオアンプ化&カラー表示(その4)" »

2010/09/18

100円スピーカのオーディオアンプ化&カラー表示(その3)

 PICのADコンバータを動かして、音の大きさに表示を連動させてみました。

まずは動作を動画でお見せします。

続きを読む "100円スピーカのオーディオアンプ化&カラー表示(その3)" »

100円スピーカのオーディオアンプ化&カラー表示(その2)

 基板の作成と、カラ―LCDのテスト表示を行いました。

 
 下が作成した回路基板の写真です。秋月電子の28ピンSOPピッチ変換基板をベースにしており、左が表側(PICマイコン搭載)、右が裏側(オーディオアンプ搭載)です。
Dscn1066  Dscn1065

続きを読む "100円スピーカのオーディオアンプ化&カラー表示(その2)" »

2010/09/16

100円スピーカのオーディオアンプ化&カラー表示(その1)

 カラーLCDで再度トライを開始しました。

 
 新たにもってきたカラーLCDは以下の物です。またまたAitendoのLCDモジュール(128×128)[NOKIA3300-LCD]というものです。 

Dscn1061  Dscn1062

続きを読む "100円スピーカのオーディオアンプ化&カラー表示(その1)" »

2010/09/15

100円スピーカのオーディオアンプ化&見える化(その3)

 PICマイコンのADコンバータを動かして、実際に音声波形をLCDに表示させてみました。

 100円スピーカ内に組み込んだところが下の写真です。

 ※回路図はこちらです。

Dscn1057  Dscn1056

 基板と電池は問題なく収まりましたが、2種類のケーブル(LCD用途PICプログラム用)でちょっと苦労しました。普通のすだれケーブルを切って使ったのですが、こういう用途にはもっと細いものをもってきたほうがよさそうです。

続きを読む "100円スピーカのオーディオアンプ化&見える化(その3)" »

2010/09/14

100円スピーカのオーディオアンプ化&見える化(その2)

 LCDをテスト動作させてみました。

 

 左下の写真がPICとLCDを配線した基板、その右がテストパターンを表示したLCDです。小さいLCDですが表示は結構見やすいと思います。

Dscn1046  Dscn1049

 今回テスト表示に使ったプログラムのソースをご参考に開示いたします。

「AD-12864-SPI_test.asm.asm」をダウンロード

(※個人利用のご参考用に留めてください。何か問題が生じても対応は致しかねます。)

 

 LCDへの書き込みルーチンはスピード重視でべたに書いたためコードの効率は良くないです。シリアルI/Fですので少しでも早いほうがよいかと思ってこうしていますが、ちゃんとビットごとのループにした方が良かったかもしれません。
  
 この次はPICのADコンバータを動かして、入力信号と表示を連動させてみようと思います。

 

簡単ですが今回は以上です。

 

にほんブログ村 その他趣味ブログ 電子  工  作へ
にほんブログ村 ←記事が面白かったらクリックしてやってください。

2010/09/13

100円スピーカのオーディオアンプ化&見える化

 あの楽器ミニが一段落しましたので、またラジオ関係の物を作ろうと思います。

ゲルマラジオ等に繋ぐ簡単なオーディオアンプがあるとちょっと良いかな、と以前から考えておりましたので、この機会に作ってみることにしました。

 ただし、単なるアンプ機能だけでは面白くないので、LCDとマイコンを付けて何かが見えるようにしてみます。

「何か」はマイコンソフト次第で色々できそうです。一案が音声波形です。

 カーステレオ等のオーディオ機器で周波数ごとの強弱を棒グラフで表示するものはよく見かけますが、波形が見えるものは見た覚えがありませんので、できたらちょっと面白いかな、と考えています。(面白くなかったらすみませんcoldsweats01。)

 それ以外では何かキャラクタを表示して、音の大きさに合わせてくちパクでもさせようかと思います。

 今回のベースにしたのが、左下の写真の100円ミニスピーカ、LCDは右下の写真の物です。
Dscn1038  Dscn1045

続きを読む "100円スピーカのオーディオアンプ化&見える化" »

2010/09/11

小型有機ELパネル(OLED)の動作テスト

 Aitendo社から小型有機ELパネル、OLED[UG-2864GSWBG01]というのを購入しましたので、動作させてみました。

※以前記事に書いた100円OLEDではありません。あれとは別に購入したものです。

 

  今回動かしたのは下の写真の物です。128×64モノクロ、0.96"ということです。

Dscn1030

続きを読む "小型有機ELパネル(OLED)の動作テスト" »

2010/09/07

あの楽器(カラー版) その12

 一応完成ということで、ソフトの作りと図形のデータ構造を簡単にご説明いたします。

  
 下の図が概略フローです。
Exp1  Exp2

  今回のソフトは図のようにメインループとインターバルタイマ割込みの2つで構成されています。
 
 
 メインループは画像表示に専念し、タイマ割込みでは演奏とセンサスキャン(手動時)に専念する作りになっています。

 

 以前作ったキャラクタLCD版を参考にしていますが、メインと割込みの分担を以前の物よりきれいにしましたので、すっきりした構造になったと思います。(以前の物はセンサスキャンをメインに置いていたので、モードによってメインの動作が変わってしまうのですが、今回の物はそういうこともなくなりました。)

続きを読む "あの楽器(カラー版) その12" »

2010/09/05

あの楽器(カラー版) その11

 補足説明のため、動画では分かりにくいところを何枚か写真で撮りました。

 まず全体の大きさがわかる写真です。

Dscn1000 サイズは長さ210mm、幅51mm、高さ10mmで、取っ手の部分を含めると開いた携帯に近い大きさです。 

 

 

続きを読む " あの楽器(カラー版) その11" »

2010/09/04

あの楽器(カラー版) その10

 ようやく形になりましたので、動画を公開いたしました。よろしければ以下をご覧ください。

 順番が後になりますが、ソフトやケース加工についてこれ以後も記事にしていきたいと思います。

続きを読む "あの楽器(カラー版) その10" »

2010/09/02

あの楽器(カラー版) その9

 昨日に引き続いて、センサとLCDの取り付けを行いました。

 

 下の写真がリフレクティブセンサ1オクターブ分13個とLCD2枚をはんだ付けしたところです。

Dscn0952

続きを読む "あの楽器(カラー版) その9" »

2010/09/01

あの楽器(カラー版) その8

 基板ができましたのではんだ付けを行いました。

 
 下の写真がまずはPICマイコンと主要部品をはんだ付けしたところです。

Dscn0939

続きを読む "あの楽器(カラー版) その8" »

2010/08/30

あの楽器(カラー版) その7

 昨日戻りましたので、プリント基板を作りました。

 
 下の写真が感光基板自作用の機材一式です。

Dscn0920_2

感光基板、焼き付け用ホルダ、紫外線灯、現像液、エッチング液、あとは100円ショップ製品の大小トレー、ロート、ガラス瓶です。

 

 余談ですが、自転車で100円ショップにトレーを買いに行った帰りにパンクしてえらい目に会いましたcoldsweats01

続きを読む "あの楽器(カラー版) その7" »

2010/08/26

あの楽器(カラー版) その6

 サウンド生成用PICファームのソースを少し整理しましたのでご参考に公開いたします。
 

 回路図は先日もアップしましたが、アンプを変えてサウンド部だけにしましたので再度アップいたします。

Sound_gen_cir_2 

 今回はターゲット回路内に9V電源があるのでLM386を使いましたが、他の用途で使う場合はオーディオアンプは変えたほうがよいかもしれません。

 

続きを読む "あの楽器(カラー版) その6" »

2010/08/25

あの楽器(カラー版) その5

 その後サウンド機能の方も大体動きましたので、実装の方を真面目に検討してみました。
 (サウンド用のファームもいずれ整理して公開します。)

 
 やっぱりユニバーサル基板とジャンパではとても無理で、基板を作る必要があります。

 

 回路量的にはネットプリント基板屋さんのP板.comあたりに2層基板で出せばすぐできそうです。試しにWEBの自動見積もりをかけたら製造費用が2〜3万円、製造日数が3〜5日ということです。
 

 個人発注でまともなプリント基板が数万円&数日でできるのはかなり驚きですが、さすがにそこまでお金を出すつもりはありません。

 サンハヤトの感光基板で一生懸命作ることにして、それでできるように配置案と回路見直しを行いました。さっくりした基板の取り付けと配置案が下の図です。

Pcb

続きを読む "あの楽器(カラー版) その5" »

2010/08/23

あの楽器(カラー版) その4

 LCDに続いて、サウンド系のデバッグ環境を整えました。

 
 
 現状のデバッグ環境の回路図は以下の通り、枠線内が今回追加したサウンド機能部分です。

Lcdsound_test

  これで、センサ系とメインCPUのメモリサイズを除けばだいたい予定の実機環境と同じことができます。

続きを読む "あの楽器(カラー版) その4" »

2010/08/22

あの楽器(カラー版) その3

 秋葉原でカラ―LCD他の部品を買ってきました。LCDは下の写真の物です。

Dscn0901

 128x160ピクセル、16bppカラーの表示ができます。これを2枚使ってあの楽器風の細長いディスプレイにする予定です。

続きを読む "あの楽器(カラー版) その3" »

2010/08/19

あの楽器(カラー版) その2

前回の構成図に基づいて回路を引いてみました。

(見えづらいのでGIFファイルも置いておきます。「ANO_MID.gif」をダウンロード

Ano_mid_3

 液晶の大きさの関係で、基板がMini版より大きく作れます。その分ある程度の回路追加ができるようになりました。

 その分でMini版を作ったときの反省点と、ニコニコ動画等で頂いた指摘事項にできるだけ対応するようにしています。以下補足説明を箇条書きでご説明します。

続きを読む "あの楽器(カラー版) その2" »

2010/08/18

あの楽器(カラー版) その1

 先日作ったあの楽器Miniがまあまあうまく動きましたので、欲を出してカラ―のミッドレンジ版を検討中です。
 

 正直どこまでできるか分かりません。途中でやめちゃうかもしれませんcoldsweats01。しかしやったことまでは記事にしていきたいと思います。

  
 とりあえず入手できそうなカラ―液晶と使えそうなPICマイコンから現状考えている構成は以下のようなものです。

Ano_mdl

続きを読む "あの楽器(カラー版) その1" »

2010/08/13

「あの楽器(ミニ)」を作ってみました。 (その3)

    ・その1(回路とセンサについて)はこちら

    ・その2(音量向上と外形について)はこちら

 

 お盆の用事と来客対応が終わりまして、ちょっと時間ができましたので、あの楽器(ミニ)のソフトについて整理してみました。

  
 まず、キャラクタLCDでグラフィックもどきを表示している方式についてです。以下の図のようにしています。

Soft_1  このLCDは、1キャラクタ5x8ピクセルで構成されており、キャラクタコード0x20〜0xFFには固定データが書き込まれています。

 

 0x00〜0x07の8個だけはユーザ定義キャラクタとなっており、CGRAM領域にビットパターンを書き込むことで自由なキャラクタを作ることができます。

 

 この8個のキャラクタを図のように4桁x2行で並べることで横4x5=20、縦8x2=16ピクセルのミニグラフィックエリアにしています。こうしておいてCGRAMに円や回転する三角のパターンを書き込むことであの楽器の表示パターンを真似します。

 また、この4桁x2行のセットを音程に合わせて横に移動することで、LCD全域に表示パターンが移動するようになっています。(このため一度に表示できる図形は一つとなっています。)

続きを読む "「あの楽器(ミニ)」を作ってみました。 (その3)" »

2010/08/10

「あの楽器(ミニ)」を作ってみました。 (その2)

     ・その1(回路とセンサについて)はこちら

     ・その3(ソフト方式について)はこちら

 

 前回のあの楽器動画をニコニコ動画にも置いておいたところ、「音が小さい」というコメントがたくさんついておりました。。。私はヘッドセットで聞いていたためかそこまで小さいとは思っていなかったのですが、言われてみてスピーカで聞いてみると確かにかなり小さいですcoldsweats02
  
 
 動画編集で音量を上げるとノイズも大きくなると思い、なんとか元音量を多少大きくしてみました。

 ついでにもう一つの曲と画像を追加したものを「その2」としてアップしました。よろしければご覧ください。

続きを読む "「あの楽器(ミニ)」を作ってみました。 (その2)" »

2010/08/08

「あの楽器(ミニ)」を作ってみました。 (その1)

     ・その2(音量向上と外形について)はこちら

     ・その3(ソフト方式について)はこちら

 

 今回でこのBlogの記事が100回目になります。記念に何か変わった物を作ろうと思いまして、前から少し気になっていたニコニコ動画等で話題の「あの楽器」に挑戦してみました。

 

   「あの楽器」についてはこちらをご覧ください。

  各種動画を見ると、既に色々な方がかなり高度なものを作られております。実寸(?)の物は実機(?)に近いものまで動いているようです。そこで今回はキャラクタ液晶とPICマイコンでささやかなミニ版を作ってみることにしました。

 
 
 製作過程と動作は以下の動画をご覧ください。

続きを読む "「あの楽器(ミニ)」を作ってみました。 (その1)" »

2010/07/29

同調回路のQの測定(その20:ケースに入れました)

 前回に続いて、ケースへの格納をおこないました。

 
 下の写真の状態からスタートです。バラックでデバッグしているうちにかなり混沌状態になっております。
Dscn0771

続きを読む "同調回路のQの測定(その20:ケースに入れました)" »

2010/07/28

同調回路のQの測定(その19:ようやく全体動作)

 今回は、整流部の動作確認と調整をいたしました。これでようやく全機能が動いたことになります。

 
 今回動かしたアナログ部の最新回路図は以下の通りです。

Qmeter8_2

続きを読む "同調回路のQの測定(その19:ようやく全体動作)" »

2010/07/27

同調回路のQの測定(その18:アナログ部とデジタル部の接続)

 夕方からアナログ部とデジタル部の接続とソフト動作確認を行いました。

 
 
 まずは発振部の制御と周波数カウント部の動作を行っています。よろしければ下の動画をご覧ください。

 最近ムービーメーカの使い方が少しわかってきたので、つい必要がなくても動画に走ってしまいますcoldsweats01

 正直今回のはロボットみたいな面白みがないですし、撮影時のガサゴソ音が耳ざわりだったので音声カットして代りに適当なBGMを入れてみました。

続きを読む "同調回路のQの測定(その18:アナログ部とデジタル部の接続)" »

2010/07/21

同調回路のQの測定(その15:デジタル部作成)

 ケースに続いてデジタル部の作成を行っています。今回作ったのは下図の点線部分です。

Qmeter6_3

 内容は@DAコンバータの交換、A操作スイッチの取り付け、BUSBポートの作成、の3点です。

以下それぞれの作成状況をご説明いたします。
 

続きを読む "同調回路のQの測定(その15:デジタル部作成)" »

2010/07/01

100円ショップ ミニミニスピーカのオルゴール化 (その4:ちょっと解説)

 オシロの発送連絡がありましたので、多分明日には到着すると思います。楽しみですwink

   
 今回は昨日に引き続いて、簡単ですがPICによるオルゴールの1作目と2作目の違いについての説明図を用意しました。
Explain

 一作目との違いは、楽器の波形を一つ一つPWMで作りだすようにしていることです。波形は0〜15の数値で強さを表したデータを1波形16バイトのテーブルで用意しておき、それを周期に合わせて取り出すようにしました。それ以外の制御は一作目と同じです。

 お試し用にHEXファイルも開示いたします。

「PIC12F675MUSIC.HEX」をダウンロード

 和音もパートごとに波形を生成しておいて、最後に両方のPWMのパルス幅を加算すればできるはずなのですが、今回は処理が間に合わなかったので断念してしまいました。

 PWM用のハードのあるチップ(12F683等)だったらソフトの負荷が減るので和音もできたな、と思っています。実際にWEBをみると683で和音を出されている方もおられます。

続きを読む "100円ショップ ミニミニスピーカのオルゴール化 (その4:ちょっと解説)" »

2010/06/30

100円ショップ ミニミニスピーカのオルゴール化 (その3:音質改善)

 昨日東京から戻りました。

秋葉原でも迷ったのですが、結局戻ってからオシロスコープをAmazonで購入してしまいました。物はここにあるDS5022です→ http://www.atex.pos.to/new_page_23.htm (メーカサイトです。)
 
  このスペックにしては3万円台前半(Amazon価格)と安いし、口コミでの評価もなかなかよいようです。これでQ測定の方も進めるようになりますし、到着が待ち遠しいところです。

  
 秋葉原で部品を買い込んできた中にPIC12Fの高速(20MHz)バージョンがありましたので、オシロ到着待ちの間にオルゴールの音質向上をやってみました。

 
 結果は以下の通りです。

※前作についてはこちら↓をご覧ください。

http://crystal-radio.blogzine.jp/blog/2010/06/post_6e69.html

続きを読む "100円ショップ ミニミニスピーカのオルゴール化 (その3:音質改善)" »

2010/06/25

100円ショップ ミニミニスピーカのオルゴール化 (その2)

今日から上京予定でしたが家の都合で一日遅らせましたので、空いた時間で電子オルゴールのソフトについての基本フローを整理しました。

 下図をご覧ください。

Explain2_2 Explain2_3 

続きを読む "100円ショップ ミニミニスピーカのオルゴール化 (その2)" »

2010/06/24

100円ショップ ミニミニスピーカのオルゴール化

 すみませんが、またQの測定の方からちょっと横道です。今週末上京する用事ができまして、ついでに秋葉原にも寄ってきます。ケース(気が早いcoldsweats01?)、コイル他、改善のための部品を物色してくるつもりですので、その後再開予定です。

 
 その間に、ときどきは100円ショップのことも思い出そうということで、以前ラジオを作ったミニミニスピーカとPICマイコンでオルゴールを作ってみました。

 
 動作は以下の動画をご覧ください。

 2和音で3曲入っています。これで今回使ったマイコンのメモリ(1KB)一杯です。演奏開始と曲の切り替えは光(CDS)センサで行うようにしました。

 一応曲ごとに音色も変わるようにしたのですが、どうも違いが分かりにくいですね。。。。

続きを読む "100円ショップ ミニミニスピーカのオルゴール化" »

2010/06/18

同調回路のQの測定 その9

 バーニヤダイヤルの到着が明日になるようですので、デジタル部の続きを作成しました。
 
 今回作りこんだ部分は下図の周波数制御用のDAコンバータ部分です。

Qmeter3_0  
 事前の発振回路の測定で、4.5〜8.5Vの電圧を与えれば900KHz〜1.3MHz位の範囲で周波数を振れることを確認しましたので、その範囲をPICから制御できることを目標としています。

続きを読む "同調回路のQの測定 その9" »

2010/06/17

同調回路のQの測定 その8

 Qの測定回路の方はただいま部品待ちです。結局エアーバリコンとバーニヤダイヤルをネット注文してしまいました。

 ポリバリコンにサブを付けようかとも考えたのですが、どうもいまいちになりそうですし。
それにバーニヤダイヤルは見栄えがしますから。それらが届いたら再開しようと思います。

 
 部品待ちの間にデジタル系のファームを進めることにして、今回はLCD表示の続きをやってみました。
 
 今回作った機能は以下の通りです。

 @8x8のフォントデータによるテキスト表示(大文字アルファベット、数字、記号のみ対応)
 A共振特性をグラフ表示するため最小限のグラフィック機能(垂直線表示のみ))

 
 できたものが下の写真です。左がフォントデータテスト表示、右がグラフィック機能テストパターンとテキストの混載表示です。

Lcd1  Lcd2

こういう表示物は結果が一見して分かりますので確認も楽ですwink

 

今回はハードをいじっていませんので簡単ですが、以上です。

 

にほんブログ村 その他趣味ブログ 電子  工  作へ
にほんブログ村 ←記事が面白かったらクリックしてやってください。

2010/06/11

同調回路のQの測定 その5

 発振回路の改善用に手配した部品の到着は明日になるようです。そのため、今日は昨日の構成の見直しと、表示系の作成を行いました。

 

 見直した構成図は以下の通りです。以下2点が変更になっています。

   @発振出力のレベルも測定できるようにした。

   ALCDとDACのデータラインを共用にした。
     (良く考えたら分ける理由がなく、IOポートの無駄でしかないので直しました。)

Qmeter2  

 左上の薄緑の領域が今回作った表示系の部分です。

続きを読む "同調回路のQの測定 その5" »

2010/06/10

同調回路のQの測定 その4

 前回記事へのコメントによるご指摘で、発信回路のバッファ出力インピーダンスに問題がある、ということがわかりました。その改善を早くやりたいところですが、残念ながらただいま部品待ちです。

 Uターン前は秋葉原に気軽に行けたものですが、今は地方ですのでちょっとした部品でもネット購入になってしまいます。。。30年前は我が街にもパーツショップが有ったのですが、閉店して久しいようです。

 
 部品が届くまでの間、ちょっと気が早いですが、正しいQ測定ができるようになった後のQメータ作成についての検討に入りました。

 
 まず、装置の仕様として以下を目標とします。

  ・中波帯用の共振回路のQとコイルのQが両方測定できること。
  ・測定結果は数値表示できること。共振曲線はグラフ表示できること。
  ・測定データをPCに対して外部出力できること。
  ・測定用のバリコンを内蔵し、測定対象のコイルを接続するだけで測定ができること。
  ・測定用のバリコンは、内蔵のものと外部外付けバリコン(共振回路の測定対象)が選択できること。
  ・できるだけ小型、ポータブルであること。
  
 以下はできればやってみたい仕様です。
 
  ※短波帯のコイルも測定できること。
  ※周波数カウンタ機能を持ち、発振周波数の校正を単独でできること。
 
 この目標仕様から考えた装置構成は下図の通りです。

Qmeter

続きを読む "同調回路のQの測定 その4" »

2010/05/12

PICによるオシレータについて (すみませんがいまいちです)

 BFO実験につきましてはコメントでのご指摘ありがとございました。その後も少しいじってみたのですが、やっぱりSSB音質は治りませんでしたthink。あとは昔使ってた短波ラジオを探し出して試してみようかと思っています。

 ちょっとBFOを離れて、今日は「PICをオシレータとして使えないかな」について計算および実機確認してみました。

回路は以下の通りです。

Pic_osc (図のクリックで大きな図面が開きます。)

 
 PICマイコンは内部40MHz動作可能な18F1320にしました。この回路で、PWM機能を使ってプログラマブルな出力周期を作ります。

 

続きを読む "PICによるオシレータについて (すみませんがいまいちです)" »

2010/05/11

PICマイコンによるBFOの実験 (3) どうもいまいちです。。 

 今回はPICマイコンのクロックモードを変更して、なんとかPICマイコンの出力をBFOとし使用するための目標の456.5KHzにしました。

Pic_bfo_0 ← 調整できたところの周波数カウンタの表示です。できてますよね?波形を見てもそのくらいの周波数の「ほぼ」正弦波が見えるのですが。。。しかしBFOとして使ってみると、正直言っていまいちですbearing。 

 7MHz帯で聞いてみたところ、CW(モールス信号)は良く聞こえるようになりましたが、SSB(SingleSideBand)音声はいっまひとつ明瞭になりません。。。。。

 

続きを読む "PICマイコンによるBFOの実験 (3) どうもいまいちです。。 " »

2010/05/10

PICマイコンによるBFOの実験 (2) ちょっと改良

 前回の実験で波形が正弦波からほど遠いのを改善してみました。

 

 今回の変更は下の通りです。LPFをやめて共振回路によるBPF(Band pass Filter)に変えました。

Pic_bfo1_2  (画像クリックで大きな図面が開きます。)

 

結果、波形は下のようになり、正弦波にかなり近づきました。

Dscn0375_2

 試しにさきほど新しい回路で動作確認してみようとしましたが、アマ無線のSSBが全然受信でず、確認できませんでしたthink。日曜深夜という時間帯のためでしょうか。

 とはいえ周波数の補正がまだですので、交信が聞こえたとしてもやっぱりまだダメでしょう。次はPIC交換によりそちらの方を直したいと思いますcoldsweats01

 

今回は以上

 

にほんブログ村 その他趣味ブログ 電子  工  作へ
にほんブログ村 ←記事が面白かったらクリックしてやってください。

2010/05/07

PICマイコンによるBFOの実験 (途上)

 PICマイコンで実験してみたかったことの一つに、発振器として使う、というのが有ります。

 PICマイコンはクロック数十MHzで動いていますし、PWM(Pulse Width Modulation)に使えるカウンタ回路を持っている物が多いです。これなら数百KHz〜数MHzの発振は十分できるだろうし、それなら中波帯、あわよくば短波帯の何かに使えるだろう、という思惑ですcatface

 

 ということで、まずはPWMを動作させて発振波形を取り出してみました。何かターゲットが無いと面白くないので、短波ラジオ(スーパヘテロダイン)用の外付けBFO(Beat Frequency Ocillator)になるかどうか試すことにしました。BFOでしたら殆ど発振器そのままで使えるからです。

Pic_bfo  ← 実験に用いた回路はこの通りです。

(画像クリックで大きな図が開きます。)

 

続きを読む "PICマイコンによるBFOの実験 (途上)" »

2010/05/06

PICマイコン環境のセットアップ

 PICマイコンは以前使っていて、その後しばらく離れていたのですが、またいくつかマイコンでやってみたいことができてきましたので、再開することにいたしました。

 

 今回引っ張り出してきた開発環境は下のPICKIT3です。(一応このシリーズでは最新のはず。)昨年ここで購入していたのですが、今年引っ越してから使う機会がなく荷物の中で眠っていたものです。

Pic1_1  PICKIT3本体(赤いアダプタ)、統合化開発環境CD−ROM1枚、評価用のPIC基板、のセットです。

 

続きを読む "PICマイコン環境のセットアップ" »