マイコン工作実験日記

Microcontroller を用いての工作、実験記録

AT91SAM7SE256

2008-04-30 23:55:42 | LCD
16ビットでのLCDインタフェース実験のために、外部メモリインタフェースを持ったAT91SAM7SE256を使ったボードの作成を開始しました。いつものようにユニバーサル基板を使っています。

改めてAT91SAM7SE256のデータシートを読んでみると、AT91SAM7S256とは違っている点がいくつかあることに気が付きました。
  1. RAMが32KBしか載っていない。SAM7S256では64KB載っていたのに、SAM7SE256には32KBしかありません。外部メモリをつなげられるので、RAMが必要ならば外部メモリとしてつなげばいいということですね。
  2. USB DP端子のプルアップ制御ができるようになっている。SAM7S256では1.5Kオームでのプルアップを外部回路として付加して、必要であればGPIOでプルアップ制御をするようになっていました。SAM7SE256ではレジスタ制御で内蔵のプルアップ抵抗をつなげたり、はずしたりできるようになているので助かります。
  3. 外部メモリとしてNANDフラッシュも使えるようになっている。この機能を使ってLCDモジュールに載っているNANDフラッシュを使うこともできそうです。

RAMは内蔵の32KBだけではさびしいので、SH2オマケ基板用にと思って買い置きしてあった4MビットのSRAMをつなげようかと思います。

タッチパネル動作試験デモ

2008-04-27 12:06:40 | LCD
タッチパネルの動作を確認するための簡単なデモを作成してみました。



最初はPWMによる画面輝度の変更です。画面Y方向のタッチ位置に応じてPWMデューティを変化させることで明暗が変化します。次は、十字カーソルを出すことでタッチされた位置を追いかけています。最後に、カーソルの代わりにドットを表示させることで簡単なお絵かきです。

操作には任天堂DS用のタッチペンを買ってきて使ってみました。ちゃんと押さないでさわった程度の加圧だとタッチを認識してくれないようです。パネル上での画面4隅の位置はテキトーに決めただけで、ちゃんと調節していないので、ペン先の位置がちょっとずれてしまっています。

基本的なタッチパネルの使い方はわかりましたので、次は何をしようかな。タッチパネル操作用のGUI部品を作るのはちょっと面倒な感じがします。経験ないし。LCDへの描画についてはまだ文字の表示ルーチンも作っていませんので、そのあたりも用意しなければなりません。また、16bitでのインタフェースもしたいので、そちらのハードの準備も進めたいとろこです。連休中に、次のステップのための準備を進めておこうかと思います。

タッチパネルを試してみる

2008-04-26 22:54:56 | LCD
タッチパネルの使い方はだいたいわかったので、実際に配線して動作を確認してみました。

コントローラのADCの測定は8ビットまたは12ビット出力を選択することができますが、LCDのサイズは240X320ですので、12ビットを使用します。実際にタッチしてみると縦方向も横方向も出力値は150から1900くらいの範囲で変化するようです。ただし、画面の右下隅の方が出力値が最少となっています。



コントローラの出力値からLCD上のドット位置への変換は、原点位置のオフセットを引き算した後に比例計算することで簡単に求めることができます。タッチパネル上にはメニュー用のアイコンが印刷されている部分もありますが、この部分はLCDの表示範囲外となっています。そこで、LCD表示範囲部分についてはドット位置のX座標とY座標をイベント情報として返すこととし、アイコン部分がタッチされた場合には疑似ボタンイベントを生成することにして、タッチパネルのドライバを作成することにします。

SAM7-nRF24-64?

2008-04-24 23:30:13 | OLIMEX
OLIMEXのHPからはリンクが無くなってしまったSAM7-NRF24-64ですが、どうやらMSP-JTAG-RFのUSBドングル側として日の目を見るようです。シルクはSAM7-NRF24となっていますが、この基板だけでの販売はしてくれないのでしょうかねぇ?JTAG用であれば、フラッシュは32Kだけかもしれないかとも想像してみたり。。。

詳細を本家OLIMEXから知りたいものです。きっと、イースター明けにならないと情報は更新されないのでしょうねぇ。

DWM STM32基板で遊ぶ (その3)

2008-04-22 23:02:13 | Weblog
Q-STEERリモコンのソフトについて簡単に記録しておこうと思います。

Q-STEERで用いられている赤外線信号については公式な資料があるわけではありませんが、独自に調べられている方は何人もいらっしゃるようです。わたしは、Q-STEER赤外線信号解析abetuyo blogの記事を参考にさせていただきました。この仕様の信号を生成するにはTIM2とTIM4の2つのタイマを使っています。TIM4は38KHzの搬送波を生成するのに使っています。出力比較モードを使って13us毎に出力を反転(toggle)させることで38KHzを生成しており、TIM4_CH1の出力を2SC1815で電流増幅させて赤外線発光ダイオードをドライブしています。

