TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: yukardo en 14 de Agosto de 2008, 23:03:59

Título: Problema con el comparador del PIC12F675
Publicado por: yukardo en 14 de Agosto de 2008, 23:03:59
Saludos.

Estoy realizando un circuito en el cual utilizo el comparador que trae el pic12F675, el problema es que al parecer no esta funcionando, a lo mejor tengo algun error en el programa y no lo he visto.

Aqui les dejo el programa para ver si me pueden echar una mano, gracias por su ayuda.

cout var CMCON.6

CMCON=%00000001
ANSEL=%00000011

main:
if GPIO.3=1 then
call biestable
endif

if GPIO.4=1 then
call temporizada
endif

goto main

biestable:
if CMCON.6=1 then
pause 100
else
goto main
endif
if CMCON.6=1 then
high GPIO.5
else
goto main
endif

temporizada:
if CMCON.6=1 then
pause 1000
else
goto main
endif
if CMCON.6=1 then
pause 10000
high GPIO.5
else
goto main
endif
Título: Re: Problema con el comparador del PIC12F675
Publicado por: droky en 16 de Agosto de 2008, 22:20:24
Hola, no se si esto se parece a lo que pretendias, pero funciona. Esta hecho en Proton PicBasic, que me pareció el lenguaje que has usado:
Código: [Seleccionar]
Config INTRC_OSC_NOCLKOUT,WDT_OFF,MCLRE_off
Device = 12f675
XTAL = 4

symbol cout = CMCON.6


CMCON=%00000001
ANSEL=%00000011            'GP0 y GP1 entradas del comparador, GP2 salida cout
TRISIO = %00011011 'Entradas y salidas
GPIO=%00000000 'salidas a 0
DIM estado as bit

Inicio:
estado = 0 ' estado biestable a 0

main_loop:
if GPIO.3=1 then
   call biestable 'Si pulso en GP3, biestable
endif

if GPIO.4=1 then
   call temporizada 'Si pulso en GP4, temporiza
endif

goto main_loop

biestable:
if cout=1 then 'Biestable
   if estado = 0 then
      high GPIO.5
  pause 100
      estado = 1
   else
      low GPIO.5
  pause 100
      estado = 0
   endif
else
   goto main_loop
endif


temporizada:
if cout=1 then 'Temporizador
   high GPIO.5
   pause 10000
   low GPIO.5
   estado = 0
else
   goto main_loop
endif

Aparte de definir las directivas de procesador y fuses, para que el programa te funcione, he definido los puertos de entrada/salida.
En tu programa has definido GP0 y GP1 como entradas de comparador y GP2 como salida del mismo, con lo cual puedes monitorizar el resultado de cout en GP02.
En tu programa, el estado de GP5 nunca volvia a 0, una vez lo ponias a 1, asi que siempre se quedaba igual y ni temporizaba ni basculaba.
Salu2