インドアプレーンとロボット

趣味のロボットとインドアプレーンを紹介します。 K O B A R A

10F222受信機

2009-08-17 01:36:25 | 飛行機 技術情報
.


昨日の10F200に続いて10F222にも移植してみました、

そしてそのチップで、基板なしの受信機を組んで、動かしてみました


222受信機






プログラムです。変なところがあれば教えてください。



	
;
; 		 赤外線受信機プログラム 10F222 用
;		モーターは9段階 ラダーは17段階のPWM制御
;
;				2009/8/16    T.kobara
;
;
;    
; 	   rad←GP0[| ``U`` |]GP3←センサin
;  	     -   VSS[| 222 |]VDD +
; 	   rad←GP1[|___  __ |]GP2→FET(M)
;    
;
;
;
	LIST	P=10F222

	INCLUDE   P10F222.INC

	__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_ON & _IOFSCS_4MHZ& _MCPU_OFF 

				
;  _MCLRE_OFF	=	;6番ピンをMCLRで使わない、GP3のI/O端子になる。

;  _CP_OFF		=	;コード・プロテクトしない。
				
;  _WDT_ON	=	;ウォッチドッグ・タイマを使う。

;  _IOFSCS_4MHZ	=	;内部発信機4Mhz駆動

;  _MCPU_OFF	=	;MCLR プルUP(MCLR使わないからどうでも良い)
	


		
C1	equ	10h		;カウンター
C2	equ	11h		;カウンター上位
MF	equ	12h		;前回センサレベルフラグ
RC	equ	13h		;ループ       カウンタ
CH	equ	14h		;チャンネル カウンタ
PWM	equ	15h		;pwm       カウンタ
SM	equ	16h		;スロットルメイン
RM	equ	17h		;ラダー R  メイン	
LM	equ	18h		;ラダー L  メイン
SS	equ	19h		;スロットルサブ
RS	equ	1Ah		;ラダー R  サブ
LS	equ	1Bh		;ラダー L  サブ
OUT	equ	1Ch		;出力バッファ
CH1	equ	1Dh		;ラダーデータ
CH3	equ	1Eh		;スロットルデータ


	org	0		;電源onスタート
	
	
	movwf	OSCCAL		;内部発信校正値の書き込み

	movlw	b'00001100'	;A/D入出力ポートの設定
	movwf 	ADCON0		;GP1,0共にI/Oデジタル設定

	movlw	b'00001000'	;入出力ポートの設定GP3のみ入力
	TRIS 	GPIO		;他は出力設定

	movlw	b'00001110'
	OPTION			;WDTプリスケーラ18ms×64=1.15s
	
	
	
;////////////////////////////////////////////////////////////

			;メインルーチン

MAIN	clrf	GPIO		;出力ポートクリア
	clrf	MF		;前回レベルフラグ   00
	clrf	RC		;ループ    カウンタ	 00  
	clrf	CH		;チャンネルカウンタ 00 
	movlw	d'8'
	movwf	PWM		;pwm     カウンタ 8
	clrf	SM		;スロットルメイン   00 
	clrf	RM		;ラダー R  メイン	00
	clrf	LM		;ラダー L  メイン   00
	clrf	SS		;スロットルサブ      00
	clrf	RS		;ラダー R  サブ	00
	clrf	LS		;ラダー L  サブ      00
	clrf	OUT		;出力バッファ  	00
	clrf	CH1		;ラダーデータ	00
	clrf	CH3		;スロットルデータ	00
	
	
	
	
MJ2	btfss	GPIO,3		;入力LOならループ	
	goto	LOOP
	
	movlw	d'250'
	movwf	C2		;カウンタ250セット
	
MJ1	btfss	GPIO,3		;入力LOならループ	
	goto	MJ2	

	nop	
	nop
	nop			;10us×250回=2.5ms
	nop
	nop	
			
	decfsz	C2,F		;C2-1=0なら先頭ブランク発見
	goto	MJ1
	
	goto	LOOP		;LOOP IN
			
	
;////////////////////////////////////////////////////////////
					

MJ3	btfsc	MF,0		;前回レベルフラグ0か?	
	goto	MJ7		;1なら立下りエッジ処理へ
	
	clrf	MF		;MF←00

