どうも、先週に引き続き今週は「コイン不要機+出玉カウンタ(パターン図編)」です。 先週の回路図でサンド基板のフォトリレーが部品番号「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フラットパッケージ品なので「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ファイル) さて次回はいよいよ本体のプログラムソース解説をしていきたいと思います。 |