Autor Tema: Cursillo en C18 para PICS DESDE CERO  (Leído 250300 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #375 en: 27 de Julio de 2011, 00:18:07 »
Ok gracias che y nada de hi-tech ?? Estuve viendo y no hay compilador para 16F o sea como un C16 o si ??

no existe un C16, ese es el hitech, no se si haya algun tutorial, pero hay muchos ejemplos en el foro. usa el buscador para ver si encuentras algun tutorial.

tambien te podrian ayudar los manuales de microchip de cada compilador.
"Nada es imposible, no si puedes imaginarlo"

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #376 en: 30 de Julio de 2011, 14:09:30 »
Muchas gracias por toda la ayuda ya empecé a usar el C18 y aunque varía mucho del CCS ya le agarré la mano cuando te acostumbras esta bueno. Solo tengo una duda... Yo creé un archivo .h y un .c donde voy poniendo mis librerias pero veo que las funciones que no uso nunca me ocupan memoria también, en CCS cuando no usabas una función no ocupaba memoria es posible esto en C18 ?

Gracias !!!
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #377 en: 30 de Julio de 2011, 14:21:18 »
Podes utilizar #defines para indicar que nivel de tu librería vas a usar o que funciones. Esto lo hace Microchip en sus librerías definiendo un config....h en donde se configura, por ejemplo:


Código: C
  1. #define USE_READ
  2. #define USE_WRITE
  3. //#define USE_PAGES

y en el *.c:

Código: C
  1. #if defined(USE_READ)
  2. .......
  3. #endif
  4.  
  5. #if defined(USE_WRITE)
  6. .......
  7. #endif
  8.  
  9. #if defined(USE_PAGES)
  10. .......
  11. #endif

Saludos!
« Última modificación: 30 de Julio de 2011, 14:23:39 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #378 en: 30 de Julio de 2011, 14:22:59 »
Muchas gracias suky te agradezco  ;-)
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #379 en: 30 de Julio de 2011, 14:34:48 »
Suky me supera el C18  :D. Mira hice lo que me dijiste en el .c y .h:

.c:

Código: [Seleccionar]
//Librerías varias
#include <adc.h>
#include <math.h>
#include <stdio.h>

#if defined ADC_FUNC
/***********************************************************************************/
//Lectura completa del ADC, toma la conersion, espera y lee los registros
int Read_ADC (void){
ConvertADC(); //conversion
while(BusyADC()); //espero a que termine
return ReadADC(); //tomo el valor y lo retorno
}
/***********************************************************************************/
#endif

#if defined FLOAT2STR
/***********************************************************************************/
void float2str(char *buffer, float f){
float fenteros;
float fdecimales;
int entero, decimal;

fenteros = floor(f);
fdecimales = f - fenteros;
entero = (int)fenteros;
decimal = (int)1000 * fdecimales;
    sprintf(buffer, "%d.%03i", entero, decimal);
}
/***********************************************************************************/
#endif

.h:

Código: [Seleccionar]
#ifndef mylibs
#define mylibs

#define ADC_FUNC
#define FLOAT2STR

/***********************************************************************************/
int Read_ADC (void);
void float2str(char *buffer, float f);
/***********************************************************************************/

/***********************************************************************************/
//Frecuencia del cristal externo (no divido internamente) en [Hz]
//Baudios para el USART
#define XTAL 4000000
#define baud 9600
/***********************************************************************************/

/***********************************************************************************/
//Macro para el calculo de baudios automatico
//Hay que colocar el define BAUDIOS en la funcioón OpenUSART
//donde pide el valor de "spbrg" y SPEED_MODE donde pide modo
//high o low speed:
//Ejemplo a 9600 baudios:
//OpenUSART(USART_ASYNCH_MODE & USART_EIGHT_BIT & SPEED_MODE, BAUDIOS);
#if((((XTAL/baud)/16)-1)<255 && (((XTAL/baud)/16)-1)>0)
#define SPEED_MODE USART_BRGH_HIGH
    #define BAUDIOS (unsigned int)(((XTAL/baud)/16)-1)
#elif((((XTAL/baud)/64)-1)<255 && (((XTAL/baud)/64)-1)>0)
    #define SPEED_MODE USART_BRGH_LOW
    #define BAUDIOS (unsigned int)(((XTAL/baud)/64)-1)
#else
    #error No se pudo establecer un rate correcto: baudio = baud
#endif
/***********************************************************************************/

#endif

Y al momento de compilar me da un error y me da finalizar tarea el compilador C18:

