TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Kspids en 13 de Noviembre de 2018, 09:47:27

Título: Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 09:47:27
Buenas a todos, estoy intentando cargar el un programa al PIC16F506 con el PicKit3, mplab y CCS.

He activado la alimentación a 5V y me dice que se ha programado satisfactoriamente pero cuando pongo el PIC en la protoboard no hace nada. En proteus me funciona totalmente pero no se que puede pasar. No utilizo oscilador, me basta con el reloj interno. He probado tanto así:

El encabezado lo tengo de la siguiente manera:
#include<16f506.h>
#fuses XT, NOWDT
#use delay (clock= 4000000)
...


como así:
El encabezado lo tengo de la siguiente manera:
#include<16f506.h>
#fuses INTRC, NOWDT
//#use delay (clock= 4000000) // Lo he quitado por si fuera problema de esta línea
...



AYUDA!!
Título: Re:Fallo en la programación
Publicado por: KILLERJC en 13 de Noviembre de 2018, 12:54:24
Citar
En proteus me funciona totalmente pero no se que puede pasar. No utilizo oscilador, me basta con el reloj interno.

Palabras claves...

Proteus no tiene en cuenta los Fuses o bits de configuracion. Sinceramente cuando comence en electronica me volvi "dependiente" de Proteus, si no habia proteus no podia hacer nada. Por eso mismo opte por eliminarlo y empece a ver otras opciones.

Segundo.... No usas el oscilador externo, pero en tus Fuses le decis que tenes un Cristal:

Citar
#fuses XT, NOWDT
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 13:05:45
Entonces qué tengo que cambiar?
o por qué no me hace nada?
Título: Re:Fallo en la programación
Publicado por: KILLERJC en 13 de Noviembre de 2018, 13:59:46
Reemplazalo por

#fuses INTRC_IO, NOWDT

XT = Cristal
INTRC_IO = Internal RC Oscilator, los pines OSC1/2 funcionan como entrada/salida
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 14:04:31
Continua sin hacer nada...
Título: Re:Fallo en la programación
Publicado por: KILLERJC en 13 de Noviembre de 2018, 14:19:10
Probaste con:

#use delay(internal=4MHz)

Es la ultima opcion que me queda para decirte. Sino revisa el MCLR o los demas FUSES
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 14:35:09
No va.

Así lo tengo:

#include<16f506.h>
#fuses INTRC, NOWDT
#use delay(internal=4MHz)

//#use delay (clock= 4000000)
#byte TRISB=0x86
#byte PORTB=0x06
#byte TRISC=0x87
#byte PORTC=0x07

#define bot PIN_C1
#define verde1 PIN_B0
#define rojo1 PIN_B2
#define verde2 PIN_C0
#define rojo2 PIN_C2
#define dm1 PIN_C3
#define d2 PIN_C4
#define valvula PIN_C5

void main(){
...
Título: Re:Fallo en la programación
Publicado por: elreypic2 en 13 de Noviembre de 2018, 15:15:48
Asegúrate de haber apagado los comparadores del microcontrolador (ver páginas 44 y 45 del datasheet), registros CM1CON0 Y CM2CON0.
También tienes que apagar el módulo del voltaje de referencia para el comparador (página 49 del datasheet), registro VRCON.
Y finalmente asegúrae que estás definiendo los pines como digitales y no analógicos (Pagina 53 del dtasheet), registro ADCON0.

elreypic.
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 15:45:31
Lo programo en C y no sé cómo configurar esos parámetros...
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 16:05:20
Acabo de probar encendiendo un único led con el siguiente código:


#include<16f506.h>
#fuses INTRC, NOWDT
#use delay(internal=4MHz)

//#use delay (clock= 4000000)
#byte TRISB=0x86
#byte PORTB=0x06
#byte TRISC=0x87
#byte PORTC=0x07


#define verde1 PIN_C5


void main(){

TRISC=0B00000000;     //Configuración de entradas(1) y salidas (0) en el puerto C
TRISB=0B00000000;     //Configuración de entradas(1) y salidas (0) en el puerto B
PORTB=0;              //Inicialización del puerto B
PORTC=0;              //Inicialización del puerto C

    for (;;) {
    output_high(verde1);     // Y apagamos el led de 1       
    }
         
}



Lo hace en Proteus (aunque sé que no sirve de nada) y no lo hace en la protoboard.

HELP!!!! :)
Título: Re:Fallo en la programación
Publicado por: elreypic2 en 13 de Noviembre de 2018, 16:39:32
Acabo de probar encendiendo un único led con el siguiente código:


#include<16f506.h>
#fuses INTRC, NOWDT
#use delay(internal=4MHz)

//#use delay (clock= 4000000)
#byte TRISB=0x86
#byte PORTB=0x06
#byte TRISC=0x87
#byte PORTC=0x07


#define verde1 PIN_C5


