CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

PIC1813K22 Breakpoint troubles

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Andreas



Joined: 25 Oct 2004
Posts: 136

View user's profile Send private message

PIC1813K22 Breakpoint troubles
PostPosted: Mon Apr 04, 2016 3:42 pm     Reply with quote

Hello Friends

I have some unexpected trouble with debugging my code.

I have an ext2 interrupt handler and wanted to stop there, but for some reason MPLABX always tells me that this breakpoint was not recognized.

here my code:
Code:

#include "c:\Program Files (x86)\PICC\Devices\18F13K22.h"
#include "C:\Program Files (x86)\PICC\Drivers\stdio.h"

// !!!! Nur für neuen Subprocessor !!!!!


#FUSES INTRC_IO,PLLEN,NOPUT,NOBROWNOUT,MCLR,NOLVP,DEBUG,NOWDT
#use delay(clock = 64000000)
#use rs232(baud=38400,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=Com1,errors)

int1 BitLevel = 0;
int1 DecodeData = 0;
int1 StartLow = 0;
int1 SetStart = 0;
int1 LastLevel = 1;
int1 Level;

int8 StartCounter = 0;
int8 DataBits[50];
int8 BitsCounter = 0;
int8 HighBits = 0;
int8 Ccnt = 5;
int8 T2Val = 0x53;           // 53  Timer Value for 5 Samples
int8 FreqCycles = 45;
int8 HighCnt = 0;
int8 LowCnt = 0;

int16 InputPeriod;
int16 OldCounterVal = 0;
int16 T2;

#define  TXD1 PIN_C6              // TXD COM1
#define  RXD1 PIN_C7              // RXD COM1
#define  LinearMarker PIN_A1   // Linear Null Marker
#define  LogMarker PIN_A2      // Log Null Marker
#define    AnalogMP PIN_A0         // Signal Detection Level for AGC !

// Output Signals
#define   Yellow PIN_B2            // LED 15 Yellow
#define Code_OK PIN_C2         // LED 16 Green
#define CodeOK1 PIN_C0         // CodeOKLevel1
#define CodeOK2 PIN_C1         // CodeOKLevel2
#define Weg_Imp PIN_B3         // WegImpulsOut
#define Red PIN_B3            // 1200bd Data Out
#define DataDetect PIN_B0      // Data Detection Input after SchmittTrigger
#define SignalQ1 PIN_B4         // Signal Quality 1
#define SignalQ2 PIN_B5         // Signal Quality 2
#define LED PIN_C4            // LED

#define WIDTH (8* sizeof(crc))
#define TOPBIT (1 << (WIDTH -1))
#define POLYNOMINAL 0xA9

// Definitionen für Digitales Poti
#define MAX517_SDA    PIN_C5
#define MAX517_CLK    PIN_C3
#define MAX517_CS     PIN_A5

#define SPI_MODE_0_0 0x4000
#define SPI_MODE_0_1 0x0000
#define SPI_MODE_1_0 0x0010
#define SPI_MODE_1_1 0x4010

#use spi(DO=MAX517_SDA,CLK=MAX517_CLK,ENABLE=MAX517_CS)

// Don't Use Timer1 !!!  It's used by the CCP Unit !!!!!!!!!!!!!!
#int_timer1
void timer1_isr()
{
  //  output_toggle(PIN_B7);
}

#int_timer2
void timer2_isr()         // 1200 Bd 166µS 5 Bit Samples
{
}


#int_ext2
void ext2_isr()         // 1200 Bd 166µS 5 Bit Samples
{
//    output_toggle(PIN_B6);
    T2 = get_timer3();
    set_timer3(0);   
     if ( T2 > 400 + FreqCycles )      // > 445 >> Low Frequency ! == 1 Data  443 bei Test
      {
      output_high(PIN_B6);
      }
      else
         {
         output_low(PIN_B6);
         }
}


#int_CCP1                            // Triggerung auf positive Flanke zur Frequenzmessung
void ccp1_isr()
{
 //   output_toggle(PIN_B7);
InputPeriod = CCP_1 - OldCounterVal;
OldCounterVal = CCP_1;
   if ( InputPeriod > 400 + FreqCycles )      // > 445 >> Low Frequency ! == 1 Data  443 bei Test
      {
      Level = 1;
      HighCnt++;
      output_high(PIN_B7);
      }
      else
         {
         Level = 0;
         LowCnt++;
         output_low(PIN_B7);
         }
}

void main()
{
setup_oscillator(OSC_64MHZ);
//setup_timer_2(T2_DIV_BY_16,T2Val,2);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
//enable_interrupts(int_TIMER2);
enable_interrupts(int_TIMER1);
enable_interrupts(int_EXT2);
setup_CCP1(CCP_CAPTURE_FE);
enable_interrupts(INT_CCP1);
enable_interrupts(global);

output_float(PIN_C5);
SetStart = 0;

while(True)
{

}    // True
}   //main


I try to set a breakpoint at this line: T2 = get_timer3();

I can see the red square, but it changes as soon as I start the program !