TIM2では38KHzをオン/オフさせる時間を生成するための基準タイマとして425usを生成しています。Q-STEER赤外線信号解析では、0.5msとして説明されている部分の時間ですが、abetsuyoさんの調査結果とのあいだをとって425usとしています。ヘッダの時間も制御信号の時間も、この基準時間の倍数となっていますので、このタイマの満了時に、出力すべき信号のフォーマットに合わせて38KHzを生成開始させたり止めたりすることで信号波形を作成しています。

ADCは連続モードを使っていますが、加速度センサはX軸しかみないことにしたので、スキャンモードは使わずに1chだけを変換させています。変換終了時に割り込みをかけて、8サンプルの変換結果の平均値を使うことにしています。

タクトスイッチは、もちろんGPIO入力に設定したポートにつないでいます。ボタンが押されていない状態では、TIM2とTIM4の両方のタイマを停止してしまい、赤外線信号の生成を止めるようにしています。Q-STEERを停止させるためには、ほんとは 停止を指示するための制御コードを送った方がいいのですが、信号生成を止めてしまうことで間に合わせています。そのため、スイッチを話してもしばらくは、Q-STEERは動き続けてしまいます。

STM32では、タイマやADCが結構機能豊富な印象を受けました。DMAと組み合わせて使おうとすると色々な設定があるので、慣れるのにちょっと時間かかりそうです。2つのタイマをつなげて使い、片方の出力でもう片方の動作を制御することもできますので、この機能を使って38KHzの変調をかけてもいいかもしれません。

DWM STM32基板で遊ぶ (その2)

2008-04-20 13:03:11 | Weblog
昨日の記事の続きです。

表からみるとタクトスイッチが2つついているだけのように見えますが、実は裏側はこうなっています。



中央上側に載っている緑がかったものは赤外線発光ダイオードです。こいつをドライブするための2SC1815(と電流制限抵抗)がオマケ基板の下に隠れています。たしか、昨年のInterfaceにV850で学習リモコンを作る記事がありましたが、ほとんど同じような回路だったと思います。

こんな工作で作ってみたのが、Q-STEER用のリモコンです。誰でもやりそうなネタなんですけど、結構楽しめます。前後の動きはタクト・スイッチで操作し、左右の動きは基板の傾きを加速度センサで検出して制御することにしてみました。基板に載っているのは3軸の加速度センサですが、ソフトではX軸しかみていません。実際の動きを動画でご覧ください。




タッチパネルを使うには?

2008-04-16 23:44:50 | LCD
TechToysから購入したLCDボードにはタッチパネルも付いています。このLCDボードには、TIのADS7846というタッチパネルコントローラが載っており、マイコンとSPI接続できるようになっています。しかしながら、ディフォルトではタッチパネルはADS7846にはつながっておらず、ADS7846を有効にするためにはボード上の4か所のジャンパをハンダブリッジする必要があります。ディフォルトではXL, YU, XR, YDという4線式タッチパネルからの信号が、そのままボード上のピンソケットに出ています。

すなわち、このボードのタッチパネルを使うには次の2つの方法があることになります。
  1. ボード上のコントローラADS7846を使う方法。この場合には、SPIでX方向またはY方向の電圧を測定するコマンドを送信すると、その測定結果を受信することができます。
  2. マイコンのGPIOを使いX方向端子間に電圧をかけ、Y方向端子間にあらわれた電圧をマイコンのADCで測定する方法。XとYを入れ替えて、逆側の電圧も測定する。Chanさんの説明が参考になりました。
MicroChipのグラフィックライブラリには、2の方法をサポートするためのコードが含まれているらしく、そのためかディフォルトではADS7846は無効になっているようです。

ADS7846のデータシートを読んでみると、SPIで接続できるタッチパネル用の12ビット(または8bit)ADCだということがわかりました。ポピュラーなチップらしくLinuxのドライバのソースでもサポートされているようです 。SPI信号以外に/PENIRQという信号もあり、ペンでタッチされた時に割り込みを生成することもできるようです。

せっかくコントローラが載っていることですし、SPIのピンも空けてあるので、1番のコントローラを使う方式を採用することにします。コントローラを使わない場合には、タッチされたことを検出するために、マイコンは常時タッチパネルにかかる電圧を測定していなければなりません。コントローラはこの監視作業をやってくれて、タッチされたら/PENIRQ信号を出してくれますので、これを受けて電圧測定をおこなえば良いので、CPUの処理を軽減することができます。



