MSP430G2553 Information

IMAGE11.GIF - 980BYTES G2553の特徴とG2231との違い
IMAGE11.GIF - 980BYTES GSPロガー製作(途中)→ハードウェア構成
IMAGE11.GIF - 980BYTES GSPロガー製作(第二弾) NEW
IMAGE12.GIF - 2,801BYTES

変更履歴
2011年12月11日 GPSデータロガーの第二弾
2011年9月1日  回路図修正など
2011年8月13日 回路図更新、Gセンサーはんだ付け
2011年8月12日 現在参考中の回路構成公開
2011年7月28日 新規作成(LaunchPadから分離)



GPSロガーのハードウェア設計を再検討して第二弾として開発中
部品配置の様子 上部の白い部分は電源 裏側配線の様子
ケースはタカチLCS115-F3使用 MicroSDの取り出し口






G2553の特徴とG2231との違い
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

G2553のチップを入手した目的は、ROM/RAMサイズの大きなチップでプログラムサイズを気にせずに機能を実現したかった為でした。
チップを入手して実際に作業を始めると、G2231とは違う側面が多くあることが判り、G2331/G2452と一緒にして管理するのが難しいことが判り、分離しました。

<何が違う>
今回、G2452で作成したサンプルプログラムをG2553用に修正した際に発生した主な相違点を下記に示します。
相違はこれだけではないことは明白ですが、先ずは今回使用してみた実績ベースのみ記載します。

No. 機能 違いのポイント 違いによって発生した影響
ROMサイズ 16KB
2KB(G2231)
8KB(G2452)
プログラムサイズをあまり気にせずに、プログラムが作成出来る事が何より便利です。
いずれ16KBでは足らなくなることは明白ですが・・・・
CCS V4は16KBのプログラム制限がありますが、このチップまではOKです。
RAMサイズ 512B
128B(G2231)
256B(G2452)
RAMもG2231は厳しかったですが、今回はまだ余っています。
UART USCIモジュール内で専用機能あり LaunchPadで開発する場合には、先ずハードウェアの結線を変更しなければなりません!
G2231/G2452
PC/RX <--P1.1/TXD
PC/TX -->P1.2/RXD
G2553
PC:RX -->P1.2/UCA0TXD
PC:TX <--P1.1/UCA0RXD
上記の様にUARTの送受信のピン配置が逆転しています。
従って、LauchPad上にG2553を載せてデバッグを開始すると、仮想UART経由でのPCとの
交信が出来ません。
ジャンパーピンを取り除き、クロスで結線し直すなどの対策が必要です。
G2231/G2452では、Timer機能とPortエッジ割込みをうまく使ってUART機能を実現して
いましたが、G2553では専用になったので処理は簡潔になりましたが、何故互換性を
保てなかったのでしょうか?
I2C USCIモジュール内で専用機能あり G2231/G2452ではUSIモジュールでI2Cを制御していましたが、G2553ではUSCIモジュール
となり互換性がありません。
ここでも色々と苦労しましたが、一番の違いはG2452でうまく動作していたポート機能のプル
アップ抵抗を設定してUSCIでも使おうとしましたがうまく動作しません。
大気圧センサーに入っていたSCL/SDAラインのプルアップ抵抗を折角削除したのですが、
また付けることになってしまいました

従って、ここに載せた回路図ではG2553は動作しません。
KXP84上のR4/R5の抵抗はそのままにしないといけません

<サンプルプログラム>

MSP430G2553用サンプルプログラム
   CCS V4用のみ
   G2553_LauchPad_LCD_Gsen_Baro_wrk1.zip


GPSロガー製作(途中) → ハードウェア構成  
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

<何をするのか?>
作成中のハードウェア回路構成は、このように考えています(2011年8月14日更新、9月1日最更新)。
まだ、全体を動作させるまでに至っていませんので、変更の可能性が大きいです。

定番ですが、GPSデータを受信して、Gセンサと大気圧センサ情報も併せmicroSDカードにデータ格納する機能を実現する予定です。
勿論、LCDにも必要なデータを表示します。

回路図は、EAGLEで作成しています。
今回は下記のEAGLE用ライブラリーがあるので、使ってみました。

MSP430 schematic symbols and footprints library for use with the Eagle CAD tool 

ここのサポート・ソフトウェアのところで、手に入ります。


<本筋から外れますが → Gセンサ KXP84-2050実装>

