# Comienzo con PIC's [Ayuda]



## lautarox (Nov 15, 2009)

Me interesa mucho el tema de la electronica digital, he conseguido un programador de PIC's y un PIC 18f4550. Tengo conocimiento sobre programacion en C por lo que opte por usar miKroC. El proyecto con el que decidi comenzar es el de un encendido y apagado de un LED.
Aca esta mi codigo en miKroC:
(uso el oscilador interno)

```
void main() {
   TRISB.F1 = 0;
   while(1) {
            PORTB.F1 = 1;
            Delay_ms(800);
            PORTB.F1 = 0;
            Delay_ms(800);
   }
}
```
El codigo en ASM generado por miKroC:

```
; ADDRESS       OPCODE  ASM
; ----------------------------------------------
$0000   $EF04   F000                    GOTO    _main
$0008   $       _main:
;LEDS.c,2 ::                    void main() {
;LEDS.c,3 ::                    TRISB.F1 = 0;
$0008   $9293                           BCF     TRISB, 1, 0
;LEDS.c,4 ::                    while(1) {
$000A   $       L_main_0:
;LEDS.c,5 ::                    PORTB.F1 = 1;
$000A   $8281                           BSF     PORTB, 1, 0
;LEDS.c,6 ::                    Delay_ms(800);
$000C   $0E09                           MOVLW   9
$000E   $6E0C                           MOVWF   STACK_12, 0
$0010   $0EFF                           MOVLW   255
$0012   $6E0B                           MOVWF   STACK_11, 0
$0014   $0EFF                           MOVLW   255
$0016   $6E0A                           MOVWF   STACK_10, 0
$0018   $2E0C                           DECFSZ  STACK_12, F, 0
$001A   $D001                           BRA     $+2
$001C   $D007                           BRA     $+8
$001E   $2E0B                           DECFSZ  STACK_11, F, 0
$0020   $D001                           BRA     $+2
$0022   $D003                           BRA     $+4
$0024   $2E0A                           DECFSZ  STACK_10, F, 0
$0026   $D7FE                           BRA     $-1
$0028   $D7FA                           BRA     $-5
$002A   $D7F6                           BRA     $-9
$002C   $0E29                           MOVLW   41
$002E   $6E0B                           MOVWF   STACK_11, 0
$0030   $0EFF                           MOVLW   255
$0032   $6E0A                           MOVWF   STACK_10, 0
$0034   $2E0B                           DECFSZ  STACK_11, F, 0
$0036   $D001                           BRA     $+2
$0038   $D003                           BRA     $+4
$003A   $2E0A                           DECFSZ  STACK_10, F, 0
$003C   $D7FE                           BRA     $-1
$003E   $D7FA                           BRA     $-5
$0040   $0E6C                           MOVLW   108
$0042   $6E0A                           MOVWF   STACK_10, 0
$0044   $2E0A                           DECFSZ  STACK_10, F, 0
$0046   $D7FE                           BRA     $-1
;LEDS.c,7 ::                    PORTB.F1 = 0;
$0048   $9281                           BCF     PORTB, 1, 0
;LEDS.c,8 ::                    Delay_ms(800);
$004A   $0E09                           MOVLW   9
$004C   $6E0C                           MOVWF   STACK_12, 0
$004E   $0EFF                           MOVLW   255
$0050   $6E0B                           MOVWF   STACK_11, 0
$0052   $0EFF                           MOVLW   255
$0054   $6E0A                           MOVWF   STACK_10, 0
$0056   $2E0C                           DECFSZ  STACK_12, F, 0
$0058   $D001                           BRA     $+2
$005A   $D007                           BRA     $+8
$005C   $2E0B                           DECFSZ  STACK_11, F, 0
$005E   $D001                           BRA     $+2
$0060   $D003                           BRA     $+4
$0062   $2E0A                           DECFSZ  STACK_10, F, 0
$0064   $D7FE                           BRA     $-1
$0066   $D7FA                           BRA     $-5
$0068   $D7F6                           BRA     $-9
$006A   $0E29                           MOVLW   41
$006C   $6E0B                           MOVWF   STACK_11, 0
$006E   $0EFF                           MOVLW   255
$0070   $6E0A                           MOVWF   STACK_10, 0
$0072   $2E0B                           DECFSZ  STACK_11, F, 0
$0074   $D001                           BRA     $+2
$0076   $D003                           BRA     $+4
$0078   $2E0A                           DECFSZ  STACK_10, F, 0
$007A   $D7FE                           BRA     $-1
$007C   $D7FA                           BRA     $-5
$007E   $0E6C                           MOVLW   108
$0080   $6E0A                           MOVWF   STACK_10, 0
$0082   $2E0A                           DECFSZ  STACK_10, F, 0
$0084   $D7FE                           BRA     $-1
;LEDS.c,9 ::                    }
$0086   $D7C1                           BRA     L_main_0
;LEDS.c,10 ::                   }
$0088   $D7FF                           BRA     $
```

