SH2マイコンボード
2006.05.27 〜
2006.8.16 サンプル追加
2006.10.2 シリアルeeprom使用
2007.03.13 SDカード使用
簡単ではありますが、ぼちぼち書きます。
1. インターフェイス6月号
(CQ出版、2006年)にSH2−7144のマイコンボードが付録で付いてます。1490円
SH2マイコンボードは、市販の物はH8に比較してかなり高価。 付録に弱い私は、迷わずゲットしました。
2006年4月25日発売で、付録が付くのすぐ売り切れるようです。 CQ出版の在庫はなくなってます(2007.1)。
特色として
H8と比較して、圧倒的に速い。(三角関数計算は、数十倍)
位相係数モードが2chある。 (赤経、赤緯のロータリーエンコーダが読み込める。)
2. 私のは外れ
ボードの設計に問題ありで、動かない場合があるようです。私のは、全く不安定でした。
私の改造は、こんな感じで。
DBGMDのアース接続で、絶好調になりました。
3.3Vの電源の発振は、しているかどうかわかりませんが、 いずれ秋月10μのチップタンタルコンデンサを入手
したら、改造する予定です
3. 外付けSRAM
hamayanさんから分けてもらいました。 でも、しばらくはSRAM無しで使用します。
http://blog.so-net.ne.jp/hamayan/
外付けSRAM付け、無事動作しました。 2006.8
SRAM付け用のモニター(hamayanさんから)を使う場合は、下記のように変更して使用しています。
;START
CVECT,P,C,D,R,B/FFFFE160
START CVECT,P,C,D,R,B/400000
(外付けSRAMに転送の場合)
START P,C,D,R,B/400000,CVECT/FFFFE160
(外付けSRAMに転送の場合)
スタックも外付けSRAMにする場合は、モニターのセットアップが必要です。
リンク時に monitor.sub で
DEFINE $STACK=0 の部分を
DEFINE $STACK=47FFFF
のようにすればOKです。
4. 開発環境
付録のCD−ROMにルネサスのHEW4が付いてます。60日の制限後でも、256KBの制限内なので、問題無く使えそう。
GCCが良い人は、KPITのが無償で使えます。(使えました)
5. デバックモニター
F−ROMの書き込み制限回数100回なのでデバックモニターは必需品でしょう。
使い方など
6. 性能(種目別)
@ 三角関数(cos(X)の計算) (条件が同じではありませんが)
SH2-7144 30000回の計算 約2.3秒 HEWで作成 モニター配下
H8-3664 30000回の計算 約160秒 gcc環境
ARM7 30000回の計算 約1.5秒
DWM付録
V800SE 30000回の計算 約1.5秒
インターフェイス 2007.5月号付録 (2007.5追記)
SH2とH8と比較すると 約70倍違います。
DWM付録のARM7は、約100倍速いですね。 V800SEも速い。
7. サンプル (モニター配下で)
てこずっている人の為
H8と同じだろうと試したら、さっぱり動きません。スタンバイ機能の解除操作をしなくてはけないんですね。
それから、割り込み操作も(優先度)も少し異なりました。
http://homepage1.nifty.com/rikiya/electronics/18SH2_7144F.htm 力也さんのサイトに説明あり
又SH2_7045Fのソースがとても参考になります。
それ以外は、H8にとても似ているので、H8の経験があれば違和感無く移行できると思います。
(1) hamayanさんの外SRAMなし版モニターで
以下は私が試した、ものをサンプルとして、アップしました。
もし ROM環境で動かす場合は、 各リンクの指定で(XXX.SUB)のコメントを切り替えることで変更できます。
;START CVECT,P,C,D/0,R,B/FFFFE000 いまこれがコメント(ROM環境)
2006.10.2 改
START CVECT,P,C,D,R,B/FFFFE160 こちらが生きている(RAM環境)
@ LEDチカチカ led-1.lzh 2006.8.17
ボードにあるLEDの点滅。
A ADコンバータ adc-03.lzh 2006.8.15
8chのADコンバートし、結果を表示。
B CMTを使用する。 timer-cmt.lzh 2006.8.16
CMT0、,CMT1のカウンタの内容を表示。
C MUTを使用する。 timer4-mtu.lzh 2006.8.16
mtu0,mtu3
コンペアマッチ割り込み。 カウンタクリア
TGRBの値で周期が異なる
実行結果は、こんな感じ。
左側(03303303など)は、割り込み処理中で表示している。周期の違いにより数が違う。
右側はカウンタの値。
(2) 自分でカスタマイズしたモニターで
準備中
D 数学関数を使用する。
E 演算関数をモニターに置く
(3) I2Cインターフェイス
(A)シリアルEEPROM
シリアルEEPROMを接続しました (I2Cインターフェイス)
2006.10.2
これが動作すれば、メシエ天体や、基準星などは簡単に格納できます。(512k
BIT x4チップ接続可能)
2Mbit(256KByte)で、1天体16バイトの位置データなら1600個が保存できます。
端子は、上から、VCC、GND、SCL、SDAです。
アドレスの端子は、オープン(内部でプルダウン)です。
2本の抵抗(2.7KΩ)は、SCLとSDAのプルアップ抵抗です。
ルネサスのアプリケーションノート のこれ(RJJ05B0092-0100H)
http://documentation.renesas.com/jpn/products/mpumcu/apn/rjj05b0092_sh7144f.pdf
ですが、SH2/7145用になっていて、コンパイルエラー(レジスタの定義が異なる為)が嵐のように出ます。
内容理解は置いておいて、単純に7144にコンバージョンしました。(ソースの不備は、想像で追加)
運良く、7144で動きましたのでアップしておきます。 10バイトの読み書きが確認できます。
romでもモニター配下でも(リンクの変更)動きます。
eeprom-io1.lzh
24CL64で確認 2006.10.02
使用記(上記のアクセス関数を使用して)
@ 1バイトの書き込み、読み込みOKでした。
A ページ単位の連続書き込みは、1ページ(24CL64では、32バイト)の書き込み後、
少しWAITを入れないと、次回の書き込みに失敗します。(書き込みに時間がかかる)
void
WAIT(long int cont )
{
long
int i;
for(i=0;i<cont;i++){}
}
で WAIT(100000); とすると連続書き込みOKでした。
B クロックレートを高速に
// IIC.ICMR.BYTE
= 0x38;
IIC.ICMR.BYTE
= 0x08; // 0000 1000 5:3 が関連ビット
// IIC.SCRX.BYTE
= 0x39;
IIC.SCRX.BYTE
= 0x19; // 0001 1001 5が関連ビット
これで最高速になります。 問題なくアクセス成功。 ( 約100khzが約900khz に)
C 32バイトの読み込みを256kbyte分繰り返したところ(シーケンシャルリード)、約18秒かかりました。
データ内部を管理して、必要な部分のみ読み込みすれば、十分実用になりそうです。
128単位の読み込みも試して見ましたが、殆ど早くなりません(2秒程度早くなるだけ)。
D
アドレスは、2回送信(Set_adrs_EEPROM 内部でupper
address とlower address)しています。
7bit対応は、1回の送信になるので、ここのロジックを1回にすれば、使用できます。
i2c-2.txt
このソースの先頭で
#define dadrs
0 // data adress 1:16bit 0:7bit
とすれば、#if
dadrs と #endif の間がコンパイルされずに7bitアドレスになります。
#define dadrs
1 // data adress 1:16bit 0:7bit
とすればこれまでどうりのコンパイル(16bitアドレス)になります。
(B) リアルタイムクロック
ICがあるのを知りました。秋月でRTC-8564NBが入手できます。
購入したのは、小さな基板に実装され、DIPサイズのCソケット接続に接続できます。
プルアップ抵抗は、緑の基板でも可能ですが、使用せず茶色の基板に実装しています。
これを上の24CL64の基板と交換すれば、接続OKです。
http://akizukidenshi.com/catalog/items2.php?q=RTC-8564&s=score&p=1&r=1&page=#I-00233
インターフェイスは、I2Cですから最近自分の守備範囲になりつつある技術です。
マイコン等から、一旦現在時刻を送り込んでおけば、必要なときに時刻を取り出せます。
電源を切れば時刻データは、消えてしまいますが、消費電流が少ない(仕様では、275nA(3V))ので、
電池で常時動かすこともできます。(まだやってませんが)
アドレス送信は、7bitなので1回のみです。
使用してみたところ、無事動きました。
確か、Control1のbit7(TESTビット)を1にすれば、時計が動きだしたような。
あとは、時計を合わせればOK。尚、7bitアドレスです。
(5) SPIインターフェイス
SPIインターフェイスを使用して、色々試しています。 SPIインターフェイスのADコンバータ、他のマイコンとの
(AVR、ARM7など)通信など。
使いこなせば、SDカードのアクセスもできるんですがね。
SH2−7144は、SPIインターフェイスの為の機能がついていないので、SPIはソフトウエアで行わなければ
なりません。
(1) ADコンバータ MCP3208(8チャンネル)
秋月電子で購入。実験で抜き差し可能になるように、小さな基板に実装しました。
黒くて細長いのはサーミスタで温度変化をAD変換します。
SH2から、変換するチャンネルを指示(送信)し、AD変換結果受信します。
基板左側は、SPI信号線、基板下側は電源。
ソフトは、chanさんのFATファイルシステム・モジュールを流用(変更)しました。 H8用のソースを流用。
http://elm-chan.org/fsw/ff/00index_j.html
AD変換の値は、今ひとつ安定しませんが、温度センサを体温で上げ下げすると、AD変換値が反応
するので、SPIの通信は(たぶん)できているようです。
(2) SDカードのアクセス
パソコンでSDカードに書き込み、SH2−7144で読み込むことができました。
こんな感じで
H8用のサンプルを使用し、SDカードの読み込み、書き込みが可能になりました。
まだ、セクタ単位のアクセスの段階で、FAT12、FAT16などのファイル単位はできませんが
これで大きな容量の記録媒体が使用できるようになりました。(2007.3.13)
手持ちの SDカード16MB、256MB、miniSDカード16MB、microSDカード32MB が使用
可能です。
FAT16がOKでしたので、2GBのカードも使用できるはずです。
(MMCカードも読めるはず(かも?)。)
これで上記シリアルEEPROMの256KByteとは、比較にならないほど多くの数の天体位置データを扱うことが
できます。
元のソフトは、chanさんのFATファイルシステム・モジュール(H8用のソース)です。
http://elm-chan.org/fsw/ff/00index_j.html
アクセスは、microSDカード以外ではとても安定して、初期化、読み込みでエラーになることは
ありません。
ただしmicroSDカードは、最初の初期化(disk_initialize内のCMD0)で失敗しますが、2回目で成功します。 (upはまだですが解決しました。CSが最初からLになっていたのをHにしたら解決2007.3.29)
スピードは、2000セクタ(1セクタは、512バイト)のシングルリードで、14秒程度です。
上の24CL64よりは速いですが、期待したほどでもありません。手持ちのカードでは、差が
ほとんどありません。又1回で4セクタの読み込みも行いましたが、差はほとんどありません。(1秒程度速いか)
パソコンで書き込んだファイル(FAT12,FAT16)もファイル名を意識して読み込むことができました。(2007.3.15)
読み込み速度は、約77KB/SEC程度です。 転送速度が速いSDカードで試してみたいところです。
topへ