2015年01月27日

PICマイコンデバッグ裏技

今回はPICマイコンでデバッグする際に役立つ裏技?をご紹介します。

デバッグの方法としてデバッガー使ったり、LEDで確認したり、
LCDを接続して表示させたり・・・


ご存じな方もいらっしゃると思いますが、
おススメな方法としてマイコンでもprintfでデバッグです。


PIC16FやdsPICで簡単にprintfが使えてしまいます。
といってもデフォルトではマイコンに画面なんてありません。
画面の代わりにUartとして出力されます。







メモリを多く消費してしまうという問題点はありますが、
Uartの初期化だけ済ませればそのままprintfが使えます。


また、秋月やaitendoでUart<->USB変換モジュールがあるため、
そのままUartをRS232Cの電圧レベルに変換なしにTTLレベルで変換できます。


USB-UART変換モジュール [USB2UART-CP2102]
http://www.aitendo.com/product/2890




マイコンのUARTのTXをUSB変換モジュールのRXに接続。
またGNDを接続すればケーブル2本でパソコンに接続できます。

パソコン側にはTeraTerm等のターミナルソフトを用いて表示させます。


debug_image_tt.jpg
実際にプロジェクションボールのマイコン処理情報をPC上に表示させた例

Uartの表示が通信として間に合うように0.2秒ごとに
割り込みを入れて必要な情報を表示させています。


マイコン側とパソコン側でボーレートを合わせる必要がありますが、
初期化だけで簡単にprintfが使えるのはなかなか便利です。



以下に参考プログラム例を示します。

_____________________________
PIC16等の8bitPICの場合
_____________________________
//グローバル関数として宣言しておく
void putch(char data) {
while( ! TXIF) // check buffer
continue; // wait till ready
TXREG = data; // send data
}


//Main関数内で初期化する
    //Uart Initialize
    SYNC = 0;
    BRGH = 0;
    BRG16 = 0;
    SPBRG = 51;//ボーレートはマイコンのクロックに応じて変更

    //TXSTA
    CSRC = 1;
    TX9 = 0;
    TXEN = 1;
    SYNC = 0;
    BRGH = 0;

    //RCSTA

    SPEN = 1;    
    RX9 = 0;        
    SREN = 0;    
    CREN = 1;    
    ADDEN = 0;    
    
_____________________________
dsPIC30F等の16bitPICの場合
_____________________________

//UART 初期化 Main関数の初期化時にinit_uart()を実行させる
 void init_uart(void)
{
 
 unsigned int config1 = UART_EN & UART_IDLE_CON & 0xFFE7 & UART_NO_PAR_8BIT & UART_1STOPBIT
                     & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_DIS_ABAUD;
 
 unsigned int config2 = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE & UART_INT_RX_CHAR
                     & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
 
//ボーレートはマイコンのクロックに応じて変更
 OpenUART1(config1,config2,191);
}

_____________________________
dsPIC33F等の16bitPICの場合(ピン配置の設定を追加)
_____________________________

 //UART 初期化 Main関数の初期化時にinit_uart()を実行させる
 void init_uart(void)
{
 
 unsigned int config1 = UART_EN & UART_IDLE_CON & UART_IrDA_DISABLE & UART_MODE_FLOW &
 UART_UEN_00 & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_DIS_ABAUD &
 UART_UXRX_IDLE_ONE & UART_BRGH_SIXTEEN & UART_NO_PAR_8BIT & UART_1STOPBIT;
 
 unsigned int config2 = UART_INT_TX & UART_IrDA_POL_INV_ZERO & UART_SYNC_BREAK_DISABLED &
 UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
 

    //UART1の設定    PIC33FのI/Oピン割付 初期化 割込設定
    TRISB = TRISB & 0xFF7F;//RB7-U1RX RB6-U1TX    
    RPINR18 = 7;// RP7をU1RXに設定 入力マップ
    RPOR3bits.RP6R = 3;// RP6をU1TXに設定 出力マップ
    //ボーレートはマイコンのクロックに応じて変更
    OpenUART1(config1,config2, 246);

 }

Crescentは上記のプログラムに対していかなる責任も負いません。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック