TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Enigma en 17 de Febrero de 2008, 17:13:46
-
Hola muchachos, miren estoy aprendiendo a usar los comparadores del pic 18F4550, y bueno, he hecho un programa que me permita comparar un voltaje de referencia interno con el comparador 1, cuya señal analógica entra por AN0.... Cuando simulo, y verifico el bit 6 de del CMCON, pues siempre está en 0, es decir, siempre me dice que el V+ (voltaje de referencia interno) es menor... aún así cuando por AN0, introduzco un voltaje mucho menor a la referencia... Es como si el comparador no me leyera o no comparara!! y bueno la verdad me gustaria que me orientaran porque no veo el error en mi programa, aquí se los dejo a ver que tal....
#include <18f4550.h>
#DEVICE ADC=8
#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT,NOMCLR
#use fast_io (A)
#use fast_io (C)
#use fast_io (D)
#use fast_io (B)
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Habilita las funciones RS232, velocidad a 9600 baudios
#byte RCON=0xFD0
#bit POR=RCON.1 // Bit de la bandera del Power On Reset
#byte CMCON=0xFB4 // Registro de control de los comparadores
#bit c1inv=CMCON.4
//#bit C1OUT=CMCON.6
float value,dato,vref;
void main(main)
{
//c1inv=0;
set_tris_a(0xe7);
set_tris_c(0xD8);
set_tris_d(0x00);
setup_port_a(AN0_TO_AN1_ANALOG ); // RA0_RA1_RA2 son analógicos y los demás son digitales
setup_adc(ADC_CLOCK_INTERNAL ); // Tomará el dato contando el tiempo con el reloj interno
setup_comparator(A0_VR_A1_VR); // Solo A0 para C1 y A1 para C2
if(POR==0) // Reset por POR
{
output_high(PIN_D1); // Enciendo un led de prueba
delay_ms(1000); // Una demora para que se estabilicen los voltajes
POR=1; // Limpio la bandera del POR
output_low(PIN_D1); // Enciendo un led de prueba
}
#asm
bsf CMCON,2; // Bit de selección del modo del comparador
bsf CMCON,1; // Bit de selección del modo del comparador
bcf CMCON,0; // Bit de selección del modo del comparador
#endasm
while(true)
{
set_adc_channel(0); // El canal de adquisición del dato es el RA0
delay_us(10); // Un retardo para capturar bien el dato
value=read_adc(); // Leo el dato
dato=(value*5)/255; // Convierto el valor a decimal y lo guardo
printf("\f"); // Borro pantalla
printf(" Voltaje= %2.2g V",dato); // Mando a mostrar el valor del conversor
delay_ms(2000);
setup_vref(VREF_HIGH |2); // Para mayor exactitud del comparador
if( bit_test(cmcon,6))
{
output_high(PIN_D3); // Referencia es mayor que AN0
delay_ms(2000);
output_low(PIN_D3); // Referencia es mayor que AN0
}
else
{
output_high(PIN_D2); // Referencia es menor que AN0
delay_ms(2000);
output_low(PIN_D2); // Referencia es menor que AN0
}
}
}
Atte: Enigma... La llanerita de Guayana :-)
-
:5]
Raaaaaaaaaaaayoooooos!!!! Proteus me la volvio a hacer!!!!!!!!! :5]
PROTEUS COMO TE ODIO!!!! ME HAS HECHO PERDER HORAS VALIOSAS DE MI TIEMPO PROBANDO Y CAMBIANDO UN PROGRAMA QUE SERVIA DESDE EL PRINCIPIO!!!!!!!! :5]
Atte: Enigma... La llanerita de Guayana :5]
-
Parece que aun no aprendes, que de proteus no hay que confiar 100% ya que es una simulacion :x, :mrgreen: :mrgreen: :mrgreen:
-
Si al parecer soy masoquista!!!!! :x
Una pregunta... especificamente que función tiene el HLVD?? que le hace a los comparadores? los apaga?
Atte: Enigma... La llanerita de Guayana :-)
-
Muchachos una pregunta, Cuando han configurado los comparadores, saben que uno puedo ver las salidas ya sean del C1 o el C2 por el registro CMCON testeando los bits 6 o 7 respectivamente, además de que también en los pines del pic RA4 y RA5 están las salidas de los mismos comparadores, es decir, hay dos formas de saber la respuesta de ellos.... Ahora la pregunta es si quiero saber la salida de dichos comparadores pero observados desde los pines RA4 y RA5 del pic, dichas salidas deben estar como digital y como salida cierto??
Es que coloque unos leds en ambos pines del pic, y pos nada ninguno prende, y se que están comprarando porque testee los bits 7 y 6 del CMCON y mande a prender unos leds cuando se activarán y funcionan fino!!! pero cuando mando a mostrar las salidas a traves de RA4 y RA5, pos nada!!!
Quisiera saber si alguien ha sacado las salidas de los comparadores no testeando los bits 7 y 6 sino observando dichas salidas por los pines del PIC???
Atte: Enigma... La llanerita de Guayana :-)
-
Parece que aun no aprendes, que de proteus no hay que confiar 100% ya que es una simulacion :x, :mrgreen: :mrgreen: :mrgreen:
debería haber una fe de erratas o indicaciones de que no hace en la pag del fabricante o en un leeme al instalar, existe algo asi??
-
Esto no es un proyeto, vamos! :-)
-
Parece que aun no aprendes, que de proteus no hay que confiar 100% ya que es una simulacion ,
debería haber una fe de erratas o indicaciones de que no hace en la pag del fabricante o en un leeme al instalar, existe algo asi??
Ummm creo que no lo hay!!! y pues sería muy bueno que lo hubiera así, nos evitarian tanta perdedera de tiempo y tantyas rabietas!!!! :5]
Atte: Enigma... La llanerita de Guayana :-)
-
:5]
Raaaaaaaaaaaayoooooos!!!! Proteus me la volvio a hacer!!!!!!!!! :5]
PROTEUS COMO TE ODIO!!!! ME HAS HECHO PERDER HORAS VALIOSAS DE MI TIEMPO PROBANDO Y CAMBIANDO UN PROGRAMA QUE SERVIA DESDE EL PRINCIPIO!!!!!!!! :5]
Atte: Enigma... La llanerita de Guayana :5]
es cierto, a un programa de simulación no se le puede dar toda la confianza, pero tampoco hay que subestimarlo. ¿cuanto tiempo te habrias echado si no lo fueras simulado?
-
es cierto, a un programa de simulación no se le puede dar toda la confianza.
Parece que aun no aprendes, que de proteus no hay que confiar 100% ya que es una simulacion.
Muchas veces el problema de la mayoria de dispositivos no es el dispositivo en si sino los usuarios, su falta de conocimiento y dificultad de aprendizaje, sin animos de ofender a nadie. El simulador solo realiza lo que le ordenemos hacer.
Lo que ocurre es que el PROTEUS realiza la simulacion asumiendo que el microcontrolador es ideal, por lo tanto las entradas del microcontrolador no se activaran, eso lo deduje gracias al datasheet, la cual dice que si el cambio de voltaje ocurre antes de que transcure el ciclo Q2 la salida del comparador no se activara.
Para resolver este problema se bebe cambiar el tiempo de retardo de subida y de bajada de los pines del microcontrolador. esto lo realizas en las propiedades del dispositivo. Esto solo lo he logrado con los PIC16 aún no hago trabajar los PIC18. Espero que alguien encuentre la solución para estos microcontroladores.
Me gustaria postear un nuevo tema (con imagenes y algunos ejemplos) acerca de esto pero necesito la ayuda de alguno de ustedes para hacer esto ya que no manejo muy bien como hacerlo.
-
...Lo que ocurre es que el PROTEUS realiza la simulacion asumiendo que el microcontrolador es ideal, por lo tanto las entradas del microcontrolador no se activaran, eso lo deduje gracias al datasheet, la cual dice que si el cambio de voltaje ocurre antes de que transcure el ciclo Q2 la salida del comparador no se activara.
Para resolver este problema se bebe cambiar el tiempo de retardo de subida y de bajada de los pines del microcontrolador. esto lo realizas en las propiedades del dispositivo. Esto solo lo he logrado con los PIC16 aún no hago trabajar los PIC18. Espero que alguien encuentre la solución para estos microcontroladores.
...
ciertamente bigluis, yo por ejemplo cuando uso los buttons, que simula los pulsadores, les pongo un tiempo de pulsación de 40ms, este tiempo simularía el montaje en el protoboard (los llamados rebotes o flancos transitorios) y así ajusto mi código antirrebotes
...
Me gustaria postear un nuevo tema (con imagenes y algunos ejemplos) acerca de esto pero necesito la ayuda de alguno de ustedes para hacer esto ya que no manejo muy bien como hacerlo.
adelante, para las imágenes, mira este link
http://www.todopic.com.ar/foros/index.php?topic=8120.0
te dice como hacerlo
sería recomendable que crearas un hilo nuevo para no desviar éste (a menos que tenga relación)
-
Gracias PalitroqueZ ya he comenzado el tutorial espero que sea de su agrado y les ayude.
El link es el siguiente:
Entradas Comparadora, MikroC y Proteus (http://www.todopic.com.ar/foros/index.php?topic=27711.0)