Código: [Seleccionar]
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\Disco local Andrés (C)\Electrónica\Pruebas C18\Prueba 1\Main.o".
Clean: Deleted file "C:\Disco local Andrés (C)\Electrónica\Pruebas C18\Prueba 1\mylibs.o".
Clean: Done.
Executing: "C:\MCC18\bin\mcc18.exe" -p=18F4520 "..\..\Escuela Cena\Prueba 1\Main.c" -fo="Main.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\Disco local Andrés (C)\Electrónica\Escuela Cena\Prueba 1\Main.c:26:Warning [2066] type qualifier mismatch in assignment
C:\Disco local Andrés (C)\Electrónica\Escuela Cena\Prueba 1\Main.c:32:Warning [2066] type qualifier mismatch in assignment
C:\Disco local Andrés (C)\Electrónica\Escuela Cena\Prueba 1\Main.c:37:Warning [2066] type qualifier mismatch in assignment
Executing: "C:\MCC18\bin\mcc18.exe" -p=18F4520 "..\..\Escuela Cena\Prueba 1\mylibs.c" -fo="mylibs.o" -D__DEBUG -Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
C:\Disco local Andrés (C)\Electrónica\Escuela Cena\Prueba 1\mylibs.c:31:Error [1020] unexpected input following '#endif'
Halting build on first failure as requested.
----------------------------------------------------------------------
Debug build of project `C:\Disco local Andrés (C)\Electrónica\Pruebas C18\Prueba 1\Prueba ADC.mcp' failed.
Language tool versions: mpasmwin.exe v5.30.01, mplink.exe v4.30.01, mcc18.exe v3.30
Preprocessor symbol `__DEBUG' is defined.
Sat Jul 30 14:34:48 2011
----------------------------------------------------------------------
BUILD FAILED

No se por que dice que no espera el #endif si esta justo despues del #if defined
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #380 en: 30 de Julio de 2011, 14:43:48 »
Disculpame que me meta.
El error está en la librería mylibs.c, más precisamente en la línea 1020

Y prestá atención a los Warnings (precauciones), en la línea 2066 del archivo main.c, dice que "type qualifier mismatch in assignment" que traducido sería algo así, "no coinciden los tipos de clasificación con la asignación"
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #381 en: 30 de Julio de 2011, 14:49:48 »
Sisi el Error me lleva justo donde esta el último #endif y los Warning me llevan a los printf que no la verdad que ni idea de lo que este mal ahí. Este es el main:

Código: [Seleccionar]
#include <p18f4520.h>
#include <adc.h>
#include <usart.h>
#include <stdio.h>
#include <math.h>
#include <delays.h>
#include <timers.h>
#include <pwm.h>

#include "mylibs.h"

#pragma config WDT = OFF //WDT apagado

int result;
char string[20];

void main (void){
TRISA = 0xFF; TRISB = 0b00000001; PORTB = 0x00; TRISC = 0x00;
OpenADC(ADC_FOSC_RC & ADC_RIGHT_JUST,ADC_CH0 & ADC_INT_OFF & ADC_REF_VDD_VSS, ADC_1ANA);
SetChanADC(ADC_CH0);
OpenUSART(USART_ASYNCH_MODE & USART_EIGHT_BIT & SPEED_MODE, BAUDIOS);

OpenTimer2(TIMER_INT_OFF & T2_PS_1_16 & T2_POST_1_1);
OpenPWM1(10);
SetDCPWM1(5);
printf("Prueba de C18 con PIC18F4520\n\r");
while(1){

if(PORTBbits.RB0 == 1){
result = Read_ADC();
float2str(string,(float)result*5.0/1024.0);
printf("ADC = %u VOLT = %s\n\r",result,string);
Delay10KTCYx(20);
}
else{
if(DataRdyUSART()){
printf("Recibido = %c\n\r",ReadUSART());
}
}
}
}
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #382 en: 02 de Agosto de 2011, 12:00:03 »
Hola..
Como me han regalado unos 18F2550, he querido mirar un poco estos micros a ver si los adopto algún día :)  he mirado este hilo, algunos ejemplos, tambien el PDF de nuestro amigo Suky(mil gracias amigo, por compartir tu valioso trabajo) , arme una plaquita con LCD y teclado y varias cositas adicionales solo para experimentar...y bueno tengo un problema con la libreria delay.h por que según los cálculos no me dan los ms que pretendo.. a ver lo que entendí es que el cálculo es así:
Mi cristal es de 20mhz,

Delay10KTCYx(250);     // 10.000 * (4/20.000.000) * 250 = 500ms

