From: ian Date: Thu, 29 Dec 2005 03:43:42 +0000 (+0000) Subject: fix fundamentally incorrect algorithms and make it work as designed; adjust Stopping... X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=commitdiff_plain;h=391aa8a9be98d3c3dea863a497f19099466948b0;p=trains.git fix fundamentally incorrect algorithms and make it work as designed; adjust Stopping flash rate to 10Hz --- diff --git a/detpic/energy.asm b/detpic/energy.asm index 2176c67..5bbbbed 100644 --- a/detpic/energy.asm +++ b/detpic/energy.asm @@ -6,7 +6,7 @@ settling_timeout equ 10000 ; us stop_timeout equ 500000 ; us -stopflash_timeout equ 25000 ; us +stopflash_timeout equ 50000 ; us retry_timeout equ 50000 ; us persist_timeout equ 90000 ; us @@ -35,11 +35,12 @@ retry_wait res 1 ;-------------------- power_polarising_init clr_f settling + pin_h p0_booster_pwm return ;-------------------- power_polarising_begin - pin_l p0_booster_pwm + pin_vl p0_booster_pwm bc_f INTCON, TMR0IE ; disables NMRA interrupt bs_f flags, flags_polarising clr_f settling @@ -74,7 +75,7 @@ power_polarising_tick ; ; Off shutdown off none off *On (or +Fault) ; On power-up on none off Fault, or *Off -; Stopping shutdown off 500ms 50% 1/50ms ->Retry +; Stopping shutdown off 500ms 50% 1/100ms ->Retry ; Retry power-up off 50ms off ->Off, or Persists ; Persists shutdown off 90ms on ->Retry ; * = when host instructs @@ -100,8 +101,7 @@ power_fault_init clr_f stop_wait clr_f retry_wait pin_h p0_booster_shutdown - pin_vl p0_booster_userfault - pin_z p0_booster_userfault + pin_h p0_booster_userfault ; now we are Off return @@ -119,13 +119,13 @@ command_power return ; that deals with Stopping or Persists ; must be Off: - pin_l p0_booster_shutdown + pin_vl p0_booster_shutdown goto cdu_on ;---------- command_power_off ; On -> Off; noop in other states - pinlat_ifl p0_booster_shutdown + pinlat_ifh p0_booster_shutdown return ; Off, Stopping or Persists ; might be On or Retry: @@ -133,7 +133,7 @@ command_power_off return ; that deals with Retry ; must be On: power_off_now - pin_h p0_booster_shutdown + pin_vh p0_booster_shutdown goto cdu_off ;-------------------- @@ -142,19 +142,32 @@ power_fault_intrl return ; we have a fault: + bc_f INTCON3, INT1IF + rcall power_off_now + mov_fw retry_wait - bra_z power_stop ; we were Off or On, goto Stopping + bra_z power_fault_stop ; we were Off or On, goto Stopping ; must be Stopping, Retry or Persists: tst_f_ifnz stop_wait - bra power_stop ; we were already Stopping; restart timer + bra power_fault_stop ; we were already Stopping; restart timer ; might be Retry or Persists, goto Persists (restarting any timer): - rcall power_off_now mov_lw persist_timeout / tick_us mov_wf retry_wait + pin_vl p0_booster_userfault return +;----- +power_fault_stop + mov_lw stop_timeout / tickdiv_us + mov_wf stop_wait + pin_vl p0_booster_userfault + mov_lw b'00000111' + call serial_addbyte + rcall power_stop_doflash + intrl_handled_nostack + ;-------------------- power_fault_tick tst_f_ifnz retry_wait @@ -167,27 +180,19 @@ power_fault_tick bra power_stop_doflash ; that was Stopping, just flash the LED ; must be Retry or Persists: - pinlat_ifl p0_booster_shutdown + pinlat_ifh p0_booster_shutdown bra power_retry ; we were in Persists, now we can try again - ; we were in Retry but it didn't work: -; go to Persists: - pin_h p0_booster_shutdown - mov_lw persist_timeout / tickdiv_us - mov_wf retry_wait - pin_nz p0_booster_userfault - return + ; we were in Retry and it worked. +; go to Off: + pin_vh p0_booster_shutdown + pin_vh p0_booster_userfault + mov_lw b'00000110' + goto serial_addbyte ;---------- -power_stop - rcall power_off_now - mov_lw stop_timeout / tickdiv_us - mov_wf stop_wait - pin_z p0_booster_userfault - mov_lw b'00000111' - call serial_addbyte power_stop_doflash - pin_znz p0_booster_userfault - mov_lw stopflash_timeout / tickdiv_us + pin_vhl p0_booster_userfault + mov_lw stopflash_timeout / tick_us mov_wf retry_wait return @@ -201,15 +206,15 @@ power_fault_tickdiv power_retry mov_lw retry_timeout / tickdiv_us mov_wf retry_wait - pin_l p0_booster_shutdown - pin_z p0_booster_userfault + pin_vl p0_booster_shutdown + pin_vh p0_booster_userfault return ;-------------------- power_panichook - pin_h p0_booster_shutdown - pin_l p0_booster_pwm - pin_z p0_booster_userfault + pin_vh p0_booster_shutdown + pin_vl p0_booster_pwm + pin_vh p0_booster_userfault return ;======================================================================