TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: SimonMG en 14 de Noviembre de 2006, 17:34:46

Título: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 14 de Noviembre de 2006, 17:34:46
Amios del foro que utilizan Pikdev, creo que ya es hora que nos pongamos serios y dominemos este Cpik, (el Cpik esta haciendo un saco con nosotros :? :? :?) mi aporte por ahora es el manual del Cpik que suminista su creador. por ahora seguire experimentando y buscando en google saludos

Título: Re: Aprendamos a usar e Cpik
Publicado por: SimonMG en 14 de Noviembre de 2006, 18:34:56
Otra cosa que se me olvidava, a todos los amigos del foro que puedan colavorar con los .h de los PIC se los agraeceria mucho, o decirme donde puedo descargarlos, tienen prioridad el 18F452.h, 18F2550.h  :D tambien estoy trabajando en paralelo con el SDCC, en la pagina dice que soporta el 18F452, con este compilador estoy mas adelatado, ej: despliego un menu por el terminal, es un poco mas complicado pero le voy dando  :z) :z)

gracias y saludos
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 14 de Noviembre de 2006, 19:26:50
Solucionado :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

en esta paguina http://www.koders.com/c/fid64A49644C56FECACCFBD0E37B53B6E9FD893EAFB.aspx estan todas la librerias nesesarias  :mrgreen: :mrgreen: :mrgreen: :mrgreen:

claro el Cpik esta en etapa alpha osea muy verde prefiero usar el SDCC que esta mas maduro.

muy pronto pongo un pequeño tuto de como generar nuestros hex desde C en linux  :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-)  (disculpen por los muñequitos pero estaba buscando esto por dos meses)
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 14 de Noviembre de 2006, 21:38:39
otra vez yo  :lol: :lol: :lol: jajaja, aqui les dejo unas librerias para que me ayuden a resolver esto de C no se mucho pero si me pueden ayudar a armar un programa sencillo, como por ej encender un led seria de mucha ayuda, porque la verdad no encuentro el registro de PRTB y demas en el 18F452.h


gracias y saludos
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: navaismo en 15 de Noviembre de 2006, 00:31:45
Hola gracias por pasar esos links si que me seran utiles, con lo de los tutoriales podrias hacer videotutoriales, como herramienta te recomiendo el WINK es muy bueno aunque existn el vnc2swf y el xvidcap ambos no he podido compilarlos por falta de librerias pero prefiero el wink.

Haber si nos ponemos de acuerdo y empezamos desde la compilacion del programa a usar hasta la programacion del PIC.

Como dato interesante que por cierto me paso OLOTIL, en Linux los AVR's estan mejor soportados que un PIC, estoy empezando a irme hacia alla ya que hay un buen de info de como compilar los AVR's en Linux

Aqui el link TUXGraphics & los AVR's (http://tuxgraphics.org/electronics/)
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: Zaphyrus en 15 de Noviembre de 2006, 10:48:44
Hola, me interesa el tema del SDCC pero por lo visto el soporte para PICs está medio verde todavía. En esta página siempre aparecen noticias sobre el SDCC (ingles):

http://mcu-programming.blogspot.com/

Con respecto al AVR con el GCC, este port del compilador existe porque los micros AVR de Atmel tiene una arquitectura RISC clásica y por lo tanto es posible usar al compilador GCC adaptados para ellos. El problemas con los PIC16 y PIC18 es que su arquitectura no es 100% RISC ya que tiene bancos de registros mapeados en memoria de datos en vez de tenerlos como registros de acceso exclusivo y ademas tienen solo un acumulador. Es decir, los PICs se llaman máquinas acumuladoras y los 100% RISC se llaman máquinas de carga/almacenamiento y este aqui la diferencia.
Si han podido observar los dsPIC y PIC24 tiene el compilador (de Microchip) basados en el GCC porque estos sí son máquinas de carga/almacenamiento.

Saludos.

Martín

PD: Me interesan los AVR por su arquitectura y porque disponen de compiladores libres que se pueden usar en Linux pero en Argentina es imposibles encontrarlos. Acá somos PICeros a muerte y no hay posibilidad que los AVR lleguén en forma masiva (en Mar del Plata menos)

Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 15 de Noviembre de 2006, 19:10:42
Bien, entonces empecemos: parte 1 (instalación del SDCC) :mrgreen:

1._ El editor de texto: Cualquiera (yo recomiendo el Gedit) :mrgreen: :mrgreen:

2._ instalar el GPUTILS (secesario para que funcione el SDCC)
      Si utilizamos una distribusión basada en debian...

      sudo apt-get install gptutils
     
      otras distribuciones:

      https://sourceforge.net/project/showfiles.php?group_id=41924 ayi se encuentran los paqutes rpms

3._ Descargamos el SDCC

      descargamos la versión 2.50 de aqui http://prdownloads.sourceforge.net/sdcc/sdcc-2.5.0-i386-unknown-linux2.2.tar.gz
      Abrimos la terminal o konsole segun su escritorio y entramos como usuario root

     $ sudo -s
     
      descomprimir

     # tar vzxf sdcc-2.5.0-i386-unknown-linux2.2.tar.gz

      entrar el la carpeta
 
     # cd sdcc

     copiar los archivos en la carpeta  /usr/local

     # cp -r * /usr/local

     Bajar los ejecutables de la versión 2.5.1 http://www.iearobotics.com/talleres/uca-2005/sesion-3/linux/download/sdcc-2.5.1-bin.tgz

     Descomprimir, entrar en el directorio y copiar los ejecutables en /usr/local/bin, como root

     # tar vzxf sdcc-2.5.1-bin.tgz

     # cd sdcc-2.5.1-bin

     # cp * /usr/local/bin

4._  Desde nuestro home, ejecutar los siguiente: (como usuario normal)

     $ sdcc -v

      Aparecera esto:

SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.5.1 #1056 (Jul 12 2005) (UNIX)
(significa que hemos tenido exito  :-/ :-/ :-/)

Eso es todo ya tenemos instalado el SDCC en mi proximo mensaje explicare como se hace el Makefile que recomienda SDCC (para no complicarnos con la terminal con tantas palabras), ademas de elaborar nuestro priemer programa y posteriormente trabajaremos con RS232, y mas adelante trabajaremos con el ADC (cuando lo decifre  :D :D), utilizaremos las librerias del PIC 16F877 que es perfectamente compatible con el PIC 16F876a a 20Mhz y 4Mhz

saludos y gracias por su apollo y los link  :mrgreen: :mrgreen: :mrgreen:

   
PD: Revisen Primero con $ sudo apt-get install sdcc (porciacaso lo tengan es su repositorios y no vallan a perder tiempo :mrgreen: :mrgreen: :mrgreen:)


     
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 15 de Noviembre de 2006, 22:40:40
Ahora empieza lo bueno.....

El Makefile: llevo 3 años trabajando con linux, todavia no se su definición correcta pero si me ahorra vastante al compilar un programa, y es perfectamente adactable a cualquier programa siempre y cuando cumpla con las normas y el hilo del programa. aqui va

# **************************************************************************
# Fichero makefile.
# --------------------------------------------------------------------------
# Licencia GPL. Simón Malavé
# --------------------------------------------------------------------------
#
#***************************************************************************

#-- Compilador 1
CC = sdcc

#-- En la version 2.5 del SDCC el pic 16f876a todavi no esta 2._
#-- soportado. Sin embargo, es casi equivalente al 16f877
CFLAGS = -mpic14 -p16f877

#-- Nombre del fichero 3
NAME1=ledon

all: $(NAME1).hex


#--------------------
#- LIMPIEZA 4
#--------------------
clean:
     rm -f *.o *.hex *.lst *.p *.d *.asm *.cod

#-----------------------
# REGLAS GENERICAS 5
#-----------------------
#-- Obtencion de los ficheros objeto .o
.c.o:
           $(CC) -S $(CFLAGS) $< 
           gpasm -c $*.asm
               
#-- Obtencion de los ficheros ejecutables 6
%.hex : %.o; gplink -o $@ -a inhx32 $<

#--*************************************************************************

no es mas que parametros de la compilación del programa... prefiero ejecutar $ make  :mrgreen: que ejecutar $ sdcc  CFLAGS = -mpic14 -p16f877.....  :shock: :shock: :shock:

ahora vamos a nalizarlo por orden:

1._ Define el compilador sdcc

2._ selección del PIC o microcontrolador a utilizar -mpic14 (16f877, ect...) -mpic16(18fxxx, todavia esta muy verde)

3._ Nombre del archivo, se puede modificar por el nombre del archivo.c que esta dentro de la carpeta excluyendo el .c

4._ Limpieza de archivos, no es mas que sustituir los archivos si hay modificasiones

5._ Reglas genericas del compilador

6._ Finalmente obtención de los hex, el gplink busca el .h correspondiente al PIC pero igual se debe incluir la libreria del PIC en el .c

Entonces que prefieren escribir todo esto en la terminal cada vez que terminemos un proyecto o utilizar un makefile  :D :D :D creo que es obia la respuesta  :mrgreen: :mrgreen: :mrgreen:

Aqui les dejo el fichero makefile para que lo descargen, en el proxiimo mensaje comenzaremos con activar las salidas del PIC
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: navaismo en 16 de Noviembre de 2006, 04:19:13
Oye Ktechlab tiene integracion con el sdcc, no seria mejor usar un IDE amigable como lo es el Ktechlab???

Voy a intentar integralo haber que pasa y te cuento
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: navaismo en 17 de Noviembre de 2006, 13:28:46
Pues si se integra bien ahora, tengo que encontrar su archivo de ayuda o manula ya que lo que escribo nada compila. o no encuentra los includes del pic.

Asi que te tardare mas en contarles como compilar con el sdcc en ktechlab
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 17 de Noviembre de 2006, 14:02:54
Acuerdate que todos los include tienen que estar en la misma carpeta donde esta l archivo.c, creo que esta tarde o en la noche anexo el uso de el rs232 con el SDCC, ya esta mas claro el Cpik :-/ :-/ :-/
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: navaismo en 19 de Noviembre de 2006, 00:31:32
Oye por mas que busco  los archivos include no los encuentro, no se supone los copie a /usr/local/. Pues no veo nada.

Y en las carpetas que descomprimi para copiar solo veo headers files de PIC18's no de 16's. Alguna idea, porque pinta muy bien eso de programar en C con el Ktechlab. Lo has intentado?



mira te dejo los codigos y los errores que me genera al compilar con el sdcc en ktechlab y piklab, recurro a ti porque creo que ya has compilado en SDCC

en KTECHLAB
Código: [Seleccionar]
#include "p18f452.h"

int count;

void main(void) {

        TRISA = 0;
        count = 0;
        while(1) {
                PORTA = count;
                count ++;
        }

}
Building: /tmp/kde-root/ktechlabbvnDNa.hex
sdcc --debug -S -mpic16 -p18f452 /usr/local/share/sdcc/include/pic16/count.c -o /tmp/kde-root/ktechlab9I4MEb.asm
Processor: 18f452
/usr/local/share/sdcc/include/pic16/count.c:1:21:
p18f452.h: No such file or directory
/usr/local/share/sdcc/include/pic16/count.c:7: error 20: Undefined identifier 'TRISA'
/usr/local/share/sdcc/include/pic16/count.c:10: error 20: Undefined identifier 'PORTA'
-:0: error 103: code not generated for 'main' due to previous errors
*** Compilation failed ***

y ahora en le PIKLAB

Código: [Seleccionar]
#include "p18f452.h"

int count;

