Hola que tal, realice un programa en CCS muy simple, ya que nunca use los comparadores con una referencia interna y quise hacer un pequeño ejercicio, resulta que cuando lo simulo en Proteus, el mismo no funciona, revise varias veces la configuracion de los comparadores y de la tensión de referencia pero no encuentro donde es que esta el error. Adjunto el programa para ver si alguien encuentra que estoy haciendo mal y el esquemático.
PD: La Vref la configure para LOW y valor en 1 con lo cual la Vref es de 0,2083V y el comparador estaría para comparar la entrada CIN- ==> A1 con la Vref. La idea era hacer un pequeño detector de cruce por cero de una señal senoidal V(t) = 2,5*(1+sen(50t)) [V]. Al detectar el valor de cero, activaría un led durante lo que durara el cero y luego lo apagaría.
...

PD: La Vref la configure para LOW y valor en 1 con lo cual la Vref es de 0,2083V y el comparador estaría para comparar la entrada CIN- ==> A1 con la Vref. La idea era hacer un pequeño detector de cruce por cero de una señal senoidal V(t) = 2,5*(1+sen(50t)) [V]. Al detectar el valor de cero, activaría un led durante lo que durara el cero y luego lo apagaría.
Código:
#include <16F676.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOCPD //No EE protection
#FUSES PUT //Power Up Timer
#FUSES BANDGAP_HIGH
#FUSES RESERVED //Used to set the reserved FUSE bits
#use delay(clock=4000000)
// Definiciones del puerto A
#define Led PIN_A0
#define V_ripple PIN_A1
#use fast_io(A)
#use fast_io(C)
void Inicializacion (void)
{
setup_comparator(A1_VR);
set_tris_a (0b11111110); // Entradas:A1,A2,A3,A4,A5 - Salidas:A0
output_a (0);
setup_vref(VREF_LOW|1);
}
void main()
{
Inicializacion ();
for (;;)
{
if (C1out)
output_high(Led);
else
output_low(led);
}
}

Última edición: