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

Input that does not want to work as an input????

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



Joined: 01 Oct 2003
Posts: 172
Location: Punta Gorda, Florida USA

View user's profile Send private message Send e-mail

Input that does not want to work as an input????
PostPosted: Sat Mar 01, 2014 3:56 pm     Reply with quote

Hi all,
I am working with a device that I never used before (PIC24F08KL401) but it seemed to be a good fit for my specific application. I have already run into a few mysteries with this part
First the AN4 analog input would never work, but the data sheet surely indicates it should (for the SOIC 20 pin device) I have already talked to the Microchip FAE's and they are also
looking into that and I found a way around that issue. But that particular issue is not why I am posting this "HELP ME I AM LOST" I am perplexed by the fact that I am declaring a pin (RA4) as
an input and trying to look at the logic level going into the pin. Basically this pin sees a 10K pulled up to Vdd (3.3V) which is tied to an open drain on a Max1551 (battery charge device)
so when the MAX1551 is charging this point is low from the active open drain and when the device is not charging it is obviously high. So basically we can say we have a 10K resistor tied to
Vdd and going to the input of RA4 on the PIC. If we look at this point it is always high (we will exclude the action of the MAX1551)
What I am seeing is that the PIC is always reading a"0" or low input at this point, even though this pin is at Vdd. The first thing that comes to mind is the proper set-up of the I/O pin
and as far as I can tell, the TRISA register is correct and the ANSA register is also set-up correctly. However, when ever my debugger stops at the selected breakpoint I can read the PORTA
as 0x0000 where I should be seeing a 0x0004. I have tried replacing the device but that is not the problem and it appears that I am overlooking something, it seems to me that this pin is being affected by another internal
peripheral module that may be causing this conflict. According to the data sheet this pin has the following functions associated: PEGC3, SCLKI, CN0 and RA4
I am sure this is probably something absurd that I cannot see, but I have included the parts of my code that would be functional with this pin test that I am doing below

ANY SUGESTIONS WOULD BE GREATLY APPRECIATED

Code:

/***************** Main Header file *********************/

#include <24F08KL401.h>
#device ADC=10

#FUSES  NOWDT, NOBROWNOUT, NOPUT, OSCIO, DEBUG ///SOSC_DIGITAL
#device ICD = TRUE
#use delay(internal=8000000)

#USE PWM(OUTPUT=PIN_A6, TIMER=2, FREQUENCY=31250, BITS=7)

#define SHOCKPULSE PIN_B8
#define RED_LED   PIN_B12
#define GRN_LED   PIN_B13
#define BATCHRG   !input(pin_A4) ///the pin we are using for input sense
#define LOWBATLVL 577

#define MTRVIBRT  PIN_B9
#define PULSE PIN_A2

#define FSENSE 0
#define MODEIN 1
#define BATLEVL 9 //4
#define BTEST  PIN_A3
#define BTESTINTERVAL   36000  /// ~1 min
#define FIVESECINTERVAL 3000  // ~ 5 sec

Code:

/****************** Main source file ***********************/

#include <DWexp2.h>

void Init(void){
 set_tris_a(0x0053); // 0x0017
 set_tris_b(0x8087);  //to include AN9
 //#ifdef debug
 setup_wdt(WDT_OFF);
// #endif
// #ifdef Normal_Run
 //setup_wdt(WDT_ON);
 //#endif
 SETUP_SPI(SPI_DISABLED);
 output_high(GRN_LED);
 output_high(RED_LED);
 output_low(BTEST);
 output_low(MTRVIBRT);
 output_low(SHOCKPULSE);
 output_low(PULSE);
 setup_adc_ports(sAN0 |sAN1 |sAN9 | VSS_VDD);
 setup_adc(ADC_CLOCK_DIV_4 | ADC_TAD_MUL_4);
 setup_timer1(T1_INTERNAL |T1_DIV_BY_256,0xF519); //divide by 256 and then count up to 62745 ~ 4 second interrupt
 set_pwm1_duty(64); // sets pwm for voltage doubler
}


void main()
{     
   Init();
 
                        /////// this is my simple test on the RA4 pin
    while(1){
    if(BATCHRG)
      { output_low(RED_LED);    //////Selected breakpoint always stops here,when using a debugger meaning BATCHRG = 0 (always zero)
         delay_ms(1000);}
    else
        output_high(RED_LED); }
 }
temtronic



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

View user's profile Send private message

PostPosted: Sat Mar 01, 2014 4:06 pm     Reply with quote

