コイン不要機+出玉カウンタ(パターン図編)

 どうも、先週に引き続き今週は「コイン不要機+出玉カウンタ(パターン図編)」です。
先週の回路図でサンド基板のフォトリレーが部品番号「U1」になっていましたが、正しくは「PR1」です。
ってことで今回も少々長くなります。

こちらがパターン図です↓

少し見難いですが、上半分は表示部分、下半分が本体とサンド基板でかなりコンパクトに纏めたつもりです。
本体はケースなどに収める必要がなくスイッチ部分とコネクタさえ露出していれば収縮チューブなどで絶縁するだけでよく、私は洗濯竿用のチューブをドライヤーであぶりパッケージしておりました。(スイッチ部分だけカッターでくりぬく)

本体と表示部をつなぐコネクターの表示部側「CN5」とヘッダーピン「CN6〜CN8」は基板裏面に付きます。

次に一部ですがハーネス図面です↓
ハーネス図面
ここで紹介するのは表示の都合上、代表的なメーカーの台ですがダウンロード用図面にはあと数社の物が含まれます。
ここで紹介しているハーネスは実機でテストしていますので間違いなく動作いたしますが、それ以外(図面に無い機種)に関してはコネクタ形状が同じでも動作は不明です。

さていよいよプログラムに入っていきますが、まずは表示部分から
ダイナミック表示をパルスで桁送りするのでカウンタICを使ってもよかったのですが、取り扱いや基板配置などの関係もありPIC12F629の方がコンパクトでコストも安いのでこちらに決めました。
更にコストの安いPIC12C709でも代用可能なようにソースコードは作ってあります。
;****************************************************
;	Filename:		seg_select.asm					*
;	Programname:	7seg5桁セレクター					*
;	Version:		Ver 1.0.0						*
;	Assembler:		MPLAB Ver7.50.00				*
;****************************************************
	LIST P=12F629;
	INCLUDE "p12F629.inc";
	__CONFIG _MCLRE_OFF & _INTRC_OSC_NOCLKOUT & _WDT_OFF &_PWRTE_ON
;
;	LIST P=12C509A;
;	INCLUDE "p12C509A.inc";
;	__CONFIG _MCLRE_OFF & _IntRC_OSC & _WDT_OFF

;******************************プログラム初期設定***************************
;ファイルレジスタの定義(12F629用)
WORK	EQU		0x20		;ウェイトループ用
MEM1	EQU		0x21		;ウェイトループ用
COUNT	EQU		0x22		;ウェイトループ用

;ファイルレジスタの定義(12C509A用)
;WORK	EQU		0x0C		;桁カウント
;MEM1	EQU		0x0D		;桁あふれ制御
;COUNT	EQU		0x0E		;ウェイトループ用
;
		ORG		0			;リセットベクタ

;ポートの設定(12F629用)
		BSF		STATUS,RP0	;
		CALL	3FFh		;
		MOVWF	OSCCAL		;
		MOVLW	B'00001000'	;GP3入力
		MOVWF	TRISIO		;I/O設定
		MOVLW	B'00000000'	;
		MOVWF	OPTION_REG	;
		BCF		STATUS,RP0	;
		CLRF	GPIO		;
		MOVLW	B'00000111'	;
		MOVWF	CMCON		;

;ポートの設定(12C509A用)
;		MOVLW	B'11011111'	;GP2はI/0として使用 
;		OPTION				;
;		MOVLW	B'001000'	;GP3入力
;		TRIS	GPIO		;I/O設定

;初期設定
INIT	CLRF	GPIO		;(0) → GPIO<0-5>
		MOVLW	D'251'		;
		MOVWF	MEM1		;(251) → MEM1
		CLRF	WORK		;(0) → WORK
		CALL	WAIT		;

MARKER1	BTFSS	GPIO, 3		;GPIO<3> → (1)? パルス入力
		GOTO	MARKER1		;
MARKER2	BTFSC	GPIO, 3		;GPIO<3> → (0)? パルス入力
		GOTO	MARKER2		;

;******************************プログラム本文***************************
;入力ポートの読み取り
P_IN_H	BTFSS	GPIO, 3		;GPIO<3> → (1)? パルス入力
		GOTO	P_IN_H		;
		GOTO	P_OUT		;
P_IN_L	BTFSC	GPIO, 3		;GPIO<3> → (0)? パルス入力
		GOTO	P_IN_L		;
		CLRF	GPIO		;(0) → GPIO<0-5>
		GOTO	P_IN_H		;

;ポート出力
P_OUT	MOVF	WORK, W		;WORK → (W)
		CALL	TABLE		;テーブル呼び出し
		MOVWF	GPIO		;(W) → GPIO

;メイン
SHFT_	INCF	WORK, F		;(WORK)をインクリメント
		MOVF	WORK, W		;WORK → (W)
		ADDWF	MEM1, W		;(W) + MEM1 → (W)
		BTFSC	STATUS, C	;STATUS → (0)?
		CLRF	WORK		;(0) → WORK
		GOTO	P_IN_L		;

;1msウェイトサブルーチン
WAIT	MOVLW  	D'249'			;
		MOVWF  	COUNT			;
LOOP	NOP						;
		DECFSZ 	COUNT, 1		;
		GOTO	LOOP			;
		RETURN					;リターン

;テーブル
TABLE	ADDWF	PCL,F		;
		RETLW	B'00100000'	;W=0
		RETLW	B'00010000'	;W=1
		RETLW	B'00000100'	;W=2
		RETLW	B'00000010'	;W=3
		RETLW	B'00000001'	;W=4

		END
	
