# PIC 18F2550 ¿Quemado?



## Skazi (Oct 6, 2010)

Que tal este es mi primer post y espeor estar mucho tiempo en este foro.

hice un programador "casero" para programar el  PIC mencionado

esta es la imagen del programador







y ya que lo programe con PICPgm Programmer

me dispuse a hacer esto






al momento de probarlo no funciono..entonces pense que no estaba bien programado me dispuse a ponerlo de nuevo al programador y la PC me reconoce el programador pero no el PIC me sale una ventana en el programa diciendo que no hay PIC

entonces queria saber si lo pude haber quemado o que puedo hacer para checar continuidad para saber si sigue vivo el PIC

Gracias de antemano


----------



## Chico3001 (Oct 7, 2010)

Desafortunadamente la unica manera de probar si un microcontrolador esta vivo es cargarle un programa de prueba en algun programador que sepas que funciona...


----------



## Skazi (Oct 7, 2010)

tu eres de mexico df igual que yo, tu tienes algun programador y llevarte mi PIC para saber si funciona


----------



## Chico3001 (Oct 8, 2010)

Desafortunadamente la serie PIC nunca me gusto.... los programadores que tengo son para micros ATMEL, Texas, Freescale o Altera

Lo que te podria recomendar es que intentes en AG Electronica, me parece que alli tienen servicio de programacion de micros, o normalmente en las universidades cuentan con programadores para PIC


----------



## antiworldx (Oct 9, 2010)

Es que para empezar, estas haciendo las cosas mal... o es USB o es Serial.

El unico programador que conozco que solo usa un transistor y diodos con resistencias es para AVR, y lo tengo funcionando.

En tu caso, revise el pic prog y no se parece en nada a lo que tu describes

este es el usb





y este es el serial





entonces... tu problema no es el pic quemado, tu problema es que ese circuito que describes... que es? no es nada! 

Mejor sigue el diagrama que te mostre sacado de
http://members.aon.at/electronics/pic/picpgm/hardware.html

hay que leer todo antes de pegar piezas.


----------



## d4n13l4 (Oct 9, 2010)

Hola
yo estoy en una situacion similar con un 16f877a
tengo un programador que compre asi que no puede ser ese mi problema, le cargue un programa que simule en proteus para prender un led, segui este video 



cargue el .hex sin problema y arme el circuito alimentado a 5 pero el led no me prende y el led si esta bueno pq si lo conecto solo a 5v se prende
aqui es http://img203.imageshack.us/i/probarpic.jpg/
sera que queme el pic?

Saludos


----------



## antiworldx (Oct 9, 2010)

mmmmm no se programar en basic... (que los demonios de silicio me libren).

No te puedo decir que ocurre con tu programa, por lo antes explicado, pero te van varias cosas a revisar.
Si puedes programarlo, entonces no esta quemado.

Estas configurando bien los fuses?
Esta oscilando el cristal?
Tiene depurador con forma de ver los perifericos el compilador?

Y corrijo... *El proteus no sirve ni para simular un led!*

Casi puedo apostar que tu problema es del cristal y los fuses.


----------



## d4n13l4 (Oct 10, 2010)

Hola
como qno sirve para simular un led? viste el video? yo lo hice segun el video y se supone q sips pero bueno tu debes saber mas que yo que soy mas bien novata en los pics
la verdad es q yo tb se basic se un poco de c pero no como para programar un pic
si tienes algun codigo que me sirva para encender un led lo intento con ese


----------



## antiworldx (Oct 10, 2010)

Con lo del proteus, quise decir que el proteus es muy ... poco confiable. Trabaja aun a pesar que el codigo tiene errores. Yo recomiendo programar en C o ensamblador, (aunque me regañe ezavalla master) usando el mplab y usar el depurador del mismo para revisar que el software este correcto.

tengo un codigo pero esta en ensamblador, te lo paso si gustas, esta pensado para trabajar con su oscilador interno a 8MHZ.