MJ4	clrwdt			;WDT クリア
	incf	RC,F		;ループカウントUP


	
			;出力処理

MJ10	decfsz	PWM,F		;PWM0でないならMJ5へ
	goto	MJ5

	movf	SM,W
	movwf	SS		;0なら
	movf	RM,W		;各サブにセット
	movwf	RS
	movf	LM,W
	movwf	LS					
		
	movlw	d'8'
	movwf	PWM		;PWM  カウンタ 8
	
	
MJ6	clrf	OUT

	
	rrf	SS,F
	rlf	OUT,F		;2 各bitのセット
	rrf	RS,F
	rlf	OUT,F		;1
	rrf	LS,F
	rlf	OUT,F		;0

	movf	OUT,W
	movwf	GPIO		;OUTデータをポートに出力

	
			;ループ入り口

LOOP	btfss	GPIO,3		;入力 LO ならMJ3へ
	goto	MJ3		;LO の処理ルーチンへ

	bsf	MF,0		;MF←01

	
	btfss	RC,7		;RC 128 以上ならMJ4へ	
	goto	MJ4		;出力処理へ

	clrf	CH		;チャンネルカウンタ クリア
	
	goto	MJ10		;出力処理ルーチンへ

MJ5	nop
	nop
	nop			;時間あわせ
	nop
	nop
	goto	MJ6


			;立下りエッジ処理

MJ7	btfsc	CH,2		;CHの2bit 1ならMJ80へ
	goto	MJ80		;CH4以上はJMP

	btfss	CH,0		;CHの0bit 0ならMJ80へ
	goto	MJ80		;

	btfsc	CH,1		;CHの1bit 1ならMJ9へ
	goto	MJ9		;

	
	movf	RC,W		;前回RCとの平均化
	addwf	CH1,F		;
	bcf	STATUS,C		;(CH1+RC)÷2→CH1
	rrf	CH1,F		;
	
	movlw	d'18'		;
	subwf	CH1,W		;CH1-18=W
	andlw	b'00111111'	;3Fhでマスク0~64
	call	GETLM		;PWMパターン取得
	xorlw	b'11111111'	;パターンの逆転
	movwf	RM		;パターン格納
	
	movlw	d'30'		;
	subwf	CH1,W		;CH1-30=W
	andlw	b'00111111'	;3Fhでマスク0~64
	call	GETLM		;PWMパターン取得
	movwf	LM		;パターン格納

MJ80	clrf	RC		;ループカウンタ 00
	clrf	MF		;前回レベルフラグ00
	incf	CH,F		;CH+1→CH
	goto	MJ10
	

MJ9	movf	RC,W		;前回RCとの平均化
	addwf	CH3,F		;
	bcf	STATUS,C		;(CH3+RC)÷2→CH3
	rrf	CH3,F		;	

	movlw	d'16'		;
	subwf	CH3,W		;CH3-16=W
	andlw	b'00111111'	;3Fhでマスク0~64
	call	GETSM		;PWMパターン取得
	movwf	SM		;パターン格納
	goto	MJ80


