Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

22/07/2016 #1


MPLABX no termina de verificar memoria pic10f206
Buenas a todos, estoy tratanto de implementar un sencillo programa con un pic10f206 usando el Pickit 2 para programarlo, todo me sale bien pero cuando quiero quemar el pic el IDE se queda esperando en "verificando memoria de configuracion", y tengo que abortar manualmente, incluso me puse a ver un video de 15min y no termino, soy nuevo en esto pero asta yo se que un micro tarda unos segundos en grabarse el programa. alguna ayuda por favor??

las conecciones son las mismas de la hoja de datos del pic10f206, estoy alimentando el pic con una fuente externa que entrega 4.91v, no hay ninguna otra coneccion de o hacia el pic mas que aquellas que llegan del Pickit 2

Alguna sugerencia de que puede pasar??
24/07/2016 #2

Avatar de hamster

Hola Shadown.

Puedes probar con el MPLAB IPE y no directamente con el Mplab. Tal vez podría solucionar tu problema.
24/07/2016 #3


!!!el MPLAB IPE no soporta el Pickit 2!!!

ya me rendi, no se que sea el problema, pero cada vez que llega a la parte de verificando programa el MPLAB X se queda esperando quien sabe que cosa, ya me di por vencido y estoy intentando con el pic16f887 aver si este si lo programa, no valla a ser problema del quemador(PICKIT 2) que no sea compatible, . pero tengo una duda, como especifico el tipo de cristal en el programa??
Este es mi programa, pero me tira errores que el _XTAL_FREQ no sabe que es, uso el compilador de Hi-tech. gracias

#include "pic16f887.h"
#include <pic.h>
#include <htc.h>
#define _XTAL_FREQ 2457600

__CONFIG(MCLRE_OFF&CP_OFF&PWRTE_OFF&WDTE_OFF&FOSC_ HS);

int main(void) {
TRISA=0b00000000;
for( ; ; )
{
PORTA=0b00000001;
__delay_ms(500);
PORTA=0b00000000;
__delay_ms(500);
PORTA=0b00000010;
__delay_ms(500);
PORTA=0b00000000;
__delay_ms(500);
PORTA=0b00000100;
__delay_ms(500);
PORTA=0b00000000;
__delay_ms(500);
PORTA=0b00001000;
__delay_ms(500);
PORTA=0b00000000;
__delay_ms(500);
}
}
25/07/2016 #4

Avatar de TRILO-BYTE

yo diría que investigues mas.
un copy paste y ver si compila no es la opción mas indicada pues cada compilador es diferente.

es decir no es lo mismo compilar para pic10 pic16f y pic18 usando el mismo IDE pues cada vez que compilas una familia diferente el IDE llama a otro compilador.

yo usaba C18 y a pesar que lo hacia hitech era ligeramente diferente al hitech.

otra cosa que veo delays de 500ms es una manera muy muy deficiente de hacer un programa.
25/07/2016 #5
Moderador

Avatar de D@rkbytes

shadown dijo: Ver Mensaje
Este es mi programa, pero me tira errores que el _XTAL_FREQ no sabe qué es, uso el compilador de Hi-tech.
El problema no debe ser en la definición "_XTAL_FREQ", sino en la palabra de configuración.
Como usas un cristal de 2457600 Hz, usa la siguiente:
Código:
__CONFIG (FOSC_XT & WDTE_OFF & PWRTE_ON & BOREN_OFF & LVP_OFF & FCMEN_OFF);
En el PIC16F887, también puedes usar el oscilador interno:
Código:
__CONFIG (FOSC_INTRC_NOCLKOUT & WDTE_OFF & PWRTE_ON & BOREN_OFF & LVP_OFF & FCMEN_OFF);
Y en "#define _XTAL_FREQ", seleccionas la frecuencia de operación.
Sin olvidar configurar el registro OSCCON.

Por ejemplo, para 8 MHz.:
Código:
#define _XTAL_FREQ 8000000

__CONFIG (FOSC_INTRC_NOCLKOUT & WDTE_OFF & PWRTE_ON & BOREN_OFF & LVP_OFF & FCMEN_OFF);;

