Hola que tal ! Tengo el código de un programa en CCS, pero quiero pasarlo a C18, ya que prefiero seguir aprendiendo mediante ANSI C. He cojido un programa ( me costó encontrarlo) que mediante el CCP1 y el uso del PWM, saca una señal a un altavoz. Estoy modificando el programa para el uso en otro PIC ( PIC18) y hay cosas que no se como hacer...o no se si las puedo hacer:
el trozo de programa es
en CCS
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
SETUP_CCP1(CCP_PWM_HALF_BRIDGE|CCP_PWM_L_L|CCP_SHUTDOWN_AC_F);
setup_wdt(WDT_OFF);
setup_timer_2(T2_DIV_BY_1,110,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
while(1==1){
setup_ccp1(CCP_CAPTURE_FE);
delay_ms(3000);
SETUP_CCP1(CCP_PWM_HALF_BRIDGE|CCP_PWM_L_L|CCP_SHUTDOWN_AC_F);
(...) sigue, pero no es como cualquier compilador en C
la traducción que quiero hacer en C18:
void main ( void )
{
TRISB=0b11110111;
TRISA=0b10111111; // el bit MSB no existe en este puerto, se tomaría como 0bX011 1111
TRISC = 0b00000000;
PORTA=0;
PORTB = 0;
PORTC = 0;
ADCON1 = 0x0F; //VREF- source=0 (VSS); VREF+ source =0 (VDD);
// PCFG3:PCFG0: A/D Port Configuration Control bits (1111= canales DAC TODOS digitales
/*
ADCON1: A/D CONTROL REGISTER 1
** *** VCFG0 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 -> 0000 1111
*/
CloseADC();
// en lugar de CCP1, quiero configurar lo que en CCS sería CCP2
veo que para half Bridge, mi PIC solo me deja usar el Pin P1A, o mejor dicho CCP2, ya que enmi PIC se usa el modo "enhanced", correspondiente a ese pin... y ya lo tengo ocupado. Como no se realmente por que he de usar el half bridge, creo que de momento lo dejaré apartado. Entonces la linea:
SETUP_CCP1(CCP_PWM_HALF_BRIDGE|CCP_PWM_L_L|CCP_SHUTDOWN_AC_F);
se que he de buscar la función en C18 corrspondiente al CCP2 ( quiero el 2). leyendo el datsheet, veo que he de hacer estos pasos:
1)Setear PWM periodo con PR2
2) Setear PWM Duty Cycle en los 2 registros "CCPR2L" y "CCP2CON"
3) CCP2 como outuput.
4) -Setear TMR2 preescaler
- habilitar Timer 2 con T2CON
5) Configurar el módulo CP2 como PWM.
a lo que :
1) void OpenPWM2 ( char period);
2) void SetDCPWM2( unsigned int duty_cycle); Microchip se encargan de trasnferir ese dato a los 2 registros
3)#define PWM2_TRIS TRISBbits.TRISB3 ???
no basta con poner TRISB como lo he hecho yo? vamos, como en cualquerir programa...
4) - prescaler modificable desde el registro del PIC18 "T2CON" en los bits "T2CKPS1:T2CKPS0".
void OpenTimer2 ( T2_PS_1_1 & T2_POST_1_1); ( en timers.h) como paso el parámetro del numero hexadecimal de desbordamiento del timer2 ??????????
5)???
Los pasos con interrogante son lo que ya no puedo seguir
Por otra banda, con el manual de CCS que tengo no me permite saber que son exactamente los parámetros de la funciones ( en el manual estan nombradas-no todas- pero no descritas), por ejemplo
setup_ccp1(CCP_CAPTURE_FE);
delay_ms(3000);
SETUP_CCP1(CCP_PWM_HALF_BRIDGE|CCP_PWM_L_L|CCP_SHUTDOWN_AC_F); los 2o y 3r parámetros no se compararlos con pwm.h del C18