Log in

View Full Version : Program not running on 16F88



PaulMaker
- 4th July 2024, 20:10
Greetings all,

I purchased PBP3 a few months ago and have been able to write a few programs on my own. I have been using Microcode Studio to compile and a Pickit 4 to transfer the HEX files to the MCUs.
However, this time i'm facing an issue that i'm not being able to understand.
I already searched the forum but could not find a solution.

Currently I'm checking some of the amazing examples of Mr. Darrel Taylor. I loaded a 16F88 MCU with the MIBAM example but I cannot get any LEDs to light up.
I added an on/off startup LED indication to test the programming and that LED works...but not the scan effect from the MIBAM code.


Here's the code i'm using:






#CONFIG
__config _CONFIG1, _WDT_OFF & _FOSC_INTOSCIO & _MCLRE_OFF & _CP_OFF & _LVP_OFF
#ENDCONFIG


'************************************************* ****************************
'CONFIGURATION


'PIE1=0
'PIE2=0
'PCON=%11111111
'EECON1=0
CCP1CON=0 ' Disable CCP Module
CVRCON=0


CMCON=7 ' analog comparators off
OPTION_REG.7=1 ' Disable Pull-Ups


OSCTUNE=%00000000
OSCCON=%01111000 '16f88 - 8Mhz


TRISA = %00000000
TRISB = %00000000


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
' --------------------------------------------------------------------------
disable debug
;---------------------------------------------------------------------------




'************************************************* ****************************


'VARiables


TIM1 VAR WORD '
TIM2 VAR WORD '
TIM3 VAR WORD '
TIM4 VAR WORD
DIRLED VAR BYTE
CNT VAR WORD


KM VAR WORD 'POWER-ON COUNTER


LINE1 CON $80

'************************************************* ****************************
'PORTS & PINS


A2 VAR PORTA.2 'OUT LED
b1 VAR PORTb.1 'OUT LED


'************************************************* ****************************






;----[ MIBAM Setup ]--------------------------------------------------------
'BAM_FREQ CON 100 ; 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 3 ; How many BAM Pins are used?
INCLUDE "MIBAM.pbp" ; Mirror Image BAM 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 (PORTB,0, LED1) ; and the associated Duty variables
BAM_PIN (PORTB,1, LED2)
BAM_PIN (PORTB,2, LED3)
; BAM_PIN (PORTB,3, LED4)
; BAM_PIN (PORTB,4, LED5)
; BAM_PIN (PORTB,5, LED6)
; BAM_PIN (PORTB,6, LED7)
; BAM_PIN (PORTB,7, LED8)
endm
BAM_INIT BAM_LIST ; Initialize the Pins
ENDASM



'************************************************* ****************************
CLEAR
'************************************************* ****************************


;_________________________________________________
Speed CON 2'6 ; Smaller = Faster
TracerSpeed CON 5'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

startup:

for CNT =1 to 2 'for power on test purposes
high b1
pause 1000
low b1
pause 1000


next CNT


'************************************************* ****************************

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

high a2

GOTO Main

Can anyone help troubleshoot this issue?

I thank you in advance

richard
- 5th July 2024, 06:39
Executing a Clear after the include file certainly doesn't help

get rid of this
'************************************************* ****************************
CLEAR
'************************************************* ****************************



CCP1CON=0 ' Disable CCP Module
CVRCON=0




CMCON=7 ' analog comparators off
OPTION_REG.7=1 ' Disable Pull-Ups




OSCTUNE=%00000000
OSCCON=%01111000 '16f88 - 8Mhz


Should be [comparator/ccp etc are off by default & bit 3 of OSCCON is read only ]


ANSEL=0
OPTION_REG.7=1 ' Disable Pull-Ups
OSCCON=%01110001 '16f88 - 8Mhz


BAM_COUNT CON 3 ; will not do much or look like a cylon in cylon demo

PaulMaker
- 6th July 2024, 10:43
Greetings Richard,

thank you for your help.

I tested your recommendations and the thing that worked was removing the clear statement.
You were correct, the clear line was not doing anything good.

Once I removed it, it started working as expected.

Thanks again.