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でADT7310を利用する

Posted at

はじめに

今回は温度センサーADT7310とPicoCalc版MachiKaniaを接続し、SPI通信でADT7310で測定した温度データを取得できたのでその結果をまとめました。

検証した環境

次の環境で検証しました。

接続

ADT7310とPicoCalcの接続は次のとおりです。PicoCalcで外部に開放されているGP2〜GP5、GP21、GP28のうち、SPIで使用できるのはGP2〜5のみなのでこれを使用します。

ADT7310 PicoCalc
VDD 3V3 OUT
SCL GP2 SPI CLK
SDO GP4 SPI RX
SDI GP3 SPI TX
CS GP5
GND GND

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

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

利用するSPIピンの設定

MachiKania phyllosomaでSPIピンを使用する場合はSDカードのルートディレクトリに配置されている設定ファイルMACHIKAP.INIの119行目から121行めでMISO、MOSI、CLKの3つのSPIのピン番号を指定しておきます。上記の接続にあわせて下記のように設定しました。CSピンはプログラム中で指定します。

$ grep -n ^SPI /Volumes/NO\ NAME/MACHIKAP.INI
119:SPIMISO=4
120:SPIMOSI=3
121:SPICLK=2

プログラム

以前作成したMMBasicで作成したプログラムを元に、入門MachiKaniaケンケンのホームページのMachiKania type Pを参考に下記のプログラムを作成しました。

測定結果はMachiKaniaの日本語表示機能を利用して表示するようにしました。日本語を含むソースファイルはUTF-8のBOMなしで保存します。

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

KM-BASICでのCSの扱い

MachiKaniaのKM-BASICではSPIデバイスのCSピンはSPIコマンドの4番目のパラメータとして指定します。

CSの操作はSPI関連の関数実行時にCSがローになり、関数実行終了後にハイにするように作られていますので明示的な操作は必要ありません(入門MachiKaniaの36ページ)。

処理手順

以下の手順で処理を行なっている。手順2から6は繰り返し実行している。

  1. SPI通信を1MHz、1ワードを8ビット、モード3、CSピンをGP5として初期化(16行目)
  2. 連続読み取りモードコマンド($54)をSPIデバイスに出力した後、バッファDに2ワード(バイト)の温度データを読み込む(20行目)
  3. SPIデバイスの入力に32シリアルクロック周期以上の1を加えてインターフェースをリセットする。リセットしないとうまく動作してくれなかったため挿入しました。(21行目)
  4. 読み取ったデータを13バイトの生データに変換
    1. 最初の8ビットのデータを左へ8ビットシフトし、次の8ビットのデータと加算し16ビットのデータにする(24行目)
    2. 16ビットのデータを右へ3ビットシフトして13ビットのデータにする(25行目)
  5. 2の補数の生データを正数あるいは負数に変換する
    1. MSBが1の$1000(409610)より小さい場合は正数なので何もせず、$1000以上の場合は負数になるので生データから213=8192(=$2000)を引いて負数にする(28行目)
    2. 生データを16で割り、温度を求める(28行目)
  6. 温度を取得できたらその結果を時刻と共に表示する(32〜35行目)。

KM-BASICでSPIデバイスからデータを読み取る関数はパラメータに指定されたデータを書き込んだ後に1ワードだけの読み取りのSPIREADと3番目のパラメータ以降のデータを書き込んだ後に、2つ目のパラメータで指定ワード分を読み取り、1つ目のパラメータで指定したバッファに保存するSPIREADDATAの2つがある。

ここでは2ワード(2バイト)のデータを読み取るのでSPIREADDATA関数を使いました。

日本語表示

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

日本語を表示するには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

実行結果

実行画面を以下に示します。

DSC04369.JPG

さいごに

PicoCalc版MachiKaniがリリースされてADT7410での温度測定ができたので次にADT7310を試したらうまく動作せず、Xにそのことを投稿したら作者の方の目に留まり、状況を伝えるなどのやり取りをして修正が加えられて正しくデータを取得できるようになりました。素早い対応をしていただいた作者の方々に感謝です。

参考サイト

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?