# Sustituir PIC16F84 por PIC16A628A



## dayanmata (Feb 15, 2009)

Buenas amigos necesito ayuda para sustituir un pic 16F84 el cual trabajaba controlando una matriz de led pero ahora no consigo este pic el cual se daño y solo consigo el pic 16F628A que cosas debo cambiar en el programa para que sea compatible con el anterior adjunto archivos del programa y circuito.


----------



## mabauti (Feb 15, 2009)

en el de panel mensajes . asm
cambia
	
	



```
LIST			P=16f84A
			INCLUDE			<P16F84A.INC>
```
por:

```
LIST			P=16f628a
			INCLUDE			<P16F628a.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_OFF & _MCLRE_OFF & _LVP_OFF & _XT_OSC
```

ademas, antes de configurar los puertos, deshabilita los comparadores, de esta forma

```
movlw	0x07				;Turn comparators off and
	movwf	CMCON				;enable pins for I/O functions
```

ademas fijate que en el editor MPlab tengas la configuracion del cristal externo XTAL, NO PROTEC

Postea tu avance!


----------



## dayanmata (Feb 15, 2009)

ok amigo gracias ya voy a probar y te digo que tal gracias de resto todo lo demas queda igual verdad?


----------



## pepechip (Feb 16, 2009)

Donde pone *CBLOCK 0x0C* deves de poner *CBLOC	0x20* ya que es en esa posicion donde comienza la memoria de datos.
Como en ese programa no utilizas la eeprom, ya no necesitas ningun cambio mas.


----------



## Manonline (Feb 16, 2009)

buenisimo... comento asi me queda en mis mensajes y cuando llegue a casa lo hago 

salu2!


----------



## dayanmata (Feb 16, 2009)

ok gracias hermano ese detalle era el que me faltaba el de colocar la direccion  0x20


----------



## dayanmata (Feb 16, 2009)

disculpen mi ignorancia  otra pregunta en la directiva ORG 0x00 debo cambiarla Tambien? y en donde inicio el programa la cofiguracion de puertos queda igual en los mismos bancos o hay que cambiar algo mas a parte de desabilitar los comparadores?. Esto lo pregunto porque aunque hice los cambios me sigue sin funcionar bien la matriz unicamente me trabaja la mitad de la matriz la otra mitad no trabaja y el problema esta en software ya que todo el hardware esta operativo 100.


----------



## mabauti (Feb 16, 2009)

> disculpen mi ignorancia otra pregunta en la directiva ORG 0x00 debo cambiarla Tambien?


no es necesario, pero quiza te convenga poner la tabla hasta el fondo del programa



> la cofiguracion de puertos queda igual en los mismos bancos o hay que cambiar algo mas a parte de desabilitar los comparadores?


está correcta no es necesario cambiarla

intenta conectandole una resistencia pull-up de 10k al pin RA4 (entre RA4 y +5V)a , ya que este es de colector abierto

postea tus resultados


----------



## dayanmata (Feb 16, 2009)

ok hermano eres un sabio no sabia que era salida de colector abierto  ok ya resolvi colocando la R de 10 K ahora me trabaja toda la matriz pero no aparecen los caracteres como antes aparecen que no c lee nada sera posible que por las caracteristicas de este pic no quede bien programado con mi programador jdm.


----------



## mabauti (Feb 16, 2009)

no he utilizado el JDM, (haciendo el procedimiento normal con el f628a) no creo que sea ahi el problema, pero  lo que podrias hacer es un programa de prueba sencillo con leds.

te marca errores o warnings el mplab?

recheca las conexiones.
eu capacitores y cristal estas utilizando?

postea el programa actualizado.


----------



## dayanmata (Feb 16, 2009)

todos los componentes estan nuevos el cristal es de 4 Mhz.Ese procedimiento que llamas normal es el de levantar la pata 10 del pic cuando se programa cierto? ok el programa poniendole los cambios queda asi


----------



## mabauti (Feb 16, 2009)

cambia  _MCLRE_OFF   a _MCLRE_ON

ademas el programa MPLab me marca 


```
Error[113]   D:\MIS DOCUMENTOS\PANEL.ASM 449 : Symbol not previously defined (Retardo_1ms)
Error[113]   D:\MIS DOCUMENTOS\PANEL.ASM 450 : Symbol not previously defined (Retardo_500micros)
Error[105]   D:\MIS DOCUMENTOS\PANEL.ASM 459 : Cannot open file (Include File "RETARDOS.INC" not found)
```

te lo marca a ti tambien? o que mas indica el MPLab?


----------



## dayanmata (Feb 17, 2009)

Ok esos errores son porque te falta agregar en la misma carpeta la fila RETARDOS.ASM que puse en la primera pagina de este tema y cambiarle la extension a .INC solo la extension lo que pasa es que la subi como .asm porque el foro no deja subir archivos .inc. Dejame probar a ver con eso de cambiar a on eso que me dices aver y te posteo gracias por acompañarme en esta batalla jajaja.


----------



## kaká_2008 (Feb 17, 2009)

hola amigos tengo un circuito que quiero hacer pero el problema es que no puedo conseguir el pic...
se trata de un 12F629...se lo puede reemplazar por algun 12C... o por algun 16F....?


----------



## dayanmata (Feb 17, 2009)

si se puede sustituir solo que tienes que adaptar las cosas para que trabaje entre otras cosas el programa y los pines de pic para que sean compatibles


----------



## dayanmata (Feb 27, 2009)

hola amigos ya la matriz esta comenzando a tomar forma ya se me ven los caracteres solo que no se porque se me ve solo las tres primeras columnas de cada caracter y las dos ultimas no se ven adjunto como me a quedado el programa despues de los cambios que he hecho, a y otra cosa las 10 primeras columnas de la matriz no aparecen cuando coloco la resistencia de colector abierto en el pin Ra4 y cuando la quito no se me ven la parte de la matriz que controla el integrado V3 y V4. ayuda por favor con este programa.


----------



## mabauti (Feb 27, 2009)

dayan : no has mencionado que errores/warnings te marca el MPLab ;sería bueno que postearas un dibujo muy sencillo de que es lo que te debe aparecer y como te está apareciendo en este momento (si pudieras postear una foto sería mejor) ; estas utilizando el mismo cristal que para el f84?


----------



## dayanmata (Feb 27, 2009)

ok aqui te mando un dibujo de como se ve por ejemplo la H y la T en la matriz y como se deberia ver cuando corro el programa en el mplab veo que me carga los 5 valores completos, el registros que me lleva esta cuenta es el que se llama CONTA_INTERNO el cual se carga con el literal 5 para que cargue los 5 valores de cada caracter  pero cuando grabo el programa al pic siguen sin aparecer estas dos ultimas columnas del caracter. si uso el mismo cristal de 4 Mhz.


----------



## dayanmata (Feb 28, 2009)

ya logro ver los caracteres completos en toda la matriz coloque las etiquetas del programa a partir de la direccion 0x60 en vez de 0x20 ya que cuando hacia el barrido se me solapaba con los el contador llamado CONTA, pero ahora cualquier caracter que coloco me aparece entre dos lineas verticales a que se debera adjunto el programa con los cambios que le hice ahora.


----------



## mabauti (Feb 28, 2009)

has intentado probando, al reducir a la mitad la tabla de caracteres? o ubicandola hasta el final en una memoria que termine en 0?

- EMPIEZA POR ESTO : te falto agregarle las directivas de configuracion

```
LIST         P=16f628a
         INCLUDE         <P16F628a.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC
```

- si bien no creo que afecte, tienes duplicado movlw   0x07,movwf   CMCON    y no veo que utilices CONTA_LETRAS

Por si algun otro usuario pudiera interesarse, aqui esta el codigo


