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 CCS Technical Support

16F19176 PIN C2 not work input mode

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



Joined: 13 Dec 2018
Posts: 23

View user's profile Send private message

16F19176 PIN C2 not work input mode
PostPosted: Wed Dec 23, 2020 3:30 pm     Reply with quote

Hi,
PIN_C2 pin of 16F19176 is detected as 1 even when the input is 0 when it is in input mode. Even if we connect the pin directly to VSS, the situation does not change.
Anyone have this problem?
_________________
^ ^
(q p) ESB
( V )
L L
temtronic



Joined: 01 Jul 2010
Posts: 9229
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Wed Dec 23, 2020 3:35 pm     Reply with quote

I don't use that PIC but general comments..
You should post a small,compilable program that we can test.

Odds are that pin is used for several peripherals(ie ADC,comp,LCD,???) and you haven't disabled them.

Another reason may be that the pin has a 'solder bridge or whisker' to VDD.

Jay
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Dec 23, 2020 6:03 pm     Reply with quote

Pin C2 is available as an ordinary i/o pin.

But it can also be Seg18. Are you using the lcd module in that PIC ?
If you are, it's possible that you enabled Seg18.

Post your small test program that toggles pin C2.
esbelektronik



Joined: 13 Dec 2018
Posts: 23

View user's profile Send private message

PostPosted: Thu Dec 24, 2020 5:40 am     Reply with quote

PCM programmer wrote:
Pin C2 is available as an ordinary i/o pin.

But it can also be Seg18. Are you using the lcd module in that PIC ?
If you are, it's possible that you enabled Seg18.

Post your small test program that toggles pin C2.


Below you can see a piece of my fuse settings code
fuses seting..

Code:

#device ADC=12
#device *=8
#FUSES RSTOSC_HFINTRC_PLL       //On Power-up clock running from HFINTRC with 4x PLL
#FUSES VBATEN                   //VBAT functionality is enabled
#FUSES NOLCDPEN                 //LCD Charge Pump forced off
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES BORV27                   //Brownout reset at 2.7V
#FUSES NOZCDDIS                 //Zero-cross detect circuit is enabled at POR
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWDT   //WDT512
#FUSES PROTECT 
#FUSES NOEXTOSC


Code:


....................       if(input(pin_c2)==0 && nemgirisisayac<20) nemgirisisayac++;
096A:  MOVLB  00
096B:  BSF    14.2
096C:  BTFSC  0E.2
096D:  GOTO   177
096E:  MOVLB  01
096F:  MOVF   3F,W
0970:  SUBLW  13
0971:  BTFSC  03.0
0972:  GOTO   175
0973:  MOVLB  00
0974:  GOTO   177
0975:  INCF   3F,F
0976:  MOVLB  00
....................       if(input(pin_c2)==1 && nemgirisisayac>0 ) nemgirisisayac--;
0977:  BSF    14.2
0978:  BTFSS  0E.2
0979:  GOTO   182
097A:  MOVLB  01
097B:  MOVF   3F,F
097C:  BTFSS  03.2
097D:  GOTO   180
097E:  MOVLB  00
097F:  GOTO   182
0980:  DECF   3F,F
0981:  MOVLB  00

_________________
^ ^
(q p) ESB
( V )
L L
temtronic



Joined: 01 Jul 2010
Posts: 9229
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Dec 24, 2020 7:50 am     Reply with quote

some comments...
1) change PROTECT to NOPROTECT i the FUSES section. There's no need to protect the PIC until final product goes 'out the door' to the customer. Using noprotect will extend the life of the PIC ( # of burns....)

2) you should just try a simple 'toggle on pin status' not some 'complicated' function. I don't use that PIC but the asm code does show proper testing of the pin (providing the address of the register is correct).
esbelektronik



Joined: 13 Dec 2018
Posts: 23

View user's profile Send private message

PostPosted: Thu Dec 24, 2020 12:18 pm     Reply with quote

temtronic wrote:
some comments...
1) change PROTECT to NOPROTECT i the FUSES section. There's no need to protect the PIC until final product goes 'out the door' to the customer. Using noprotect will extend the life of the PIC ( # of burns....)

2) you should just try a simple 'toggle on pin status' not some 'complicated' function. I don't use that PIC but the asm code does show proper testing of the pin (providing the address of the register is correct).


C2 pin works correctly as output mode. Problem just input mode. and i try set_input_level_c(0xFF); command but reasult not change.
_________________
^ ^
(q p) ESB
( V )
L L
esbelektronik



Joined: 13 Dec 2018
Posts: 23

View user's profile Send private message

PostPosted: Thu Dec 24, 2020 12:53 pm     Reply with quote

I had similar issue with 16F19197.
I tried the code below but it still didn't work.

Code:

   #byte PORTC = getenv("SFR:PORTC")



Code:

....................       if(!bit_test(PORTC, 2))  nemgirisidevrede=0;
096A:  MOVLB  00
096B:  BTFSC  0E.2
096C:  GOTO   170
096D:  MOVLB  01
096E:  CLRF   40
096F:  MOVLB  00
....................       if(bit_test(PORTC, 2))  nemgirisidevrede=1;
0970:  BTFSS  0E.2
0971:  GOTO   176
0972:  MOVLW  01
0973:  MOVLB  01
0974:  MOVWF  40
0975:  MOVLB  00