void main(void) {

        TRISA = 0;
        count = 0;
        while(1) {
                PORTA = count;
                count ++;
        }

}

sdcc -mpic16 -p18f452 -V --debug -I/usr/local/share/sdcc/include/pic16/ -c count.c
Processor: 18f452
count.c:1: p18f452.h: No such file or directory
count.c:7: Undefined identifier 'TRISA'
count.c:10: Undefined identifier 'PORTA'
code not generated for 'main' due to previous errors
+ "/usr/local/bin/sdcpp" -nostdinc -Wall -std=c99 -DSDCC=1 -I"/usr/local/share/sdcc/include/pic16/" -Dpic18f452 -D__18f452 -DSTACK_MODEL_SMALL -DSDCC_MODEL_SMALL -DSDCC_pic16 -D__pic16 -I"/usr/local/bin/../share/sdcc/include/pic16" -I"/usr/local/share/sdcc/include/pic16" -I"/usr/local/share/sdcc/include/pic16/"  "count.c"
*** Exited with status: 1 ***
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: navaismo en 21 de Noviembre de 2006, 14:21:37
Bueno parte ha sido solucionado en lugar de poner include "p18f452.h" debio ser INCLUDE <pic18f452.h> y ya compila pero solo el ASM aun no logro sacar el HEX, y sigo sin poder usar un pic de la familia 16F.

estos son los errores que me da al querer generar el HEX
Código: [Seleccionar]

Building: /tmp/kde-root/ktechlabUqsYIb.hex
sdcc --debug -S -mpic16 -p18f452 /usr/local/share/sdcc/include/pic16/count.c -o /tmp/kde-root/ktechlabsJiLXa.asm
Processor: 18f452
*** Compilation successful ***

gpasm --object --output /tmp/kde-root/ktechlabVHQWga.o --hex-format inhx32 --warning 0 --ignore-case --force-list /tmp/kde-root/ktechlabsJiLXa.asm
/tmp/kde-root/ktechlabsJiLXa.asm:10:Warning [230] directive ignored when debug info is disabled
/tmp/kde-root/ktechlabsJiLXa.asm:188:Warning [230] directive ignored when debug info is disabled
/tmp/kde-root/ktechlabsJiLXa.asm:191:Warning [230] directive ignored when debug info is disabled
/tmp/kde-root/ktechlabsJiLXa.asm:197:Warning [230] directive ignored when debug info is disabled
/tmp/kde-root/ktechlabsJiLXa.asm:201:Warning [230] directive ignored when debug info is disabled
*** Assembly successful ***

gplink --hex-format inhx32 --map --output /tmp/kde-root/ktechlabUqsYIb.hex /tmp/kde-root/ktechlabVHQWga.o
message: using default linker script "/usr/share/gputils/lkr/18f452.lkr"
error: missing definition for symbol "_PORTA", required by "/tmp/kde-root/ktechlabVHQWga.o"
error: missing definition for symbol "_TRISA", required by "/tmp/kde-root/ktechlabVHQWga.o"
*** Linking failed ***

y para el PIKLab
Código: [Seleccionar]


sdcc -mpic16 -p18f452 -V --debug -I/usr/local/share/sdcc/include/ -c pic16/count.c
Processor: 18f452
+ "/usr/local/bin/sdcpp" -nostdinc -Wall -std=c99 -DSDCC=1 -I"/usr/local/share/sdcc/include/" -Dpic18f452 -D__18f452 -DSTACK_MODEL_SMALL -DSDCC_MODEL_SMALL -DSDCC_pic16 -D__pic16 -I"/usr/local/bin/../share/sdcc/include/pic16" -I"/usr/local/share/sdcc/include/pic16" -I"/usr/local/share/sdcc/include/"  "pic16/count.c"
+ "gpasm" -DSDCC_MODEL_SMALL -Dpic18f452 -D__18F452 -DSTACK_MODEL_SMALL -g -c "count.asm" -o "count.o"
sdcc -mpic16 -p18f452 -V --debug -Wl-c -o count.hex pic16/count.o
Processor: 18f452
crt0i.o: No such file or directory
+ "gplink" -I"/usr/local/bin/../share/sdcc/lib/pic16" -I"/usr/local/share/sdcc/lib/pic16"  -c  -o count  crt0i.o pic16/count.o  pic18f452.lib libsdcc.lib
*** Exited with status: 1 ***

 :? Halo SIMONMG no me puedes echar una mano, con lo de las librerias 16F
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 21 de Noviembre de 2006, 22:00:13
1._ El .hex no lo pone porque te faltan los comandos para generar el .hex

#-- Obtencion de los ficheros ejecutables 6
%.hex : %.o; gplink -o $@ -a inhx32 $<

los IDE que utilizas no hace referencia a estos comandos por eso yo recomiendo que utilises el makefile porque asi tienes control de TODO...

2._ con los 18F toy muy verde pero con el 16F es mas sencillo e aqui un ejemplo sencillo

/*************************************************************************** */
/* ledon.c                                                                                                                       */
/*---------------------------------------------------------------------------*/
/* Ejemplo para el Foro TODOPIC                                              */
/*---------------------------------------------------------------------------*/
/* se prende el led el el PB7                                                */
/*---------------------------------------------------------------------------*/
/*  Simón Malavé                                                             */
/*  SEMG_7000@hotmail.com                                                    */
/*---------------------------------------------------------------------------*/
/*  LICENCIA GPL                                                             */
/*****************************************************************************/


//-- Especificar el pic a emplear
#define __16f877
#include "pic16f877.h"

//-- Definiciones
#define LED       0x80     // Pin del led

//----------------------------
//- Comienzo del programa 
//----------------------------

void main(void)
{
  //-- Configurar Puerto B como salida
  TRISB=0x00;

  //-- Activar el led
  PORTB=LED;
 
  //-- Bucle infinito
  while(1);
}

