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

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

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #210 en: 19 de Febrero de 2009, 17:12:44 »
Una pregunta, micro_cadaver, acaso es muy distinto el C30, con el el C18?  o solo es cuestion ver el hard que trae el PIC24 y aprender el uso de sus librerias, etc. (asi como lo he estado haciendo con el C18)?

asi es, son muy similares salvo las cuestiones del hardware de cada microcontrolador, también por ejemplo en el c30 vienen nuevas formas de mencionar las interrupciones, pero siempre hay ejemplos en internet y foros donde trabajan con dichos compiladores. al fin y al cabo ambos C18 y C30 respetan el ANSI-C, creo que el C32 también.

saludos  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado camigod

  • PIC10
  • *
  • Mensajes: 40
PROBLEMA RECEPCION DATOS EN PIC
« Respuesta #211 en: 06 de Marzo de 2009, 21:18:49 »
Hola a todos, Disculpen tengo un problema con la recpecion de datos en el PIC manejando la transmision serial, segui las instrucciones del codigo posteado sobre el manejo de el modulo EUSART, y hasta el momento NO he podido recibir los datos en el PIC, estoy simulando en el proteus, utilizando el VSPD para simular los puertos COM.

Por el momento puedo recibir los datos que el micro me envia desde una aplicacion que programe en C# (tambien la tengo en C++), pero cuando le envio algo al PIC, este no recibe nada... intente usando ambos metodos:

Esta es una parte del codigo publicado por micro_cadaver.
Código: [Seleccionar]
while(BusyUSART()); //esperamos caracter del virtual terminal
while(!DataRdyUSART());
Comando_LCD(0XCC);
recepcion = getcUSART();
Dato_LCD(recepcion); //envia caracter68.
putcUSART(recepcion);
Comando_LCD(0XC3);//posicion en el LCD
Dato_LCD(recepcion); }

Alguien podria ayudarme?
Un hombre no muere cuando su corazon deja de latir, un hombre muere, cuando deja de pensar

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #212 en: 06 de Marzo de 2009, 21:35:18 »
puedes subir tu proyecto con simulacion y codigo para revisarlo completo. saludos
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado camigod

  • PIC10
  • *
  • Mensajes: 40
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #213 en: 06 de Marzo de 2009, 22:42:39 »
Gracias por tu atencion, aca esta el codigo que estoy utilizando, adjunto la simulacion y el .c de MPLAB.
Gracias de antemano.
Código: [Seleccionar]
#include<p18f4550.h>
#include<delays.h>
#include<usart.h>
#include<xlcd.h>

void DelayFor18TCY(){Delay10TCYx(3);} //FUNCIONES PARA LCD
void DelayPORXLCD(){Delay10KTCYx(3);} //FUNCIONES PARA LCD
void DelayXLCD(){Delay10KTCYx(3);} //FUNCIONES PARA LCD

unsigned char recepcion;

void main(){
ADCON1=15;TRISC = 0;
OpenUSART(USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,25);
//OpenADC(ADC_FOSC_2 & ADC_RIGHT_JUST & ADC_2_TAD,ADC_CH0 & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS,14);
OpenXLCD(FOUR_BIT & LINES_5X7);
WriteCmdXLCD(1);
Delay10KTCYx(10);
putrsXLCD("RECEPCION USART");
Delay10KTCYx(250);
while(1){
while(BusyUSART()){}
while(!DataRdyUSART()){}
recepcion = ReadUSART();
WriteDataXLCD(recepcion);
putcUSART(recepcion);
WriteCmdXLCD(192); //POSICION LCD
WriteDataXLCD(recepcion);
}
}
Un hombre no muere cuando su corazon deja de latir, un hombre muere, cuando deja de pensar

Desconectado handpic

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 72
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #214 en: 07 de Marzo de 2009, 07:18:32 »
Hola, estoy empezando con el C con el CCs.

El C18 es mas potente? que diferencias hay entre uno y el otro?.
 He visto que algunos os habeis pasado al C18.
Ya que estoy empezando, lo mismo me da aprender uno que el otro, no?

Saludos,

Desconectado doppel

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1536
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #215 en: 07 de Marzo de 2009, 08:06:58 »
Hola

Con CCS puedes programar todas las gamas de pic osea 12F 16F 18f 24F etc, con C18 que es el C oficial de Microchip como su nombre lo indica es para la familia 18F además de ser ANSI C por lo que es un poquito distinto al CCS en su estructura.-
" Para ser exitoso no tienes que hacer cosas extraordinarias. Haz cosas ordinarias, extraordinariamente bien "

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #216 en: 07 de Marzo de 2009, 08:26:09 »
La única ventaja que le podríamos ver al C18 (o al C30 para los dsPIC por ejemplo) es que cualquier recurso de un PIC18F lo explota con el conocimiento profundo del fabricante de dicho PIC, o sea del mismo Microchip.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #217 en: 07 de Marzo de 2009, 11:00:21 »
por eso mismo aquellas personas que vienen trabajando con el assembler en la gama 16f les es màs facil migrar al c18 pues lo ùnico que les falta saber es el Ansi-C.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado camigod

  • PIC10
  • *
  • Mensajes: 40
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #218 en: 07 de Marzo de 2009, 16:39:38 »
Hola a todos,
Ya logre hacer funcionar la recepcion, aparentemente era un problema de conexion en la simulacion...
ahora estoy desarrollando una aplicacion en C# para comunicarme con el 18F4550, todo va bien hasta ahora manejando el estilo de programacion que mencione anteriormente, pero me gustaria utilizar la interrupcion del modulo USART que tiene este pic, podrian ayudarme un poco?

