PICkit3 MCLR to Vdd Pull-Up Resistor

mplabxpicpickitprogrammerpullup

I'll preempt this by saying that I'm a software person whose education (unfortunately) didn't even touch on the most basics of hardware or circuits.

I'm attempting to program a PIC16f1709 microchip with a PICkit3 via MPLab X v2.3. The PIC is part of a larger board, but is currently blank. The board in question is a manufactured product, not a dev board, but it does have exposed pins into which I've wired the PICKit, and I'm sure that the pins match up. I'm powering the board with its own power supply. The board doesn't have a pull-up resistor from Vpp/MCLR to Vdd. According to the PICkit User Guide, that resistor is "recommended" (see paragraph 2.4.2).

When I try to program the controller, MPLab warns me first that the target ID is being read as 0x00 rather than the expected value, and then after programming it reports that the instruction at address 0x00 is 0x00 rather than the expected first instruction. My understanding is that this means that the PICkit is not able to communicate with the controller, because it is reading everything as 0x00. I've read that a freshly-erased PIC sets all bytes to one, so even if my code didn't get programmed, it shouldn't be reading zeroes.

Target voltage detected
Target Device ID (0x0) does not match expected Device ID (0x3054).

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x3f

Device Erased...

Programming...
program memory
Address: 0 Expected Value: 3180 Received Value: 0
Failed to program device

So my question is this: is the pull-up resistor required (as I've read from less "official" sources)? Is the fact that it is missing causing the programmer to be unable to communicate with the controller?

Best Answer

No the pullup resistor isn't required, however without it, unless there is something else to perform its function, the chip won't run under normal operation.

The purpose of the resistor is to ensure that MCLR is held high so that the chip isn't in a RESET state, which allows it to run. If you don't have that resistor you would need some other system to ensure that it is held high - maybe a reset / power management chip.

The fact that you can't program won't be related to that resistor, instead you should look to other connection or circuit issues, such as a lack of decoupling capacitors, not all the power pins connected, or other components on the programming pins interfering with the communication.