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

hola, pues voy a checarlos, porque no me sale el programa, incluso pongo el programa asm de un programa que si logre meter al pic y funciono a la perfección ( ya venia con su programa hex. pero tambien venia con el asm), bueno intente cambiarlo a hex, y me sale que a fallado, si el programa ese esta bien, en mi caso me sale que mi programa tiene errores al abrir el banco 1 o 0 Status,rp0, meti mas programas de otros autores y me sale lo mismo, me dice que chece los bits, y tambien cuando quiero usar un temporizador me dice que no se pueden guardar en la memoria que le e especificado, aqui les dejo mi programa final, lo demas si esta bien.

Código:
   LIST P=16F84

   INCLUDE "P16F84.INC"

   __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

timer1	EQU	0x0C
timer2	EQU	0x0D
timer3	EQU	0x0E

	ORG 0x0000	    	; Al prender el micro viene aca primero. 
	  goto	encendido  	; Primera línea del programa.

	ORG 0x0004		; Ubicación del único vector de interrupción. No usado.
	  nop
; tengo problamas con los bancos pero pues yo los veo correctos
encendido
	BSF	STATUS,RP0 	; Selecciono BANCO 1 .	
	movlw	b'00000000'	; Todos salidas. ( "0" = "Output", "1"= "Input" )
	movwf	TRISA		; TRISA controla comportamiento de PORTA. 
	movlw	b'11000000' 	; Port B: Todas  salidas.
	movwf	TRISB		; Análogo a TRISA.
	BCF	STATUS,RP0	; Vuelvo al BANCO 0 .
	clrf	PORTA		; Arranco poniendo todas las lineas a cero. 
	Clrf	PORTB		; CLRF sirve para poner a 0 un registro.
	goto	menu

menu	
	call	descansar	;hace una demora
	btfsc	PORTB,6
	call	marcar_paso
	nop
	goto	menu

marcar_paso	
	clrf	PORTB                           ;aqui tuve problemas al poner clrf   portb,6
	bsf	PORTA,3                       ;                                                 clrf   portb,7
	bsf	PORTA,0                        ; asi que mejor lo deje como portb
	bsf	PORTB,3
	bsf	PORTB,4
	call	tempo
	call	tempo
	call	tempo
	bcf	PORTA,3
	bcf	PORTA,0
	bcf	PORTB,3
	bcf	PORTB,4
ciclo1	
	bsf	PORTA,2
	bsf	PORTB,2
	call	tempo
	call	tempo
	bcf	PORTA,2
	bcf	PORTB,2
	bsf	PORTA,3
	bsf	PORTB,3
	call	tempo
	call	tempo
	bcf	PORTA,3
	bcf	PORTB,3
	btfsc	PORTB,7
	 goto	 continuar1
	bsf	PORTA,1
	bsf	PORTB,5
	call	tempo
	call	tempo
	bcf	PORTA,1
	bcf	PORTB,5
	bsf	PORTA,0
	bsf	PORTB,4
	call	tempo
	call	tempo
	bcf	PORTA,0
	bcf	PORTB,4
	goto	ciclo1
continuar1	
	clrf	PORTB
	call	tempo
	return

descansar
	bsf	PORTA,2
	bsf	PORTA,1
	bsf	PORTB,2
	bsf	PORTB,5
	call	tempo
	call	tempo
	call	tempo
	bcf	PORTA,2
	bcf	PORTA,1
	bcf	PORTB,2
	bcf	PORTB,5
	return

tempo
	movlw	d'15'                     ;en alguna parte de este temporizador me genera un
	movwf	timer3                   ;error no se porque y no se donde esta
temp1
	movlw	d'15' 
	movwf	timer2
temp2
	movlw	d'15'
	movwf	timer1
temp3
	decfsz	timer1
	 goto	 temp3
	decfsz	timer2
	 goto	 temp2
	decfsz	timer3
	 goto	 temp1
	return

	end
 
bueno te dare unas recomendaciones en base a lo que he visto cuando hago los programas:

Trata de que todo este en minusculas, no uses los nombre exactos de los registros por que te sale eso del bank 0 y 1, en ves de eso escribe la direccion del registro, mmm mas o menos asi

status equ 0x03
portb equ 0x06
porta equ 0x05