```
;=================================================================================================================
;--DIRECTIVAS DEL PROGRAMA--
;=================================================================================================================
			LIST			P=16f628A
			INCLUDE			<P16F628A.INC>
			
;=================================================================================================================
;--ETIQUETAS DEL PROGRAMA --
;=================================================================================================================
			CBLOCK			0x60
			CONTA
			CONTA_1
			CONTA_2
			CONTA_LETRAS
			LETRA
			NUMERO_LETRAS
			CONTA_INTERNO
			R_ContA				; Contadores para los retardos.
			R_ContB
			R_ContC
			ENDC
;=================================================================================================================
;--CONFIGURAION DE PUERTOS--
;=================================================================================================================
			ORG				0X00
			goto			INICIO
			
TABLA_CARACTERES	
			addwf			PCL,F
			
			RETLW   		3EH ;0
			RETLW   		45H
			RETLW   		49H
			RETLW   		51H
			RETLW   		3EH
		
			RETLW   		11H ;1
			RETLW   		21H
			RETLW   		7FH
			RETLW   		01H
			RETLW   		01H
			
			RETLW   		27H ; 2
			RETLW   		49H
			RETLW   		49H
			RETLW   		49H
			RETLW   		31H
					
			RETLW   		22H ; 3
			RETLW   		49H
			RETLW   		49H
			RETLW   		49H
			RETLW   		36H
					
			RETLW   		78H ; 4
			RETLW   		08H
			RETLW   		08H
			RETLW			08H
			RETLW			7FH
			
			RETLW   		7AH ; 5
			RETLW  			49H
			RETLW   		49H
			RETLW   		49H
			RETLW   		46H 
				
			RETLW   		3EH ; 6
			RETLW   		49H
			RETLW   		49H
			RETLW   		49H
			RETLW   		26H 
			
			RETLW   		40H ; 7
			RETLW   		40H
			RETLW   		4FH
			RETLW   		50H
			RETLW   		60H 
			
			RETLW   		36H ; 8
			RETLW   		49H
			RETLW   		49H
			RETLW   		49H
			RETLW   		36H
			
			RETLW   		32H ; 9
			RETLW   		49H
			RETLW   		49H
			RETLW   		49H
			RETLW   		3EH
			
			RETLW   		00H ; :
			RETLW   		12H
			RETLW   		00H
			RETLW   		00H
			RETLW   		00H
			
			RETLW   		01H ; ;
			RETLW  			0AH
			RETLW   		00H
			RETLW   		00H
			RETLW   		00H
			
			RETLW			0H	; < EQUIVALE A "
			RETLW			70H	
			RETLW			0H
			RETLW			70H
			RETLW			0H	
			
			RETLW   		0AH ; =
			RETLW   		0AH
			RETLW   		0AH
			RETLW   		0AH
			RETLW   		00H
			
			RETLW			0H	; > EQUIVALE A .
			RETLW			1H	
			RETLW			0H
			RETLW			0H
			RETLW			0H
			
			RETLW   		01H ; ? EQUIVALE A ,
			RETLW   		02H
			RETLW   		00H
			RETLW   		00H
			RETLW   		00H	
			
			RETLW			0H	; @ EQUIVALE A ESPACIO
			RETLW			0H	
			RETLW			0H
			RETLW			0H
			RETLW			0H	
			
			RETLW			3FH	; A
			RETLW			48H	
			RETLW			48H
			RETLW			48H
			RETLW			3FH	
			
			RETLW			7FH	; B
			RETLW			49H	
			RETLW			49H
			RETLW			49H
			RETLW			36H	
			
			RETLW			3EH	; C
			RETLW			41H
			RETLW			41H
			RETLW			41H
			RETLW			22H
			
			RETLW			7FH	; D
			RETLW			41H
			RETLW			41H
			RETLW			41H
			RETLW			3EH	
			
			RETLW			7FH	; E
			RETLW			49H
			RETLW			49H
			RETLW			49H
			RETLW			41H	
			
			RETLW			7FH	; F
			RETLW			48H
			RETLW			48H
			RETLW			48H
			RETLW			40H	
			
			RETLW			3EH	; G
			RETLW			41H
			RETLW			49H
			RETLW			49H
			RETLW			26H	
			
			RETLW			7FH	; H
			RETLW			8H
			RETLW			8H
			RETLW			8H
			RETLW			7FH	
			
			RETLW			41H	; I
			RETLW			41H
			RETLW			7FH
			RETLW			41H
			RETLW			41H	
			
			RETLW   		42H ; J
			RETLW   		41H
			RETLW   		7EH
			RETLW   		40H
			RETLW   		40H	
			
			RETLW   		7FH ; K
			RETLW  			08H
			RETLW   		14H
			RETLW   		22H
			RETLW   		41H	
			
			RETLW			7FH	; L
			RETLW			1H
			RETLW			1H
			RETLW			1H
			RETLW			1H	
			
			RETLW			7FH	; M
			RETLW			20H
			RETLW			10H
			RETLW			20H
			RETLW			7FH	
			
			RETLW			7FH	; N
			RETLW			30H
			RETLW			08H
			RETLW			06H
			RETLW			7FH	
			
			RETLW			3EH	; O
			RETLW			41H
			RETLW			41H
			RETLW			41H
			RETLW			3EH	
			
			RETLW			7FH	; P
			RETLW			48H
			RETLW			48H
			RETLW			48H
			RETLW			30H	
			
			RETLW			3EH	; Q
			RETLW			41H
			RETLW			45H
			RETLW			43H
			RETLW			3EH	
			
			RETLW			7FH	; R
			RETLW			48H
			RETLW			4CH
			RETLW			4AH
			RETLW			31H	
			
			RETLW			32H	; S
			RETLW			49H
			RETLW			49H
			RETLW			49H
			RETLW			26H	
			
			RETLW			40H	; T
			RETLW			40H
			RETLW			7FH
			RETLW			40H
			RETLW			40H	
			
			RETLW			7EH	; U
			RETLW			01H
			RETLW			01H
			RETLW			01H
			RETLW			7EH	
			
			RETLW			7CH	; V
			RETLW			02H
			RETLW			01H
			RETLW			02H
			RETLW			7CH	
			
			RETLW			7FH	; W
			RETLW			2H
			RETLW			4H
			RETLW			2H
			RETLW			7FH	
			
			RETLW			63H	; X
			RETLW			14H
			RETLW			8H
			RETLW			14H
			RETLW			63H	
			
			RETLW			60H	; Y
			RETLW			10H
			RETLW			0FH
			RETLW			10H
			RETLW			60H	
			
			RETLW			43H	; Z	
			RETLW			45H
			RETLW			49H
			RETLW			51H
			RETLW			61H	
			
INICIO			;movlw   		0x07            				;Turn comparators off and 
   			;movwf   		CMCON            				;enable pins for I/O function
			bsf			STATUS,RP0					; Seleccion del banco 1
			clrf			PORTA						; Puerto B como salidas
			clrf			PORTB
			bcf			STATUS,RP0					; Banco 0
			clrf			PORTA						; Inicializacion de los
			clrf			PORTB
			
RUTINA			movlw			"A"
			call			CONVERTIR
			movlw			"B"
			call			CONVERTIR
			movlw			"C"
			call			CONVERTIR
			movlw			"D"
			call			CONVERTIR
			movlw			"E"
			call			CONVERTIR
			movlw			"F"
			call			CONVERTIR
			movlw			"G"
			call			CONVERTIR
			movlw			"H"
			call			CONVERTIR
			movlw			"I"
			call			CONVERTIR
			movlw			"J"
			call			CONVERTIR
			movlw			"K"
			call			CONVERTIR
			movlw			"L"
			call			CONVERTIR
			movlw			"M"
			call			CONVERTIR
			movlw			"N"
			call			CONVERTIR
			movlw			"O"
			call			CONVERTIR
			movlw			"P"
			call			CONVERTIR
			movlw			"Q"
			call			CONVERTIR
			movlw			"R"
			call			CONVERTIR
			movlw			"S"
			call			CONVERTIR
			movlw			"T"
			call			CONVERTIR
			movlw			"U"
			call			CONVERTIR
			movlw			"V"
			call			CONVERTIR
			movlw			"W"
			call			CONVERTIR
			movlw			"X"
			call			CONVERTIR
			movlw			"Y"
			call			CONVERTIR
			movlw			"Z"
			call			CONVERTIR
			movlw			"1"
			call			CONVERTIR
			movlw			"2"
			call			CONVERTIR
			movlw			"3"
			call			CONVERTIR
			movlw			"4"
			call			CONVERTIR
			movlw			"5"
			call			CONVERTIR
			movlw			"6"
			call			CONVERTIR
			movlw			"7"
			call			CONVERTIR
			movlw			"8"
			call			CONVERTIR
			movlw			"9"
			call			CONVERTIR
			movlw			"0"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			movlw			"@"
			call			CONVERTIR
			
			goto			RUTINA

CONVERTIR		incf			CONTA_LETRAS,F
			movwf			LETRA					;Letra contiene el codigo ascci del caracter a grabar
			movlw			d'48'					;Se resta para obtener la posicion del caracter
			subwf			LETRA,F
			movf			LETRA,W
			clrf			CONTA_2					;Este contador direcciona el inicio de barrido en la tabla de datos
			movwf			CONTA_1					;Ayuda a direccionar a CONTA_2 

PREGUNTAR		movf			CONTA_1,F	
			btfss			STATUS,Z
			goto			NO_CERO
			goto			SI_CERO
NO_CERO			decf			CONTA_1,F
			movlw			d'5'
			addwf			CONTA_2,F
			goto			PREGUNTAR

SI_CERO			movlw			0x40					;Da la direccion de la memoria no visble en el panel,
			movwf			FSR					;desde la cual se grabaran los datos del caracter
			movlw			d'5'
			movwf			CONTA_INTERNO
LLAMAR			movf			CONTA_2,W
			call			TABLA_CARACTERES		;Rutina que accesa los datos de los caracteres

CARGAR_DATOS		movwf			INDF					;Carga datos en direccion 0x40 y de ahi en adelante
			incf			FSR,F					;En total carga todos los datos de un caracter
			incf			CONTA_2,F			
			decfsz			CONTA_INTERNO,F
			goto			LLAMAR
			;call			DEZPLAZAR_32			;Si terminó, Llama a rutina dezplazar para la visualizacion de los datos dezplazandose
			;return

DEZPLAZAR_32		movlw			d'6'
			movwf			CONTA
DEZPLAZAR		movlw			0x20					;Esta rutina en general dezplaza una posicion todas
			movwf			FSR						;las columnas existentes en el panel, hacia la izquierda.
OTRA_VEZ		movf			INDF,W					; y luego llama a rutina barrido hasta que se barra los 
			decf			FSR,F					; 6 datos de cada caracterm, ahi es cuando retorna a
			movwf			INDF					; buscar el siguiente dato para almacenarlo
			incf			FSR,F
			incf			FSR,F
			movlw			0x46
			xorwf			FSR,W
			btfss			STATUS,Z
			goto			OTRA_VEZ
			call			BARRIDO
			decfsz			CONTA,F
			goto			DEZPLAZAR
			return

BARRIDO			movlw   0x07            					;Turn comparators off and 
   			movwf   CMCON            					;enable pins for I/O function
			clrf			PORTA
			movlw			0x20				;Barre el Panel,hasta llegar a la ultima columna								
			movwf			FSR
INCREMENTAR		movf			INDF,W
			movwf			PORTB
			call			Retardo_2ms				;VELOCIDAD DE DESPLAZAMIENTO
			call			Retardo_5micros			;PARPADEO
			clrf			PORTB
			incf			PORTA,F
			;call			Retardo_2s
			incf			FSR,F
			btfss			FSR,6
			goto			INCREMENTAR
			return
			
			INCLUDE			<RETARDOS.INC>

			END
```


