PICから始めよう、遊ぼう、楽しもう、PICキットの構築
周辺モジュールB群 製作編 その2
PICキット 周辺モジュールの製作
周辺モジュールと言っても、簡単なものばかりで、製作にてこずる事はありません。
と言うより、笑っちゃう様な物ばかりです・・・
では、B群製作編2ページ目に行きます
周辺モジュールと言っても、簡単なものばかりで、製作にてこずる事はありません。
と言うより、笑っちゃう様な物ばかりです・・・
では、B群製作編2ページ目に行きます
NO-23 SO1602有機EL表示器 16桁2行 I2C接続
電源3.3V 注意!!
秋月電子で売っているOLEDモジュールです
接続コードを付けただけの簡単な代物です
接続コードの途中に秋月電子の16×16ホールの小基板を中継させてます。
この基板で、/CSピンとSA0ピンはGNDに落としています。
プルアップ抵抗は接続されていません。
SDAinピンとSDAoutピンは接続コードコネクタ部分でショートさせています。
VDD:3.3V
I2Cインターフェイスで接続され、スレーブアドレス:78H(7AHに変更可)
基本的な制御方法はAQM1602と同じで、コマンドワードで1バイトを送信する。
AQM1602との相違点
1)基本的にイニシャライズが不要
2)2行目DDRAMアドレスがA0H~AFHとなっている(AQM1602はC0H~CFH)
ちなみに、1行目は同じ80H~8FH
3)とても見易い
4)拡張コマンドがある
結構高価なので、需要は少ないと思いますが・・・
電源3.3V系バス上でのI2C機器の一員とする場合は良いかも
有機ELディスプレイモジュールのセッティング
OLEDを購入したままでは使えないので、以下の小工作を行います。
①小基板の製作
秋月の16ホール両面基板を使用します
ここでは1~4ピンの小工作を行います
a) VCCとVSS間に0.1uのセラコン接続
b) /CS(3ピン)をVSSに接続
c) SA0(4ピン)をVSSに接続(後でVCCに切り替えできるように配線)
②接続ピンの製作
14列のピンソケットを使用します、画像を参照してください
a)7ピンはSCLとして接続
b)8ピンと9ピンははんだ付け時に両ピンを短絡接続してSDAとします
SO1602用XC8制御関数群
使用方法は、関数名が違うだけでAQM1602の関数と同じです。
SO1602制御関数群
1) SO1602_INIT(void)
この関数を呼び出さなくとも動作はしますが、一応使った方が良いかも
引数:無
戻値:無
2) SO1602_CMD(unsigned char)
OLEDコマンドを送信します
引数:8bitのOLEDコマンド
戻値:無
3) SO1620_WRTD(unsigned char)
OLEDデータ(文字コード)を送信・表示します
事前に表示開始位置アドレスを送信しておく事が必要です
連続送信しても表示位置はLCD側が自動インクリメントします
printf()等で使用する低レベル関数はこれを指定します
引数:8bitのOLEDデータ
戻値:無
4) SO1602_PUTC(unsigned char1,unsigned char2)
指定の表示位置に1文字を表示します
引数1:文字コード1バイト
引数2:表示位置アドレス1バイト
戻値:無
5) SO1602_PUTL(unsigned char1配列,unsigned char2)
指定の表示位置から文字列を表示します(最大32文字)
引数1:文字列格納配列アドレス
引数2:表示開始位置アドレス
戻値:無
6) SO1602_PUTL1(unsigned char配列)
OLED1行目の最左側から文字列を表示(最大16文字)
引数:文字列格納配列アドレス
戻値:無
7) SO1602_PUTL2(unsigned char配列)
OLED2行目の最左側から文字列を表示(最大16文字)
引数:文字列格納配列アドレス
戻値:無
8) SO1602_CLRLCD(void)
OLEDの表示をクリア
引数:無
戻値:無
9) SO1602_CONST(unsigned char)
OLEDのコントラスト調整(明るさ)を行います。
引数:コントラスト値 0x00(最少光度)~0xFF(最大光度)
戻値:無
電源3.3V 注意!!
秋月電子で売っているOLEDモジュールです
接続コードを付けただけの簡単な代物です
接続コードの途中に秋月電子の16×16ホールの小基板を中継させてます。
この基板で、/CSピンとSA0ピンはGNDに落としています。
プルアップ抵抗は接続されていません。
SDAinピンとSDAoutピンは接続コードコネクタ部分でショートさせています。
VDD:3.3V
I2Cインターフェイスで接続され、スレーブアドレス:78H(7AHに変更可)
基本的な制御方法はAQM1602と同じで、コマンドワードで1バイトを送信する。
AQM1602との相違点
1)基本的にイニシャライズが不要
2)2行目DDRAMアドレスがA0H~AFHとなっている(AQM1602はC0H~CFH)
ちなみに、1行目は同じ80H~8FH
3)とても見易い
4)拡張コマンドがある
結構高価なので、需要は少ないと思いますが・・・
電源3.3V系バス上でのI2C機器の一員とする場合は良いかも
有機ELディスプレイモジュールのセッティング
OLEDを購入したままでは使えないので、以下の小工作を行います。
①小基板の製作
秋月の16ホール両面基板を使用します
ここでは1~4ピンの小工作を行います
a) VCCとVSS間に0.1uのセラコン接続
b) /CS(3ピン)をVSSに接続
c) SA0(4ピン)をVSSに接続(後でVCCに切り替えできるように配線)
②接続ピンの製作
14列のピンソケットを使用します、画像を参照してください
a)7ピンはSCLとして接続
b)8ピンと9ピンははんだ付け時に両ピンを短絡接続してSDAとします
SO1602用XC8制御関数群
使用方法は、関数名が違うだけでAQM1602の関数と同じです。
SO1602制御関数群
1) SO1602_INIT(void)
この関数を呼び出さなくとも動作はしますが、一応使った方が良いかも
引数:無
戻値:無
2) SO1602_CMD(unsigned char)
OLEDコマンドを送信します
引数:8bitのOLEDコマンド
戻値:無
3) SO1620_WRTD(unsigned char)
OLEDデータ(文字コード)を送信・表示します
事前に表示開始位置アドレスを送信しておく事が必要です
連続送信しても表示位置はLCD側が自動インクリメントします
printf()等で使用する低レベル関数はこれを指定します
引数:8bitのOLEDデータ
戻値:無
4) SO1602_PUTC(unsigned char1,unsigned char2)
指定の表示位置に1文字を表示します
引数1:文字コード1バイト
引数2:表示位置アドレス1バイト
戻値:無
5) SO1602_PUTL(unsigned char1配列,unsigned char2)
指定の表示位置から文字列を表示します(最大32文字)
引数1:文字列格納配列アドレス
引数2:表示開始位置アドレス
戻値:無
6) SO1602_PUTL1(unsigned char配列)
OLED1行目の最左側から文字列を表示(最大16文字)
引数:文字列格納配列アドレス
戻値:無
7) SO1602_PUTL2(unsigned char配列)
OLED2行目の最左側から文字列を表示(最大16文字)
引数:文字列格納配列アドレス
戻値:無
8) SO1602_CLRLCD(void)
OLEDの表示をクリア
引数:無
戻値:無
9) SO1602_CONST(unsigned char)
OLEDのコントラスト調整(明るさ)を行います。
引数:コントラスト値 0x00(最少光度)~0xFF(最大光度)
戻値:無
NO-24 AE-BME280 環境センサー I2C
電源 3.3V 注意!!
ここでは、秋月電子で売っている標記モジュールの事を言っています。
気圧・温度・湿度がこれ一つで測定できる、一見便利そうなセンサモジュールです。
計測データは気圧と気温が20bit、相対湿度が16bitで出力されます。
そして、センサチップ内に補正データが書き込まれています。
その補正データを事前に読み込み、計測データと演算して測定値とします。
マニュアルを見ても、それら一連の補正演算処理は当局レベルでは良く解らなかった・・・
所が、スイッチサイエンス社のホームページでもBME280モジュールを扱っており、
さらに参考プログラムが公開してありました。
ここではその補正演算処理関数を使用させて頂きました。
プログラムはXC8で使用する事を想定しています。
プログラムメモリを大量消費しますので、 PIC16F1823ではメモリ不足で動きません。
できれば16KワードのPICでの使用が望ましいです。
AE-BME280ピン配置
① VDD 1.7~3.6V
② GND
③ CSB チップ選択(VDD)(注1)
④ SDA
⑤ SDO スレーブアドレスの下位ビット決定(注2)
⑥ SCK
注1)
基板のJ3をショートする
注2)
GND接続でスレーブアドレス0xEC、VDD接続で0xEEとなる
BME280用XC8制御関数群
詳細はソースファイルを参照してください
ヘッダーファイルの広域変数も確認してください
最終的な計算も必要ですので、サンプルファイルも参照してください
(1) BME280_SET_MODE(void)
センサの基本的な動作設定を行います。
この関数の設定は、下記の通り
1)congigレジスタ 設定値0xA0
スタンバイ時間(t_sb) 1000ms
IIRフィルタ OFF
2)ctrl_measレジスタ 設定値0x27
温度オーバーサンプリング(osrs_t)= ×1
圧力オーバーサンプリング(osrs_p)= ×1
センサ動作モード(mode)= ノーマルモード
3)ctrl_humレジスタ 設定値0x01
湿度オーバーサンプリング(osrs_h)= ×1
引数:無
戻値:無
(2) BME280_WRTRG(unsigned char 引数1、unsigned char 引数2)
センサのレジスタにデータを送信します
引数1:レジスタアドレス
引数2:書き込みデータ
戻値:無
(3) unsigned char BME280_RCVRG(unsigned char 引数1)
センサのレジスタ データを受信します
引数:レジスタアドレス
戻値:8bitデータ
(4) BME280_READ_TRIM(void)
専用の広域変数(dig_xx)に、それぞれのトリミングデータを格納します
引数:無
戻値:無
(5) BME280_READ_DATAL(void)
専用の広域変数(pres_raw,temp_raw,hum_raw)にトリミング前の生データ格納
引数:無
戻値:無
(6) calibration_T(signed long int 引数)
温度の補正計算を行います
戻値は ℃、分解能は0.01℃
ただし、「5123」の戻値は「51.23℃」に等しい
引数:温度生データ(temp_raw)
戻値:signed long int 温度値
(7) calibration_P(signed long int 引数)
圧力の補正計算を行います
戻値「24674867」は、24674867 / 256 =
96386.2 Pa = 963.862 hPa
引数:圧力生データ(pres_raw)
戻値:unsigned long int 圧力値
(8) calibration_H(signed long int 引数)
相対湿度の補正計算を行います
「47445」の戻値は、47445 / 1024 = 46.333%RH
引数:湿度生データ(hum_raw)
戻値:unsigned long int 湿度値
電源 3.3V 注意!!
ここでは、秋月電子で売っている標記モジュールの事を言っています。
気圧・温度・湿度がこれ一つで測定できる、一見便利そうなセンサモジュールです。
計測データは気圧と気温が20bit、相対湿度が16bitで出力されます。
そして、センサチップ内に補正データが書き込まれています。
その補正データを事前に読み込み、計測データと演算して測定値とします。
マニュアルを見ても、それら一連の補正演算処理は当局レベルでは良く解らなかった・・・
所が、スイッチサイエンス社のホームページでもBME280モジュールを扱っており、
さらに参考プログラムが公開してありました。
ここではその補正演算処理関数を使用させて頂きました。
プログラムはXC8で使用する事を想定しています。
プログラムメモリを大量消費しますので、 PIC16F1823ではメモリ不足で動きません。
できれば16KワードのPICでの使用が望ましいです。
AE-BME280ピン配置
① VDD 1.7~3.6V
② GND
③ CSB チップ選択(VDD)(注1)
④ SDA
⑤ SDO スレーブアドレスの下位ビット決定(注2)
⑥ SCK
注1)
基板のJ3をショートする
注2)
GND接続でスレーブアドレス0xEC、VDD接続で0xEEとなる
BME280用XC8制御関数群
詳細はソースファイルを参照してください
ヘッダーファイルの広域変数も確認してください
最終的な計算も必要ですので、サンプルファイルも参照してください
(1) BME280_SET_MODE(void)
センサの基本的な動作設定を行います。
この関数の設定は、下記の通り
1)congigレジスタ 設定値0xA0
スタンバイ時間(t_sb) 1000ms
IIRフィルタ OFF
2)ctrl_measレジスタ 設定値0x27
温度オーバーサンプリング(osrs_t)= ×1
圧力オーバーサンプリング(osrs_p)= ×1
センサ動作モード(mode)= ノーマルモード
3)ctrl_humレジスタ 設定値0x01
湿度オーバーサンプリング(osrs_h)= ×1
引数:無
戻値:無
(2) BME280_WRTRG(unsigned char 引数1、unsigned char 引数2)
センサのレジスタにデータを送信します
引数1:レジスタアドレス
引数2:書き込みデータ
戻値:無
(3) unsigned char BME280_RCVRG(unsigned char 引数1)
センサのレジスタ データを受信します
引数:レジスタアドレス
戻値:8bitデータ
(4) BME280_READ_TRIM(void)
専用の広域変数(dig_xx)に、それぞれのトリミングデータを格納します
引数:無
戻値:無
(5) BME280_READ_DATAL(void)
専用の広域変数(pres_raw,temp_raw,hum_raw)にトリミング前の生データ格納
引数:無
戻値:無
(6) calibration_T(signed long int 引数)
温度の補正計算を行います
戻値は ℃、分解能は0.01℃
ただし、「5123」の戻値は「51.23℃」に等しい
引数:温度生データ(temp_raw)
戻値:signed long int 温度値
(7) calibration_P(signed long int 引数)
圧力の補正計算を行います
戻値「24674867」は、24674867 / 256 =
96386.2 Pa = 963.862 hPa
引数:圧力生データ(pres_raw)
戻値:unsigned long int 圧力値
(8) calibration_H(signed long int 引数)
相対湿度の補正計算を行います
「47445」の戻値は、47445 / 1024 = 46.333%RH
引数:湿度生データ(hum_raw)
戻値:unsigned long int 湿度値
NO-25 フルカラーLEDモジュール
砲弾型のLEDで秋月電子で購入したもので、「OSTA5131A」と言う型番です。
このLEDはカソード・コモンとなっています。
5Vで各色それぞれ約15mA前後の電流を消費します。
PICからは電流を吐き出す形になります。
LED内部の各色の発光光度は、同じ電流で赤と青とに対して緑がやたら明るいです。
このままでは3色混ざっていないので、ただ3色光っているだけです。
各発光色を分散する処理をしないと、フルカラーにはなりません。
LEDに散光キャップを被せたり、乳白色アクリル板等を透過させる等は必要です。
製作に用意する部品
① 16ホール基板2連(秋月電子)
② LED「OSTA5131A」
③ ピンソケット 4連1つ、単独1つ
④ 抵抗、120Ω×2、220Ω×1
⑤ 配線コード少々
⑥ 散光キャップ
砲弾型のLEDで秋月電子で購入したもので、「OSTA5131A」と言う型番です。
このLEDはカソード・コモンとなっています。
5Vで各色それぞれ約15mA前後の電流を消費します。
PICからは電流を吐き出す形になります。
LED内部の各色の発光光度は、同じ電流で赤と青とに対して緑がやたら明るいです。
このままでは3色混ざっていないので、ただ3色光っているだけです。
各発光色を分散する処理をしないと、フルカラーにはなりません。
LEDに散光キャップを被せたり、乳白色アクリル板等を透過させる等は必要です。
製作に用意する部品
① 16ホール基板2連(秋月電子)
② LED「OSTA5131A」
③ ピンソケット 4連1つ、単独1つ
④ 抵抗、120Ω×2、220Ω×1
⑤ 配線コード少々
⑥ 散光キャップ