Microcontroladores PIC en Linux.
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

AYUDA CON LOS FUSES DE SDCC

3 participantes

Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty AYUDA CON LOS FUSES DE SDCC

Mensaje por tony8a87 Sáb 2 Abr 2011 - 23:19

HOLA ESTOY INCIANDO EN PROGRAMAR PICS CON SDCC CONSEGUI UN PROGRAMADOR LLAMADO USBPICPROG USO EL PIKLAB PARA COMPILAR CON SDCC, EL CODIGO ES EL SIGUIENTE:
Código:

#include <pic16f887.h>
#include <delay.h>
#define FREQ 4000
/* ----------------------------------------------------------------------- */
/* Configuration bits: adapt to your setup and needs */
typedef unsigned int word;
word at _CONFIG1 CONFIG1 = _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_OFF & _FCMEN_OFF & _LVP_ON & _DEBUG_OFF;
word at _CONFIG2 CONFIG2 = _BOR40V & _WRT_OFF;

void isr() interrupt 0 { 
}
void main() {
//int i=0;
TRISB = 0b00000000; //Puerto B como salidas
PORTB=0;
while(1){
RB0=1;
delay_ms(1000);
RB0=0;
delay_ms(1000);
}
}
AUN NO SE PORQUE NO FUNCIONA LAS SALIDAS ME MARCAN EN RB0=0.1V EN LOS DEMAS 0V EN LA SIMULACIÓN LO REALIZA BIEN. NO SE SI ESTA FALLANDO EN LOS FUSES O EN LA FUENTE YA QUE ES UNA FUENTE CON TRANSFORMADOR DE 1A CON UN CIRCUITO BASICO PARA TRANSFORMARLO A 5VDC.
FAVOR DE APOYARME YA QUE NI UN LED PUEDO AUN PRENDER!!!!!!! affraid
COLO LINK DE IMAGENES DE LA CONFIGUACION DE FUSES EN USBPICPROG
http://www.mediafire.com/i/?7x30h7euuls52dh
http://www.mediafire.com/i/?vww6rm0l2pvma6c
Gracias de antemano


Última edición por tony8a87 el Dom 3 Abr 2011 - 19:26, editado 1 vez
tony8a87
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por maigke Dom 3 Abr 2011 - 3:30

Saludos compañero
Veo que vas iniciando en este gran mundo del software libre, antes de proponer algo, preferentemente usa las etiquetas code, que están en la parte superior para que el código que expones quede muy clarito, creeme que yo cometí el mismo error cuando llegue a este foro.

Código:
 
#include <p16f877a.h>

int main(void)
{
char a;

printf("hola");
return 0;
}

Como verás así no se come los datos

bueno ahora al punto.

HOLA ESTOY INCIANDO EN PROGRAMAR PICS CON SDCC CONSEGUI UN PROGRAMADOR LLAMADO USBPICPROG USO EL PIKLAB PARA COMPILAR CON SDCC, EL CODIGO ES EL SIGUIENTE:

Código:

#include
#include
#define FREQ 4000
typedef unsigned int word;
word at 0x2007 CONFIG =
_XT_OSC &
_WDT_OFF &
_PWRTE_ON &
_LVP_OFF &
_CPD_OFF &
_WRT_OFF &
_DEBUG_OFF &
_CP_OFF;

El problema es que, el código que expones es para CCS y no para SDCC. Para usar SDCC es un tanto diferente, te sugiero los siguiente links

https://pic-linux.forosactivos.net/t363-pre-alfa-guia-didactica-para-practicas-con-pic18f2550-y-sdcc#1873
Que es una guía que he escrito para PIC18, se que no es el micro que buscas pero te da una buena orientada.
https://pic-linux.forosactivos.net/t49-comenzar-a-trabajar-con-sdcc-y-pic-14-bits-pic12-pic16
Este post puesto por nuestro amigo Risanti

https://pic-linux.forosactivos.net/t76-voltimetro-de-0-a-50v-usando-pic-16f876-con-sdcc
Y este que es muy consultado, por que es muy bueno!, de nuestro amigo Risanti

Espero te sea útil la info, si requieres algo aún mas específico, comentalo por favor
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty AYUDA CON LOS FUSES DE SDCC

Mensaje por tony8a87 Dom 3 Abr 2011 - 15:46

AAAHH YA VEO USO UN PIC 16F887 ENTOCES OCUPO ESTOS FUSES DE MANERA GENERICA PARA PICS 12F, 16F , 18F, TU GUIA ESTA MUY BUENA GRACIAS POR EL APORTE. PARA EL DELAY USO UN ARCHIVO .H QUE REALIZO RISANTI EN UNO DE SUS PROYECTOS QUE SUBIO AL FORO.
Código:

include <pic16f887.h>
/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */
code char at __CONFIG1L CONFIG1L = _PLLDIV_DIVIDE_BY_5__20MHZ_INPUT__1L &
_CPUDIV__OSC1_OSC2_SRC___1__96MHZ_PLL_SRC___2__1L & _USBPLL_CLOCK_SRC_FROM_96MHZ_PLL_2_1L;
code char at __CONFIG1H CONFIG1H = _OSC_HS__HS_PLL__USB_HS_1H & _FCMEN_ON_1H & _IESO_ON_1H;
code char at __CONFIG2L CONFIG2L = _PUT_ON_2L & _BODEN_ON_2L & _BODENV_4_2V_2L & _VREGEN_ON_2L;
code char at __CONFIG2H CONFIG2H = _WDT_DISABLED_CONTROLLED_2H & _WDTPS_1_32768_2H;
code char at __CONFIG3H CONFIG3H = _CCP2MUX_RC1_3H &
_PBADEN_PORTB_4_0__CONFIGURED_AS_DIGITAL_I_O_ON_RESET_3H & _LPT1OSC_ON_3H & _MCLRE_MCLR_OFF_RE3_ON_3H;
code char at __CONFIG4L CONFIG4L = _STVR_ON_4L & _LVP_OFF_4L & _ENHCPU_OFF_4L & _BACKBUG_OFF_4L;
code char at __CONFIG5L CONFIG5L = _CP_0_OFF_5L & _CP_1_OFF_5L & _CP_2_OFF_5L & _CP_3_OFF_5L;
code char at __CONFIG5H CONFIG5H = _CPB_OFF_5H;
code char at __CONFIG6L CONFIG6L = _WRT_0_OFF_6L & _WRT_1_OFF_6L & _WRT_2_OFF_6L & _WRT_3_OFF_6L;
code char at __CONFIG6H CONFIG6H = _WRTC_OFF_6H & _WRTB_OFF_6H;
code char at __CONFIG7L CONFIG7L = _EBTR_0_OFF_7L & _EBTR_1_OFF_7L & _EBTR_2_OFF_7L & _EBTR_3_OFF_7L;
code char at __CONFIG7H CONFIG7H = _EBTRB_OFF_7H;
tony8a87
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por Pikitin Dom 3 Abr 2011 - 19:19

Hola tony8a87.

Los fuses te los puede generar automaticamentre Piklab, mira en: Tools/generador_de_configuración

Creo que esos fuse que pusiste en el último post son para 18f.

Saludos.

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por tony8a87 Dom 3 Abr 2011 - 21:13

Pikitin escribió:Hola tony8a87.

Los fuses te los puede generar automaticamentre Piklab, mira en: Tools/generador_de_configuración

Creo que esos fuse que pusiste en el último post son para 18f.

Saludos.
Fijate que aun no he progresado con esto, tengo una duda es normal que aparece esto en la compilacion?

Código:
sdcc -mpic14 -p16f887 -V --debug -I/home/antonio8a87/Programacion/Micropics/ -c puertob.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -I"/home/antonio8a87/Programacion/Micropics/" -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=290 -DSDCC_REVISION=5416 -DSDCC_pic14 -D__pic14 -DSDCC_PROCESSOR="16f887" -isystem "/usr/bin/../share/sdcc/include/pic14" -isystem "/usr/share/sdcc/include/pic14" -isystem "/usr/bin/../share/sdcc/include" -isystem "/usr/share/sdcc/include" -isystem "/usr/bin/../share/sdcc/include/pic" -isystem "/usr/share/sdcc/include/pic" "puertob.c" 
sdcc -mpic14 -p16f887 -V --debug -Wl-c -Wl-m -I/home/antonio8a87/Programacion/Micropics/ -opuertob.hex puertob.o
using default linker script "/usr/share/gputils/lkr/16f887.lkr"
+ "/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib" -I"/usr/share/sdcc/lib" -I"/usr/bin/../share/sdcc/lib/pic" -I"/usr/share/sdcc/lib/pic" -c -m -w -r -o puertob.hex puertob.o libsdcc.lib pic16f887.lib 
*** Success ***
Parsing COFF file: /home/antonio8a87/Programacion/Micropics/puertob.cof
Device name: "16F887"

Me podrian guiar en que fuses debo ocupar, sera que estoy cometiendo un error desde el circuito electrico?
Saludos!!!! Shocked
tony8a87
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por maigke Lun 4 Abr 2011 - 4:47

Saludos compañero, en efecto la palabra de configuracion que coloque son para PIC18 pero tu usas PIC16, así que no son válidos, mmm contestame las siguientes preguntas para que te podamos ayudar mas