Esta es la vista desde el programador:

(El programador estaba descontecado, es solo como muestra)

Las pruebas en proteus fueron satisfactorias, pero a la hora de ponerlo en practica, el controlador no funciona y se calienta. Tengo un transformador de 220v a 9v CC de 500 mA para el proyecto y es regulado con un 7805A (conecto el positivo en la pata de entrada del 7805 y directamente saco la conexion positiva a las 2 patas positivas de este controlador y las negativas van directamente al negativo).
Me gustaria saber que podria estar haciendo mal, desde ya, muchas gracias.


----------



## iDan (Nov 15, 2009)

*Hola lautarox!!


Yo tambien programo en MikroC... y ps el programa esta bien... aunque me gustaria ver los registros que le pusiste al PIC en MikroC... pero lo que mas me llama la atencion es lo que dices: el PIC se calienta... solo por curiosidad que programador utilizas?? que software?? porque a lo que haz puesto en el mensaje no deberia generar problema... cualquier cosa estoy para ayudar


Saludos*


----------



## lautarox (Nov 15, 2009)

Muchisimas gracias por contestar, el programador es el TM-Prog (es el que subi en la foto de arriba), es creado por un particular, el PIC parece grabarse y leerse correctamente ya que despues de realizar el grabado, la lectura devuelve resultados positivos, en cuanto a la configuracion, aca esta la configuración del proyecto:
Clock: 008.000000
El tema de que el controlador se caliente puede deberse a que este este fuera de funcionamiento? (quemado, etc,) aunque parece grabarse y leerse correctamente..
La conexion parece estar bien hecha no?


----------



## iDan (Nov 15, 2009)

Mira sinceramente yo veo bien el programa... y lo que se refiere al PIC creo que si ya quedo fuera de funcionamiento (quemado), a mi tambien me a pasado eso, programo sin ningun problema pero al momento de armarlo no responde y se calienta... lo que te recomendaria es que programes otro PIC igual y pruebes, los registros estan bien a mi parecer... yo programo con PICProg4u ya que aun estoy en la familia de los 16F !!
Otra cosa... si pudiera hacer un programa que ponga un 1 en todas las patas del PIC y miras por si alguna no te enciende podria ser que se haya quemado esa parte del PIC, yo asi pruebo si el PIC se a quemado completamente o solo una pata, ya que me parece raro que el PIC se caliente pero al programarlo no aparezca que esta dañado...

Me cuentas y trataremos de solucionar eso ok?? te ayudo en lo que pueda


Saludos


----------



## lautarox (Nov 15, 2009)

Puede ser que se haya quemado por una mala conexion? es probable que haya usado el controlador con los 9v sin querer.., la conexion estaria bien hecha como la explique no?
El tema del oscilador interno, estaria bien?


----------



## iDan (Nov 15, 2009)

Mira estoy revisando el datasheet de este PIC y al ver los registros creo que hay que tomar en cuenta algunos otros no solo poner los de Default, y si, tienes razon con lo que acabas de decir, pudiera ser que se haya quemado (no en su totalidad) el PIC, es por eso que aun lo reconoce el programador, otra cosa, mira en el datasheet y desactiva entradas analogicas, solo por curiosidad... 

Mira aqui te pongo los registros del oscilador interno y externo,

1. XT Crystal/Resonator
2. XTPLL Crystal/Resonator with PLL enabled
3. HS High-Speed Crystal/Resonator
4. HSPLL High-Speed Crystal/Resonator
with PLL enabled
5. EC External Clock with FOSC/4 output
6. ECIO External Clock with I/O on RA6
7. ECPLL External Clock with PLL enabled
and FOSC/4 output on RA6
8. ECPIO External Clock with PLL enabled,
I/O on RA6
9. INTHS Internal Oscillator used as
microcontroller clock source, HS
Oscillator used as USB clock source
10. INTXT Internal Oscillator used as
microcontroller clock source, XT
Oscillator used as USB clock source
11. INTIO Internal Oscillator used as
microcontroller clock source, EC
Oscillator used as USB clock source,
digital I/O on RA6
12. INTCKO Internal Oscillator used as
microcontroller clock source, EC
Oscillator used as USB clock source,
FOSC/4 output on RA6


Yo tambien estoy tratando de hacer un programa para este PIC y ps en el Proteus me tira un error... asi que tratare de solucionarlo, creo que son estos registros, miralos, me cuentas y tambien tratare de ver que pasa...


