上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top

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



Encoder_lcd2_2 


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


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


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



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


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


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


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




それではまたです。




スポンサーサイト
2014.01.28 Tue l ラジオ l コメント (5) トラックバック (0) l top

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



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



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



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



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



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



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



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





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



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



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



  



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



 



それではまたです。




2014.01.27 Mon l ラジオ l コメント (0) トラックバック (0) l top

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


Dscf2834_2 Dscf2836


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


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


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



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



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をチカチカさせているだけの状態です。エンコーダ入力のハンドリングができたら一度アップしようと思います。



それではまたです。




2014.01.26 Sun l ラジオ l コメント (2) トラックバック (0) l top

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


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


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


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


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



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

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


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



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




それではまたです。




2014.01.26 Sun l ラジオ l コメント (3) トラックバック (0) l top

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



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


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


M6959_lcd2_v2_2

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


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


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



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




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



それではまたです。




2014.01.19 Sun l ラジオ l コメント (2) トラックバック (0) l top

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


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


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


Photo


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


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


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


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


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


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


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


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


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



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


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


 


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



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


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



<

それではまたです。






2014.01.19 Sun l ラジオ l コメント (2) トラックバック (0) l top

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


結果は以下の通りです。



Photo_2


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


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


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



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



それではまたです。




2014.01.18 Sat l ラジオ l コメント (2) トラックバック (0) l top

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



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


Dscf2811 Dscf2812 Dscf2813


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


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


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



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


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


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


*2015/10/10 ファイル破損の模様です。確認して修復したいと思いますが、バックアップがみつからず難航中です。


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




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




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





それではまたです。








2014.01.18 Sat l ラジオ l コメント (2) トラックバック (0) l top

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



まずハードの方で、電池が減ってくると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.18 Sat l ラジオ l コメント (0) トラックバック (0) l top

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


Dscf2808  



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



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

「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">


まずは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ラジオをして仕上げたいと思います。



それではまたです。



2014.01.13 Mon l ラジオ l コメント (8) トラックバック (0) l top
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。