¿que oscilador vas a usar, interno, externo?, si es externo ¿Cristal o RC?, ¿que velocidad?
Tu perro guardián ¿Habilitado o deshabilitado?
El temporizado de arranque ¿Habilitado o deshabilitado?
Pin de Reset Maestro (el pin 1) ¿Habilitado o deshabilitado?
Lo mismo para la proteccion de la memoria de datos y la de programa
La detección de Brown out
El bit IESO, el bit de monitoreo de falla de reloj
¿vas a programar a bajo voltaje?
supongo que la depuracion en circuito no estará habilitada
¿cual sería el voltaje de reinicio?

Te coloco un breve ejemplo tal y como pikitin lo comenta


Hola tony8a87.

Los fuses te los puede generar automaticamentre Piklab, mira en: Tools/generador_de_configuración

Creo que esos fuse que pusiste en el último post son para 18f.

Saludos.

Código:

typedef unsigned int word;
word at _CONFIG1 CONFIG1 = _HS_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOR_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF;
word at _CONFIG2 CONFIG2 = _BOR40V & _WRT_OFF;

Aqui tenemos la siguiente configuracion
Reloj de alta velocidad, osea mayor a 4Mhz
vas a tener el reset maestro hablitado, sin ningun tipo de proteccion de memoria de datos ni de programa
El perro guardian, el bit IESO, el depurador en circuito, y el monitor de falla de reloj están deshabilitados
Esta habilitado el temporizador de inicio o arranque y el la deteccion por bajo voltaje, y a su vez, un voltaje de 4.0V es motivo de reset. esto ultimo en la CONFIG2 _BOR40V

Espero te sirva como guía.
Saludos
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por tony8a87 Lun 4 Abr 2011 - 16:04