```
list P=18F2550
 include <P18f2550.inc>


 
 CONFIG     PLLDIV=1
 CONFIG     USBDIV=1
 CONFIG     FOSC=INTOSC_HS 
 CONFIG     WDT=OFF
 CONFIG     CPUDIV=OSC1_PLL2
 CONFIG     PBADEN=OFF

 ORG 0x0000
 BRA INICIO

 INICIO:
 MOVLW	B'00000000'	
 MOVWF	TRISB
				

BUCLE:	

 movlw	b'00000001'
 movwf	PORTB
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 movlw	b'00000000'
 movwf	PORTB
 CALL	Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 GOTO	BUCLE	

	


;///////////////////////Retardos//////////////////////////	


Retardo_var1:					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'150'				; Aqui pones la cantidad de milisegundos. valor/100 = mS 
	movwf	h'90'			; Aporta 1 ciclo máquina.
R1ms_BucleExterno:
	movlw	d'2'				; Aporta Mx1 ciclos máquina. Este es el valor de "K".
	movwf	h'91'				; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno: 
	;nop							; Aporta KxMx1 ciclos máquina.
	decfsz	h'91',F			; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
	goto	R1ms_BucleInterno		; Aporta (K-1)xMx2 ciclos máquina.
	decfsz	h'90',F			; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	R1ms_BucleExterno 	; Aporta (M-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.


Retardo_var2:
	movlw	d'200'				; Aqui pones la cantidad de milisegundos. valor/100 = mS 
	movwf	h'90'			; Aporta 1 ciclo máquina.
R1ms_BucleExterno2:
	movlw	d'200'				; Aporta Mx1 ciclos máquina. Este es el valor de "K".
	movwf	h'91'				; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno2: 
	nop
	nop							; Aporta KxMx1 ciclos máquina.
	decfsz	h'91',F			; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
	goto	R1ms_BucleInterno2		; Aporta (K-1)xMx2 ciclos máquina.
	decfsz	h'90',F			; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	R1ms_BucleExterno2 	; Aporta (M-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.

 END
```

Si gustas ahi esta, como te digo, en C casi no programo los pics pues estoy muy acostumbrado a ensamblador.


----------



## d4n13l4 (Oct 10, 2010)

Hola
tengo una duda porque segun me habian dicho el 16f877a no tiene oscilador por eso se le pone oscilador externo pero el que yo tengo es de 4MHz habra algun problema si esta para que trabaje a 8MHz? le puedo cambiar el valor sin problemas?

de ensamblador ni idea intentare haber si me funciona, uso el mplab como dices tu que cual compilador se elige?


----------



## antiworldx (Oct 10, 2010)

error mio, pense que hablabas del 2550.  Y se usa el MPASM. Necesitas configurar los fuses y el tipo de pic al que estas usando.


----------



## d4n13l4 (Oct 10, 2010)

lo compile y me salio este error Message[302] C:\PRUEBAS\LED2\LED2.ASM 18 : Register in operand not in bank 0.  Ensure that bank bits are correct.
segun lei decia que se puede poner una expresion para que no muestre ese error porque aun cuando le ponga el banco¿? correcto sigue saliendo
que dices tu?

Saludos


----------



## antiworldx (Oct 10, 2010)

nunca he trabajado ese pic. Ya corregiste la configuracion de los fuses? Los que te pase son para el 2550 no para el tuyo. Necesitas checar eso.


----------



## d4n13l4 (Oct 10, 2010)

en que parte se configuran los fuses, en el codigo o en el programador?
porque al menos en c yo los tenia puestos en el codigo asi #FUSES NOWDT,XT y no hacia nada mas que compilar y programar el pic
pero claro no me funcionaba asi que capaz que tenga eso malo


----------



## antiworldx (Oct 10, 2010)

```
CONFIG     PLLDIV=1
 CONFIG     USBDIV=1
 CONFIG     FOSC=INTOSC_HS 
 CONFIG     WDT=OFF
 CONFIG     CPUDIV=OSC1_PLL2
 CONFIG     PBADEN=OFF
```
Estos son los fuses del 2550, no se como sea para tu pic... debe ser algo asi como


```
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
```
y no olvides cambiar los include.


----------



## d4n13l4 (Oct 10, 2010)