Tengo conflicto de entendimiento con respecto a la configuración en C18 del oscilador, ya he leído la explicación maravillosa de RedPic, el help del C18 pero no logro los 500ms, ya que me da mucho menos..esta es mi configuración, según lo leído:

Código: C
  1. #pragma config FOSC=HS,FCMEN=OFF,IESO=OFF,CPUDIV=OSC4_PLL6      //HS 20MHZ ClockCPU 5 MHZ
  2. #pragma config PWRT=ON,BOR=OFF,BORV=0,WDT=OFF,WDTPS=32768
  3. #pragma config MCLRE=OFF,LPT1OSC=OFF,PBADEN=OFF,CCP2MX=OFF
  4. #pragma config STVREN=OFF,LVP=OFF,XINST=OFF,DEBUG=OFF
  5. #pragma config CP0=OFF,CP1=OFF,CP2=OFF,CPB=OFF,CPD=OFF
  6. #pragma config WRT0=OFF,WRT1=OFF,WRT2=OFF
  7. #pragma config WRTB=OFF,WRTC=OFF,WRTD=OFF
  8. #pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF,EBTRB=OFF

A ver según lo que quiero es 5MHZ en clock en CPU...con un cristal de 20MHZ , no uso el PLL y divido en el osc postcaler por 4 dandome 5Mhz...
En que estoy equivocado?

Agradezco su valiosa ayuda..como siempre.

Saludos


 

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #383 en: 02 de Agosto de 2011, 12:03:18 »
Pero si divides la frecuencia de Fosc por 4, los cálculos de delay debes hacerlo con 5MHz  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #384 en: 02 de Agosto de 2011, 12:57:22 »
Pero si divides la frecuencia de Fosc por 4, los cálculos de delay debes hacerlo con 5MHz  ;-)


Saludos!

Gracias Suky,  ha funcionado bien..ahora estoy probando el LCD que lo conecté los datos al puerto A el nibble bajo, previa configuración del ADCON1  y  los controles en PTA4 , PTA5 y PTC0(upss!! eran RA RC )  todo configurado en xlcd.h, pero no ha fucnionado, se me queda el programa colgado al ejecutar la rutina :

OpenXLCD(FOUR_BIT & LINES_5X7);

voy a revisar que pasa, una última pregunta, si los tiempos de los ms para el correcto funcionamiento del LCD no estan exactos no es motivo para que se quede el programa en esa rutina?..

Saludos y gracias de nuevo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #385 en: 02 de Agosto de 2011, 13:26:38 »
Hay que configurar el xLCD.h y agregar los archivos fuentes de la librería para que sean compilados y se hagan efectivos los cambios, lo hiciste?
No contesto mensajes privados, las consultas en el foro

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #386 en: 02 de Agosto de 2011, 13:43:41 »
Hay que configurar el xLCD.h y agregar los archivos fuentes de la librería para que sean compilados y se hagan efectivos los cambios, lo hiciste?

Los archivos fuentes no los encuentro, estoy usando MPLABX en Linux Mint 10, el xlcd.h lo modifiqué para los puertos que estoy usando...pero me hacen falta los archivos fuentes, no encuento openxlcd.c ni busyxlcd.c ni niguno de los que aparecen en la imagen de tu PDF...creo que algo me hace falta por instalar o no los trae, o será por la lisencia, ya que cuando instalé el C18 no me pidió nada de lisencia ni seleccionara si era demo o lite como si pasó con el Hi-tech..tendrá algo que ver esto?

Gracias Suky por tu tiempo para ayudarme.

Saludos

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #387 en: 02 de Agosto de 2011, 15:07:46 »
Aaa! Mplab ide x! Ahí a remarla solito  :tongue: No se como trabajará ese. En todo caso los archivos fuentes están en ..\MCC18\src\pmc_common\XLCD


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #388 en: 02 de Agosto de 2011, 16:03:51 »
Aaa! Mplab ide x! Ahí a remarla solito  :tongue: No se como trabajará ese. En todo caso los archivos fuentes están en ..\MCC18\src\pmc_common\XLCD


Saludos!

Muchas gracias maestro, de todas formas se que al estar en linux estoy un poco solo, pero que sería el aprendizaje sin estos retos?..

Gracias y

saludos

Desconectado dragondgold

  • PIC16
  • ***
  • Mensajes: 103
    • Tmax & Gwolf Microcontrollers
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #389 en: 02 de Agosto de 2011, 18:31:14 »
Nadie sabe por que no funciona el codigo que coloqué arriba ?
La conclusión final es que sabemos muy poco y sin embargo, es asombroso lo mucho que conocemos. Y más asombroso todavía es que un conocimiento tan pequeño nos pueda dar tanto poder