LPC1114 はじめに
何気なく秋月のページを見ていて、LPC1114N28が目につきました。¥180で32kBのROMがあるという。いろいろ調べてみると、またまた私は2年ほど遅れているようで、2年位前は話題になっていたようでしかも\110で出回っていたそうです。
どこかでmbedという文字を見たこともあったし、Arduinoのような感じで32ビットマイコンが扱え、なおかつ、コンパイラはフリーで使えて、書き込みはUSB-serial変換器があればできるという。
ハードルが高くなさそうなので触ってみることにしました。
1 とりあえずLチカ
2 ビルド環境を探す
3 プログラムの書き込み
4 TeraTermと通信
5 キャラクタLCDの接続
1 とりあえずLチカ 2016.03.16
いくつかのページを見せてもらった結果、次のような事項を学びました。
1 電源は3.3Vである。5Vをかけないことに注意する。
2 書き込みはブートローダーが用意されているのでUSBから Txd と Rxd があればできる。
3 書き込み時はMODEピン(24番ピン)をGNDに落としてリセットするとブートローダーモードになる。
(リセット後はMODEピンをopenにしても良い)
4 書き込み後はリセットすれば実行モードになる。
ブレッドボードを広く取りたいので基板に移せるものは別にしました。
書き込み用のシリアル変換器はR8Cで使っていたものをそのまま利用します。書き込み時にシリアルのコントロール信号を使ってモード切り替え、リセットを行うこともできるようですが、常用の変換器を使うために手動としています。
なお、600ミルのためブレッドボードの有効面積が減りますので、reset、mode、TD、RD の接続はICに隠れる穴を使っています。
まずはじめはソフトウエアの扱いがわからないので、このページのled.hexをいただいて、FlashMagicをインストールして、このページの通り実行してみました。無事書き込みができてリセットするとLEDが点滅したので、ハードはよしよし、としました。
今回の配線を青色で示しています。なお、Vccには0.1μFのパスコンを入れています。
2 ビルド環境を探す 2016.03.16
mbedではプログラムを書く、コンパイルする、のはweb上のサーバーで行い、得られた.binファイルをPCにダウンロードすると知りましたが、どこから入ってゆくのかわからずかなり探しました。そして辿り着いたのがこのページです。
右の方の緑の枠の "login or signup" をクリックして、サインアップをするとコンパイラが使えるようになります。右の方の「compiler」を選びます。platformとして mbed LPC1114FN28 を選びました。2回目からは login で入ります。
メニュー「新規」をクリックして、
テンプレートとプログラム名はデフォルトのままで、
「ok」ボタンを押すとLEDブリンクのプログラムがmain.cppに書かれます。
ここでメニュー「コンパイル」を選ぶとビルドされて、ダウンロードの窓が出ます。
ダウンロードを選び.binファイルをPCに取り込みます。
3 プログラムの書き込み 2016.03.17
続いて書き込み操作ですが、.binファイルを直接LPC1114FN28/102に書き込むソフトを作ってくれたサイトを知りました。
しなぷすのハード製作記の LPC1114専用.binファイル書き込みプログラムLPCISP です。zipファイルを解凍して、LPCISP.exeを任意の場所に置けば実行できます。
COMポート番号を入力し、binファイルを参照から選び、「書き込む」ボタンを押せば終わりです。(私の場合はその前に、resetとmodeのスイッチを同時に押し、先にresetをoff、後からmodeをoff、にする必要がありますが)
書き込み後に、resetを押すとプログラムが実行されLED1(14番ピン)が点滅しました。
良い書き込みプログラムを作っていただいて感謝の限りです。
4 TeraTermと通信 2016.03.18
マイクロコンピュータの動作メニューをPCに表示したり、メニュー番号をマイクロコンピュータに伝えたり、あるいはRTCの時刻設定をするなどTeraTermを通じてPCと通信する必要があります。そのプログラムを考えました。
// PCがら文字列(19文字まで)を受けて、リピートする。
//uart02 read string, repeat pc
// 9600bps 8bit 1stop nonparity
#include "mbed.h"
Serial pc(USBTX, USBRX);
int main() {
char s[20];
uint8_t i=0;
pc.printf(" put string\n\r");
for(i=0;i<18;i++){s[i] = pc.getc(); if(s[i-1]==13)break;}
i=0;while(s[i] != 13) {pc.putc(s[i]);i++;} pc.printf("\n\r");}
}
Serial pc(USBTX, USBRX); pcは任意の名前 (USBTX, USBRX)はmbedの登録前。
getc()、putc() が使える。
s[]の最後に\0を書いておくと、pc.printf("%s",s)が使える。
このプログラムでTeraTermから文字列+crを送れば同じ文字列を送り返すことができます。したがってこれを使えばマイクロコンピュータからメニューを表示してPCから選択項目を返すことができます。
大事な機能が確認できました。ただ、これだけのプログラムで12kB(ROMの3分の1強)を消費します。32kBの容量が心配になります。
5 キャラクタLCDの接続 2016.03.19
LCDの接続方法があるはずだと考えてサイトを探したところ、とりあえず使ってみる(LCD編)のページに出会いました。
ライブラリは TextLCD で Simon Ford 氏の作品を検索しました。(検索の方法も、プログラムの作り方も心得ていませんので試行錯誤しながら探しています。)
「新規」で lcd01 プログラムを作り(blinkyのままです)、「インポート」→「ライブラリ」→検索項目「TextLCD Simon Ford」→「名称」をクリック でライブラリが表示されます。
名称TextLCDを選択して「インポートボタン」を押すとインポートされます。
main.cppを立てて、すべてのプログラムを消して、結果的に次のプログラムを書きました。
// lcd01
#include "mbed.h"
#include "TextLCD.h"
TextLCD lcd(dp1, dp2, dp17, dp18, dp25, dp26);
// rs e d4 d5 d6 d7
int main(void) {
wait(0.1);
lcd.cls();
wait(0.1);
{ uint8_t i;
for(i=1;i<3;i++){
lcd.cls();wait(0.1);
lcd.writeCommand(12); wait(0.1); //cursor off
lcd.locate(1, 0);
lcd.printf("LCD Test lcd01");
lcd.locate(0, 1);
lcd.printf("mbed LPC1114 ku");
//wait(1);
}
}
return 0;
}
この時、TextLCD.h の void writeCommand(int command); を その少し前にある protected: の上に移動して、プロテクトを外す必要があります。LCDのカーソルをoffにするためにこの操作をしています。
この命令の後、ウエイトがいるようですので適当に入れています。
また、表示を繰り返しているのは、resetのあと乱れた文字が表示されることがあるのでこのように書き換えることにしています。この操作をすると間違いがないようです。
LCDとLPC1114の接続はプログラム中にある通り、
dp1, dp2, dp17, dp18, dp25, dp26
rs e d4 d5 d6 d7
1,2,17,18,25,26ピンに繋いでいます。なお、LCDは3.3Vで使えるように改造したものを使っています。
工事中
4 TeraTermと通信 2016.03.18
工事中