----------



## dayanmata (Feb 28, 2009)

Ok amigo mabauti gracias por tu colaboracion y por estar atento a mis preguntas ya resolvi el problema de porque me aparecia esa raya en la parte donde llamo a la rutina desplazar_32 en lugar de cargar el literal 6 era cargar literal 5, ya tengo la matriz 100 % funcionando con el pic 16F628A porcia hay algun usuario interezado les dejo el codigo final .asm y el achivo .inc con los retardos anexo circuito y archivo leeme donde aparecen los valores de todos los componentes a y por ultimo recuerden colocar la R de 10 K en RA4 que es salida de colector abierto "  por fin mi matriz funciona  " a el mensaje que puse para que mostrara la matriz es personal lo pueden cambiar por cualquiera que deseen suerte y de nuevo gracias por tu atensión  mabauti. suerte y disfrutenla.


----------



## Patico21 (Abr 4, 2009)

Hola a todos talvez peque de metido se que no es el tema pero por lo que veo dominan el pic 16F628 no entiendo bien si el codigo que se utiliza para el pic 16F84 sirve para el pic 16F628A necesito hacer un de un motor a pasos con un pic y el que he conseguido es el pic 16F628A que debo hacer


----------



## mabauti (Abr 4, 2009)

si es posible utilizarlo haciendo ligeros cambios; leete el tema , por alli se indica que cambios se deben hacer.


----------



## Patico21 (Abr 4, 2009)

sera que si te muestro el codigo me hechas una mano en eso por favor


----------



## Patico21 (Abr 4, 2009)

pero estoy queriendo utilizar un pic 16F628A


----------



## mabauti (Abr 4, 2009)

el codigo funciona al 100% con el f84? si es asi postealo


----------



## Patico21 (Abr 5, 2009)

hola amigo este es el codigo que tengo para el pic 16F84 seria posible que me ayudes para poder pasarlo a el pic 16F628A el archivo retardos es solo una libreria de tiempos no te la incluyo porque no suben los archivos .inc tambien a ver que puedes hacer para ayudarme lo simule no me da error pero la logica no estoy muy seguro
el objetivo del programa es que con un pulsante le de el inicio RA0 y dependiendo del estado de RA4 gira horaria o antiorariamnete...por favor si no es mucho pedir para que me ayudes en eso para poder grabarlo en el pic 16F628A. A la libreria de tiempos la he hecho un .txt


----------



## mabauti (Abr 5, 2009)

las modificaciones son pocas


```
;suppress bank selection messages

	list      p=16f628A            ; list directive to define processor
	#include <p16f628A.inc>        ; processor specific variable definitions
	ERRORLEVEL	0,	-302			;suppress bank selection messages
	
  __CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC	

	cblock 	0x20 	;start of general purpose registers
	ENDC
#DEFINE EntradaMarcha	PORTA,0
#DEFINE EntradaSentido	PORTA,4

	ORG	0
	
	movlw	0x07				;Turn comparators off and
	movwf	CMCON				;enable pins for I/O functions
	
Inicio
	bsf		STATUS,RP0
	bsf 	EntradaMarcha
	bsf 	EntradaSentido
	clrf 	PORTB
	bcf		STATUS,RP0
Principal
	btfss	EntradaMarcha
	goto	Gira
	clrf	PORTB
	goto	Fin
Gira	btfsc	EntradaSentido
		goto	A_Izquierda
		call	GiroDerecha
		goto	Fin
A_Izquierda
		call	GiroIzquierda
Fin		goto	Principal

;Subrutina"GiroIzquierda"

GiroIzquierda
		movlw	b'00110101'
		call	ActivaSalida
		movlw	b'00110110'
		call	ActivaSalida
		movlw	b'00111010'
		call	ActivaSalida
		movlw	b'00111001'
		call	ActivaSalida
		return

;Subrutina"GiroDerecha"		

GiroDerecha
		movlw	b'00111001'
		call	ActivaSalida
		movlw	b'00111010'
		call	ActivaSalida
		movlw	b'00110110'
		call	ActivaSalida
		movlw	b'00110101'
		call	ActivaSalida
		return

;Subrutina"ActivaSalida"

ActivaSalida

		movwf	PORTB
		call	Retardo_10ms
		return	
		
		INCLUDE<RETARDOS.INC>
		END
```

postea el resultado


----------



## Patico21 (Abr 5, 2009)

muchas gracias por la respuesta tan pronta dejame le cambio y coloco el resultado


----------



## Tomasito (Abr 5, 2009)

Alguno me podría ayudar a pasar de un pic10F202 a un pic12C508 o pic12F239?

Supongo que no debe ser muy dificil, son de la misma familia (aunque unos empiecen en 10 y otros en 12).
El ASM está acá: https://www.forosdeelectronica.com/about31991.html

Gracias!


----------



## Patico21 (May 4, 2009)

hola disculpen como me debo dar cuenta que cambios debo hacer de un pic 16F84 o 16F84A a un pic 16F628A tengo una gran duda porque lo que hace el amigo con su matriz de leds hace unos cambios esos cambios son genricos con eso quiero decir que si hago esos cambios puedo implementar cualquier codigo del 16F84 y poderlo hacer a un 16F628A....les agradeceria mucho que me respondan


----------



## mabauti (May 4, 2009)

leete el tema , por ahi viene como hacerlo; no es tan complicado.

tambien te recomiendo que te descargues la hoja de datos para mas información.


----------



## Patico21 (May 5, 2009)