Muchas gracias. Hasta luego.
Un hombre no muere cuando su corazon deja de latir, un hombre muere, cuando deja de pensar

Desconectado lombanacns

  • PIC10
  • *
  • Mensajes: 1
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #219 en: 07 de Marzo de 2009, 19:03:05 »

Hola:
Estoy trabajando con el modulo USB del PIC18F4550 y no he podido en C18. descargue un proyecto de este link:
http://www.sixca.com/eng/articles/usbstepping/.
y no entiendo mucho. Sera que para utilizar este modulo USB solo se puede hacer con las librerias que estan en el link o hay otra manera?


Desconectado handpic

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 72
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #220 en: 11 de Marzo de 2009, 12:54:21 »
Gracias por las respuestas.

Le echaré un vistazo al manual de C18 y ya veremos con que nos quedamos...

Saludos,

Desconectado PHLAKO

  • PIC10
  • *
  • Mensajes: 49
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #221 en: 27 de Marzo de 2009, 13:18:15 »
Faltan las interrupciones de la Usart en este cursillo....yame tienen loco, alguien que se apiade y ponga un ejemplo, o explique como se encuenta por la fuente de interrupcion. Saludos,

chaos :)
SIEMPRE TE RECORDARE AMADO Y FIEL COMPAÑERO "LOBO"

Desconectado camigod

  • PIC10
  • *
  • Mensajes: 40
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #222 en: 27 de Marzo de 2009, 15:54:24 »
Te refieres a la interrupcion por recepcion serial???
Si es asi avisame y posteo un ejemplo en C18, hasta luego
Un hombre no muere cuando su corazon deja de latir, un hombre muere, cuando deja de pensar

Desconectado PHLAKO

  • PIC10
  • *
  • Mensajes: 49
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #223 en: 29 de Marzo de 2009, 01:51:57 »
Te refieres a la interrupcion por recepcion serial???
Si es asi avisame y posteo un ejemplo en C18, hasta luego

Si es posible pudieses explicar el uso de esa interrupcion, seria genial. Por ejemplo, cuando entra a la interrupcion, en un lado lei que el bit GIE so ponia a cero automaticamente, ademas de borrar el RCIF. Lo otro es que al entrar a la interrupcion, no es posible consultar por el bit RCIF, para verificar la bandera, es mas se me ha quedado en un loop al interior de la interrupcion, saliendose solamente cuando se ejecuta un ReadUSART, mire lo que hace esta funcion y no logre desifrar el por que funciona bien solo cuando se ejecuta un ReadUSART. De antemano, gracias.

salu2:)

chaos:)
SIEMPRE TE RECORDARE AMADO Y FIEL COMPAÑERO "LOBO"

Desconectado camigod

  • PIC10
  • *
  • Mensajes: 40
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #224 en: 29 de Marzo de 2009, 20:48:47 »
Hola PHLAKO, disculpa la demora,

La interrupcion por transmision serial se activa cuando el buffer de recepcion se llena,  es decir, cuando recibe un dato, el microcontrolador pone en alto la bandera RCIF automaticamente para poder identificar el origen de la interrupcion.

Lo que mencionas acerca de la necesidad de llamar a la funcion ReadUSART supongo que se debe a que si no lees el buffer este seguira lleno, lo cual provocaria un llamado constante a la interrupcion convirtiendose asi en un bucle infinito. Te pongo un ejemplo para que entiendas mejor:

Código: [Seleccionar]
#include<p18f4550.h>
#include<delays.h>
#include<usart.h>       //Libreria para configurar modulo USART

void int_recepcion();          //Funcion a llamar en la interrupcion
int recepcion;

#pragma code int_alta = 0x08      //INTERRUPCION POR RECEPCION
void int_alta(){
          _asm
goto int_recepcion
          _endasm
}
#pragma code

#pragma interrupt int_recepcion
void int_recepcion(){                          //EN ESTE PUNTO SE ACABA DE RECIBIR UN DATO, EL BUFFER ESTA LLENO
recepcion = ReadUSART();  //LEEMOS EL CONTENIDO DEL BUFFER PARA LIMPIARLO AUTOMATICAMENTE
PIR1bits.RCIF = 0;              //APAGAMOS LA BANDERA PARA PERMITIR UNA FUTURA INTERRUPCION
}

void main(){
TRISC = 192; //PUERTO DE TRANSMISION
INTCONbits.GIE=1;       RCONbits.IPEN = 1;//HABILITAR INTERRUPCIONES Y PRIORIDAD
INTCONbits.PEIE = 1;                                //INTERRUPCIONES POR PERIFERICOS  (usart)
IPR1bits.RCIP=1; //PRIORIDAD INT RECEPCION
OpenUSART(USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,25);        //CONFIGURA MODULO USART
PIE1bits.RCIE = 1; //HABILITA INT RECEPCION

while(1){
//ACA PUEDES OPERAR LA VARIABLE GLOBAL 'recepcion' QUE SE ALTERA POR MEDIO DE LA INTERRUPCION...
mostrar();          //POR EJEMPLO LLAMAR UNA FUNCION QUE ME MUESTRE EL DATO RECIBIDO EN UNA LCD... O ALGO ASI
}
}

Bueno, pues esa es la estructura basica del programa, la funcion mostrar no la coloque pues requiere que configuremos la pantalla LCD... etc etc... pero en esencia el programa lo que hace es estar atento a la recepcion y cuando algun dato llegue asignarselo a la variable 'recepcion'.

Espero que te sea util, cualquier duda posteala e intentare responderte,
Hasta Luego
Un hombre no muere cuando su corazon deja de latir, un hombre muere, cuando deja de pensar