TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Algec en 18 de Julio de 2011, 13:21:32

Título: A ver una ayuda con algo tonto
Publicado por: Algec en 18 de Julio de 2011, 13:21:32
A ver si podeis echarme una mano, no se porque no me funciona una seleccion con dos entradas A5 y A4
Os subo el programa y el ISIS
Mil gracias

#include <16F628.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,MCLR,NOPROTECT,BROWNOUT,NOLVP

static int16 timer_count=0;           // timer1 sobrecarga del contador

byte valor; //valor de seleccion de los dos pines, va del 0 al 3, es decir 4 posibilidades

#INT_EXT       
void ext_isr()   
   {
   timer_count=0;         //resetea el contador del timer1
   }

#int_timer1                       //Esta funcion es llamada cada vez que
void timer_isr() {                     //timer1 sobrepasa (2^16).
    timer_count++;
    }

void main() {
   setup_timer_1( T1_INTERNAL | T1_DIV_BY_8 );  //inicializa timer1
   enable_interrupts(INT_TIMER1);  //activa la interrupcion de timer1
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
   ext_int_edge(H_TO_L);           //inicializa la interrupcion por cambio de estado de B0, Activa a nivel bajo
   enable_interrupts(INT_EXT);     //activa la interrupcion externa de B0
   enable_interrupts(GLOBAL);

   #use fast_io (A)
   #use fast_io (B)
 
 

loop:
{
      valor =(input(PIN_A4))+(input(PIN_A5)*2);
      switch(valor)
      {
      case 0:
      {
      output_high(PIN_B0);
      output_low(PIN_B1);
      output_low(PIN_B2);
      output_low(PIN_B3);
      }
      break;
      case 1:
      {
      {
      output_high(PIN_B1);
      output_low(PIN_B0);
      output_low(PIN_B2);
      output_low(PIN_B3);
      }
      }
      break;
      case 2:
      {
     
      output_high(PIN_B2);
      output_low(PIN_B0);
      output_low(PIN_B1);
      output_low(PIN_B3);
            }
      break;
      case 3:
      {
      {
      output_high(PIN_B3);
      output_low(PIN_B0);
      output_low(PIN_B1);
      output_low(PIN_B2);
      }
      break;
      }
      }     
      }
goto loop;    //bucle de vuelta, espera a que se requiera una interrupcion
}
Título: Re: A ver una ayuda con algo tonto
Publicado por: AngelGris en 18 de Julio de 2011, 13:55:11
  Hola Algec.
 
  Casi seguro tu problema es debido a que con los fuses estás activando la función MCLR y justamente dicha función utiliza el PIN RA5, así que no vas a poder usar dicho pin como I/O. O deshabilitas MCLR o utilizas otro pin para tu programa.
Título: Re: A ver una ayuda con algo tonto
Publicado por: Algec en 18 de Julio de 2011, 15:20:19
Pues si, seguro, no me habia dado cuenta.
Para que es el MCLR?, no tengo ni idea, pero es que la base la cogi de un programa hecho ya.
Título: Re: A ver una ayuda con algo tonto
Publicado por: AngelGris en 18 de Julio de 2011, 15:24:43
  Son las siglas de MasterClear y es para poder resetear al micro externamente. En el datasheet vas a poder encontrar buena información.
Título: Re: A ver una ayuda con algo tonto
Publicado por: Algec en 18 de Julio de 2011, 15:34:58
Pues deberia ser eso, pero no, no funciona al menos en la simulacion. TE subo un pequeño ISis mas simple y claro para testearlo, con 4 leds que sacan salida en funcion de el valor que toman los dos pines A4 Y A5
Título: Re: A ver una ayuda con algo tonto
Publicado por: BrunoF en 18 de Julio de 2011, 16:00:03
Si utilizas fast_io deberías definir la configuración I/O de los puertos. Caso contrario seguramente no se configurarán como lo necesitás, Probá eliminando primero las líneas de fast_io y, si funciona y lo deseas, luego agregalas junto a la configuración que te mencioné recién.

Saludos.
Título: Re: A ver una ayuda con algo tonto
Publicado por: rivale en 18 de Julio de 2011, 16:00:23
subiste el archivo de proteus, pero te falto el .hex o el .cof para poder probarlo
Título: Re: A ver una ayuda con algo tonto
Publicado por: Algec en 18 de Julio de 2011, 16:53:22
A ver ahora
Título: Re: A ver una ayuda con algo tonto
Publicado por: rivale en 18 de Julio de 2011, 17:06:41
cambia tus fuses; ponle:
#fuses HS,NOWDT,NOMCLR,NOPROTECT,BROWNOUT,NOLVP


y tambien quitale la interrupcion por pin b0, ya que lo estas usadno para prender un led, no como entrada
Título: Re: A ver una ayuda con algo tonto
Publicado por: Algec en 19 de Julio de 2011, 04:09:29
Efectivamente ahora si, Pense que solo tenia que quitar el MCLR , no sabia que habia que poner El NOMCLR.
Lo de la interrupcion es que quedo del programa origen,
Mil gracias de nuevo