SDOTECK HOME

  • ご参考になりましたか?
    SDOTECKブログでは、みなさんからのフィードバックをお待ちしています。 説明が解らなかったり、もっと詳しく解説してほしいポイント・テーマがありましたら、お気軽にsudoteck@gmail.com までメールくださるか、記事にコメントして下さい。
  • -

RF PowerAMP なら

  • RF AMP DESIGN

HEX calc pro 1.00

  • HEX calc pro ver1.00
    エンジニア向けの16進と浮動小数点を混在して入力出来る計算機 。 Version 1.00 高機能な 16進電卓や科学計算電卓はありますが、いちいちモードを切り替えなければならず、最大の問題は16進数と小数点値を同時に使用出来ないことです。
    詳しい説明はここ
    iTunes ではここまで

ATT calc

  • ATT calc ver2.00
    iPhone 用 RF アッテネーター計算ソフトです。  RF開発エンジニアに必要な、 dBm - W 換算機能をはじめ、π型やT型の ATTを 設計する上で、必要な dB値から抵抗値を算出する機能と、 E24系列の抵抗値を 使用したときの減衰量(dB)と整合インピーダンス(Ω) が表示されますので、どの 抵抗値の組み合わせがよいか検討できます。  また、正確な値を必要とする場合に2個のE24系列抵抗を並列接続して理想の値を 求める計算機能も持っています。  操作はピッカーホイールを回すだけですので、実験中でも片手で簡単に操作 できます。

FIL Calc

  •  LPF 計算機
    RFエンジニア向けフィルター計算ソフト LPFやHPFの設計をするときに、いちいちパソコンを起動してフィルタを設計、結果をプリントアウトして、実験室に行ってネットワークアナライザで測定・実験、ちょっと修正したい時にまたパソコンの所にもどって、再計算...というのが結構面倒で、手軽にiPhone で計算できるといいいなと思って作りました。

iPhone APP

  • ATT calc ver2.00
    SDOTECK が開発した iPhone APP の紹介です。 NEWS---SWRproリリース

Amazon

  • AMAZON Books

RAKUTEN

  • RAKUTEN

mujic.jp

  • music.jp
    music.jp

サイト内検索には?

  • -------------------------------
    ◆下の検索機能でこのブログのすべての関連項目を検索出来ます。是非使ってみて下さい。
サイト内検索
ココログ最強検索 by 暴想

SCHEMATICS

BOSE

  • BOSE
    クワイアットコンフォート20
無料ブログはココログ

Google

  • Google

« プリント基板でひどい目にあったはなし | トップページ | マイクロ波のはなし »

2010年7月20日 (火)

SPIのソフトのはなし