si mas o menos me ubico como hacerlo pero la verdad soy nuevo en lo de los pics y me gustaria aprender como hacerlo....me han mencionado eso de utilizar la hoja de datos pero la verdad no se como hacerlo que debo buscar que debo comparar no se..si me podriaas dar la pauta...talvez son preguntas tontas pero trato de auto educarme en lo de los microcontroladores por necesidad porque necesite para el proyecto que me ayudaste a pasar del pic 16F84 al 16F628A por el cual te agradezco muchisimo y te comento que con los cambios que le hiciste me queda 100 funcional...pero el otro semestre ya me toca esa materia y no quiero entrar perdido y este tema me gusta mucho...si me pudieras guiar un poco mas te lo agradeceria..por cierto en estos dias pondre el resultado de mi trabajo no lo he hecho porque he estado en examenes y el tiempo no me ha dado disculpas mabauti ...muchas gracias por todo y estar tan al pendiente y responder tan rapido


----------



## mabauti (May 5, 2009)

> esos cambios son genricos con eso quiero decir que si hago esos cambios puedo implementar cualquier codigo del 16F84 y poderlo hacer a un 16F628A....les


si , si lo puedes hacer ; hay que ver que cambios de hardware tiene el 628a con respecto al 84a y hacer lo correspondiente con el software.



> pero el otro semestre ya me toca esa materia y no quiero entrar perdido y este tema me gusta mucho.


si quieres avanzar, te recomendaria que compres el libro http://www.pic16f84a.org/ ; es bueno para principiantes e intermedios trae muchos ejemplos y ejercicios, desde luego si tienes dudas postealas

Suerte!


----------



## fernandoae (May 5, 2009)

Para que comprar si se lo puede bajar de la red GRATIS. Si no lo pueden encontrar avisen y se los busco yo...


----------



## harleytronics (May 6, 2009)

hola ,son muy pocos los cambios del 84 al 628
el primero y logico incluir la libreria del pic que sea
y el segundo y mas importante para que te quede como el 84
es desacitvar los compardores ,ya que el 628 los trae,,,   en el banco 0 tenes que poner asi
   MOVLW  0X07      
   MOVWF CMCON       ;DESACTIVO COMPARADORES
ahi ya te queda igualito al 84
tambien  despues tenes la opcion para usar el oscilador interno,y te ahorras de poner el cristal
cualquier cosa avisa,,,saludos


----------



## Patico21 (May 6, 2009)

muchas gracias hare la prueba con los cambios que menciona harleytronics y les comento....si la verdad que me han dicho que es un buen libro como para comenzar lo voy a tratar de buscar o comprar para practicar mucho mas sobre los microcontroladores...gracias cualquier duda estare molestandolos saludos a todos....ahhhhh si el pana que ofrece buscar el libro lo hace que por favor se postee el link


----------



## Patico21 (May 8, 2009)

hola a todos aqui molestando alguien me puede ayudar explicandome que significa esa linea del codigo la verdad busque información pero solo me dice que es para el grabador la verdad que no entiendo 

__CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC


----------



## harleytronics (May 8, 2009)

CONFIG _CP_OFF = codiggo de programa protejido -apagado
WDT_OFF = watchdog- apagado (esto es para que el pic no se tilde en algun bucle infinito)
_BOREN_OFF=reinicializacion por caida de tension -apagado
_PWRTE_ON=temporizacion al encendido -encendido (esto le da tiempo al pic para que se alimente bien))
MCLRE_OFF =circuito de reinicializacion-apagado
_XT_OSC = oscilador en baja frecuencia
_LVP_OFF=programacion en bajo voltaje-apagado  (se usa en las notbooks)
todo esto lo podes progrmar en el asm o sino directamente del programa quemador como el winpic800
yo lo hago desde el winpic se me hace mas comodo
 igualmente es importante que estudies bien de que se trata cada punto mencionado para que uses tu pic de la mejor manera
en internet hay mucha ifo sobre esto y si ya tenes algun llibro o tutorial de pic seguro que tambien esta,,
cualquier cosa avisa ,,saludos


----------



## Patico21 (May 8, 2009)

muchisimas gracias amigo voy a ponerle cabeza para estudiar eso pero ya me queda claro un poco mas de lo que se trata muchisimas gracias y por la respuesta tan rapida eres un gran pana como decimos en mi pais. y te tomo la palabra he de estar molestando mucho espero no se cansen de apoyar al que no sabe ya que me tocan hacer unos programillas en el pic 16F877A y mas o menos ya estoy buscando información. gracias nuevamente


----------



## Patico21 (May 21, 2009)

hola amigo este es un codigo que quiero pasarlo a el 16F628A es de un 16F84A he tratado de colocar los cambios que me facilitaste pero no se si esta bien puedes ayudarme a corregir eso por favor y me puedes explicar porque se pone el errorlevel no me queda claro



```
LIST	P=16f628A
	INCLUDE<P16f628A.INC>
	ERRORLEVEL	0,	-302	
                movlw 0X07 
                movwf CMCON
	__CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC	

	CBLOCK 0x20
	velocidad
	ENDC
	#DEFINE EntradaSentido	PORTA,4

	ORG 0

Inicio
	bsf 	STATUS,RP0
	movlw	b'00011111'
	movwf	PORTA
	clrf	PORTB
	bcf 	STATUS,RP0
Principal
	movf	PORTA,W
	andlw	b'00001111'
	btfsc	STATUS,Z
	goto	ParaMotor
	call	SeleccionaVelocidad
	movwf	Velocidad
	btfsc	EntradaSentido
	goto	A_Izquierda
	call	GiroDerecha
	goto	Fin
A_Izquierda
	call	GiroIzquierda
	goto	Fin
ParaMotor
	clrf	PORTB
Fin	goto	Principal

SelecccionaVelocidad
	addwf	PCL,F
	DT		0,d'75',d'70',d'65',d'60',d'55',d'50',d'45',d'40'
	DT		,d'35',d'30',d'25',d'20',d'15',d'10',d'5'

GiroIzquierda

	movlw	b'00110101'
	call	ActivaSalida
	movlw	b'00110110'
	call	ActivaSalida
	movlw	b'00111010'
	call	ActivaSalida
	movlw	b'00111001'
	call	ActivaSalida
	return

GiroDerecha
		movlw	b'00111001'
		call	ActivaSalida
		movlw	b'00111010'
		call	ActivaSalida
		movlw	b'00110110'
		call	ActivaSalida
		movlw	b'00110101'
		call	ActivaSalida
		return

		CBLOCK
		Contador
		ENDC
		
ActivaSalida

		movwf	PORTB
		movf	Velocidad,W
		movwf	Contador
Retardo

		call	Retardo_1ms
		decfsz	Contador,F
		goto	Retardo
		return
		
		INCLUDE<RETARDOS.INC>
		END
```


----------



## mabauti (May 21, 2009)

el errorlevel -302 es para que no te ponga warnings debido a la instruccion tris

fuera de eso, que errores te marca?


----------



## harleytronics (May 21, 2009)

movlw 0X07
movwf CMCON  ,esto lo tenes que poner debajao de la linea org pero antes tenes que seleccionar el banco 0


org
goto inicio

BCF  STATUS,5          ;PASO AL BANCO 0
movlw 0X07
movwf CMCON  

Los comentarios tienen que seguir despues de ; punto y coma ejemplo asi:
;SelecccionaVelocidad     si no te marca error asi que arregla todos los comentarios
 hace eso y despues vemos que falta


----------



## Patico21 (May 22, 2009)

muchas gracias por su respuesta mabauti y harleytronics voy a hacer lo que me dices y posteo que resultados me dio a por cierto no entiendo a que comentarios te refieres no he utilizado comentarios todas son subrrutinas bueno eso es lo que yo entinedo que son como dice el libro con el que estoy tratando de aprender a progrmar los micros.


----------



## harleytronics (May 22, 2009)

los comentarios son aquellos que se ponen al costado de una instruccion para explicar el programa 
por ejemplo  
bcf status,rpo  ;pasamos al banco 0

si lo que estan en tu programa no son comentarios entonces no les pongas  ;
pero a velocidad ,endc,cbclock tenes que definirles un registro  como hiciste entradasentido
por ejemplo #define velocidad  0x28 entendes ?
sino tu programa no va a saber en donde guardar w cuando se lo ordenes


----------



## Patico21 (May 22, 2009)

hola muchas gracias por responder mira el codigo del libro dice:

__config_cp_off&_wdt_off&_pwrte_on&_xt_osc

list   p=16f84a
incluide<p16f84a.inc>

cblock  0x0C
velocidad
endc

#define EntradaSentido


