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?

MachiKania Type PでADC、LCD出力を試す

Posted at

はじめに

アナログ温度センサーLM61をRaspberry Pi PicoのADCに接続して温度を測定し、液晶AQM0802に表示するプログラムをMachiKania type PでSDカード不要の組み込み形式で作成しました。

検証環境

以下の環境でプログラムの作成と検証を行ないました。

  • macOS : Tahoe 26.0.1
  • PicoCalc : Raspberry Pi Pico W
  • MachiKania : Phyllosoma 1.6.0

使用部品

下記の部品を使用しました。

  • 温度センサー:LM61CIZ
  • ディスプレイ:I2C接続小型8文字×2行液晶 AQM0802A

配線

LM61との接続

Raspberry Pi PicoとLM61CIZとの接続を次の表に示す。

LM61CIZのピン Picoのピン(物理ピン)
+VS(1) 3v3(5)
VOUT(2) GP27(32)
GND(3) GND(33)

液晶との接続

Raspberry Pi Picoと液晶との接続を次の表に示す。

液晶のピン Picoのピン(物理ピン)
VDD 3V3(36)
GND GND(38)
SDA GP4(6)
SCL GP5(7)

配線図

配線図を以下に示す。

LM61-AQM0802_ブレッドボード.png

処理手順

今回のプログラムの処理手順は次のとおりです。

  1. I2Cの初期化
  2. 下記の処理を5秒間隔で実行
    1. Raspberry Pi Pico WのADC1から取得したデータを元に温度計算
    2. 算出した温度の文字列を液晶の2行目に表示

I2C設定

MachiKaniaではI2Cを利用する場合は設定ファイルMACHIKAP.INIにSDAおよびSCLで使用するピン番号を指定します。今回は接続に示したGP4とGP5を使用するので下記の設定をしました。

I2CSDA=4
I2CSCL=5

液晶の初期化コード

以前、MMBasicで作成したAQM0802の初期化プログラムを元にKM-BASICのコードの書き換え、サブルーチンにしました。

REM AQM0802の初期化プログラム
LABEL ILCD
  DELAYMS 40
  GOSUB LCD, $38 : GOSUB LCD, $39
  GOSUB LCD, $14 : GOSUB LCD, $70
  GOSUB LCD, $56 : GOSUB LCD, $6C
  DELAYMS 200
  GOSUB LCD, $38 : GOSUB LCD, $0C
  GOSUB LCD, $01
  DELAYMS 2
RETURN

温度センサーデータの読み取りと変換

Raspberry Pi PicoはADCを内蔵しているのでアナログ温度センサーを接続すればディジタルに変換された値を取得できます。MachiKania type PではGP26からGP29までの4ピンがADC0からADC3として利用できます。 今回はGP27(ADC1)にアナログ温度センサーのLM61を接続しました。

入門MachiKaniaの33ページにtype PでADCを使う方法と例が示されているのでそれをそのまま使用しました。
最終的に液晶に表示するので文字列に変換しました。

REM LM61の出力値を読み取り、温度に換算
TP# = FLOAT#(ANALOG(14)) * 322 / 4000 - 60
TS$ = SPRINTF$("%3.2f",TP#)

液晶への表示

AQM0802の2行目に算出した温度を表示します。文字列出力サブルーチンWSTRに文字列を渡すと一文字ずつ取り出して表示します。
℃という文字が液晶では表示できないので°とCを組み合わせて表示しました。

GOSUB WSTR, TS$+CHR$($43)+CHR$($DF)
...
REM 文字列表示
LABEL WSTR
  VAR S
  S$ = ARGS$(1)
  FOR I = 0 TO LEN(S$)
    I2CWRITE A, $40, ASC(S$(I, 1))
  NEXT
RETURN

プログラム全体

LM61LCD.BAS
REM LM61の温度をAQM0802に表示する
A = $3E : REM AQM0820 I2C address
REM I2Cを開く
I2C 100 : REM 100kHz
GOSUB ILCD
GOSUB LCD, $01
REM 液晶の1行目にオンドと表示
GOSUB WSTR, CHR$($B5)+CHR$($DD)+CHR$($DE)+CHR$($C4)

REM 測定と表示
DO
  GOSUB LCD, $C0
  TP# = FLOAT#(ANALOG(14)) * 322 / 4000 - 60
  TS$ = SPRINTF$("%3.2f",TP#)
  PRINT TS$
  GOSUB WSTR, TS$+CHR$($43)+CHR$($DF)
  DELAYMS 5000
LOOP

END

REM 液晶初期化ルーチン
LABEL ILCD
  DELAYMS 40
  GOSUB LCD, $38 : GOSUB LCD, $39
  GOSUB LCD, $14 : GOSUB LCD, $70
  GOSUB LCD, $56 : GOSUB LCD, $6C
  DELAYMS 200
  GOSUB LCD, $38 : GOSUB LCD, $0C
  GOSUB LCD, $01
  DELAYMS 2
RETURN

REM LCDへのコマンド送信
LABEL LCD
  VAR C
  C = ARGS(1)
  I2CWRITE A, $00, C
  DELAYMS 2
RETURN

REM 文字列出力
LABEL WSTR
  VAR S
  S$ = ARGS$(1)
  FOR I = 0 TO LEN(S$)
    I2CWRITE A, $40, ASC(S$(I, 1))
  NEXT
RETURN

プログラムを組み込み形式に変換

MachiKaniaはSDカードせずに実行するプログラムをUF2ファイルに組み込み起動時に実行するにはボードごとに配布されているファイル中のembedディレクトリにあるphpスクリプトのconvert_kb.phpconvert.phpを使ってプログラムを組み込みます。自動実行するBASICのファイルの名前はMACHIKAP.BASにし、embedディレクトリの保存します。

次のように実行するとプログラムを組み込んだUF2ファイルresult.uf2が作成されます。
このUF2ファイルをRaspberry Pi PicoにBOOTSELボタンを押しながらUSBケーブルを挿入後にMacに表示されたドライブのドラッグ&ドロップします。
UF2ファイルの書き込み完了後、プログラムが自動実行されます。

$ php convert.php
Investigating uf2 file...
MACHIKAP.BAS found: maximum length: 65536 bytes
CLASS001.BAS found: maximum length: 65536 bytes
CLASS002.BAS found: maximum length: 16384 bytes
CLASS003.BAS found: maximum length: 16384 bytes
CLASS004.BAS found: maximum length: 16384 bytes
CLASS005.BAS found: maximum length: 4096 bytes
CLASS006.BAS found: maximum length: 4096 bytes
CLASS007.BAS found: maximum length: 4096 bytes
CLASS008.BAS found: maximum length: 4096 bytes
CLASS009.BAS found: maximum length: 1024 bytes
CLASS00A.BAS found: maximum length: 1024 bytes
CLASS00B.BAS found: maximum length: 1024 bytes
CLASS00C.BAS found: maximum length: 1024 bytes
CLASS00D.BAS found: maximum length: 1024 bytes
CLASS00E.BAS found: maximum length: 1024 bytes
CLASS00F.BAS found: maximum length: 1024 bytes

Investigating BASIC files in current directory...
MACHIKAP.INI found: 4296 bytes (fits to 65536 bytes area; CLASS001)
MACHIKAP.BAS found: 1001 bytes (fits to 65536 bytes area; MACHIKAP)

done! result.uf2 was created.

実行結果

プログラムの実行結果を示します。

IMG_2442.jpeg

さいごに

組み込み形式にするとコンパイルエラーを修正するのに手間がかかりましたがうまく動作させられました。

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?