Problema con pin_c6 configurado como salida digital || PIC18F4525

#1
Hola buenas, estoy usando el puerto C como selector de columnas para una matriz de led, y para mi asombro, el pin C6 nunca cambia de estado, con lo que la 7ª columna nunca se enciende, he probado a intercambiar el cable que va del pic al C6 por el del C7 y funciona perfectamente.

Basicamente, consigo que todos los pines del puerto C se pongan a 1, excepto C6. (He hecho una chapucilla cambiando temporalmente el pin_c6 por pin_b1, pero realmente necesito usar el pin_c6)

Miré para que se puede usar el C6 en el datasheet, y solo sirve de Digital I/O,EUSART asynchronous transmit y EUSART synchronous clock (RX/DT). He mirado a ver si es que tenia que desactivar algo, pero no encontré nada.

Adjunto codigo fuente:
PHP:
#include <18f4525.h>

#fuses NOWDT
#use delay(clock=8000000)
#define value 0x0f    //(0xf = 4bits de profundidad)



int dutyr=0x0,dutyg=0x0,dutyb=0x0,cont=0,c=0;
int b0a=0,a4a=0,color=0;
int despl=0;

#int_timer2
void tmr()
{
   int b0, a4;     

   b0=input(pin_b0);
   a4=input(pin_a4);  
    if(!cont)
   switch(despl)
   {
      case 0 :    output_c(0x00);
             output_high(pin_c0);
             despl++;
             break;   
     
      case 1 :    output_c(0x00);
             output_high(pin_c1);
             despl++;
             break;   
      
      case 2 :    output_c(0x00);
             output_high(pin_c2);
             despl++;
             break;   
   
      case 3 :    output_c(0x00);
             output_high(pin_c3);
             despl++;
             break;   

      case 4 :    output_c(0x00);
             output_high(pin_c4);
             despl++;
             break;   

      case 5 :    output_c(0x00);
             output_high(pin_c5);
             despl++;
             break;

      case 6 :    output_c(0x00);
             output_high(pin_c6);
             despl++;
             break;   

      case 7 :    output_c(0x00);
             output_high(pin_c7);
             despl++;
             break;

      default :   output_c(0x00);
               despl++;
               if(despl>0x0F)
                  despl=0;
               break;   
      

   }

      
  if(cont<=dutyr && dutyr!=0x00)
   output_HIGH(pin_a0);
  else
   output_low(pin_a0);
   
  if(cont<=dutyg && dutyg!=0x00)
   output_high(pin_a1);
  else
   output_low(pin_a1);
   
  if(cont<=dutyb && dutyb!=0x00)
   output_high(pin_a2);
  else
   output_low(pin_a2);

  if(cont>=value)
   cont=0;
  else
   cont++;
     
  c++;
  if(c>=15)
   c=0;

     

      
   if(!b0&&!a4){}
   else
   {   
      if(!a4 && a4a)
      {      
         color++;
         if(color>2)
            color=0;
      
      }
      if(!b0 && b0a)
         switch (color)
         {
            case 0 : dutyr++;
                   if(dutyr>0x0f)
                     dutyr=0x00;
                   break;
            case 1 : dutyg++;
                   if(dutyg>0x0f)
                     dutyg=0x00;
                   break;
            case 2 : dutyb++;
                   if(dutyb>0x0f)
                     dutyb=0x00;
                   break;    
          }
   }
   b0a=b0;
   a4a=a4;   
}

void main(void)
{
  
  setup_oscillator(OSC_8MHZ  |OSC_NORMAL | OSC_PLL_ON);      
  set_tris_a(0x00010000);
  set_tris_b(0b00000001);
  set_tris_c(0x00);  
  setup_timer_2(T2_DIV_BY_1, 50,1);
  enable_interrupts(GLOBAL);
  enable_interrupts(INT_timer2);
  
  while(1);
 

}
 
Última edición por un moderador:
#2
creo que puede ser porque tienes activado el EUSART, entra en las opciones del proyecto y verifica que este desactivado, nose si sabes a que me refiero, donde puedes cambiar los puertos a out/in, o cambiar los timers
 

Temas similares

Arriba