サンプルプログラムを知る。。今頃・・・

出来た事

1.サンプルプログラムがあることを知りました。

イロイロ調べてみるとサンプルプログラムがあることがわかりました。

ココの
LPC1300 series
example projects

から入手できます。


で、解凍して
UART->SRC->UART.C を見てみると

エレキジャックさんの記事にあるのとそっくりな
サンプルコードがありました。


今頃しりました。。。

デバックしてみる(レジスタ情報の確認)

出来た事

1.ブレークポイントを設定して1行づづの確認
2.レジスタ情報の確認

Txのプログラムがうまく動作したので
ちょっとデバック環境の確認をしてみます。


今日はレジスタ情報の確認です。

手順
1.ブレークポイントを作る。
 (LPC_IOCONのレジスタの動きを見てみます)
2.Peripher Tabを選択
3.IOCONにチェックする
4.Memory Tabを選択
5.スクロールしてIOCON_PIO1_7を表示させておく
6.Resume
 =ブレークポイントまで実行する
7.Step Into
=そこから一行づつ進行する。


Step Intoを2回押して37行目になると
IOCON_PIO1_7がTXDになっていることがわかります!!


ちなみにこのプログラムで使う他のレジスタを確認するのも
Peripher Tabで選択してMemory Tabで確認するのですが
cコード記載してある名前と違うのがちょっと面倒です。

Cコード記載
LPC_SYSCON->SYSAHBCLKCTRL
LPC_SYSCON->UARTCLKDIV

レジスタデバッグ
SYSCTL->SYSAHBCLKCTRL
SYSCTL->UARTCLKDIV

Cコード記載
LPC_UART->LCR
LPC_UART->DLM
LPC_UART->DLL

レジスタデバッグ
UART0->ULCR
UART0->UDLM
UART0->UDLL

UART Txのプログラムを入れてみる。

出来た事

1.UART PJT作成, Txのプログラム追加と動作確認
2.C言語をちょっと学ぶ。(文字列の変数)


1.UART PJT作成, Txのプログラム追加と動作確認

さていよいよ、プログラムに取り掛かっていきます。

まずはエレキジャックさんの記事の(6),(7)をやっていきます。

LPC1100がLPC1343になるだけです。
問題なく出来ました(^^)

Hyper terminalでHello worldがちゃんと出てます。



2.C言語をちょっと学ぶ。(文字列の変数)

次に Hello worldでやったように
文字列の変数を使って以下のようにしてみました。
エレキジャックさんの記事の該当部分と比較してください。

#include // 追加0
#include // 追加1
#include // 追加2


