Autor Tema: Detectar GP Activo 12c508A  (Leído 2880 veces)

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

Desconectado ramingo

  • PIC10
  • *
  • Mensajes: 6
Detectar GP Activo 12c508A
« en: 13 de Febrero de 2010, 23:45:23 »
hola gente.
Soy nuevisimo en este tema y necesito que me ayuden.
Tengo un circuito en el que tengo un pic 12c508A.
El tema es el siguiente:

quiero programar dos posibles pausas para la salida GP5. El circuito tiene un switch que segùn le envia corriente al GP0 o al GP1 segùn la posicion de switch.
Si esta switcheado el GP0, seteo la pausa en 5 minutos pero si esta switcheado el GP1, seteo la pausa en 3 minutos.
Bien, ahora les pregunto:
¿Como hago para detectar cual es el GP activo por el switch? Yo tengo este code pero no funciona bien...

@ device MCLR_OFF
AA VAR BYTE
CONTROL:
IF GPIO.1 = 1 Then
    HIGH GPIO.5
    FOR AA = 1 TO 5
        pause 60000  
    NEXT AA
    LOW GPIO.5  
SLEEP 180
Endif


IF GPIO.0 = 1 Then
    HIGH GPIO.5
    FOR AA = 1 TO 4
        pause 60000  
    NEXT AA
    LOW GPIO.5  
SLEEP 180
Endif

GOTO CONTROL

¿estoy codificando bien la pausa? se puede hacer de otra forma mas optima?

por favor, espero sus comentarios.

gracias de antemano.

« Última modificación: 14 de Febrero de 2010, 20:57:28 por un Moderador, Razón: Se modifica título. Por favor LEE LAS REGLAS DEL FORO. »

Desconectado jo-fe-ar

  • PIC10
  • *
  • Mensajes: 24
Re: ayuda con programa
« Respuesta #1 en: 14 de Febrero de 2010, 14:52:53 »
Hola! igual estoy esperando respusta en mi tema hehe pero bueno tratare de ayudar aver si puedo...

esta en pbp  verdad?
mira yo no uso FOR  y eso porque no se tengo una alergia haha....bueno como que le tengo miedo pero ya intentare usarlo... :S

mira yo lo que haria es esto (puede que este mal escrito el codigo por letras o asi eh....pero seguro que me entenderas la idea)

minutos var byte
minutos = 0

revision:
if gpo0 = 1 then minutos = 1
if gpo1 = 1 then minutos = 2
if gpo2 = 1 then minutos = 3

pausas:
if minutos = 0 then revision
if minutos = 1 then pause ( y el tiempo q nsesitas)
if minutos = 2 then pause (y el tiempo q nesesitas)
if minutos = 3 then pause (y el tiempo q nesesitas)
goto revision


eso por si despues quieres ocupar la variable...si no en ves de agregar valor a la variable puedes hacer esto:
if gpo1 = 1 then pause (tiempo)
directamente... bueno es lo que se me ocurre talves te entendi mal en tu idea
:S
bueno espero haber ayudado ahi me dices

Desconectado ramingo

  • PIC10
  • *
  • Mensajes: 6
Re: ayuda con programa
« Respuesta #2 en: 14 de Febrero de 2010, 15:24:48 »
Ocurre que necesito usar el FOR porque con el pause no puedo setear mas de 65.000, es decir no puedo poner un pause por 5 minutos. Por ello hago 5 pausas de 1 minuto mediante el FOR.
Ahora, cual es la forma correcta de saber si un pin del pic esta activo? IF GP0.1 = 1 ... ? o debe ser de otra forma?
Si, uso pic basic pro.

Desconectado jo-fe-ar

  • PIC10
  • *
  • Mensajes: 24
Re: ayuda con programa
« Respuesta #3 en: 14 de Febrero de 2010, 15:35:20 »
ha pues igual cuando la variable tenga un determinado valor o cuando un pin este en alto....lo puedes llevar a una etiqueta y ahi poner varios pause lo que te permita hasta llegar al valor que nesesitas...(  sigo con mi alergia al for haha) bueno yo te digo esto porque yo creo que asi lo haria al menos que for me saludara y le agarrara la onda :D

si esa es la forma correcta... hasta donde yo se si....y yo asi siempre lo he usado bueno...
asi:

if portb.7 = 1 then (---)

no se ben que sea gpo.0 o eso :S
pero si esa es la forma correcta hasta donde se
haaa y bueno segun recuerdo...es bueno que a la entrada del pin que va a detectar el estado, haya una resistencia pull-up de 4k7...o pull down..dependiendo

si vas a actuar cuando el pin este en estado alto...entonces ponle una resistencia pulldown...resistencia del pin a tierra (asumimos que si vas acutar asi... es porque tu switch al seleccionar ese pin le lleva corriente de vcc...por lo que "obligamos" por decirlo asi al pin a estar en bajo y asi evitar falsas alarmas por ruido y otras...y solo pase a alto con el valor total de vcc que lleva tu switch..caso contrario a lo siguientE:

si vas a actuar cuando el pin este en bajo entonces ponle una pullup...resistencia de pin a vcc



Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: ayuda con programa
« Respuesta #4 en: 14 de Febrero de 2010, 17:07:53 »
Si necesitas que los tiempos sean precisos, la cuenta la deberias de realizar con interrupciones y si bien con esta no alcanzas el tiempo deseado puedes crear una variable que cuente el numero de veces que se repita la interupcion.

Fermin
Todos los días se aprende algo nuevo.

Desconectado ramingo

  • PIC10
  • *
  • Mensajes: 6
Re: ayuda con programa
« Respuesta #5 en: 14 de Febrero de 2010, 19:24:12 »
Si necesitas que los tiempos sean precisos, la cuenta la deberias de realizar con interrupciones y si bien con esta no alcanzas el tiempo deseado puedes crear una variable que cuente el numero de veces que se repita la interupcion.

Fermin

y como hago eso?

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: ayuda con programa
« Respuesta #6 en: 14 de Febrero de 2010, 20:11:59 »
Consulta el buscador del foro. Básicamente de lo que se trata es que cada cierto tiempo se desborda algún tmr del pic lo cual te genera una interrupción con lo cual puedes generar de forma mas precisa los tiempos que requiere tu aplicación desde segundos asta horas aunque estos tiempos también son imprecisos ya que en cuanto mas largo sea el tiempo por ejemplo horas notaras que hay variaciones atrasos o adelantos en el tiempo si requieres tiempos mas exactos te recomiendo un rtc como el ds1307.



 

anything