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

16F1708 #pin_select error

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



Joined: 02 Jun 2009
Posts: 123
Location: The Netherlands

View user's profile Send private message

16F1708 #pin_select error
PostPosted: Mon Jun 08, 2015 1:21 am     Reply with quote

I've got an error when compiling a program for the 16F1708. Error 99 use #pin_select. But when I add this sentence in my program it doesn't compile. If I disable the setup_ccp1(CCP_PWM); the error is gone. Why is it not working?

PCW 5.026

Code:

#include <16F1708.H>

#FUSES INTRC_IO,NOWDT
#FUSES NOPUT,NOMCLR,PROTECT,BROWNOUT,BORV25                             
#FUSES NOCLKOUT,NOIESO
#FUSES NOFCMEN,WRT, NOPPS1WAY
#FUSES NOSTVREN,NODEBUG,NOLVP
#Device ADC=8
#use delay(clock=8000000)                                                     
 
#bit T1GSEL  = 285.3                                                            // dec adress 11D Hex
#bit TMR0IF  =  11.2                                                            // TMR0 counter overflow
#bit TMR1IF  =  17.0                                                            // TMR1 counter overflow
#bit TMR4IF  = getenv("BIT:TMR4IF")
#bit TMR6IF  = getenv("BIT:TMR6IF")

//#PIN_SELECT P1A = pin_C5
#PIN_SELECT CCP1 = pin_C5

void main()
{
setup_oscillator(OSC_8MHZ);                                         
setup_ccp1(CCP_PWM);                                                            // Configure CCP1 as a PWM
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);                                      // 32,8 ms tot overflow (0.125us*4*256*256)
setup_timer_2(T2_DIV_BY_1, 255, 1);                                             // Setup for 8 bit at 4kHz

while(1)
      {

      }
}
Ttelmah



Joined: 11 Mar 2010
Posts: 19515

View user's profile Send private message

PostPosted: Mon Jun 08, 2015 3:45 am     Reply with quote

I think you need to contact CCS.

The CCP 'input', would be CCP1 (not just CCP). However this would control the input selection, not the output.
The PWM output, would be P1A. Normally this is a separate pin (on this chip it isn't), but it does have a separate PPS entry to control the output selection. The setup_ccp 'knows' this, but the #PIN_SELECT doesn't....
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Mon Jun 08, 2015 10:42 am     Reply with quote

Quote:

I've got an error when compiling a program for the 16F1708. Error 99 use #pin_select. But when I add this sentence in my program it doesn't compile. If I disable the setup_ccp1(CCP_PWM); the error is gone. Why is it not working?

PCW 5.026

Your question was discussed in this thread:
http://www.ccsinfo.com/forum/viewtopic.php?t=52682
See my post for sample code.
Ttelmah



Joined: 11 Mar 2010
Posts: 19515

View user's profile Send private message

PostPosted: Mon Jun 08, 2015 2:27 pm     Reply with quote

Unfortunately, PCM_Programmer, this is not the solution.

The syntax you give, works for PWM3, and PWM4 (the two ECCP ports), but not for the PWM1/2 ports. I remembered this thread, and went and tried and realised that PWM1 was not working. :(

I really repeat this must be reported to CCS.

Even the pin names you use,are not documented in the manual.

To 'bodge round', you have to replace the configuration functions (since otherwise the error prevents compilation. :(

It's a minor error, but one that is really annoying, and should have been fixed many compiler versions ago. Given that the earlier post about this is about eleven months old, there has been plenty of time to fix this and get the manual right as well....

If you must use CCP1, before the fix is available, this should work (not tested):
Code:

#include <16F1708.H>

#FUSES INTRC_IO,NOWDT
#FUSES NOPUT,NOMCLR,PROTECT,BROWNOUT,BORV25                             
#FUSES NOCLKOUT,NOIESO
#FUSES NOFCMEN,WRT, NOPPS1WAY
#FUSES NOSTVREN,NODEBUG,NOLVP
#Device ADC=8
#use delay(clock=8000000)                                                     

#byte PPSLOCK=getenv("SFR:PPSLOCK")
#byte RC5PPS=getenv("SFR:RC5PPS")
#byte CCP1CON=getenv("SFR:CCP1CON")
#define PPSPWM 0xC //PPS register value for PWM

#inline
void unlock(void)
{
   disable_interrupts(GLOBAL);
   PPSLOCK=0x55;
   PPSLOCK=0xAA;
   bit_clear(PPSLOCK,0);
}

void main()
{
   setup_oscillator(OSC_8MHZ);   
   unlock();
   RC5PPS=PPSPWM; //set the CCP1 pin as PWM output
                                     
   //setup_ccp1(CCP_PWM);   
   CCP1CON=CCP_PWM; //replacement for setup_ccp, that ignores the PPS
   output_drive(PIN_C5); //since I am controlling the pin also control TRIS
     setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);                                      // 32,8 ms tot overflow (0.125us*4*256*256)
   setup_timer_2(T2_DIV_BY_1, 255, 1);                                             // Setup for 8 bit at 4kHz

   while(1)
   {

   }
}

No guarantees, but I think this ought to be close.
mvanvliet



Joined: 02 Jun 2009
Posts: 123
Location: The Netherlands

View user's profile Send private message

PostPosted: Tue Jun 09, 2015 1:55 am     Reply with quote

The solution came from CCS support:

Quote:

As long as you use #pin_select CCP1OUT=PIN_xx to assign the pin when setting up the CCP1 peripheral for PWM or Compare mode, or #pin_select CCP1=PIN_xx to assign the pin when setting up the CCP1 peripheral for Capture mode then it should compile correctly.

If you're use the CCP2 peripheral then you would use #pin_select CCP2OUT=PIN_xx to assign the pin when setting it up for PWM or Compare mode, or #pin_select CCP2=PIN_xx to assign the pin when setting it up for Capture mode.


The solution is to use CCP1OUT instead of P1A which the compiler suggests. This CCP1OUT is also not described in the CCS manual, not in the 16F1708.h and not in the 16F1708 datasheet, so not easy to find...
Ttelmah



Joined: 11 Mar 2010
Posts: 19515

View user's profile Send private message

PostPosted: Tue Jun 09, 2015 2:06 am     Reply with quote

Hurrah.

They really need to have pointed out to them, that 'failing' updating the manual (which should be done ASAP), the names should be given in a 'PPSNAMES.TXT' included with the compiler.

Suggest this to them.

One could spend 'forever' trying to guess the names (or have to sit down with a debugger and work through their code looking for them!).

It's even funnier, since the thread PCM_programmer pointed to, had the name for PWM2/4, as 'PWM3OUT' (and 4 out). Duh...
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