Pues pienso prender un led y apagarlo durante unos segundos para empezar, el cristal que usare sera de 4MHz, no tengo idea con respecto del perro guardian si lo voy a utilizar ni lo del voltaje de reinicio. Anteriormente usaba css (#fuses XT,NOWDT,NOPROTECT,PUT ) y no me pedia tantas condiciones para hechar a andar el pic, el monitoreo del rejol como se cuando debo usarlo, eso de los fuses es algo dificil para mi, si alguien me pudiera compartir un simple ejemplo de prender un led usando un pic16f887 por el pin b0 y hex para saber si mi programador funciona bien. Y una ayuda grande a entender los fuses. Saludos!!!!

esto hay en el archivo delay.h
Código:

#ifndef FREQ
    #define FREQ 4000
#endif

#define escala_ms  FREQ/4000;

void pausa( unsigned char pausa_ciclos )            //tiempo = (4 * pausa_ciclos + 1)µs , para 4MHz ;
{    pausa_ciclos;                                  // pausa_ciclos debe ser >=2
    _asm                                            // "pausa_ciclos" ya está en w
    sublw 1 
    bucle_pausa:
    addlw 1
    btfss STATUS,0
    goto bucle_pausa
    _endasm;
}

void delay_ms( unsigned int valor_ms )              // delay en milisegundos
{
    valor_ms = valor_ms * escala_ms;
    while (valor_ms > 0 )
    {
        pausa(247);
        valor_ms--;
    }
}
tony8a87
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por maigke Lun 4 Abr 2011 - 20:41

Ok, espero que este código te sirva y sea lo suficientemente sencillo

Código:

/* ----------------------------------------------------------------------- */
/* Plantilla generada por Piklab */
#include <pic16f887.h>
#include <delay.h>
/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */
typedef unsigned int word;
word at _CONFIG1 CONFIG1 = _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF;
word at _CONFIG2 CONFIG2 = _BOR40V & _WRT_OFF;

#define LED RB0
#define ON   1
#define OFF   0


void isr() interrupt 0 {                                                                                                                                      /* rutina de servicio de interrupciones */
    /* << agregue el código de interrupción >> */
}


void main() {
   PORTB=0;  //Se limpian los latches
   ANSEL=0;  //revisa el datasheet en la pagina 40
   TRISB0=0; //Se configura el pin RB0 como salida
   while(1)
   {
   LED = ON;
   delay_ms(1000);
   LED = OFF;
   delay_ms(1000);
      }
}


Saludos de nuevo
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por maigke Lun 4 Abr 2011 - 20:52

Bueno espero no te desilusione la cuestión de los fuses, pero te comento que una vez que les agarras la onda es muy simple, ya que sdcc te forza a que leas el datasheet.

CCS no te pide tantos datos por que algunos de ellos los pone por defecto, pero si inicializas el wizard, podrás ver que para la palabra de configuración, es la misma situación que SDCC.



maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por tony8a87 Lun 4 Abr 2011 - 21:02

Enterado, lo hechare a andar y les dare mis resultados.
Gracias!!!

Malas noticias aun nada pero extrañamente en el pin RB0 tiene voltajes de .35 y .25 como si fuera alto y bajo (usando delay_ms(500) ), si le pongo delay_ms(1000) no hace nada, y en la simulación son altos y bajos muy muy rapidos como si se desbordara. Tendre problemas con el circuito electrico o me aconsejan ocupar otro pic? jajaja.

Saludos!!!!
tony8a87
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por maigke Miér 6 Abr 2011 - 15:20

hola una duda
¿modificaste la el #define para la rutina delay.h?

#define FREQ 4000 si no mal recuerdo eso tiene, y vas a usar un cristal de 20Mhz,
saludos
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por tony8a87 Miér 6 Abr 2011 - 15:29

maigke escribió:hola una duda
¿modificaste la el #define para la rutina delay.h?

#define FREQ 4000 si no mal recuerdo eso tiene, y vas a usar un cristal de 20Mhz,
saludos


pues el codigo es tal cual como esta escrito en mas arriba la rutina de delay.h, el cristal que usare es de 4Mhz, es necesario modificar algo en esa libreria?
tony8a87
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por maigke Miér 6 Abr 2011 - 23:09

Raro lo acabo de probar en isis y funciona, bueno hay que recordar que es simulador, y lamentablemente no tengo ese micro disponible, puedes postear tu codigo tal cual?
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por tony8a87 Dom 10 Abr 2011 - 21:06

Cuates ya heche a andar el programa, tube que comprar un pic 16f877a ya que no podia hechar a andar el pic anterior. ya prendo un led por fin jajaja el codigo que use es el siguiente:
Código:

* ----------------------------------------------------------------------- */
/* Plantilla generada por Piklab */
#include <pic/pic16f877a.h>
/* ----------------------------------------------------------------------- */
/* Bits de configuración: adapte los parámetros a su necesidad */
typedef unsigned int word;

word at 0x2007 CONFIG = _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF;
void delay_ms(long ms){
    long i;
    while(ms--){
        for(i=0;i<330;i++)
        ;
    }
}
void main() {
  PORTB=0;  //Se limpian los latches
  TRISB=0; //Se configura el pin RB0 como salida
  while(1)
  {
  RB0=1;
  delay_ms(500);
  RB0=0;
  delay_ms(500);
      }


}

Tengo dos detalles que no me agradan el primero es que no tarda en realidad 500milisegundos tarda como 3.56 segundos y la otra es que si utilizo la libreria delay.h creada por ustedes solo me deja el led ensendido y no pasa al estado en bajo.

Lo unico que me alegra hasta el momento es que por fin ya vi funcionar el programa con puro software libre y hardware libre, una aportación que quiero realizar es que utilizar el programador picprogusb si funciona con la compilación de sdcc y si eres de mexico y quieres dicho dispositivo y no lo quieres armar el usbpicprog puedes comprarlo con http://www.puntoflotante.net/ les funciona de maravilla.

Favor de ayudarme para solucionar esos detalles!!!!!
tony8a87
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por tony8a87 Jue 14 Abr 2011 - 2:57

maigke escribió:Raro lo acabo de probar en isis y funciona, bueno hay que recordar que es simulador, y lamentablemente no tengo ese micro disponible, puedes postear tu codigo tal cual?

Hola porfin pude ocupar la libreria que tienen de delay nada mas que tuve que quitar esta linea
#define escala_ms FREQ/4000;

y en la función de delay_ms defini int escala_ms=1 porque eso me da si ocupo ese cristal de 4Mhz, por alguna extraña razón como que no me funciona con esa linea que elimine y estaba pensado en ningun lugar se define que tipo de variable que es y si fuera un fraccional que pasa ahi?
¿puedo definir
float escala_ms=FREQ/4000 ?
otra cosa que pensaba es ocupar un case con las cristales mas comunes de hecho pues
tambien tube que modificar esto void pausa( unsigned int pausa_ciclos ) antes era un char pausa_ciclos y no me funcionaba tampoco asi.

Quedo en espera de tus cometarios, dejo el codigo final

Código:
#ifndef FREQ

#define FREQ 4000

#endif



//#define escala_ms  FREQ/4000;



void pausa( unsigned int pausa_ciclos )            //tiempo = (4 * pausa_ciclos + 1)µs , para 4MHz ;

{    pausa_ciclos;                                  // pausa_ciclos debe ser >=2

    _asm                                            // "pausa_ciclos" ya está en w

    sublw 1 

    bucle_pausa:

    addlw 1

    btfss STATUS,0

    goto bucle_pausa

    _endasm;

}



void delay_ms( unsigned int valor_ms )              // delay en milisegundos

{

int escala_ms=1;

    valor_ms = valor_ms * escala_ms;

    while (valor_ms > 0 )

    {

        pausa(247);

        valor_ms--;

    }

}
tony8a87
tony8a87
Participante Activo
Participante Activo

Mensajes : 34
Fecha de inscripción : 10/08/2010

Volver arriba Ir abajo

AYUDA CON LOS FUSES DE SDCC Empty Re: AYUDA CON LOS FUSES DE SDCC

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.