Falla mi pic16f84a, falla su programa o el programador, nose

Disculpen pero tengo un pequeño problema al programar un pic 16f84a, no se si me faltaran algunas instrucciones que van al inicio, lo del resto del programa esta bien, algun detalle que se me haya escapado, con eso prendere unos leds, simulando que enciendo un motor, pero ni siquiera en la subrutina de descanso se prenden los leds que se deberian prender por eso digo que el problema es yo creo en la asignacion de puertos de salida y entrada... si necesitan alguna información extra se las respondo enseguida, tambien no se si puedan pasarme un pequeño programa de prender solo un led, uno que ya sirva, para vr si el problema es el programador.

Código:
List	p=16f84a

   INCLUDE      <P16F84A.INC> 


__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

timer1		equ	0c
timer2		equ	0d
timer3		equ	0e
motoraa1	equ	porta, 3			;leds
motoraa2	equ	porta, 2
motorab1	equ	porta, 0
motorab2	equ	porta, 1
motorba1	equ	portb, 3
motorba2	equ	portb, 2
motorbb1	equ	portb, 4
motorbb2	equ	portb, 5
motorc1		equ	portb, 6
motorc2		equ	portb, 7
entrada1	equ	portb, 0			;entrada de dos interruptores que
entrada2	equ	portb, 1			;que estan conectados desde +5v
							;y de unas resistencias de 10kohms

org		0x0000
		goto	encendido
org		0x0004
		nop

encendido	
		clrwdt					;limpia el perro guardian
		movlw	b'00000000'
		movwf	intcon
		bcf	STATUS, rp1
		bsf	status, rp0
		movlw	b'00000000'
		movwf	option_reg
		movlw	b'00000000'			;todas son salidas en porta
		movwf	trisa
		movlw	b'00000011'			;solo porta 0 y porta 1 son entradas las demas
		movwf	trisb				;salidas
		bcf	status, rp0
		clrf	porta				;limpia los puertos
		clrf	portb

Principal

menu		call	descansar			;hace una demora
		btfsc	entrada1
		call	marcar_paso
		btfsc	entrada2
		call	girar
		goto	menu

marcar_paso	clrf	entrada1
		clrf	entrada2
		bsf	motoraa1
		bsf	motorab1
		bsf	motorba1
		bsf	motorbb1
		call	tempo
		call	tempo
		call	tempo
		bcf	motoraa1
		bcf	motorab1
		bcf	motorba1
		bcf	motorbb1
ciclo1		bsf	motoraa2
		bsf	motorba2
		call	tempo
		call	tempo
		bcf	motoraa2
		bcf	motorba2
		bsf	motoraa1
		bsf	motorba1
		call	tempo
		call	tempo
		bcf	motoraa1
		bcf	motorba1
		btfsc	entrada2
		goto	continuar1
		bsf	motorab2
		bsf	motorbb2
		call	tempo
		call	tempo
		bcf	motorab2
		bcf	motorbb2
		bsf	motorab1
		bsf	motorbb1
		call	tempo
		call	tempo
		bcf	motorab1
		bcf	motorbb1
		goto	ciclo1
continuar1	clrf 	entrada1
		clrf	entrada2
		call	tempo
		return

girar		clrf	entrada1
		clrf	entrada2
		bsf	motoraa1
		bsf	motorab1
		bsf	motorba1
		bsf	motorbb1
		call	tempo
		call	tempo
		call	tempo
		bcf	motoraa1
		bcf	motorab1
		bcf	motorba1
		bcf	motorbb1
		bsf	motoraa2
		bsf	motorba2
		call	tempo
		call	tempo
		bcf	motoraa2
		bcf	motorba2
		bsf	motorc1
		call	tempo
		bcf	motorc1
ciclo2		bsf	motoraa1
		bsf	motorba1
		call	tempo
		call	tempo
		bcf	motoraa1
		bcf	motorba1
		bsf	motorab2
		bsf	motorbb2
		call	tempo
		call	tempo
		bcf	motorab2
		bcf	motorbb2
		bsf	motorc2
		call	tempo
		call	tempo
		bcf	motorc2
		nop
		nop
		bsf	motorab1
		bsf	motorbb1
		call	tempo
		call	tempo
		bcf	motorab1
		bcf	motorbb1
		btfsc	entrada1
		goto	continuar2
		bsf	motoraa2
		bsf	motorba2
		call	tempo
		call	tempo
		bcf	motoraa2
		bcf	motorba2
		bsf	motorc1
		call	tempo
		call	tempo
		bcf	motorc1
		goto	ciclo2