SPIとは
[Serial Peripheral Interface]の略で、クロック同期型の3線式シリアル通信です。
ハード的には
 クロック(SCK)に加えデーター出力(SO)、データー入力(SI)とチップセレクト(#CS)が設けられ、3線+チップセレクトなので3線式と呼ばれています。PLL-ICやADC-ICなど I2Cよりも多く使われています。
 以前紹介したPLL+VCOのIC ADF4360 はこのインターフェイスを使っており、過去H8 で5個の PLL-ICを制御したこともあり、比較的簡単にコントロール出来ますので、今回はソフト部分を紹介します。
Outbyte
ソフト的に
 今回のADF4360は、3種類の24ビットのデーターをレジスタに設定することで機能しますが、そのデーター転送の基本ルーチンとしてまず8ビット転送の out_byte( int data ) を説明します。

out_byte( int data )
{
 int i ;
 for( i=0x80 ;i > 0 ; ){
   IO.PDR1.BIT.B0 = 0; /* CLK Low */
   if( data >= i ){
    IO.PDR1.BIT.B1 = 1; /* Data = 1 */
    data = data - i ;
   } else {
     IO.PDR1.BIT.B1 = 0; /* Data = 0 */
   }
   IO.PDR1.BIT.B0 = 1; /* CLK High */
   i = i >> 1 ;
  }
}

ループ変数 i に 0x80 を代入して 8Bit のMSB から data を比較していきます。
i と data の and をとる方法もありますが、今回は大きさを比較して 元の data から比較後Bitが立っていた場合に i を引いてゆくのと i を右にシフトしていくことで各ビットの High/Low を送信します。(High時にはDOが立ち上がりますのでレベルが立ち上がるまでに時間がかかります。クロックを立ち上げるまですこし時間をかせぐ狙いもありますが..)クロックの Low 時点でデーターを変化させ、確定後 Highにすることでタイミングを知らせます。
 全体のデーターを送るのは以下のルーチンです。

out_pll( )
{
  int i ;

  IO.PDR5.BIT.B2 = 0 ; /* PLL CS Low */

  out_byte( 0x00 ) ; /* at Ref 20MHz */
  out_byte( 0x0f ) ; /* Ref= 20KHz */
  out_byte( 0xa1 ) ; /* Send R-Counter DATA */

  IO.PDR1.BIT.B0 = 0; /* CLK Low */
  IO.PDR5.BIT.B2 = 1 ; /* PLL CS High */

  for ( i=0;i<100;++i) { } / * Wait */

  IO.PDR5.BIT.B2 = 0 ; /* PLL CS Low */

  out_byte( 0xc7 ) ;
  out_byte( 0xf1 ) ;
  out_byte( 0x20 ) ; /* Send Control DATA */

  IO.PDR1.BIT.B0 = 0; /* CLK Low */
  IO.PDR5.BIT.B2 = 1 ; /* PLL CS High */

  for ( i=0;i<100;++i) { } / * Wait */

  IO.PDR5.BIT.B2 = 0 ; /* PLL CS Low */

  out_byte( pll_buff[0] ) ;
  out_byte( pll_buff[1] ) ;
  out_byte( pll_buff[2] ) ; /* Send Divider Data */

  IO.PDR1.BIT.B0 = 0; /* CLK Low */
  IO.PDR5.BIT.B2 = 1 ; /* PLL CS High */

}

各24ビットのデーターは out_byte() を3回呼んで送っています。この間に CS ポートを Lowにしておきますと、 CS の Highにするタイミングで各レジスタにラッチされます。PLL-ICが3つのレジスタを区別するには送られてきた24ビットの最後の2ビットを使って判断しています。
 今回周波数を決めるデバイダーデーターは pll_buff[] という配列変数にしておき、周波数変更時にこの変数を修正してこのルーチンを呼びます。このICの仕様により、リファレンスデーターが変わらなければ、デバイダデーターだけ送っても良いですが、伝送時間はさほど問題ない場合は全てを送った方が確実です。
関連・参考文書
Rfw08coverh200
RFワールド NO.8
 2章でADF4360を使ったRF信号発生器の製作記事が紹介されています。 USB-パラレル変換モジュールを使ってパソコンからコントロールできるようにしていますが、PLL-ICのレジスタ表や全体回路図・ハード的解説もあって参考になります。


« プリント基板でひどい目にあったはなし | トップページ | マイクロ波のはなし »

DIGITAL」カテゴリの記事

コメント

H8/3664でL6470を使ってステッピングモータを制御したいのですが、L6470がSPI通信でないと動かないことを知りました。
H8のSCIを使ってSPI通信を行うことは可能でしょうか?
よろしくお願いいたします。

私も一時 SCI でSPI が出来ないか検討してみました。数バイト連続送信する場合、SCIのハードウェアで行うと、1バイトごと送信完了の確認にレジスタをチェックして待っていなければならず、結局ループでWait していることになるので、ハードでやるにしても思ったほど高速化出来ないのではと思いました。
 それで、自分でコントロール出来る、上記のソフトでポート制御の方法でアクセスしました。
割り込み機能などを使えば、SCI でうまく使えるかも知れませんが、ちょっとハードルが高そうでしたので、ソフトで作った方が結局楽でしたね。
ハード的にはクロック出力も出せるので、可能かと思われますが、データーシートでも機能的にSPI と言っていないので難しいのではないかと思います。データ送信順序も H8では LSB から始まりますが、L6470 は MSBから始まるようなので、その辺りも変換も必要ですね。

返信ありがとうございました。
ポート制御の方法でやってみたいと思います。
また何かあればお力をお貸しいただけると幸いです。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/556493/48922939

この記事へのトラックバック一覧です: SPIのソフトのはなし:

« プリント基板でひどい目にあったはなし | トップページ | マイクロ波のはなし »