TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado 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.
-
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
#use delay(internal=20M)
por
#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.
-
¿Se debe configurar el puerto como entrada/salida digital (ADCON1)?
-
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.
-
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.