Autor Tema: traducción de CCS a C18  (Leído 3003 veces)

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

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
traducción de CCS a C18
« en: 06 de Julio de 2011, 14:04:52 »
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
Código: C
  1. void main()
  2. {
  3.  
  4. setup_adc_ports(NO_ANALOGS|VSS_VDD);
  5. setup_adc(ADC_OFF);
  6. setup_spi(SPI_SS_DISABLED);
  7.  
  8. setup_timer_1(T1_DISABLED);
  9.  
  10. SETUP_CCP1(CCP_PWM_HALF_BRIDGE|CCP_PWM_L_L|CCP_SHUTDOWN_AC_F);
  11. setup_wdt(WDT_OFF);
  12.  
  13. setup_timer_2(T2_DIV_BY_1,110,1);
  14.  
  15. setup_comparator(NC_NC_NC_NC);
  16. setup_vref(FALSE);
  17.  
  18. while(1==1){
  19. setup_ccp1(CCP_CAPTURE_FE);
  20. delay_ms(3000);
  21. SETUP_CCP1(CCP_PWM_HALF_BRIDGE|CCP_PWM_L_L|CCP_SHUTDOWN_AC_F);
  22.  
  23.  
  24. (...) sigue, pero no es como cualquier compilador en C



la traducción que quiero hacer en C18:
Código: C
  1. void main ( void )
  2. {              
  3.  
  4.   TRISB=0b11110111;
  5.   TRISA=0b10111111; // el bit MSB no existe en este puerto, se tomaría como 0bX011 1111
  6.   TRISC = 0b00000000;  
  7.   PORTA=0;
  8.   PORTB = 0;
  9.   PORTC = 0;
  10.  
  11.  ADCON1 = 0x0F; //VREF- source=0 (VSS); VREF+ source =0 (VDD);
  12.                                // PCFG3:PCFG0: A/D Port Configuration Control bits (1111= canales DAC TODOS digitales
  13.         /*
  14.         ADCON1: A/D CONTROL REGISTER 1
  15.         **   *** VCFG0  VCFG0      PCFG3  PCFG2  PCFG1  PCFG0 -> 0000 1111
  16.         */             
  17.  CloseADC();
  18.                                   // 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




Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: traducción de CCS a C18
« Respuesta #1 en: 07 de Julio de 2011, 15:27:41 »
Bueno aun me quedan preguntas sin respuesta, a pesar que tuve el CCS y se que es mas fácil, no sue usar todos los parámetros del PWM, por eso no se "traducir" bien lo que pone. He hecho el PWm como si "no tuviera en vista " lo que se hacia con CCS ( sacarlo lo mas "literalmente " posible) y he hecho un simple control de PWM, aunque no es exactamente la finalidad, bueno , ahi esta. Pero me sale una duda, vamos, no se como hacer esto:

quiero sacar la salida del PWM2 por el pin del puertoB, no por el del puerto C, para ello he visto los #defines de pwm.h ( C18) y he visto esto :" TRISBbits.TRISB3 =0b00000000;"
pero me sale la salida como si estuviera " por defecto" por el puertoC. ¿ Como puedo prepara la salida por puerto B ?


Código: C
  1. TRISBbits.TRISB3 =0b00000000;
  2.   PORTA=0;
  3.   PORTB = 0;
  4.   PORTC = 0;
  5.   OpenTimer2( T2_PS_1_1 & T2_POST_1_1);
  6.   OpenPWM2(0x3f); // Period - frequency
  7.  while(1)
  8.  {
  9.     SetDCPWM2(110);
  10.   }
  11.        
  12.  
  13. }

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: traducción de CCS a C18
« Respuesta #2 en: 07 de Julio de 2011, 16:02:38 »
Para seleccionar entre usar RB3 o RC2 se debe configurar un fuse, si mal no recuerdo.


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

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: traducción de CCS a C18
« Respuesta #3 en: 07 de Julio de 2011, 17:27:34 »
si, he visto esto :
#pragma config CCP2MX = PORTC
desde  "configuration bits" del MpLab, pero no me deja compilar, dice que no está bien implementado .Lo que he querido hacer es en realidad  "#pragma config CCP2MX = PORTB", pero no está ni como opción...

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: traducción de CCS a C18
« Respuesta #4 en: 07 de Julio de 2011, 20:28:42 »
Revisar el documento hlpPIC18ConfigSet ubicado en ...\MCC18\doc


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

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: traducción de CCS a C18
« Respuesta #5 en: 09 de Julio de 2011, 06:00:04 »
Bien! Buscaba desde los bits de configuración en la opción del MpLab y no lo encontraba. gracias!

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: traducción de CCS a C18
« Respuesta #6 en: 10 de Julio de 2011, 12:21:05 »
he vuelto a CCS para probar lo que si me ha salido en C18, pero el pwm está parado, y llevo una tarde perdida sin saber por que sucede..
Código: C
  1. #include "sonidoCCS.h"
  2.  
  3.  
  4. //#use RS232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)  
  5. #use delay(clock=8000000)
  6. [code=c]
  7. const  char datos[15807]={127   ......} // esta linea contiene en realidad 15807 numeros, que me impiden manda rel mesanje, por eso la acorto
  8.  
  9.  
  10. int16 i;
  11.  
  12.  
  13. void main(){
  14.  
  15. setup_adc_ports(NO_ANALOGS|VSS_VDD);
  16. setup_adc(ADC_OFF);
  17. setup_spi(SPI_SS_DISABLED);
  18.  
  19. setup_timer_1(T1_DISABLED);
  20.  
  21. SETUP_CCP1(CCP_PWM_HALF_BRIDGE|CCP_PWM_L_L|CCP_SHUTDOWN_AC_F);
  22. setup_wdt(WDT_OFF);
  23.  
  24. setup_timer_2(T2_DIV_BY_1,110,1);
  25.  
  26. setup_comparator(NC_NC_NC_NC);
  27. setup_vref(FALSE);
  28.  
  29. while(1)
  30.   {
  31.    setup_ccp1(CCP_CAPTURE_FE);
  32.    delay_ms(3000);
  33.   // delay_ms(30);
  34.    SETUP_CCP1(CCP_PWM_HALF_BRIDGE|CCP_PWM_L_L|CCP_SHUTDOWN_AC_F);
  35.  
  36.    for (i=0;i<1000;i++) {set_pwm1_duty(datos[i]);}
  37.    for (i=0;i<1000;i++) {set_pwm1_duty(datos[i]);}
  38.    for (i=0;i<1000;i++) {set_pwm1_duty(datos[i]);}
  39.    }
  40. }

y el .h
Código: C
  1. #include <18F4550.h>
  2. //#include "E:\Proyectos_carpeta_seguridad\PIC\sonido con CCS\sonido.h"
  3. //#include "sonido.h"
  4.  
  5. #device adc=8
  6.  
  7. #FUSES NOWDT                    //No Watch Dog Timer
  8. #FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
  9. #FUSES XT                       //Crystal osc <= 4mhz
  10. #FUSES NOPROTECT                //Code not protected from reading
  11. #FUSES BROWNOUT_NOSL            //Brownout enabled during operation, disabled during SLEEP
  12. #FUSES BROWNOUT                 //Reset when brownout detected
  13. #FUSES BORV20                   //Brownout reset at 2.0V
  14. #FUSES NOPUT                    //No Power Up Timer
  15. #FUSES NOCPD                    //No EE protection
  16. #FUSES STVREN                   //Stack full/underflow will cause reset
  17. #FUSES NODEBUG                  //No Debug mode for ICD
  18. #FUSES LVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
  19. #FUSES NOWRT                    //Program memory not write protected
  20. #FUSES NOWRTD                   //Data EEPROM not write protected
  21. #FUSES IESO                     //Internal External Switch Over mode enabled
  22. #FUSES FCMEN                    //Fail-safe clock monitor enabled
  23. #FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
  24. #FUSES NOWRTC                   //configuration not registers write protected
  25. #FUSES NOWRTB                   //Boot block not write protected
  26. #FUSES NOEBTR                   //Memory not protected from table reads
  27. #FUSES NOEBTRB                  //Boot block not protected from table reads
  28. #FUSES NOCPB                    //No Boot Block code protection
  29. #FUSES MCLR                     //Master Clear pin enabled
  30. #FUSES LPT1OSC                  //Timer1 configured for low-power operation
  31. #FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
  32. #FUSES PLL1                     //No PLL PreScaler
  33.  
  34.  
  35. #FUSES ICPRT                    //ICPRT enabled
  36.  
  37. #use delay(clock=20000000)
  38. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
[/code]
« Última modificación: 12 de Julio de 2011, 14:29:36 por PICYO »

Desconectado PICYO

  • PIC16
  • ***
  • Mensajes: 104
Re: traducción de CCS a C18
« Respuesta #7 en: 12 de Julio de 2011, 14:52:39 »
?


 

anything