TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Algec en 26 de Mayo de 2007, 13:02:15

Título: Problemas con A4 como salida
Publicado por: Algec en 26 de Mayo de 2007, 13:02:15
No funciona una rutina con salida en A4 en proteus, si funciona si selecciono por ejemplo A0 pero no puedo entender donde esta el error, debe ser de configuracion. Os pego el codigo a ver donde falla

//code
#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD,NOWRT
#use delay(clock=1000000)



int tiempo =20;

// rutina de interrupcion si se gira el encoder

#INT_EXT
void giro (void){
  disable_interrupts(global);
 
 /////// EJE X //////////////
 
 If(input(PIN_C1))     // esta seleccionado X en el selector
      {     
      output_high(PIN_A3);    // desbloquea X

      // depende del sentido de giro del encoder fija el bit de direccion de X
      if(input(PIN_B1))
         output_high(PIN_A2);    // direccion a un lado
      else     
         output_low(PIN_A2);    // direccion a un lado

      // hace la salida del pulsos de X
      output_high(PIN_A1);
      delay_ms(tiempo);
      output_low(PIN_A1);
      delay_ms(tiempo);
      output_low(PIN_A3);    // bloquea X
      }
 /////// EJE Y //////////////
 
 If(input(PIN_C2))     // esta seleccionado Y en el selector
      {     
      output_high(PIN_C4);    // desbloquea Y
      // depende del sentido de giro del encoder fija el bit de direccion de Y
      if(input(PIN_B1))
         output_high(PIN_A5);    // direccion a un lado
      else     
         output_low(PIN_A5);    // direccion a un lado
     
     // hace la salida del pulsos de X
      output_high(PIN_A4);
      delay_ms(tiempo);
      output_low(PIN_A4);
      delay_ms(tiempo);
     
     
     output_low(PIN_C4);    // bloquea Y
      }
     
       /////// EJE Z //////////////
 
 If(input(PIN_C3))     // esta seleccionado Z en el selector
      {     
      output_high(PIN_C7);    // desbloquea Z
     
     // depende del sentido de giro del encoder fija el bit de direccion de Z
      if(input(PIN_B1))
         output_high(PIN_C6);    // direccion a un lado
      else     
         output_low(PIN_C6);    // direccion a un lado
     
     // hace la salida del pulsos de Z
      output_high(PIN_C5);
      delay_ms(tiempo);
      output_low(PIN_C5);
      delay_ms(tiempo);
      output_low(PIN_C7);    // bloquea X
      }
 enable_interrupts(global);
}

void main(){
   enable_interrupts(INT_EXT);
   enable_interrupts(global);
   while(TRUE){
 
   
  }
}
   
   
   
encode//
Título: Re: Problemas con A4 como salida
Publicado por: Nocturno en 26 de Mayo de 2007, 13:06:14
Si no recuerdo mal ese pin es Schmitt Trigger y necesita de una pullup  (http://elrebujito.es/wikipic/index.php/Pull-up) externa para funcionar.
Título: Re: Problemas con A4 como salida
Publicado por: KALLITOS en 26 de Mayo de 2007, 14:08:19
Hola.

Correccion se llaman open colector y correcto llevan un pullup

Saludos
Título: Re: Problemas con A4 como salida
Publicado por: Algec en 26 de Mayo de 2007, 14:15:45
Bingo chicos, mil gracias.
Alguna salida mas necesita pull ups? casi es mejor usar otra salida si puedo reformando el esquema.
Título: Re: Problemas con A4 como salida
Publicado por: KALLITOS en 26 de Mayo de 2007, 14:17:57
Dale una ojeada a la hoja de datos del pic para salir de dudas.
Título: Re: Problemas con A4 como salida
Publicado por: Algec en 26 de Mayo de 2007, 15:37:54
Venga gracias por todo, ya he cambiado a usar otra salida, no me convenia que quedase a positivo fijo.
Título: Re: Problemas con A4 como salida
Publicado por: Nocturno en 26 de Mayo de 2007, 16:26:07
Hola.

Correccion se llaman open colector y correcto llevan un pullup

Saludos
Tienes razón, gracias por la corrección