View previous topic :: View next topic |
Author |
Message |
in_nursery
Joined: 25 Oct 2012 Posts: 51
|
CCP |
Posted: Thu Aug 08, 2013 6:18 am |
|
|
Hi all
I have trouble to use CCP mode with the picdem with 18f87j11.
I must do something wrong but I don't see it
find a example of what I'm doing, but it don't capture anything!!!
Code: |
#include <18F87J11.h>
#fuses INTRC_IO //Osc interne
#fuses noprotect
#fuses nowdt
#use delay(internal=4000000) // inclure procédure de délais (delay_ms() et delay_us())
#use rs232( baud=2400, parity=n, xmit=PIN_C6, rcv=PIN_C7)
#include "LCD16x2.c"
//-----------------------------------------------------------------------------
// PORT A
//-----------------------------------------------------------------------------
#define BUTTON2 PIN_A5 // PIN_A5 button 2, active low input
//-----------------------------------------------------------------------------
// PORT B
//-----------------------------------------------------------------------------
#define BUTTON1 PIN_B0 // PIN_B0 button 1, active low input
//-----------------------------------------------------------------------------
// PORT D
//-----------------------------------------------------------------------------
#define LLED PIN_D2 //
#define VAL_TRIS_D 0b11111111
//////////////////////////////////////////////////////////////////////////
// Calcul de la fréquence du signal
//////////////////////////////////////////////////////////////////////////
int16 isr_ccp_delta1;
int16 current_ccp_delta1;
int16 frequency1;
float valueF1;
#int_ccp4
void ccp4_isr(void)
{
//////////////////////////////////////////////////////////////////////////
// Frequence
//////////////////////////////////////////////////////////////////////////
int16 current_ccp1;
static int16 old_ccp1 = 0;
current_ccp1 = CCP_4; //
isr_ccp_delta1 = current_ccp1 - old_ccp1;
old_ccp1 = current_ccp1;
}
//#############################################################################
//#
//# PROGRAMME
//#
//#############################################################################
void calculFrequence()
{
disable_interrupts(GLOBAL);
current_ccp_delta1 = isr_ccp_delta1;
enable_interrupts(GLOBAL);
frequency1 = (int16)((1000000L + (int32)(current_ccp_delta1 >> 1))/ current_ccp_delta1);
}
//==============================================================
// initialization
//==============================================================
void PIC_init(void)
{
set_tris_D(VAL_TRIS_D);
setup_ccp4(CCP_CAPTURE_RE); // Capture front montant
setup_timer_1(T1_INTERNAL);
//---- PIC init ------------------------------------------------
setup_oscillator(OSC_4MHZ|OSC_INTRC);
clear_interrupt(INT_CCP4);
enable_interrupts(INT_CCP4);
enable_interrupts(GLOBAL);
}
//*************************************************************************************************
// M A I N P R O G R A M
//*************************************************************************************************
void main(void)
{
//Initialisation
PIC_init();
lcd_init();
while(true)
{
calculFrequence();
valueF1 = frequency1;
lcd_gotoxy(1,1);
lcd_putc("\fF");
lcd_gotoxy(2,1);
printf(lcd_putc, "%3.0f", valueF1); // affichage acii valeur int16.
}
} |
thanks in advance |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Aug 08, 2013 2:54 pm |
|
|
Tell us:
1. What pin on the 18F87J11 is used to receive the input signal ?
2. Describe the input signal. What is the frequency ? What type of
signal is it (digital or analog) ? Is it a sine wave, square wave,
or other rectangular waveform ? Is it a simple periodic waveform or
is it complex ? What are the low and high voltage levels ?
What are the rise and fall times of the signal ? What device is providing
the signal ? In other words, tell us everything about the input signal.
3. If you are using an 18F87J11 development board that you bought,
post the manufacturer and part number or model number of the board.
And post a link to the web page for it.
4. Have you already tested the PIC and the board with a simple program
to prove that the LCD works ? Have you tested the board with an LED
blinking program to prove that the PIC is running at 4 MHz ?
5. What is the Vdd voltage of the PIC ?
6. What is your CCS compiler version ?
7. You said "it don't capture anything". Tell us what you see displayed
on the LCD. Is it nothing ? Or is it 0 Hz ? Tell us. |
|
|
in_nursery
Joined: 25 Oct 2012 Posts: 51
|
|
Posted: Thu Aug 08, 2013 3:08 pm |
|
|
1. What pin on the 18F87J11 is used to receive the input signal ?
pin RG3 => ccp4
2. Describe the input signal. What is the frequency ? What type of
signal is it (digital or analog) ? Is it a sine wave, square wave,
or other rectangular waveform ? Is it a simple periodic waveform or
is it complex ? What are the low and high voltage levels ?
What are the rise and fall times of the signal ? What device is providing
the signal ? In other words, tell us everything about the input signal.
It's 0-3V square wave signal.
3. If you are using an 18F87J11 development board that you bought,
post the manufacturer and part number or model number of the board.
And post a link to the web page for it.
yes it,s from microchip PICDEM PIC18
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en535770
with PIM 18F87J11
4. Have you already tested the PIC and the board with a simple program
to prove that the LCD works ? Have you tested the board with an LED
blinking program to prove that the PIC is running at 4 MHz ?
yes everything else is working fine it's the capture mode that don't work.
5. What is the Vdd voltage of the PIC ?
3.3V
6. What is your CCS compiler version ?
4.134
7. You said "it don't capture anything". Tell us what you see displayed
on the LCD. Is it nothing ? Or is it 0 Hz ? Tell us.
it shows 0Hz
the program is running it only the capture value who is always 0.
thanks |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Aug 08, 2013 3:20 pm |
|
|
Quote: | It's 0-3V square wave signal. |
Right, but what is the frequency of the input signal ? And what device
is providing the signal ? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19553
|
|
Posted: Fri Aug 09, 2013 2:41 am |
|
|
What compiler version?.
Try adding:
SETUP_PMP(PMP_DISABLED);
In your initialisation code.
It _should_ be disabled by default, but always when things don't work, start by making sure everything else on the pin that could conflict is turned off.
I'd suggest setting a flag in the interrupt to say it has been called, and only printing when this has happened. Otherwise you are repeatedly printing the same unchanged value.
Best Wishes |
|
|
in_nursery
Joined: 25 Oct 2012 Posts: 51
|
|
Posted: Fri Aug 09, 2013 5:37 am |
|
|
Quote: | Right, but what is the frequency of the input signal ? And what device
is providing the signal ? |
Frequency 80 Hz with a function generator |
|
|
in_nursery
Joined: 25 Oct 2012 Posts: 51
|
|
Posted: Fri Aug 09, 2013 6:12 am |
|
|
Quote: | SETUP_PMP(PMP_DISABLED);
In your initialisation code.
It _should_ be disabled by default, but always when things don't work, start by making sure everything else on the pin that could conflict is turned off.
|
It's done
Quote: |
I'd suggest setting a flag in the interrupt to say it has been called, and only printing when this has happened. Otherwise you are repeatedly printing the same unchanged value. |
Code: |
#int_ccp4
void ccp4_isr(void)
{
int16 current_ccp1;
static int16 old_ccp1 = 0;
current_ccp1 = CCP_4; //
isr_ccp_delta1 = current_ccp1 - old_ccp1;
old_ccp1 = current_ccp1;
Flag_CCP=1;
} |
Add Flag_CCP
Code: | while(true)
{
If(Flag_CCp==1){
calculFrequence();
valueF1 = frequency1;
lcd_gotoxy(1,1);
lcd_putc("\fF");
lcd_gotoxy(2,1);
printf(lcd_putc, "%3.0f", valueF1); // affichage acii valeur int16.
delay_ms(500);
Flag_ccp=0;
} else {
lcd_gotoxy(1,1);
lcd_putc("\fNo CCP");
delay_ms(500);
}
} |
Always show No CCP never capture any value |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19553
|
|
Posted: Fri Aug 09, 2013 7:55 am |
|
|
Have you actually verified the signal is arriving at the pin on the processor?.
The signal source is grounded to the board?. |
|
|
in_nursery
Joined: 25 Oct 2012 Posts: 51
|
|
Posted: Fri Aug 09, 2013 8:45 am |
|
|
Ttelmah wrote: | Have you actually verified the signal is arriving at the pin on the processor?.
The signal source is grounded to the board?. |
yes to the 2 questions
I really don't know whats happened |
|
|
|