
明けましておめでとうございます!
投稿のアイデアに感銘を受けました: 「 fire を書かずにオタクな方法でおめでとう」と「Linux用に独自のドライバーを作成」 Raspberry Piの助けを借りて、HD44780コントローラーに基づいて画面を制御する別の方法を共有することにしました。
BCM2835ライブラリ
スクリーンを制御するときのLPTポート、デモボード、その他のクールなものの主なタスクは、コンピューターから受信したデータに従ってスクリーンの右脚を引っ張ることです。
私の場合、RPIにはプログラムから直接操作できる優れた汎用入出力(GPIO)インターフェイスがあるため、コンピューターとコントロールボードの間に分離はありません。 このため、 bcm2835ライブラリーを使用することにしました。
スクリーン接続

複雑なものはないはずです。 2番目のリビジョンのラズベリーがあり、コネクタのピン配列が最初のリビジョンとわずかに異なることに注意してください。
ここで 、両方のバージョンのコネクタのピン配列を確認できます 。
管理プログラム
私は、スクリーンでの作業を便利にするために、スクリーンでの作業の最も重要な機能の簡単なライブラリを作成しました。 ライブラリはかなり粗雑で不完全ですが、現在のタスクに適しています。
まず、少し設定する必要があります。
ファイルHD44780.h
#define HD44780_DB4 RPI_V2_GPIO_P1_11 #define HD44780_DB5 RPI_V2_GPIO_P1_12 #define HD44780_DB6 RPI_V2_GPIO_P1_13 #define HD44780_DB7 RPI_V2_GPIO_P1_15 #define HD44780_RS RPI_V2_GPIO_P1_03 #define HD44780_RW RPI_V2_GPIO_P1_05 #define HD44780_E RPI_V2_GPIO_P1_07
ここで、GPIOとLCDの接点の対応を指定する必要があります。接続図が上記と異なる場合、何も変更する必要はありません。
そのため、lcd.cを修正する必要がある場合があります。
#define MAX_DISP_ROWS 2 // The HD44780 supports up to 4 rows #define MAX_DISP_COLS 16 // The HD44780 supports up to 40 columns
画面のサイズを示す必要があります。
重要:画面は5ボルトの電圧で駆動され、ラズベリーは3.3Vの論理レベルで動作し、画面はこれらのレベルを完全に理解しますが、ラズベリーは、画面が何かを転送しようとすると、 「GPIO電圧レベルは3.3 Vであり、 5 Vトレラントではありません。 ここから ボードに過電圧保護はありません」 。 したがって、画面から何も読み取らないことを強くお勧めします。 すべてがインテリジェントに機能するには、直接接続ではなく、レベルコンバーターが必要です。
プログラムでの作業は、 goodic記事からのポートでの作業とそれほど変わりません。ここで、すべての同じ制御シーケンスは、 Michael McLellanによって記述されたコードを使用したdlinyjのプロジェクトに基づく彼のプロジェクトのコードに基づいています。 オープンソースのルール。 :)
シーケンス
したがって、画面の制御シーケンス:
- \ 033 =コマンドを開始するESCシーケンスの送信
- [A =カーソルを1行上に移動
- [B =カーソルを1行下に移動する
- [C =カーソルを1つ右に移動
- [D =カーソルを1つ左に移動
- [H =カーソルを左上隅に移動-ホーム(位置0,0)
- [J =すべてクリア、カーソルをホームに戻さないでください!
- [K =行末まで消去します。カーソルをホームに戻しません!
- [M =新しいキャラクターマップ(DZ-理由を説明してください!)
- [Y =位置Y(以下のFAQを参照)
- [X =位置X(以下のFAQを参照)
- [R = CGRAMメモリ選択
- [V =スクロール可能
- [W =スクロールは無効
- [b =バックライトはオン/オフです(動作しません)。
他の便利なコマンドは、\ 033プレフィックスなしで機能します!
- \ r =復帰(現在の行の位置0にカーソルを戻します!)
- \ n =改行
- \ t =タブ(デフォルトは3文字)
唯一の変更:シーケンスの追加[iディスプレイの初期初期化を担当。
最初に画面にアクセスするときに送信する必要があります。
例:
画面を初期化します。
root@raspberrypi:/home/pi/lcd# echo -en "\033[i" | ./lcd
テキストを表示します。
root@raspberrypi:/home/pi/lcd# echo -en "\033[R0\004\016\037\004\016\037\025\016\033[J\033[HHappy New Year\041*\r\n\000\000\000 RPI LCD \000\000\000" | ./lcd

このソリューションの欠点のうち、管理者権限でプログラムを実行する必要があることに気付くことができます。これはドライバーを作成することで解決できますが、カーネルからラズベリーを盗む方法はわかりません。
ソースコード
組立:
負けないように、私はzipjpegの形で拡散しました:root@raspberrypi:/home/pi/lcd$ gcc -o lcd lcd.c HD44780.c -lrt -lbcm2835

UPD: ソース
UPD2: ドライバー 、デバイス/ dev / gpiolcdを計算しました。残りはここと同じです
UPD3: Github