// Main loop
int main(void) {
uart_init(9600);

//追加3 Start
int dat =128; // EEPROMの数値データのイメージです。
char str2[3]; // 文字列の型
itoa(dat,str2,10); // 数値データを文字列に変換
char str[]="Data="; // 付加する文字列。
//追加3 End

uart_puts("%s%s",str,str2); // 変更1

// Enter an infinite loop, just incrementing a counter
volatile static int i = 0 ;
while(1) {
i++ ;
}
return 0 ;

するとエラーがでました。(><)

uart_puts("%s%s",str,str2); // 変更1

の部分が悪いようです。
too many arguments to function 'uart_puts'
というエラーが出ています。

uart_putsはエレキジャックさんが作った関数です。

int uart_puts(const char *s) {
int n;
for (n = 0; *s; s++, n++) {
uart_putc(*s);
}
return n;

どうやらuart_putのconst char *sの部分を何とか直すか

uart_puts("%s%s",str,str2)と記載した
("%s%s",str,str2)を直す必要がありそうです。

今回は下のほうの
uart_puts("%s%s",str,str2)を直しました。
どうやら%sを使った代入がダメなようです。
()内は文字列を入れなければならないようなので
以下のようにしたらうまくいきました。
(黄色い部分を変更したら、ちゃんとコンパイル出来て
 Hyperterminalでも出ました)


UART回路 Setup, 通信S/W 確認

出来た事

1.RS232CとLPC1343の接続
2.UART通信S/Wの確認

UARTの回路Setup, 通信S/W確認は
エレキジャックさんの記事 (3),(4),(5)に詳しいです。

私の場合は
コレガのUSB-RS232C変換ケーブル
RS232CレシーバICと周辺部品を半田付けした自作レベル変換IC基板

SWはハイパーターミナル
を使って構築しました。

ある程度部品があったことと、
使い慣れたソフトを選びました。

最初からの場合は
部品代もエレキジャックさんの方が安いですし
回路を作ることもエレキジャックさんの方が簡単です。

ただ、エレキジャックさんは
LPC1343基板を切断して、コネクタまでつけてますが
私の場合はコネクタをつけることがめんどくさいので
切断せずにそのまま使っています。

NXP LPC1343 コンパイラインストール & Hello world

出来た事

1.コンパイラ: LPCXpressoのインストール
2.Hello worldの動作確認
3.Hello worldを使ってC言語をちょっと学ぶ。(文字列の変数)

準備物 : 「LPCXpresso NXP LPC1343評価キット」 秋月電子通商 2000円
     USBケーブル
環境 : PC Win7 64bit


1. LPCXpressoのインストール
 トラ技のサイトを参照しました。
 ソフトのバージョンは4.1になっていましたが
 問題なくできました。(^^)

2. Hello world
 購入した LPC xpressoをUSBに接続します。
 エレキジャックさんのサイトのとおりに進行します。
 問題なく出来ました。(^^)

 注意点
 ・プロジェクトを作るときに "Semihosting C Project" を選択していますが
  printfを使ってコンパイラのコンソールウィンドウに文字を表示するためで
  通常は "C Project"を選択します。

 操作の動画です。

 また、動画作成には BB Flashbackのフリー版を使いました。
 クリックした時にマークが出てわかりやすいです。


3..Hello worldを使ってC言語をちょっと学ぶ。(文字列の変数)

C言語は素人なんです。

しかし最終目的の
「UART(RS232C)でCommandを送信して、EEPROMのDataを読み出しPC画面に表示する。」
を分解して必要な要素を勉強しなければなりません。


流れとしては

1. コマンドを受ける
2. EEPROMのデータを読み出す。
3. 読み出したEEPROMのデータを文字列に変換する。
4. "Data="をくっつけて表示する。

になります。
今回は3と4を仮定し

  • 数値データを文字列に変換
  • "Data="をつけてprintfで出力(実際はUARTで出力)

を勉強します。


イロイロと調べてみると以下のコードで達成することができました。
(最適なのかどうかは知りません。今の段階では出来ればいいと思ってます)

#include
#include // 追加1
#include // 追加2

int main(void) {

//追加3 Start
int dat =128; // EEPROMの数値データのイメージです。
char str2[3]; // 文字列の型
itoa(dat,str2,10); // 数値データを文字列に変換
char str[]="Data="; // 付加する文字列。
//追加3 End

printf("%s%s",str,str2); //変更1 表示させる。

volatile static int i = 0 ;
while(1) {
i++ ;
}
return 0 ;
}

結果の画像!

ちなみにこの画像の編集(矢印と文字)はJingを使ってます

たったコレだけでも素人には1時間以上もかかりましたとさ。。

NXP LPC1343

ブログ形式だと後々記事を振り返りにくいので
リスト記事を作ることにしました。


NXP LPC1343 開発記事 List


1)準備物
開発に必要な基本的なものです。
個別案件で追加で必要なものがあります。

部品類 :

UART用部材

or
FT232RL USBシリアル変換モジュール 秋月

資料類 :

環境 :
PC Win7 64bit(私の開発環境です)




開発1 : ADC結果をUARTを使って読み出す

ブロック図

準備物 : 可変抵抗 10kΩくらい

開発記事
 1)LPC1343 Setup
   -コンパイラインストール, Hello world - (2012.1.29)

 2)UART部分開発
  2-1)UART回路 Setup, 通信S/W 確認(2012.1.30)
  2-2)Tx開発 (エレキジャックさん記事適用)(2012.1.30)
  デバックしてみる(レジスタ情報の確認)(2012.2.1)
  サンプルプログラムを知る。。今頃・・・(2012.2.1)
  2-3)Rx開発 (エレキジャックさん記事適用 & modify)(2012.2.5)

 3)ADC開発(2012.2.13)

 4)UARTでADCを制御する
  動作結果、接続図(2012.2.18)
  コード(2012.2.18)
 5)LPC1343 UARTの限界速度と処理時間をCheck!(2012.3.8)
 6)LPC1343 ADC データ測定 リアルタイムグラフ表示(2012.4.2)


開発2 : GPIOコントロール
準備物 : 7seg LED(秋月 50円)

 1)7seg LEDを制御する
  準備編(2012.2.19)
  カウントアップ動作&コード編(2012.2.19)
  オンオフ駆動をして電力セーブする(2012.2.19)
 2)GPIOの割り込み(2013.2.14)
  