void main(){

TRISC=0B00000000;     //Configuración de entradas(1) y salidas (0) en el puerto C
TRISB=0B00000000;     //Configuración de entradas(1) y salidas (0) en el puerto B
PORTB=0;              //Inicialización del puerto B
PORTC=0;              //Inicialización del puerto C

    for (;;) {
    output_high(verde1);     // Y apagamos el led de 1       
    }
         
}



Lo hace en Proteus (aunque sé que no sirve de nada) y no lo hace en la protoboard.

HELP!!!! :)

Para ese pin (RC5) específicamente no hay nada que lo restrinja, a excecpión del T0CKI, así que solo para descartarlo, simplemente onle un 0 a ese bit que se encuentra en el registro OPTION. Intenta cambiar dicho bit primeramente.

Otra prueba que puedes haces es usar otro pin, como es el caso del RC3, este no está conectado a ningún periférico, haciendo que se encienda, tal como lo haces en tu código actual, pero definiendo verde1 como PIC_C3. Si aún sigue sin funcionar, entonces el problema puede ser el hardware.

elreypic.
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 16:55:03
Vale, así sí luce (con RC3)

Entonces qué puedo hacer??
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 17:06:51
He probado a cargar el programa y me da error de OSC:

Título: Re:Fallo en la programación
Publicado por: elreypic2 en 13 de Noviembre de 2018, 17:32:26
Eso no es un error, es una advertencia (un warning). Lo que te quiere decir es que no has tomado el valor de calibración de fábrica y colocado en el registro OSCCAL.
Ese microcontrolador en la última dirección de programa, contiene un MOVLW XX (donde XX es el valor de calibración para el oscilador interno). Entonces cada vez que reseteas el microcontrolador, el contador de porgrama se va a esa última direcció y carga el registro W con el valor de calibració, entonces lo que tienes que hacer es mover ese valor de W al registro OSCCAL para que este funcione a la frecuencia correcta, de otro modo el oscilador interno estará operanado en cualquier otra frecuencia, menos la que has definido (4 u 8 MHz). No me he puesto a analizar el codigo generado en C, pero debería generarlo automáticamente cuando defines el oscilador interno.
Una cosa que debes tener en cuenta es que esa instrucción al final de la memoria de programa (MOVLW XX), se puede borrar cuando aplicas un ERASE, y perderás ese valor, de ahí que es importante que leas el microcontrolador la primerísima vez, antes de descargar el archivo hex, para que lo tengas anotando. Ese valor XX nunca es igual en dos PIC16F506, es decir, ese valor XX es diferente para cada PIC.

Si el código ya te está funcionando, entonces lo que está pasando es que el T0CKI del registro OPTION está afectando la operación del puerto RC5, y por eso tienes que poner ese bit del T0CKI en 0 para que te funcione correctamente el pin del puerto RC5.

En ensamblador se hace así:

MOVLW 0DFh
OPTION

El compilador permite agregar instrucciones en ensamblador.

elreypic.
elreypic.
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 17:38:31
El problema es que el programa es en C...
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 17:50:42
Y qué pasaría si ahora pongo un osc externo? si haber tenido en cuenta lo de apuntarme el valor que me has dicho??
Título: Re:Fallo en la programación
Publicado por: elreypic2 en 13 de Noviembre de 2018, 17:54:53
El problema es que el programa es en C...

No importa si tu código es en C, siempre puedes agregar instrucciones en ensamblador con la directiva ASM-ENDASM. Mira el manual del compilador o busca en la ayuda del propio IDE de CCS.

elreypic.
Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 18:09:52
Es que además no es solo el RC5, ese es un programa que he hecho mientras me ayudábais ahora para ir probando. Realmente no funciona ningún pin y esto no se hacerlo la verdad...

Creía que la solución sería más sencilla... Realmente al no tener idea de programación no puedo seguir vuestras indicaciones.

Título: Re:Fallo en la programación
Publicado por: Kspids en 13 de Noviembre de 2018, 18:13:14
A parte, deduzco que no es problema de si el oscilador es externo o interno.

No se como solucionar este problemón...
Título: Re:Fallo en la programación
Publicado por: elreypic2 en 13 de Noviembre de 2018, 18:33:15
Te entiendo, pero te he dado infinidad de sugerencias que es lo que puedo hacer por ahora.
No cuento con ese microcontrolador para realizar las pruebas en vivo y comenzar a descartar los problemas. Para ello tendría que comprar los mcirocontroladores y esperarlos a que lleguen mañana. Luego ya por la noche comenzar a realizar las pruebas.
Lo que puedo hacer hoy por la noche que llegue a casa, es analizar el archivo generado por el compilador en ensamblador y simularlo en el MPLAB IDE, y ver qué es lo que está pasando.

elreypic.
Título: Re:Fallo en la programación
Publicado por: thegame en 14 de Noviembre de 2018, 01:54:32
Kspids, has considerado que este dañado el PIC??

El IDE para programar tu PIC no te da la opcion de reparar el valor del oscilador interno??

Con el oscilador externo deberia funcionar sin problemas, pones los capacitores de 22uf??

Saludos