[SOLVED (kinda)] For anyone using PicKit3 (question?, bug?)

Discussion in 'Embedded Systems and Microcontrollers' started by KansaiRobot, Jun 8, 2015.

  1. KansaiRobot

    Thread Starter Active Member

    Jan 15, 2010
    318
    5
    Hello everybody and thanks always.

    Since this year I am using the Pickit3 and I find it great specially for on board programming and debugging.
    However today I found something curious that puzzle me and would like to hear your expert advice and experience.

    I am using a PIC182550. The pickit PGD and PGC connects to the ports B7 and B6 (PGM although not used correspond to B5)

    I wrote a program where I turn on and off pins B0~B3. No problem with that.

    The thing is I am trying to use pins B4 and B5 to light LEDs. B4 works but B5 does not work.

    I change my program (thinking maybe that my pin is damaged) to light LEDs through ports B6 and B7. Then none of the pins worked anymore.
    (when you debug the program you can see that they work as they should, but once you program it in not-debug mode they dont work anymore)
    I stopped using B6 and B7 and pins B0~B4 started working again.

    Conclusion: When using PicKit3 you can not program the pins that it uses for PGD PGC and PGM! Ergo it is a waste of three useful pins!

    Does anyone have a similar experience??
     
  2. MaxHeadRoom

    Expert

    Jul 18, 2013
    10,563
    2,378
    All the Picmicro boards I have do not have anything connected to B5, the ICDconnector from 1-6 is /MCLR, +5, 0v, RB7, Rb6, with pin 6 N/C.
    Max.
     
  3. JohnInTX

    Moderator

    Jun 26, 2012
    2,347
    1,029
    Make sure LVP in CONFIG4L is explicitly DISABLED in the config bits. RB5 is dedicated to LVP by default. Disabling LVP restores RB5 to an I/O.
    RB6 and RB7 are assigned by DEBUG/ in CONFIG4L. Be sure your config bits reflect this. MPLAB will usually flip the bits accordingly if you have correctly used the DEBUG/RELEASE switches (in 8.x) or set up your project configs in MPLABX. With proper programming/config, you can recover the use of the pins.

    But you have a point about RB6 and 7. When used with the debugger, its hard to find a useful function for them that is agreeable with their debugging function. I usually assign them to easy things like a status LED or a resistor isolated configuration jumper/address switch etc. When debugging, I use a assemble/compile time switch to fake up the desired input or output on the two pins. For release builds without the debugger, it assembles/compiles the normal code to use the pins.

    Its a beating to lose 2 pins but the alternative is an expensive ICE that can have its own set of problems.
     
    KansaiRobot likes this.
  4. ErnieM

    AAC Fanatic!

    Apr 24, 2011
    7,394
    1,606
    I would hardly call programming and debugging a waste!

    I've never used LVP so cut PGM out of your list. I use that pin freely. The PICkits may have 6 pins but I only connect 5 of them.

    I prefer to reserve PGD and PGC for debugging use so I leave them out of my list when selecting pins for desired functions. Yeah, it can be a PITA to loose them but it's worse not having debugging functions on my hardware.

    For the very seldom times I need a very small package and have no free pins I'll develop the software on a breadboard with a different PIC, ring out all the bugs, then recompile for a smaller device in production.
     
  5. KansaiRobot

    Thread Starter Active Member

    Jan 15, 2010
    318
    5
    I also only connect 5 of them. So do you explicitly disable LVP from PGM??
    My problem and what I have observed is that I can not program or use that pin as it is. It does not respond to the use it is programmed for (become on or off) . JohnInTX observed that I have to explicitly configurate RB5
     
  6. JohnInTX

    Moderator

    Jun 26, 2012
    2,347
    1,029
    On this part and others that support LowVoltageProgramming you have to do exactly that by setting up CONFIG bits. Of course, you also have to make sure that any shared functions (analog input, shared peripheral etc.) are handled.
     
    KansaiRobot likes this.
  7. NorthGuy

    Active Member

    Jun 28, 2014
    604
    121
    It is also nothing wrong with abandoning pre-historc PICs with PGM pins and getting newer, better, and cheaper ones.
     
  8. ErnieM

    AAC Fanatic!

    Apr 24, 2011
    7,394
    1,606
    And what might they be?
     
  9. DerStrom8

    Well-Known Member

    Feb 20, 2011
    2,428
    1,328
    You should be able to program RB6 and RB7, you just can't use them while the PICkit3 is attached. The PICkit3 uses the PGC and PGD pins for programming (for Clock and Data connections), so trying to operate B6/7 while the PICkit is connected is a bad idea. Try programming those pins, disconnect the programmer, then power up the chip from an external source. I imagine RB6 and RB7 will then work.
     
  10. OBW0549

    Well-Known Member

    Mar 2, 2015
    1,327
    890
    Of the PICs I've used (or considered using) recently, the PIC10F322, PIC12F675, PIC12F683 and PIC16F1847 all have no PGM pin, only PGC and PGD.

    And AFAIK, none of the 16-bit PICs (PIC24F, dsPIC30F/33F/33E) has a PGM pin.
     
  11. ErnieM

    AAC Fanatic!

    Apr 24, 2011
    7,394
    1,606
    Oh, THAT pin. I misread NorthGuys post as there is nothing "pre-historc" (sic) about these parts. In fact, they are amoung the latest designs.

    Once upon a time the MCLR needed the high voltage to program the internal EEPROM memory. Hey, you even had to load them with an 8 bit data word! Now that parts are serial and flash based there is no need for a higher voltage, and all the high voltage does is trip a comparator allowing the low voltage programming to happen.

    The low voltage programmin (LVP) is a recent option to keep the high voltage out of the boards for in circuit programming.

    Excellent point, just something so obvious to me I forget these things.

    One must still use some care so the programmer is not overloaded when trying to drive these pins. Microchip has app notes about what kinds of circuitry to avoid and what is acceptable.
     
  12. nigelwright7557

    Senior Member

    May 10, 2008
    487
    71
    Once you get experienced with the PIC you can use a ZIF socket attached to PICKIT3 for programming PIC and use all the pins.
    Once you are experienced you wont need as many debug go's.
    I use templates from previous projects to get up and running with a new project.
    My previous projects have a macro .asm file with loads of useful functions like add16, add32, DEC16, INC16 SUB16 etc etc
     
  13. ErnieM

    AAC Fanatic!

    Apr 24, 2011
    7,394
    1,606
    FYP:

    Once you have experience with the PIC you will skip the ZIF socket and connect the PICKIT directly to your target for programming and debug.
    Once you have experienced you will realize how essential the debug stage is, especially code walking each and every procedure you write.
    Templates only fill in the most basic pieces of the puzzle and is of an aid only on the first day.
    Library code will do the heavy lifting when you want to add the most useful things. As they are in C you will learn to love that compiler.
     
  14. KansaiRobot

    Thread Starter Active Member

    Jan 15, 2010
    318
    5
    I did precisely that. They don't work. Furthermore , the whole port B does not work.
    Modify the program again to not use those pins...voila! B0~B4 work again. strange isnt it?


    EDIT: Just in case guys, I am not talking about using those pins for programming and using at the same time lol...:) It is obvious you have to disconnect the programmer first... the thing is they dont work even then.
     
    Last edited: Jun 9, 2015
  15. KansaiRobot

    Thread Starter Active Member

    Jan 15, 2010
    318
    5
    The problem is not only the PGM pin (although that is the more noticeable). The three pins dont work
     
  16. ErnieM

    AAC Fanatic!

    Apr 24, 2011
    7,394
    1,606
    It sounds like time to try out your code on the MPLAB simulator. See if your code can wiggle the pins in sim. If not, it's never going to work on the real hardware.

    If you can't sim, you can't win!
     
  17. KansaiRobot

    Thread Starter Active Member

    Jan 15, 2010
    318
    5
    I haven't tried the simulator but I have run the code step by step(debug). It does wiggle the pins.
     
  18. KansaiRobot

    Thread Starter Active Member

    Jan 15, 2010
    318
    5
    Yes, apparently you have to disable LVP explicitly... sigh.. it is causing me some headaches

    EDIT: Solved!

    I havent tried RB6 or RB7 so I dont know if this solve that problem but for RB5 if you want to use it you have do disable LVP.

    In my compiler
    Code (Text):
    1.  
    2. #pragma config LVP = OFF
    3.  
     
    Last edited: Jun 11, 2015
  19. NorthGuy

    Active Member

    Jun 28, 2014
    604
    121
    Most of the PICs currently in production don't have PGM pin. My favorites are PIC16F1* or PIC24/dsPIC33 id more capacity is needed.
     
Loading...