Autor Tema: Plantilla base y otras dudas sobre el PIC18F2520  (Leído 1267 veces)

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

Desconectado yosels

  • PIC10
  • *
  • Mensajes: 1
Plantilla base y otras dudas sobre el PIC18F2520
« en: 23 de Junio de 2022, 07:36:10 »
Tengo casi nada de experiencia en los PIC,  lo primero que he usado es una Xtrainer con PIC18F45k50 programaba con CCS C Compiler y al principio siempre usaba una plantilla base para funciones y definir.

Ahora que estoy en medio de un proyecto de estadías para técnico superior tengo que usar el PIC18F2520 y no estoy muy seguro de que oscilador y tipo de frecuencia debo ponerle en su programación y que otras funciones mas son las necesarias.

Antes usaba la plantilla definiendo los puertos, pines, entradas y algunas mas,  ademas también me gusta usar siempre la simulación en Proteus porque en esta situación la necesito mucho y no sé si cambia la función o código para que funcione en Proteus el .hex

si estoy usando Pickit 3, ¿no hay problema con seguir programando y obtener los .hex con CCS C Compiler o es muy a fuerzas usar MPLAB? (en muchas partes veo que es mejor usar MPLAB para el pickit 3)

Una gran disculpa si en algo me equivoco realmente llevo poco tiempo con los microcontroladores.

Esta es la plantilla que usaba en el PIC18F45K50 de la tarjeta Xtrainer:



#include <18F2520.h>                                        //Para X-TRAINERp8 DIP28 cambiar por: #include <18F25K50.h>

#use delay(internal=48Mhz)                                  //Tipo de oscilador y frecuencia de oscilación del microcontrolador

#build(reset=0x02000,interrupt=0x02008)        //Asignación de los vectores de reset e interrupción

#org 0x0000,0x1FFF {}                                          //Reserva espacio en la memoria para la versión con bootloader

//#define LED PIN_A1                                              //Pin donde está conectado el LED de X-TRAINER
                                         


////////serial////////////
//#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7,PARITY=N) ///si se quiere utilizar comunicacion serial habilitar


/*
CODIGO BOOTLOADER, PARA SIMULAR EN PROTEUS, PONER COMO COMENTARIO
PARA GRABAR EN MICROCONTROLADOR, QUITAR COMENTARIO                         
*/

/*
//////BOOTLOADER USB//////////                             
#define LOADER_END 0x7FF
#define LOADER_SIZE 0x6FF
#build(reset=LOADER_END+1, interrupt=LOADER_END+9)
#org 0, LOADER_END {} // nothing will replace the bootloader memory space
// END OF bootloader definition
//////////////////////////////
*/

#use standard_io(a)
#use standard_io(b)
#use standard_io(c)

#define enciende output_high
#define apaga output_low
#define parpadea output_toggle
#define entrada input

#define PORTA output_a
#define PORTB input_b
#define PORTC input_c

#define A0 PIN_A0
#define A1 PIN_A1
#define A2 PIN_A2
#define A3 PIN_A3
#define A4 PIN_A4
#define A5 PIN_A5
#define A6 PIN_A6
#define A7 PIN_A7

#define B0 PIN_B0
#define B1 PIN_B1
#define B2 PIN_B2
#define B3 PIN_B3
#define B4 PIN_B4
#define B5 PIN_B5
#define B6 PIN_B6
#define B7 PIN_B7

#define C0 PIN_C0
#define C1 PIN_C1
#define C2 PIN_C2
#define C3 PIN_C3
#define C4 PIN_C4
#define C5 PIN_C5
#define C6 PIN_C6
#define C7 PIN_C7


void main() {


   
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_8_BIT|RTCC_DIV_128);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   
  for(;;){
 
    ///////////·······poner programa desde aqui········////////////
   
   
   
    //////////··········fin de programa···········/////// 
   }

}


Saludos y espero que resuelvan mis dudas por favor


« Última modificación: 23 de Junio de 2022, 07:45:29 por yosels »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Plantilla base y otras dudas sobre el PIC18F2520
« Respuesta #1 en: 26 de Junio de 2022, 16:40:24 »
Tu placa "Xtrainer" tiene un bootloader en el PIC18F45k50, el bootloader seguramente puede tomar datos del USB y grabarlo en la memoria del PIC, esto permite actualizar el firmware sin necesidad de un programador como el Pickit3. Con esa placa seguramente estas por ahi obligado a una frencuencia de trabajo, ya que necesitas la frecuencia para poder hacer funcionar el USB.

El poseer un Pickit3 te permite grabar el microcontrolador de 0, conectando el MCLR, PGD y PGC. Por lo que no seria necesario el "bootloader".

Citar
y no estoy muy seguro de que oscilador y tipo de frecuencia debo ponerle en su programación
Podes usar la que desees, usualmente si no estas obligado a cuidar el consumo o ciertos tiempos en temporizadores, es darle lo maximo que puedas o para simplificar el circuito usar el reloj interno.

Citar
Antes usaba la plantilla definiendo los puertos, pines, entradas y algunas mas,  ademas también me gusta usar siempre la simulación en Proteus porque en esta situación la necesito mucho y no sé si cambia la función o código para que funcione en Proteus el .hex

No cambia nada..

Lo que si esas definiciones.... Para que renombras todo ¿? los PIN_Ax usalo asi.. y elimina las definiciones

Podes usar el mismo codigo solo sacandole todo lo del bootloader:

Código: C
  1. #include <18F2520.h>                                        //Para X-TRAINERp8 DIP28 cambiar por: #include <18F25K50.h>
  2. #use delay(internal=32Mhz)                                  //Tipo de oscilador y frecuencia de oscilación del microcontrolador, tiene un PLL 4x que podes tomarlo de clock interno 8Mhz = 32Mhz
  3.  
  4. ////////serial////////////
  5. //#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7,PARITY=N) ///si se quiere utilizar comunicacion serial habilitar
  6.  
  7.  
  8. void main() {
  9.  
  10.  
  11.    
  12.    setup_adc_ports(NO_ANALOGS);
  13.    setup_adc(ADC_OFF);
  14.    
  15.    setup_wdt(WDT_OFF);
  16.    setup_timer_0(RTCC_8_BIT|RTCC_DIV_128);
  17.    setup_timer_1(T1_DISABLED);
  18.    setup_timer_2(T2_DISABLED,0,1);
  19.    setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
  20.    setup_comparator(NC_NC_NC_NC);
  21.    setup_vref(FALSE);
  22.    
  23.    
  24.   for(;;){
  25.  
  26.     ///////////·······poner programa desde aqui········////////////
  27.    
  28.    
  29.    
  30.     //////////··········fin de programa···········///////
  31.    }
  32.  
  33. }