----------



## lautarox (Nov 15, 2009)

He probado con el otro PIC, este no se calienta, pero tampoco funciona, creeria que el error esta en el oscilador interno y su configuracion, tenes alguna informacion sobre eso?
Muchas gracias por tu ayuda


----------



## iDan (Nov 15, 2009)

Ps mira amigo me a quedado solo leer el datasheet porque los registros estan bien...
ahora en Proteus al simular me sale un error, el cual se asemeja a que el oscilador interno no funciona e ignora el registro, estoy probando con distintas configuraciones en los registros del oscilador interno, haciendo comparaciones con los registros que te puse anteriormente, mira esta es la pag del datasheet: http://www.mat.ucsb.edu/~dano/CUI/PIC18F4550datasheet.pdf



Sigue intentando y me cuentas, pero ahora (si lo podemos decir asi) ya sabemos que el problema esta con en oscilador


Saludos


----------



## lautarox (Nov 15, 2009)

Gracias por el trabajo que te estas tomando, Proteus tira esta alerta solamente:

Creeria que lo que esta indicando es que no va a usar la velocidad indicada en la configuracion del componente ya que se esta usando el oscilador interno.
Adjunto el proyecto y el archivo hex si queres comprobarlo igual que yo.


----------



## iDan (Nov 15, 2009)

Exactamente lo mismo da a mi, hey sabes que prueba hice ahora (tal vez tu ya la intentaste) ? quite todos los registros referentes al oscilador, y a la hora de simularlo lo hace sin errores y tal como se quiere que sea, la verdad a mi me funcionan los proyectos cuando los hago asi (sin poner los registros de oscilador) y trabajo con el PIC 16F690 y ahora que lo intente con tu PIC me simulo el programa correctamente, sabes, porque no intentas hacer lo mismo, compila el programa quitandole los chequesitos a los registros del oscilador, lo compilas y programas el PIC, pruebalo y me cuentas

PD: Para mi es un honor ayudarte

Saludos


----------



## lautarox (Nov 15, 2009)

Sin los registros te anda bien en la practica? usas oscilador interno o externo en la practica?
Proteus tira una alerta de configuracion, si borras la velocidad del clock de la configuracion del componente no muestra mas la alerta..


----------



## iDan (Nov 15, 2009)

Mira, en los registros del Oscilador en MikroC no le pongo ni uno, y alli mismo en la velocidad de oscilacion le pongo 8MHz, y cuando lo corro en Proteus no me tira ningun error y lo corre de maravilla!! prueba ahora programando el PIC y armando el circuito en tu protoboard para ver si asi queda... una cosa... le agregaste a tu programa la linea de:
CMCON=7?? solo para desactivar los comparadores A/D.

Hazlo y me dices...


----------



## lautarox (Nov 15, 2009)

> CMCON=7?? solo para desactivar los comparadores A/D.


No habia visto ese comando en ningun ejemplo de mikroC, donde decis que lo ponga?
Proteus tiene una configuracion por defacto de la velocidad del oscilador interno, creo que sacar los registros no es la solucion, pero probare..


----------



## iDan (Nov 15, 2009)

Amigo encontre la solucion  ya encontre el registro para el oscilador interno, despues de tanto que busque y lei el datasheet, mira te mando el programa adjunto ya con los registros,simulalo y veras que ya funciona, al fin le encontramos la solucion.


Saludos


----------



## lautarox (Nov 15, 2009)

Agregue esa linea de codigo pero sigue sin funcionar..


----------



## iDan (Nov 15, 2009)

Simula el archivo que te acabo de mandar adjunto con mi anterior mensaje, al fin encontre el registro y ya lo puse, simulalo, programa el PIC y me cuentas!! aunque me dijeron que este PIC18F4550 necesita forzosamente un reloj externo!! pero prueba y me cuentas!!


----------



## lautarox (Nov 15, 2009)

Sigue sin andar.. no se por que será... sigo muy agradecido por tu ayuda


----------



## iDan (Nov 15, 2009)

Entonces las afirmaciones que me han dicho son ciertas!! este PIC necesita un oscilador externo obligatoriamente!! he consultado a un profesor que tuve y me a dicho esto mismo!! creo que solo falta que lo confirmes tu, pero ps viendo los registros de este PIC
avala esta afirmacion!! 

Cuando quieras puedes volver a consultar y yo estare dispuesto a ayudarte nuevamente!!



Saludos


----------



## lautarox (Nov 16, 2009)

IDan, me ayudarias a configurar mi proyecto con mi oscilador de 6 mhz?
Muchas gracias!


----------



## iDan (Nov 16, 2009)

Hola amigo, dime con respecto a como lo quieres configurar... con oscilador externo esta vez??


