Autor Tema: Problema con el comparador del PIC12F675  (Leído 2418 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Problema con el comparador del PIC12F675
« 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

Desconectado droky

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 628
    • Diseños radikales libres
Re: Problema con el comparador del PIC12F675
« Respuesta #1 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

Yo... he visto cosas que vosotros no creeríais... atacar naves en llamas más allá de Orión, he visto rayos C brillar en la oscuridad cerca de la puerta Tannhäuser.
Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia.
Es hora de morir.

Si me buscas en twitter, me tienes por @radikaldesig


 

anything