TA8428はモータドライブICである
  これはIN、IN2のHigh.Low 入力で、正逆切り替えができる。12vを加える
  
  PB0ーーー> 正、逆切り替え
  PB3−−−> FAST SLOW 切り替え
  PB4−−−> スタート ストップ
  
  ATTiny13Aは ポートが少ないので、FAST/SLOW の2段階の切り替え
  を行う
  
  制御方法は、H、Lのパルス制御でスピードをコントロールする
  
  以下 アセンブラのプログラムである
  C言語で 正確にパルス制御できないわけではないが、
  アセンブラの方が簡単なので、下記に製作する
  
  スローは ON-10us  ,OFF- 600us
  FAST   ON-10us  , OFF-250uS
  
  スタート時は 100ms ONさせて 起動させる。
  Zゲージはスタートの起動トルクが必要だ
  
  -----------------------------------------
  しばらくしてから、3か月後 に列車を動かした
  途中で止まる。
  線路を磨いた、接点復活剤を使った、
  途中で止まる。
  
  市販のコントローラーでは、動く、、、、、、
  PWMモードを 検討する必要がありそうだ。
  ON時間をいろいろ振ってみよう、、
  
  
  
  
  
  
  
  
  
  ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
  /*
  * Zゲージ    在来線用
  *  Z12-Z*  
  *  Created: 2019/01/14 
  *   Author: kmv70sky
  *   内部クロック 9.6M
  *  
  *       stop  LOW  MID  HI
  *  PB0   0     1    0    1
  *  PB1   0     0    1    1
  */
  
  ;******************************************************************************************
  
  .include "tn13adef.inc"
  
  .def	wariF	=	R3
  .def	CGD		=	R4
  .def	CGDH	=	R5
  .def	fuF		=	R6
  .def	w8		=	R7
  .def    carabuf =   R8
  .def	ffuF	=	R9   ; zitta マイナスフラグ
  .def	Dtest	=	R10  ;test 
  .def	ascbuf	=	R11
  
  .def 	PULSEL	= 	R14	; パルスデータL 
  .def 	PULSEH	= 	R15	; パルスデータH
  
  
  .def	W		=	R16
  .def	W1		=	R17
  .def	W2		=	R18
  .def	T1MSEC	=	R19
  .def	TW1		=	R20
  .def	TW2		=	R21
  .def	TW3		=	R22
  .def	sreg_save	=	R23
  .def	cnt		=	R24
  .def	cntr	=	R25
  
  ; Y= R28 R29,   Z= R30,R31  予約
  
  ;****************************************
  ; Control (PORTB)
  
  .equ	K_S		=	4		
  .equ	S_F		=	3
  .equ	OUT1	=	1
  .equ	OUT2	=	2	
  .equ    K_REV   =   0
  
  ;---------------- macro ----------------------
  ;LDIW  
  ;    LDIW  Z,SRAM
  ;
  .macro	LDIW	
  
  ldi		@0H,high(@1)
  ldi		@0L,low(@1)
  .endm
  ;------ timer-------------
  ; TIME_COUNT @0 @1
  ;
  
  ;--------------------------------------------
  .cseg
  .org	0
  
  
  RJMP	 RESET	 ;各種リセット
  RJMP	 EXT_INT0	 ;外部割り込み要求0
  RJMP	 PCINT00	 ;ピン変化割り込み要求0
  RJMP	 TIM0_OVF	 ;タイマ/カウンタ溢れ
  RJMP	 EE_RDY	 ;EEPROM操作可
  RJMP	 ANA_COMP	 ;アナログ比較器出力遷移
  RJMP	 TIM0_COMPA	 ;タイマ/カウンタ比較A一致
  RJMP	 TIM0_COMPB	 ;タイマ/カウンタ比較B一致
  RJMP    WATCHDOG		;ウォッチドッグ計時完了
  RJMP	 ADC1	 ;A/D変換完了
  
  EXT_INT0:	 ;外部割り込み要求0
  PCINT00:		 ;ピン変化割り込み要求0
  TIM0_OVF:	 ;タイマ/カウンタ溢れ
  EE_RDY:			;EEPROM操作可
  ANA_COMP:	 ;アナログ比較器出力遷移
  TIM0_COMPA:	 ;タイマ/カウンタ比較A一致
  TIM0_COMPB:		 ;タイマ/カウンタ比較B一致
  WATCHDOG:			;ウォッチドッグ計時完了
  ADC1:			 ;A/D変換完了
  
  
  
  
  ;
  RESET:	 LDI	 w,LOW(RAMEND)	;RAM最終アドレス下位を取得
  OUT	 SPL,w			 ;スタック ポインタ(下位)を初期化
  
  ;---------------------------------------------------------------
  
  LDI	w,0x06		; PORTB(0-0110)を1=出力にする
  OUT	DDRB,w		; 
  
  LDI	w,0x19		; 1-1001  1=pull 10k
  OUT	PORTB,w		; PORTBを初期化
  ;-----アナログ比較器 初期化
  sbi	ACSR,ACD
  
  
  
  
  MAIN:
  cbi		portB,OUT1		;1
  cbi		portB,OUT2
  
  start:
  rcall	t10ms
  sbis	pinB,K_S		;tact sW
  rjmp	start_0
  rjmp	start
  
  ;---FWD LOW -------------------
  start_0:
  sbis	pinB,K_REV		;High = REV
  rjmp	fwd_st1
  ;------- REV mode -----------------
  rev_st1:                   ;start up
  sbi		portB,OUT2
  rcall	t100ms
  cbi		portB,OUT2		;1
  rev_st2:
  sbi		portB,OUT2
  rcall	t10us
  cbi		portB,OUT2		;1
  rcall	t600us
  sbis	pinB,S_F		;low = fast
  rjmp	rev_st4		;Fast
  sbis	pinB,K_S		;stop
  rjmp	rev_st2
  rjmp	main
  ;---- REV FAST -------------	
  rev_st4:			;slow
  sbi		portB,OUT2
  rcall	t10us
  cbi		portB,OUT2		;1
  rcall	t250us
  sbis	pinB,K_S		;stop
  rjmp	rev_st5
  rjmp	main
  rev_st5:
  sbis	pinB,S_F		;slow-fast
  rjmp	rev_st4
  rjmp	rev_st2
  
  ;--- FWD -----------		
  fwd_st1:
  sbi		portB,OUT1
  rcall	t100ms
  cbi		portB,OUT1		;1
  fwd_st2:
  sbi		portB,OUT1
  rcall	t10us
  cbi		portB,OUT1		;1
  rcall	t600us
  sbis	pinB,S_F		;slow-fast
  rjmp	fwd_st4		;high
  sbis	pinB,K_S		;1.5SEC
  rjmp	fwd_st2
  rjmp	main
  
  fwd_st4:
  sbi		portB,OUT1
  rcall	t10us
  cbi		portB,OUT1		;1
  rcall	t250us
  sbis	pinB,K_S		;1.5SEC
  rjmp	fwd_st5
  rjmp	main
  fwd_st5:
  sbis	pinB,S_F	;slow-fast
  rjmp	fwd_st4
  rjmp	fwd_st2
  
  
  
  
  
  ;-------------タイマー-ATtyny 13A----------------------------
  t10us:
  rjmp	pc+1
  ret
  
  t20us:
  rjmp	pc+1
  rjmp	pc+1
  rjmp	pc+1
  rjmp	pc+1
  rjmp	pc+1
  rjmp	pc+1
  rjmp	pc+1
  ret
  ;---------------------
  t30us:
  ldi	w,4
  loop30us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop30us
  ret
  ;---------------------
  t40us:
  ldi	w,5
  loop40us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop40us
  ret
  ;-------------------
  t50us:
  ldi	w,6
  loop50us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop50us
  ret
  ;-------------------
  t60us:
  ldi	w,7
  loop60us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop60us
  ret
  
  
  ;----------------
  t70us:
  ldi	w,9
  loop70us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop70us
  ret
  
  
  t80us:
  ldi	w,11
  loop80us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop80us
  ret
  
  t100us:
  ldi	w,15
  loop100us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop100us
  ret
  ;-----------------------
  t150us:
  ldi	w,20
  loop150us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop150us
  ret
  ;-----------------------
  t200us:
  ldi	w,30
  loop200us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop200us
  ret
  ;-----------------------
  t250us:
  ldi	w,39
  loop250us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop250us
  ret
  ;-----------------------
  t300us:
  ldi	w,45
  loop300us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop300us
  ret
  ;-----------------------
  t350us:
  ldi	w,50
  loop350us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop350us
  ret
  ;-----------------------
  t400us:
  ldi	w,60
  loop400us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop400us
  ret
  ;-----------------------
  t500us:
  ldi	w,75
  loop500us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop500us
  ret
  ;-----------------------
  t600us:
  ldi	w,90
  loop600us:
  rjmp	pc+1
  rjmp	pc+1
  dec	w		;
  BRNE	loop600us
  ret
  
  t1ms:
  ldi	w,3		;0.056*1024 分周=57.3us 
  out	TCCR0B,w
  ldi	w,0
  out	TCNT0,w
  loop1ms:
  in	w,TCNT0
  cpi	w,18		;57.3*18 =1.024 ms
  BRNE	loop1ms
  ret
  ;------------------
  t2ms:
  ldi	w,3		;0.056*1024 分周=57.3us 
  out	TCCR0B,w
  ldi	w,0
  out	TCNT0,w
  loop2ms:
  in	w,TCNT0
  cpi	w,36		;57.3*18 =1.024 ms
  BRNE	loop2ms
  ret
  ;------------------
  t3ms:
  ldi	w,3		;0.056*1024 分周=57.3us 
  out	TCCR0B,w
  ldi	w,0
  out	TCNT0,w
  loop3ms:
  in	w,TCNT0
  cpi	w,52		;57.3*18 =1.024 ms
  BRNE	loop3ms
  ret
  
  
  ;------------------
  t4ms:
  ldi	w,3		;0.056*1024 分周=57.3us 
  out	TCCR0B,w
  ldi	w,0
  out	TCNT0,w
  loop4ms:
  in	w,TCNT0
  cpi	w,70		;57.3*18 =1.024 ms
  BRNE	loop4ms
  ret
  
  ;------------------
  t7ms:
  ldi	w,3		;0.056*1024 分周=57.3us 
  out	TCCR0B,w
  ldi	w,0
  out	TCNT0,w
  loop7ms:
  in	w,TCNT0
  cpi	w,122		;57.3*18 =1.024 ms
  BRNE	loop7ms
  ret
  
  
  ;------------------
  t10ms:
  ldi	w,3		;0.056*1024=57.3us
  out	TCCR0B,w
  ldi	w,0
  out	TCNT0,w
  loop10ms:
  in	w,TCNT0
  cpi	w,174		;57.3*174 =10.048 ms
  BRNE	loop10ms
  ret
  
  
  
  ;------------------
  t50ms:
  ldi	w1,5
  loop50ms:
  rcall	t10ms
  dec	w1
  brne	loop50ms
  ret
  ;-------------------
  t100ms:
  ldi	w1,10
  loop100ms:
  rcall	t10ms
  dec	w1
  brne	loop100ms
  ret
  ;-------------------
  t200ms:
  ldi	w1,20
  loop200ms:
  rcall	t10ms
  dec	w1
  brne	loop200ms
  ret
  ;--------------------
  t500ms:
  ldi	w1,50
  loop500ms:
  rcall	t10ms
  dec	w1
  brne	loop500ms
  ret
  ;---------------------
  t1s:
  ldi	w1,100
  loop1s:
  rcall	t10ms
  dec	w1
  brne	loop1s
  ret
  
  
  
  ;-------データ ----------------------------------
  .dseg
  .org	0x0300
  
  Xziku:		.byte	1	;GLCD X軸データ 0〜127	
  Yziku:		.byte	1	;GLCD Y軸データ 0〜63
  caradat:	.byte	1	;cata D0-D7 data
  YLcara:		.byte	1	;Y=1-192000
  YHcara:		.byte	1	;   4B00
  YLcara_buf:	.byte	1	;Y=1-192000
  YHcara_buf:	.byte	1	;   4B00
  
  ra_buf:	.byte	100	;   4B00
  
  
  
  


@手動で ポイント円軌道と外周軌道を切り替える
  A手動で 駅方向と街軌道を切り替える
  B在来線の FWDとREV方向に走らせる
  C新幹線の FWDとREV方法に走らせる
  
  

Zゲージのポイント切替がコントロールできたところで、次は列車を走らせてみよう
  マイコンは、ATmega1284PとAttiny13Aを使った
  写真はコントロールBOXである
  

上のボタンは、列車のスピードを速いと遅い切り替え
  A1、A2 は オートモードで、プログラムした通り走らせる
  
  例えば、駅からスタートさせて、外周を回り、途中で停車
       円軌道を回って、逆方向に走らせ駅に戻る
       というように、、、、
  