de ahi sigue todo igual a lo que coloque anteriormente solamente esa parte es la que no entiendo para poder pasarla a el 16f628a si tu me dijiste que solamete debo implemenatar esos cambios para que quede igualito al 16f84a como deberian ir para el programa que te mostre anteriormente....muchas gracias ojala me puedas ayudar con esto estoy con un mar de preguntas


----------



## harleytronics (May 23, 2009)

fijate  ahi si te anda, copia y pega ,saludos



```
LIST   P=16f628A
   INCLUDE<P16f628A.INC>
   
              
    __CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC    

   CBLOCK 0x20
   Velocidad
   ENDC
   #DEFINE EntradaSentido   PORTA,4

   ORG 0

Inicio
   bsf    STATUS,RP0

   movlw  0X07
   movwf  CMCON
   movlw   b'00011111'
   movwf   PORTA
   clrf   PORTB
   bcf    STATUS,RP0 

Principal
   movf   PORTA,W
   andlw   b'00001111'
   btfsc   STATUS,Z
   goto   ParaMotor
   call   SeleccionaVelocidad
   movwf   Velocidad
   btfsc   EntradaSentido
   goto   A_Izquierda
   call   GiroDerecha
   goto   Fin
A_Izquierda

   call   GiroIzquierda
   goto   Fin
ParaMotor

   clrf   PORTB
Fin   goto   Principal
SeleccionaVelocidad
   addwf   PCL,F
   DT      0,d'75',d'70',d'65',d'60',d'55',d'50',d'45',d'40'
   DT      ,d'35',d'30',d'25',d'20',d'15',d'10',d'5'

GiroIzquierda

   movlw   b'00110101'
   call   ActivaSalida
   movlw   b'00110110'
   call   ActivaSalida
   movlw   b'00111010'
   call   ActivaSalida
   movlw   b'00111001'
   call   ActivaSalida
   return

GiroDerecha
      movlw   b'00111001'
      call   ActivaSalida
      movlw   b'00111010'
      call   ActivaSalida
      movlw   b'00110110'
      call   ActivaSalida
      movlw   b'00110101'
      call   ActivaSalida
      return

      CBLOCK
      Contador
      ENDC
      
ActivaSalida

      movwf   PORTB
      movf   Velocidad,W
      movwf   Contador
Retardo

      call   Retardo_1ms
      decfsz   Contador,F
      goto   Retardo
      return
   
Retardo_1ms 

    movlw  .145
   movwf 0x39
a nop
  nop
  nop
  nop

          DECFSZ 0x39
          GOTO  a

      END
```


----------



## Patico21 (May 23, 2009)

hola muchas gracisa por la ayuda mira complile el programa para poder grabarlo en el micro me dio esta lista y esos errores....pero aun asi me genereo el .hex lo grabe en el micro y no hace nada de nada el micro se queda en nada lo probe en el circuito donde estaba grabado el otro programa estoy seguro que el montaje no esta mal puedo descartar eso la verdad no se que es lo que pasa me puedes hechar una manito con eso por favor

Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\motor velocidad\vmotor.mcs".
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F628A "vmotor.asm" /l"vmotor.lst" /e"vmotor.err"
Warning[205] C:\MOTOR VELOCIDAD\VMOTOR.ASM 1 : Found directive in column 1. (LIST)
Message[305] C:\MOTOR VELOCIDAD\VMOTOR.ASM 96 : Using default destination of 1 (file).
Loaded C:\motor velocidad\vmotor.COD.
BUILD SUCCEEDED: Sat May 23 17:36:35 2009


----------



## mabauti (May 23, 2009)

> Message[305] C:\MOTOR VELOCIDAD\VMOTOR.ASM 96 : Using default destination of 1 (file). [q/uote]asegurate que esta opcion sea la que necesitas
> 
> te funciona bien el grabador?
> 
> postea el circuito tambien.


----------



## Patico21 (May 23, 2009)

hola mabauti no se a lo que te refieres con que me asegure que necesito me puedes explicar por favor y si de eso estoy seguro porque en el mismo micro le estoy grabando el programa de mas arriba que me ayudaste a cambiar y lo grabo y me da respuesta en el micro ya armado y todo y solo grabo la progrmacion nueva y lo pongo y nada no anda no se como adjuntarte el diagrama porque como lo estoy poniendo rebasa la capacidad


----------



## mabauti (May 23, 2009)

bien, entonces se asume que el programador está OK




> DECFSZ 0x39


Este te convendria manejarlo como una memoria , por ejemp. contador_A. 

algo asi


```
DECFSZ  contador_A, F
```




> no se como adjuntarte el diagrama porque como lo estoy poniendo rebasa la capacidad


cambialo a formato gif o subelo a tinypic


----------



## harleytronics (May 23, 2009)

A ver  fijate ahora  ,,copia y pega

 LIST   P=16f628A
   INCLUDE<P16f628A.INC>
   ERRORLEVEL   0,   -302   
                movlw 0X07
                movwf CMCON
   __CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC   

   CBLOCK 0x20
   velocidad
   ENDC
   #DEFINE EntradaSentido   PORTA,4

   ORG 0
Inicio
   bsf    STATUS,RP0
   movlw   b'00011111'
   movwf   TRISA
   clrf   TRISB
   bcf    STATUS,RP0 
   movlw   0X07
   movwf   CMCON 
Principal
   movf   PORTA,W
   andlw   b'00001111'
   btfsc   STATUS,Z
   goto   ParaMotor
   call   SeleccionaVelocidad
   movwf   Velocidad
   btfsc   EntradaSentido
   goto   A_Izquierda
   call   GiroDerecha
   goto   Fin
A_Izquierda
   call   GiroIzquierda
   goto   Fin
ParaMotor
   clrf   PORTB
Fin   goto   Principal

SelecccionaVelocidad
   addwf   PCL,F
   DT      0,d'75',d'70',d'65',d'60',d'55',d'50',d'45',d'40'
   DT      ,d'35',d'30',d'25',d'20',d'15',d'10',d'5'

GiroIzquierda

   movlw   b'00110101'
   call   ActivaSalida
   movlw   b'00110110'
   call   ActivaSalida
   movlw   b'00111010'
   call   ActivaSalida
   movlw   b'00111001'
   call   ActivaSalida
   return

GiroDerecha
      movlw   b'00111001'
      call   ActivaSalida
      movlw   b'00111010'
      call   ActivaSalida
      movlw   b'00110110'
      call   ActivaSalida
      movlw   b'00110101'
      call   ActivaSalida
      return

      CBLOCK
      Contador
      ENDC

ActivaSalida

      movwf   PORTB
      movf   Velocidad,W
      movwf   Contador
Retardo

      call   Retardo_1ms
      decfsz   Contador,F
      goto   Retardo
      return


----------



## Patico21 (May 24, 2009)

