Escribí una función para interactuar con mi 'PIC16F1788'. El código envía pulsos fuera del puerto 'RC4' a una frecuencia específica, para hacer que un LED parpadee de acuerdo con esa frecuencia. Por lo tanto, el LED parpadeará más rápido o más lento dependiendo de la magnitud de la frecuencia. Decidí tomar un código parpadeante y variar el tiempo de retardo de acuerdo con mi frecuencia de entrada de la siguiente manera.
void blink(int frequency){
/* starts the LED blinking at a particular frequency */
PORTCbits.RC4=0XFF; // RC4 on
__delay_ms(1000/frequency); // time in ms dealing with frequency values in kHz
PORTcbits.RC4=0X00; // RC4 off
__delay_ms(1000/frequency); // time in ms dealing with frequency values in kHz
}
¿Funcionaría este código? ¿Es una buena idea? ¿Hay algún modo de que pueda mejorarlo?
Actualización # 1
Cambié mi código en función de algunas de tus entradas Pero aún así no tengo suerte ejecutándolo. se compila bien, pero el LED no parpadea = (
#include <htc.h>
#include <pic.h>
#include <pic16f1788.h>
#include <xc.h>
// Config word
#define frequ 100000
#define _XTAL_FREQ 20000000
void main()
{
// output
TRISB5 = 0;
// configure CCP3
CCP3CONbits.CCP3M = 0x0C; // set it to PWM mode; and active high
// configure Timer 2
PR2 = ((_XTAL_FREQ)/(4*16*frequ))-1; // Timer 2 max value is (20MHz / 4*16*f)-1 = max duty, fosc=20MHz, prescaler of 16
CCPR3 = 0.5*(PR2+1); // CCP3 compare value is 50% duty cycle
T2CONbits.T2OUTPS = 0x02; // Timer 2 prescaler 16
T2CONbits.TMR2ON = 1; // Timer 2 on
}