Autor Tema: Estado alto no responde  (Leído 1708 veces)

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

Desconectado f_leyva

  • PIC10
  • *
  • Mensajes: 6
Estado alto no responde
« en: 09 de Diciembre de 2016, 11:33:01 »
Que tal a todos, nuevamente tengo un pequeño problema con un proyecto esta vez es referente a conservar un estado alto.
Debo mandar a un estado alto el pin RC0 y el micro debe leer si el pin RB0 cambio de estado, si RB0 permanece en estado bajo RC0 tambien debera estar en bajo si RB0 cambia a estado alto RC0 permanece en estado alto. Anexo el segmento de codigo, la parte que pone a estado bajo ambos pines funciona bien sin embargo al tratar de mantener el estado alto no lo mantiene. Espero puedan ayudarme

void cambio_estado(void)     //funcion ON
   {
      int val_port_b = input_b();
      int real_val = val_port_b & 0b00111100;
     
      if(real_val = 0b00101100)
      {
         if(input_state(PIN_B4) == 1)
         {
            output_high(PIN_C1);
            delay_ms(500);
            output_high(PIN_C2);
            printf("CBHR01\r");
            output_low(PIN_C2);
         }
         else if(input_state(PIN_B4) == 0)
         {
            output_low(PIN_C1);
            delay_ms(500);
            output_high(PIN_C2);
            printf("CBHR00\r");
            output_low(PIN_C2);
         }
      }
   }

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Estado alto no responde
« Respuesta #1 en: 09 de Diciembre de 2016, 12:00:30 »
Citar
si RB0 permanece en estado bajo RC0 tambien debera estar en bajo si RB0 cambia a estado alto RC0 permanece en estado alto.

..... No se ni para que lo haria en software a esto... Simplemente conectaria lo que llega a RB0 a lo que tiene que alimentar RC0. Por que amos pines tienen el mismo estado.
Lo unico que vas a lograr hacerlo con el software es una version retardada de la señal de RB0 o peor aun donde no tenga valores correctos.
Ademas cualquier delay que pongas significa que vas a empeorarlo aun mas.

output_bit(PIN_RC0,input_state(PIN_RB0));

PD: En tu codigo el segundo if no tiene sentido, si entro al else del primero significa que es 0

Ademas para que entre al primer if, te das cuenta que requiere que B4 cambie exactamente entre unas 3 instrucciones?, es decir preguntas por si RB4 es 0, y luego preguntas por si RB4 es 1. Le pongo comentarios

Código: C
  1. int val_port_b = input_b();                // Tomas valor de todo el Puerto B
  2.       int real_val = val_port_b & 0b00111100;        // Aca el puerto B puede cambiar
  3.      
  4.       if(real_val = 0b00101100)                             // Pedis que RB4 sea SI o SI 0, pero este valor fue tomado en la primera instruccion,
  5.       {
  6.          if(input_state(PIN_B4) == 1)                     // Aca pedis que RB4 sea 1, la unica forma que entre aca es que RB4 cambie despues del input_b() y se ponga en 1, sino nunca entraria
« Última modificación: 09 de Diciembre de 2016, 12:28:58 por KILLERJC »


 

anything