📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の11版が非表示)
41行目: 41行目:
*: 多くのSC1604 / SC2004モジュールは、バックライト機能を備えている。
*: 多くのSC1604 / SC2004モジュールは、バックライト機能を備えている。
*: バックライトの制御は、別の信号線や専用のコマンドを使用して行う。
*: バックライトの制御は、別の信号線や専用のコマンドを使用して行う。
<br><br>
== SC1602 / SC2004の文字コード ==
HD44780コントローラを搭載したLCDモジュールは、以下に示す文字コードセットをサポートしている。<br>
また、内蔵キャラクタジェネレータ (CGROM) の他にも、CGRAMによりユーザが任意のパターンを定義することができる。<br>
<br>
* 基本ラテン文字 (英数字および一般的な記号)
*: ASCIIコードの0x20〜0x7F (スペース、アルファベット、数字、一般的な記号)
* 日本語カタカナ
*: ASCII拡張セットの0xA0〜0xDF (半角カタカナ)
* ユーザ定義文字
*: 8つのカスタムキャラクタ (CGRAM) を作成可能
*: アドレスは0x00〜0x07
<br>
[[ファイル:HD44780 1.png|フレームなし|中央]]
<br><br>
<br><br>


98行目: 113行目:
  {
  {
     P1DIR |= RS_PIN | E_PIN | DB4_PIN | DB5_PIN | DB6_PIN | DB7_PIN;
     P1DIR |= RS_PIN | E_PIN | DB4_PIN | DB5_PIN | DB6_PIN | DB7_PIN;
    // LCDの電圧が立ち上がるまで40[mS]以上待機する必要がある
    __delay_cycles(40000);
    // 特定の命令を実行する前にBF(Busy Flag)をチェックしてはいけない
    // HDDまたはLCD制御の分野では、BFはデバイスが現在の命令を処理中かどうかを示すフラグ
    // BFが1の場合は命令処理中、0の場合は命令処理完了を表す
    // これは、"ある命令を送信する前にBFをチェックしてはいけない"ということを示唆している
    lcd_cmd(0x30);
DELAY_US(4100);
lcd_cmd(0x30);
DELAY_US(100);
lcd_cmd(0x30);
   
   
     // LCDの初期化
     // LCDの初期化
155行目: 185行目:


== SC2004 / I2C通信 ==
== SC2004 / I2C通信 ==
==== ATmega328とI2C ====
==== MSP430G2553とI2C ====
MSP430G2553において、I2Cのシリアルクロック線(SCL)とシリアルデータ線(SDA)で一般的によく使用されるピンは、以下の通りである。<br>
MSP430G2553において、I2Cのシリアルクロック線(SCL)とシリアルデータ線(SDA)で一般的によく使用されるピンは、以下の通りである。<br>
原則として、以下に示すピンをI2C通信に使用することが推奨される。<br>
原則として、以下に示すピンをI2C通信に使用することが推奨される。<br>
186行目: 216行目:
<u>多くのモジュールには、プルアップ抵抗が内蔵されているが、必要に応じて外部にプルアップ抵抗を追加する必要がある。</u><br>
<u>多くのモジュールには、プルアップ抵抗が内蔵されているが、必要に応じて外部にプルアップ抵抗を追加する必要がある。</u><br>
<br>
<br>
==== MSP430G2553の設定 ====
==== MSP430G2553の設定 ====
以下の設定を適切に行うことにより、MSP430G2553でI2C通信を正常に動作させることができる。<br>
以下の設定を適切に行うことにより、MSP430G2553でI2C通信を正常に動作させることができる。<br>
398行目: 429行目:
== ST7735 ==
== ST7735 ==
==== ハードウェア接続 ====
==== ハードウェア接続 ====
ST7735のVCC、GNDをMSP430G2553の適切な電源ピンに接続する。<br>
* ST7735のVCC、GND
ST7735のSCL、SDAをMSP430G2553のSPIピン (UCB0SCL、UCB0SDA)に接続する。
*: MSP430G2553のVCC、GNDピンに接続する。
ST7735のRESET、D/C、CS (チップセレクト) をMSP430G2553の任意のGPIOピンに接続する。<br>
*: <br>
* ST7735のSCL、SDA
*: MSP430G2553のSPIピン (UCB0SCL、UCB0SDA)に接続する。
*: <br>
*: SPI (UCB0) のピン配置
*:* UCB0SIMO (SDA) : P1.7 (14番ピン)
*:* UCB0SCLK (SCL) : P1.5 (12番ピン)
*: <br>
* ST7735のRESET、D/C、CS (チップセレクト)
*: MSP430G2553の任意のGPIOピンに接続可能であるが、一般的に以下に示すような接続を推奨する。
*:* RESET : P2.0 (8番ピン)
*:* D/C (データ/コマンド) : P2.1 (9番ピン)
*:* CS (チップセレクト) : P2.2 (10番ピン)
*: <br>
*: P2.0〜P2.2は連続したピンであるため、配線が整理しやすい。
*: P2.xポートのピンはデジタル入出力専用であるため、アナログ機能との競合が無い。
*: <br>
*: P1.0〜P1.4の中から選択することも可能であるが、P1.6はクリスタル用に予約されている可能性があるため、避けることを推奨する。
<br>
<br>
==== SPIの設定 ====
==== SPIの設定 ====
まず、SPIモジュール (USCI_B0) を初期化して、マスターモードで動作するように設定する。<br>
まず、SPIモジュール (USCI_B0) を初期化して、マスターモードで動作するように設定する。<br>
420行目: 469行目:
描画関数内では、必要なコマンドとデータをSPIを通じてST7735に送信する。<br>
描画関数内では、必要なコマンドとデータをSPIを通じてST7735に送信する。<br>
<br>
<br>
==== その他 ====
特定のコマンドや操作の後には、ディスプレイが応答するまでに一定の時間が必要な場合がある。<br>
例えば、スリープモードからの復帰 (<code>SLPOUT</code>コマンド) や ディスプレイのON / OFF (<code>DISPON</code> / <code>DISPOFF</code>コマンド) の後には、数十[mS]から数百[mS]の待機が推奨されている。<br>
<br>
これは、ディスプレイ内部の回路が安定するまでに時間が掛かるためである。<br>
必要な待機時間は、ディスプレイのデータシートに記載されていることがある。<br>
<br>
一方、反転表示の有効 / 無効を設定するコマンドの場合、ディスプレイがコマンドを処理するのに掛かる時間は非常に短いため、明示的な待機時間を入れる必要はない。<br>
しかし、もし、ディスプレイの応答が遅い場合や表示の乱れが見られる場合には、短い待機時間 (数[uS]〜数[mS]) を入れることを検討すること。<br>
<br>
==== コントローラの判別 ====
TFT LCDコントローラの判別方法を以下に示す。<br>
* ST7735
*: 解像度は128x160が標準的
* ILI9225
*: 解像度は176x220が標準的
* ILI9341
*: 解像度は240x320が標準的
<br>
例えば、PCB上に1.8 TFTという表記がある場合は、ST7735コントローラが最も一般的に使用される。<br>
また、ST7735コントローラはSPIインターフェースを使用する代表的なコントローラであるため、PCB上にCS、MOSI、MISO、SCKというSPIピンの表記がある可能性が高い。<br>
<br>
その他、確認する箇所を以下に示す。<br>
* 基板上の表記 (解像度、型番)
* ピン配置やインターフェースの種類
* 物理的なサイズと解像度の組み合わせ
<br>
==== サンプルコード ====
==== サンプルコード ====
以下の例では、描画関数を呼び出して、必要な画像やテキストをLCDに表示している。<br>
以下の例では、描画関数を呼び出して、必要な画像やテキストをLCDに表示している。<br>
453行目: 530行目:
  #define ST7735_RASET    0x2B  // 行アドレスを設定するコマンド
  #define ST7735_RASET    0x2B  // 行アドレスを設定するコマンド
  #define ST7735_RAMWR    0x2C  // メモリ書き込みコマンド
  #define ST7735_RAMWR    0x2C  // メモリ書き込みコマンド
#define ST7735_INVON    0x21  // 反転表示を有効にするコマンド
#define ST7735_INVOFF  0x20  // 反転表示を無効にするコマンド (デフォルトでは反転表示はOFF)
                              // 反転表示を有効にする場合 : ST7735_WriteCommand(ST7735_INVON);
                              // 反転表示を無効にする場合 : ST7735_WriteCommand(ST7735_INVOFF);
// カラー定義
// 16ビットRGB565カラーフォーマット (赤:5ビット, 緑:6ビット, 青:5ビットで表現)
#define ST7735_BLUE    0x001F
#define ST7735_RED      0xF800
   
   
  // ST7735の初期化関数
  // ST7735の初期化関数
572行目: 658行目:
<br><br>
<br><br>


== ST7789 ==
==== サンプルコード ====
ST7789搭載のLCDを制御する場合、基本的な手順はST7735と同様であるが、いくつかの違いがある。<br>
<br>
また、ST7789は、SPI通信のほかにDC (データ/コマンド) ピンを使用するが、一部のデバイスではSPI通信の9ビット目を使用してデータとコマンドを区別する場合もある。<br>
その場合は、SPIの設定と通信関数を適宜変更する必要がある。<br>
<br>
以下の例では、上記のサンプルコードをST7789向けに修正している。<br>
* コマンドの変更
*: ST7789では、一部の制御コマンドがST7735と異なる場合がある。
*: ST7789の具体的な初期化シーケンスやコマンドについては、デバイスのデータシートを参照して適切に実装する必要がある。
<syntaxhighlight lang="c">
// ST7789向け制御コマンド
#define ST7789_SLPOUT  0x11  // スリープモードを解除するコマンド
#define ST7789_COLMOD  0x3A  // カラーモードを設定するコマンド
#define ST7789_MADCTL  0x36  // 画面の向きを設定するコマンド
#define ST7789_DISPON  0x29  // ディスプレイをオンにするコマンド
#define ST7789_CASET    0x2A  // 列アドレスを設定するコマンド
#define ST7789_RASET    0x2B  // 行アドレスを設定するコマンド
#define ST7789_RAMWR    0x2C  // メモリ書き込みコマンド
#define ST7789_INVON    0x21  // 反転表示を有効にするコマンド
#define ST7789_INVOFF  0x20  // 反転表示を無効にするコマンド
</syntaxhighlight>
<br>
* 初期化コマンドの変更
<syntaxhighlight lang="c">
void ST7789_Init()
{
    // ...略 (リセットシーケンス等は同じ)
    // 初期化コマンドの送信
    ST7789_WriteCommand(ST7789_SLPOUT);  // スリープモードを解除
    __delay_cycles(500000);              // 500[mS]待機
    ST7789_WriteCommand(ST7789_COLMOD);  // カラーモードを設定
    ST7789_WriteData(0x55);              // 16ビットカラーモード
    ST7789_WriteCommand(ST7789_MADCTL);  // 画面の向きを設定
    ST7789_WriteData(0x00);              // 通常の向き
    ST7789_WriteCommand(ST7789_INVON);  // 反転表示を有効化
    ST7789_WriteCommand(ST7789_DISPON);  // ディスプレイをONにする
}
</syntaxhighlight>
<br>
* 解像度の変更
*: ST7789は、一般的に240x320ピクセルの解像度を持つため、描画関数で使用する座標の範囲を適切に調整する必要がある。
<syntaxhighlight lang="c">
// 背景を青で塗りつぶし、中央に赤い矩形を描画
ST7789_FillRect(0,  0, 240, 320, ST7789_BLUE);
ST7789_FillRect(60, 80, 120, 160, ST7789_RED);
</syntaxhighlight>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:MSP430]]
[[カテゴリ:MSP430]]