:/
me siguen saliendo esos errores y ahora me sale este otro
Error[122]   Illegal opcode (INICIO
y lo tengo que igual que tu codigo


----------



## Chico3001 (Oct 10, 2010)

d4n13l4 dijo:


> lMessage[302] C:\PRUEBAS\LED2\LED2.ASM 18 : Register in operand not in bank 0.  Ensure that bank bits are correct.



No es un error, es un mensaje de advertencia para el programador indicando que el registro que uno quiere utilizar se encuentra en otra pagina de memoria y se deben cambiar los bits en el registro status (si mal no recuerdo)

No se puede eliminar, a menos que uses el comando banksel antes de accesar el registro


----------



## d4n13l4 (Oct 10, 2010)

y el otro error que me dio?
asi quedo el codigo con los cambios que me dijo antiworldx 

```
list P=16F877a
 include <P16f877a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC


 ORG 0x0000
 BRA INICIO

 INICIO:
 MOVLW	B'00000000'	
 MOVWF	TRISB
				

BUCLE:	

 movlw	b'00000001'
 movwf	PORTB
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 movlw	b'00000000'
 movwf	PORTB
 CALL	Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 CALL    Retardo_var2
 GOTO	BUCLE	


;///////////////////////Retardos//////////////////////////	


Retardo_var1:					; La llamada "call" aporta 2 ciclos máquina.
	movlw	d'150'				; Aqui pones la cantidad de milisegundos. valor/100 = mS 
	movwf	h'90'			; Aporta 1 ciclo máquina.
R1ms_BucleExterno:
	movlw	d'2'				; Aporta Mx1 ciclos máquina. Este es el valor de "K".
	movwf	h'91'				; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno: 
	;nop							; Aporta KxMx1 ciclos máquina.
	decfsz	h'91',F			; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
	goto	R1ms_BucleInterno		; Aporta (K-1)xMx2 ciclos máquina.
	decfsz	h'90',F			; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	R1ms_BucleExterno 	; Aporta (M-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.


Retardo_var2:
	movlw	d'200'				; Aqui pones la cantidad de milisegundos. valor/100 = mS 
	movwf	h'90'			; Aporta 1 ciclo máquina.
R1ms_BucleExterno2:
	movlw	d'200'				; Aporta Mx1 ciclos máquina. Este es el valor de "K".
	movwf	h'91'				; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno2: 
	nop
	nop							; Aporta KxMx1 ciclos máquina.
	decfsz	h'91',F			; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
	goto	R1ms_BucleInterno2		; Aporta (K-1)xMx2 ciclos máquina.
	decfsz	h'90',F			; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
	goto	R1ms_BucleExterno2 	; Aporta (M-1)x2 ciclos máquina.
	return						; El salto del retorno aporta 2 ciclos máquina.

 END
```


----------



## Chico3001 (Oct 10, 2010)

Me parece que la instruccion BRA no existe, deberia ser GOTO


```
GOTO INICIO
```


----------



## d4n13l4 (Oct 10, 2010)

le puse goto, salieron warnings pero bueno 
se creo el hex lo cargue lo probe y no logro encender el led.
hare un resumen de los pines quizas hay algo que me falta 
    1-R10k-5V  
    11-5V 
    12-GND
    13-33p
    14-33p
y entre ellos el oscilador de 4MHz
    31- GND
    32-5V
    33-R220-led amarillo-GND

Saludos


----------



## antiworldx (Oct 10, 2010)

Cierto, no todos los pic usan en "bra". Usa el GOTO.  Recuerden que es el codigo del 2550. Bueno, sigo sospechando del oscilador y los fuses. Hasta aqui puedo ayudar con ese micro en especifico por que nunca lo he usado... 

Sorry.


----------



## d4n13l4 (Oct 10, 2010)

y bueno finalmente alguien me ayudo y descubrimos dps de mucho pelear que el pic se habia quemado
habra que comprar otro y tener mas cuidado a la proxima
grax por la ayuda =


----------



## antiworldx (Oct 10, 2010)

Una pregunta... a pesar que el pic esta mal, se dejaba programar y leer?


----------



## d4n13l4 (Oct 11, 2010)

en un comienzo si pero era por la version del winpic que estaba ocupando era muy vieja
cuando la actualice al grabarlo no me lo reconocia, asi que como moraleja es ocupar las versiones mas actualizadas posibles


----------



## antiworldx (Oct 11, 2010)

A valla... si es asi, pues si... jejeje


----------

