PIC 16F84A y LED intermitente

Hola buenas, tengo un pic 16f84A conectado a un oscilador de 4MHz y 2 condensadores de 27 picofaradios que estan conectados junto con VSS a tierra y en la salida RA2 salida un LED con su resistencia. MCLR\ tiene un R de 4,7Kohm y esta unida +5V junto con VDD.

El problema viene cuando lo enciendo, el LED se queda iluminado todo el tiempo. pongo el programa del pic por si es eso.

Código:
#Include <Pic16f84A.h>

#Fuses XT ,NOWDT ,NOTPROTECT
#Huse delay(clock= 4000000)

#Define LED pin_A2

Void main()

While (1)
{
outoput_high (LED); // Encender LED, estado ALTO de la salida A2.
delay_ms(1000); // Esperar 1 sec.
Outoput_low(LED); //  Apagar LED, estado BAJO de la salida A2.
delay_ms(1000); // Esperar 1 sec.
}

}
Apollo dijo:
Título editado - Reglas generales de uso del foro:
2. Utiliza siempre títulos descriptivos. Evita usar "Hola", "Ayuda por favor", "Urgente", etc.
 
Última edición por un moderador:
Hola....yo tambien tengo duda con eso, el unico detale es que mi led lo tengo en RB7....Yo quiero q mientras haya un cero en RB4 el led empieze a oscilar cada medio segundo...les paso mi programa....Mi problema es que el Led no prende ni apaga para nada!

Código:
;PROGRAMA QUE ENCIENDE UN LED CADA MEDIO SEGUNDO

__CONFIG _CP_OFF& _WDT_OFF& _PWRTE_ON& _XT_OSC

LIST  	   P=16F84A
INCLUDE    P16F84A.INC


			
	UNO_LED		EQU		b'10000000'		
	CERO_LED	EQU		b'00000000' 	
				ORG 0
INICIO
			
			MOVLW	b'11111111'
			MOVF	TRISA; TODOS BITS PTOA DE ENTRADA
			CLRF	TRISB; TODOS BITS PTOB DE SALIDA	

OP_PUSH		BTFSC	PORTA,0
			GOTO	OP_PUSH
LED
			MOVLW	UNO_LED
			MOVWF   PORTB
			CALL 	Retardo_500micros
			MOVLW	CERO_LED
			MOVWF	PORTB
			CALL	Retardo_500micros
			GOTO 	LED

#INCLUDE <RETARDOS.INC>

END
 
Última edición por un moderador:
que mas monomanio y darrenz?

yo creo que el problema de ambos radica en no definir si son o no entradas y salidas los puertos, en el caso de monomanio, lo haces desde el banco 0, cosa que no se puede, tiene que switchear al banco 1 para que tenga efecto... asi:

Código:
					ORG		0

INICIO			BCF		STATUS,RP1
					BSF		STATUS,RP0
					MOVLW	b'11111111'
					MOVF	TRISA			;TODOS BITS PTOA DE ENTRADA
					CLRF	TRISB			;TODOS BITS PTOB DE SALIDA
					BCF		STATUS,RP0

de resto esta bien, para darrenz... bueno, si el programa como lo tienes corre es un milagro... perdona que te lo diga y mi intensión no es regañarlo, pero tiene algunos errores, espero que sea transcribiendolo al foro que cambiaron, el caso es que, tienes que agregarle la funcion set_tris_a(0x00) para que el puerto a quede como salida, y asi asegurar de que funcione, por que de resto el programa esta bien, espero les sirva esta información... cuidensen...
 
Muchas gracias por contestar...ya lo´corregí, ahora el problema es que sigue asiendo lo mismo...es algo realmente raro por que cuando le acerco el dedo al pic el Led se prende asi como si nada.... la verdad no sé que onda con esto...el programa asi esta..
Código:
;PROGRAMA QUE ENCIENDE UN LED CADA MEDIO SEGUNDO

__CONFIG _CP_OFF& _WDT_OFF& _PWRTE_ON& _XT_OSC

LIST  	   P=16F84A
INCLUDE    P16F84A.INC


			
	UNO_LED		EQU		b'10000000'		
	CERO_LED	EQU		b'00000000' 	
				ORG 0
