Ich möchte mit dem PIC 18F4550 im Capture-Modus einen Puls messen. Dieser Impuls wird vom PIC-Mikrocontroller selbst erzeugt.
Dazu verwende ich eine Funktion, die die Rolle des XOR-Logikgatters spielt (Sie finden die Funktion, die ich unten verwendet habe), wobei RC0 und RC2 die Eingänge und RC6 der Signalausgang sind. Der Impuls, der RC6 verlässt, tritt in CCP2 ein, um gemessen zu werden.
Das Problem, das ich gefunden habe, ist, dass der CCP2 den vom Mikrocontroller erzeugten Impuls nicht erkennen kann. Ich weiß nicht, ob es irgendwelche Bedingungen gibt, um die Pins des Mikrocontrollers oder so etwas anzuschließen.
Wenn jemand eine Antwort oder einen Hinweis hat, um dies zu beheben, bin ich dankbar und wenn Sie Fragen haben, können Sie diese gerne stellen.
#include <stdio.h>
#include <stdlib.h>
#include "osc_config.h"
#include "LCD_8bit_file.h"
#include <string.h>
unsigned long comtage,capt0,x;
char pulse[20];
char cosinus[20];
float period,dephTempo,deph,phi;
void init (){
IRCF0 =1; /* set internal clock to 8MHz */
IRCF1 =1;
IRCF2 =1;
PIE2bits.CCP2IE=1;
PIR2bits.CCP2IF=0;
CCPR2 =0; /*CCPR1 is capture count Register which is cleared initially*/
T3CONbits.RD16=1;
T3CKPS0=0;
T3CKPS1=0;
TMR3CS=0;
TMR3IF=0;
T3CCP2=0; /*Timer3 is the capture clock source for CCP2*/
}
void xor()
{
if (PORTCbits.RC0==PORTCbits.RC2)
{
PORTCbits.RC6=0;
}
else if (PORTCbits.RC0!=PORTCbits.RC2)
{
PORTCbits.RC6=1;
}
}
void main()
{
TRISCbits.TRISC0=1;
TRISCbits.TRISC2=1;
TRISCbits.TRISC6=0;
xor();
LCD_Init();
while(1)
{
CCP2CON = 0b00000101;
PIR2bits.CCP2IF = 0;
TMR3ON = 0;
TMR3 = 0;
while (!PIR2bits.CCP2IF);
TMR3ON = 1;
CCP2CON = 0b00000100;
PIR2bits.CCP2IF = 0;
while (!PIR2bits.CCP2IF);
comtage = CCPR2;
dephTempo = (((float)comtage /30.518)/65536 );
sprintf(pulse,"%.3f ",dephTempo);
LCD_String_xy(0,0,"the pulse width is : ");
LCD_String_xy(2,9,pulse);
}
}
Der xor()
muss sich innerhalb der Endlosschleife befinden. Insbesondere innerhalb der while (!PIR2bits.CCP2IF)
Schleifen.
In allen Fällen, wenn Sie keine Interrupts verwenden, ist es sinnlos, den Capture-Vergleich für eine interne Funktion zu verwenden.
verrückt na
Paul Ghobril