フラットパッケージ品なので「AKI−PICプログラマー」などで焼く際には変換アダプターが必要です。
続いてコインサンド制御のソースコードです↓
;****************************************************
;	Filename:		sand.asm						*
;	Programname:	コインサンド制御						*
;	Version:		Ver 2.0.0						*
;	Assembler:		MPLAB Ver7.50.00				*
;****************************************************
	LIST P=12F629;
	INCLUDE "p12F629.inc";
	__CONFIG _MCLRE_OFF & _INTRC_OSC_NOCLKOUT & _WDT_OFF &_PWRTE_ON
;
;	LIST P=12C509A;
;	INCLUDE "p12C509A.inc";
;	__CONFIG _MCLRE_OFF & _IntRC_OSC & _WDT_OFF

;******************************プログラム初期設定***************************
;ファイルレジスタの定義(12F629用)
COUNT	EQU		0x20		;ウェイトループ用
COUNT2	EQU		0x21		;ウェイトループ用
COUNT3	EQU		0x22		;ウェイトループ用

;ファイルレジスタの定義(12C509A用)
;COUNT	EQU		0x0C		;ウェイトループ用
;COUNT2	EQU		0x0D		;ウェイトループ用
;COUNT3	EQU		0x0E		;ウェイトループ用

;RAポート割り当て
SENS0	SET		0			;センサー0(ホッパーセンサ)
SENS1	SET		1			;センサー1(貯留部1)
SENS2	SET		2			;センサー2(貯留部2)
MAGNET	SET		3			;電磁石
MOTOR	SET		4			;ホッパーモーター
C_OUT	SET		5			;出力

		ORG		0			;リセットベクタ

;ポートの設定(12F629用)
		BSF		STATUS,RP0	;
		CALL	3FFh		;
		MOVWF	OSCCAL		;
		MOVLW	B'00011000'	;GP3:4入力
		MOVWF	TRISIO		;I/O設定
		MOVLW	B'00000000'	;
		MOVWF	OPTION_REG	;
		BCF		STATUS,RP0	;
		CLRF	GPIO		;
		MOVLW	B'00000111'	;
		MOVWF	CMCON		;

;ポートの設定(12C509A用)
;		MOVLW	B'11011111'	;GP2はI/0として使用 
;		OPTION				;
;		MOVLW	B'00111000'	;GP3:5入力
;		TRIS	GPIO		;I/O設定

;初期設定
INIT	BCF		GPIO,SENS0	;GP0←L
		BSF		GPIO,SENS1	;GP1←H
		BCF		GPIO,SENS2	;GP2←L
		BSF		GPIO,C_OUT	;GP5←H

;******************************プログラム本文***************************
;入力ポートの読み取り
P_IN	BTFSS	GPIO,MAGNET	;GP3 → (1)?
		GOTO	MAG_ON		;電磁石ONへ
		BTFSS	GPIO,MOTOR	;GP4 → (1)?
		GOTO	MOT_ON		;ホッパーモーターONへ
		GOTO	P_IN		;

;ポート出力
MAG_ON	BCF		GPIO,SENS1	;GP1←L
		CALL	WAIT_2		;
		BSF		GPIO,SENS2	;GP2←H
MAG		BTFSS	GPIO,MAGNET	;GP3 → (1)?
		GOTO	MAG			;ループ
		BCF		GPIO,SENS2	;GP2←L
		CALL	WAIT_2		;
		BSF		GPIO,SENS1	;GP1←H
		GOTO	P_IN		;入力チェックへ

MOT_ON	BSF		GPIO,SENS0	;GP0←H
		CALL	WAIT_3		;
		BCF		GPIO,SENS0	;GP0←L
		CALL	WAIT_3		;
		BTFSS	GPIO,MOTOR	;GP4 → (1)?
		GOTO	MOT_ON		;ループ
		BCF		GPIO,C_OUT	;GP5←L
		CALL	WAIT_2		;
		BSF		GPIO,C_OUT	;GP5←H
		GOTO	P_IN		;入力チェックへ

;20msウェイトサブルーチン
WAIT_3	MOVLW  	D'20'		;ms設定
		MOVWF  	COUNT3		;
LOOP_3	CALL  	WAIT		;
		DECFSZ	COUNT3,F	;
		GOTO	LOOP_3		;
		RETURN				;リターン

;250msウェイトサブルーチン
WAIT_2	MOVLW  	D'250'		;ms設定
		MOVWF  	COUNT2		;
LOOP_2	CALL  	WAIT		;
		DECFSZ	COUNT2,F	;
		GOTO	LOOP_2		;
		RETURN				;リターン

;1msウェイトサブルーチン
WAIT	MOVLW  	D'249'		;
		MOVWF  	COUNT		;
LOOP	NOP					;
		DECFSZ 	COUNT,F		;
		GOTO	LOOP		;
		RETURN				;リターン

		END
	
ソースコードにこれといって説明は無いのですがセンサーなどを考えてハーネスで上手に繋ぎさえすればほとんどのサンドで動くはずです。
一応動作確認が取れている物はDaito製MH-170とグローリー製EMS-7です。(中古屋で安かったので)
サンド用ハーネス図面
サンド制御ハーネス図面です。
MH-170の方は間違いないのですが、EMS-7の方はテスト時の回路図が紛失しているので手元に残っているデータではコネクタ番号とかわかりませんでしたがこの接続で合っていると思います。
13番がコイン補給検出と20番はアースになっていますのでこの2本をショートさせておかないとサンドにエラーが出ます。

今回ご紹介した図面などのダウンロードはこちらから↓
全体パターン図(CADLUS X用圧縮ファイル)
本体ハーネス図面(CADLUS Circuit用drwファイル)
表示部ソースコード
サンド制御ソースコード
サンド制御ハーネス図面(CADLUS Circuit用drwファイル)

さて次回はいよいよ本体のプログラムソース解説をしていきたいと思います。

ジャンク箱に戻る