Lynx-EyEDの電音鍵盤 新館

広帯域制御屋の駄文とか

Arduino API互換環境eXodusinoをLPC1114 DIPで使うまとめ

f:id:Lynx-EyED:20120901144546j:plain
ここでは、Arduino API互換環境 eXodusino をLPC1114 DIPで使うにあたっての手順をまとめてみました。

(1) LPCXpresso IDEの用意
(2) eXodusinoのダウンロード
(3) マイコンへの書き込み方法
(4) eXodusinoのLPC1114FN28/102用プログラムのビルド方法

Arduinoに比べて手順がちょっと多いですが、順番に説明していきます。なお、当ブログで書いてきた内容が重複してますので、ご存知の方は(4)のみ読んでいただければと思います。(プリプロセッサの切り替えを追加しましたので)


■必要なもの
・PC
・LPCXpresso IDE 4.2.3以上
・LPC1114FN28/102(DIPのLPC1114マイコン)
・LPCXpressoの左側の、みんなに邪魔あつかいされてくびちょんぱされるアレ(LPC-Link)
・USB-UART(必須ではないけど、ほとんど必須)



(1) LPCXpresso IDEの用意
LPCXpresso IDEはCQのMARY基板などでインストールされた方も多いと思いますが、おそらくその当時のバージョンですとDIPマイコンでは書き込みやデバッグが出来ません。最新のバージョンをもう一度インストールしてください。


インストール方法はCQのページから
LPCXpresso IDEのインストール

LPCXpresso IDEダウンロードは(要ログイン)
Home Page | LPCXpresso, powered by Code Red Technologies

ここではLPCXpressoの詳細設定を取り扱うことは致しません。ダウンロード後、無事起動できる事を確認してください。



(2) eXodusinoのダウンロード
eXodusino[エクソダシノ]とは簡単に言うとArduinoの記述をLPC1114に理解させるための手段です。完全互換ではありませんが、SPIでメモリを読み書きしたり、PWMでLEDを点灯させたり、キャラクタ液晶に文字を表示したり、乱数でさいころゲームを作ったりと、かなりの部分をカバーしています。

ここからダウンロードできます。
lynxeyed-atsu/eXodusino · GitHub
f:id:Lynx-EyED:20120901141814p:plain
(図:この部分の「ZIP」とかいてあるボタンをクリック)
ダウンロード後、解凍すると「lynxeyed-atsu-eXodusino-(数字)」という謎フォルダ名になってしまうので、「exodusino」(鍵かっこ含まず)という名前に変更する。
これをLPCXpresso IDEの作業用ディレクトリに移動など、作業しやすい場所に移動してください。

LPCXpresso IDEを起動します
f:id:Lynx-EyED:20120901142635p:plain
QuickStartウィンドウの[Import Existing Projects]を選択し、先ほど移動したexodusinoフォルダを指定してください。
インポートが完了するとProject Explorerウィンドウに下図のような構成でeXodusinoプロジェクトが展開されます。
f:id:Lynx-EyED:20120901143221p:plain
※以下の作業は2012年11月以降のバージョンアップでは不要になりました

ここでエラーが出た方も多いと思います。不要なプロジェクトがあるためです。cutecom-0.22-0というフォルダ*1が不要です。
このフォルダ上で右クリックし、Resource Configurations → Exclude from Build...を選択します。
f:id:Lynx-EyED:20120901143830p:plain
続いて、Select Allを選択しOK
f:id:Lynx-EyED:20120901143940p:plain

ここでLPCXpresso IDEの必要最小限の設定はおしまいです。



(3) マイコンへの書き込み方法
書き込み方法は3つ有ります

  • LPC-Linkを使いLPCXpresso IDEから直接書き込む
  • Flash Magicを使う
  • eXodusブートローダを使う

一番最初のやり方が、煩雑な手順が無く、確実に思えます。
なおeXodusブートローダを使うとTeraTermなどシリアルコンソールから無手順UARTで書き込みが出来ます。詳細は別エントリで扱おうと思います。