秋月電子通商では3軸加速度センサKXP84-2050の基板実装タイプだけでなく、チップ単体の販売も行われています。
チップ単体で購入した時には何とかはんだ付けが出来るだろうと楽観的でしたが、いざ実装を試みると大変なことと気づき1個目は失敗してしまいました。
下記は二度目の挑戦で成功した製作過程です。
残り3個はどうしたらいいでしょうか?

用意
する
部品
IC
KXP84-2050
基板
ダイセン 14ピンICピッチ変換基板D014 
問題点
0.5mmピッチがあればよいのだが、
少ピンでは0.65mmピッチしかない
製作
過程
ハンドニブラにて
基板をカット
基板の上に載せて一回目失敗
ラウンドとICのパッドを同じ高さが、
理想だが若干段差あり
アクリルを使用して
基板に固定
アクリルを基板に付けて、ICも固定
接着にはアロンアルファ使用

ICのピン配置は、右の写真の様にTop Viewで
合うように
最も難しいプロセス

ハンダ付け
はんだ付けはICパッド側に確実にハンダ付けしてから、基板パターンに接続

ハンダこての温度管理が重要
あまり温度を上げないこと

電線は、より線をほぐして使用
線材はオヤイデ電気で購入したこの電線
最小径品である0.12mmの導体使用

ICのPIN1が基板のPIN14に接続されるが、これで正解
コメント 配線とチェックで延べ2時間費やす
一個失敗していることを考えるとモジュール購入が一番


<本筋のハードウェア製作>

EMURATORをつないでDEBUGしている状況 LCDがトップ、その下、右側がGセンサ、左側が大気圧センサ
下段にGPSモジュール
Gセンサは動作確認済でOK LCDを取り除いたところ
MicroSDカード、MSP430G2553が見える
きれいとは言い難いが、配線は間違っていなかった(4か所DEBUG中に誤配線発見、修正済)











GPSロガー製作(第二弾)
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

<第一弾の問題点>
第一弾のハードウェア構成では、SPIとI2Cのインターフェイスを同じポートから制御することを目標にしていたのですが、格闘2ヵ月の末に諦めました。
問題は、制御の切り替え時に発生するひげがMicroSDの制御に影響を与えている様子です。
SPI単独でMicroSDの制御が上手く動作することが確認でき、I2C単独で液晶が動作するのですが、両者の組み合わせが上手く行きません。

簡単に諦めるのはつらいのですが、いつもの悪い癖で先送りで回路変更して対応することにしました。

<新しい回路構成>

新しい回路図は、このような構成にしました。
構成のポイントは下記の点です。


<ソフトウェア構成と現在の状況>

現時点(2011年12月11日)でまだソフトウェアが完成していませんが、GPSのデータを受信してMicroSDカードにデータ記録ところまで動作確認出来ました。
構成のポイントは、MicroSDのデータ記録にChaNさんPetit FAT File System Moduleを使用させていただきました。

使用ファイル名 タイムスタンプ 容量 備考
pfsample.zip
Dec 7, 2010
168KB PICのサンプルを修正して使用させていただきました

主な修正内容は、下記の様になっています。

ファイル名 修正のポイント コメント
main.c 目的が違うので参照せず .
diskio.h 変更なし .
integer.h 変更なし .
mmc.c 下記の様に
Platform dependent macros and functions needed to be modified”内を変更しました
それ以外の部分は変更していません
PICとMSP430のSPI制御の違いを修正しています
ppf.c 変更なし .
ppf.h #define _USE_READ 0 /* 1:Enable pf_read() */
#define _USE_DIR 0 /* 1:Enable pf_opendir() and pf_readdir() */
上記を禁止(=0)した
それ以外、変更なし
今回の使用目的ではデータを読む必要無し
MicroSDの内容は、取り出してPCで直接呼び込み
pic24f.h 使用せず .
monitor.c 使用せず .
monitor.h 使用せず .
<mmc.c>変更内容   (MMC_PIC = 0でコンパイルしています)
/*-------------------------------------------------------------------------*/
/* Platform dependent macros and functions needed to be modified           */
/*-------------------------------------------------------------------------*/
#define MMC_PIC 0 /* Original source is for PIC24 then modified for MSP430 */

#if MMC_PIC
#include <p24FJ64GA002.h>              /* Device include file */
#include "pic24f.h"
#else
#include "hw_config.h"                 /* hardware specific definition */
#include "usci.h"
#endif

