6.2 What's Wrong?

Things to consider:

Performing a Verify fails after programming the device. Is this a programming issue?

If Run Main Project icon (

)is selected, the device will automatically run immediately after programming. Therefore, if your code changes the Flash memory, verification could fail. To prevent the code from running after programming, select Hold in Reset.

My computer went into power-down/hibernate mode and now my debugger won’t work. What happened?

When using the debugger for prolonged periods of time, especially as a debugger, be sure to disable the Hibernate mode in the Power Options Dialog window of your computer’s operating system. Go to the Hibernate tab and uncheck the “Enable hibernation” check box. This will ensure that all communication is maintained across all the USB subsystem components.

I set my peripheral to NOT freeze on halt, but it is suddenly freezing. What's going on?

For dsPIC30F/33F and PIC24F/H devices, a reserved bit in the peripheral control register (usually either bit 14 or 5) is used as a Freeze bit by the debugger. If you have performed a write to the entire register, you may have overwritten this bit (the bit is user-accessible in Debug mode).

To avoid this problem, write only to the bits you wish to change for your application (BTS, BTC) instead of to the entire register (MOV).

When using a 16-bit device, an unexpected Reset occurred. How do I determine what caused it?

Some things to consider:
  • To determine a Reset source, check the RCON register.
  • Handle traps/interrupts in an Interrupt Service Routine (ISR). You should include trap.c style code, for example,
    void __attribute__((__interrupt__)) _OscillatorFail(void);
            :
    void __attribute__((__interrupt__)) _AltOscillatorFail(void);
            :
    void __attribute__((__interrupt__)) _OscillatorFail(void)
        {
            INTCON1bits.OSCFAIL = 0;        //Clear the trap flag
            while (1);
        }
            :
        void __attribute__((__interrupt__)) _AltOscillatorFail(void)
        {
            INTCON1bits.OSCFAIL = 0;
            while (1);
        }
        :
  • Use ASSERTs. For example: ASSERT (IPL==7)