hola amigo gracia por la ayuda mira compile el programita que me dices y estos son los errores que me dio

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F628A "prueba1.asm" /l"prueba1.lst" /e"prueba1.err"
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 1 : Found directive in column 1. (LIST)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 2 : Found directive in column 1. (INCLUDE)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 3 : Found directive in column 1. (ERRORLEVEL)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 4 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 5 : Found opcode in column 1. (movwf)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 6 : Found directive in column 1. (__CONFIG)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 8 : Found directive in column 1. (CBLOCK)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 10 : Found directive in column 1. (ENDC)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 13 : Found directive in column 1. (ORG)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 15 : Found opcode in column 1. (bsf)
Error[118]   C:\PRUEBA1\PRUEBA1.ASM 15 : Overwriting previous address contents (0000)
Error[118]   C:\PRUEBA1\PRUEBA1.ASM 15 : Overwriting previous address contents (0000)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 16 : Found opcode in column 1. (movlw)
Error[118]   C:\PRUEBA1\PRUEBA1.ASM 16 : Overwriting previous address contents (0001)
Error[118]   C:\PRUEBA1\PRUEBA1.ASM 16 : Overwriting previous address contents (0001)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 17 : Found opcode in column 1. (movwf)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 18 : Found opcode in column 1. (clrf)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 19 : Found opcode in column 1. (bcf)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 20 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 21 : Found opcode in column 1. (movwf)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 23 : Found opcode in column 1. (movf)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 24 : Found opcode in column 1. (andlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 25 : Found opcode in column 1. (btfsc)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 26 : Found opcode in column 1. (goto)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 27 : Found opcode in column 1. (call)
Error[113]   C:\PRUEBA1\PRUEBA1.ASM 27 : Symbol not previously defined (SeleccionaVelocidad)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 28 : Found opcode in column 1. (movwf)
Error[113]   C:\PRUEBA1\PRUEBA1.ASM 28 : Symbol not previously defined (Velocidad)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 29 : Found opcode in column 1. (btfsc)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 30 : Found opcode in column 1. (goto)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 31 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 32 : Found opcode in column 1. (goto)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 34 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 35 : Found opcode in column 1. (goto)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 37 : Found opcode in column 1. (clrf)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 41 : Found opcode in column 1. (addwf)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 42 : Found directive in column 1. (DT)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 43 : Found directive in column 1. (DT)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 47 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 48 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 49 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 50 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 51 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 52 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 53 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 54 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 55 : Found opcode in column 1. (return)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 58 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 59 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 60 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 61 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 62 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 63 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 64 : Found opcode in column 1. (movlw)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 65 : Found opcode in column 1. (call)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 66 : Found opcode in column 1. (return)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 68 : Found directive in column 1. (CBLOCK)
Warning[205] C:\PRUEBA1\PRUEBA1.ASM 70 : Found directive in column 1. (ENDC)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 74 : Found opcode in column 1. (movwf)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 75 : Found opcode in column 1. (movf)
Error[113]   C:\PRUEBA1\PRUEBA1.ASM 75 : Symbol not previously defined (Velocidad)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 76 : Found opcode in column 1. (movwf)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 79 : Found opcode in column 1. (call)
Error[113]   C:\PRUEBA1\PRUEBA1.ASM 79 : Symbol not previously defined (Retardo_1ms)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 80 : Found opcode in column 1. (decfsz)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 81 : Found opcode in column 1. (goto)
Warning[203] C:\PRUEBA1\PRUEBA1.ASM 82 : Found opcode in column 1. (return)
Error[129]   C:\PRUEBA1\PRUEBA1.ASM 83 : Expected (END)
Halting build on first failure as requested.
BUILD FAILED: Sun May 24 12:03:41 2009


----------



## Patico21 (May 24, 2009)

soy un bobaso disculpame no acomode bien el codigo y me dio es bola de errores debio ser por eso porque despues de acomodarlo bien osea con espacios y eso me dio menos errores y tambien habia que cambiar velocidad que esta todo en mayusculas por Velocidad pero me siguen dando estos errores y esos si no se como hacerlo

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F628A "prueba1.asm" /l"prueba1.lst" /e"prueba1.err"
Error[118]   C:\PRUEBA1\PRUEBA1.ASM 15 : Overwriting previous address contents (0000)
Error[118]   C:\PRUEBA1\PRUEBA1.ASM 15 : Overwriting previous address contents (0000)
Error[118]   C:\PRUEBA1\PRUEBA1.ASM 16 : Overwriting previous address contents (0001)
Error[118]   C:\PRUEBA1\PRUEBA1.ASM 16 : Overwriting previous address contents (0001)
Error[113]   C:\PRUEBA1\PRUEBA1.ASM 79 : Symbol not previously defined (Retardo_1ms)
Error[129]   C:\PRUEBA1\PRUEBA1.ASM 83 : Expected (END)
Halting build on first failure as requested.
BUILD FAILED: Sun May 24 12:16:46 2009


----------



## mabauti (May 24, 2009)

se tenian dos errores; en esta te faltaria la subrutina Retardo_1ms


```
LIST P=16f628A
 INCLUDE<P16f628A.INC>
 ERRORLEVEL 0, -302
 
 __CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC

 CBLOCK 0x20
  Velocidad
  Contador
 ENDC
 #DEFINE EntradaSentido PORTA,4

 ORG 0
Inicio

 movlw 0X07
 movwf CMCON

 bsf STATUS,RP0
 movlw b'00011111'
 movwf TRISA
 clrf TRISB
 bcf STATUS,RP0
 movlw 0X07
 movwf CMCON

Principal
 movf PORTA,W
 andlw b'00001111'
 btfsc STATUS,Z
 goto ParaMotor
 call SeleccionaVelocidad
 movwf Velocidad
 btfsc EntradaSentido
 goto A_Izquierda
 call GiroDerecha
 goto Fin
A_Izquierda
 call GiroIzquierda
 goto Fin
ParaMotor
 clrf PORTB
Fin goto Principal

SeleccionaVelocidad
 addwf PCL,F
 DT 0,d'75',d'70',d'65',d'60',d'55',d'50',d'45',d'40'
 DT ,d'35',d'30',d'25',d'20',d'15',d'10',d'5'
 return

GiroIzquierda
  movlw b'00110101'
  call ActivaSalida
  movlw b'00110110'
  call ActivaSalida
  movlw b'00111010'
  call ActivaSalida
  movlw b'00111001'
  call ActivaSalida
 return

GiroDerecha
  movlw b'00111001'
  call ActivaSalida
  movlw b'00111010'
  call ActivaSalida
  movlw b'00110110'
  call ActivaSalida
  movlw b'00110101'
  call ActivaSalida
 return

ActivaSalida

 movwf PORTB
 movf Velocidad,W
 movwf Contador
Retardo

 ; call Retardo_1ms
 decfsz Contador,F
 goto Retardo
 return

 END
```


----------



## harleytronics (May 24, 2009)

Bueno amigo ,copia y pega denuevo ,fijate que te quede acomodado bien 
esto ya esta libre de errores ,,salvo que tu programa no concuerde con tu hard ,ahi va denuevo



       LIST   P=16f628A
       INCLUDE<P16f628A.INC>


        __CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC   

       CBLOCK 0x20
Velocidad
       ENDC
       #DEFINE EntradaSentido   PORTA,4

       ORG 0


Inicio
       bsf    STATUS,RP0


       movlw   b'00011111'
       movwf   TRISA
       clrf   TRISB
       bcf    STATUS,RP0
       movlw  0X07
       movwf  CMCON
Principal
       movf   PORTA,W
       andlw   b'00001111'
       btfsc   STATUS,Z
       goto   ParaMotor
       call   SeleccionaVelocidad
       movwf   Velocidad
       btfsc   EntradaSentido
       goto   A_Izquierda
       call   GiroDerecha
       goto   Fin
A_Izquierda

       call   GiroIzquierda
       goto   Fin
ParaMotor

       clrf   PORTB
Fin   goto   Principal
SeleccionaVelocidad
       addwf   PCL,F
       DT      0,d'75',d'70',d'65',d'60',d'55',d'50',d'45',d'40'
       DT      ,d'35',d'30',d'25',d'20',d'15',d'10',d'5'

GiroIzquierda

       movlw   b'00110101'
       call   ActivaSalida
       movlw   b'00110110'
       call   ActivaSalida
       movlw   b'00111010'
       call   ActivaSalida
       movlw   b'00111001'
       call   ActivaSalida
       return

GiroDerecha
          movlw   b'00111001'
          call   ActivaSalida
          movlw   b'00111010'
          call   ActivaSalida
          movlw   b'00110110'
          call   ActivaSalida
          movlw   b'00110101'
          call   ActivaSalida
          return

          CBLOCK
          Contador
          ENDC

ActivaSalida

          movwf   PORTB
          movf   Velocidad,W
          movwf   Contador
Retardo

          call   Retardo_1ms
          decfsz   Contador,F
          goto   Retardo
          return

Retardo_1ms

        movlw  .145
       movwf 0x39
a nop
   nop
   nop
   nop

      DECFSZ 0x39
              GOTO  a

          END


----------



## Patico21 (May 24, 2009)

Hola amigo disculpa y gracias por el acolite mira ahora se me queda prendido las entradas no se si sera porque el tiempo que hay que esperar es muy largo o no se pero igual espere la bola y nada que cambiaba este es el circuito que estoy implementando el ic que estan conectados los leds es un L293D como es un driver a pasos y tambien las resistencias del inicio todas van puenteadas a 5 voltios. en mi librito dice que hay como manipular la tabla para dar diferentes retardos me podrian ayudar como para ver si se le hace mas rapido y darme cuenta si esta bien la programcion. muchas gracias por la ayuda


----------



## harleytronics (May 24, 2009)

analizando el programa ,entiendo que para que se detenga el motor ,en este caso se apaguen los led
tenes que tener los bits 0,1,2,3 del puerto A en 0v y eso lo tenes que hacer vos a mano ocon el circuito que quieras 
con el bit 4 segun si esta +5v  o -5v cambias el giro  osea qu los leds si no desconectas las resistencias  van estar siempre prendidos   entendes?

la tabla la manejas encendiendo las resistencias de distintas formas ,,asi se van formando distintos numeros 
binarios que son los que van a retornar de la tabla
a ojo humano no vas a distinguir si se apagan o prenden los leds,,asi que por lo pronto tu 628
esta funcionando ok,,te queda probar con un paso a paso chiquito para ver si tu circuito funciona
lo qes 628 esta ok
y si no ponele leds a las salida del puerto b y ahi vas  a ver como esta funcionando,,suerte


----------



## Patico21 (May 24, 2009)

hola de nuevo gracias por eso...mira el circuito que puese anteriormente ya lo arme y lo estoy probando ahi el circuito y tienes razon hice lo que me mencionas le di cero a todo y todos los led se apagaron y le di un uno a rb3 y se me prendieron y despues de 5 minutos cambio asi fui probando con los demas y pasaba la bola de tiempo y nada que se movian segun yo el bit menos significativo es rao le di uno a ese y tampoco se movian creo que el progrma lo hace muy lento al cambio bueno es lo que mi tonta cabeza se imagina la tabla se podria mejorar para que sea un poco menor el tiempo para cambien los leds a y otra preguntita en el programita de la pagina 2 en el que no vincula la velocidad como lo hago para que la acrivacion de las salidas sea mas rapido he modificado el tiempo pero la reapuesta ya armando mi circuito es la misma que tendria que hacer? y de nuevo gracias eres un grande para esto de los micros


----------



## harleytronics (May 24, 2009)

hace una cosa por creo que estas confundiendote,,desconecta el buffer y en la salida del pic ponele led
asi te vas a dar cuenta de como trabaja,,anda activando distintas resistencias y vas a poder ver los cambios
por que desde el bufer no te vas a dar cuenta con leds hasta que pongas un motor de verdad,,
ese programa es para arrancar el motor frenarlo y darle giro ,y lo unico que vas a ver desde el buffer son leds
prendidos o apagados 

hacelo que te digo y despues me contas ,,,


----------



## Patico21 (May 24, 2009)

de seguro no te comente pero el L293D no lo tengo conectado ya estoy conectado a la salida del puerto los 6 leds y sucede lo que yo te cuento pasa muchisimo tiempo para percibir un cambio en las salidas y si he ido activando las resistencias una a una y no cambio se espera un monton para ver un cambio eso es lo que hice y te comento que pasa algo de 5 minutos para poder ver el cambio es decir que se prenda un led y se encienda otro diferente


----------



## harleytronics (May 24, 2009)

ahh  bien ,, entonces algo pasa  carga este nuevo programa para ver si el problema esta en la tabla
vas a tener que ver cambios cada 50 milesimas si ves que te cuesta distinguir  en donde dice .50 ponele 
.255     


```
LIST   P=16f628A
       INCLUDE<P16f628A.INC>
       
                 
        __CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC   

       CBLOCK 0x20
Velocidad
       ENDC
       #DEFINE EntradaSentido   PORTA,4

       ORG 0

    
Inicio
       bsf    STATUS,RP0

       
       movlw   b'00011111'
       movwf   TRISA
       clrf   TRISB
       bcf    STATUS,RP0
       movlw  0X07
       movwf  CMCON
Principal
       movf   PORTA,W
       andlw   b'00001111'
       btfss   STATUS,Z
       goto   ParaMotor
       movlw   .50
       movwf   Velocidad
       btfsc   EntradaSentido
       goto   A_Izquierda
       call   GiroDerecha
       goto   Fin
A_Izquierda

       call   GiroIzquierda
       goto   Fin
ParaMotor

       clrf   PORTB
Fin   goto   Principal
SeleccionaVelocidad
       addwf   PCL,F
       DT      0,d'75',d'70',d'65',d'60',d'55',d'50',d'45',d'40'
       DT      ,d'35',d'30',d'25',d'20',d'15',d'10',d'5'

GiroIzquierda

       movlw   b'00110101'
       call   ActivaSalida
       movlw   b'00110110'
       call   ActivaSalida
       movlw   b'00111010'
       call   ActivaSalida
       movlw   b'00111001'
       call   ActivaSalida
       return

GiroDerecha
          movlw   b'00111001'
          call   ActivaSalida
          movlw   b'00111010'
          call   ActivaSalida
          movlw   b'00110110'
          call   ActivaSalida
          movlw   b'00110101'
          call   ActivaSalida
          return

          CBLOCK
          Contador
          ENDC
         
ActivaSalida

          movwf   PORTB
          movf   Velocidad,W
          movwf   Contador
Retardo

          call   Retardo_1ms
          decfsz   Contador,F
          goto   Retardo
          return
       
Retardo_1ms

        movlw  .145
       movwf 0x39
a nop
   nop
   nop
   nop

      DECFSZ 0x39
              GOTO  a

          END
```


----------



## Patico21 (May 26, 2009)

hola amigo gracias por la respuesta disculpa por la tardanza pero he estado a full con mis deberes y la verdad me esta preocupando mucho esto pense implementarlo para un proyectito de la u y se me acorta cada vez mas el tiempo pero bueno he probado el programita que me das mira si pongo todas las entradas a cero se me encienden todas las entradas si alguna de las entradas la paso a 1 logico se me apagan todas la entradas y por las dudas lo estoy probando directamente a las salidas del micro ademas hice el cambio de tiempo que me mencionas y me da el mismo resultado....mira quiero agradecer la gran paciencia que me haz tenido y valoro mucho el acolite con los que no sabemos mucho eres un tipazo muchas gracias por todo y ojala no te canses de hecharme una mano con esto


----------



## Patico21 (May 26, 2009)

a me olivide de mencinarte que al poner a cero y se me prenden todas las entradas pero no hay ningun cambio en las salidas del micro es decir se mantiene simpre en el estado que se iniciaron


----------



## harleytronics (May 26, 2009)

con respecto a los cambios en las salidas estuve pensando y no vas a ver ninguno
ya que a la velocidad que van ni te vas a dar cuenta cuando se apagan ,,, ni  en las aslida del pic ni en el buffer lo que podes hacer para sacarte la duda es meter un retardo falso para solo ver,que andan
pero para usar con los pap no te va a servir,, aca te dejo el programa con el retardo falso para que puedas ver si anda bien el programa,,, si te funciona bien avisame y te dejo terminado el programa listo para usar


       LIST   P=16f628A
       INCLUDE<P16f628A.INC>


        __CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC   

       CBLOCK 0x20
Velocidad
       ENDC
       #DEFINE EntradaSentido   PORTA,4

       ORG 0


Inicio
       bsf    STATUS,RP0


       movlw   b'00011111'
       movwf   TRISA
       clrf   TRISB
       bcf    STATUS,RP0
       movlw  0X07
       movwf  CMCON
Principal
       movf   PORTA,W
       andlw   b'00001111'
       btfsc   STATUS,Z
       goto   ParaMotor
       call   SeleccionaVelocidad
       movwf   Velocidad
       btfsc   EntradaSentido
       goto   A_Izquierda
       call   GiroDerecha
       goto   Fin
A_Izquierda

       call   GiroIzquierda
       goto   Fin
ParaMotor

       clrf   PORTB
Fin   goto   Principal
SeleccionaVelocidad
       addwf   PCL,F
       DT      0,d'75',d'70',d'65',d'60',d'55',d'50',d'45',d'40'
       DT      ,d'35',d'30',d'25',d'20',d'15',d'10',d'5'

GiroIzquierda

       movlw   b'00110101'
       call   ActivaSalida
       movlw   b'00110110'
       call   ActivaSalida
       movlw   b'00111010'
       call   ActivaSalida
       movlw   b'00111001'
       call   ActivaSalida
       goto Fin

GiroDerecha
          movlw   b'00111001'
          call   ActivaSalida
          movlw   b'00111010'
          call   ActivaSalida
          movlw   b'00110110'
          call   ActivaSalida
          movlw   b'00110101'
          call   ActivaSalida
          return

ActivaSalida
          CBLOCK
          Contador
          ENDC



          movwf   PORTB
          movf   Velocidad,W
          movwf   Contador
Retardo

          call   Retardo_1ms
          decfsz   Contador,F
          goto   Retardo
          return

Retardo_1ms  ;retardo de prueba
  movlw  .200
       movwf 0x38
         movlw  .200
      movwf 0x39
a nop
   nop
   nop
   nop
   nop
  nop
  nop
  nop
  nop
 nop
 nop
nop
 nop
 nop
 nop
 nop
 nop
      DECFSZ 0x39
              GOTO  a


 DECFSZ 0x38
              GOTO  a

       return

        END


----------



## Patico21 (May 28, 2009)

hola amigo dusculpa el tiempo gracias por el acolite la verdad te cuento que ahorita le probe al micro y se mira muy bien como van cambiando los leds de las entradas y se aprecia a buen tiempo pero queria preguntarte si la lo puedo conectar con el L293D....mi preguntita es seria posible darle menos intervalo de tiempo al cambio entre salidas para tener un poco mas de velocidad con mi motor a pasos muchas gracias por todo


----------



## harleytronics (May 28, 2009)

pero si hombre ese que te deje ultimo era para que pudieras ver como funciona, por que si nonunca te ibas a dar cuaenta de los intervalos ya que a esa velocidad el ojo humano no lo puede ver ,,,ahora si ya te sacaste la duda te paso el programa final  pero acoerdate que ya no vas a poder ver los cambios por que va a ir a mucha velocidad ,,ok?
bueno una vez que pongas el nuevo programa la velocidad se la vas dando con las distintas combinaciones de
resistencias ya que van formando distintos numeros binarios qyue interactuan con la tabla ,,saludos

LIST P=16f628A
INCLUDE<P16f628A.INC>


__CONFIG _CP_OFF & _WDT_OFF & _BOREN_OFF & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF & _XT_OSC

CBLOCK 0x20
Velocidad
ENDC
#DEFINE EntradaSentido PORTA,4

ORG 0


Inicio
bsf STATUS,RP0


movlw b'00011111'
movwf TRISA
clrf TRISB
bcf STATUS,RP0
movlw 0X07
movwf CMCON
Principal
movf PORTA,W
andlw b'00001111'
btfsc STATUS,Z
goto ParaMotor
call SeleccionaVelocidad
movwf Velocidad
btfsc EntradaSentido
goto A_Izquierda
call GiroDerecha
goto Fin
A_Izquierda

call GiroIzquierda
goto Fin
ParaMotor

clrf PORTB
Fin goto Principal
SeleccionaVelocidad
addwf PCL,F
DT 0,d'75',d'70',d'65',d'60',d'55',d'50',d'45',d'40'
DT ,d'35',d'30',d'25',d'20',d'15',d'10',d'5'

GiroIzquierda

movlw b'00110101'
call ActivaSalida
movlw b'00110110'
call ActivaSalida
movlw b'00111010'
call ActivaSalida
movlw b'00111001'
call ActivaSalida
goto Fin

GiroDerecha
movlw b'00111001'
call ActivaSalida
movlw b'00111010'
call ActivaSalida
movlw b'00110110'
call ActivaSalida
movlw b'00110101'
call ActivaSalida
return

ActivaSalida
CBLOCK
Contador
ENDC



movwf PORTB
movf Velocidad,W
movwf Contador
Retardo

call Retardo_1ms
decfsz Contador,F
goto Retardo
  return


Retardo_1ms

        movlw  .145
       movwf 0x39
a nop
   nop
   nop
   nop

      DECFSZ 0x39
              GOTO  a
   return
END


----------



## Patico21 (May 28, 2009)

listo amigo gracias te lo agradezco mucho lo pruebo hoy despues de salir de la u y te aviso


----------



## Patico21 (May 28, 2009)

chuta loco lo prove al micro y quedo excelente me responde a las distinas combinaciones que le doy con el dip switch ya te lo dije antes eres un genio la verdad gracias por el acolite espero no te hayas cansado de acolitarme y espero no haber sido demasiado canson te lo agradezco muchote voy a deber mi pase de nivel gracias


----------



## harleytronics (May 28, 2009)

cuanto me alegra  haberte podido ayudar,,saludos


----------



## Patico21 (May 28, 2009)

chuta loco no sabes cuanto y cada vez me va gustando mas este mundo de los microcontroladores espero algun ratito ser un capo como tu pero para eso me toca estudiar un monton le voy a probar con el L293D y posteo todos mis resultados y ojala unas fottitos


----------



## harleytronics (May 30, 2009)

buenisimo,va a ser bastante util,subi todo lo que puedas,saludos


----------



## Patico21 (Jun 1, 2009)

hola amigo disculpa por querer abusar de tu gran colaboracion pero me pasaron un librito del 16f628A y me llamo la atensión un proyecto que menciona ahi es con un lcd es un frecunecimetro segun dice ahi te lee los pulsos que te genera un 555 pero hojeandolo un poco me parece que esta incompleto esta hecho en pic basic pro te posteo el codigo para que lo veas y me de tu opinion y si puedes me expliques un poquito si no es mucha molestia ya que me haz ayudado mucho y no quiero ser abusivo

cmcon=7
ledred var portb.2
ledver var portb.1
puls var word

prog:

count portb.0,1000,puls
lcdout $fe,1
lcdout $fe,$82,"frecuencia"
lcdout $fe,$c5,dec puls, "hz"

if puls>120 then alarmah
if puls<100 then alarmal
low ledred:low ledver

goto prog

alarmah: high ledred
               low ledver
goto prog

alarmal: high ledver
              low ledver
goto prog


digo que esta incompleto como segun me haz ensenado en el otro lenguaje hay que iniciar al micro y otras cositas mas en este no por eso preguntaba y de no ser asi y esta completo puedo hacer este codiguito para probar con este lcd a por sierto que es un 2x16 y ver como funciona.....muchas gracias por tu tiempo si te molestas en responder


----------



## harleytronics (Jun 2, 2009)

hola ,esta incompleto,noto que faltan las equivalecias y otras cositas  ,,de todos modos ,,no programo en pic basic,, solo en essambler ,, si encontras algo en ese lenguaje ,,no hay problema en ayudarte,,,saludos


----------



## Patico21 (Jun 2, 2009)

lo sospeche se me hacia raro el codigo....muchas gracias por la ayudita en mi libro hay algo sobre LCD lo voy a leer y cualquier cosita te molestare si no lo entiendo


----------



## Patico21 (Jun 2, 2009)

hola amigo disculpa que te moleste ahora si paso de abusivo tengo que tratar de hacer ese frecuencimetro para que me lea o los cuente a los pulsos de un tren de pulsos que genere con un 555 el micro en el LCD me tiene que mostrar la frecuencia a la que van esos pulsos y cuando yo varie tambien varie el mensaje en el LCD  puedes hecharme una mano en eso se que es abusar pero si puedes hecharme una mano te lo agradeceria mucho la verdad eres al unico que se le puede molestar y eres acolite ojala te puedas dar un tiempito para acolitar un poco si no tranquilo tu ya haz hecho la bola de cosas por ayudarme....disculpame si soy descarado pero la verdad que la necesidad es apremiante muchas gracias de antemano


----------



## harleytronics (Jun 3, 2009)

tiene que ser en lcd? no puede ser por display ? detodos modos vas a tener que tener pasiencia por que
no tengo mucho tiempo, y un programita de esos lo necesita,,
sino anda armandolo y lo vamos revisando,,
si tenes pasiencia lo voy haciendo de apoco ,pero no te prometo ningun plazo ok?

saludos


----------



## rapfael50 (Jun 17, 2009)

hola que tal voy a sustituir un pic16f84a por un pic16f628a es un programa de logica simple en donde solo utilizo retardos mi pregunta es como utilizar el oscilador interno en el pic16f628a y solo retiro el externo del pic16f84a.


----------



## mabauti (Jun 17, 2009)

uitlizas algo parecido a:

__CONFIG _CP_OFF & _WDT_ON & _BOREN_OFF & _PWRTE_OFF & _MCLRE_OFF & _LVP_OFF & _INTOSC_OSC_NOCLKOUT

en la hoja de datos viene mas información


----------



## Patico21 (Jul 17, 2009)

hola amigos aqui volviendo a los tiempos para poder seguir aprendiendo si hay como...les comento que mi proyecto ya lo presente pero toda la información la tengo super desordenada demen un poco de tiempo les incluyo todo lo que tengo si es posible hasta unos videos de lo que he logrado consegui hacer un pequenito carrito sigue lineas


----------



## atricio (Sep 30, 2009)

hola amigos una posible ayuda como hago un contador en assembler que se refleje en un display de 7 segmentos en el pic 16F877A se que no es del tema pero no encontre otro hilo parecido y por no crear uno nuevo para una cosa tan puntual no pense necesario me podrian hechar una mano por favor...muchas gracia


----------