;/////////////////////////////////////////////////////////////
	
	
GETSM	addwf	PCL,F		;プログラムカウンタにWデータ加算
	retlw	b'00000000'	;0
	retlw	b'00000000'	;1
	retlw	b'00000000'	;2
	retlw	b'00000000'	;3
	retlw	b'00000000'	;4
	retlw	b'00000000'	;5
	retlw	b'00000000'	;6
	retlw	b'00000000'	;7
	retlw	b'00000000'	;8
	retlw	b'00000000'	;9
	retlw	b'00000000'	;10
	retlw	b'00000000'	;11
	retlw	b'00000000'	;12
	retlw	b'00000000'	;13
	retlw	b'00000000'	;14
	retlw	b'00000000'	;15
	retlw	b'00000000'	;16
	retlw	b'00000000'	;17
	retlw	b'00000000'	;18
	retlw	b'00000000'	;19
	retlw	b'00000000'	;20
	retlw	b'00000000'	;21
	retlw	b'00000000'	;22
	retlw	b'00000000'	;23
	retlw	b'00000000'	;24
	retlw	b'00000001'	;25
	retlw	b'00000001'	;26
	retlw	b'00000011'	;27
	retlw	b'00000011'	;28
	retlw	b'00000111'	;29
	retlw	b'00000111'	;30
	retlw	b'00001111'	;31
	retlw	b'00001111'	;32
	retlw	b'00011111'	;33
	retlw	b'00011111'	;34
	retlw	b'00111111'	;35
	retlw	b'00111111'	;36
	retlw	b'01111111'	;37
	retlw	b'01111111'	;38
	retlw	b'11111111'	;39
	retlw	b'11111111'	;40
	retlw	b'11111111'	;41
	retlw	b'11111111'	;42
	retlw	b'11111111'	;43
	retlw	b'11111111'	;44
	retlw	b'11111111'	;45
	retlw	b'11111111'	;46
	retlw	b'11111111'	;47
	retlw	b'11111111'	;48
	retlw	b'11111111'	;49
	retlw	b'11111111'	;50
	retlw	b'11111111'	;51
	retlw	b'11111111'	;52
	retlw	b'11111111'	;53
	retlw	b'11111111'	;54
	retlw	b'11111111'	;55
	retlw	b'11111111'	;56
	retlw	b'11111111'	;57
	retlw	b'11111111'	;58
	retlw	b'11111111'	;59
	retlw	b'11111111'	;60
	retlw	b'11111111'	;61
	retlw	b'11111111'	;62
	retlw	b'11111111'	;63
	retlw	b'11111111'	;64
	retlw	b'11111111'	;65
		
;/////////////////////////////////////////////////////////////

GETLM	addwf	PCL,F		;プログラムカウンタにWデータ加算
	retlw	b'00000000'	;0
	retlw	b'00000000'	;1
	retlw	b'00000000'	;2
	retlw	b'00000000'	;3
	retlw	b'00000000'	;4
	retlw	b'00000000'	;5
	retlw	b'00000000'	;6
	retlw	b'00000000'	;7
	retlw	b'00000000'	;8
	retlw	b'00000000'	;9
	retlw	b'00000000'	;10
	retlw	b'00000000'	;11
	retlw	b'00000000'	;12
	retlw	b'00000000'	;13
	retlw	b'00000000'	;14
	retlw	b'00000000'	;15
	retlw	b'00000000'	;16
	retlw	b'00000000'	;17
	retlw	b'00000000'	;18
	retlw	b'00000000'	;19
	retlw	b'00000000'	;20
	retlw	b'00000000'	;21
	retlw	b'00000000'	;22
	retlw	b'00000000'	;23
	retlw	b'00000000'	;24
	retlw	b'00000000'	;25
	retlw	b'00000000'	;26
	retlw	b'00000000'	;27
	retlw	b'00000000'	;28
	retlw	b'00000001'	;29
	retlw	b'00000011'	;30
	retlw	b'00000111'	;31
	retlw	b'00001111'	;32
	retlw	b'00011111'	;33
	retlw	b'00111111'	;34
	retlw	b'01111111'	;35
	retlw	b'11111111'	;36
	retlw	b'11111111'	;37
	retlw	b'11111111'	;38
	retlw	b'11111111'	;39
	retlw	b'11111111'	;40
	retlw	b'11111111'	;41
	retlw	b'11111111'	;42
	retlw	b'11111111'	;43
	retlw	b'11111111'	;44
	retlw	b'11111111'	;45
	retlw	b'11111111'	;46
	retlw	b'11111111'	;47
	retlw	b'11111111'	;48
	retlw	b'11111111'	;49
	retlw	b'11111111'	;50
	retlw	b'11111111'	;51
	retlw	b'11111111'	;52
	retlw	b'11111111'	;53
	retlw	b'11111111'	;54
	retlw	b'11111111'	;55
	retlw	b'11111111'	;56
	retlw	b'11111111'	;57
	retlw	b'11111111'	;58
	retlw	b'11111111'	;59
	retlw	b'11111111'	;60
	retlw	b'11111111'	;61
	retlw	b'11111111'	;62
	retlw	b'11111111'	;63
	retlw	b'11111111'	;64
	retlw	b'11111111'	;65