y ya luego los utilizas

como
bsf porta,1



ahora alomejor el nombre de timer1 y timer2 es lo que provoca el error intenta cambiarle el nombre por cont1 o contador1 reg1 como sea


personalmente te recomiendo esta rutina de retardo
es la que yo uso

delay _0 movlw .248 ;--- cuando pones el punto es lo mismo que si pones d'248'
movwf cont1
loop_0 nop ;-----248x4 = 992 [( nop=1+decf=1+goto=2)=4] 2
decfsz cont1,1 ;--lo que nos da 992 instrucciones mas
goto loop_0 ;...[call delay = 1 +movlw=1+movwf=1+
nop ;--decfsz=1(cuando salta si es zero) 2nop=2+return=2)=8]
nop ;--esto nos da un total de 1000 instrucciones o 1000us= 1 ms
return

delay_1 movlw .249
movwf cont2 ;se usa el mismo procedimiento,
loop_1 nop ;cada call delay nos da 1001 instrucciones
call delay_0 ; en total nos dan 1000000 ó 1 segundo
call delay_0
call delay_0
call delay_0
decfsz cont2,1
goto loop_1
call delay_0
call delay_0
return


la rutina de delay_0 te da hasta 1 ms de retardo
y la rutina de delay_1 te da hasta 1 segundo de retardo


en la instruccion defsz te puede generar un aviso diciendote que se usa el 1 como default


recuerda que siempre debes especificar que registro vas a modificar y donde lo vas a guardar

ej:

decfsz timer1,1 el 1 significa que lo guardaras en el mismo registro (f=1)
el 0 significa que lo guardaras en el registro de trabajo (w=0)


en la instruccion que dices que tusviste problemas

clrf portb

se debe a que clrf es una instruccion que mane bytes y bcf es para manejar bits

al dar clrf borras todo el registro del portb al dar bcf portb,6 borras solo en bit 6


¿pregunta?
por que pones dos veces bsf porta,3 y bcf porta,3?, si me dices mas o menos que quieres que haga el programa, cuando se prende un led cuando otro, cuanto de retardo etc. etc. etc. , puedo intentar hacer uno y pasartelo

p.d. toda mi experiencia se reduce a mplab y poco menos de un mes usandolo x)


cualquier cosa tu solo di (escribe)
 
una ultima cosa que se me pasaba, en el mplab, si le das doble click al error que te señala, te manda hacia donde esta el error. en la linea exacta :p, ya depende de ti detectarlo y corregirlo.
 
pues acabo de terminar una tarea, y por fin tuve chance de seguirle al proyecto, aqui estan los errores, no e probado aun las instrucciones y modificaciones que me mando Airoa Airon, mañana en cuanto pueda voy a tratar de cambiar el programa, gracias nuevamente, aqui estan

Make: The target "C:\Documents and Settings\Arturo Gallardo\Mis documentos\Archivos de investigacion\Programas\ICPROG\Pictestxxx.o" is out of date.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84A "Pictestxxx.asm" /l"Pictestxxx.lst" /e"Pictestxxx.err"
Message[301] C:\ARCHIVOS DE PROGRAMA\MICROCHIP\MPASM SUITE\P16F84.INC 37 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Message[302] C:\DOCUMENTS AND SETTINGS\ARTURO GALLARDO\MIS DOCUMENTOS\ARCHIVOS DE INVESTIGACION\PROGRAMAS\ICPROG\PICTESTXXX.ASM 26 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\DOCUMENTS AND SETTINGS\ARTURO GALLARDO\MIS DOCUMENTOS\ARCHIVOS DE INVESTIGACION\PROGRAMAS\ICPROG\PICTESTXXX.ASM 28 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[305] C:\DOCUMENTS AND SETTINGS\ARTURO GALLARDO\MIS DOCUMENTOS\ARCHIVOS DE INVESTIGACION\PROGRAMAS\ICPROG\PICTESTXXX.ASM 113 : Using default destination of 1 (file).
Message[305] C:\DOCUMENTS AND SETTINGS\ARTURO GALLARDO\MIS DOCUMENTOS\ARCHIVOS DE INVESTIGACION\PROGRAMAS\ICPROG\PICTESTXXX.ASM 115 : Using default destination of 1 (file).
Message[305] C:\DOCUMENTS AND SETTINGS\ARTURO GALLARDO\MIS DOCUMENTOS\ARCHIVOS DE INVESTIGACION\PROGRAMAS\ICPROG\PICTESTXXX.ASM 117 : Using default destination of 1 (file).
Error[173] C:\DOCUMENTS AND SETTINGS\ARTURO GALLARDO\MIS DOCUMENTOS\ARCHIVOS DE INVESTIGACION\PROGRAMAS\ICPROG\PICTESTXXX.ASM 122 : Source file path exceeds 62 characters (C:\DOCUMENTS AND SETTINGS\ARTURO GALLARDO\MIS DOCUMENTOS\ARCHIVOS DE INVESTIGACION\PROGRAMAS\ICPROG\PICTESTXXX.ASM)
Halting build on first failure as requested.
BUILD FAILED: Thu Mar 06 00:40:39 2008