INICIO

			BCF		STATUS,RP1 ; ACCESO AL BANCO CERO
			BSF		STATUS,RP0 ; ACCESO AL BANCO UNO		
			MOVLW	b'11111111'
			MOVF	TRISA; TODOS BITS PTOA DE ENTRADA
			CLRF	TRISB; TODOS BITS PTOB DE SALIDA	
			BCF		STATUS,RP0 ; REGRESAR AL BANCO CERO

OP_PUSH		BTFSS	PORTA,0
			GOTO	OP_PUSH
LED
			MOVLW	UNO_LED
			MOVWF   PORTB
			CALL 	Retardo_500micros
			MOVLW	CERO_LED
			MOVWF	PORTB
			CALL	Retardo_500micros
			GOTO 	LED

#INCLUDE <RETARDOS.INC>

END
 
¿el código quedaría a si o lo he puesto en mal sitio?
Código:
#Include <Pic16f84A.h>

#Fuses XT ,NOWDT ,NOTPROTECT
#Huse delay(clock= 4000000)

#Define LED pin_A2

Void main()

set_tris_a(0x00);

While (1)
{
outoput_high (LED); // Encender LED, estado ALTO de la salida A2.
delay_ms(1000); // Esperar 1 sec.
Outoput_low(LED); // Apagar LED, estado BAJO de la salida A2.
delay_ms(1000); // Esperar 1 sec.
}

}
 
Última edición por un moderador:
que mas monomanio y darrenz?

para el caso de monomanio, veo que el problema no esta en la cuestion del programa (por que a mi me sirve perfectamente) si no en el montaje del circuito, es lo que considero yo, sin embargo, le aconsejo que revise bien las conexiones, no se, un problema de tierra, un problema con el oscilador, o algo, no se, por que es muy raro que prenda al momento de acercar el dedo, luego, hmm no se, bastante raro...

para darrenz, fijate,
Código:
#include <16f84A.h> 

#fuses XT ,NOWDT 
#use delay(clock=4000000) 

#define LED pin_A2 

void main() 
{		//esto hace falta, el corchete de inicio
	set_tris_a(0x00); 

	while (1) 
	{ 
		output_high (LED); // Encender LED, estado ALTO de la salida A2. 
		delay_ms(1000); // Esperar 1 sec. 
		output_low(LED); // Apagar LED, estado BAJO de la salida A2. 
		delay_ms(1000); // Esperar 1 sec. 
	} 
}
asi lo haria yo, de acuerdo? no se si su compilador lo permita pero el mio no me permite mayusculas al principio (de hecho, creo que ningunno), y la funcion es "output..." no "outoput...", de acuerdo, pruebalo, me comentan cualquier cosa...
 
Deberias checar si todos los componentes dan continuidad si lo has hecho en una proto, tambien en mi blog e puesto como hacer eso que pides (un led intermitente) pero esta programado en mikrobasic si te interesa lo puedes ver el blog esta en mi firma saludos
 
Hola

A mi ya me pasó y era por un FUSE, no pongas XT sino HS. Al parecer XT es para velocidades de reloj inferiores a 4 MHz (creo recordar), para 4 MHz o más tienes que usar HS (High Speed).

Suerte
 
hola monomanio, inicialmente para un cristal de 4MHz se puede usar XT y funciona sin problemas.
En cuanto a lo de acercarle el dedo al pic, supongo que tienes un pulsador o algo en el pin 0 del puerto A. recuerda que tienes que hacer un puente a tierra con una resistencia que puede ser de 10K, para que cuando no tengas el pulsador accionado el pic reciba una nivel bajo o 0 voltios. algo asi...
 

Adjuntos

  • 12_104.jpg
    12_104.jpg
    7.6 KB · Visitas: 571
--- Editado por Chico3001 ---

Por favor sigue las normas de participacion de la comunidad:

