2025年12月2日火曜日

PIC16F1827 - MCC設定 I2C接続 LCD1602表示テスト

I2C接続LCD1602をMPLAB X IDE 6.2/MCC ClassicからJH7UBC畠さんのプログラムをコンパイルしLCD表示をテストしました。
XC8(v3.10)ではカウンタの表示が出来ませんでしたが、バージョンに合わせてXC8(v2.00)に変更したらカウンタが正常表示されました。









参考サイト
●PIC16F1827 I2Cインターフェース付きLCD1602表示テスト

回路図


























PICKit3プログラミングキット
互換器
※MPLAB X IDE 6.20までPICKit3が使用できる







PIC16F1827ブレットボード用基板

・USB Type-C(5V)→PIC電源供給
・Pickit3接続端子






基板にピンヘッダーハンダ後、絶縁座を端子先端に移動してICソケット足を曲げてピンヘッダーと曲げた足にハンダを流し、導通チェックしてからピンヘッダー根本に絶縁座を戻しました。
※ブレッドボード供給5V・GNDピンヘッダーピンを追加




I2C IIC LCD 1602 モジュール












MPLAB X IDE 6.20インストール
●MPLAB ®開発エコシステム ダウンロード アーカイブ









【MPLAB X v6.20】ダウンロード
画面に従ってインストールを行う

New Project












Select Device














Select Compiler






XC8(v3.10)使用した場合カウンタ表示ができませんでした。・
バージョンを合わせてXC8(v2.00)に変更したらカウンタが正常に表示されました
●XC8(v2.00)ダウンロード:MPLAB ® XC8 コンパイラ アーカイブhttps://www.microchip.com/en-us/tools-resources/archives/mplab-ecosystem#xc8




Project Name
Project Name:任意


※Encoding修正【Tools】【Options】【Enbeded 】【 Default Charset】【Shift JIS】













MCC Classic
MCC Classicを使用する































OSC





















I2C




















MSSP1






















Interrupt Module




















WPU(ウィーク・プルアップ)











Pin Manager












printf関数→C90














Generate














main.c ※下記サイトのコードと異なる部分があります。
//http://jh7ubc.web.fc2.com/pic/MCC/PIC16F1827_MCC_I2C_LCD1602.html

#include "mcc_generated_files/mcc.h"
#include "mcc_generated_files/examples/i2c1_master_example.h"

#define I2C_LCD_addr 0x27
#define LCD_EN 0b00000100//Enable
#define LCD_BL 0b00001000//Back Light
#define LCD_CMD 0x00
#define LCD_CHR 0x01
#define LCD_LINE1 0x80
#define LCD_LINE2 0xC0

//I2C LCDに1byteのdataを書き込む
void I2C_write_data(uint8_t data){
I2C1_Write1ByteRegister(I2C_LCD_addr, (data | LCD_EN | LCD_BL),(data | LCD_BL));
__delay_us(100);
}

//I2C LCDにコマンドまたは文字を送る
void LCD_write(uint8_t data, uint8_t mode){
//上位4bitを送る
I2C_write_data((data & 0xF0) | mode);
//下位4bitを送る
I2C_write_data(((data << 4) & 0xF0) | mode);
}

//I2C LCD 初期化
void LCD_init(){
__delay_ms(40);
LCD_write(0x33,LCD_CMD);//8bit mode set 2回
LCD_write(0x32,LCD_CMD);//8bit mode set 1回,4bit mode set
LCD_write(0x06,LCD_CMD);//Entry mode set
LCD_write(0x0C,LCD_CMD);//display ON,cursol OFF,blink OFF
LCD_write(0x28,LCD_CMD);//Function set 4bit mode,2line
LCD_write(0x01,LCD_CMD);//Clear display
__delay_ms(1);
}

void LCD_clear(){
LCD_write(0x01,LCD_CMD);
__delay_ms(1);
}

void LCD_home(){
LCD_write(0x02,LCD_CMD);
__delay_ms(1);
}

void LCD_cursor(uint8_t x,uint8_t y){
if(y == 0){
LCD_write(LCD_LINE1 + x,LCD_CMD);
}
if(y == 1){
LCD_write(LCD_LINE2 + x,LCD_CMD);
}
}

//文字列の表示
void LCD_str(char *str){
while(*str)
LCD_write(*str++,LCD_CHR); //pointer increment
}

//1文字表示
void putch(char ch){
LCD_write(ch,LCD_CHR);
}

void main(void)
{
// initialize the device
SYSTEM_Initialize();
// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();
// Enable the Peripheral Interrupts
INTERRUPT_PeripheralInterruptEnable();

LCD_init();
LCD_cursor(0,0);
printf("i2c LCD1602");
LCD_cursor(0,1);
printf("COUNT");
int count = 0;
while (1){
LCD_cursor(7,1);
printf("%3d",count);
count++;
__delay_ms(1000);
}
}


PICKit3 Power設定



0 件のコメント:

コメントを投稿

SI4732 - ESP32制御 DSPラジオモジュール

aitendo : SI4732 DSPラジオ モジュールを使用して、ESP32制御DSPラジオをブレッドボードに組立。スケッチはPU2CLR 氏:pu2clr/SI4735 ライブラリーESP32【OLED_ALL_IN_ONE】を選択、AM放送・7MHz SSB CW・FM放...