0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PicoCalc版MachiKaniaでADT7410を利用する

Posted at

はじめに

PicoCalcでMachiKania phyllosomaが動作するようになったのでPicoMiteのときと同じようにいろいろなデバイス接続を試してみようと思い、まず最初にI2Cで動作する温度センサーADT7410の温度を取得して表示するプログラムをMMBasicで作成したプログラムを元に作成しました。

MachiKania phyllosomaの日本語表示機能を利用して測定閣下は日本語で表示するようにしました。

検証した環境

  • PcioCalc : コアをRaspberry Pi Pico 2 Wに交換
  • ファームウェア : MachiKania phyllosoma : 1.5.2.0 KM-1509
  • ADT7410 : 秋月電子通商のAE-ADT7410

接続

ADT7410とPicoCalcとの接続は下記のとおりです。

ADT7410 PicoCalc
VDD 3V3 OUT
SCL GP5
SDA GP4
GND GND

実体配線図を以下に示します。

PicoCalc-ADT7410_ブレッドボード.png

利用するI2Cピンの設定

MachiKaniaIでI2Cを利用する場合、SDカードのルートディレクトリに配置する設定ファイルMACHIKAP.INIの143と144行目でSDAとSCLに割り当てるピン番号を指定します。PicoCalcはGP2からGP5とGP21、GP28の合計6ピンが外部に開放されているのでその中からI2Cのチャンネル0で使用できるGP4、GP5、GP21、GP28からSDAとSCLピンを選択します。今回はGP4とGP5を使ったので下記のように指定しました。

MACHIKAP.INI
<略>
143  I2CSDA=4
144  I2CSCL=5
<略>

プログラム

以前、MMBasicで作成したプログラムを元にケンケンのホームページのMachiKania type Pのページに掲載されているプログラムI2CSAMPP.BASを参考に下記のプログラムを作成しました。測定結果はMachiKaniaの日本語表示機能を利用して表示するようにしました。日本語を含むソースファイルはUTF-8のBOMなしで保存します。

ADT7410.BAS
     1	REM ------------------------------------
     2	REM AE-ADT7410 13bit output
     3	REM I2C bus#0, SDA=GP4, SCL=GP5 100kHz
     4	REM I2C address $48
     5	REM ------------------------------------
     6	USEGRAPHIC
     7	USECLASS CKNJ16
     8	USEVAR RAW, TEMP#
     9	DIM D(1)
    10
    11	K=new(CKNJ16, "UTF-8")
    12	POINT 0, 0
    13	K.GPRT("ADT7410での温度測定", 7, 0)
    14	I2C 100 :REM 100kHz
    15
    16	DO
    17	  REM Read data
    18	  I2CREADDATA $48, D, 2
    19
    20	  REM Get raw data
    21	  RAW = PEEK(D) << 8 OR PEEK(D+1)
    22	  RAW = RAW >> 3
    23
    24	  REM Calculate temperature
    25	  IF RAW >= $1000 THEN RAW = RAW - $2000
    26	  TEMP# = FLOAT#(RAW) / 16
    27
    28	  REM Display results
    29	  POINT 0, 18
    30	  K.GPRT(STRFTIME$("%Y-%m-%d %H:%M:%S"),7, 1)
    31	  POINT 0, 36
    32	  K.GPRT("温度:"+SPRINTF$("%3.1f",TEMP#)+"℃", 7, 2)
    33
    34	  WAIT 600
    35	LOOP
    36	END

日本語を表示するにはSDカードのルートディレクトリに配布されているファイル(machikania-p-152.zip)に含まれるライブラリディレクトリLIBを保存しておく必要があります。以下がその内容です。

$ tree /Volumes/NO\ NAME/LIB/CKNJ16
/Volumes/NO NAME/LIB/CKNJ16
├── CKNJ16.BAS
├── font
│   ├── shinonome2jis.php
│   └── shinonome2uni.php
├── help.txt
├── SINONOME.JIS
└── SINONOME.UNI

2 directories, 6 files

測定手順

ADT7410での温度測定の手順は次のとおりです。プログラムでは2から5を繰り返し実行しています。ADT7410から読み取るデータはデフォルトの13ビットです。

  1. I2Cチャンネル0を開く(14行目)
  2. ADT7410のI2Cのアドレス$48から2バイト分のデータを読み込む(18行目)
  3. 読み取ったデータを13バイトの生データに変換
    1. 最初の8ビットのデータを左へ8ビットシフトし、次の8ビットのデータと加算し16ビットのデータにする(21行目)
    2. 16ビットのデータを右へ3ビットシフトして13ビットのデータにする(22行目)
  4. 2の補数の生データを正数あるいは負数に変換する
    1. MSBが1の$1000(409610)より小さい場合は正数なので何もせず、$1000以上の場合は負数になるので生データから213=8192(=$2000)を引いて負数にする(25行目)
    2. 生データを16で割り、温度を求める(26行目)
  5. 温度を取得できたらその結果を時刻と共に表示する(28〜32行目)。

日本語表示のコードはMachiKania type P/PU ver 1.5.2からダウンロードしたmachikania-p-152.zipに含まれている日本語クラスに関するファイルLIB\CKNJ16\help.txtを参考にしまして作りました。

実行結果

実行結果を以下に示します。

DSC04367.JPG

さいごに

PcioCalc版MachiKaniaとADT7410のI2C接続は特に問題なく実行できた。16ビット出力のコードを示していないが、こちらも問題なく実行できました。また、MachiKaniaは日本語表示ができる点がありがたい。

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?