The part of the program with the capture int is working fine !

Hope somebody can show me my mistake in thinking.

best regards
Andreas
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Mon Apr 04, 2016 4:46 pm     Reply with quote

in a quick look i found this:
Quote:

set a breakpoint at this line: T2 = get_timer3();


YOU NEVER SETUP TIMER 3 in your code....
also
your timer1 - active INT is a time waster - why is it active but with an empty handler ? thats kinda nasty......
Code:

enable_interrupts(int_EXT2);


the external INTS in this part have directional options and
i urge you to look closely at the device header file to see if there is a better
EXT2 setup option than the one you chose.

your "break point failure" looks like the LEAST of the trouble with this code.


your CAPTURE code looks bogus too based on the timer one situation--

lastly i notice you are running the part at 64mhz PLL - "top go" to - i assume achieve your "pwm" rate?


IMHO - thats pushing it HARD and i sure hope your circuit design AND LAYOUT is up to the task.
Andreas



Joined: 25 Oct 2004
Posts: 136

View user's profile Send private message

PostPosted: Mon Apr 04, 2016 11:59 pm     Reply with quote

Hello asmboy !

Thanks for Your comments, but I explained maybe not detailed enough.

The Interrupt happens, that means the Setup should be okay, my question was related to the Debugging.

I am using a PicKit3 and wanted to set a breakpoint in the ext2 Interrupt handler, the IDE sets this Bp but when I start the program this BP changes to an "unrecognized breakpoint", no I like to know where my fault is.

BTW, You are right with most of Your comments, but this is just a very reduced code snippet only to Show where I see the Problem, all others are working since months already.

best regards
Andreas
Andreas



Joined: 25 Oct 2004
Posts: 136

View user's profile Send private message

New Version of my testprogram
PostPosted: Tue Apr 05, 2016 12:50 am     Reply with quote

Hello Friends

I have now reduced my program to the min required to show my questions !
Code:

#include "c:\Program Files (x86)\PICC\Devices\18F13K22.h"
#include "C:\Program Files (x86)\PICC\Drivers\stdio.h"

#FUSES INTRC_IO,PLLEN,NOPUT,NOBROWNOUT,MCLR,NOLVP,DEBUG,NOWDT
#use delay(clock = 64000000)

int8 FreqCycles = 45;
int8 bufcnt = 0;

int16 InputPeriod;
int16 OldCounterVal = 0;
int16 T3;
int16 T3Val[100];

#int_ext2
void ext2_isr()         
{
    T3 = get_timer3();
    if (bufcnt < 100) T3Val[bufcnt++] = T3;
    set_timer3(0);   
     if ( T3 > 400 + FreqCycles )                // > 445 >> Low Frequency ! == 1 Data  443 bei Test
      {
      output_high(PIN_B6);                      // At B6 the decoded data is incorrect shown !
      }
      else
         {
         output_low(PIN_B6);
         }
}


#int_CCP1                                        // Triggers on postive edge for freqency measuring
void ccp1_isr()                                  // F(low) = 35400 Hz, F(high) = 36600 Hz
{
InputPeriod = CCP_1 - OldCounterVal;
OldCounterVal = CCP_1;
   if ( InputPeriod > 400 + FreqCycles )         // > 445 >> Low Frequency !
      {
      output_high(PIN_B7);                      // At B7 the decoded data is correct shown !
      }
      else
         {
         output_low(PIN_B7);
         }
}

void main()
{
setup_oscillator(OSC_64MHZ);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
setup_timer_3(T3_INTERNAL | T3_DIV_BY_1);
enable_interrupts(int_TIMER1);
enable_interrupts(int_EXT2);
setup_CCP1(CCP_CAPTURE_FE);
enable_interrupts(INT_CCP1);
enable_interrupts(global);


while(True)
{

}    // True
}   //main

The decoding of the FSk modulated data is done correct with CCP1 unit !

Now I wanted to change from the CCP1 to the ext2 interrupt, as I have to change to another processor type.

Now my questions:
1. Why is the timer value not counting the same in CCP1 and in ext2 ?
2. Again my question why can't I set a breakpoint in the int handlers ?


Hope somebody can give me the hint !

best regards
Andreas
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Apr 05, 2016 1:35 am     Reply with quote

Quote:
2. Again my question why cant I set a breakpoint in the int handlers ?

The breakpoints problem is a Microchip MPLAB X problem and you should
search their forums and ask about it there. You can use the following
search strings with Google to read their forum archives:
Quote:
site:microchip.com/forums MPLAB X breakpoint interrupt

and
Quote:
site:microchip.com/forums broken breakpoint
Andreas



Joined: 25 Oct 2004
Posts: 136

View user's profile Send private message

PostPosted: Sat Apr 09, 2016 2:33 am     Reply with quote

Hello PCM programmer

Thanks for pointing me to Microchip.

As a matter of fact, I couldn't solve it but after a few hours programming
it appears that breakpoints are working again !

It's a miracle................


best regards
Andreas
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group