1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348
|
;throttle_dev_set.inc
.NOLIST
; ***************************************************************************************
; * PWM MODEL RAILROAD THROTTLE *
; * *
; * WRITTEN BY: PHILIP DEVRIES *
; * *
; * Copyright (C) 2003 Philip DeVries *
; * *
; * This program is free software; you can redistribute it and/or modify *
; * it under the terms of the GNU General Public License as published by *
; * the Free Software Foundation; either version 2 of the License, or *
; * (at your option) any later version. *
; * *
; * This program is distributed in the hope that it will be useful, *
; * but WITHOUT ANY WARRANTY; without even the implied warranty of *
; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
; * GNU General Public License for more details. *
; * *
; * You should have received a copy of the GNU General Public License *
; * along with this program; if not, write to the Free Software *
; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
; * *
; ***************************************************************************************
;*********************************************************
;* Hardware Settings *
;*********************************************************
;
; REGISTER ASSGINMENTS
; Note that registes 16 - 31 are acessed by a larger instruction
; set than registers 0 - 15.
;
;*********************************************************
; REGISTER ASSIGNMENTS
; GLOBAL VISIBILITY ;all functions have access to this NAME of the register
; GLOBAL DURATION ;the register always MEANS the same thing.
;*********************************************************
.DEF Flags_1= r16 ; Global. Status flags
.DEF Cycle_count= r17 ; Global. Count PWM cycles
.DEF throttle_set= r18 ; Global. Current Throttle Setting
.ifdef SWITCH_LOWPASS ENABLED
.DEF Flags_2= r19 ; Global. Switch "status" flags
.endif SWITCH_LOWPASS_ENABLED
.ifdef MOMENTUM_ENABLED
.DEF momentum_set= r4 ; Global. Input control
.endif ;MOMENTUM_ENABLED
.ifdef TRADITIONAL_ENABLED
.ifdef WALKAROUND_ENABLED
.DEF throttle_hold= r14 ; Global. Previous throttle setting
.DEF Flags_2= r19 ; Global. Switch "status" flags
.endif ;WALKAROUND_ENABLED
.endif ;TRADITIONAL_ENABLED
;*********************************************************
; REGISTER ASSIGNMENTS
; LOCAL VISIBILITY ;only the translation unit has (should have)
; access to any NAME of the register
; GLOBAL DURATION ;the register always MEANS the same thing.
;*********************************************************
.ifdef MOMENTUM_ENABLED
.ifdef LOWPASS_ENABLED
.DEF error_hi_prev= r2 ; Global. History of error
.DEF error_lo_prev= r3 ; Global. History of error
.endif ;LOWPASS_ENABLED
.endif ;MOMENTUM_ENABLED
.ifdef TRADITIONAL_ENABLED
.ifdef THROTTLE_LOWPASS_ENABLED
.DEF throttle_hi_prev= r9 ; Global. History of throttle handle
.DEF throttle_lo_prev= r10 ; Global. History of throttle handle
.endif ;THROTTLE_LOWPASS_ENABLED
.ifdef MOMENTUM_LOWPASS_ENABLED
.DEF momentum_hi_prev= r11 ; Global. History of momentum handle
.DEF momentum_lo_prev= r12 ; Global. History of momentum handle
.endif ;THROTTLE_LOWPASS_ENABLED
.endif ;TRADITIONAL_ENABLED
.ifdef MOMENTUM_ENABLED
.DEF speed_hi_prev= r5 ; Global. Speed at last sample time
.DEF speed_lo_prev= r6 ; Global. Speed at last sample time
.endif ;MOMENTUM_ENABLED
;*********************************************************
; REGISTER ASSIGNMENTS
; LOCAL VISIBILITY ;only the translation unit has (should have)
; access to any NAME of the register
; LOCAL DURATION ;the register has different meanings in different contexts
;*********************************************************
.DEF Implicit= r0 ; Local. Used for implicit lpm
.DEF Sreg_stack= r1 ; Local. "stack" for SREG during interrupts
; .DEF ZL= r30 ; Local. Used for Z pointer (low byte)
; .DEF ZH= r31 ; Local. Used for Z pointer (high byte)
.MACRO LOWLOCAL1
.DEF @0 = r7 ; Local. General Use
.ENDMACRO
.MACRO LOWLOCAL2
.DEF @0 = r8 ; Local. General Use
.ENDMACRO
.MACRO HILOCAL1
.DEF @0 = r26 ; Local. General Use
.ENDMACRO
.MACRO HILOCAL2
.DEF @0 = r27 ; Local. General Use
.ENDMACRO
;*********************************************************
; REGISTER ASSIGNMENTS
; GLOBAL VISIBILITY ;all functions have access to this NAME of the register
; LOCAL DURATION ;the register has different meanings in different contexts
;*********************************************************
.MACRO B_TEMPLOCAL
.DEF @0 = r23 ; Local. Second Level Routine Safe
.ENDMACRO
.MACRO B_TEMPLOCAL1
.DEF @0 = r24 ; Local. Second Level Routine Safe
.ENDMACRO
.MACRO B_TEMPLOCAL2
.DEF @0 = r25 ; Local. Second Level Routine Safe
.ENDMACRO
B_TEMPLOCAL B_Temp ; General use names
B_TEMPLOCAL1 B_Temp1
B_TEMPLOCAL2 b_Temp2
;ISR LOCALS
; UNUSED
;.DEF Not_used= r29
; GLOBALS
;FLAGS_1 flag data
;.SET F_Flags_1= 0b11111111 ; All flags
.SET F_accel= 0b00000001 ; Accelerating if 1, decel if 0
.SET BF_accel= 0x00 ; Flag bit location
.SET F_brake= 0b00000010 ; Brake set if 1
.SET BF_brake= 0x01 ;
.SET F_stop= 0b00000100
.SET BF_stop= 0x02
.SET F_reverse= 0b00001000
.SET BF_reverse= 0x03
.SET F_negative_err= 0b00010000
.SET BF_negative_err= 0x04
.SET F_use_backemf= 0b00100000
.SET BF_use_backemf= 0x05
;.SET F_= 0b01000000
;.SET BF_= 0x06
;.SET F_= 0b10000000
;.SET BF_= 0x07
.ifdef SWITCH_LOWPASS_ENABLED
;FLAGS_2 flag data - count and status for forward/reverse/brake/stop
.SET F_Flags_2= 0b00001111 ; All flags
.SET F_stop_count= 0b00010000
.SET BF_stop_count= 0x04
.SET F_brake_count= 0b00100000
.SET BF_brake_count= 0x05
.SET F_reverse_count= 0b01000000
.SET BF_reverse_count= 0x06
.SET F_foreward_count= 0b10000000
.SET BF_foreward_count= 0x07
;bits 0-3 the count- from 0-16
.endif SWITCH_LOWPASS_ENABLED
;PORT SETUP STUFF
.SET emf_port= 0x05 ;PB5 - INPUT -- Back EMF input
.SET emf_port_bit= 0b00100000 ;PIN1 ADC0
.SET momentum_port= 0x04 ;PB4 - INPUT -- Momentum Level input
.SET momentum_port_bit= 0b00010000 ;PIN2 ADC3 Acceleration-indicator output
.SET dir_in_port= 0x03 ;PB3 - INPUT -- Direction/Brake
.SET dir_in_port_bit= 0b00001000 ;PIN3 ADC2 Deceleration-indicator output
.SET throttle_port= 0x02 ;PB2 - INPUT -- Throttle Handle MAY USE INT0
.SET throttle_port_bit= 0b00000100 ;PIN7 ADC1 (Could also use INTO
; INT0 as DCC input.)
.SET pwm_port= 0x01 ;PB1 - OUTPUT -- PWM (off L)
.SET pwm_port_bit= 0b00000010 ;PIN6 NO ADC
; ONLY PWM PIN.
.SET dir_out_port= 0x00 ;PB0 - OUTPUT -- '1' = forward
.SET dir_out_port_bit= 0b00000001 ;PIN5 NO ADC '0' = reverse
.SET acsr_val= 0b10000000 ; bit 7 --AC0 1 --comparator disabled
.SET eecr_read_enable= 0b00000001 ; bit 4,5,6,7 --unused
; bit 3 --EERIE 0 --interrupt disabled
; bit 2 --EEMWE 0 --master write disabled
; bit 1 --EEWE 0 --write disabled
; bit 0 --EERE 1 --read ENABLED
.SET eecr_mwrite_enable= 0b00000100 ; bit 4,5,6,7 --unused
; bit 3 --EERIE 0 --interrupt disabled
; bit 2 --EEMWE 1 --master write ENABLED
; bit 1 --EEWE 0 --write disabled
; bit 0 --EERE 0 --read disabled
.SET eecr_write_enable= 0b00000110 ; bit 4,5,6,7 --unused
; bit 3 --EERIE 0 --interrupt disabled
; bit 2 --EEMWE 1 --master write ENABLED
; bit 1 --EEWE 1 --write ENABLED
; bit 0 --EERE 0 --read disabled
.SET admux_emf= 0b00100000 ; bit 4,3 --unused
; bit 7 --REFS1 0 Two bits:
; bit 6 --REFS0 0 Select VCC volt reference
; bit 5 --ADLAR 1 left adjust, 8 bit data in ADCH
; bit 2 --MUX2 0 Three bits:
; bit 1 --MUX1 0
; bit 0 --MUX0 0 Select ADC0 from PB5
.SET admux_throttle= 0b00100001 ; bit 4,3 --unused
; bit 7 --REFS1 0 Two bits:
; bit 6 --REFS0 0 Select VCC volt reference
; bit 5 --ADLAR 1 left adjust, 8 bit data in ADCH
; bit 2 --MUX2 0 Three bits:
; bit 1 --MUX1 0
; bit 0 --MUX0 1 Select ADC1 from PB2
.SET admux_direction= 0b00100010 ; bit 4,3 --unused
; bit 7 --REFS1 0 Two bits:
; bit 6 --REFS0 0 Select VCC volt reference
; bit 5 --ADLAR 1 left adjust, 8 bit data in ADCH
; bit 2 --MUX2 0 Three bits:
; bit 1 --MUX1 1
; bit 0 --MUX0 0 Select ADC2 from PB3
.SET admux_momentum= 0b00100011 ; bit 4,3 --unused
; bit 7 --REFS1 0 Two bits:
; bit 6 --REFS0 0 Select VCC volt reference
; bit 5 --ADLAR 1 left adjust, 8 bit data in ADCH
; bit 2 --MUX2 0 Three bits:
; bit 1 --MUX1 1
; bit 0 --MUX0 1 Select ADC3 from PB4
.SET admux_off= 0b00000000 ; bit 4,3 --unused
; bit 7 --REFS1 0 Two bits:
; bit 6 --REFS0 0 Select VCC volt reference
; bit 5 --ADLAR 0 right adjust
; bit 2 --MUX2 0 Three bits:
; bit 1 --MUX1 0
; bit 0 --MUX0 0 Select ADC0 from PB5
.SET adcsr_off= 0b00010011 ; bit 7 --ADCEN 0 ADC enable disable
; bit 6 --ADSC 0 Start conversion no
; bit 5 --ADFR 0 Free running mode disable
; bit 4 --ADIF 1 Interrupt flag clear
; bit 3 --ADIE 0 Interrupt enable disabled
; bit 2 --ADPS2 0 Three bits:
; bit 1 --ADPS1 1
; bit 0 --ADPS0 1 Prescaler div 8 (200kHz)
.SET adcsr_enable= 0b11110011 ; bit 7 --ADCEN 1 ADC enable ENABLED
; bit 6 --ADSC 1 Start conversion yes
; bit 5 --ADFR 1 Free running mode ENABLED
; bit 4 --ADIF 1 Interrupt flag clear
; bit 3 --ADIE 0 Interrupt enable disabled
; bit 2 --ADPS2 0 Three bits:
; bit 1 --ADPS1 1
; bit 0 --ADPS0 1 Prescaler div 8 (200kHz)
.SET mcucr_power_down_mode= 0b00110000
; bit 7 --unused
; bit 6 --PUD 0 pullups ENABLED
; bit 5 --SE 1 sleep ENABLED
; bit 4 --SM1 1 Two bits:
; bit 3 --SM0 0 Sleep in power down mode
; bit 2 --unused
; bit 1 --ISC01 0 Two bits:
; bit 0 --ISC00 0 INTO interrupt on logic
; low input
.SET wdtcr_off_enable= 0b00011000 ; enable watchdog turn off
.SET wdtcr_off= 0b00010000 ; watchdog turn off
.SET gimsk_val_off= 0b00000000 ; bit 7,4,3,2,1,0 --unused
; bit 6 --INTO 0 INTO interrupt disabled
; bit 5 --PCIE 0 pin change interrupt disabled
.SET gimsk_val_pcie= 0b00100000 ; bit 7,4,3,2,1,0 --unused
; bit 6 --INTO 0 INTO interrupt disabled
; bit 5 --PCIE 1 pin change interrupt ENABLED
.SET gifr_clear= 0b01100000 ; bit 7,4,3,2,1,0 --unused
; bit 6 --INTF0 1 INTO interrupt flag cleared
; bit 5 --PCIF 1 pin ch. interrupt flag cleared
.SET timsk_val_off= 0b00000000 ; bit 7,5,4,3,0 --unused
; bit 6 --OCIE1A 0 TC1 compare interrupt disabled
; bit 2 --TOIE1 0 TC1 overflow interrupt disabled
; bit 1 --TOIE0 0 TC0 overflow interrupt disabled
.SET timsk_enable_t1= 0b01000000 ; bit 7,5,4,3,0 --unused
; bit 6 --OCIE1A 0 TC1 compare interrupt disabled
; bit 2 --TOIE1 0 TC1 overflow interrupt disabled
; bit 1 --TOIE0 0 TC0 overflow interrupt disabled
.SET tifr_clear_tov0= 0b00000010 ; bit 7,5,4,3,0 --unused
; bit 6 --OCF1A 0 OCF1A flag not cleared
; bit 2 --TOV1 0 TOV1 flag not cleared
; bit 1 --TOV0 1 TOV0 flag CLEARED
.SET tccr1_enable_t1= 0b01100011
; bit 7 --CTC1 0 Clear on compare match no
; bit 6 --PWM1 1 PWM mode ENABLED
; bit 5 --COM1A1 1 Two bits:
; bit 4 --COM1A0 0 Clear output on OCR1A match
; Set output when TCNT1 = 0
; bit 3 --CS13 0 Four bits:
; bit 2 --CS12 0
; bit 3 --CS11 1
; bit 4 --CS10 1 CK*4: 156.25nS
; 256cnt = 25kHz
.LIST
|