| 
	
	|  |  |  
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| JerryR 
 
 
 Joined: 07 Feb 2008
 Posts: 181
 
 
 
			    
 
 | 
			
				| Target halts prematurely |  
				|  Posted: Wed Apr 12, 2017 1:19 pm |   |  
				| 
 |  
				| I am compiling code using PCWH 5.069 for a custom design target using a PIC16F1783.  I'm using a PICKIT3 and MPLAB 8.90 IDE.  The problem I'm having is that the target intermittently halts prematurely and the debugger shows the position in code past the final bracket.  IDE output window indicates: Running... Target halted
 No breakpoint set.
 
 Have trimmed the code down to the bare minimum and problem still occuring.  MCLR line pulled up to Vdd through 47K resistor and the MCLR appear pretty normal. Using external crystal at 4.0 MHz.
 
 Here's the simplified code.  Anyone see anything that would be causing the code to go off into the weeds?  Thanks so much for your additional suggestions.
 
 MAIN:
 
 
  	  | Code: |  	  | //Released
 
 #include <16F1783.h>
 #include <Ready Ref RX(Rev A).h>
 
 
 //===========================================================================================================
 void Check_Sig_Level(void)
 {
 
 int16      RSSI;
 
 Active_Signal= FALSE;
 set_adc_channel(0);                            //ready to read sensor input
 delay_us(50);                                   //AtoD set-up delay
 RSSI =read_adc();                           //get value
 if (RSSI <= Squelch_Level)
 Active_Signal= FALSE;
 else
 Active_Signal= TRUE;
 
 }
 //===========================================================================================================
 //===========================================================================================================
 //System timing interrupt
 
 #INT_TIMER1                                                   // This function is called every 5ms
 void One_Second_timer(void)
 {
 Sec_Ticks++;
 
 if (Sec_Ticks >= 30)
 {
 Sec_Ticks= 0;
 Sec_Flag= TRUE;
 
 }
 }
 
 
 //===========================================================================================================
 
 //===========================================================================================================
 void main()
 {
 signed int8   value;
 int8   msg;
 int8   i;
 
 setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_2 );
 set_timer1(0);
 Sec_Ticks= 0;
 Sec_Flag= FALSE;
 
 enable_interrupts(INT_TIMER1);                // Enable timer0 interrupt
 disable_interrupts(GLOBAL);                  // Enable all interrupts
 
 //Setup AtoD converter
 setup_adc(ADC_CLOCK_INTERNAL|ADC_CLOCK_DIV_8);
 setup_adc_ports( sAN0,VSS_VDD);                     //AN0(RSSI)
 
 output_low(RED_LED);
 
 while (1)
 {
 Check_Sig_Level();
 if (Active_Signal==TRUE)
 {
 delay_cycles(72);
 for(i=0; i<=8; ++i)
 {
 shift_left(&msg,1,input(RX_Data));
 delay_cycles(60);
 }
 Active_Signal= FALSE;
 }
 }
 }
 
 
 //===========================================================================================================
 
 | 
 
 Platform Hardware:
 
 
  	  | Code: |  	  | 
 #device adc=16
 
 #FUSES    XT                      //External crystal 4MHz Osc
 #FUSES    NOBROWNOUT               //No brownout reset
 #FUSES   NOPUT               //Power up timer off for debugging
 #FUSES   NOWDT
 
 
 
 #use delay(xtal=4MHz)         //using 4 MHz crystal
 
 #define EXP_OUT_ENABLE  PIN_B1
 #define EXP_OUT_CLOCK   PIN_B2
 #define EXP_OUT_DO      PIN_B5
 #define NUMBER_OF_74595 1
 
 #define   RX_Data         PIN_C7
 #define Red_LED         PIN_B3
 
 
 #define      Squelch_Level   20000         //squelch level
 
 
 int8 characters[11] = {0xFE, 0x30, 0xAD, 0xB9, 0x33, 0x9B, 0x1F, 0xB0,0xBF, 0xB3, 0x00  };
 
 
 int8      Sec_Ticks;
 int1      Sec_Flag;
 int1      Active_Signal;
 
 | 
 |  |  
		|  |  
		| PCM programmer 
 
 
 Joined: 06 Sep 2003
 Posts: 21708
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Wed Apr 12, 2017 1:55 pm |   |  
				| 
 |  
				|  	  | Quote: |  	  | for(i=0; i<=8; ++i) {
 shift_left(&msg,1,input(RX_Data));
 delay_cycles(60);
 }
 | 
 This loop will execute 9 times.  Do you want that ?  If you want 8 times,
 the test should be i < 8.
 |  |  
		|  |  
		| JerryR 
 
 
 Joined: 07 Feb 2008
 Posts: 181
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Wed Apr 12, 2017 1:58 pm |   |  
				| 
 |  
				| That's a fact PCM!  Fixed that.  See anything else that would cause the  halt issue? |  |  
		|  |  
		| Ttelmah 
 
 
 Joined: 11 Mar 2010
 Posts: 19966
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Wed Apr 12, 2017 2:32 pm |   |  
				| 
 |  
				| This is wrong: 
 setup_adc(ADC_CLOCK_INTERNAL|ADC_CLOCK_DIV_8);
 
 You want just ADC_CLOCK_DIV_8. This uses the master clock/8. ADC_CLOCK_INTERNAL selects the internal RC clock (which can't have a divider, and is not recommended above 1MHz).
 
 Things that can be or'ed together, say in the include file. Other things must not be.
 
 However I doubt this will cause a peculiar crash.
 
 Check the actual listing file. What fuses actually are set?.
 
 Target halted, suggests it has actually gone into the higher memory somewhere, and executed the 'sleep' instruction there.
 
 I'd be suspicious of something like an electrical spike. What is being actually 'done' by the I/O lines?. Anything nearby?. What is the supply?.
 |  |  
		|  |  
		| JerryR 
 
 
 Joined: 07 Feb 2008
 Posts: 181
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Wed Apr 12, 2017 4:56 pm |   |  
				| 
 |  
				| Ttelmah:  Thank you for the steer.  Yes, after some investigation I did use the internal clock and have had no more crashes.  I'll fix the AtoD setup issue.  I kept thinking it had to do with MCLR noise, but that signal is solid. 
 All that make a lot of sense.
 
 Thanks so much for your interest.  Best regards.
 |  |  
		|  |  
		| temtronic 
 
 
 Joined: 01 Jul 2010
 Posts: 9588
 Location: Greensville,Ontario
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Wed Apr 12, 2017 6:10 pm |   |  
				| 
 |  
				| I'm still puzzled by the 'one second timer' ISR , if called every 5 ms and updated 30 times ,isn't that just 150 ms ?? or am I missing 'something'....????
 |  |  
		|  |  
		| JerryR 
 
 
 Joined: 07 Feb 2008
 Posts: 181
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Wed Apr 12, 2017 6:12 pm |   |  
				| 
 |  
				| Good catch, but just mislabeled. |  |  
		|  |  
		| JerryR 
 
 
 Joined: 07 Feb 2008
 Posts: 181
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Fri Apr 14, 2017 9:26 am |   |  
				| 
 |  
				| I am having a strange issue(s) that are plaguing my development of a project.  This is a continuing issue involving this particular progect.  PCWH version 5.069, MPLab 8.90 IDE, target PIC16F1783, PICKit3 debugger. 
 Referencing the following code which is simplified to help troubleshooting
 
 If I add a line in the top of my main routine to simply set a flag (Sec_Flag= FALSE;) the last instruction (output_low(RED_LED);) does not execute.  This line could be any flag, not just Sec_Flag.  Simply commenting this one line out fixes the problem.  I think this problem is associated with the earlier problems I was having where the controller went to the weeds.
 
 I beg the group's indulgence.  Does anyone here see anything that would cause this problem.  Hardware appears to be solid and this problem occurs intermittently.  I'm attaching the listing files; one resulting in the issue, one resulting in no issue.
 
 I'm stumped.
 
 
  	  | Code: |  	  | 
 //Released
 
 #include <16F1783.h>
 #include <Ready Ref RX(Rev A).h>
 
 //===========================================================================================================
 void main()
 {
 int8   value;
 int8   msg;
 int8   i;
 int16   t;
 
 Sec_Ticks= 0;
 Sec_Flag= FALSE;
 setup_comparator_1(NC_NC);
 setup_comparator_2(NC_NC);
 setup_comparator_3(NC_NC);
 
 disable_interrupts(GLOBAL);                  // Enable all interrupts
 
 //Setup AtoD converter
 setup_adc(ADC_CLOCK_DIV_8);
 setup_adc_ports( sAN0);                     //AN0(RSSI)
 
 output_low(RED_LED);
 
 while (True)
 {
 //   Sec_Flag= FALSE;   !!!!!!!!!! Line added causes issue !!!!!!!!!!!!!!!!
 
 
 set_adc_channel(0);                            //ready to read sensor input
 RSSI =read_adc();                           //get value
 if (RSSI > Squelch_Level)
 {
 output_high(RED_LED);
 delay_cycles(10);
 output_low(RED_LED);
 
 while (input(RX_Data));               //stay here while high
 
 output_high(RED_LED);
 delay_cycles(2);
 output_low(RED_LED);
 
 
 for(i=1; i<=8; ++i)
 {
 for(i=1; i<=8; ++i)
 delay_cycles(100);
 output_high(RED_LED);
 delay_cycles(10);
 output_low(RED_LED);
 }
 
 delay_us(1);
 
 }
 }
 }
 
 
 //===========================================================================================================
 
 
 | 
 
 Listing of good code:
 
  	  | Code: |  	  | CCS PCM C Compiler, Version 5.069, xxxxx               14-Apr-17 10:57
 
 Filename:   F:\Grimm Ready Ref RX\Ready Ref RX(Rev XX).lst
 
 ROM used:   166 words (4%)
 Largest free fragment is 2048
 RAM used:   25 (5%) at main() level
 35 (7%) worst case
 Stack used: 0 locations
 Stack size: 15
 
 *
 0000:  NOP
 0001:  MOVLP  00
 0002:  GOTO   003
 .................... //Released
 ....................
 .................... #include <16F1783.h>
 .................... //////////// Standard Header file for the PIC16F1783 device ////////////////
 .................... ///////////////////////////////////////////////////////////////////////////
 .................... ////        (C) Copyright 1996, 2014 Custom Computer Services          ////
 .................... //// This source code may only be used by licensed users of the CCS C  ////
 .................... //// compiler.  This source code may only be distributed to other      ////
 .................... //// licensed users of the CCS C compiler.  No other use, reproduction ////
 .................... //// or distribution is permitted without written permission.          ////
 .................... //// Derivative programs created using this software in object code    ////
 .................... //// form are not restricted in any way.                               ////
 .................... ///////////////////////////////////////////////////////////////////////////
 .................... #device PIC16F1783
 ....................
 .................... #list
 ....................
 .................... #include <Ready Ref RX(Rev A).h>
 .................... #device adc=16
 ....................
 .................... #FUSES    INTRC_IO                    //External crystal 4MHz Osc
 .................... #FUSES    NOBROWNOUT               //No brownout reset
 .................... #FUSES   NOPUT               //Power up timer off for debugging
 .................... #FUSES   NOWDT
 ....................
 ....................
 ....................
 .................... #use delay(int=4MHz)         //using 4 MHz crystal
 ....................
 .................... #define EXP_OUT_ENABLE  PIN_B1
 .................... #define EXP_OUT_CLOCK   PIN_B2
 .................... #define EXP_OUT_DO      PIN_B5
 .................... #define NUMBER_OF_74595 1
 ....................
 .................... #define   RX_Data         PIN_C7
 .................... #define Red_LED         PIN_B3
 ....................
 ....................
 .................... #define      Squelch_Level   7000         //squelch level
 ....................
 ....................
 .................... int8 characters[11] = {0xFE, 0x30, 0xAD, 0xB9, 0x33, 0x9B, 0x1F, 0xB0,0xBF, 0xB3, 0x00  };
 ....................
 ....................
 .................... int8      Sec_Ticks;
 .................... int1      Sec_Flag;
 .................... int1      Active_Signal;
 ....................
 .................... int16      RSSI;
 ....................
 ....................
 .................... //===========================================================================================================
 .................... void main()
 0003:  MOVLW  6A
 0004:  MOVLB  01
 0005:  MOVWF  19
 0006:  MOVLB  03
 0007:  CLRF   0C
 0008:  CLRF   0D
 0009:  MOVLB  02
 000A:  CLRF   12
 000B:  CLRF   11
 000C:  MOVLW  FE
 000D:  MOVLB  00
 000E:  MOVWF  20
 000F:  MOVLW  30
 0010:  MOVWF  21
 0011:  MOVLW  AD
 0012:  MOVWF  22
 0013:  MOVLW  B9
 0014:  MOVWF  23
 0015:  MOVLW  33
 0016:  MOVWF  24
 0017:  MOVLW  9B
 0018:  MOVWF  25
 0019:  MOVLW  1F
 001A:  MOVWF  26
 001B:  MOVLW  B0
 001C:  MOVWF  27
 001D:  MOVLW  BF
 001E:  MOVWF  28
 001F:  MOVLW  B3
 0020:  MOVWF  29
 0021:  CLRF   2A
 .................... {
 .................... int8   value;
 .................... int8   msg;
 .................... int8   i;
 .................... int16   t;
 ....................
 .................... Sec_Ticks= 0;
 0022:  CLRF   2B
 .................... Sec_Flag= FALSE;
 0023:  BCF    2C.0
 .................... setup_comparator_1(NC_NC);
 0024:  MOVLW  3F
 0025:  MOVLB  02
 0026:  MOVWF  12
 0027:  CLRF   11
 .................... setup_comparator_2(NC_NC);
 0028:  MOVWF  14
 0029:  CLRF   13
 .................... setup_comparator_3(NC_NC);
 002A:  MOVWF  1F
 002B:  CLRF   1E
 ....................
 .................... disable_interrupts(GLOBAL);                  // Enable all interrupts
 002C:  BCF    0B.6
 002D:  BCF    0B.7
 002E:  BTFSC  0B.7
 002F:  GOTO   02D
 ....................
 .................... //Setup AtoD converter
 .................... setup_adc(ADC_CLOCK_DIV_8);
 0030:  MOVLB  01
 0031:  BSF    1E.4
 0032:  BCF    1E.5
 0033:  BCF    1E.6
 0034:  BCF    1E.7
 0035:  BSF    1D.0
 .................... setup_adc_ports( sAN0);                     //AN0(RSSI)
 0036:  BCF    1E.0
 0037:  BCF    1E.1
 0038:  BCF    1E.2
 0039:  MOVLW  01
 003A:  MOVLB  03
 003B:  MOVWF  0C
 003C:  MOVLW  00
 003D:  MOVWF  0D
 ....................
 .................... output_low(RED_LED);
 003E:  MOVLB  01
 003F:  BCF    0D.3
 0040:  MOVLB  02
 0041:  BCF    0D.3
 ....................
 .................... while (True)
 ....................    {
 .................... //   Sec_Flag= FALSE;
 ....................    set_adc_channel(0);                            //ready to read sensor input
 0042:  MOVLW  00
 0043:  MOVWF  78
 0044:  MOVLB  01
 0045:  MOVF   1D,W
 0046:  ANDLW  83
 0047:  IORWF  78,W
 0048:  MOVWF  1D
 0049:  MOVLW  0F
 004A:  MOVWF  78
 004B:  MOVF   1F,W
 004C:  ANDLW  F0
 004D:  IORWF  78,W
 004E:  MOVWF  1F
 ....................    RSSI =read_adc();                           //get value
 004F:  BSF    1D.1
 0050:  BTFSC  1D.1
 0051:  GOTO   050
 0052:  MOVF   1C,W
 0053:  MOVWF  7A
 0054:  MOVF   1B,W
 0055:  MOVLB  00
 0056:  MOVWF  2D
 0057:  MOVF   7A,W
 0058:  MOVWF  2E
 ....................    if (RSSI > Squelch_Level)
 0059:  MOVF   2E,W
 005A:  SUBLW  1A
 005B:  BTFSC  03.0
 005C:  GOTO   0A3
 005D:  XORLW  FF
 005E:  BTFSS  03.2
 005F:  GOTO   064
 0060:  MOVF   2D,W
 0061:  SUBLW  58
 0062:  BTFSC  03.0
 0063:  GOTO   0A3
 ....................       {
 ....................       output_high(RED_LED);
 0064:  MOVLB  01
 0065:  BCF    0D.3
 0066:  MOVLB  02
 0067:  BSF    0D.3
 ....................       delay_cycles(10);
 0068:  MOVLW  03
 0069:  MOVWF  77
 006A:  DECFSZ 77,F
 006B:  GOTO   06A
 ....................       output_low(RED_LED);
 006C:  MOVLB  01
 006D:  BCF    0D.3
 006E:  MOVLB  02
 006F:  BCF    0D.3
 ....................
 ....................       while (input(RX_Data));               //stay here while high
 0070:  MOVLB  01
 0071:  BSF    0E.7
 0072:  MOVLB  00
 0073:  BTFSS  0E.7
 0074:  GOTO   077
 0075:  MOVLB  02
 0076:  GOTO   070
 ....................
 ....................       output_high(RED_LED);
 0077:  MOVLB  01
 0078:  BCF    0D.3
 0079:  MOVLB  02
 007A:  BSF    0D.3
 ....................       delay_cycles(2);
 007B:  GOTO   07C
 ....................       output_low(RED_LED);
 007C:  MOVLB  01
 007D:  BCF    0D.3
 007E:  MOVLB  02
 007F:  BCF    0D.3
 ....................
 ....................
 ....................       for(i=1; i<=8; ++i)
 0080:  MOVLW  01
 0081:  MOVLB  00
 0082:  MOVWF  31
 0083:  MOVF   31,W
 0084:  SUBLW  08
 0085:  BTFSS  03.0
 0086:  GOTO   0A2
 ....................          {
 ....................          for(i=1; i<=8; ++i)
 0087:  MOVLW  01
 0088:  MOVWF  31
 0089:  MOVF   31,W
 008A:  SUBLW  08
 008B:  BTFSS  03.0
 008C:  GOTO   093
 ....................          delay_cycles(100);
 008D:  MOVLW  21
 008E:  MOVWF  77
 008F:  DECFSZ 77,F
 0090:  GOTO   08F
 0091:  INCF   31,F
 0092:  GOTO   089
 ....................          output_high(RED_LED);
 0093:  MOVLB  01
 0094:  BCF    0D.3
 0095:  MOVLB  02
 0096:  BSF    0D.3
 ....................          delay_cycles(10);
 0097:  MOVLW  03
 0098:  MOVWF  77
 0099:  DECFSZ 77,F
 009A:  GOTO   099
 ....................          output_low(RED_LED);
 009B:  MOVLB  01
 009C:  BCF    0D.3
 009D:  MOVLB  02
 009E:  BCF    0D.3
 009F:  MOVLB  00
 00A0:  INCF   31,F
 00A1:  GOTO   083
 ....................           }
 ....................
 ....................       delay_us(1);
 00A2:  NOP
 ....................
 ....................       }
 00A3:  MOVLB  02
 00A4:  GOTO   042
 ....................    }
 .................... }
 ....................
 00A5:  GOTO   0A5
 ....................
 .................... //===========================================================================================================
 
 Configuration Fuses:
 Word  1: 19E4   INTRC_IO NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT NOCLKOUT IESO NOFCMEN
 Word  2: 0EFF   NOWRT NOVCAP PLL_SW STVREN BORV19 NOLPBOR DEBUG NOLVP
 
 Some fuses have been forced to be compatible with the ICD debugger.
 
 | 
 
 
 Listing of BAD code:
 
  	  | Code: |  	  | CCS PCM C Compiler, Version 5.069, xxxxx               14-Apr-17 10:54
 
 Filename:   F:\Grimm Ready Ref RX\Ready Ref RX(Rev XX).lst
 
 ROM used:   167 words (4%)
 Largest free fragment is 2048
 RAM used:   25 (5%) at main() level
 35 (7%) worst case
 Stack used: 0 locations
 Stack size: 15
 
 *
 0000:  NOP
 0001:  MOVLP  00
 0002:  GOTO   003
 .................... //Released
 ....................
 .................... #include <16F1783.h>
 .................... //////////// Standard Header file for the PIC16F1783 device ////////////////
 .................... ///////////////////////////////////////////////////////////////////////////
 .................... ////        (C) Copyright 1996, 2014 Custom Computer Services          ////
 .................... //// This source code may only be used by licensed users of the CCS C  ////
 .................... //// compiler.  This source code may only be distributed to other      ////
 .................... //// licensed users of the CCS C compiler.  No other use, reproduction ////
 .................... //// or distribution is permitted without written permission.          ////
 .................... //// Derivative programs created using this software in object code    ////
 .................... //// form are not restricted in any way.                               ////
 .................... ///////////////////////////////////////////////////////////////////////////
 .................... #device PIC16F1783
 ....................
 .................... #list
 ....................
 .................... #include <Ready Ref RX(Rev A).h>
 .................... #device adc=16
 ....................
 .................... #FUSES    INTRC_IO                    //External crystal 4MHz Osc
 .................... #FUSES    NOBROWNOUT               //No brownout reset
 .................... #FUSES   NOPUT               //Power up timer off for debugging
 .................... #FUSES   NOWDT
 ....................
 ....................
 ....................
 .................... #use delay(int=4MHz)         //using 4 MHz crystal
 ....................
 .................... #define EXP_OUT_ENABLE  PIN_B1
 .................... #define EXP_OUT_CLOCK   PIN_B2
 .................... #define EXP_OUT_DO      PIN_B5
 .................... #define NUMBER_OF_74595 1
 ....................
 .................... #define   RX_Data         PIN_C7
 .................... #define Red_LED         PIN_B3
 ....................
 ....................
 .................... #define      Squelch_Level   7000         //squelch level
 ....................
 ....................
 .................... int8 characters[11] = {0xFE, 0x30, 0xAD, 0xB9, 0x33, 0x9B, 0x1F, 0xB0,0xBF, 0xB3, 0x00  };
 ....................
 ....................
 .................... int8      Sec_Ticks;
 .................... int1      Sec_Flag;
 .................... int1      Active_Signal;
 ....................
 .................... int16      RSSI;
 ....................
 ....................
 .................... //===========================================================================================================
 .................... void main()
 0003:  MOVLW  6A
 0004:  MOVLB  01
 0005:  MOVWF  19
 0006:  MOVLB  03
 0007:  CLRF   0C
 0008:  CLRF   0D
 0009:  MOVLB  02
 000A:  CLRF   12
 000B:  CLRF   11
 000C:  MOVLW  FE
 000D:  MOVLB  00
 000E:  MOVWF  20
 000F:  MOVLW  30
 0010:  MOVWF  21
 0011:  MOVLW  AD
 0012:  MOVWF  22
 0013:  MOVLW  B9
 0014:  MOVWF  23
 0015:  MOVLW  33
 0016:  MOVWF  24
 0017:  MOVLW  9B
 0018:  MOVWF  25
 0019:  MOVLW  1F
 001A:  MOVWF  26
 001B:  MOVLW  B0
 001C:  MOVWF  27
 001D:  MOVLW  BF
 001E:  MOVWF  28
 001F:  MOVLW  B3
 0020:  MOVWF  29
 0021:  CLRF   2A
 .................... {
 .................... int8   value;
 .................... int8   msg;
 .................... int8   i;
 .................... int16   t;
 ....................
 .................... Sec_Ticks= 0;
 0022:  CLRF   2B
 .................... Sec_Flag= FALSE;
 0023:  BCF    2C.0
 .................... setup_comparator_1(NC_NC);
 0024:  MOVLW  3F
 0025:  MOVLB  02
 0026:  MOVWF  12
 0027:  CLRF   11
 .................... setup_comparator_2(NC_NC);
 0028:  MOVWF  14
 0029:  CLRF   13
 .................... setup_comparator_3(NC_NC);
 002A:  MOVWF  1F
 002B:  CLRF   1E
 ....................
 .................... disable_interrupts(GLOBAL);                  // Enable all interrupts
 002C:  BCF    0B.6
 002D:  BCF    0B.7
 002E:  BTFSC  0B.7
 002F:  GOTO   02D
 ....................
 .................... //Setup AtoD converter
 .................... setup_adc(ADC_CLOCK_DIV_8);
 0030:  MOVLB  01
 0031:  BSF    1E.4
 0032:  BCF    1E.5
 0033:  BCF    1E.6
 0034:  BCF    1E.7
 0035:  BSF    1D.0
 .................... setup_adc_ports( sAN0);                     //AN0(RSSI)
 0036:  BCF    1E.0
 0037:  BCF    1E.1
 0038:  BCF    1E.2
 0039:  MOVLW  01
 003A:  MOVLB  03
 003B:  MOVWF  0C
 003C:  MOVLW  00
 003D:  MOVWF  0D
 ....................
 .................... output_low(RED_LED);
 003E:  MOVLB  01
 003F:  BCF    0D.3
 0040:  MOVLB  02
 0041:  BCF    0D.3
 ....................
 .................... while (True)
 ....................    {
 ....................    Sec_Flag= FALSE;
 0042:  MOVLB  00
 0043:  BCF    2C.0
 ....................    set_adc_channel(0);                            //ready to read sensor input
 0044:  MOVLW  00
 0045:  MOVWF  78
 0046:  MOVLB  01
 0047:  MOVF   1D,W
 0048:  ANDLW  83
 0049:  IORWF  78,W
 004A:  MOVWF  1D
 004B:  MOVLW  0F
 004C:  MOVWF  78
 004D:  MOVF   1F,W
 004E:  ANDLW  F0
 004F:  IORWF  78,W
 0050:  MOVWF  1F
 ....................    RSSI =read_adc();                           //get value
 0051:  BSF    1D.1
 0052:  BTFSC  1D.1
 0053:  GOTO   052
 0054:  MOVF   1C,W
 0055:  MOVWF  7A
 0056:  MOVF   1B,W
 0057:  MOVLB  00
 0058:  MOVWF  2D
 0059:  MOVF   7A,W
 005A:  MOVWF  2E
 ....................    if (RSSI > Squelch_Level)
 005B:  MOVF   2E,W
 005C:  SUBLW  1A
 005D:  BTFSC  03.0
 005E:  GOTO   0A5
 005F:  XORLW  FF
 0060:  BTFSS  03.2
 0061:  GOTO   066
 0062:  MOVF   2D,W
 0063:  SUBLW  58
 0064:  BTFSC  03.0
 0065:  GOTO   0A5
 ....................       {
 ....................       output_high(RED_LED);
 0066:  MOVLB  01
 0067:  BCF    0D.3
 0068:  MOVLB  02
 0069:  BSF    0D.3
 ....................       delay_cycles(10);
 006A:  MOVLW  03
 006B:  MOVWF  77
 006C:  DECFSZ 77,F
 006D:  GOTO   06C
 ....................       output_low(RED_LED);
 006E:  MOVLB  01
 006F:  BCF    0D.3
 0070:  MOVLB  02
 0071:  BCF    0D.3
 ....................
 ....................       while (input(RX_Data));               //stay here while high
 0072:  MOVLB  01
 0073:  BSF    0E.7
 0074:  MOVLB  00
 0075:  BTFSS  0E.7
 0076:  GOTO   079
 0077:  MOVLB  02
 0078:  GOTO   072
 ....................
 ....................       output_high(RED_LED);
 0079:  MOVLB  01
 007A:  BCF    0D.3
 007B:  MOVLB  02
 007C:  BSF    0D.3
 ....................       delay_cycles(2);
 007D:  GOTO   07E
 ....................       output_low(RED_LED);
 007E:  MOVLB  01
 007F:  BCF    0D.3
 0080:  MOVLB  02
 0081:  BCF    0D.3
 ....................
 ....................
 ....................       for(i=1; i<=8; ++i)
 0082:  MOVLW  01
 0083:  MOVLB  00
 0084:  MOVWF  31
 0085:  MOVF   31,W
 0086:  SUBLW  08
 0087:  BTFSS  03.0
 0088:  GOTO   0A4
 ....................          {
 ....................          for(i=1; i<=8; ++i)
 0089:  MOVLW  01
 008A:  MOVWF  31
 008B:  MOVF   31,W
 008C:  SUBLW  08
 008D:  BTFSS  03.0
 008E:  GOTO   095
 ....................          delay_cycles(100);
 008F:  MOVLW  21
 0090:  MOVWF  77
 0091:  DECFSZ 77,F
 0092:  GOTO   091
 0093:  INCF   31,F
 0094:  GOTO   08B
 ....................          output_high(RED_LED);
 0095:  MOVLB  01
 0096:  BCF    0D.3
 0097:  MOVLB  02
 0098:  BSF    0D.3
 ....................          delay_cycles(10);
 0099:  MOVLW  03
 009A:  MOVWF  77
 009B:  DECFSZ 77,F
 009C:  GOTO   09B
 ....................          output_low(RED_LED);
 009D:  MOVLB  01
 009E:  BCF    0D.3
 009F:  MOVLB  02
 00A0:  BCF    0D.3
 00A1:  MOVLB  00
 00A2:  INCF   31,F
 00A3:  GOTO   085
 ....................           }
 ....................
 ....................       delay_us(1);
 00A4:  NOP
 ....................
 ....................       }
 00A5:  GOTO   043
 ....................    }
 .................... }
 ....................
 00A6:  GOTO   0A6
 ....................
 .................... //===========================================================================================================
 
 Configuration Fuses:
 Word  1: 19E4   INTRC_IO NOWDT NOPUT MCLR NOPROTECT NOCPD NOBROWNOUT NOCLKOUT IESO NOFCMEN
 Word  2: 0EFF   NOWRT NOVCAP PLL_SW STVREN BORV19 NOLPBOR DEBUG NOLVP
 
 Some fuses have been forced to be compatible with the ICD debugger.
 
 
 
 | 
 |  |  
		|  |  
		| PCM programmer 
 
 
 Joined: 06 Sep 2003
 Posts: 21708
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Fri Apr 14, 2017 10:14 am |   |  
				| 
 |  
				| Could you point out exactly what line doesn't execute.  Because the actual "last line" is the delay_us(1); line.   Post the main() program
 and add a comment to the line that doesn't execute.
 
 2nd thing.  You have this weird construct here:
 
  	  | Quote: |  	  | for(i=1; i<=8; ++i) {
 for(i=1; i<=8; ++i)
 delay_cycles(100);
 output_high(RED_LED);
 delay_cycles(10);
 output_low(RED_LED);
 }
 | 
 You have a 2nd for() loop stuck in there, using the same index variable 'i'.
 The inner loop will finish with 'i' set to 8.   This will make the outer loop
 end after the first pass.  Is this what you want ?
 
 3rd.  This comment should be corrected:
 
  	  | Quote: |  	  | disable_interrupts(GLOBAL);      // Enable all interrupts | 
 |  |  
		|  |  
		| JerryR 
 
 
 Joined: 07 Feb 2008
 Posts: 181
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Fri Apr 14, 2017 11:01 am |   |  
				| 
 |  
				| PCM:  Thanks for your reply.  It's been a long time since I've had this amount of randomness in performance.  Yes, I did have the inside index the same index as the outside.  Fixed now.. When it works, it works as expected.  I'm just trying to mark the positions of operation on a scope using a probe on an existing LED. 
 Frustrating thing now the code run once through the main routine and drops past the last bracket and halts.
 
 Just randomness!  I'm almost to the point that I think I have a bad PIC!
 
 Before, when I added any flag set to true on the first line in MAIN, the code did not execute the final output_high(Red_LED); (marked).  Take out that line and the code runs as expected by executing the final output_high(Red_LED);
 
 Believe me, I stripped-out a lot of code to find this (these) issues.   Here's the code, fixed as you requested.
 
 Thanks so much for your eyes on this.
 
 
  	  | Code: |  	  | //Released
 
 #include <16F1783.h>
 #include <Ready Ref RX(Rev A).h>
 
 //===========================================================================================================
 void main()
 {
 int8   value;
 int8   msg;
 int8   i;
 int16   t;
 
 Sec_Ticks= 0;
 Sec_Flag= FALSE;
 setup_comparator_1(NC_NC);
 setup_comparator_2(NC_NC);
 setup_comparator_3(NC_NC);
 
 enable_interrupts(GLOBAL);                  // Enable all interrupts
 
 //Setup AtoD converter
 setup_adc(ADC_CLOCK_DIV_8);
 setup_adc_ports( sAN0);                     //AN0(RSSI)
 
 output_low(RED_LED);
 
 while (True)
 {
 //   Sec_Flag= FALSE;     !!!!!!! Add this line and the last output_high(Red_LED); doesn't execute
 set_adc_channel(0);                            //ready to read sensor input
 RSSI =read_adc();                           //get value
 if (RSSI > Squelch_Level)
 {
 output_high(RED_LED);
 delay_cycles(10);
 output_low(RED_LED);
 
 while (input(RX_Data));               //stay here while high
 
 output_high(RED_LED);
 delay_cycles(2);
 output_low(RED_LED);
 
 
 for(i=1; i<=8; ++i)
 {
 for(t=1; t<=8; ++t)
 delay_cycles(100);
 output_high(RED_LED);
 delay_cycles(10);
 output_low(RED_LED);   //!!!!!!!!! this line doesn't execute !!!!!
 }
 
 delay_us(1);
 
 }
 }
 }
 
 
 | 
 
 And the .h file:
 
 
  	  | Code: |  	  | #device adc=16
 
 #FUSES    INTRC_IO                    //External crystal 4MHz Osc
 #FUSES    NOBROWNOUT               //No brownout reset
 #FUSES   NOPUT               //Power up timer off for debugging
 #FUSES   NOWDT
 
 
 
 #use delay(int=4MHz)         //using 4 MHz crystal
 
 #define EXP_OUT_ENABLE  PIN_B1
 #define EXP_OUT_CLOCK   PIN_B2
 #define EXP_OUT_DO      PIN_B5
 #define NUMBER_OF_74595 1
 
 #define   RX_Data         PIN_C7
 #define Red_LED         PIN_B3
 
 
 #define      Squelch_Level   7000         //squelch level
 
 
 int8 characters[11] = {0xFE, 0x30, 0xAD, 0xB9, 0x33, 0x9B, 0x1F, 0xB0,0xBF, 0xB3, 0x00  };
 
 
 int8      Sec_Ticks;
 int1      Sec_Flag;
 int1      Active_Signal;
 
 int16      RSSI;
 
 
 | 
 |  |  
		|  |  
		| Ttelmah 
 
 
 Joined: 11 Mar 2010
 Posts: 19966
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Fri Apr 14, 2017 11:14 am |   |  
				| 
 |  
				| You do realise, that: 
  	  | Code: |  	  | for(t=1; t<=8; ++t)
 delay_cycles(100);
 
 | 
 Is just equivalent to
 
 delay_cycles(700);
 
 .......
 |  |  
		|  |  
		| JerryR 
 
 
 Joined: 07 Feb 2008
 Posts: 181
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Fri Apr 14, 2017 11:18 am |   |  
				| 
 |  
				| Yes, I know.  That's another thing!  Delays (us and ms) were unpredictable. |  |  
		|  |  
		| JerryR 
 
 
 Joined: 07 Feb 2008
 Posts: 181
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Fri Apr 14, 2017 11:24 am |   |  
				| 
 |  
				| Ttelmah:  Am I wrong? 
 Syntax:
 delay_cycles (count)
 
 Parameters:
 count - a constant 1-255
 |  |  
		|  |  
		| PCM programmer 
 
 
 Joined: 06 Sep 2003
 Posts: 21708
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Fri Apr 14, 2017 11:37 am |   |  
				| 
 |  
				| Tell us how you're testing this.  Are you compiling with MPLAB set to Debug mode (in the dropdown box on the MPLAB menu bar) ?
 Are you stepping through the code in debug, or using Animate ?
 Or are you clicking on the Run button ?
 
 What happens if you compile in Release mode and run it ?
 Does it then work ?
 
 Tell us about the board.  Did you build it yourself or did you buy it ?
 If you bought it, post a link to the board's webpage.
 
 What is the Vdd voltage of the PIC on the board ?
 
 Is the board self-powered, or is the Pickit used to supply power ?
 If self powered, describe the power supply.
 
 If you built the board, does it have 100 nF cap on the Vdd pin ?
 |  |  
		|  |  
		| JerryR 
 
 
 Joined: 07 Feb 2008
 Posts: 181
 
 
 
			    
 
 | 
			
				|  |  
				|  Posted: Fri Apr 14, 2017 11:52 am |   |  
				| 
 |  
				| OK, all good questions. 
 
 I've tried both, compiling in Debug and release mode.  Same thing.
 
 If I single-step through code-  steps through Main loop once then falls right through all end brackets and ends up Halting.  Same hing also happens in Animate.  Running results in Run then halt.
 
 
 What happens if you compile in Release mode and run it ?
 Does it then work ?
 
 Same thing- Release and Debug modes
 
 Proprietary design.  Pretty simple- Vdd is 4.98volts.  MCLR pulled-up to 4.92 volts through 47K resistor.  Known good PICKit3.  I'll try both an ICD3 and realICE later to see if that may be the issue.
 
 Board is self-powered.  Good clean DC on microcontroller, bypassed with 0.1uF at the chip.  Regulator 7805 from 24 volts bus.  Well bypassed and loaded approximately 50mA.
 
 Thanks!
 |  |  
		|  |  
		|  |  
  
	| 
 
 | 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
 
 |