continuar2	clrf 	entrada1
		clrf	entrada2
		bsf	motorc1
		call	tempo
		bcf	motorc1
		return

descansar	bsf	motoraa2
		bsf	motorab2
		bsf	motorba2
		bsf	motorbb2
		call	tempo
		call	tempo
		call	tempo
		bcf	motoraa2
		bcf	motorab2
		bcf	motorba2
		bcf	motorbb2
		return

tempo		movlw	15
		movwf	timer3
temp1		movlw	20
		movwf	timer2
temp2		movlw	25
		movwf	timer1
temp3		decfsz	timer1
		goto	temp3
		decfsz	timer2
		goto	temp2
		decfsz	timer3
		goto	temp1
		return

END
 
Ya que utilizas CALL, sería que metieras algunos código repetitivos con un archivo a parte.

Deberías poner información a cada línea de códigos y lo mejor un diagrama de flujo.



PD: Bueno, lo de prender un led en España entenderíamos como encender un led, en España es como si entendemos, prender fuego a un led.
 
Que yo sepa el www.pic16f84a.com , el RP1 del 16F84A no se usa.

Ejemplo:

Código:
; ZONA DE CÓDIGOS ********************************************************************

	ORG 	0				; El programa comienza en la dirección 0.
Inicio
	bsf		STATUS,RP0		; Acceso al Banco 1.
	clrf	TRISB			; Las líneas del Puerto B se configuran como salida.
	movlw	b'00011111'		; Las 5 líneas del Puerto A se configuran como entrada.
	movwf	TRISA
	bcf		STATUS,RP0		; Acceso al Banco 0.
 
hola, bueno disculpen, por no poner mas explicaiones en el programa, lo que me interesa es concocer el error del pic, no dispongo de ningun simulador, asi que lo estoy programando ya fisicamente, con el programa ic-prog, y que ya incluye su tabla para programar, en el programa lo que pienso que esta mal es el principio, aqui les dejo el simple diagrama, los leds van a tierra, el cuarzo que utilizo es de 4mhertz, conectado a dos capacitores de 22pf, el reset lo tengo conectado a una resistencia de 1 kohm, agradeceria algun pequeño consejo, me encargare de colocar mas información en cada linea de codigo del pic.

enlace:

http://metroflog.com/artur0oo0xxtreme/20080229/diagrama?pos=20080229

las unicas entradas son la de los microswitches todas las demas son salidas, pero lo curioso es que segun yo el programa deberia empezar prendiendo todos los leds rojos, pero no pasa nada, cuando copio mi programa en el programador me pregunta si deseo intercambiar bits, le pogno si, y cuando reviso el programa no concuerda con el que habia hecho yo al principio, a lo mejor ese es el error pero pues tambien a lo mejor asi deberia pasar.
Como saber si mi pic funciona? se puede probar con algo? tambien me intereso eso de los simuladores, no conosco, no se si se pueda poner el link para bajar alguno.
gracias
 
jeje ok no sabia que eran gratis pero ahora ya se, es que me aviente en un proyecto de hacer un hexapodo que camine por todo terreno, y sin tener conocimiento de nada, como apenas voy en segundo semestre de la universidad no hemos visto nada de electronica puras matematicas, mi meta es hacer este robot, para cuando ya entre a lo que realmente es robotica decir "aaa asi es como se hubiera hecho, o asi es mas facil o es mejor como yo lo hice" gracias por ayudarme, y el nombre no te preocupes vivio en la frontera con EUA y se leer el ingles perfectamente, voy a checar mi programa en el mplab, si funciona bien es el pic que no funciona normal, bueno gracias.
 
Hola, he visto el diagrama de conexion y creo que tienes mal las conexiones de las entradas, RB0 y RB1, creo que tienen que estar siempre a 0 ó 1, en tu caso cuando no esta activado el swich, las entradas estan sin señal.
Por otra parte, yo suelo hacer el programa con un programa llamado Niple, es un programa muy bueno que para programar utiliza diagramas de flujo. Tu dibujas como debe de funcionar el programa y el Niple te genera el codigo en ASM. Puedes bajarte la version de prueba de su web ( www.niplesoft.net/ ). Esta version no te deja dibujar mas de 10 ó 20 bloques , pero lo interesante es que te crea el codigo ASM sin ningun error. Puedes ir haciendo trozos de programa y generar varios ASM y luego copiando y pegando generar uno que sea la suma de los demas.
Luego lo tendria que compilarlo, es decir pasar de ASM a HEX, yo utilizo un programa llamado Proteus, que es un simulador. Dibujas tu circuito, añades tu programa y generas el codigo HEX, y luego lo simulas para ver si funciona como deberia, puedes simularlo paso a paso para ver los posibles fallos de programacion.
Luego por ultimo programar el chip con el Ic-prog.
Haciendolo de esta forma no tienes que tildar ninguna casilla en el Ic-prog ya que al abrir el archivo HEX generado ya tienes las opciones como tienen que estar para que funcione.
Un saludo.
 
