Jump to content

Recommended Posts

I have been trying to turn on the weak pull-up feature of portb on a pic16f882 but can't seem to get it to work. I have been working my way through the options learning about PIC microcontrollers but I'm no expert...

 

Here is some sample code I have been trying to make work:

 

#include <system.h>
#include <stdlib.h>

#pragma CLOCK_FREQ 8000000

#pragma DATA _CONFIG1, _LVP_OFF & _FCMEN_OFF \
& _IESO_OFF & _BOR_OFF & _CPD_OFF \
& _CP_OFF & _MCLRE_OFF & _PWRTE_OFF \
& _WDT_OFF & _INTRC_OSC_NOCLKOUT \
& _EXTRC_OSC_NOCLKOUT & _INTOSC
#pragma DATA _CONFIG2, _WRT_OFF & _BOR40V


void main() {

  	char porta_buf, portb_buf = 0;

//set outputs
porta = trisa = 0;

// set inputs (jumpers)
set_bit(portb_buf, 2);
set_bit(portb_buf, 3);
set_bit(portb_buf, 4);
set_bit(portb_buf, 5);

portb = trisb = portb_buf;

// enable pull up on portb inputs
option_reg.7 = 0;
wpub.2 = 1;
wpub.3 = 1;
wpub.4 = 1;
wpub.5 = 1;

// startup delay
delay_ms(5000);

// main program loop
while (1) {
	porta_buf = 0;

	if (!portb.2) {
		set_bit(porta_buf, 5);
	}
	if (!portb.3) {
		set_bit(porta_buf, 4);
	}
	if (!portb.4) {
		set_bit(porta_buf, 3);
	}
	if (!portb.5) {
		set_bit(porta_buf, 2);
	}

	// set pins
	porta = porta_buf;

}
}

 

What I'm observing is that the input pins on portb are always low. When I break out the voltmeter and check the pins, there isn't any voltage on them.

Maybe I misunderstood the purpose of enabling the pull-up on the input pins. I thought I could turn it on and thus, avoid adding pull-up resistors in hardware?

 

Or, I have made an error in my above code. Either is a likely possibility...

 

Anybody see my mistake?

Link to post
Share on other sites

The pins RB<0:5> are set as analog inputs by default and - as datasheet clearly states - "setting a pin to an analog input automatically disables the digital input circuitry, weak pull-ups, and interrupt-on-change if available".

 

So, you need to add the line anselh = 0; at the begin of your program; this disables analog features and enables all the pins for digital I/O.

 

Hope it helps.

Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...