I need help on 16F886, is there config to disable MSSP?
Here's some suggestion in case of doubt
- Open the datasheet under the Pin diagram section (Page 5)
- See what else your pin may have on (ADCs, Comparator etc etc)
- if so refer to each section of the extra module you want to disable, or see if they're already enable at POR
Here you don't have anything else than MSSP Pins... so let's see section 13 and it's related Registers.
Register 13-1: SSPSTAT
Nothing in the list seems to enable/disable the module, let's go to the next one
Register 13-2: SSPCON
SSPEN bit 5
this bit should be =0 to disable the MSSP port, the POR values says it's already 0. Good practice to clear it yourself for safety sake, while not 100% needed.bit 5 SSPEN: Synchronous Serial Port Enable bit
In both modes, when enabled, these pins must be properly configured as input or output
In SPI mode:
1 = Enables serial port and configures SCK, SDO, SDI and SS as the source of the serial port pins
0 = Disables serial port and configures these pins as I/O port pins
In I2 C mode:
1 = Enables the serial port and configures the SDA and SCL pins as the source of the serial port pins
0 = Disables serial port and configures these pins as I/O port pins
same for all other register.. if there's any other
HTH
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Somehow the RA.5 randomly stays high since I use RA.5 as pulseout. Even that ADC is disabled, comparator disabled.
Include "bs2defs.bas"
define lcd_dreg portc
define lcd_dbit 0 '0
define lcd_rsreg portc
define lcd_rsbit 4
define lcd_ereg portc
define lcd_ebit 5
define lcd_bits 4
define lcd_lines 2
define lcd_commandus 1500 '1500 2000
define lcd_dataus 44 '44
PAUSE 1000
ADCON1=$0F ' all digital
ANSEL=%00000000
ADCON0 = $00
anselh = %0010 'Convert from Analog input to Digital input.
trisb = %0010 '0=output, 1=input in analog.
anselh = %01000000 'sets portc.6 as input
trisc =%01000000 'sets portc.6 as input
start:
lcdout $FE,1,"TEST THE LCD"
lcdout $FE,$C0," TEST"
PAUSE 1000
high porta.2
pause 500
low porta.2
pause 500
high portb.5
pause 500
low portb.5
lcdout $FE,1,"RESETTING"
pulsout porta.5,1000
pause 1000
pulsout porta.5,1000
pause 1000
goto start
Above program works, but when in big program, RA.5 stays high.
in other program, the following list is added
ANSEL=%00100100 'Rev E
TRISA=%00000011 'Rev E
ADCON1 = %1
ADCON0 = %01000101 'Rev E
CM1CON0.7 = 0 'disables comp1
CM2CON0.7 = 0 'disables comp2
SSPCON.5 = 0 'disables MSSP
'ADCON1=$0F
and those line
pulsout porta.5,1000
that way randomly staying high and no longer getting pulsout. strange.
OK let's see what RA5 is made of...same rules apply.
We have AN4, C2OUT and SS listed at Page 5.
Let's refer to PORTA section, maybe we have an open collector... maybe....
Page 47, Figure 3.6... mmm nope can be used as GP i/o.
So let's see the ADC section, table 9-2 page 111... ANSEL register.
This have to be
ANSEL=0
ADCON0=0
Let's play safe and disable all ADCs
ANSELH=0
Now the comparators, Register8-1, page 90. At POR they're already disabled... but let's play safe.
CM1CON0=0
CM2CON0=0
Voltage reference, register 8-5, page 99
VRCON = 0
Pulsout will toggle the I/O state, maybe not a bad idea to clear all I/o at the beginning.
PORTA=0
PORTB=0
This ought to work. Case it doesn't, maybe not a bad idea to try
OR add a LOW PORTA.5 after the PULSOUT line.Code:HIGH PORTA.5 PAUSE whatever delay LOW PORTA.5
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Seems to work as design here using the following
Code:@ DEVICE PIC16F886, INTOSCIO,WDT_OFF,MCLR_OFF,LVP_OFF,PROTECT_OFF,BOD_OFF,CPD_OFF,IESO_OFF,FCMEN_OFF,PWRT_OFF 'Device line OSCCON= %01100000 Include "bs2defs.bas" DEFINE LCD_DREG PORTC 'LCD data port DEFINE LCD_DBIT 0 'LCD data starting bit 0 or 4 DEFINE LCD_RSREG PORTC 'LCD register select port DEFINE LCD_RSBIT 4 'LCD register select bit DEFINE LCD_EREG PORTC 'LCD enable port DEFINE LCD_EBIT 5 'LCD enable bit DEFINE LCD_BITS 4 'LCD bus size 4 or 8 DEFINE LCD_LINES 2 'Number lines on LCD DEFINE LCD_COMMANDUS 2000 'Command delay time in us DEFINE LCD_DATAUS 50 'Data delay time in us ANSEL=0 ANSELH=0 ADCON0=0 CM1CON0=0 CM2CON0=0 VRCON = 0 PORTA=0 PORTB=0 PORTC=0 TRISA=0 TRISB=0 TRISC=0 PAUSE 1000 start: lcdout $FE,1,"TEST THE LCD" lcdout $FE,$C0," TEST" PAUSE 1000 high porta.2 pause 500 low porta.2 pause 500 high portb.5 pause 500 low portb.5 lcdout $FE,1,"RESETTING" pulsout porta.5,1000 pause 1000 pulsout porta.5,1000 pause 1000 goto start
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Bookmarks