LPCXpressoボードのLPC-Linkを使います。LPC-Linkはこのようなピン配置となっております。JTAGではなくSWDです。
f:id:Lynx-EyED:20130407102833p:plain
上図の右側半分を切断するか、Pカッターなどで電気的に分離し、ピンヘッダを立ててLPC-Linkを横取りします。
なお、LPC1114FN28/102のSWD書き込みに使うピンは
f:id:Lynx-EyED:20120901151721p:plain
対応するピン同士をブレッドボードやユニバーサル基板を使って配線します。
3.3V電源はLPC-Linkから貰ってしまって構わないでしょう。
このままだと、LPCXpresso IDEで書き込み時にエラーを返してくる恐れがあります。LPC-Linkに接続しているデバイスがLPC1114FN28/102である事を明示的に伝える必要があります。
LPCXpresso IDEのProject Explorer → eXodusinoプロジェクトトップフォルダ右クリック → Propertiesを選択
f:id:Lynx-EyED:20120901152810p:plain
下図のように、[C/C++ Build]の項目を展開し、[MCU settings]を選択 → LPC1114FNを選択 → [OK]
f:id:Lynx-EyED:20120901153533p:plain

これで書き込みの準備段階は完了です



(4) eXodusinoのLPC1114FN28/102用プログラムのビルド方法
今回のビルド条件は以下のようなものです

  • デバイス:LPC1114FN28/102
  • ブートローダなし(=LPCXpressoから直接書き込み)
  • マイコンの内蔵クロックで動作

この条件に合わせるようにリンカスクリプトソースコードを書き換えるのはやりたくないので、コンフィグをワンタッチで変更できるようにしました。

LPCXpresso IDEのProject Explorer → eXodusinoプロジェクトトップフォルダ右クリック → Propertiesを選択
f:id:Lynx-EyED:20120901152810p:plain
[C/C++ Build]の項目を選択 → Manage Configurations... → [LPC1114_FN28_102_DIP]を選択 → [Set Active]
[OK] → [Apply] → [OK]
f:id:Lynx-EyED:20120901155829p:plain
これで完了です。

Arduinoのスケッチに相当するファイルが[eXodusinoプロジェクトトップ] → [src] → [user_application.cpp]です。
f:id:Lynx-EyED:20120901160249p:plain
デフォルトでは9600baudで1秒ごとにマイコンが起動してからの時間を秒単位で送信します。
USB-UARTのRX,TXをLPC1114の15,16番ピンに接続するとPCからシリアルコンソールで確認する事が出来ます。
f:id:Lynx-EyED:20120901161903p:plain

#include <libmary.h>

void setup()
{
	Serial.begin(9600);		// UARTのセットアップ(9600baud)
    Serial.println("\r\nStart...");

}

void loop()
{
    Serial.println(millis()/1000,DEC);  // 起動後の経過時間を1秒ごとに更新
    delay(1000);
}

一旦、メニューのProject → Cleanを選択し、その後、Project → Build Allします。
エラーが出現しなければOKです。
いよいよマイコンへ書き込みをします。

LPCXpresso IDEメニューの黒いICマークをクリック。
f:id:Lynx-EyED:20120901162036p:plain

[Browse]を選択
f:id:Lynx-EyED:20120901162244p:plain

[eXodusinoプロジェクトフォルダ]/LPC1114FN28_102_DIP28/eXodusino.axf
が書き込むバイナリです。

これを選択し、[OK]

しばらくすると書き込みが完了し、シリアルから9600baudで
1秒ごとにカウントアップが始まります。
f:id:Lynx-EyED:20120901162738p:plain

実験風景……。
f:id:Lynx-EyED:20120901163837j:plain


おい、Lチカさせろよw

はい。

LPC1114FN28/104のピンアサインを考慮しました。

f:id:Lynx-EyED:20121125102552j:plain

上の図の水色の名称がeXodusinoで使えるピン名です。黄色の四角はそのピンの持つGPIOとは別の機能です。
P0_7とP0_4でLチカしてみました。eXodusinoはこの水色のピンのうちほぼすべてのピンでanalogWriteが使えます。(最大4チャネルまで)
LチカじゃなくてLEDホタルです。P0_7とP0_4に330~500Ωくらいの抵抗を介してLEDをそれぞれに接続すると交互に"ホタル点滅"します。

user_application.cppにこのように記述します。

#include <libmary.h>

void setup()
{
	Serial.begin(9600);		// UARTのセットアップ(9600baud)
	Serial.println("\r\nStart...");

}

void loop()
{
    for(int i = 0; i < 256; i++)
    {
    	analogWrite(P0_7,i);
    	analogWrite(P0_4,255 - i);
    	delay(1);
    }

    for(int i = 0; i < 256; i++)
        {
        	analogWrite(P0_7,255 - i);
        	analogWrite(P0_4,i);
        	delay(1);
        }
}

おしまい





*1:Mac OSXなどunix系環境でTeraTermのようなシリアルコンソールを動作させるためのソフト