RECUERDA QUE LAS LIBRERIAS DEBEN ESTAR EN LA MISMA CARPETA QUE EL CODIGO  :mrgreen: :mrgreen: :mrgreen:

Otra cosa DEJA A WINDOW$ ATRAS linux es otra cosa juega con Terminal/Konsole pa que vallas agarrando el hilo asi tienes mas control de tu sistema y asi experimentaras la verdsadera libertad de linux

intenta otra vez con el 18F pero utiliza el makefile solo tienes que cambiar unas lineas
en donde va CFLAGS = -mpic14 -p16f877 ---> escribe CFLAGS = -mpic16 -p18f452

y en NAME1=ledon ---> NAME1=el nombre del archivo.c

si tienes el GPSIM ejecutas $ gpsim -pp16f877


por mi parte me voy a poner al dia ya que ahora agarro vacasión (las clases me tienen LOCO  :x :x :x :x :x)


Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: navaismo en 21 de Noviembre de 2006, 22:05:05
Gracias, voy a intentarlo y si no pues seguire con el PBP :D

saludos
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 21 de Noviembre de 2006, 22:11:54
otra cosa muy importante la verdad que nunca entendi la libreria del PIC18F452  :? :? :? 
la mayoria de las librerias de los PIC son asi, si se logra desifrarlas podemos darle play al ADC y el RS232 con el 18F, de todas maneras dejen que me desaoge un poco con las clases y les explico la cocunicasión con rs232 con el 16F877 = 16F876 (!!!!PUBLICIDAD:compatible con la Sboard Publicada en el foro de proyectos!!!!)
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 22 de Noviembre de 2006, 23:17:56
les presento una nueva libreria para las cominicasiones rs232 con el SDCC sci.h en el estan todas las configurasiones para la comunicasión

/*************************************************************************** */
/* sci.h                                                                     */
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/* Rutinas para manejo del puerto serie del PIC                              */
/* Comunicaciones a 9600 baudios (Configuracion 8N1)                         */
/*---------------------------------------------------------------------------*/
/*  Simón Malavé   SEMG_7000@hotmail.com                                     */
/*---------------------------------------------------------------------------*/
/*  LICENCIA GPL                                                             */
/*****************************************************************************/

/****************************************************/
/* Configurar el puerto serie a N81 y 9600 Baudios  */
/****************************************************/
void sci_conf(void)
{
  SPBRG = 0x19;  //-- 9600 baudios (con cristal de 4MHz) ó ----> 0x81 9600 baudios a 20Mhz
  TXSTA = 0x24;  //-- Configurar transmisor
  RCSTA = 0x90;  //-- Configurar receptor
 
}

/******************************************/
/* Recibir un caracter por el SCI         */
/*----------------------------------------*/
/* DEVUELVE:                              */
/*   -Caracter recibido                   */
/******************************************/
unsigned char sci_read(void)
{
  //-- Eserar hasta que llegue el dato
  while (!RCIF);
   
  return RCREG;
}

/*****************************************/
/* Transmitir un caracter por el SCI     */
/*---------------------------------------*/
/* ENTRADAS:                             */
/*   -car: Caracter a enviar             */
/*****************************************/
void sci_write(unsigned char car)
{
  //-- Esperar a que Flag de lista para transmitir se active
  while (!TXIF);
   
  //-- Hacer la transmision
  TXREG=car;
}

/*--------------------------------------------------*/
/* Enviar una cadena por el puerto serie            */
/* NOTA: con esta funcion solo se pueden enviar     */
/* cadenas constantes y NO un puntero a una cadena  */
/* Observar que se usa el atributo __code           */
/* No esta soluconado todavia en el SDCC 2.5.1      */
/* Ejemplo de uso:                                  */
/*    sci_cad("Hola");                              */
/*--------------------------------------------------*/
void sci_cad(__code unsigned char *cad)
{
  unsigned char i=0;
 
  while (cad!=0) {
    sci_write(cad);
    i++;
  } 
}

/*---------------------------------------------------------*/
/* Envio de una cadena por el puerto serie                 */
/* Con esta funcion si podemos enviar punteros a cadenas,  */
/* pero no cadenas constantes                              */
/* Ejemplo de uso:                                         */
/*     sci_cad2(mi_cadena);                                */
/*---------------------------------------------------------*/
void sci_cad2(unsigned char *cad)
{
  unsigned char i=0;
 
  while (cad!=0) {
    sci_write(cad);
    i++;
  } 
}


creo que esta muy claro de todas maneras les dejo un ejemplo de como enviar una cadena 
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 22 de Noviembre de 2006, 23:23:57
ahora si!! un pequeño ejemplo de como enviar una cadena por el puerto serial

/*************************************************************************** */
/* rs232_c.c                                                       */
/*---------------------------------------------------------------------------*/
/* Enviar una cadena por el puerto serie cada vez que se recibe un caracter  */
/*---------------------------------------------------------------------------*/
/*  Simón Malavé SEMG_7000@hotmail.com                                     */
/*---------------------------------------------------------------------------*/
/*  LICENCIA GPL                                                             */
/*****************************************************************************/

//-- Especificar el pic a emplear
#define __16f877
#include "pic16f877.h"

//-- Se usa la libreria de comunicaciones serie
#include "sci.h"


/*********************************/
/* Programa principal            */
/*********************************/
void main(void)
{
 
  //-- Configurar el puerto B
  //-- Todos los pines de entrada, salvo RB1 de salida, que es
  //-- donde esta el led
  TRISB=0xFD;
 
  //-- Configurar las comunicaciones serie
  sci_conf();
 
  //-- Bucle infinito
  for (;;) {
    //-- Esperar a que llegue dato
    sci_read();
   
    //-- Cambiar el led de estado
    PORTB^=0x02;
   
    //-- Enviar la cadena por el puerto serie
    sci_cad("Hola como estas...");
   
   
  }

}

