CLEAR ;-- 16F887 Internal OSC @ 8Mhz ------ @ __config _CONFIG1, _INTOSCIO & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF ANSEL = 0 ANSELH = 0 OSCCON = %01110001 DEFINE OSC 8 ;____[ For 12F/16F only - Interrupt Context save locations]_________________ wsave var byte $20 SYSTEM ' location for W if in bank0 ;wsave var byte $70 SYSTEM ' Alternate save location for W ' if using $70, comment out wsave1-3 ' --- IF any of these next three lines cause an error ?? ------------------- ' Comment them out to fix the problem ---- ' -- The chip being used determines which variables are needed ------------- wsave1 VAR BYTE $A0 SYSTEM ' location for W if in bank1 wsave2 VAR BYTE $120 SYSTEM ' location for W if in bank2 wsave3 VAR BYTE $1A0 SYSTEM ' location for W if in bank3 '---DO NOT change these----------------------------------------------------- ssave VAR BYTE BANK0 SYSTEM ' location for STATUS register psave VAR BYTE BANK0 SYSTEM ' location for PCLATH register ;----[ MIBAM Setup ]-------------------------------------------------------- BAM_FREQ CON 80 ; Desired Refresh rate Limit ;ScopeSync VAR PORTB.0 ; if declared, generates sync for OScope ;DEFINE BAM_INFO 1 ; use to display MIBAM results BAM_COUNT CON 8 ; How many BAM Pins are used? INCLUDE "MIBAM.pbp" ; Bit Angle Modulation module BAM_DUTY VAR BYTE[BAM_COUNT] LED1 VAR BAM_DUTY[0] ; group them in an array for easy access LED2 VAR BAM_DUTY[1] ; with FOR loops etc. LED3 VAR BAM_DUTY[2] LED4 VAR BAM_DUTY[3] LED5 VAR BAM_DUTY[4] LED6 VAR BAM_DUTY[5] LED7 VAR BAM_DUTY[6] LED8 VAR BAM_DUTY[7] ASM BAM_LIST macro ; Define PIN's to use for BAM BAM_PIN (PORTD,0, LED1) ; and the associated Duty variables BAM_PIN (PORTD,1, LED2) BAM_PIN (PORTD,2, LED3) BAM_PIN (PORTD,3, LED4) BAM_PIN (PORTD,4, LED5) BAM_PIN (PORTD,5, LED6) BAM_PIN (PORTD,6, LED7) BAM_PIN (PORTD,7, LED8) endm BAM_INIT BAM_LIST ; Initialize the Pins ENDASM ;_________________________________________________ Speed CON 6 ; Smaller = Faster TracerSpeed CON 15 ; Smaller = Faster Left/Right Brightness CON 200 ; Tracers DutyCycle DrainSpeed CON 30 ; Smaller = Shorter Trail Idx VAR BYTE LoopCount VAR BYTE NextLED VAR BYTE TraceDIR VAR BIT TraceDIR = 0 LoopCount = 0 NextLED = 0 Main: if LoopCount = TracerSpeed then ; __[ Cylon/Kitt Scanner ]__ LoopCount = 0 BAM_DUTY(NextLED) = Brightness if TraceDIR then ; if scanning left NextLED = NextLED - 1 if NextLED = 0 then TraceDIR = 0 else ; else scanning right NextLED = NextLED + 1 if NextLED = BAM_COUNT-1 then TraceDIR = 1 endif endif FOR Idx = 0 to BAM_COUNT - 1 ; Drain all dutycycles IF BAM_DUTY(Idx) > 0 then BAM_DUTY(Idx) = BAM_DUTY(Idx)*DrainSpeed/(DrainSpeed+1) ENDIF NEXT Idx pause Speed LoopCount = LoopCount + 1 GOTO Main