2010年10月31日日曜日

StarBoard Orange専用の前面アクリルボードを入手しました

StarBoard Orange専用の前面アクリルボードの試作版をStarBoard Orangeの設計者の方(@logic_starさん)から頂きました。ありがとうございます。


写真でご覧頂くとわかるとおり、StarBoard Orangeの外形サイズに合わせてデザインされており、StarBoard Orangeの可搬性を損なうことなくmbedとStarBoard Orangeを守ることのできる仕上がりとなっています。

現状の前面アクリルボードはLCD実装の都合上、左上の個所のみネジ止めできません。

これについては以下のように対応しました。
  1. 前面アクリルボードとLCD基板間は7mm。この間をネジを突き当てる事で押し込み方向負荷に耐えられるようにする。
  2. 今回の対応では引っ張り方向負荷に対しての対応は考えない。

これでも十分便利です。
まず、「埃をかぶらない」のが嬉しいですね。


え?
「リセットスイッチが押せない?」
これについては幾つかの方法が考えられます。
  1. 緊急時のリセットを考慮しないのであれば、ソフトウェアによるリセットで対応。
  2. 前面アクリルパネルに小さな穴を開けて対応。
  3. 前面アクリルパネルを用いつつ定規で対応。
などなど。


少し無理矢理ですが、「前面アクリルパネルを付ける時は運用時」と割り切れば良いのではないでしょうか?

ちなみに、この前面アクリルボードはMTM06での販売も検討中とのことです。
StarBoard Orangeを立てて置いて稼働させたりできるので、見せ方の可能性もグッと拡がります。


LPCXpresso LPC1768の水晶処理方法

LPCXpresso LPC1768の水晶がひどい実装になっているのは有名な話です。




これをうまく処理する方法を考えてみました。

用意するものは2つ。
  • スコッチ両面ゲルシート(ポスターなんかを貼るのに使うやつ)
  • 木工ボンド(家に無かったので無理矢理)

まずはスコッチ両面ゲルシートを水晶の高さ分に切って、倒す側に貼り付けます。
スコッチ両面ゲルシートはチップコンデンサと水晶が直接接触しないようにする役目を果たします。

次に水晶をスコッチ両面ゲルシートにあたるまでゆっくり倒します。
左側に倒さないのには理由があって、左側ですとC43にあたって最後まで寝かせる事ができません。


最後に、写真にあるように木工ボンド(じゃないほうが良いけど・・・)で固めればできあがりです。

LPCXpresso LPC1768でTOPPERS/ASPの動作を確認する


2011年2月23日の記事、3千円で楽しめるARMマイコンとRTOSの世界 (TOPPERS/ASP on LPCXpresso LPC1768)でLPCXpressoさえあればTOPPERS/ASPを楽しめるようにしました。