el programa esta claro esto nos servira para desarrollar proyectos mas completos como un pequeño servidor para encender y apagar leds :D
todas las librerias deben estar dentro de la carpeta!!!!!!
se me olvidava les dejo un .zip con todo incluido
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: navaismo en 23 de Noviembre de 2006, 04:15:32
Hola gracias lo voy a probar y te cuento
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 03 de Diciembre de 2006, 12:33:34
Buscando por la red (DIOS MIO SI QUE ES GRANDE) encontre un ejemplo de lectura y escritura de la eprom interna del PIC con un 18F :-/ :-/ :-/ :-/

aqui va:

// read and write eeprom of PIC18F2550 (and 18F2455, 18F4455, 18F4550)
// EEPROM size is 256 bytes
// (c) Raphael Wimmer. Licensed under GNU GPL v2 or higher

#include <pic18fregs.h>
#include <stdio.h>
#include <usart.h>

#pragma stack 0x300 0xff // set 64 byte stack at 0x300, needed by sdcc


void ee_write_byte(unsigned char address, unsigned char *_data){

    EEDATA = *_data;
    EEADR = address;
    // start write sequence as described in datasheet, page 91
    EECON1bits.EEPGD = 0;
    EECON1bits.CFGS = 0;
    EECON1bits.WREN = 1; // enable writes to data EEPROM
    INTCONbits.GIE = 0;  // disable interrupts
    EECON2 = 0x55;
    EECON2 = 0x0AA;
    EECON1bits.WR = 1;   // start writing
    while(EECON1bits.WR){
        _asm nop _endasm;}
    if(EECON1bits.WRERR){
        printf("ERROR: writing to EEPROM failed!\n");
    }
    EECON1bits.WREN = 0;
    INTCONbits.GIE = 1;  // enable interrupts
}

void ee_read_byte(unsigned char address, unsigned char *_data){
    EEADR = address;
    EECON1bits.CFGS = 0;
    EECON1bits.EEPGD = 0;
    EECON1bits.RD = 1;
    *_data = EEDATA;
}

void initUsart()
{
    usart_open(    // Use USART library to initialise the hardware
            USART_TX_INT_OFF
            & USART_RX_INT_OFF
            & USART_BRGH_HIGH
            & USART_ASYNCH_MODE
            & USART_EIGHT_BIT,
            10                      // '10' = 115200 Baud with 20 MHz oscillator and BRGH=1
            );
    stdout = STREAM_USART;
}



// very simple example. use on an erased eeprom

void main(){
    char save_me = 'x';
    char from_eeprom;

    initUsart();
   
    printf("EEPROM-Demo\n");
    ee_read_byte(0x00, &from_eeprom);
    printf("Char read from 0x00: %c\n", from_eeprom);
   
    ee_write_byte(0x00, &save_me);
    printf("Char written to 0x00: %c\n", save_me);
   
    ee_read_byte(0x00, &from_eeprom);
    printf("Char read from 0x00: %c\n\n", from_eeprom);
}

Es facil de entender se puede dividir el programa para generar una libreria de lectura y escritura de eprom otra cosa que me parecio extrana es que el autor señala que este comando debe ir por defecto: #pragma stack 0x300 0xff // set 64 byte stack at 0x300, needed by sdcc aqui termina, el programa utiliza otra libreria de comunicasión serial que se encuentra en la carpeta de sdcc

saludos y suerte  :mrgreen: :mrgreen: :mrgreen:




Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 03 de Diciembre de 2006, 12:45:17
El programa que e publicado enteriormente aparte de su utilidad da luz de como se puede utilizar las librerias de los 18F que tan complicadas son, !se estan aclarando!!
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 03 de Diciembre de 2006, 19:18:35
Una lamentable noticia, revisando por el foro de sdcc parece ser que los 18F solo funcionan con la versión 2.6 una mala noticia para los que utilizamos distribuciones de linux basadas en debian ya que los repositorios todavia no ponen la v2.5 como estable, quienes puedan instalar el sdcc v2.6 pueden utilizar los pic 18f, otra cosa me gustaria que si se puede me muestren un ejemplo sencillo en C18 de MPlab para el pic 18F452 por ejemplo la comuncación rs232 o encender unos led, les agradeceria mucho es solo para comparar.

gracias y saludos
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 07 de Diciembre de 2006, 19:08:38
PORFINNNNNNNNN :-/ :-/ :-/ :-/ :-/ :-/ :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Pude hacer un programa en Cpik, tenia problemas con las configurasiones rs232 pero ya las resolvi

 :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ aqui va....

#include <macro.h>
#include <rs232.h>
#include <p18f452.h>

void rs232_init()
{
   TRISC |= 0b10000000 ; // set bit 7 (input)
   // setbit(TRISC,7) ;
   TRISC &= 0b10111111 ;  // clear bit 6 (output)
   // clrbit(TRISC,6) ;
   
   //  0b00100100 ; // tx enabled, hi speed
   TXSTA =  bit(TXEN) | bit(BRGH) ;
   
   // 0b10010000 ; // serial port enabled, 8 bits,
   // continuous rx enabled, no it
   RCSTA =  bit(SPEN) | bit(CREN) ; 
   
   //  creo que 0x86 es 9600b a 20Mhz
   SPBRG =  103 ; // este es a 9600 @ 16Mhz
   // clear PIE1<4> = disable transmit it   
   // clear PIE1<5> = disable receive it
   PIE1 &=  0b11001111 ;
}