#if MMC_PIC
#define SELECT()        _LATB15 = 0         /* CS = L */
#define DESELECT()      _LATB15 = 1         /* CS = H */
#define MMC_SEL         !_LATB15            /* CS status (true:CS == L) */
#define FORWARD(d)      uart_put(d)         /* Data forwarding function (Console out in this example) */
#else
// SEE hw_config.h
//#define SELECT()      {P2OUT &= ~0x04;}   /* CS = L */
//#define DESELECT(){P2OUT |= 0x04;}        /* CS = H */
//#define MMC_SEL       (P2OUT & 0x04 == 0) /* CS status (true:CS == L) */
#define FORWARD(d)      uart_putchar(d)     /* Data forwarding function (Console out in this example) */
#endif

#if MMC_PIC
static
void init_spi (void)            /* Initialize SPI port */
{
        SPI1CON1 = 0x013B;
        SPI1CON2 = 0x0000;
        _SPIEN = 1;
}
#else
void init_spi (void)            /* Initialize SPI port */
{
        UCB0CTL1 = UCSWRST;     /* **Initialize USCI state machine** */
        UCB0CTL0 = UCCKPL + UCMSB + UCMST + UCSYNC;     /* 3-pin, 8-bit SPI master */
        UCB0CTL1 = UCSSEL_2 + UCSWRST;  /* Use SMCLK, keep SW reset */
        UCB0BR0 = 2;            /* fSCL = SMCLK/2 = ~500kHz */
        UCB0BR1 = 0;            /* */
        UCB0CTL1 &= ~UCSWRST;   /* **Initialize USCI state machine** resume operation */
}
#endif


void dly_100us (void)           /* Delay 100 microseconds */
{
#if MMC_PIC
        UINT n = FCY / 100000;
        do {
                LATA; LATA; LATA; LATA; LATA; LATA;
        } while (--n);
#else
        register volatile unsigned t,d;
        
        //t = 10;
        t = 5;                  /* Original = 100uS but reduce 50us */
        while(t-- != 0){
                d++;
        }
#endif
}

#if MMC_PIC
// no function in the original source file
#else
static
void dly_small (void){          /* Delay some microseconds */
        register volatile unsigned d;
        
        d++;
}
#endif

static
void xmit_spi (BYTE d)          /* Send a byte to the MMC */
{
#if MMC_PIC
        SPI1BUF = d;
        while (!_SPIRBF) ;
        SPI1BUF;
#else
        while (!(IFG2 & UCB0TXIFG));
        UCB0TXBUF = d;
        while (!(IFG2 & UCB0TXIFG));
        dly_small();
#endif
}

static
BYTE rcv_spi (void)            /* Send a 0xFF to the MMC and get the received byte */
{
#if MMC_PIC
        SPI1BUF = 0xFF;
        while (!_SPIRBF) ;
        return (BYTE)SPI1BUF;
#else
        while (!(IFG2 & UCB0TXIFG));
        UCB0TXBUF = 0xff;
        while (!(IFG2 & UCB0TXIFG));
        dly_small();
        return (BYTE)UCB0RXBUF;
#endif
}


<ソフトウェア作成の注意点>
ChaNさんのPetit FAT(ぷちFatFSとも呼ぶ)は、セクター毎のバッファー512バイトを持たずにファイル操作が可能です。
MSP430G2553は、RAMが512バイトですから当然のことながら1セクター分のバッファーを持てません。
当然、RAMが少ないための制限があり、pf_write()にも重要な制限事項があり、ここのDecsciptionに書かれています。

制限事項 対応方法
ファイル生成出来ない 書込み用ファイルはあらかじめ用意しておきます
私はWRITE..TXTという名前のファイルをあらかじめ書き込んで使用しています
ファイルサイズを増やせない 現在、4GBのMicroSDに100MB程度のWRITE..TXTとしてダミーデータを書き込んでいます
タイムスタンプを更新更できない GPSデータ自体に正確な時間が記載されるので、この用途では問題ないでしょう
セクター途中で書込み開始/終了出来ない 現在、ファイルの終了制御をしていません
そのまま、電源をOFFとして動作を中断しています
この他にもあり→ChaNの英文参照のこと 一読してください


<今後>
もう少し安定したら公開したいのですが、忘年会と年末の片づけとで年越しの予感。
































































2011/9/1/ 120, 7/29 0