;/////////////////////////////////////////////////////////////
	
	end




	
:020000040000FA
:1000000025000C0C2700080C06000E0C02006600F0
:10001000720073007400080C3500760077007800D9
:1000200079007A007B007C007D007E0066073C0A38
:10003000FA0C31006607160A0000000000000000FC
:100040000000F1021A0A3C0A1206490A7200040072
:10005000B302F502430A1602390017023A001802E9
:100060003B00080C35007C0039037C033A037C0319
:100070003B037C031C0226006607240A1205F307D3
:10008000270A7400290A0000000000000000000098
:10009000330A54065E0A14075E0A3406620A130223
:1000A000FD0103043D03120C9D003F0EAF09FF0F3D
:1000B00037001E0C9D003F0EAF0938007300720020
:1000C000B402290A1302FE0103043E03100C9E0031
:1000D0003F0E6C0936005E0AE201000800080008C5
:1000E00000080008000800080008000800080008D0
:1000F00000080008000800080008000800080008C0
:1001000000080008000800080008000801080108AD
:1001100003080308070807080F080F081F081F082F
:100120003F083F087F087F08FF08FF08FF08FF0817
:10013000FF08FF08FF08FF08FF08FF08FF08FF0887
:10014000FF08FF08FF08FF08FF08FF08FF08FF0877
:10015000FF08FF08FF08FF08FF08FF08FF08E2018B
:10016000000800080008000800080008000800084F
:10017000000800080008000800080008000800083F
:10018000000800080008000800080008000800082F
:100190000008000800080008000801080308070814
:1001A0000F081F083F087F08FF08FF08FF08FF0827
:1001B000FF08FF08FF08FF08FF08FF08FF08FF0807
:1001C000FF08FF08FF08FF08FF08FF08FF08FF08F7
:1001D000FF08FF08FF08FF08FF08FF08FF08FF08E7
:0401E000FF08FF080D
:021FFE00EE0FE4
:00000001FF


最新の画像もっと見る

7 コメント

コメント日が  古い順  |   新しい順
ワターシ、アッセンブラ、ワカリマセーン (makkin1961)
2009-08-17 09:02:58
こんにちは。

アッセンブラはZ80以降やってないので殆ど理解できてません(汗)
ルックアップテーブルを使っているのと、nopを駆使してタイミング合わせをしているのは分かりました。
返信する
ワターシモ、ヨク、ワカリマセーン (kobara)
2009-08-17 09:13:07
仙頭さんこんにちは、
makkinさんと呼んだ方が良いのかな??
私もあまりよくわかっていません、
しかもこの受信部本体はだいぶ前に作ったので、忘れてしまって、しかも保守性の悪い、こんがらがった物ですので、
たぶん他の人には解読不可能と思います。
酒井さんがプログラムやると言っていたので、頭の設定の部分だけでも参考になるかなと思って、出しました
返信する
プログラム (酒井)
2009-08-17 09:34:52
したいのわ やまやまですが MPLAB IDEで 変換できる様にならなければ と思っています。

そうでないと、まぐれで動くプログラムが出来ても 動くかどうかためせません。

じしんありません。
返信する
paridemiola@gmail.com (Paride)
2011-01-28 08:25:34
Hi, your work is really amazing!Bravo!
Could you explain me what have you done and draw a basic electronic schematic?
I'm really interested in the "receiver" part of your circuit!
Many thanks

Paride
paridemiola@gmail.com
返信する
英語は苦手 (kobara)
2011-01-28 10:06:32
回路図ですか~
これを参考にしてください
http://www.oyajin.jp/~toko/pic/0071/index.html
返信する
回路図 (kobara)
2011-01-28 10:11:14
http://translate.google.com/translate?u=http%3A%2F%2Fblog.goo.ne.jp%2Ftoko0131%2F&hl=ja&ie=UTF8&sl=ja&tl=en

見てください
返信する
サンキュー (学習者)
2012-05-03 23:13:39
こんにちは
10F200で検索して辿り付きました
今、ものすごい勢いでPICの知識とテクニックを貯めていますのでソースコードの公開は大変ありがたいことです。
一部わからない所が有りますが気合で理解しようと思います。
記念カキコ2012
返信する

コメントを投稿