_________________
^ ^
(q p) ESB
( V )
L L
esbelektronik



Joined: 13 Dec 2018
Posts: 23

View user's profile Send private message

PostPosted: Thu Dec 24, 2020 1:59 pm     Reply with quote

analog port settings are in my code;

Code:

    setup_adc (ADC_CLOCK_DIV_64);
    setup_adc_reference (VSS_VDD);
    setup_adc_ports (sAN0 | sAN23 | sAN34, VSS_VDD);

if you turn off analog inputs
Code:
setup_adc_ports (NO_ANALOGS);

If I write, pin_c2 works normally as input.

could it be a compiler error?
_________________
^ ^
(q p) ESB
( V )
L L
temtronic



Joined: 01 Jul 2010
Posts: 9229
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Dec 24, 2020 2:11 pm     Reply with quote

yes, that's why we've asked for your simple,small test program that shows the problem, so that we can test.
Also you need to post what compiler version you're using.

The problem with just showing parts of a program is we don't KNOW what the rest of it is doing(all the fuses, setup before main(), something else ???


Since the pin works with 'no_analogs', it sound like it _might_ be a compiler bug...

Jay
esbelektronik



Joined: 13 Dec 2018
Posts: 23

View user's profile Send private message

PostPosted: Thu Dec 24, 2020 2:56 pm     Reply with quote

it's work correct.
Code:

 set_analog_pins(PIN_A0,PIN_C7,PIN_E2);


below define in 16f19176.h file adc parameters
Code:

#define sAN18         0x00000400  //| C2
#define sAN34         0x00000400  //| E2

i think compiler if use setup_adc_ports (); command make mistake.
I haven't come across an example code on how to use port e pins with the set_adc_ports() command.
_________________
^ ^
(q p) ESB
( V )
L L
esbelektronik



Joined: 13 Dec 2018
Posts: 23

View user's profile Send private message

PostPosted: Thu Dec 24, 2020 3:10 pm     Reply with quote

Compiler version is 5.097
_________________
^ ^
(q p) ESB
( V )
L L
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Dec 24, 2020 8:16 pm     Reply with quote

Here is a small test program. It works. I tested it in hardware with
CCS vs. 5.097 just now. Pin C2 has a push-button switch connected to it.
The switch puts ground on Pin C2 if pressed. Pin C2 has a 4.7K pull-up
resistor on it (to +5v) so the idle state is a logic '1' on Pin C2.

Code:

#include <16F19176.h>
#use delay(internal=4M)
 //========================== 
void main(void)
{
 
while(TRUE)                     
  {
   if(input(PIN_C2) == 0)  // If pressed button
      output_high(PIN_B0);  // then turn on LED
   else
      output_low(PIN_B0);  // else turn LED off
     
   delay_ms(20);  // Debounce period
  }
}
esbelektronik



Joined: 13 Dec 2018
Posts: 23

View user's profile Send private message

PostPosted: Fri Dec 25, 2020 1:40 am     Reply with quote

Dear PCM programmer,
Reason
setup_adc_ports (sAN0 | sAN23 | sAN34, VSS_VDD); When using the command pin_c2 pin remains as analog input.
set_analog_pins (PIN_A0, PIN_C7, PIN_E2); Using the command pin_c2 and pin_e2 conflict can be avoided.
The following definitions are from the 16f19176.h file.
#define sAN18 0x00000400 // | C2
#define sAN34 0x00000400 // | E2
_________________
^ ^
(q p) ESB
( V )
L L
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Fri Dec 25, 2020 3:28 am     Reply with quote

According to the 16F19176.h file, the values for Port E go in the 2nd
parameter, like this:
Quote:
setup_adc_ports (sAN0 | sAN23, sAN34, VSS_VDD);

Then it works:
Code:
.................... setup_adc_ports (sAN0 | sAN23, [b]sAN34[/b], VSS_VDD);
0023:  MOVLW  00
0024:  MOVLB  02
0025:  MOVWF  ADREF

0026:  MOVLW  01   
0027:  MOVLB  3E    // Bank 62 decimal
0028:  MOVWF  38    // ANSELA:  pin A0 (sAN0) is analog

0029:  MOVLW  00
002A:  MOVWF  43    // ANSELB: All digital

002B:  MOVLW  80
002C:  MOVWF  4E    // ANSELC: Pin C7 (sAN23) is analog

002D:  MOVLW  00
002E:  MOVWF  59    // ANSELD: All digital

002F:  MOVLW  04
0030:  MOVWF  64    // ANSELE: Pin E2 (sAN34) is analog


Test program:
Code:
#include <16F19176.h>
#use delay(internal=4M)

//======================
void main(void)     
{

setup_adc_ports (sAN0 | sAN23, sAN34, VSS_VDD);

while(TRUE);           
}
esbelektronik



Joined: 13 Dec 2018
Posts: 23

View user's profile Send private message

thanks.
PostPosted: Fri Dec 25, 2020 1:01 pm     Reply with quote

dear PCM Programmer thanks for help.
_________________
^ ^
(q p) ESB
( V )
L L
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