Autor Tema: Como parar un Toggle?  (Leído 4157 veces)

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

Desconectado retovil

  • PIC10
  • *
  • Mensajes: 43
Como parar un Toggle?
« en: 05 de Enero de 2017, 09:55:42 »
hola amigos , como parar un toggle ? toggle off ,o toggle break.
if (pin_b7,0){output_toggle (pin_b5)=off;} .
o
if(pin_b7,0){output_low(pin_b5);} esta no funciona .

porque no me funcionan las sentencias if ? :D

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Como parar un Toggle?
« Respuesta #1 en: 05 de Enero de 2017, 12:43:20 »
Me parece que deberias buscar un tutorial de C por el error que estoy viendo.

Aunque sea para que veas el tema de los loops y/o control de flujo, como funcionan, como se escriben, que significa cada parte del mismo.

Solo te voy a aportar una cosa.

PIN_xx es un numero solamente, el compilador entiende que ese numero es un pin nada mas.. pensalo como si fuera:

#define HOLA 5

que ocurre si haces if(HOLA)
que seria lo mismo que hacer if(5).

Desconectado retovil

  • PIC10
  • *
  • Mensajes: 43
Re:Como parar un Toggle?
« Respuesta #2 en: 05 de Enero de 2017, 23:00:20 »
Pero KillerJC , si pongo lo siguiente : output_toggle(PIN_B5); seguro que a la salida del pin b5 empezara un alto y despuès un bajo .y sera infinito con un while o loop.
ahora el sistema me demanda a modo de informacion del usuario ,que ese blink en el pin 5 del pic ,se detenga cuando la salida de algun otro pin sea 0 .Me obliga a usar un condicional
Código: [Seleccionar]
If(expresión)
     {
         Sentencia_1;
     }
 
Ejemplo:
          if(input(PIN_A0)==1)
      {
      output_low(PIN_B5);//que es el del blink
       }
else
       {
     return; 
        }
     








Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Como parar un Toggle?
« Respuesta #3 en: 06 de Enero de 2017, 02:01:51 »
esta bien, tu problema esta en el condicional... Observa lo que pusiste en tu ultimo codigo que es lo correcto:

Código: C
  1. if(input(PIN_A0)==1)

Y lo que pusiste antes:

Código: C
  1. if (pin_b7,0)

¿Notas la diferencia?, hay una coma y no esta el input()

Desconectado retovil

  • PIC10
  • *
  • Mensajes: 43
Re:Como parar un Toggle?
« Respuesta #4 en: 06 de Enero de 2017, 18:49:13 »
Claro porque en este caso la que se pone a 0 es una salida y no una entrada
 
Código: [Seleccionar]
if (PIN_B7,0).

 porque este codigo no lo toma ,supuse que como es una salida ,output
 
Código: [Seleccionar]
if (output(PIN_B7)==0)
 el tema es que no me funciona cuando quiero bloquear el toggle .
 
 

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Como parar un Toggle?
« Respuesta #5 en: 06 de Enero de 2017, 19:21:00 »
NO NO NO y NO..

Vamos desde el comienzo.

- input(pin) es una funcion, que cuando vos le pasas como parametro PIN_xx el compilador lo reemplaza por una instruccion simple la cual retorna el estado del pin, y no hace nada mas.
- PIN_xx es un numero que a vos sinceramente no te interesa que valor tenga
- dentro del if podes poner cosas, pero no hay ninguna razon por que le pongas una coma.
- la funcion output_bit(pin,valor) toma 2 parametros, uno que es el PIN_xx y el valor, esta funcion lo que hace es cambiar la salida. Pensalo como si sacas una caja y la pones en otro lado, al igual que input.
- input_xx y ouput_xx son funciones !, no por que si es salida tenes que usar output y si es entrada tenes que usar input, input es una funcion que lee y retorna el valor del puerto o pin segun la funcion usada, y el output lo que hace es enviar el valor que uno le de al puerto. NADA MAS. CCS si no usas FAST_IO hace que si usas output sobre una entrada te lo cambia a salida. Sinceramente es una MIER*** eso, y la mayoria que vienen con problemas aca al foro es uno de los mas comunes. Pero si usas el FAST_IO y seteaste correctamente los tris el input y output hacen lo que dije nomas.

Entonces con todo lo anterior. Si tenes:

Código: C
  1. if (output(PIN_B7,0)==0)


Primero se ejecuta la funcion output_bit(PIN_B7,0) el resultado de eso puede retornar cualquier cosa ( Indefinido, ya que no tiene valor de retorno, porque no esta hecha para eso ) supongamos por un momento que devuelve un numero 100. Lo siguiente es comparar ese 100 con el 0, y de alli se transforma en true o en false.

Esta linea:

Código: C
  1. if(PIN_B7,0)

se traduce en lo siguiente:

- Evaluo PIN_B7, como es un numero y distinto de 0, quiere decir que es TRUE
- Por estar la coma, descarto lo anterior y tomo el 0, como es 0 entonces es FALSE y esto es lo que usa ese if, seria lo mismo que escribir if(0)


Si quisiera saber exactamente el estado de un pin o una variable usaria:

Código: C
  1. if(input(PIN_A0)==1) {}
  2. if(variable==1) {}

Respetando siempre de ponerlo como FAST_IO


 

anything