TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ppyote en 24 de Noviembre de 2010, 21:54:15
-
wenasss a tod@s... aqui traigo una duda que me tiene un poco mosca... estoy intentando hacer un capacimetro con un 16f628a usando los comparadores que lleva reduciondo al maximo la cantidad de componentes necesarios pero me he dado cuenta que para condensadores de baja capacidad...<100pf necesito un pic de gama media/alta... y aqui esta el problema... no puedo configurar las interrupciones de los comparadores del 18f2550... alguien los ha usado? he estado mirando el datashell para ver si necesitaba algun tipo de registro como el cvrcon pero aun probando todas las opciones nada de nada, decir que el Vref que utilizo es externo..
aqui va el codigo que gasto para la prueba
#include <18f2550.h>
#fuses HS,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN,NOPBADEN
#use delay(clock=20000000)
#word cncom=0x0fb4
#word portb=0x0f81
#word cvrcon = 0x0fb5
#use standard_io(a)
#int_comp
void interrupcion()
{
if(!c1out){
portb=0xff;
}
else portb=0x00;
}
void main(){
set_tris_b(0x00);
set_tris_a(0xFF);
SETUP_ADC(ADC_OFF);
SETUP_ADC_PORTS(NO_ANALOGS);
setup_comparator(A0_A3_A1_A2);
enable_interrupts(int_comp);
enable_interrupts(global);
portb=0x00;
while(1){}
}
un saludo...
-
voy a colgar los archivos del proteus para poder simular y el codigo para que lo mireis a ver... me estoy haciendo loco....
por cierto lo he probado en proboard y tampoco va, osea que descarto el bug de los comparadores en proteus....
Esperando estoy alguna chispa que me ilumine...
un saludo....
-
lo siento pero aun sigo dandole vueltas y mas vueltas de por que no me van los comparadores en la gama de los 18f...
me pasaron un ejemplo en el foro de ccs pero no se por que a mi no me va....
aqui va el codigo que me pasaron...
#include <18F4550.h>
#fuses INTRC_IO,NOWDT,PUT,BROWNOUT,NOLVP
#use delay(clock=4000000)
#define VREF_LOW_THRESHOLD 11 // Vref = 2.3 volts
#define VREF_HIGH_THRESHOLD 12 // Vref = 2.5 volts
#define LED_PIN PIN_B0
#byte CMCON = getenv("SFR:CMCON")
//------------------------------------
#INT_COMP
void isr()
{
int8 temp;
if(C1OUT == 1)
{
output_high(LED_PIN); // LED on
setup_vref(VREF_LOW | VREF_LOW_THRESHOLD);
}
else
{
output_low(LED_PIN); // LED off
setup_vref(VREF_LOW | VREF_HIGH_THRESHOLD);
}
// Read CMCON register to clear the "mismatch" condition.
temp = CMCON;
}
//==================================================
void main()
{
int8 value;
setup_comparator(A0_VR_A1_VR | CP1_INVERT);
setup_vref(VREF_LOW | VREF_HIGH_THRESHOLD);
// Initialize the LED.
if(C1OUT == 1)
output_high(LED_PIN);
else
output_low(LED_PIN);
value = CMCON; // Clear mismatch condition.
clear_interrupt(INT_COMP); // Clear interrupt flag
enable_interrupts(INT_COMP); // Enable interrupts
enable_interrupts(GLOBAL);
while(1);
}un saludo y a ver si hay suerte y alquien me puede aclarar un poco donde esta el fallo por que yo no lo encuentro...
PD... alguien podria bajarse los archivos que he puesto antes o compilar este programa y que me lo pase asi mirare si es un bug en mi compillador ccs, yo uso el 4.104
gracias y un saludo...