LoginSignup
0
0

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

Last updated at Posted at 2023-08-26

今回はせっかく開通したLCD表示と新たに取り組むロードセル用IC HX711(24-Bit Analog-to-Digital Converter (ADC))で重量計作りに挑戦します。
アマゾンで購入したコンバーター付ロードセルを使います。
基板.jpg
マイコン C.4 は出力 SCK
マイコン C.3 は入力 DT
難しかったのはこの特性
波形.JPG
SCKのH時間に上限があるのが厄介でした。遅いPICAXはHIGH LOW命令だとこの時間を超えてしまいます。
回避する方法がありました pulsout を使う方法です。 
pulsout c.4,1 '8MHZ で5us単位
そして読み出し時にSCKを入れる回数で3つのモードの切り替えを行います。
005.JPG
読み出し時に25回パルスを入れます。
チャネルA ゲイン128を使います。

'**************************************
'     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
IMG_0184.JPG
IMG_0185.JPG
IMG_0186.JPG
IMG_0188.JPG
正負の極性を2の補数で扱っているので負の数になると上限側に行きます。
この辺りもうまくやって次回、スケーリングして秤にします。

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