TOPPERS/ASP for LPC(http://sourceforge.jp/projects/toppersasp4lpc/)においてsuikanさんがTOPPERS/ASPをLPCプロセッサで動作させるためのポーティングをされています。


suikanさんがお使いのボードは株式会社日新テクニカで販売されているNXP ARM/Cortex-M3 LPC1768開発キット(http://www.nissin-tech.com/2010/01/nxp-armcortex-m3-lpc1768.html)です。






Embedded Artistsで公開されているFreeRTOSポート(http://www.embeddedartists.com/products/lpcxpresso/lpc1768_xpr.php?tab=res)ではP0[22]のLED(ボード上ではLED2とシルクが打ってある)が点滅するデモになっています。内部では二つのタスクが起動し、一方が送信し一方が受信、そして受信側がLEDをトグルするデモです。




これを踏まえて先のTOPPERS/ASPでもLPCXpresso LPC1768でLEDがチカチカするようにしてみました。Subversionのリポジトリがrevision 1となっているのは私のローカルリポジトリのバージョンです。http://svn.sourceforge.jp/svnroot/toppersasp4lpcからダウンロードしてきたバージョンはrevision 206です。
  1. asp/cfgでconfigureしてmakeする。
  2. sample1プロジェクト用のディレクトリを作成する。
  3. asp/configure -T lpc1768_generic_gccを実行し、サンプルプログラムを生成する。
  4. make depend; makeする。
変更点を以下に示します。


Index: sample1/sample1.c
===================================================================
--- sample1/sample1.c (revision 1)
+++ sample1/sample1.c (working copy)
@@ -108,6 +108,7 @@
 #include "syssvc/syslog.h"
 #include "kernel_cfg.h"
 #include "sample1.h"
+#include "util.h"


 /*
  *  サービスコールのエラーのログ出力
@@ -146,6 +147,10 @@


  SVC_PERROR(ena_tex());
  while (1) {
+                if (tskno == 1) {
+                    toggle_led();
+                }
+
  syslog(LOG_NOTICE, "task%d is running (%03d).   %s",
  tskno, ++n, graph[tskno-1]);
  for (i = 0; i < task_loop; i++);
Index: sample1/util.h
===================================================================
--- sample1/util.h (revision 0)
+++ sample1/util.h (revision 0)
@@ -0,0 +1,6 @@
+#ifndef UTIL_H
+#define UTIL_H
+
+void toggle_led(void);
+
+#endif
Index: sample1/Makefile
===================================================================
--- sample1/Makefile (revision 1)
+++ sample1/Makefile (working copy)
@@ -130,7 +130,7 @@
 #
 #  共通コンパイルオプションの定義
 #
-COPTS := $(COPTS) -g
+COPTS := $(COPTS) -g -D__NEWLIB__
 ifndef OMIT_WARNING_ALL
   COPTS := $(COPTS) -Wall
 endif
@@ -156,7 +156,7 @@
   APPL_CXXOBJS = $(APPLNAME).o
   APPL_COBJS =
 else
-  APPL_COBJS = $(APPLNAME).o
+  APPL_COBJS = $(APPLNAME).o util.o
 endif
 APPL_CFLAGS =
 APPL_LIBS =
Index: sample1/util.c
===================================================================
--- sample1/util.c (revision 0)
+++ sample1/util.c (revision 0)
@@ -0,0 +1,10 @@
+
+#include "LPC17xx.h"
+
+void toggle_led(void)
+{
+    uint32_t s = LPC_GPIO0->FIOPIN;
+    LPC_GPIO0->FIOCLR = s & (1 << 22);
+    LPC_GPIO0->FIOSET = ((~s) & (1 << 22));
+}
+
Index: asp/target/lpc1768_generic_gcc/target_config.c
===================================================================
--- asp/target/lpc1768_generic_gcc/target_config.c (revision 1)
+++ asp/target/lpc1768_generic_gcc/target_config.c (working copy)
@@ -114,6 +114,12 @@
  *  バナー出力用のシリアル初期化
  */
  target_uart_init(SIO_PORTID);
+
+        /*
+         * P0[22] on LPCXpresso LPC1768 is LED.
+         */
+        LPC_PINCON->PINSEL1 &= (~(3 << 12));
+        LPC_GPIO0->FIODIR |= (1 << 22);
 }




2010年10月30日土曜日

LPCXpressoを持ち歩くためのケース見つけた

LPCXpressoはコンパクトで安価なのでついついどこにでも持ち歩きたくなります。


そんな時、鞄に直接入れるのは壊れそうですし、かといって購入した時の紙袋に入れるのもスマートではありません。家の中を探してみるとありました。


10年くらい前に購入した無印良品のケース。
ウェブを調べてみると、現在は一回り大きくなったものが販売されているようです。
http://www.muji.net/store/cmdty/detail/4547315371297

実際にLPCXpressoを入れてみるとご覧の通り。


中々ぴったり入ります。
付属の静電防止ポリウレタンを付ければ安心して持ち歩く事ができます。


ということでLPCXpressoをノートパソコンと一緒に持ち歩く休日なんていうのもたまには良いかもしれません。

mbed + StarBoard Orange用R/Cサーボキット「くまちゃんサーボキット」なんて如何?

「くまちゃんサーボキット」は現在のところ架空のキット製品です。

Languages

はじめに

StarBoard Orange 専用拡張基板:R/C サーボインターフェース基板でR/Cサーボインターフェース基板について解説しました。
この文書ではR/Cサーボインターフェース基板を使った架空のキット製品、「くまちゃんサーボキット」についての使用方法について説明します。

同梱物

くまちゃんサーボキットには以下のものが含まれます。
  • R/C Servo I/F Board with 16x2 character based LCD.
  • R/C Servo Motor with gears. (GWS SERVO - S03T 2BBMG)
  • AC-DC adapter (Output capacity : 5V 2.3A)

Box

    Components

    R/C Servo I/F Board

    R/C Servo

    Gears for R/C Servo

    AC-DC Adapter

      準備

      StarBoard Orangeの設定

      LCDを取り外します。
      ピン設定を確認します。

      サーボモータの接続

      サーボモータを写真のように接続します。

      StarBoard Orangeへの取り付け

      StarBoard Orangeに取り付けます。
      サーボ基板のDC入力に付属のAC-DCアダプタを接続します。
      サーボモータの電力はAC-DCアダプタから供給されます。
      これで全体の準備は完了です。
      プログラム
      コンパイル済みプログラムとその他のリソースをまとめたZIPファイルを以下からダウンロードすることができます。
      展開したファイルをmbedのルートディレクトリに展開したらリセットボタンを押します。
      ネットワークの設定が開始されます。
      DHCPサーバからアドレスが取得できたらIPアドレスが表示されます。
      このIPアドレスはmbed上で動作しているHTTPサーバのIPアドレスです。
      それではこのウェブサーバにパソコンから接続してみましょう。
      以下のような画面が表示されます。
      試しにSERVO1のスライダをドラッグして左右に移動させてみましょう。
      スライダの動きに合わせてR/Cサーボが動作することが確認できます。
      ブラウザから制御できるということは当然「アレ」でもやりたくなります。
      もちろんできます。


      デモムービー

      まとめ

      本文書では「くまちゃんサーボキット」に関する解説を行いました。
      関連するサンプルアプリケーションをpublishしました。

      mbedを使えばTwitterから家庭用機器を簡単に制御できます。

      概要

      ここではmbed + StarBoard Orange + 拡張基板を使った活用事例としてTwitterで家庭用機器を制御するデモを御紹介します。
      StarBoard Orange用の拡張基板には赤外線送信回路が搭載されています。
      これを使ってテレビ、エアコン、コンポ、照明など沢山の機器を制御する事が可能です。
      また、mbed + StarBoard Orangeを使えばネットワークの取り扱いも簡単。
      今回はTwitterのつぶやきを拾ってきて特定のメッセージで機器を制御するようにしてみました。
      以下が全体の制御の流れです。

      機能

      • Twitterから呟きを拾ってきて、内容に応じて制御する事ができます。
      • TwitterとのインターフェースにはSuperTweetを使用します。(SuperTweetのアカウントとその設定が必要です。)
      • 今回のアプリケーション例では「Light」という文字列を発見すると、赤外線送信回路を使って照明器具を制御するようにしてみました。

      準備

      プラットフォーム

      ここでは以下のプラットフォームを使用しました。

      機器の準備

      mbedとStarBoard OrangeとExpansion Board Oneを準備します。

      イーサネットケーブルを接続して下さい。

      設定ファイル(SETUP.CFG)

      設定ファイル(SETUP.CFG)をmbedのフラッシュストレージに作成します。
      YOUR_ACCOUNTとYOUR_PASSWORDにはあなたのSuperTweetアカウント情報を入れて下さい。
      SUPERTWEET_ACCOUNT=YOUR_ACCOUNT
      SUPERTWEET_PASSWORD=YOUR_PASSWORD

      プログラム

      以下のプログラムをコンパイルしてmbedにコピーします。
      以上で準備は完了です。

      動かしてみる

      それでは実際に動作させてみましょう。
      起動するとネットワークの設定が始まります。
      設定の結果を確認します。

      動作が始まると以下のような画面になります。
      1行目にはTwitterから取得した回数が表示されます。
      2行目には制御を行った回数が表示されます。

      ここでTwitterのアカウントにキーワードを書き込んでみましょう。
      今回のキーワードは「Light」です。

      制御が完了すると応答がTwitterに書き込まれます。
      どうやらきちんとコマンドを受け付けているみたいです。

      今回のアプリケーション例では、実際に赤外線リモコン信号を送信しています。
      が、私の自宅の赤外線リモコンのコードなのであなたの家では何もおこらないでしょう。(ごめんなさい。)

      まとめ

      • 今回はネットワークから情報を取得して機器を制御する実例として、照明器具をTwitterで制御するアプリケーションを御紹介しました。
      • 今回使用したライブラリとプログラムは全てpublishしてあります。

      2010年10月29日金曜日

      StarBoard Orange - LCD I/F Universal Board

      StarBoard OrangeのLCDインターフェースの所に取り付けるユニバーサル基板を設計してみました。基板の左側にはLCD I/Fから引き出した配線を並べてあります。


      ちょっとした実験をStarBoard Orangeを使って行う場合などに便利。
      MTM06でも販売される予定です。

      2010年10月28日木曜日

      Install LPCXpresso for Linux to Ubuntu 10.10

      1. sudo apt-get install linux32 ia32*
      2. Download the IDE from http://lpcxpresso.code-red-tech.com/LPCXpresso/Linux
      3. sudo ./LPCXpresso-Linux-x86-3.7.5.100

      TOPPERS/ASP for LPC

      
      2011年2月23日の記事、3千円で楽しめるARMマイコンとRTOSの世界 (TOPPERS/ASP on LPCXpresso LPC1768)でLPCXpressoさえあればTOPPERS/ASPを楽しめるようにしました。
      
      

      TOPPERS/ASP for LPCをLPCXpresso LPC1768で試してみることにしました。
      http://sourceforge.jp/projects/toppersasp4lpc/

      1. Ubuntu 10.10をVMware Player上にインストール。
      2. 環境構築用スクリプトを使って環境を構築し、コンフィギュレータをビルド。
      3. サンプルプログラムをコンパイルするところまでを確認。

      環境構築用スクリプトはUbuntu 10.4用に構成されています。.bashrcでのPATH設定を一箇所変更する必要がありましたが、それ以外はスムーズに進行。
      次は実機での動作確認ですが、これはまた後日。

      2010年10月21日木曜日

      StarBoard Orange - Servo I/F Board (基板が上がってきたみたい)

      きばん本舗さんに基板が到着したようです。
      今回は部品実装もして頂きました。
      お楽しみアプリケーションはこれから。
      完成後にmbed.orgにpublishしますのでお待ち下さい!

      2010年10月13日水曜日

      StarBoard Orange - Servo I/F Board

      StarBoard Orangeを使った活用事例を考える中で「家で飼っているペットに定期的に餌をあげたい。」というお話を聞きました。

      実はこのお話、StarBoard Orangeのパターン設計を担当したきばん本舗さんの中の人の要望。
      で、日頃お世話になっている関係もあって、ちょっと考えてみました。
      • 「餌をあげる」という行為はラジコンサーボの動作によって実現する。
      • ラジコンサーボの電源は外部から(mbedとは別系統)供給する。
      • StarBoard OrangeのLCD部分を交換して使用可能な拡張基板として実現する。
      • LCDが無くなると単なるデグレードになってしまうので、LCDの機能も提供する。
      • 安全性を考慮してmbedとはフォトカプラでアイソレーションする。
      StarBoard OrangeのLCD I/Fには都合良くPWMOUTが3系統出ています。
      ラジコンサーボの仰角制御はこれを使う事にしました。

      先ほどの簡単な仕様を元に「えいっ!」と設計した基板の完成イメージが以下です。



      この基板はStarBoard Orangeの上側に搭載される基板です。
      ですから、私が先に設計したExpansion Boardと同時に使えます。

      LCDはシフトレジスタを経由して制御するようにしました。
      LCDはバックライトが点灯した時の感じが気持ち良いのでSD1602HUOBを選定しました。


      最近はきばん本舗さんも敏速というより爆速で、もうガーバーデータは工場にあるそうです。
      ということで来週には上がって来ますので、その頃にもう少し踏み込んだ内容をお伝えする予定です。

      あ、ちなみにStarBoard OrangeのLCD I/Fを使った実験用スルーホール基板なんていうのも上がってくるかもしれません。こちらは電源ピンとその他のピンを素直に1列に取り出す形になっています。


      2010年10月9日土曜日

      GT-720Fとmbedの接続

      GT-720FはNCピンが2ピンありますが、ここにLVTTL入出力が割り当てられている事が知られています。このピンを使った時に遭遇した問題について記載しておきます。

        
      mbedとGT-720Fを接続するケーブルを製作するのが面倒だったので、近所のパソコンショップで4ピンのオーディオ接続用ケーブルを購入してきました。実はこれが原因でおきる現象があるのです。


      下の波形をご覧ください。
      これは購入したケーブルを用いないときの波形です。

      次にこのケーブルを用いて場合の波形です。
      なんと波形がLに落ちません。
      伝送路をドライブしきれていないように見えます。

      え?と思ってケーブルを調べます。
      ケーブルの全体像はこんな感じです。

      片方をループバックして抵抗値を測ります。

      まぁ、DC的に短絡ということだけわかります。(本当はここで容量も測りたい!)

      ここからは推測です。

      このモジュールはLVTTLも出るし、RS-232Cでも出るしを狙って設計したものの、いざ出荷してみると容量性負荷に対するドライバの能力が足りないために、仕様上でNCピンにせざるを得なかったのではないだろうか、というのが私の見立て。
      頂いた情報によるとメーカのページには始めLVTTLもうたわれていたとのこと。

      まぁ、手抜きでオーディオ用ケーブルを用いるのもどうかと思いますので、きちんとケーブルは作り直します。