Autor Tema: Fallo en la programación  (Leído 6025 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Fallo en la programación
« 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!!
« Última modificación: 13 de Noviembre de 2018, 10:15:50 por Kspids »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Fallo en la programación
« Respuesta #1 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

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Fallo en la programación
« Respuesta #2 en: 13 de Noviembre de 2018, 13:05:45 »
Entonces qué tengo que cambiar?
o por qué no me hace nada?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Fallo en la programación
« Respuesta #3 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

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Fallo en la programación
« Respuesta #4 en: 13 de Noviembre de 2018, 14:04:31 »
Continua sin hacer nada...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Fallo en la programación
« Respuesta #5 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

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Fallo en la programación
« Respuesta #6 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(){
...

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Fallo en la programación
« Respuesta #7 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.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Fallo en la programación
« Respuesta #8 en: 13 de Noviembre de 2018, 15:45:31 »
Lo programo en C y no sé cómo configurar esos parámetros...

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Fallo en la programación
« Respuesta #9 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!!!! :)

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Fallo en la programación
« Respuesta #10 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.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Fallo en la programación
« Respuesta #11 en: 13 de Noviembre de 2018, 16:55:03 »
Vale, así sí luce (con RC3)

Entonces qué puedo hacer??

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Fallo en la programación
« Respuesta #12 en: 13 de Noviembre de 2018, 17:06:51 »
He probado a cargar el programa y me da error de OSC:


Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Fallo en la programación
« Respuesta #13 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.

Desconectado Kspids

  • PIC16
  • ***
  • Mensajes: 192
Re:Fallo en la programación
« Respuesta #14 en: 13 de Noviembre de 2018, 17:38:31 »
El problema es que el programa es en C...


 

anything