PICAXE奮闘記04 ロードセルの加重をHX711

今回はせっかく開通したＬＣＤ表示と新たに取り組むロードセル用IC HX711(24-Bit Analog-to-Digital Converter (ADC))で重量計作りに挑戦します。
アマゾンで購入したコンバーター付ロードセルを使います。
![基板.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606106/ab210a58-d014-1ee4-71e5-1a6d7d099f2c.jpeg)
マイコン　C.4 は出力 SCK
マイコン　C.3 は入力 DT
難しかったのはこの特性
![波形.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606106/b7b536a1-4a0c-5aca-99f0-cbdd907f60f2.jpeg)
SCKのH時間に上限があるのが厄介でした。遅いPICAXはHIGH LOW命令だとこの時間を超えてしまいます。
回避する方法がありました　pulsout　を使う方法です。　
pulsout c.4,1	'8MHZ で5us単位
そして読み出し時にSCKを入れる回数で3つのモードの切り替えを行います。
![005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606106/3a78a97b-065a-388a-57d6-f1ca610dd511.jpeg)
読み出し時に25回パルスを入れます。
チャネルA ゲイン128を使います。


```vb
'**************************************
'     I2C LCD test Display test 
'	AE-AQM1602A(KIT)
'     *3.1V to 3.5V!! Not use AA battry*3=4.5V
'     (I2C LCD 16 x 2 lines)
'	 for PICAXE 08M2
'**************************************
'	Information of Connection
'		pin1 VCC
'		pin2 serial in
'		pin3 out HX711 SCK in
'		pin4 in HX711 DT OUT
'	----
'		pin8 GND
'		pin7 serial out
'		pin6 SCL(10kohm pull up by lcdkit)
'		pin5 SDA(10kohm pull up by lcdkit)
'**************************************
'04 液晶表示に成功
'05 キャラクター登録とカタカナ表示に挑戦


#PICAXE 08M2
#NO_DATA
#NO_DEBUG	'プログラム中のDEBAGコマンドを無効にする。デバッグする時はコメントアウトする。

#macro CaractorSet(Command,Byte0,Byte1,Byte2,Byte3,Byte4,Byte5,Byte6,Byte7)
	hi2cout ($00,Command)
	pause 50
	hi2cout ($40,Byte0,Byte1,Byte2,Byte3,Byte4,Byte5,Byte6,Byte7)
	pause 50
#endmacro
#macro BitRead()
	pulsout c.4,1	'4MHz 10us unit,8MHz 5us unit
	w0 = w0*2
	if pinc.3=1 then
		inc w0
	end if
#endmacro
#macro BitSkip()
	pulsout c.4,1	'4MHz 10us unit,8MHz 5us unit
	PAUSEUS 1	'4MHz 10us unit,8MHz 5us unit
#endmacro
setfreq m8
low c.4	'SCK SET LOW
'I2C initialize
hi2csetup i2cmaster,$7C, i2cfast, i2cbyte 'AKIDUKI LCD
hi2cout ($00,$01)	'Clear display
pause 50
hi2cout ($00,$38)	'拡張コマンドOFF
pause 50		'Wait
hi2cout ($00,$0C)	'ディスプレイON カーソルOFF
pause 50		'Wait
hi2cout ($00,$06)	'エントリーモードセット
pause 300		'Wait
hi2cout ($00,$39)	'コントラスト設定を行うため拡張命令ON
pause 50		'Wait
symbol Contrast = 30	'0 - 32 - 63 $00 - $3f 液晶のコントラスト設定値
'定数同士の計算は予め計算されるため、プログラムサイズに影響無し。
symbol ContrastL1 = Contrast // 16
symbol ContrastL2 = ContrastL1 or $70
hi2cout ($00,ContrastL2)	'液晶コントラスト下位指定
pause 50
symbol ContrastH1 = Contrast / 16
symbol ContrastH2 = ContrastH1 or $54
hi2cout ($00,ContrastH2)	'液晶コントラスト上位指定
pause 50
hi2cout ($00,$6C)	'フォロワー制御設定
pause 50
hi2cout ($00,$38)	'拡張命令OFF
pause 50
hi2cout ($00,$01)	'Clear display
pause 50

'Command,Byte0,Byte1,Byte2,Byte3,Byte4,Byte5,Byte6,Byte7
'Command = Set CGRam Address $40,$48
CaractorSet($40,$00,$0A,$00,$04,$00,$11,$0E,$00)'キャラクタ0 スマイル
CaractorSet($48,$04,$0E,$0e,$0e,$1f,$00,$04,$00)'キャラクタ1　ベル

'Displaying Hello world
hi2cout ($00,$80)	'Set DDR Address
pause 50		'Wait
hi2cout ($40,"HX711 Read  ",$00,$01)

main:
	gosub LoadcellRead
	
	bintoascii w0,b6,b5,b4,b3,b2	' convert to ascii
	hi2cout ($00,$c2)	'Set DDR Address
	debug			' debug values for testing
	hi2cout ($40,b6,b5,b4,b3,b2," ADval")
	pause 200		'wait 0.2sec
	goto main
LoadcellRead:
	do
	  if pinC.3 = 0 then exit	; exit if pinC.3 is low
	loop
	let w0 = 0
	 '最上位ビットに正負の極性が残る範囲で
	 '24ビット幅のいいとこらへん16ビットを取得する。
	BitSkip
	BitSkip
	BitSkip
	
	BitRead
	BitRead
	BitRead
	BitRead
	
	BitRead
	BitRead
	BitRead
	BitRead
	
	BitRead
	BitRead
	BitRead
	BitRead
	
	BitRead
	BitRead
	BitRead
	BitRead

	BitSkip
	
	BitSkip
	BitSkip
	BitSkip
	BitSkip
	BitSkip	'25発パルスを入れた
	return
end
```
![IMG_0183.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606106/b0383511-e176-ab80-a814-2d3d43271b5f.jpeg)
![IMG_0184.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606106/b56b73aa-d70b-bbfc-7372-f568449d8860.jpeg)
![IMG_0185.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606106/1abd0491-6b7d-e577-b78c-2a009d0eaed3.jpeg)
![IMG_0186.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606106/fcc39aea-e4dc-f3d2-515b-d8b5db6b3463.jpeg)
![IMG_0188.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606106/74cb1f7f-737c-1853-d3b6-7dda93d3c2cf.jpeg)
正負の極性を2の補数で扱っているので負の数になると上限側に行きます。
この辺りもうまくやって次回、スケーリングして秤にします。