lo que se me iso raro es de quee marcara como error la carpeta donde esta ubicado mi prigrama el error 173,jeje se pasa. bueno, hasta mañana buenas noches
 
Bueno. El error está explicado en el primer videotutorial que hise.

No podes exederte de los 62 caracteres en ruta. Lo que tenes que hacer es crear el proyecto en una ruta corta, por ejemplo:

c:\archivo de investigación\programas\

Y listo. Va a andar. Es por eso que este error, no te conduce a ninguna línea.
 
Message[302] C:\PROGRAMAS\PICTESTXXX.ASM 29 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\PROGRAMAS\PICTESTXXX.ASM 31 : Register in operand not in bank 0. Ensure that bank bits are correct.

solo me kedan esos dos errores, los status, mi programa consiste en que va a mover 18 motores( un hexapodo), solo lo unico que quiero comprobar es si todos los motores tienen la misma velocidad, primero mi programa empieza subiendo todas las patas, como solo quiero que ponga paso redoblado sin avanzar, movere tres patas al mismo tiempo,esto es aa2, ab2 estan conectados a 6 motores ( 3 patas ) y ba2, bb2 son las otras tres patas, pero el 2 significa que al mandar una señal la pata sera atraida hacia el cuerpo, todos los que son 1 significa que las patas se alejaran del cuerpo, no se si saben como se mueve un hexapodo, como que se apoya en tres patas y sube las otras, bueno como sea, el programa durara 1 seg, para que todas las patas lleguen al tope 0, luego las entradas corresponden a dos microswitch, uno es para paso redoblado sin desplazamiento, el otro es para que el robot gire sobre su propio eje, bien al elegir la entrada 1(paso redoblado), se bajaran las patas aproximandamente 1 seg, osea que las patas no se detendran hasta que pase 1 seg, todas son movidas junto con sus dos grados de libertad, luego se detienen, y tres patas empiezan el retroceso por 2/3 de segundo ya que no quiero que lleguen al tope 0 donde estaban al principio, luego que se detengan, que se active los 1 otra ves y bajen 2/3 de segundo para que queden de nuevo junto a las demas patas, a continuacion, se activaran las otras tres patas que no se han movido, y luego se detendran y bajaran y asi es un ciclo hasta que en entrada 2 aparesca una señal, despues sale de la subrutina pero no se si tenga que haber un retraso para evitar que al presionar entrada 2 se active la subrutina 2, la subrutina 2 es identica a la anterior, solo que aqui se mueven los motores c, estos motores mueven a toda la pata, horizontalmente, para producir desplazamiento, mi programa consiste en que al principio todas las patas estan derechas, bajan, se detienen, lo siguiente es de que va a aber 6 motores, los motores se conectaran inversamente a su simetrico, es decir que un motor girara a un lado, su vecino girara al contrario, el programa levanta tres patas perpendicularmente al piso, bueno ahora los motores c se moveran 1/3 de segundo para mover el cuerpo, como si estuviera girando, despeus se bajan las tres patas y se suben las otras, y ahora giraran 2/3 de segundo, ya que al principio estaban como que a la mitad y por eso gira 1/3, bueno luego se bajan, y asi sucesivamente hasta que aparesca 1 en entrada 1, el programa vuelve a desplazarse solo 1/3 para regresar a la normalidad, el programa regresa al menu y todas las patas regresan a la normalidad, es decir se retraen hacia el cuerpo, pues no se si me explique bien, aqui esta el hexapodo
http://www.metroflog.com/aRtUr0oo0xxTreMe/20080207/hexapodo_con_futuras_tenazas