----------



## lautarox (Nov 16, 2009)

Si, acabo de conseguir un oscilador externo de 6 Mhz, como seria su configuracion?


----------



## iDan (Nov 16, 2009)

Mira alli si aplica poner los registros de Defalt... ya tu poniendo manualmente los que desactivan el MCL... luego solo pones en la velocidad 006.00000000 y ya!! haces tu programa lo compilas y pones el oscilador... eso es lo que preguntas?


----------



## lautarox (Nov 16, 2009)

Queria saber si tenia algun registro especifico para el oscilador, estoy siguiendo este circuito http://www.electronics-tutorials.ws/oscillator/crystal.html , donde dice Microprocessor Oscillator, espero que este bien..


----------



## iDan (Nov 16, 2009)

Ooooo... ya te capto!! recuerdas las explicaciones que te di anteriormente??



> 1. XT Crystal/Resonator
> 2. XTPLL Crystal/Resonator with PLL enabled
> 3. HS High-Speed Crystal/Resonator
> 4. HSPLL High-Speed Crystal/Resonator
> ...



Si observas los registros en MikroC tienen estas abreviaturas... ahora solo averigua que tipo de cristal (oscilador) tienes y colocas los registros!! si quieres de dices cual es tu oscilador!!


Me cuentas!! saludos


----------



## lautarox (Nov 16, 2009)

No se si se ha quemado el otro PIC, empezo a calentarse tambien, lo que noto es que al calentarse otra led que tengo para verificar el voltaje funciona muy baja o no funciona, como si el controlador estuviera consumiendo toda la electricidad..
En lo que refiera a configuracion, saque las opciones de INTOSC y puse la de XT sola, pero tampoco funciono..


----------



## Fogonazo (Nov 16, 2009)

lautarox dijo:


> No se si se ha quemado el otro PIC, empezo a calentarse tambien, .......


¿ Estas seguro de haber conectado todo bien ?

Intenta probando sin los LED´s a ver si calienta el PIC.


----------



## iDan (Nov 16, 2009)

Ok mira de casualidad le pones este registro al PIC en MikroC: PWRT OFF 2L?? o mejor aun!! ya hice un programa con los registros que necesitas para tu cristal (oscilador) te adjunto el programa y el circuito en Proteus!! ya con el calentamiento del PIC te recomendaria que uses un cargador de celular ya que tienen aprox 4 VDC y un buen amperaje para este tipo de prueba!!



Prueba y me cuentas!!


----------



## lautarox (Nov 16, 2009)

Si, la conexion parece estar bien hecha, estoy viendo el protoboard y la conexion esta tal cual aparece en el datasheet del PIC.. los pines 11 y 32 a +5 y los pines 12 y 31 a -5, esto es realmente raro, voy a probar sin los leds, pero creo que pasará lo mismo.
Necesita el PIC mas amperaje que 500 mA? son solo 2 leds conectados, uno que funcionaria supuestamente con el PIC y otro que se enciende para comprobar que la conversion de voltaje funciona correctamente. Tengo una fuente de 9v 500 mA convertidos a 5v por un 7805A, la conexion de este para regular no es la del circuito que plantean, si no que conecto la pata de entrada a la entrada y la salida a la salida. De ahí salen 2 conexiones a cada pata positiva del PIC y otra al led de prueba de conversion que tambien es regulado con una resistencia. Del PIC sale un led con una resistencia desde la pata B 1 y tambien tiene un oscilador externo creado a la medida de este circuito http://www.electronics-tutorials.ws/oscillator/crystal.html (donde dice Microprocessor Oscillator), conectados a los pines A7 (OSC1/CLKI) y A6 (OSC2/CLKO).
Pruebo el programa y te aviso IDan, muchisimas gracias.

No.. sigue sin andar con tu codigo, es extraño, debe de haber un problema con el hardware, saque las 2 luces y el micro sigue calentandose..


----------



## elcebollo001 (Sep 26, 2011)

hola que tal veo que han tenido algunas broncas con la programacion del pic18f4550 que yo apenas estoy experimentando, tengo que realizar una comunicacion con pc por USB, pero quiero ir paso a paso, primero me gustaria encender un simple led para tener el control total del microcontrolador y saber que si esta funcioanando como yo le indico, lo estoy programando en micro c 8.2.0.0 y tengo una tarjeta de evaluacion que se llama easy pic 5 de la misma marca... no he logrado programarlo con un simple led devido a que me envia errores, no se si ustedes que han experiemntado con este micro nuevo para mi conocen algo sobre como podria programar un primer progarama en C con oscilador XT de 4MHZ cual serian los registros de envio correctos? saludos y muchas gracias amigos


----------

