今回はPICマイコンでデバッグする際に役立つ裏技?をご紹介します。
デバッグの方法としてデバッガー使ったり、LEDで確認したり、
LCDを接続して表示させたり・・・
デバッグの方法としてデバッガー使ったり、LEDで確認したり、
LCDを接続して表示させたり・・・
ご存じな方もいらっしゃると思いますが、
おススメな方法としてマイコンでもprintfでデバッグです。
PIC16FやdsPICで簡単にprintfが使えてしまいます。
といってもデフォルトではマイコンに画面なんてありません。
画面の代わりにUartとして出力されます。
おススメな方法としてマイコンでも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等のターミナルソフトを用いて表示させます。
マイコン側とパソコン側でボーレートを合わせる必要がありますが、
初期化だけで簡単に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は上記のプログラムに対していかなる責任も負いません。