開発3 : タイマーコントロール

 1)32bit TimerでPWM(2012.2.27)
 2)32bit Timerの割り込み処理(2012.2.27)
 3)TimerのIRフラグとGPIO MASKED_ACCESS(2012.5.31)


開発4 : I2C通信

 1)LPC1343 I2C EEPROM通信 write(2012.3.3)
 2)LPC1343 I2C EEPROM通信 read(2012.3.4)


開発5 : USB Virtual COM

 1)LPC1343 USB Virtual COM (USBシリアル変換 : Example pjt使用)(2012.3.11)
 2)LPC1343 USB Virtual COMをカスタマイズ!(2012.3.13)
 3)LPC1343 USB virtual COMでローカルエコー(2012.3.24)
 4)フォトダイオード出力をAD変換 - USBでPCへデータ転送 - リアルタイムグラフ表示(2012.4.10)
 5)LPC1343 USBのソフトウェアコネクト (USB_CONNECT)(2012.5.16)

開発6 : Scilab を使ってLPC1343とシリアル通信 & データ処理

 1)Scilab 準備編(2012.4.23)
 2)回路&LPC1343準備編(2012.4.27)
 3)ADCデータのグラフ処理(2012.4.28)
 4)LPC1343とシリアル通信 & データ処理 ADCデータのリアルタイムデモ(2012.5.4)

開発7 : スリープモード
 1)スリープモード(Sleep mode)(2012.6.10)
 2)ディープスリープモード(Deep Sleep mode)移行 とGPIOからの復帰(2012.6.23)
 3)ディープパワーダウンモード(Deep Powerdown mode)移行 と復帰(2012.7.14)



IDE使い方メモ

 View消したとき, インクルードフォルダ指定(2012.3.18)
 ROM焼き (FlashへのFileダウンロード)(2012.4.8)

困った時に

LPC1343 SWDIOをGPIOに設定したときのリカバリ法

便利部品

USB-シリアル変換(UART)変換モジュール(2012.2.16)
5分でつながる!! Bluetooth module(2012.3.10)

マイコンで何をやるか?

開発する機能は以下にします。

UART(RS232C)でCommandを送信して、
EEPROMのDataを読み出しPC画面に表示する。

というものです。





私の業務(FPGA設計)では
よくPCと接続して効率化を図ろうと思っていました。
(処理途中のデータを出したりするためです)

しかし、PCと接続する際のインターフェイス部分がよく理解できず
結局挫折しました。

マイコンではPCとのインターフェイス技術がネットで見かけることができるので
PCとのデータ通信をやろうと思います。

仕事で実際にやっている
データの処理の方法などは業務に近すぎて紹介することはできないですしね。

また、会社での仕事は業務に直結していないと時間が割きにくいのが現状です。
効率化の検討をするより目の前の業務!!

今回の開発物は
EEPROMの部分(I2C)を、センサーなどのコントロールに置き換えれば
仕事にも流用可能です。

Tx,Rxの部分をUSBに置き換えることもゆくゆくはと思います。



マイコンチャレンジの経緯

マイコンを勉強しようとか、C言語を勉強しようとか思い立った事は
今回が初めてではありません。

前回は挫折しました。

一番大きな原因は
そんなに必要ではなかったということです。
 困難なことにぶち当たると
 突き破るだけのモチベーションが保てませんでした。

その他はコストと難易度のバランスです。
 自費でセミナーなどに行けば、やりたいことを教えてくれるでしょうが
 本などではつまずくと先に進むのは非常に困難です。

 前回はやはり本で済ませようと思っていました。
 ネットの情報もあまりなかったし、セミナーは高すぎると感じました。

 技術本について思うことは、入門書と専門書の技術格差が大きいことです。
入門書は基本的なことだけだし、関係ないことも多すぎる。
 やりたいことが書いてある専門書は前提知識が多すぎてわからない。

その差を埋めることができなくて結局挫折です。 




さて、今回ですが
やはり必要性という意味では、仕事上でなくてはならないわけではありません。
エンジニアとしての経験を重ねて、今まで持っているスキルで何とか仕事はこなせます。

しかし、年をとると新しいスキルを学ばなくなり、
それが後々致命傷になるよという事を実感してきました。

会社の状況も右肩上がりではないですし、高いレベルが求められるようになりました。
変化が必要な中で、過去のスキルにしがみ付き
古いスキルに固執する先輩方を見ていると
やっぱり新しい事を学ぶ事自体が重要だと思います。

加えて、ネット情報が充実してきて必要な情報が取れそうだと感じています。


そういうことで、チャレンジしようと思います。