void rs232_putchar(char c)
{
   if( c == '\n' ) // LF -> CR-LF
   {
      while( !(PIR1 & 0b00010000) ) ; // wait for TXREG empty
      TXREG = '\r'  ;
      nop() ; nop() ; // because TXREG needs 2 instr to be valid   
   }
   while( !(PIR1 & 0b00010000) ) ; // wait for TXREG empty
   TXREG = c ;   
}
// blocking rs232 read
char rs232_getchar()
{
   if( RCSTA & 4) // framing error ?
      PRODH = RCREG ; // clear it by reading RCREG
   if( RCSTA & 2) // overrun error ?
      RCSTA &= ~0b00010000 ;   // clear bit CREN
      
   RCSTA |= 0b00010000 ;
   while( !( PIR1 & 0b00100000) ) ; // wait for RCREG full
   return RCREG ;
}


void main(void)
{

   TRISB |= 0b00000000 ;

   rs232_init();

for (;;) {


            }
 
}               

el progrmama configura el rs232, luedo les ponfo las configurasiones como una libreria adicional para que no se compliquen


Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: MicroExpert en 28 de Marzo de 2007, 12:07:49
Hola..
Me pueden ayudar con este problema….
Resulta que estoy utilizando el SDCC, para compilar programas escritos en C, utilizando los PIC, específicamente el 16F877A.

Utilizando la linea de comandos.

Al ejecutar:
SDCC.exe  -mpic14 -p16f877a  test.c
Todo funciona bien y obtengo el test.asm
Ahora al ejecutar:
Mpasmwin.exe  /q /o test.asm
Todo bien y obtengo el test.o
Finalmente para obtener el test.hex ejecuto:
mplink.exe 16f877a.lkr test.o libsdcc.lib /m test.map /o test.out
y obtengo el siguiente mensaje:

MPLINK 4.06, Linker Copyright (c) 2006 Microchip Technology Inc. Error - Coff file '' does not appear to be a valid COFF file. Error - Could not build member ''in library file 'D:\Archivos de programa\Microchip\Project\Test2\pic16f877a.lib'.
 Errors    : 2  BUILD FAILED: Tue Mar 27 18:49:33 2007.