Podrias decirme que es lo que planeas hacer? las cosas que quieres que haga tu programa.

aqui te dejo un programa que enciende y apaga un led conectado a ra0 con un intervalo de 1seg casi exacto.

Código:
;---------------------------------------
	list	       p=16f84a
	include	    "p16f84a.inc"
	radix	     hex
	
;---------------------------------------
status	 equ		0x03
porta	  equ		0x05
trisa	   equ		0x05
cont1	 equ		0x0c
cont2	 equ		0x0d

;--------------------------------------
reset	org		0x00
		goto	start	
		org		0x04
;---------------------------------------
start	bsf		status,5
		movlw	b'00000'
		movwf	trisa
		bcf		status,5
;----------------------------------------
led		bsf		porta,0
		call	delay
		bcf		porta,0
		call	delay
		goto	led

;--------------------------------------
delay_0	nop
		nop
		movlw	.248
		movwf	cont1
again	nop
		decfsz	cont1,1
		goto	again
		return
;----------------------------------

delay	movlw	.249
		movwf	cont2
next	nop
		call	delay_0
		call	delay_0
		call	delay_0
		call	delay_0
		decfsz	cont2,1
		goto	next
		call	delay_0
		call	delay_0
		return
;------------------------------------
		end
 

Adjuntos

  • 1segundo_100.asm
    955 bytes · Visitas: 9
gracias por el libro, pero el programa si esta bien, pero no obtengo lectura en la salida del clock, a lo mejor el cuarzo esta dañado o los capacitores de 22 pf tienen algo, los unicos que encontre fueron capacitores ceramicos 22pf 500v creen que el voltaje afecte y si pogno a tierra directamente el cristal de 4mhertz se descomponga el pic?
 
ee no habia leido los dos post de la segunda pagina lo que trato de hacer es primeramente controlar ciertos leds, como por ejmeplo verdes, y que los rojos se mantengan apagados, son en total 10 leds, 5 rojos y 5 verdes, este es solo un programa de prueba ya que mi intensión es eliminar los leds y cmabiralos por las entradas de varios l293d para controlar motores de ahi las etiquetas motoraa1, etc, pero se em hace que es el programador, porque ya localice un circuito para prender un led, y tambien incluye su programa, lo meto, me dice que todo a sido correcto y al momento de conectarlo y verlo funcionar, no hace nada y eso que el programa que encontre es muy sencillo y se ve que el autor tiene mucha experiencia, tambien me di cuenta de que mi programa no esta en ese llamado asm, pero el que encontre si y aun asi no funciona, voy a intentar con el programa que me recomienda airoa airon.. ojala y si funicone.
 
exito, al fin logre encender un led, pero aparte cometi un error, creo, que diferencia hay entre un documento de texto, archivo asm, y uno que este en hex. y aparte como se convierte un porgrama que se hizo en el notepad a el archivo hex, algun convertidor en especial?
 
Guia rapida

• Project > Project Wizard


• Next > Device [selecciona el PIC16f84a]


• -- Archive toolsuite [debe ser MICROCHIP MPASM Toolsuite] ---

asegurate que la ruta del archivo MPAsmwin.exe sea la correcta (o buscalo)



• Dale un nombre al proyecto


• Indica en que directorio lo quieres (o usa browse)


• Next > Next > Finish

En el espacio de trabajo [nombredelproyecto.mcw] cliquea con el boton derecho y agrega el archivo.

Finalmente :


• Project > Build All


si tu archivo no tiene errores debe generar el archivo .hex
 
hola, voy a intentarle con mplab, me ausente poruqe sali fuera de la ciudad, si llega a funcionar inmediatamente cambiare la leds por las entradas de el l293d, bueno gracias a todos me han ayudado mucho, vere que pasa, chaw
 
Atrás
Arriba