2.10 Los usuarios deben usar un lenguaje cortés, respetuoso y gentil. Ningún usuario puede publicar material o contenido que sea conocidamente falso, difamatorio, insultante, acusatorio, vulgar, hostil, obsceno, profano, de orientación sexual, amenazante, racista o que fomente cualquier tipo de odio, ilegal en algún país o región, invasivo de la privacidad de alguna persona o que vulnere alguna ley o derechos de autor.
 
Fijate de llamar el retardo asi_
CALL Retardo_500ms

y eso del dedo pasa porque no quemaste bien el PIC

Quema este programa esta hecho en asm prende y apaga

Código:
		LIST	P=P16F84A
 		INCLUDE	 "P16F84A.INC"
			
 		CBLOCK	0X20

		ENDC

		ORG		0X00
		goto 	INICIO
		ORG		0X04

INICIO	
                      ;MOVLW	            0x07
		;MOVWF	CMCON
		BCF		STATUS,6
		BSF		STATUS,5
		MOVLW	B'1111'
		MOVWF	TRISA
		CLRF	TRISB
		BCF		STATUS,5
		BCF		STATUS,6
		CLRF	PORTB



PRENDE
				MOVLW	B'11111111'
				MOVWF	PORTB
				CALL	Retardo_500ms
				CLRF	PORTB
				CALL	Retardo_500ms
				GOTO	PRENDE
				


	
				
					INCLUDE <RETARDOS.INC>
				
					end
 
Última edición:
bunas!! soy nuevo en esto del uso de los pics, por lo que veo uds entienden muy bien de programacion!! les queria preguntar algo qe me esta sucediendo.
El problema es que ago un programa bien choto de prender y apagar un led con un pulsador y me sucede que apenas conecto el pic para probarlo el led se enciende y si toco el pulsador se me apaga; es decir al reves de lo que quiero hacer: les agradesco y me den una mano.
Me parece que mi equivocacion es en el momento de probarlo en el protoboard ya qe de electronica no encaro mucho me parece que me falt agregarle algo a lo pulsadores ouso el pic 16f628a gracias desde ya
 
Mmm... yo tal vez creo que sea el circuito... te importaria poner una imagen o la simulacion de tu circuito para ver el problema... tambien seria de ver el programa por si el problema no radica en el circuito...


Saludos
 
este es el programa qe hice para probar el quemador, esta echo asi no mas


list p=16f628A
__config 0x2150
include <p16f628A.inc>

;declaro variables y ctes

status equ 0x03
porta equ 0x05
trisa equ 0x85
trisb equ 0x86
cmcon equ 0x1f
portb equ 0x06

;comienzo programa

org 0x000
reset
goto inicio

inicio

;seteo_perifericos_puertos

movlw 0x07
movwf cmcon ;desabilito comparadores
bsf status,5 ;cambio de banco
movlw 0xff
movwf trisa
clrf trisb
;termino_seteo

bcf status,5 ;vuelvo a cambiar de banco
movlw 0x00
movwf portb

programa btfsc porta,0
goto prendo
apago bcf portb,0
goto programa
prendo btfss porta,0
goto apago
bsf portb,0
goto programa
end

cuando puse el programa no quedo muy bien ordenado perdon
y al circuito para probarlo conecto directo el trafo al pic, uso los leds con sus resistenciasde + a - y conecto los interruptores a el puerto de entrada sin resistencias ni nada jejej perdon si es una burrada y gracias por contestar
 
Última edición:
pero ese esta echo para el pic 16f628a

aora si para el pic 16f84

list p=16f84a

include <p16f84a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC
;declaro variables y ctes

status equ 0x03
porta equ 0x05
trisa equ 0x85
trisb equ 0x86
cmcon equ 0x1f
portb equ 0x06

;comienzo programa

org 0x000
reset
goto inicio

inicio

;seteo_perifericos_puertos

movlw 0x07
movwf cmcon ;desabilito comparadores
bsf status,5 ;cambio de banco
movlw 0xff
movwf trisa
clrf trisb
;termino_seteo

bcf status,5 ;vuelvo a cambiar de banco
movlw 0x00
movwf portb

programa btfsc porta,0
goto prendo
apago bcf portb,0
goto programa
prendo btfss porta,0
goto apago
bsf portb,0
goto programa
end
 
Última edición:
Atrás
Arriba