「PIAST OLED」の版間の差分

提供: VoIP-Info.jp
移動先: 案内検索
(ページの作成:「OLED(SO1602AWYB-UC-XX)表示処理用プログラム ==OLED初期化== #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <unistd.h> #include <fc...」)
 
1行目: 1行目:
OLED(SO1602AWYB-UC-XX)表示処理用プログラム
+
[[カテゴリ:PIAST]]
==OLED初期化==
+
 
#include <stdio.h>
+
OLED実装時<br>
#include <stdlib.h>
+
<br>
#include <strings.h>
+
[[画像:PIAST PCB-OLED.png]]<br>
#include <unistd.h>
+
<br>
#include <fcntl.h>
+
*フロント部にOLED(16x2)表示器を付ける場合の実装
#include <errno.h>
+
*対応部品
#include <string.h>
+
:JP2の位置にピンソケットを実装
#include <sys/ioctl.h>
+
<br>
+
[[画像:PIAST_OLED_CARRY.png]]<br>
#include <linux/i2c-dev.h>
+
OLED用キャリーボードを使用すると直結可能。キャリーボードは以下のように組み立て
+
:SA0 - I2Cアドレス選択用ハンダジャンパ―、L側で0、H側で1
+
:C - パスコン用
main(int argc, char *argv[])
+
:R1,R2 - 実装しない
{
+
:注意1:アングルピンヘッダは写真の位置に実装するが、写真のように長ピン側に黒いプラスチックがあるものを選択のこと(ピンの長さの関係)
        int    i2c_fd; //I2Cバス用のファイル・ディスクリプタ
+
:注意2:アングルピンヘッダの裏面飛び出し量に注意。OLED本体のパーツと接触しないように。
+
:対応OLEDモジュール - 秋月電子扱いの16×2文字表示タイプ
        char            *i2cbus = "/dev/i2c-1"; //バス1側のデバイス名
+
::白 http://akizukidenshi.com/catalog/g/gP-08277/
        int            oled_addr = 0x3c;        //OLEDのアドレス
+
::緑 http://akizukidenshi.com/catalog/g/gP-08276/
        unsigned char  oled_reg = 0x40;        //書き込み対象のレジスタ
+
::黄 http://akizukidenshi.com/catalog/g/gP-08278/
+
:OLEDのピン数に対してOLEDキャリーボード側のピン数が少ないが、1番ピン側からあわせて取り付けること。
        int            i;                      //汎用カウンタ
+
*参考
        unsigned char  buf[4];                //書き込み用バッファ
+
:要するにI2C接続タイプのディスプレイを搭載するためのものなので他のI2Cディスプレイでも接続可能。その場合の接続はJP2のピンアサインが以下のようになっているので、これに合わせてキャリーボードを製作すること。
        char            dmesg[256];
+
:1 - GND
+
:2 - +3.3v
        if(argc < 1) exit(1);
+
:3 - NC
+
:4 - NC
        //I2Cバスをオープンする
+
:5 - NC
        if((i2c_fd = open(i2cbus, O_RDWR))<0){
+
:6 - NC
                perror("oledinit open");
+
:7 - SDA
                exit(1);
+
:8 - SCL
        }
+
:9 - NC
+
:10 - NC
        //スレーブのアドレスをioctlで設定
 
        if(ioctl(i2c_fd, I2C_SLAVE, oled_addr) < 0){
 
                perror("oledinit can't set slave");
 
                close(i2c_fd);
 
                exit(1);
 
        }
 
 
 
        usleep(100);
 
        //OLED初期化
 
        //ディスプレイ消去
 
        buf[0] = 0x00;
 
        buf[1] = 0x01;
 
        write(i2c_fd,buf,2);
 
        usleep(20);
 
        //カーソルをホームへ
 
        buf[0] = 0x00;
 
        buf[1] = 0x02;
 
        write(i2c_fd,buf,2);
 
        usleep(20);
 
        //表示ON,カーソル表示なし
 
        buf[0] = 0x00;
 
        buf[1] = 0x0c;
 
        write(i2c_fd,buf,2);
 
        usleep(20);
 
        //表示ON
 
        buf[0] = 0x00;
 
        buf[1] = 0x01;
 
        write(i2c_fd,buf,2);
 
        usleep(20);
 
 
        close(i2c_fd);
 
}
 
==OLED1行目表示用==
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <strings.h>
 
#include <unistd.h>
 
#include <fcntl.h>
 
#include <errno.h>
 
#include <string.h>
 
#include <sys/ioctl.h>
 
 
#include <linux/i2c-dev.h>
 
 
 
main(int argc, char *argv[])
 
{
 
        int    i2c_fd; //I2Cバス用のファイル・ディスクリプタ
 
 
        char            *i2cbus = "/dev/i2c-1"; //バス1側のデバイス名
 
        int            oled_addr = 0x3c;        //OLEDのアドレス
 
        unsigned char  oled_reg = 0x40;        //書き込み対象のレジスタ
 
 
        int            i;                      //汎用カウンタ
 
        unsigned char  buf[4];                //書き込み用バッファ
 
        char            dmesg[256];
 
 
        if(argc < 2) exit(1);
 
 
        //I2Cバスをオープンする
 
        if((i2c_fd = open(i2cbus, O_RDWR))<0){
 
                perror("oledinit open");
 
                exit(1);
 
        }
 
 
        //スレーブのアドレスをioctlで設定
 
        if(ioctl(i2c_fd, I2C_SLAVE, oled_addr) < 0){
 
                perror("oledinit can't set slave");
 
                close(i2c_fd);
 
                exit(1);
 
        }
 
 
        //カーソルをホームへ
 
        buf[0] = 0x00;
 
        buf[1] = 0x02;
 
        write(i2c_fd,buf,2);
 
        usleep(20);
 
 
        //1行目処理
 
        strncpy(dmesg, argv[1], 16);
 
        //メッセージ書き込み
 
        for(i=0;i<16;i++) {
 
                buf[0] = 0x40;
 
                if(dmesg[i] == 0) break;
 
                buf[1] = dmesg[i];
 
                write(i2c_fd,buf,2);
 
                usleep(20);
 
        }
 
 
        close(i2c_fd);
 
}
 
==OLED2行目表示用==
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <strings.h>
 
#include <unistd.h>
 
#include <fcntl.h>
 
#include <errno.h>
 
#include <string.h>
 
#include <sys/ioctl.h>
 
 
#include <linux/i2c-dev.h>
 
 
 
main(int argc, char *argv[])
 
{
 
        int    i2c_fd; //I2Cバス用のファイル・ディスクリプタ
 
 
        char            *i2cbus = "/dev/i2c-1"; //バス1側のデバイス名
 
        int            oled_addr = 0x3c;        //OLEDのアドレス
 
        unsigned char  oled_reg = 0x40;        //書き込み対象のレジスタ
 
 
        int            i;                      //汎用カウンタ
 
        unsigned char  buf[4];                //書き込み用バッファ
 
        char            dmesg[256];
 
 
        if(argc < 2) exit(1);
 
 
        //I2Cバスをオープンする
 
        if((i2c_fd = open(i2cbus, O_RDWR))<0){
 
                perror("oledinit open");
 
                exit(1);
 
        }
 
 
        //スレーブのアドレスをioctlで設定
 
        if(ioctl(i2c_fd, I2C_SLAVE, oled_addr) < 0){
 
                  perror("oledinit can't set slave");
 
                  close(i2c_fd);
 
                  exit(1);
 
        }
 
 
        //DDRAMを2行目へ
 
        buf[0] = 0x00;
 
        buf[1] = 0xa0;
 
        write(i2c_fd,buf,2);
 
        usleep(20);
 
 
        //2行目処理
 
        strncpy(dmesg, argv[1], 16);
 
        //メッセージ書き込み
 
        for(i=0;i<16;i++) {
 
                buf[0] = 0x40;
 
                if(dmesg[i] == 0) break;
 
                buf[1] = dmesg[i];
 
                write(i2c_fd,buf,2);
 
                usleep(20);
 
        }
 
 
        close(i2c_fd);
 
}
 

2016年3月10日 (木) 14:52時点における版


OLED実装時

PIAST PCB-OLED.png

  • フロント部にOLED(16x2)表示器を付ける場合の実装
  • 対応部品
JP2の位置にピンソケットを実装


PIAST OLED CARRY.png
OLED用キャリーボードを使用すると直結可能。キャリーボードは以下のように組み立て

SA0 - I2Cアドレス選択用ハンダジャンパ―、L側で0、H側で1
C - パスコン用
R1,R2 - 実装しない
注意1:アングルピンヘッダは写真の位置に実装するが、写真のように長ピン側に黒いプラスチックがあるものを選択のこと(ピンの長さの関係)。
注意2:アングルピンヘッダの裏面飛び出し量に注意。OLED本体のパーツと接触しないように。
対応OLEDモジュール - 秋月電子扱いの16×2文字表示タイプ
http://akizukidenshi.com/catalog/g/gP-08277/
http://akizukidenshi.com/catalog/g/gP-08276/
http://akizukidenshi.com/catalog/g/gP-08278/
OLEDのピン数に対してOLEDキャリーボード側のピン数が少ないが、1番ピン側からあわせて取り付けること。
  • 参考
要するにI2C接続タイプのディスプレイを搭載するためのものなので他のI2Cディスプレイでも接続可能。その場合の接続はJP2のピンアサインが以下のようになっているので、これに合わせてキャリーボードを製作すること。
1 - GND
2 - +3.3v
3 - NC
4 - NC
5 - NC
6 - NC
7 - SDA
8 - SCL
9 - NC
10 - NC