TJ3Bに文字や数字を表示させる 液晶ディスプレイ(LCD)をつなげる
TJ3Bの中で正しく計算が行われているのか、値が正しいものなのかを確認したいと思ったとします。どうしたらよいでしょうか。
例えばコンパスの値を確認したいとします。今いくつなのかを見るためには、パソコンにつないでセンサーモニターで確認する必要があります。
TJ3Bの場合、LED出力ができるので、簡単な状態なら表示させることができます。
ボールを見つけたときにLEDをON、ラインを踏んだ時にLEDをON、などです。
これだけでも、反応しない原因をしらべるためには有効です。
センサーが反応したらモーターが回るはずなのに回らない、と言う場合、センサーが壊れている場合とモーターが壊れている場合の二通りの原因が考えられます。
この場合に、センサーが反応したらLEDがONとしておけば、
LEDがつかなければ、センサーが反応していないので、センサーが原因
LEDがついているのに、モーターが回っていなければ、センサーは反応しているのにモーターが回らないのだから、モーターが原因と判断できます。
センサーがどれぐらい反応しているか見たい、もしくはセンサーの2個の値がどうなっているか見たい、と言う場合はLEDでは難しくなるので、そのような場合に液晶ディスプレイ(以下、LCD)を使って表示すると便利です。
秋月電子で買える安価なLCDに表示させられたら便利です。
ソフトウェアの改良は必要ですが、候補の機器としては二つあります。
一つ目はこちらです。
I2Cの4ピンが出ていますので、ピンを間違えないように接続すれば動作します。
サイズが1つ目に比べて半分ぐらいだけど文字数は同じです。ただし、ピンが多く、ちょっとだけ自分で配線する必要があります。
ソフトウェアについて改良が必要と書きましたが具体的には、C-STYLEのプログラム内にあるテキストファイルの書き換えが必要です。Windows付属のメモ帳などでも編集できるので専用のソフトなどは不要です。
白マイコンを使っている場合は、もう記事がありますので、そちらに従ってやってみてください。
・TJ3Bで市販の液晶ディスプレイを使う
黒マイコンの場合は方法が異なりますので以下で説明します。
まず、パソコン内の
C:\Daisen
に移動してください。フォルダが一つ以上あるはずです。C-STYLEの別のバージョンをインストールしたことがある場合は二つ以上あります。一番新しいバージョンのフォルダを選びます。今なら、「C-Style V250426」になります。さらに「Build18F26Q」、さらに「BuildCsy26Q_V250426」の中を見ます。
パス
C:\Daisen\C-Style V250426\Build18F26Q\BuildCsy26Q_V250426
ファイル
D18_I2C.h
D18_I2c.c
この二つのファイルを編集します。
ただし、編集に失敗した場合ビルドができなくなる場合があるので、編集前にオリジナルのコピーを保存しておきましょう。そうすれば、もし失敗しても置き換えれば元通りです。
コピーを保存したら、いよいよそのファイルを編集します。
※もしバックアップせずに編集してしまってビルドができなくなった場合はC-STYLEを再インストールしましょう。
①D18_I2C.h を開いて、いちばん最後の行に以下をコピペして保存してください。
// 2025/05/03 D_I2C.h に追記
#define LCD_ADRS_STLI 0x7C // I2C低電圧キャラクタ液晶モジュール(16x2行)
// メーカー品番:SB1602B
// スレーブアドレス 0111110 を右に1ビットシフト
#define CONTRAST 31 // コントラスト設定。0~63
D18_I2C_EXT void lcd_cmd(BYTE row);
D18_I2C_EXT void lcd_data(BYTE row);
//D18_I2C_EXT void lcd_str(*str);
D18_I2C_EXT void lcd_init(void);②D18_I2c.c を開いて、いちばん最後の行に以下をコピペして保存してください。
//2025/05/03 追記
#ifdef USE_LCD
// 元のlcd_putX(), lcd_puts()の書き換え
//------------------------------------------------------------------------------
// 16x2 LCD 出力用
//------------------------------------------------------------------------------
void lcd_puts(BYTE row, char *str)
{
BYTE n = 0;
if (row == 0xFF) {
lcd_init();
} else if (row == 2) {
lcd_cmd(0xC0);
} else {
lcd_cmd(0x80);
}
while (n < MAX_COL) {
if (*str != null){
lcd_data(*str++);
} else {
lcd_data(SPC);
}
n++;
}
}
//-------- コマンド出力 --------
void lcd_cmd(BYTE x)
{
gI2C_Buf[0] = 0x00;
gI2C_Buf[1] = x;
i2c_send(LCD_ADRS_STLI, 2);
/* ClearかHomeか */
if((x == 0x01)||(x == 0x02)) {
wait_ms(2); // 2msec待ち
} else {
//Delay10TCYx(24); // 遅延(30us)
//wait_ms(1); // 1msec待ち
__delay_us(30);
}
}
//-------- 1文字表示 --------
void lcd_data(BYTE x)
{
gI2C_Buf[0] = 0x40;
gI2C_Buf[1] = x;
i2c_send(LCD_ADRS_STLI, 2);
//Delay10TCYx(24); // 遅延(30us)
//wait_ms(1); // 1msec待ち
__delay_us(30);
}
//-------- 初期化 --------
void lcd_init()
{
wait_ms(40);
lcd_cmd(0x38); // 8bit 2line Normal mode
lcd_cmd(0x39); // 8bit 2line Extend mode
lcd_cmd(0x14); // OSC 183Hz BIAS 1/5
/* コントラスト設定 */
lcd_cmd(0x70 | (CONTRAST & 15));
lcd_cmd(0x5c | (CONTRAST >> 4 & 3));
lcd_cmd(0x6A); // Follower for 5.0V
//lcd_cmd(0x6B); // Follower for 3.3V
wait_ms(200);
lcd_cmd(0x38); // Set Normal mode
lcd_cmd(0x0C); // Display On
lcd_cmd(0x01); // Clear Display
}
#endif // USE LCD
③D18_I2c.c の一部を編集します。先ほどの追加で関数「lcd_puts」を追加しているので、もともとあった関数のほうはコメントアウトして使えなくすることで、新しい関数に置き換えます。
具体的には、lcd_puts関数の前に
/* (1424行目)
関数の後に
*/ (1445行目)
を追加します。この記号の間に書かれたものはプログラムでは無視されるので、日本語などで覚書を書いても大丈夫です。
以上です。二つのファイルを保存してから、C-STYLEを開きましょう。
TJ3Bにはディスプレイはついていませんが、C-STYLEにはディスプレイ表示用の機能があります。
セットアップ画面の、Advanced Mode 16x2 LCD と言う項目にチェックを付けるとLCDを使うことができます。
新しいC-STYLEで、液晶ディスプレイの使い方のマニュアルが公開されていないようですが、旧C-STYLEのマニュアルをみればだいたいは同じなので、もしわからない場合はそちらを見てみましょう。
TJ3B C-Style操作編 [PDF] この資料の「1-12 LCD表示ボタン」
とりあえず何らかの値をディスプレイに出力するプログラムを書きましょう。
たとえば、CN2を1秒おきに表示するとしたらこのようなプログラムになります。
ビルド、ダウンロードを行うと、ダウンロード終了後、ディスプレイにTJ3Bのバージョン名が表示されれば成功です。
スタートボタンを押して、LCDにどのような表示がされるか確認してみてください。
コメント
コメントを投稿