DWM STM32基板

2008-04-14 23:18:21 | Weblog
STM32がオマケ基板としてついたDWM 5月号ですが、わたしも発売日に入手しました。今回は冷静になって1冊だけしか買わないことにしました。とりあえず、ざっと記事と基板を見てみての感想です。

  1. 基板を最初に見ての感想は、「デカイな」という感じ。これは、いつもOLIMEXのSAM7-H256を使っており、その大きさに慣れているためですが、ピン数の違いも影響していますね。個人的には64ピンのSTM32F103RBT6でも充分だったと思います。
  2. 100ピンで周辺がたくさん使えるのに、基板上の3.3V LDOは150mAのものしか載っていません。外にちょっとしたモノつなげると足りなくなりそうです。400mAくらい取れると使いでがあると思うんですが。
  3. 今回はJTAG用コネクタ用のパターンが無いですねぇ。USBダウンロードできるので、必要な人は外付けでということのようです。JTAGできた方がやはり便利なのですが。
  4. USBのDPが基板内でプルアップされちゃっています。プルアップ制御回路を載せてしまうか、外でGPIOを使ってプルアップ制御できるようにピンを出しておいてもらえた方が良かったのですが、コストの制約でしょうか? STのサンプルコードを見るとどうやら、PD9で制御するように評価ボードなんかは作られているようです。カエルプログラムのファーム側の初期化コード(hw_config.c)を見ても、PD9の初期化/操作コードが残っているんですけどねぇ。
  5. 記事としては、イントロで終わってしまってしまった感が強いですねぇ。来月号の方に期待しますか。DFUの話が何度も出てきて(1章、4章、5章、8章)、ちょっとウンザリ。
  6. 4章では2箇所で、使用チップはSTM32F103VCT6であるかのような記述があって、最初ちょっと混乱しました。明らかに誤りで、正しくはSTM32F103VBT6です。ライブラリの関数一覧表で8ページ潰しているのにはガッカリ。豊富なライブラリが用意されていることを強調したいのかもしれませんが、表だけじゃ何の役にも立ちません。それより周辺デバイスの説明をもうちょっと詳しくしてもらうとか、別記事にページ数を廻してもらいたかったな。
  7. SPIでの転送フレーム長は、8ビットと16ビットだけで、9ビットとかはできないようですね。SparkfunのNokia LCDなんかをつなぐには、ソフトで9ビット SPI処理しなければならくなりそうです。

開発環境としては、とりあえずKeilをインストール。新しいMCUを使うにはピン設定や、デバイスの設定を理解する必要がありますが、KeilのConfiguration Wizardを使えば、マニュアルそんなに読まなくてもなんとなく設定できて、遊び始められるので。サイズ制約的にはIARの方がいいのですが、16K超えるようなコード書く程度に使い始めたら、どうせgcc 使うことになるでしょうし。

基板の方は、TeraTermで加速度センサの読みが表示されることだけ確認して、DFUの使い方を確認するために、KeilのサンプルとしてついていたPWMによるLED点灯プログラムを書き込んじゃいました。カエルが跳ぶのは見てません。SDソケットはまだ用意していないので、PWMを書き込みプログラムとして選んだ次第です。

少しマニュアルやサンプルを読んでから、ちょっと遊んでみようかと思います。

LCD表示試験 (その2)

2008-04-12 14:45:47 | LCD
購入したLCDではEN信号を使ってバックライトLEDのオン/オフができるのですが、PWMを使えば輝度調整もできるということなので、動作確認してみました。ボード上にFETが載っていてスイッチングしてくれるので、マイコン側では何も考えずにEN信号をPWM端子に直結するだけでオーケーです。いい感じで明るさの調節ができました。

また、LEDのコントローラが持っているスクロール機能も確認してみました。

これらの機能を使った表示デモを動画にしてみました。



最初にテキトーに色を変えながら連続して画面表示をしてます。これがAT91SAM7Sを使っての8ビットモードでの書き込みの最大速度です。

次に表示開始ラインアドレスを変更することにより、画面をスクロールさせています。1ドットスクロールするごとに1ms休止させてみると、こんな感じのスクロールになりました。

最後にPWMで連続的に輝度を変えています。

動画で見ると横線ノイズがたくさん出ているように見えますが、実際にはそんなことありません。



このLCDで遊ぶので手一杯なので、Interface 5月号は買ったものの基板を取り出してもいません。モニタにOSDで画像出すより、LCDに画像出している方が楽しいかな。