Las entradas de los controladores de los motores dc las remplace por leds na mas para ver si funcionaban correctamente, , jajaj y tengo pensado meterle 1 pic a cada pata pero ya mas adelante, primero quiero hacer la prueba de la coordinacion de los motores, si hay alguno que vaya mas lento, mas rapido, menos torque etc. O que otra cosa puedo hacer para probar los motores, solo dispongo de un multimetro asi que no podre usar otro instrumento de medicion, pero como les digo ya nada mas me quedaron esos dos errores, los demas ya esta corregido, gracias otra ves a airo airon, y acrca de los videos, estan muy buenos, pero me sigue generando ese error, gracias por su atensión nos vemos
 
Esos no son errores, son Warning, o sea, advertencias. Debes hacerle doble clic al Message y te llevará donde el conflicto. Lo que dice, es que el registro que está utilizando, no se encuentra en el banco 0, y te pide que chequees si es correcto. Si es correcto, déjalo como está. si no, corrígelo (obvio). Estos Message o Warning, no evitan que el compilador te genere el archivo .hex para cargar al micro. Solo los errores son los que no permiten generar los .hex.
 
muchas gracias a todos, mi programa ya quedo convertido en hex, muy pronto hare un video para los que se preguntan pero que queria hacer este tipo, bueno primero lo probare con los leds, y luego se lo instalare a mi hexapodo, y les explicare que era lo que queria que hiciera, pero de nuevo tengo que salir a dar una presentacion, pero pues mañana se hechan una vuelta por este link:


YouTube - Robot hexapodo(estructura)

bueno de nuevo gracias a todos, voy a ver si me sirve con los leds, si no pues ya se convertir a hex. bueno hasta la proxima, chaw

PD. a ya tengo un video del hexapodo pero sin funcionar, no se si alguien lo quiera checar el link esta arriba
 
este disculpen, me di cuenta en la prueba con los leds, que a veces mis interruptores no funcionan adecuadamente, le tengo que presionar un tiempo y ademas varias veces para que me mande a la subrutina, y cuando esta en una subrutina, de pronto regresa al menu principal es decir, regresa al ciclo de descansar, y ademas en la subrutina de descansar, aveces se acelera el parpadeo de los leds, de 1 seg a medio segundo, creen que hubo algun error, o es comun estos, o tambien estuve manipulando el circuito sin conectarme a tierra, creen que a lo mejor hubo una descarga estatica en el pic, y pues no e subido el video del robot ya que me falta construir tres modulos de potencia, mi robot lleva 9 l293d, ya tengo conectados 6 uno en cada pata, pero me faltan los que controlan el movimiento horizontal de las patas, y pues esta ese detalle de que se aceleran los ciclos, weno voy a ver que puedo hacerle, espero su respuesta. gracias
 
Oie disculpa, como se puede quemar un pic, mira esto me paso:
conecte todo como deberia al l293d, puse a funcionar mi pic, y jalo durante 1 segundo,los motores se movieron, pero despues me dic uenta que ya no se movian, pues empece a olaer a quemado, y pense que era el pic, pero me acorde que siempre se calienta el l293d, entonces desconecte el circuito, y volvi a encenderlo despues de un rato, pero el pic ya no funciono, lo probe en el anterior circuito que hice con los leds y ya no prendio, entonces lo cheque en mi icprog, y vi que se le habia borado la memoria, quise programarlo nuevamente, y a continuacion me marco el error 0000 y yo pienso que se me quemo, pense que quisa hubo alguna corriente inducida que regreso al pic, pero me puse a verificar todas las conexiones y soldaduras y parecian estar bien, pero de pronto me di cuenta que hubo una pequeña hebra de un cable, de cuando hice el circuito y solde todo, corte las puntas, bueno esta hebra estaba tocando los 5V y un cable que iva la salida del pic, digo este puerto lo usaba como salida de señal pero entonces recibio por ese segundo 5V directos, creen que haya sido eso o el pic puede que tenido otro problema?
 
Atrás
Arriba