first thing I'd do is pull the PIC and MAX chip and confirm with a meter that the pin is 'active' and not grounded.
I know you need nerves of steel and a big magnifying glass but basic troubleshooting 101 says to check the PCB for shorts,bad etches, etc.
Maybe that pin is really not connected ?

hth
jay
cbarberis



Joined: 01 Oct 2003
Posts: 172
Location: Punta Gorda, Florida USA

View user's profile Send private message Send e-mail

PostPosted: Sat Mar 01, 2014 4:25 pm     Reply with quote

Thank you temtronic,
But I have already done that, ohm it out and replaced the PIC with the same results. If you put a scope onto pin RA4 it is working correctly it is toggled high and low by the other device, what I am saying is that even if this pin is electrically high the PIC is always reading a low. So I have confirmed that this pin is set up as an input and it is not dragging the signal low.
asmboy



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

View user's profile Send private message AIM Address

PostPosted: Sat Mar 01, 2014 9:09 pm     Reply with quote

how about with
#USE fastio
and the appropriate set_tris

???
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sat Mar 01, 2014 9:35 pm     Reply with quote

Why do you have SOSC_DIGITAL commented out ? See this thread:
http://www.ccsinfo.com/forum/viewtopic.php?t=48861
cbarberis



Joined: 01 Oct 2003
Posts: 172
Location: Punta Gorda, Florida USA

View user's profile Send private message Send e-mail

PostPosted: Sun Mar 02, 2014 8:47 am     Reply with quote

Thank you for your suggestions, specifically the one commented by PCMprogrammer regarding the SOSC_DIGITAL being commented out, for sure I thought that was the case, but it appears that even with that fuse statement I still have a problem. I now see that pin RA4 is always high when using the fuse statement SOSC_DIGITAL (before it was low) when reading the portA register no matter what that input is doing.

I have noticed that the RA4 pin also shares a function with CN0 and there is an interesting note on the data sheet and I'm not sure if this is the cause to my problem:
**************************************************
On any pin, only the pull-up resistor or the pull-down
resistor should be enabled, but not both of them. If the
push button or the keypad is connected to VDD, enable
the pull-down, or if they are connected to VSS, enable
the pull-up resistors. The pull-ups are enabled separately
using the CNPU1 and CNPU2 registers, which
contain the control bits for each of the CN pins.
Setting any of the control bits enables the weak
pull-ups for the corresponding pins. The pull-downs are
enabled separately, using the CNPD1 and CNPD2
registers, which contain the control bits for each of the
CN pins. Setting any of the control bits enables the
weak pull-downs for the corresponding pins.
When the internal pull-up is selected, the pin uses VDD
as the pull-up source voltage. When the internal
pull-down is selected, the pins are pulled down to VSS
by an internal resistor. Make sure that there is no external
pull-up source/pull-down sink when the internal
pull-ups/pull-downs are enabled
***************************************************
cbarberis



Joined: 01 Oct 2003
Posts: 172
Location: Punta Gorda, Florida USA

View user's profile Send private message Send e-mail

PostPosted: Sun Mar 02, 2014 11:04 am     Reply with quote

I think I found the nasty problem and I have sent this note to my local FAE from Microchip.

I am really struggling with this PIC24F08KL401 I am using the SOIC 20 pin package and it appears that the problem is related to errors on the latest data sheet. The first problem I had was that I could not get AN4 to work as a analog input to CH4 of the ADC, then no matter what I did I also could NOT get RA4 digital input to work correctly and I think I found the reason to this when I went to try on a development board the same part in the 20 pin PDIP (according to the data sheet they share the same pins on the 20 pin device) it turns out all my problems go away when I use the pin out for the PDIP package but things do not work if we wire it up according to the pin diagram to the SOIC 20 pin package shown on page 4 of the latest data sheet.

The problem is: I have AN4 wired to pin#10 and RA4 wired to pin#6
It turns out that in the plastic dip and also on the SOIC 20 device, AN4 is pin#6 and RA4 is pin#10

I have now re-wired the SOIC 20 device as indicated above and it now appears to work normally. I have also read the ERRATA sheet and I think it left me more confused as it does not clearly explain the same.
gpsmikey



Joined: 16 Nov 2010
Posts: 588
Location: Kirkland, WA

View user's profile Send private message

PostPosted: Sun Mar 02, 2014 1:56 pm     Reply with quote

Now that is handy !! I hate it when it turns out you were following the directions and the directions were wrong !!

mikey
_________________
mikey
-- you can't have too many gadgets or too much disk space !
old engineering saying: 1+1 = 3 for sufficiently large values of 1 or small values of 3
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