0001 * 0002 * Program AT11.ASM 0003 * Dwayne Kincaid WD8OYG 0004 * Version 1.7, June 1995 0005 * 0006 * Version History: 0007 * V1.0 - Basic tuner. Manual tuning only. 0008 * V1.1 - Added serial interface for development. 0009 * Added 3 LEDs for SWR display. 0010 * Added tune button and tuning algorithm. 0011 * V1.2 - Upgraded fine tune. Increased tuning speed to 100 Hz. 0012 * V1.3 - Development for testing A to Ds. 0013 * V1.4 - Redesign tuning algorithm to make more code space. 0014 * V1.5 - Removed serial interface to make more code space. 0015 * Added LED flash for feedback. 0016 * V1.6 - Added autotune. Added Auto/Semi switch. 0017 * Added No tune if power < 2 watts. 0018 * V1.7 - Added 4th LED for Tuning Status. 0019 * 0020 * 0021 * Code developed on the SBC-2 from LDG Electronics, 0022 * 1445 Parran Road, St. Leonard MD 20685, 410-586-2177. 0023 * 0024 * Registers definitions for 68HC11 0025 * 0026 1000 regbas equ $1000 0027 0000 porta equ $00 0028 0004 portb equ $04 0029 0003 portc equ $03 0030 0008 portd equ $08 0031 000a porte equ $0A 0032 0007 ddrc equ $07 0033 0009 ddrd equ $09 0034 0026 pactl equ $26 0035 0030 adctl equ $30 0036 0031 adr1 equ $31 0037 0032 adr2 equ $32 0038 0039 option equ $39 0039 0040 * Constant definitions 0041 * 0042 0080 tdre equ $80 0043 00c3 sysopt equ $C3 0044 000d cr equ $0D 0045 000a lf equ $0A 0046 0020 space equ $20 0047 0048 00f0 leds_off equ $F0 0049 0080 green equ $80 0050 00c0 gr_yel equ $C0 0051 0040 yellow equ $40 0052 0060 yel_red1 equ $60 0053 0020 red1 equ $20 0054 0030 red1_red2 equ $30 0055 0010 red2 equ $10 0056 0057 0015 swr10 equ $15 0058 0020 swr15 equ $20 0059 0045 swr20 equ $45 0060 0060 swr25 equ $60 0061 0075 swr30 equ $75 0062 0063 0064 0065 * Variables. Stored in RAM. 0066 * 0067 0010 org $10 Start at address $0010. 0068 0069 0010 caps rmb $01 0070 0011 inds rmb $01 0071 0012 hilo rmb $01 0072 0013 fwd1 rmb $01 0073 0014 fwd2 rmb $01 0074 0015 rev1 rmb $01 0075 0016 rev2 rmb $01 0076 0017 ratio1 rmb $01 0077 0018 ratio2 rmb $01 0078 0019 temp_rat rmb $01 0079 001a temp_ind rmb $01 0080 001b temp_cap rmb $01 0081 001c temp_hilo rmb $01 0082 001d indhi rmb $01 0083 001e caphi rmb $01 0084 0085 * Start of EEPROM 0086 0087 b600 org $B600 0088 b600 8e 00 ff lds #$00FF 0089 b603 ce 10 00 ldx #regbas 0090 b606 bd b6 d9 jsr delay2 0091 0092 * Initialize the A/D. 0093 0094 b609 86 c3 ldaa #sysopt 0095 b60b a7 39 staa option,x 0096 0097 * Initialize data direction ports. 0098 0099 b60d 1c 07 ff bset ddrc,x #$FF 0100 b610 1d 09 ff bclr ddrd,x #$FF 0101 b613 1c 26 88 bset pactl,x #$88 0102 0103 * Initialize variables 0104 0105 b616 86 00 ldaa #$00 0106 b618 97 10 staa caps 0107 b61a 97 11 staa inds 0108 b61c 97 12 staa hilo 0109 b61e 97 13 staa fwd1 0110 b620 97 16 staa rev2 0111 0112 b622 bd b7 17 jsr led_flash 0113 b625 20 6b bra end_sw 0114 * 0115 * Main Loop. Checks for switch presses. 0116 * 0117 main_loop 0118 0119 b627 96 14 ldaa fwd2 0120 b629 81 02 cmpa #$02 0121 b62b 25 0a blo get_sw 0122 0123 b62d 1e 00 02 06 brset porta,x $02 get_sw 0124 0125 b631 96 18 ldaa ratio2 0126 b633 81 75 cmpa #swr30 0127 b635 22 1a bhi tune_sw 0128 0129 get_sw 0130 b637 1f 00 01 16 brclr porta,x $01 tune_sw 0131 b63b 96 10 ldaa caps 0132 b63d 1f 08 04 2d brclr portd,x $04 cap_up 0133 b641 1f 08 08 32 brclr portd,x $08 cap_dn 0134 b645 96 11 ldaa inds 0135 b647 1f 08 10 35 brclr portd,x $10 ind_up 0136 b64b 1f 08 20 3a brclr portd,x $20 ind_dn 0137 0138 b64f 20 41 bra end_sw 0139 0140 * 0141 * Start of switch handling routines. 0142 * Tune switch was pressed 0143 tune_sw 0144 0145 b651 96 14 ldaa fwd2 0146 b653 81 02 cmpa #$02 0147 b655 25 41 blo end_sw2 0148 0149 b657 1c 00 10 bset porta,x #red2 0150 0151 b65a bd b7 36 jsr tune_loop 0152 b65d bd b7 7a jsr fine_ind 0153 b660 bd b7 a1 jsr fine_cap 0154 b663 bd b7 7a jsr fine_ind 0155 0156 b666 1d 00 10 bclr porta,x #red2 Set the red2 LED off. 0157 0158 b669 bd b6 d9 jsr delay2 0159 b66c 20 24 bra end_sw 0160 0161 * Capacitor up switch was pressed 0162 cap_up 0163 b66e 81 ff cmpa #$FF 0164 b670 27 26 beq end_sw2 0165 b672 7c 00 10 inc caps 0166 b675 20 1b bra end_sw 0167 0168 * Capacitor down switch was pressed 0169 cap_dn 0170 b677 81 00 cmpa #$00 0171 b679 27 1d beq end_sw2 0172 b67b 7a 00 10 dec caps 0173 b67e 20 12 bra end_sw 0174 0175 * Inductor up switch was pressed 0176 ind_up 0177 b680 81 ff cmpa #$FF 0178 b682 27 14 beq end_sw2 0179 b684 7c 00 11 inc inds 0180 b687 20 09 bra end_sw 0181 0182 * Inductor down switch was pressed 0183 ind_dn 0184 b689 81 00 cmpa #$00 0185 b68b 27 0b beq end_sw2 0186 b68d 7a 00 11 dec inds 0187 b690 20 00 bra end_sw 0188 0189 * End of Switch routines. 0190 0191 end_sw 0192 b692 8d 09 bsr get_swr 0193 b694 8d 43 bsr delay2 0194 b696 20 8f bra main_loop 0195 0196 end_sw2 0197 b698 bd b7 17 jsr led_flash 0198 b69b 20 8a bra main_loop 0199 0200 * 0201 * Gets the FWD, REV and SWR Ratio. 0202 * Calls set_led. 0203 get_swr 0204 b69d 14 18 ff bset ratio2 #$FF 0205 b6a0 bd b7 da jsr set_relay 0206 0207 b6a3 8d 2b bsr delay 0208 0209 b6a5 86 10 ldaa #$10 0210 b6a7 a7 30 staa adctl,x 0211 b6a9 1f 30 80 fc ad_loop brclr adctl,x #tdre ad_loop 0212 0213 b6ad a6 31 ldaa adr1,x 0214 b6af 97 15 staa rev1 0215 b6b1 a6 32 ldaa adr2,x 0216 b6b3 97 14 staa fwd2 0217 0218 b6b5 81 00 cmpa #$00 0219 b6b7 27 12 beq keep_ratio 0220 0221 b6b9 dc 15 ldd rev1 0222 b6bb 3c pshx 0223 b6bc de 13 ldx fwd1 0224 b6be 02 idiv 0225 b6bf df 17 stx ratio1 0226 b6c1 38 pulx 0227 0228 b6c2 96 15 ldaa rev1 0229 b6c4 91 14 cmpa fwd2 0230 b6c6 25 03 blo keep_ratio 0231 b6c8 14 18 ff bset ratio2 #$FF 0232 keep_ratio 0233 b6cb 8d 15 bsr led_set 0234 b6cd 96 18 ldaa ratio2 0235 b6cf 39 rts 0236 0237 * 0238 * Delay loop. Provides 10 mSec delay for relay switching. 0239 * 0240 0241 b6d0 18 ce 08 00 delay ldy #$0800 0242 b6d4 18 09 dloop dey 0243 b6d6 26 fc bne dloop 0244 b6d8 39 rts 0245 0246 * Big delay loop. Provides 100 mSec delay for switches. 0247 0248 b6d9 18 ce 60 00 delay2 ldy #$6000 0249 b6dd 18 09 dloop2 dey 0250 b6df 26 fc bne dloop2 0251 b6e1 39 rts 0252 0253 * 0254 * Sets the LED's according to Ratio. 0255 * 0256 led_set 0257 b6e2 1d 00 e0 bclr porta,x #$E0 0258 0259 b6e5 96 14 ldaa fwd2 0260 b6e7 81 02 cmpa #$02 0261 b6e9 25 2b blo led_end 0262 0263 b6eb 96 18 ldaa ratio2 0264 0265 b6ed 81 20 cmpa #swr15 0266 b6ef 25 0e blo swr_15 0267 0268 b6f1 81 45 cmpa #swr20 0269 b6f3 25 0f blo swr_20 0270 0271 b6f5 81 60 cmpa #swr25 0272 b6f7 25 10 blo swr_25 0273 0274 b6f9 81 75 cmpa #swr30 0275 b6fb 25 11 blo swr_30 0276 0277 b6fd 20 14 bra swr_35 0278 0279 b6ff 1c 00 80 swr_15 bset porta,x #green 0280 b702 20 12 bra led_end 0281 b704 1c 00 c0 swr_20 bset porta,x #gr_yel 0282 b707 20 0d bra led_end 0283 b709 1c 00 40 swr_25 bset porta,x #yellow 0284 b70c 20 08 bra led_end 0285 b70e 1c 00 60 swr_30 bset porta,x #yel_red1 0286 b711 20 03 bra led_end 0287 b713 1c 00 20 swr_35 bset porta,x #red1 0288 0289 led_end 0290 b716 39 rts 0291 0292 * 0293 * Flash all LEDs on, then off. 0294 * 0295 led_flash 0296 b717 bd b6 d9 jsr delay2 0297 b71a 1c 00 80 bset porta,x #$80 0298 b71d bd b6 d9 jsr delay2 0299 b720 1c 00 40 bset porta,x #$40 0300 b723 bd b6 d9 jsr delay2 0301 b726 1c 00 20 bset porta,x #$20 0302 b729 bd b6 d9 jsr delay2 0303 b72c 1c 00 10 bset porta,x #$10 0304 b72f bd b6 d9 jsr delay2 0305 b732 1d 00 f0 bclr porta,x #$F0 0306 0307 b735 39 rts 0308 0309 * 0310 * Tune Loop. Calls get_ind to start course tuning. 0311 * 0312 tune_loop 0313 b736 14 19 ff bset temp_rat #$FF 0314 0315 b739 bd b7 f6 jsr set_hilo_off 0316 b73c 8d 12 bsr get_ind 0317 0318 b73e bd b7 ef jsr set_hilo_on 0319 b741 8d 0d bsr get_ind 0320 0321 tune_end 0322 b743 96 1b ldaa temp_cap 0323 b745 97 10 staa caps 0324 b747 96 1a ldaa temp_ind 0325 b749 97 11 staa inds 0326 b74b 96 1c ldaa temp_hilo 0327 b74d 97 12 staa hilo 0328 b74f 39 rts 0329 0330 * 0331 * Loop to get the lowest inductor course value. 0332 * Calls get_cap. 0333 get_ind 0334 b750 86 01 ldaa #$01 0335 b752 97 11 staa inds 0336 ind_loop 0337 b754 8d 10 bsr get_cap 0338 0339 b756 96 18 ldaa ratio2 0340 b758 81 15 cmpa #swr10 0341 b75a 25 09 blo ind_end 0342 0343 b75c 78 00 11 lsl inds 0344 b75f 96 11 ldaa inds 0345 b761 81 00 cmpa #$00 0346 b763 26 ef bne ind_loop 0347 ind_end 0348 b765 39 rts 0349 0350 * 0351 * Loop to get the lowest capacitor course value. 0352 * Calls best_loop 0353 get_cap 0354 b766 86 01 ldaa #$01 0355 b768 97 10 staa caps 0356 cap_loop 0357 b76a 8d 56 bsr best_loop 0358 b76c 81 15 cmpa #swr10 0359 b76e 25 09 blo cap_end 0360 0361 b770 78 00 10 lsl caps 0362 b773 96 10 ldaa caps 0363 b775 81 00 cmpa #$00 0364 b777 26 f1 bne cap_loop 0365 cap_end 0366 b779 39 rts 0367 0368 * 0369 * Routine to find fine inductor setting 0370 * Calls best_loop 0371 fine_ind 0372 b77a 96 14 ldaa fwd2 0373 b77c 81 02 cmpa #$02 0374 b77e 25 1e blo fine_ind_end 0375 0376 b780 14 19 ff bset temp_rat #$FF 0377 0378 b783 96 11 ldaa inds 0379 b785 48 lsla 0380 b786 97 1d staa indhi 0381 0382 b788 74 00 11 lsr inds 0383 0384 fine_ind_loop 0385 0386 b78b 8d 35 bsr best_loop 0387 0388 b78d 81 15 cmpa #swr10 0389 b78f 25 0d blo fine_ind_end 0390 0391 b791 7c 00 11 inc inds 0392 b794 96 11 ldaa inds 0393 b796 91 1d cmpa indhi 0394 b798 26 f1 bne fine_ind_loop 0395 0396 b79a 96 1a ldaa temp_ind 0397 b79c 97 11 staa inds 0398 0399 fine_ind_end 0400 0401 b79e 8d 3a bsr set_relay 0402 b7a0 39 rts 0403 0404 * 0405 * Routine to find fine capacitor setting 0406 * Calls best_loop 0407 fine_cap 0408 0409 b7a1 14 19 ff bset temp_rat #$FF 0410 0411 b7a4 96 10 ldaa caps 0412 b7a6 48 lsla 0413 b7a7 97 1e staa caphi 0414 0415 b7a9 74 00 10 lsr caps 0416 0417 fine_cap_loop 0418 b7ac 8d 14 bsr best_loop 0419 0420 b7ae 81 15 cmpa #swr10 0421 b7b0 25 0d blo fine_cap_end 0422 0423 b7b2 7c 00 10 inc caps 0424 b7b5 96 10 ldaa caps 0425 b7b7 91 1e cmpa caphi 0426 b7b9 26 f1 bne fine_cap_loop 0427 0428 b7bb 96 1b ldaa temp_cap 0429 b7bd 97 10 staa caps 0430 0431 fine_cap_end 0432 0433 b7bf 8d 19 bsr set_relay 0434 b7c1 39 rts 0435 0436 * 0437 * Subroutine to test if best match found yet. 0438 * 0439 best_loop 0440 b7c2 bd b6 9d jsr get_swr 0441 0442 b7c5 91 19 cmpa temp_rat 0443 b7c7 22 0e bhi best_fin 0444 0445 b7c9 97 19 staa temp_rat 0446 b7cb 96 10 ldaa caps 0447 b7cd 97 1b staa temp_cap 0448 b7cf 96 11 ldaa inds 0449 b7d1 97 1a staa temp_ind 0450 b7d3 96 12 ldaa hilo 0451 b7d5 97 1c staa temp_hilo 0452 best_fin 0453 b7d7 96 18 ldaa ratio2 0454 b7d9 39 rts 0455 0456 * 0457 * Set Inductor, Capacitor and Hi/Lo-Z relays 0458 * 0459 set_relay 0460 b7da 96 10 ldaa caps 0461 b7dc a7 03 staa portc,x 0462 b7de 96 11 ldaa inds 0463 b7e0 a7 04 staa portb,x 0464 0465 b7e2 96 12 ldaa hilo 0466 b7e4 81 01 cmpa #$01 0467 b7e6 27 04 beq hilo_on 0468 b7e8 8d 0c bsr set_hilo_off 0469 b7ea 20 02 bra hilo_done 0470 hilo_on 0471 b7ec 8d 01 bsr set_hilo_on 0472 hilo_done 0473 b7ee 39 rts 0474 0475 * Subroutine to set the Hi/Lo-Z relay On. 0476 set_hilo_on 0477 b7ef 14 12 01 bset hilo #$01 0478 b7f2 1c 00 08 bset porta,x #$08 0479 b7f5 39 rts 0480 0481 * Subroutine to set the Hi/Lo-Z relay Off. 0482 set_hilo_off 0483 b7f6 15 12 01 bclr hilo #$01 0484 b7f9 1d 00 08 bclr porta,x #$08 0485 b7fc 39 rts 0486 0487 *** END