Siguiendo otra forma, ahora utilizando el entorno de desarrollo de MPLAB
Utilizo el test.asm y procedo a ensamblar como se muestra en la figura adicionando el 16f877a.lkr y libsdcc.libY obtengo el mismo error…
(http://www.freewebs.com/vhcaiza/MPLAB1.JPG)
(http://www.freewebs.com/vhcaiza/MPLAB2.JPG)
 

Alguien sabe como obtener el Hex, utilizando las herramientas del MPLAB

Archivos utilizados:
Archivos (http://www.freewebs.com/vhcaiza/Archivos.rar)

 
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: navaismo en 28 de Marzo de 2007, 15:06:35
A pero este es bajo windows y el que estaba mostrandonos el uso SIMONMG es bajo linux
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: MicroExpert en 29 de Marzo de 2007, 11:32:47
Es verdad...
Pero estoy siguiendo los mismos pasos que indica la ayuda del SDCC para emsambrar con el  MPLAB..
Y al parecer solo falla en la obtencion del .hex..Ya llevo 5 dias tratando de solucionar esto y nada que ver...
Si alguien sabe por que no se obtiene el .hex.   escriban

Gracias
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 29 de Marzo de 2007, 12:50:20
porq trabajas en Windows con sdcc, es preferible trabajar con MPLAP, el problema con sdcc es el manejo de librerias coloca la libreria del 16F877 en la misma carpeta en donde esta el programa, animo es dificil, pero no imposible, además el mensaje de error menciona probleamas con las librerias... pero creo que no hay razon para complicarse en windows, hay muchos compiladores en C para windows en cambio en linux solo hay dos Cpik (ya ta frito :?) y el sdcc

saludos y suerte  :-/
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: PalitroqueZ en 29 de Marzo de 2007, 17:46:19
Estoy siguiendo los pasos de este link, aprendiendo a usar el SDCC bajo win (aún no dispongo del linux :?) y al parecer este compilador lleva el .c a .asm pero con otra nomenclatura, y quiero saber si el que sirve es el gpasm ¿es así?
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 30 de Marzo de 2007, 00:57:01
no se en detalles la diferencia de gpasm y el asm del MPALB se que las hay pero no se donde, igual que el sdcc y C18, el cpik y el sdcc, etc... yo personal mente recomiendo que si an a trabajar en linux utilicen las erramientas de linux, en cambio si trabajan con windows utilicen las erramientas de windows, en resumen se le hará mas facil de cualquiera de las dos maneras. Por mi parte reinstale Windows en mi computadora, "Pro ahora" debo agragar ya que viene una nueva por hai... http://www.vit.com.ve/ o una Siragon todavia no me decido...

Saludos
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: PalitroqueZ en 30 de Marzo de 2007, 11:20:03
Hola Simon. esas compu que salen en la página lucen muy bien.

yo quisiera meterle mano a linux, hay que tener conocimientos de éste por lo del cambio de plataforma que impulsa el gobierno, y mientras estoy en esa , le estoy dando mano al SDCC por el win, y he hecho unos avances:

pude hacer la primera compilación, el ejemplo lo tomé de este link (http://www.warpedlogic.co.uk/files/test.c.zip)
se llama test.c

Código: C
  1. #define __16f84
  2. #include"pic16f84.h"
  3.  
  4. // Set the __CONFIG word:
  5. typedef unsigned int word;
  6. word at 0x2007  __CONFIG = 0x3ff1;
  7.  
  8. unsigned char count;
  9.  
  10. void main(void) {
  11.  
  12.         TRISA = 0;
  13.         count = 0;
  14.         while(1) {
  15.                 PORTA = count;
  16.                 count ++;
  17.         }
  18.  
  19. }

el makefile según la fuente consultada deber ser así:

sdcc -mpic14 -p16f84 test.c

si todo va bien te apareceran 5 archivos:

test.asm
test.cod
test.hex
test.lst
test.o

quiere decir que crea el .hex de una vez

como yo no conozco el ANSI C, y corrijanme por favor: de allí vienen ese .o y unas librerias que existen dentro del directorio SDCC .lib que según leí por ahí son codigos ya compilados.

estoy probando con la versión 2.6.5 #4 719 28-mar-2007

cuando se termina de instalar el compilador, pregunta si desea que la ruta del SDCC sea declarada como variable de entorno, es decir, como path

esto es útil porque puedo crear los fuentes desde cualquier carpeta en mi disco duro,

para ir mas allá me fui al proteus y coloqué las lineas del makefile en el Define Code Generation tools

(http://img54.imageshack.us/img54/263/configsdcccn5.jpg)


aquí estoy generalizando con el 16f84 y luego le doy build desde el proteus y ¡perfecto!

me hace la simulación:

(http://www.subirimagenes.com/imagenes/previo/thump_916725simulando.JPG)


hasta aquí todo bien, ahora quiero meterle un retardo de 1 Mega ciclos con el archivo de cabecera delay.h pero ya me tranqué... no se como se hace.. la función es:

void delay1mtcy(unsigned char) __wparam;

y al compilar me genera errores en todas las lineas :(

este es el nuevo código:

Código: C
  1. #define __16f84
  2. #include"pic16f84.h"
  3. #include"pic16/delay.h"
  4.  
  5. // Set the __CONFIG word:
  6. typedef unsigned int word;
  7. word at 0x2007  __CONFIG = 0x3ff1;
  8.  
  9. unsigned char count;
  10.  
  11. void main(void) {
  12.  
  13.         TRISA = 0;
  14.         count = 0;
  15.         while(1) {
  16.                 PORTA = count;
  17.                 count ++;
  18.                                 delay1mtcy("1");
  19.         }
  20.  
  21. }

y los horrores... perdón los errores:

(http://img59.imageshack.us/img59/4987/erroresua0.jpg)


fuente consultada:

Installing and using SDCC on Linux (http://www.warpedlogic.co.uk/?q=node/8)

Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 30 de Marzo de 2007, 12:14:21
Parece que el problema con la libreria del delay es generalizada, a mi tambien me trajo dolores de cabeza, la solución la consegui en la paguina de iearobotics en donde se hicieron elos mismos la libreria

Código: [Seleccionar]
/****************************************************************************/
/* delay0.h      Junio-2004                                                  */
/*---------------------------------------------------------------------------*/
/* Ejemplo para el skybot                                                    */
/*---------------------------------------------------------------------------*/
/* Este fichero esta pensado para ser incluido en el programa principal.     */
/* Antes de utilizar la funcion delay0() es necesario llamar a               */
/* timer0_configurar() para configurar correctamente el timer 0              */
/*---------------------------------------------------------------------------*/
/* Utilizacion del temporizador 0 para generar una pausa de 10ms y           */
/* obtener una rutina de delay en unidades de 10ms                           */
/* No se utilizan interrupciones                                             */
/* El temporizador 0 es de 8 bits                                            */
/*---------------------------------------------------------------------------*/
/*  Andres Prieto-Moreno <andres@ifara.com>                                  */
/*  Juan Gonzalez <juan@iearobotics.com>                                     */
/*---------------------------------------------------------------------------*/
/*  LICENCIA GPL                                                             */
/*****************************************************************************/

//-- Definiciones
#define TICKS10 0x3D  // Valor con el que inicializar contador para
                      // conseguir TICKs de 10ms

/************************************/
/* Configurar el temporizador 0     */
/************************************/
void timer0_configurar()
{
  //-- Usarlo en modo temporizador, prescaler = 256
  OPTION_REG=0x87;
}

/************************************************/
/* Hacer una pausa en unidades de 10ms          */
/* ENTRADA:                                     */
/*   -pausa: Valor de la pausa en decenas de ms */
/************************************************/
void delay0(unsigned char pausa)
{
 
  //-- Esperar hasta que trancurran pausa ticks de reloj
  while(pausa>0) {
    TMR0=TICKS10;   // Inicializar contador
    T0IF=0;         // Quitar flag overflow
    //-- Esperar hasta que bit T0IF se ponga a '1'. Esto
    //-- indica que han transcurrido 10ms
    while (!T0IF);
     
    //-- Ha transcurrido un tick
    pausa--;
  }   
}

tiene licencia GPL
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: PalitroqueZ en 30 de Marzo de 2007, 12:23:14
voy a intentar con ese código que posteaste. (usaron el retardo por timer)

Gracias Simon
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: MicroExpert en 30 de Marzo de 2007, 13:01:25
Hola a todos...

Lo que sucede es que la mayor parte de herramientas estan echas para Windows y por eso como recien estoy experimentando con SDCC tengo que utilizar Windows... Ademas el SDCC es codigo libre, con lo que se podria hacer modificaciones directas para el uso de los PICs, por eso no utilizo otros compiladores...

Si alguien sabe por que sale ese error..me pueden ayudar, por que supuestamente el error esta en la libreria... Por que si obtengo el .asm y el .o.
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: SimonMG en 30 de Marzo de 2007, 15:30:24
no se en detalles la diferencia de gpasm y el asm del MPALB se que las hay pero no se donde, igual que el sdcc y C18, el cpik y el sdcc, etc... yo personal mente recomiendo que si an a trabajar en linux utilicen las erramientas de linux, en cambio si trabajan con windows utilicen las erramientas de windows, en resumen se le hará mas facil de cualquiera de las dos maneras. Pro ende si utilizas el SDCC utiliza el gpasm porque creo que el error esta en la nomenclatura del asm, entre MPLAB y GPASM hay muchas diferencias creo que el problema esta en la nomenclatura del codigo, el sdcc nesesita del gpasm en las paguina del sdcc lo dice, instala el gpasm en windows y compila el asm con gpasm, disculpa lo de las librerias, tienes razon si tubieras problemas con las librerias no pudieras obtener el asm y el .o, pero el sdcc esta fincionando correctamente no tienes errores de codigo, como dije el problema esta en la nomenclatura del asm instala gpasm y construye el hex desde el gpasm

Saludos
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: pentax33 en 19 de Noviembre de 2008, 15:07:24
Hola gente

    He estado leiendo los post sobre el SDCC puesto que  me he pasado a linux i quisiera poder programar los PICs desde este SO.

    La qüestion esta en que en mi etapa de windows trabajaba con CCS y ahora en SDCC me encuentro un poco perdido, no se por donde cojer el codigo, si, es C pero muchas directrices que se utilizaban en CCS aqui no funcionan. Alguien tiene ejemplos de codigo o alguna guia en la que poder iniciar mis pasos?

    Tambien seria una buena idea introducir un hilo en el foro para la migracion de CCS a SDCC y ser de este modo pioneros en la aportación de:

    Rutinas (RS232, i2c, PWM.........)
    Comunicacion con LCD 4 bit 8 bit.....
   

  Personalente a SDCC le veo una gran ventaja i es que es abierto i libre, si que su gran pega , desventaja, inconveniente es que no se trata de un sistema exclusivo para PICs, sino mas bien, este micro se ha añadido posteriormente, peró con la colaboracion de la comunidad podemos ayudar ha construir un compilador popular en el mundo LINUX.

Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: navaismo en 19 de Noviembre de 2008, 17:52:01
Este tema ya ha sido tratado anteriormente en el foro, tambien puedes recurrir a google y SDCC esta mas orientado a AVRS
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: arcachofo en 20 de Noviembre de 2008, 23:54:09
Ejemplos y librerías para SDCC:

general:
http://sdccokr.dl9sec.de/resources.htm

PIC:

ejemplos básicos: http://datrus.com/qwikflash-howto.tgz de esta página: http://datrus.com/qwikflash-howto.html
librería + ejemplo LCD 16x2 con PIC18F252: http://www.warpedlogic.co.uk/?q=node/10
libreria + ejemplo para I2C con PIC18F2550 (master): http://www.pic-o-rama.org/images/stories/projects/i2c_master/i2c_master.tar.gz
libreria + ejemplo para I2C con PIC18F2550 (slave): http://www.pic-o-rama.org/images/stories/projects/i2c_slave/i2c_slave.tar.gz
Ejemplo Usart con PIC18F2550: http://my.opera.com/raphman/blog/show.dml/266030

Varias librerías y ejemplos para I2C, uart, lcd, delays y más... para PIC16F877: http://per.launay.free.fr/pik_digor/sdcc/

El SDCC ha avanzado mucho desde que se inició este post, y ultimamente parece que va a muy buen ritmo, soporte para muchos PICs y ejemplos y librerías disponibles.

Saludos.
Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: pentax33 en 29 de Noviembre de 2008, 17:25:37
Hola Gente


    Veo que el tema de SDCC no esta muy extendido y por este morivo os propongo que aportemos los motivos por los que dicho compilador no gusta, o no es utilizado. Segun parece un motivo es el echo de no exixtir demasiada documentacion, rutinas , y ejemplos, a parte de que todo el mundo asimila este compilador  para otros procesadores MSC51 etc

   Junto con arcachofo hemos encontrado varios lugares web donde aparecen librerias i rutinas de ejemplo en la utilizacion de dicho compilador en el entorno de programacion de los PICs

Ejemplos y librerías para SDCC:

general:
http://sdccokr.dl9sec.de/resources.htm

PIC:

ejemplos básicos: http://datrus.com/qwikflash-howto.tgz de esta página: http://datrus.com/qwikflash-howto.html
librería + ejemplo LCD 16x2 con PIC18F252: http://www.warpedlogic.co.uk/?q=node/10
libreria + ejemplo para I2C con PIC18F2550 (master): http://www.pic-o-rama.org/images/stories/projects/i2c_master/i2c_master.tar.gz
libreria + ejemplo para I2C con PIC18F2550 (slave): http://www.pic-o-rama.org/images/stories/projects/i2c_slave/i2c_slave.tar.gz
Ejemplo Usart con PIC18F2550: http://my.opera.com/raphman/blog/show.dml/266030

Varias librerías y ejemplos para I2C, uart, lcd, delays y más... para PIC16F877: http://per.launay.free.fr/pik_digor/sdcc/

El SDCC ha avanzado mucho desde que se inició este post, y ultimamente parece que va a muy buen ritmo, soporte para muchos PICs y ejemplos y librerías disponibles.

Saludos.

animos

Título: Re: Aprendamos a usar e Cpik (mejor el SDCC)
Publicado por: Risanti en 14 de Mayo de 2010, 17:34:31
Hola A todos..

        Creo que Sdcc tiene sus cosas buenas obviamente no tiene tanto soporte como otros compiladores pero.. es funcional..

Citar
Código

GeSHi (c):

 16.
             while(1) {
  17.
                     PORTA = count;
  18.
                     count ++;
  19.
      delay1mtcy("1");
  20.
             }
  21.
       
  22.
      }
 
       


y los horrores... perdón los errores:

Hala esta libreria pic16/delay.h es para pic de famila 18. (PIC de 16bit de instruccion)  no el pic16f84... eso es un primer problema..
ademas :
delay1mtcy("1")
   //aqui creo que debe ser   
delay1mtcy(1)  // Sin Comillas ..

 Lo otro tiene que ver al momento de compilar quiza puedes tener problemas si te sale algun error como que no encuentra el simbolo _delay1mtc  lo mas seguro que te debas declarar la libreria a utlizar si usas la delay.h esta libreria esta incluida en libc18f.lib por lo cual al momento de compilar tu proyecto debes incluir esta libreria


Al Final SDCC es un compilador en desarrollo... y hay que darle tiempo al tiempo y mas que nada probarlo...

atte.
Risanti