1. 購入物品リスト 電子部品名 用途 規格 単価 数量 合計 購入先 PIC16F84A-20/P PIC16F 秋月電子通商 カーボン抵抗 1/4W R0,R1 10kΩ 秋月電子通商 カーボン抵抗 1/4W R2,R2 追加分 300Ω 秋月

Similar documents
PowerPoint プレゼンテーション

スライド 1

Microsoft PowerPoint - 工学ゼミⅢLED1回_2018

3 4 PIC

untitled

,, ( ) 5 ma ( ) 5V V 5 6 A B C D E F G H I J , LED LED, LED, 7 LED,, 7 LED ( ) V LED VCC 5V 7 LED VCC f g f a g b a b c e d e d c dp dp VCC (

前付(念).indd

PowerPoint プレゼンテーション

正転時とは反対に回転する これが逆転である 図 2(d) の様に 4 つのスイッチ全てが OFF の場合 DC モータには電流が流れず 停止する ただし 元々 DC モータが回転していた場合は 惰性でしばらく回転を続ける 図 2(e) の様に SW2 と SW4 を ON SW1 と SW3 を O

スライド 1

PIC18 Istructios PIC16, PIC x Microchip Techology Icorporated. All Rights Reserved. PICmicro PIC18 52

3 1EEPROMElectrically Erasable PROM PROMProgrammable ROM 2 EEPROM 3

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが

BANK1 MOVLW b' ' PIC16F648A独自 MOVWF CMCON コンパレータ OFF BCF INTCON,PEIE 周辺割り込み OFF PIC16F648A独自 MOVLW B' ' RB2/TX, RB1/RX PIC16F648A独自 MOVW

Microsoft Word - 組込みプログラミング2018テキスト

卒 業 研 究 報 告

PowerPoint プレゼンテーション

64 松尾邦昭 2. 無線送受信装置 SANWA 製のラジコン送受信装置は, その機能性の豊富さと価格の安さを理由に多くのラジコン ファンに愛用されており, 今回使用した VG6000は, チャンネル数が6チャンネルあり, ヘリコプター制御用に設計 開発され使用されているものだが, 我々はこれをロボ

実習内容 PIC18C242 のポート B に接続した LED を点滅させます ( 他の実習と同じ内容です ) 8 個の LED に表示される値が +3 ずつインクリメントします MPLAB を使って MPASM アセンブラのソース ファイルをアセンブルします MPLAB とソース ファイルは配布し

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

スライド 1

から付与します さらに, ゼロプレッシャー ICソケットの空き部分を使って, タイマー ICである555の動作チェックができます ユニバーサル基板の一部に555 用の発振回路を構成しています 555をソケットに差し込んで電源スイッチを入れると,ICが良品の場合は LEDが点滅します LEDが点滅しな

余白 : 上下 25.4mm, 左右 19mm (Word2012 での やや狭い 設定 ) マイコンプログラミング演習 I レポート 1 実験日 提出日 回路構築 /LED を用いた I/O 制御 [16pt] 班員と担当責任者第 0 班レポート作成

Microsoft Word - 工学ゼミ3_テキスト

Microsoft Word - テキスト.docx

PowerPoint プレゼンテーション

PIC (, 2, 3 ) PIC ( 1, 2, 3 ) 1 2 (, 2 ) PIC ( 1, 2 ) 2.1 (p.34) define #define (define ) (p.61) 1 30 (RD 7 /P SP 7 ) 32 (V DD ) IC

<4D F736F F D C835E838A EA993AE90A78CE CC8A4A94AD2E646F63>

三菱電機マイコン機器ソフトウエア株式会社

Microsoft Word - 工学ゼミ3_テキスト

AKI-PIC16F877A開発キット (Ver1

回路 7 レジスタ ( 同期イネーブル及び非同期リセット付 ) 入力データを保持するのに用いる記憶素子 使用用途として, マイクロプロセッサ内部で演算や実行状態の保持に用いられる Fig4-2 のレジスタは, クロック信号の立ち上がり時かつ 信号が 1 のときに外部からの 1 ビットデータ R をレ

スライド 1

Microsoft Word - 実験4_FPGA実験2_2015

回路 : Vdd GND 回路図と呼べるようなものではありません オシレータは外部 ( セラミック発振子 ) なので GP4 と GP5 は使えません 四角の枠内はモジュールなので ここから VDD GND TX RX の4 本をつなぐだけです 測定端子 (GP0) は 1MΩの抵抗と 2MΩの半固

81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

序文

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

回路図 部品表 部品番号 型番 個数 U PIC6F823 I/ST (TSSOP 4pin) R 00Ω (/0W, 608) R2 - R9 360Ω (/0W, 608) 8 C μf (25V, 608) LED LN56RA CN ロープロファイルピンソケット CN2 ロープロファイルピン

PIC

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

PIC12C5XX日本語データシート

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

IrDA型赤外線タグ仕様

Jan/25/2019 errata_c17m11_10 S1C17 マニュアル正誤表 項目 リセット保持時間 対象マニュアル発行 No. 項目ページ S1C17M10 テクニカルマニュアル システムリセットコントローラ (SRC) 特性 19-3 S1C17M20/M

スライド 1

CommCheckerManual_Ver.1.0_.doc

SP-1221 LIN I/F 基板 ユーザーズマニュアル 作成日 :2017 年 10 月 17 日

スライド 1

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

HDLトレーナーサンプルプログラム説明書

Microsoft Word - PIC-USBマイコンボード_v1-02@WEB公開用資料.docx

Taro-テキスト.jtd

Microsoft Word - FCTT_CS_Mod( )Jver1.doc

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2016/06/23 R03 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controll

前回の内容 マイクロコンピュータにおけるプログラミング PC上で作成 コンパイル マイコンに転送 実行 プログラムを用いて外部の装置を動作させる LED turnonled turnoffled LCD printf プログラムを用いて外部の装置の状態を読み取る プッシュスイッチ getpushsw

USB_IR_Remote_Controller_Advance_Library 取扱説明書 2015/8/21 Assembly Desk USB_IR_Remote_Controller_Advance_Library を使用すると 弊社製 USB IR Remote controller Ad

スライド 1

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

DVIOUT-soturon

目次 1 I2Cとは 13 結線写真 2 センサの多くがI2Cに対応 14 WHO_AM_I 3 マイコンでのI2C通信例 15 I2C読込みプログラム 4 とは 16 I2C読込みスクリプト概要① 5 タイミングパラメータ 17 I2C読込みスクリプト概要② 6 書込み 18 センサ読込みプログラ

USB IR REMOCON Manual

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

Fujitsu Standard Tool

GenieATM 6300-T / 6200-T シリーズ 1. 基本的な機器オペレーションのために 1-1. 機器への接続 機器への接続方法は 以下の 2 通りがあります シリアルポートを使用してログインする LAN 経由で Telnet または SSH を使用して仮想 Interface からロ

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

OPN Terminalの利用方法

MODBUS ユーザーズマニュアル 페이지 1 / 23

NJU72501 チャージポンプ内蔵 圧電用スイッチングドライバ 概要 NJU72501はチャージポンプ回路を内蔵し 最大で3V 入力から 18Vppで圧電サウンダを駆動することができます このチャージポンプ回路には1 倍 2 倍 3 倍昇圧切り替え機能を備えており 圧電サウンダの音量を変更すること

Studuinoプログラミング環境

GR-SAKURA-SAのサンプルソフト説明

1 8 Z80 Z GBA ASIC 2 WINDOWS C 1

ランニングエレクトロニクス SBDBT/SBXBT シリーズ用 PS3 コントローラ / USB ゲームパッド UART 変換ファームウェア ユーザーズマニュアル 2014/09/26 版

PowerTyper マイクロコードダウンロード手順

Transcription:

電子回路設計演習レポート 目次 : 1. 購入物品リスト 2. 課題 3: 7 セグメント LED の表示 2.1 課題 3 のプログラムリスト 3. 自由課題 : プレイステーションパッドによるデジ Q のリモコン操作 3.1 パッドの改造 3.2 リモコンの機能 3.3 プログラムリスト参考文献付録 : DigiQ 通信仕様付録 : プレイステーション PAD 通信仕様 提出年月日 2005 年 9 月 2 日 ( 金 ) 所属電気電子工学科 4 年 500404 9 0 1 8 氏名 池田祐一 1

1. 購入物品リスト 電子部品名 用途 規格 単価 数量 合計 購入先 PIC16F84A-20/P PIC16F84 300 2 600 秋月電子通商 カーボン抵抗 1/4W R0,R1 10kΩ 1 7 7 秋月電子通商 カーボン抵抗 1/4W R2,R2 追加分 300Ω 1 12 12 秋月電子通商 DIPスイッチ 8P SW#0 4 60 1 60 秋月電子通商 押しボタンスイッチ PSW#0,1 50 2 100 秋月電子通商 セラミック発振子 XT,C1,C2 4MHz 40 2 80 秋月電子通商 赤色 LED Φ3mm LED#0 7 3.5 8 28 秋月電子通商 7セグメントLED 課題 3 K.COM 60 1 60 秋月電子通商 74HC4511AP 7セグデコーダIC K.COM 126 1 126 秋月電子通商 ブレッドボード EIC-102B 700 1 700 秋月電子通商 デジQ FAIRLADY 自由課題 4800 1 4800 グランフジ新居浜店 ボタン型電池 自由課題 240 2 480 大学生協 赤外線 LED 自由課題 10 1 10 秋月電子通商 PSコントローラ 自由課題 500 1 500 HARD OFF 総計 7563 2. 課題 3: 7 セグメント LED の表示 SW#4 が OFF 時は SW#0 SW#3 のスイッチの状態が LED # 4 7 に表示されるとともに 7 セグメント LED に数字として表示され SW#4 が ON 時は LED # 4 7 に表示されるプログラムを作成した SW#4 が OFF の時 ON の時それぞれの動作中の様子を図 1 に示す 図 1 動作中の様子 (SW # 4 OFF 時 ) 図 2 動作中の様子 (SW # 4 ON 時 ) 2

2.1 課題 3 のプログラムリスト PROCESSOR p16f84a RADIX dec include "p16f84a.inc" list p=16f84a CONFIG _XT_OSC & _WDT_OFF ファイルレジスタの定義 tmp equ 0x0c ここからプログラム ORG 0 goto start メイン処理 start ポートの初期化 bsf STATUS,5 bank 1 に設定 movlw B'00011111' ポート A の入出力方向を設定 movwf TRISA movlw B'00000000' ポート B の入出力方向を設定 movwf TRISB bcf STATUS,5 bank 0 に設定 movlw 0 ポート A,B を零に初期化 movwf PORTA movwf PORTB loop SW#4 についての分岐 btfss PORTA,4 goto sw4_is_on btfsc PORTA,4 goto sw4_is_off goto loop SW4 が ON のときの処理 sw4_is_on スイッチの状態を LED#4 #7 に表示する swapf PORTA,W iorlw 0x0f 7 セグのほうは Blank(=B'1111') にしておく movwf PORTB goto loop SW4 が OFF のときの処理 sw4_is_off スイッチの状態を LED#4 #7 に表示し 7 セグメント LED にも数字として表示する clrf tmp swapf PORTA,W LED andlw 0xf0 movwf tmp movf PORTA,W 7 セグ xorlw 0xff 7 セグのほうは NOT をしておく andlw 0x0f addwf tmp,w movwf PORTB goto loop END 3

3. 自由課題 : プレイステーションパッドによるデジ Q のリモコン操作 おもちゃメーカーのコナミとタカラからリモコン操作できるチョロ Q デジ Q が発売されています 自由課題のテーマとして プレイステーションに使われているゲーム用のパッドを赤外線リモコンに改造して デジ Q の操作を行いました 3.1 パッドの改造 図 3 赤外線リモコンに改造したパッドとデジ Q 図 4 のようにパッド内部に PIC マイコンの基板 赤外線発光ダイオード ボタン型バッテリーを設置しています PIC マイコンからパッドのボタン押下状態を取得するために パッドを制御している別のマイコンとケーブルを介して通信を行います 3.2 リモコンの機能 図 4 赤外線リモコンに改造したパッドの内部 リモコンには十字キーでデジ Q を前後左右 右折左折 左右旋回する機能を付加しました また ボタンで二倍速 ボタンで三倍速 ボタンで全速力とスピード調整ができるようにしました 4

3.3 プログラムリスト 3.3.1 マクロ定義 macro.inc NOLIST movlwf macro f,k movlw k movwf f movfwf macro f1,f2 movf f2,0 movwf f1 movb macro f1,b1, f2,b2 btfsc f2,b2 bsf f1,b1 btfss f2,b2 bcf f1,b1 movnb macro f1,b1, f2,b2 btfsc f2,b2 bcf f1,b1 btfss f2,b2 bsf f1,b1 rr macro f rrf f,1 rl macro f rlf f,1 djnz macro f,addr decfsz f,1 inc macro f incf f jb macro f,b, addr btfsc f,b jnb macro f,b, addr btfss f,b jc macro addr btfsc 3,0 jnc macro addr btfss 3,0 jz macro addr btfsc 3,2 jnz macro addr btfss 3,2 cje_fl macro f,k,addr movlw k subwf f,0 btfsc 3,2 cje_ff macro f1,f2,addr movf f2,0 subwf f1,0 btfsc 3,2 cjne_fl macro f,k,addr movlw k subwf f,0 btfss 3,2 cjne_ff macro f1,f2,addr movf f2,0 subwf f1,0 btfss 3,2 clr macro f clrf f not macro f comf f,1 set_fsr macro k movlw k movwf 4 jnz_w macro addr xorlw 0 btfss 3,2 rnz_w macro xorlw 0 btfss 3,2 LIST 5

3.3.2 DigiQ 操作プログラム irpad_digiq.asm irpad_digiq.asm - IRPAD DigiQ Controller 赤外線 PS- PAD デジ Q 操作版 < 設定 > UNT: PIC16F84 OSC: XT (4MHz) WDT: ON < 省電力モード > 12 分経過すると省電力モードになり 2 秒間隔でキー入力を読み取ります 最初や しばらく使わなかったときは ボタンを 2 秒以上押し続けて下さい <LED の点滅 > 赤色 LED はエラー発生時と データ送信時に点滅します < 更新履歴 > 2005. 08. 28 DigiQ Version * デジ Q を操作できるように改造 *** マイコンの設定 *** PROCESSOR RADIX include include CONFIG p16f84a dec "p16f84a.inc" "macro.inc" _XT_OSC & _WDT_ON *** Pin 設定 *** PORTA は全て赤外線出力 (out,neg,1) #d efine RED PORTA,1 赤色 LED #d efine IR1 PORTA,2 赤外線 LED 1 # d efine IR2 PORTA,3 2 # d efine IR3 PORTA,4 3 #d efine PAD PORTB,0 PS- PAD 電源 (out,pos,0) # d efine SEL PORTB,1 SEL (out,neg, 1) # d efine CLK PORTB,2 CLK (out,- --,1) # d efine CMD PORTB,3 CMD (out,pos,1) # d efine DAT PORTB,4 DAT (in, pos,1) # d efine ACK PORTB,5 ACK (in, neg,1) *** 通信設定 *** DIGIQ_ID equ 4 操作したいデジ Q の ID 番号 (1 4) *** 変数の定義 *** tm0 equ 0x0C タイマ 0 tm1 equ 0x0D タイマ 1 cn equ 0x0E カウンタ rcn equ 0x0F 再送信カウンタ scn equ 0x10 スリープカウンタ id equ 0x11 PADID key1 equ 0x12 キーデータ 1 key2 equ 0x13 キーデータ 2 tmp equ 0x14 一時データ ekey1 equ 0x15 有効キーデータ1 ekey2 equ 0x16 有効キーデータ2 6

coder equ 0x17 デジQに送信するデータ前半 codel equ 0x18 デジQに送信するデータ後半 i equ 0x19 汎用インデクス *** パッドのボタンと対応するデータ *** # d efine LEFT key1,7 # d efine DOWN key1,6 # d efine RIGHT key1,5 # d efine UP key1,4 # d efine START key1,3 # d efine SELECT key1,0 # d efine SQUARE key2,7 # d efine CROSS key2,6 # d efine CIRCLE key2,5 # d efine TRIGLE key2,4 # d efine R1 key2,3 # d efine L1 key2,2 # d efine R2 key2,1 # d efine L2 key2,0 *** メインルーチン *** WDT を使うため 約 2 秒毎に clrwdt を呼び出す必要がある ORG 0 main init 初期化 loop movlwf scn, 200 スリープカウンタをリセット scn_loop movlwf rcn, 4 再送信カウンタをリセット rcn_loop sleep_wait 約 18msec のウェイト ( 省電力 ) scan PAD データを取得 jnz_w main_error not key1 データを反転 押されたボタンを1にする not key2 cjne_ff ekey1,key1,update キーの変化を調べる cjne_ff ekey2,key2, upd a t e sleep_wait 約 18msec のウェイト ( 省電力 ) djnz rcn, rcn_loop rcn_brea k 再送信カウンタ終了 ( キーに変化が無いまま 0.2 秒経過 ) キーが押されているときは連続して再送信 clrw iorwf key1, W iorwf key2, W jnz update キーが押されていないときは 0.2 秒毎に合計 200 回再送信する その後省電力モードに移行する send データを送信 djnz scn, scn_loop scn_bre ak スリープカウンタ終了 ( キーが押されないまま 1 2 分経過 ) 省電力モードでキー入力を待つ sleep 約 2.3 秒のウェイト ( 省電力 ) scan PAD データを取得 jnz_w main_error 7

not key1 データを反転 押されたボタンを1にする not key2 clrw キー入力を調べる iorwf key1, W iorwf key2, W jnz update goto scn_bre ak update 赤外線送信はデータに変化があるとき または約 0.5 秒間 キーが押されたままのときに行われる movfwf ekey1, key1 データを更新 movfwf ekey2, key2 send データを送信 goto loop main_error エラーの確認 赤色 LED を点滅する bcf RED wait_8ms bsf RED wait_8ms goto loop *** 約 18msec のウェイト ( 省電力 ) *** WDT を利用した省電力版のウェイト sleep_wait clrwdt bsf STATUS,RP0 bcf OPT,PSA WDT プリスケーラ OFF bcf STATUS,RP0 sleep bsf STATUS,RP0 bsf OPT,PSA WDT プリスケーラ ON bcf STATUS,RP0 *** 初期化 *** init WDT 設定 bcf INTCON,GIE 割り込み禁止 bsf STATUS,RP0 movlw B'000001 11' iorwf OPT,F プリスケーラ設定 (WDT 1:128 Max:2304 m s) bsf OPT,PSA プリスケーラを WDT に使う bcf STATUS,RP0 clrwdt ポート設定 ( 初期値 ) movlwf PORTA, H'FF' PORTA 初期値 bsf STATUS,RP0 movlwf TRISA, H'00' PORTA I/O 設定 movlwf TRISB, H'FF' PORTB I/O 設定 bsf OPT,N_RBPU PORTB プルアップ抵抗 OFF bcf STATUS,RP0 *** PS- PAD ON *** pad_on ポート設定 (PAD_ON) bsf STATUS,RP0 movlwf TRISB, H'F0' PORTB I/O 設定 bcf OPT,N_RBPU PORTB プルアップ抵抗 ON bcf STATUS,RP0 8

movlwf PORTB, H'FF' PORTB 初期値 通信開始 wait_8ms bcf SEL wait_100us *** PS- PAD OFF *** pad_off ポート設定 (PAD_OFF) bsf STATUS,RP0 movlwf TRISB, H'FF' PORTB I/O 設定 bsf OPT,N_RBPU PORTB プルアップ抵抗 OFF bcf STATUS,RP0 *** PS- PAD からデータを取得 *** < 返値 > 0 = 成功 非 0 = 失敗 scan pad_on 1. CMD(0x01) -> xxxx set_fsr tmp movlwf INDF, 0x01 scan_byte 2. CMD(0x42) -> ID(0x41) set_fsr id movlwf INDF, 0x42 scan_byte cjne_fl INDF, 0x41, scan_error 3. CMD(0x00) -> 'Z'(0x5A) set_fsr tmp clr INDF scan_byte cjne_fl INDF, 0x5A, scan_error 4. CMD(0x00) -> KEY1 set_fsr key1 clr INDF scan_byte 5. CMD(0x00) -> KEY2 set_fsr key2 clr INDF scan_byte pad_off retlw 0 scan_error pad_off retlw 1 *** PAD データを 1 バイト転送 *** < 前処理 > FSR にデータ位置を指定 INDF にコマンドを指定 < 返値 > INDF: データ < 注意 > 9

cn 使用 scan_byte movlwf cn, 8 scan_byte_lp bcf rr movb rl movb rr CLK INDF CMD, STATUS,C INDF STATUS,C, DAT INDF bsf CLK goto $+1 goto $+1 goto $+1 goto $+1 djnz cn, scan_byte_lp wait_100us ACK をサボる デジQに赤外線信号を送信する send パッドキーの押下状態を調べる clrf coder clrf codel jnb UP, end_up movlwf codel, H'08' 直進 movlwf coder, H'08' end_up jnb DOWN, end_down movlwf codel, H'28' 後進 movlwf coder, H'28' end_down jnb RIGHT, end_right jb UP, righ_fw jb DOWN, righ_bw movlwf codel, H'08' 右旋回 movlwf coder, H'28' goto end_right righ_fw movlwf codel, H'08' 右折前進 movlwf coder, H'05' goto end_right righ_bw movlwf codel, H'28' 右折後進 movlwf coder, H'25' end_right jnb LEFT, end_left jb UP, left_fw jb DOWN, left_bw movlwf codel, H'28' 左旋回 movlwf coder, H'08' goto end_left left_fw movlwf codel, H'05' 左折前進 movlwf coder, H'08' goto end_left left_bw movlwf codel, H'25' 左折後進 movlwf coder, H'28' end_left jnb SQUARE, end_squar e ボタンを押すと二倍速! movf codel,w 回転速度を抽出 andlw 0x1f addwf codel,f 加算して速度を二倍に movf coder,w 回転速度を抽出 andlw 0x1f addwf coder,f 加算して速度を二倍に end_squar e jnb CROSS, end_cross ボタンを押すと三倍速!! 10

movf codel,w 回転速度を抽出 andlw 0x1f addwf codel,f addwf codel,f 加算して速度を三倍に movf coder,w 回転速度を抽出 andlw 0x1f addwf coder,f addwf coder,f 加算して速度を三倍に end_cross jnb CIRCLE, end_circle ボタンを押すと全速!!! movlw 0x1f iorwf codel,f iorwf coder,f end_circle jnb TRIGLE, end_trigle end_trigle jnb R1, end_r1 end_r1 jnb L1, end_l1 end_l1 jnb R2, end_r2 end_r2 jnb L2, end_l2 end_l2 jnb START, end_start end_start jnb SELECT, end_select end_select フォーマットを整える movlw (DIGIQ_ID- 1)< < 6 iorwf coder,f ID 番号を設定 bcf STATUS,C キャリーをクリア rlf codel,f codel: [5-0] ビットを [7-2] ビットに移動 rlf codel,f チェックサムを計算 movlw 0 btfsc coder,0 btfsc coder,1 btfsc coder,2 btfsc coder,3 btfsc coder,4 btfsc coder,5 btfsc coder,6 btfsc coder,7 btfsc codel,2 btfsc codel,3 btfsc codel,4 btfsc codel,5 btfsc codel,6 btfsc codel,7 movwf tmp btfsc tmp,0 チェックサムを設定 bsf codel,1 赤外線信号送信 send_leader リーダ部 11

movlwf i, 8 コード部前半 send_loop1 rlf coder,f btfsc STATUS,C send_bit1 btfss STATUS,C send_bit0 djnz i, send_loop1 rlf coder,f movlwf i, 7 コード部後半 send_loop2 rlf codel,f btfsc STATUS,C send_bit1 btfss STATUS,C send_bit0 djnz i, send_loop2 rlf codel,f rlf codel,f send_trailer トレーラ部 send_leade r send_trailer send_bit0 send_bit1 0.5ms 間のパルスを出力する movlwf cn, 20 _lp movlwf PORTA, 0x00 2 赤外線 LED を ON goto $+1 4 goto $+1 6 goto $+1 8 goto $+1 10 goto $+1 12 nop 13 cycles movlwf PORTA, 0xff 2 赤外線 LED を OFF goto $+1 4 goto $+1 6 12

goto $+1 8 nop 9 djnz cn, _lp 12 cycles 0.5ms 間の無信号状態を作る movlwf cn, 20 _lp movlwf PORTA, 0xff 2 赤外線 LED を OFF goto $+1 4 goto $+1 6 goto $+1 8 goto $+1 10 goto $+1 12 nop 13 cycles movlwf PORTA, 0xff 2 赤外線 LED を OFF goto $+1 4 goto $+1 6 goto $+1 8 nop 9 djnz cn, _lp 12 cycles *** Wait about 100usec (4MHz) *** real wait: 98usec wait_100us movlw 0x1F movwf tm0 wait_100us0 decfsz tm0,1 goto wait_100us0 *** Wait about 8msec (4MHz) *** real wait: 7.695mse c wait_8ms movlw 0xA movwf tm0 wait_8ms0 movlw 0xFF movwf tm1 wait_8ms1 decfsz tm1,1 goto wait_8ms1 decfsz tm0,1 goto wait_8ms0 End END 参考文献 [1] デジ Q( デジプロポ ) 赤外線信号の解析 http://hom e p a g e 2.nifty.com/irhack/digiq/digiq.html [2] プレイステーション PAD/ メモリ インターフェースの解析 http://kaele.com/ ~ k a s hi m a/games/ ps_jpn.txt [3] プレステコントローラのインターフェース http://www2s.biglobe.ne.jp/ ~ h- kamei/eleha n d/pic/ps- pad/ps- pad.html 13