EmbeddedRelated.com
Forums

Programming Surface Mount PICs

Started by Adam Kumpf July 21, 2004
Hello All,

   I am working on a tiny board with a surface mount microcontroller.
(PIC16F876A)  I have a P16PRO40 programmer, and it works quite well
for DIP packaged chips, but there's no easy/good way to program
surface mount devices.  So I thought it wouldn't be too difficult to
pull over the critical lines from the programmer to my new PCB (that
has a pic16f876a on it) and program the micro on-board.

   I've hooked-up V+(13V), PGD, PGC, GND, and VDD(5V), but the chip
doesn't want to program.  I shorted out the crystal oscillator from
the chip so it shouldn't be "running a program".  Because other
components are attached, I think swinging the powerline (+5V) may have
a large time-constant associated with it.  I tried hooking the 5V line
to be "always-on", but I still get an error when it checks to see what
was written. Address#0x0000 = 0x3880 instead of my data (0x100) and in
fact... the correct data was not written.

   Any help would be greatly appreciated.  I would like to stay away
from going out and buying another programmer.  It seems like if I
hooked up the correct lines, I should be able to program surface mount
device in-circuit with a standard DIP programmer.

Thanks,
  Adam Kumpf
>Hello All, > > I am working on a tiny board with a surface mount microcontroller. >(PIC16F876A) I have a P16PRO40 programmer, and it works quite well >for DIP packaged chips, but there's no easy/good way to program >surface mount devices. So I thought it wouldn't be too difficult to >pull over the critical lines from the programmer to my new PCB (that >has a pic16f876a on it) and program the micro on-board. > > I've hooked-up V+(13V), PGD, PGC, GND, and VDD(5V), but the chip >doesn't want to program. I shorted out the crystal oscillator from >the chip so it shouldn't be "running a program". Because other >components are attached, I think swinging the powerline (+5V) may have >a large time-constant associated with it. I tried hooking the 5V line >to be "always-on", but I still get an error when it checks to see what >was written. Address#0x0000 = 0x3880 instead of my data (0x100) and in >fact... the correct data was not written. > > Any help would be greatly appreciated. I would like to stay away >from going out and buying another programmer. It seems like if I >hooked up the correct lines, I should be able to program surface mount >device in-circuit with a standard DIP programmer. > >Thanks, > Adam Kumpf >
If you use a Microchip ICD2 programmer to program these devices on-board, it actually tests to make sure that the on-board oscillator is running, so I don't think you need to short out the crystal. The other thing I have found is that the lead length between the programmer and the device is critical. The lead supplied with the ICD2 is about 30cm long, and this seems to be the maximum you can get away with. However, we have had good results by using cable which screened clock and data lines with seperate earths. Crosstalk between clock and data seems to be a big problem. The other thing to look at is whether or not your programmer supports the revision A device.
On 21 Jul 2004 08:33:02 -0700, kumpf@mit.edu (Adam Kumpf) wrote:

>Hello All, > > I am working on a tiny board with a surface mount microcontroller. >(PIC16F876A) I have a P16PRO40 programmer, and it works quite well >for DIP packaged chips, but there's no easy/good way to program >surface mount devices. So I thought it wouldn't be too difficult to >pull over the critical lines from the programmer to my new PCB (that >has a pic16f876a on it) and program the micro on-board. > > I've hooked-up V+(13V), PGD, PGC, GND, and VDD(5V), but the chip >doesn't want to program. I shorted out the crystal oscillator from >the chip so it shouldn't be "running a program". Because other >components are attached, I think swinging the powerline (+5V) may have >a large time-constant associated with it. I tried hooking the 5V line >to be "always-on", but I still get an error when it checks to see what >was written. Address#0x0000 = 0x3880 instead of my data (0x100) and in >fact... the correct data was not written. > > Any help would be greatly appreciated. I would like to stay away >from going out and buying another programmer. It seems like if I >hooked up the correct lines, I should be able to program surface mount >device in-circuit with a standard DIP programmer. > >Thanks, > Adam Kumpf
Try applying a seperate +5V supply - I don't think the F87x has any requirement to sequence Vdd during programming. There is no need to short the crystal - taking Vpp/MCLR to Vpp halts any existing program
What if I have a PICStart Plus and I'm not trying for in-circuit
programming?  If I can somehow connect jumpers from the SMD to the ZIF
socket, is it possible to program the SMDs as if they were DIPs?  Or
is there an adapter that already does this?



-Robert Scott
 Ypsilanti, Michigan
(Reply through this forum, not by direct e-mail to me, as automatic reply address is fake.)
    Thanks for everyone's input.  Knowing that the +5V line (VDD) could stay
high made debugging much more simple.  I shortened the leads (about 25cm ~
10inches) and stopped the oscillator for programming and it worked.  I think
that programming mode is intended to start before the chip starts to execute
its program, so unless you have turned on the start-up timer in the config
register, grounding the crystal may be needed.  One more thing, you can
figure out a lot by looking at the signals at the pins of the
microcontroller.  The data/clock lines should go as high as +5V and the MCLR
pin up to +13V.

Thanks again.

Best Regards,
    Adam Kumpf



"Adam Kumpf" <kumpf@mit.edu> wrote in message
news:c5b28359.0407210733.3d66b39d@posting.google.com...
> Hello All, > > I am working on a tiny board with a surface mount microcontroller. > (PIC16F876A) I have a P16PRO40 programmer, and it works quite well > for DIP packaged chips, but there's no easy/good way to program > surface mount devices. So I thought it wouldn't be too difficult to > pull over the critical lines from the programmer to my new PCB (that > has a pic16f876a on it) and program the micro on-board. > > I've hooked-up V+(13V), PGD, PGC, GND, and VDD(5V), but the chip > doesn't want to program. I shorted out the crystal oscillator from > the chip so it shouldn't be "running a program". Because other > components are attached, I think swinging the powerline (+5V) may have > a large time-constant associated with it. I tried hooking the 5V line > to be "always-on", but I still get an error when it checks to see what > was written. Address#0x0000 = 0x3880 instead of my data (0x100) and in > fact... the correct data was not written. > > Any help would be greatly appreciated. I would like to stay away > from going out and buying another programmer. It seems like if I > hooked up the correct lines, I should be able to program surface mount > device in-circuit with a standard DIP programmer. > > Thanks, > Adam Kumpf

Robert Scott wrote:

> What if I have a PICStart Plus and I'm not trying for in-circuit > programming? If I can somehow connect jumpers from the SMD to the ZIF > socket, is it possible to program the SMDs as if they were DIPs? Or > is there an adapter that already does this? > > -Robert Scott > Ypsilanti, Michigan > (Reply through this forum, not by direct e-mail to me, as automatic reply address is fake.)
Yes they make smd to dip adapters for just that reason. they have flip tops to hold the smd parts.