void main (void)
{
    OSCCON = 0b01110001;
    // Bla bla bla
25/07/2016 #6


Aparentemente el problema es la ultima versión del MPLAB X que por alguna razón nunca termina verificar el pic o de plano no manda la instrucción para salir del modo programación, ademas como el problema me trajo dando vueltas por los últimos 4 días, terminé usando la versión 3.10 (la más reciente v3.35) y ahora todo se programa de maravilla.
Al final adjunto mi programa.
TRILO-BYTE dijo: Ver Mensaje
.... no es lo mismo compilar para pic10 pic16f y pic18 usando el mismo IDE pues cada vez que compilas una familia diferente el IDE llama a otro compilador....
Ok. Eso no lo sabía.
¿Qué compilador me sugieres para el PIC10F206 y cuál para el PIC16F877?
Tengo sólo esos dos.
TRILO-BYTE dijo: Ver Mensaje
otra cosa que veo delays de 500ms es una manera muy muy deficiente de hacer un programa.
Tienes razón, por eso modifiqué el programa, pero usando un for que cuenta asta 1000, pero ahora el pin 0 se queda prendido y no hace mas, en algo la regué ahora pero no sé donde.

Código PHP:
/*
 * File:   Proyector super 8.c
 * Author: StudioMac
 *
 * Created on 25 de junio de 2016, 16:30
 */

#include "pic10f206.h"
#include "htc.h"
#include "pic.h"
#define _XTAL_FREQ 4000000

/*WDTE_OFF apaga la proteccion watchdog timer*/
/*OSC_IntRC habilita el relog interno*/
/*MCLRE_OFF desabilita el masterclear y habilita el uso de GP03*/
/*CP_OFF desabilita la proteccion de codigo*/
/**/
__CONFIG(OSC_IntRC&WDTE_OFF&MCLRE_OFF&CP_OFF);

void delay_dirty()
    {
        
int i=0;
        for (
i;i<1000;i++);
    }

int main(void) {
    
/*GPO3 es solo salida, los demas pueden ser entrada-salida*/
    /*usar 0 pone habilita la salida, usar 1 habilita la entrada*/
    /*TRISGPIO establece si el puerto es salida o entrada*/
    
    
TRISGPIO=0b1000;
    
    
    
/*GP0,GP1,GP2,GP3 son los registros de los puertos*/
    
for(;;)
    {
    
GPIO=0b0001;
    
delay_dirty();
    
GPIO=0b0000;
    
delay_dirty();
    
GPIO=0b0010;
    
delay_dirty();
    
GPIO=0b0000;
    
delay_dirty();
    
GPIO=0b0100;
    
delay_dirty();
    
GPIO=0b0000;
    
delay_dirty();
    }

---------- Actualizado después de 2 minutos ----------
D@rkbytes dijo: Ver Mensaje
El problema no debe ser en la definición "_XTAL_FREQ", sino en la palabra de configuración.
Como usas un cristal de 2457600 Hz, usa la siguiente:
Código:
__CONFIG (FOSC_XT & WDTE_OFF & PWRTE_ON & BOREN_OFF & LVP_OFF & FCMEN_OFF);
En el PIC16F887, también puedes usar el oscilador interno:
Código:
__CONFIG (FOSC_INTRC_NOCLKOUT & WDTE_OFF & PWRTE_ON & BOREN_OFF & LVP_OFF & FCMEN_OFF);
Y en "#define _XTAL_FREQ", seleccionas la frecuencia de operación.
Sin olvidar configurar el registro OSCCON.
Me gusta más tu opción sobre el timer interno, no soy muy bueno a la hora de usar cristales.
D@rkbytes dijo: Ver Mensaje
Por ejemplo, para 8 MHz.:
Código:
#define _XTAL_FREQ 8000000

__CONFIG (FOSC_INTRC_NOCLKOUT & WDTE_OFF & PWRTE_ON & BOREN_OFF & LVP_OFF & FCMEN_OFF);;

void main (void)
{
    OSCCON = 0b01110001;
    // Bla bla bla
25/07/2016 #7

Avatar de hamster

oh, no tenia ni idea que el Mplab Ipe no soporta pickit2. Ahora ya lo se.

Ese mcu solo soporta modo oscilador interno. así que supongo que OSC_IntRC está de mas en __CONFIG

En la hoja de datos solo aparece Watchdog, MCLRE y CP. Quién sabe, tal vez ese define al hacer AND con las otras altera de alguna forma lamentable el código. xD
25/07/2016 #8


ok me rindo, eh modificado tanto el programa que ahora creo me lo eh cargado, ahora ni siquiera prende el led que puse para verificar si estaba encendido el pic10f206, supongo que me movere al pic16f887, alguien con mas experiencia que me pueda decir si tiene errores mi programa? mañana tratare de hacer las conecciones para programar el nuevo pic, la idea es encender y apagar leds en los puertos RA0-RA3, algo sencillo, para mas adelante tratar de controlar motores paso a paso.


Código:
#include "pic16f887.h"
#include <pic.h>
#include <htc.h>
#define _XTAL_FREQ 8000000

/*FOSC_INTRC_NOCLKOUT usa el relog interno del pic, siempre definir _XTAL_FREQ*/

__CONFIG(FOSC_INTRC_NOCLKOUT&MCLRE_OFF&CP_OFF&PWRTE_ON&WDTE_OFF&BOREN_OFF & LVP_OFF & FCMEN_OFF);

void delay_dirty(int timer_ms)
    {
        int i=0;
        for ( i  ;  i<=timer_ms  ;  i++ ) ;
    }

int main ( void ) {
    
    /*palabra de operacion OSCCON, checar bien en datasheet*/
    OSCCON = 0b01110001;
    
    TRISA=0b00000000;
    for(;;){
        PORTA=0b00000001;
        delay_dirty(100) ;
        PORTA=0b00000000;
        delay_dirty(100) ;
        PORTA=0b00000010;
        delay_dirty(100) ;
        PORTA=0b00000000;
        delay_dirty(100) ;
        PORTA=0b00000100;
        delay_dirty(100) ;
        PORTA=0b00000000;
        delay_dirty(100);
        PORTA=0b00001000;
        delay_dirty(100);
        PORTA=0b00000000;
        delay_dirty(100);
    }
}
25/07/2016 #9
Moderador

Avatar de D@rkbytes

Estás usando <RA3:RA0> que son análogos.
Entonces faltaría configurar el registro ANSEL, pero aún así, físicamente si hay actividad en esos bits.
Muy rápida, por cierto. Existen 140 Hz. en cada pin. FOsc: @ 8 Mhz.

Si se estuvieran usando como entradas digitales, si sería necesario configurar el registro ANSEL.
27/07/2016 #10


Modifique el programa y agrege la palabra de configuracion Osccon y Ansel tal como me dijiste Darkbites, no la entiendo muy bien creo que asi seria para que las salidas RA0-RA3 funcionen como analogicas

OSCCON = 0b01110001;
ANSEL = 0b00001111;

Tengo una duda sobre la forma de programar el Pic16f887, segun lo que eh leeido se debe alimentar Vpp con un circuito aislador para hacer funcionar el ICSP, pero cual es el Voltaje de alimentacion que se usa para alimentar el pic??? el del pickit o el de la fuente externa?? adjunto mi diagrama
Imágenes Adjuntas
Tipo de Archivo: jpg 20160727_001310.jpg (72,7 KB (Kilobytes), 5 visitas)
27/07/2016 #11
Moderador

Avatar de D@rkbytes

shadown dijo: Ver Mensaje
Modifiqué el programa y agregué la palabra de configuración OSCCON y ANSEL, tal como me dijiste Darkbytes.
No la entiendo muy bien, creo que así sería para que las salidas RA0-RA3 funcionen como analógicas.

OSCCON = 0b01110001;
ANSEL = 0b00001111;
Así es, pero si únicamente vas a usar niveles digitales, puedes poner todo el registro ANSEL en 0.
ANSEL = 0;
shadown dijo: Ver Mensaje
Tengo una duda sobre la forma de programar el PIC16F887
Según lo que he leído, se debe alimentar Vpp con un circuito aislador para hacer funcionar el ICSP, pero, ¿cuál es el voltaje de alimentación que se usa para alimentar al PIC?
¿El del pickit o el de la fuente externa?
Tanto el voltaje de alimentación, como el voltaje para Vpp, los proporciona el mismo programador.
Nota: (Ésta es una opción disponible en el PICkit 3, no sé si en el 2 también.)

El voltaje de alimentación puede ser de 3,3 V, o de 5.0 V. (Depende la familia de PIC)
Y el voltaje para Vpp, es de entre 11.5 V a 13.5 V. Max. (Nominal son 13.0 V)

Así debe ser la conexión recomendada para programar usando ICSP.


Para una mejor referencia, puedes mirar el siguiente documento:
In-Circuit Serial Programming (ICSP) Guide
Imágenes Adjuntas
Tipo de Archivo: jpg PK3 Target Power.jpg (13,6 KB (Kilobytes), 20 visitas)
27/07/2016 #12


Gracias!!
Muchas Gracias ya funciono, todo funcionan de maravilla, solo algo que note, al querer contar mas alla de la velocidad del relog ( 8 Mhz ) la funcion delay_dirty() no me funciona, como haria para usar un relog mas rapido, con cristal externo? y como lo estipulo en el programa? a la parte del relog es la unica que no entiendo del todo, adjunto mi programa funcionando al 100%

Código:
/* 
 * File:   Proyector Pic16f887.c
 * Author: StudioMac
 *
 * Created on July 23, 2016, 10:03 PM
 */

#include "pic16f887.h"
#include <pic.h>
#include <htc.h>
#define _XTAL_FREQ 8000000

/*FOSC_INTRC_NOCLKOUT usa el relog interno del pic, siempre definir _XTAL_FREQ*/

__CONFIG(FOSC_INTRC_NOCLKOUT&MCLRE_OFF&CP_OFF&PWRTE_ON&WDTE_OFF&BOREN_OFF & LVP_OFF & FCMEN_OFF);

void delay_dirty(int timer_ms)
    {
        int i=0;
        for (i ; i<=timer_ms ; i++);
    }

int main(void) {
    
    /*palabra de operacion OSCCON, checar bien en datasheet*/
    OSCCON = 0b01110001;
    ANSEL = 0b00001111;
    TRISA=0b00000000;
    
    for( ; ; ){
        PORTA=0b00000001;
        delay_dirty(9000000);
        PORTA=0b00000000;
        delay_dirty(9000000);
        PORTA=0b00000010;
        delay_dirty(5000);
        PORTA=0b00000000;
        delay_dirty(5000);
        PORTA=0b00000100;
        delay_dirty(5000);
        PORTA=0b00000000;
        delay_dirty(5000);
        PORTA=0b00001000;
        delay_dirty(5000);
        PORTA=0b00000000;
        delay_dirty(5000);
    }
}
27/07/2016 #13
Moderador

Avatar de D@rkbytes

shadown dijo: Ver Mensaje
al querer contar más allá de la velocidad del reloj (8 Mhz.) la función delay_dirty() no me funciona.
Puedes usar los clásicos retardos. __delay_us (x); y __delay_ms (x);
shadown dijo: Ver Mensaje
¿Cómo haría para usar un reloj más rápido? ¿Con cristal externo? ¿Y cómo lo estipulo en el programa?
Pues si, arriba de los 8 MHz del reloj interno, únicamente con un cristal y hasta 20 MHz.
Para saber que sintaxis usa la palabra de configuración, los registros y sus bits, lee el archivo correspondiente.
En tu caso, el archivo "pic16f887.h" (C:\Program Files (x86)\HI-TECH Software\PICC\9.83\include)
Ahí verás los tipos de configuración para el oscilador:
El archivo pic16f887.h dijo:
// HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
#define FOSC_HS 0xFFEE
Entonces, si vas a usar un cristal de frecuencia superior a 4 MHz, debes usar; FOSC_HS en la palabra de configuración.
Y obviamente, también definir la frecuencia, por ejemplo: #define _XTAL_FREQ 20000000
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.