TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: quantic_stroker en 02 de Agosto de 2014, 19:20:48

Título: Problemas para encender un LED con PIC 16F819
Publicado por: quantic_stroker en 02 de Agosto de 2014, 19:20:48
Hola que tal, soy nuevo en el mundo de los PICS.

El problema es que trato de encender un led y que apague con un delay, es mi primer programa pero sólo se queda encendido.
Nunca se apaga.

Uso lo siguiente:

Compiler: PCW (PIC C COMPILER)
Tarjeta: PIC MASTER
Porgrama para bajar el programa: Programador Pic Master.

Mi programa es el siguiente:

#include <LED1.h>

//#include <16f819.h>  //Librería de PIC


//----------------------Declaración de Fuses---------------------------//
#fuses INTRC_IO   //Internal RC Osc, no CLKOUT

#fuses NOWDT  // No Watch Dog Timer
#fuses PUT  // Power Up Timer
#fuses NOMCLR   //Master Clear pin used for I/O
#fuses NOBROWNOUT //  No brownout reset
#fuses NOLVP  // No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#fuses NOCPD  // No EE protection
#fuses NOWRT  // Program memory not write protected
#fuses NODEBUG  // No Debug mode for ICD
#fuses NOPROTECT  // Code not protected from reading

#use delay (internal=20M) //Función para uso de retardos (Poner siempre)

// Declaración de registros, tu le das el nombre y lo igualas a la dirección que
//le corresponde en la memoria. Viene en la datasheet, pag 11
#Byte PORTA=0x05
#Byte TRISA=0x85

#Bit  Led=PORTA.1 //El LED será el pin A0 Le das un nombre a tu salida y la igualas al bit que corresponde
// Es para facilitar que cambies los pines sin tener que modificar tu código, observa
// como lo uso abajo.


void main (void)
{

   TRISA&= 0b11111101;  //PIN A0 es salida (ponemos 0) Si fuera entrada pondríamos 1, uso máscara.
   
   while (1)
   {
      Led=1; //Hacemos que el led cambie de estado
      delay_ms(1000); //Esperamos un segundo
     
      Led=0; //Hacemos que el led cambie de estado
      delay_ms(500);
   }
}


Lo de fuses me lo paso un amigo.


¿Tienen idea de que pueda suceder con mi circuito?

Saludos.
Título: Re: Problemas para encender un LED con PIC 16F819
Publicado por: thegame en 05 de Agosto de 2014, 12:02:49
Supongo que en "LED1.H" esta el mapeo deo PIC, o en su defecto un #include<16f819.h>, o no???

Las direcciones de los puertos son correctas???

Porque no pruebas sustituir la linea del
Código: [Seleccionar]
#use delay(internal=20M)
por

Código: [Seleccionar]
#use delay(clock=20Mhz)
he usado muchos pics con el oscilador interno habilitado y para serte sincero (que tal ves este mal mi practica, pero funciona jeje), no coloco lo de "internal", lo pongo como te digo.

Saludos.
Título: Re: Problemas para encender un LED con PIC 16F819
Publicado por: DominusDRR en 18 de Septiembre de 2014, 12:09:27
¿Se debe configurar el puerto como entrada/salida digital (ADCON1)?
Título: Re: Problemas para encender un LED con PIC 16F819
Publicado por: thegame en 19 de Septiembre de 2014, 11:49:59
Pues lo recomendable y correcto es eso, desactivar el canal analógico en caso de haberlo, y dejarlo con la función de I/O digital, pero en varias ocasiones he usado pines con canales analógicos y me han funcionado sin desactivarlos, como I/O digital, debe ser por el compilador y la función usada para activar o desactivar el pin.
Título: Re: Problemas para encender un LED con PIC 16F819
Publicado por: DominusDRR en 19 de Septiembre de 2014, 11:53:56
Ya no he trabajado con PICC desde hace muchos años, pero recuerdo que al revisar el ensamblador generado, por defecto configura como I/Os a los puertos. (ADCON1). No sé si siga esa filosofía en las nuevas versiones de PICC.