Autor Tema: Duda con PIC18F4550, PWM y USB en C18  (Leído 5138 veces)

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

Desconectado cocus

  • PIC10
  • *
  • Mensajes: 9
Duda con PIC18F4550, PWM y USB en C18
« en: 05 de Marzo de 2011, 17:49:24 »
Hola, buenas tardes.
Bueno vamos de lleno al caso: Tengo un pic 18f4550, con el cual ya he hecho varias cosas, pero ahora debo establecer un PWM fijo, los calculos ya los tengo hechos, y en el Proteus funciona perfecto... Pero que pasa, lo flasheo al pic y no hace nada...
Ademas, tengo un Timer0 con interrupcion habilitada, y en la interrupcion yo hago un pulso y nada mas... Y tampoco pasa eso en la vida real, pero en el proteus si...

El codigo que uso lo hice yo, pero esta basado en el Framework del USB LibUSB de la libreria de Microchip... (todavia no use las funciones usb).
Aqui tengo esto en el main.c (es donde se inicia todo)
Código: C
  1. void UserInit(void)
  2. {
  3.  
  4.         LATA = LATB = LATD = LATE = 0x00;
  5.         TRISA = TRISB = TRISC = TRISD = TRISE = 0xFF;
  6.  
  7.         INTCONbits.PEIE = 1;    // Habilitamos interrupcion de perifericos.-
  8.         INTCONbits.GIE = 1;             // Habilitamos interrupcion Global.
  9.         RCONbits.IPEN = 1;
  10.         INTCON2bits.TMR0IP = 1;
  11.         INTCONbits.TMR0IF = 0;
  12.  
  13.         tlc5940_init();
  14. }

y en la funcion tlc5940_init tengo:
Código: C
  1. void tlc5940_init(void)
  2. {
  3.  
  4.         DRIVER_TLC5940_TRIS_PWMPIN = 0;
  5.         DRIVER_TLC5940_TRIS_BLANK = 0;
  6.  
  7.         OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1);
  8.  
  9.         // PWM period =[(TMR2) + 1] x 4 x TOSC x TMR2 prescaler
  10.         // 375 kHz = 1/((31 + 1) x 4 x Tosc x TMR2)
  11.         // 750 kHz = 1/((15 + 1) x 4 x Tosc x TMR2)
  12.  
  13.         // PWM Duty Cycle = (CCPRXL:CCPXCON<5:4>) &#8226; TOSC &#8226; (TMR2 Prescale Value)
  14.         // (1/375kHz)/2 = (17) x Tosc x TMR2
  15.  
  16.         OpenPWM1(0x0F);   // 15
  17.         SetDCPWM1(0x20);  // 17
  18.  
  19.         OpenTimer0(TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_4);
  20.         WriteTimer0(0x8000); // 32768
  21. }

Donde DRIVER_TLC5940_TRIS_PWMPIN y DRIVER_TLC5940_TRIS_BLANK estan declarados como:
Código: C
  1. #define DRIVER_TLC5940_TRIS_PWMPIN                              TRISCbits.TRISC2
  2. #define DRIVER_TLC5940_TRIS_BLANK                               TRISAbits.TRISA3

Bueno ahi ven que seteo el PWM1, y el Timer0... En el manejador de interrupciones tengo:
Código: C
  1. #pragma interrupt YourHighPriorityISRCode
  2.         void YourHighPriorityISRCode()
  3.         {
  4.                 //Check which interrupt flag caused the interrupt.
  5.                 //Service the interrupt
  6.                 //Clear the interrupt flag
  7.                 //Etc.
  8.         #if defined(USB_INTERRUPT)
  9.                 USBDeviceTasks();
  10.         #endif
  11.  
  12.                 if (INTCONbits.TMR0IF) {
  13.                         DRIVER_TLC5940_BLANK = 1;
  14.                         DRIVER_TLC5940_BLANK = 0;
  15.  
  16.                         WriteTimer0(0x8000);
  17.                         INTCONbits.TMR0IF = 0;
  18.                 }      
  19.  
  20.        
  21.         }
Donde DRIVER_TLC5940_BLANK esta definido como:
Código: C
  1. #define DRIVER_TLC5940_BLANK                                    LATAbits.LATA3
.

Lo que me extraña es que como antes decia, en el Proteus funciona de maravilla, y en la vida real no...
Que puede ser???

Muchas gracias de antemano

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con PIC18F4550, PWM y USB en C18
« Respuesta #1 en: 05 de Marzo de 2011, 18:12:43 »
¿Que fuses estás utilizando y como es el hardware? ¿Estas utilizando prioridades en las interrupciones? Esta ultima pregunta es por como trabajas los bits de interrupción, como que se mezclan los conceptos  ;-)



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

Desconectado cocus

  • PIC10
  • *
  • Mensajes: 9
Re: Duda con PIC18F4550, PWM y USB en C18
« Respuesta #2 en: 05 de Marzo de 2011, 18:21:36 »
¿Que fuses estás utilizando y como es el hardware? ¿Estas utilizando prioridades en las interrupciones? Esta ultima pregunta es por como trabajas los bits de interrupción, como que se mezclan los conceptos  ;-)



Saludos!

El hardware por ahora no es mas que los 2 capacitores y el cristal de 20MHz (el cual uso para probar otras cosas)...

Los fuses son los siguientes:
Código: C
  1. #pragma config PLLDIV   = 5         // (20 MHz crystal on PICDEM FS USB board)
  2.         #pragma config CPUDIV   = OSC1_PLL2  
  3.         #pragma config USBDIV   = 2         // Clock source from 96MHz PLL/2
  4.         #pragma config FOSC     = HSPLL_HS
  5.         #pragma config FCMEN    = OFF
  6.         #pragma config IESO     = OFF
  7.         #pragma config PWRT     = OFF
  8.         #pragma config BOR      = ON
  9.         #pragma config BORV     = 3
  10.         #pragma config VREGEN   = ON      //USB Voltage Regulator
  11.         #pragma config WDT      = OFF
  12.         #pragma config WDTPS    = 32768
  13.         #pragma config MCLRE    = OFF
  14.         #pragma config LPT1OSC  = OFF
  15.         #pragma config PBADEN   = OFF
  16.         //      #pragma config CCP2MX   = ON
  17.         #pragma config STVREN   = ON
  18.         #pragma config LVP      = OFF
  19.         //      #pragma config ICPRT    = OFF       // Dedicated In-Circuit Debug/Programming
  20.         #pragma config XINST    = OFF       // Extended Instruction Set
  21.         #pragma config CP0      = OFF
  22.         #pragma config CP1      = OFF
  23.         //      #pragma config CP2      = OFF
  24.         //      #pragma config CP3      = OFF
  25.         #pragma config CPB      = OFF
  26.         //      #pragma config CPD      = OFF
  27.         #pragma config WRT0     = OFF
  28.         #pragma config WRT1     = OFF
  29.         //      #pragma config WRT2     = OFF
  30.         //      #pragma config WRT3     = OFF
  31.         #pragma config WRTB     = OFF       // Boot Block Write Protection
  32.         #pragma config WRTC     = OFF
  33.         //      #pragma config WRTD     = OFF
  34.         #pragma config EBTR0    = OFF
  35.         #pragma config EBTR1    = OFF
  36.         //      #pragma config EBTR2    = OFF
  37.         //      #pragma config EBTR3    = OFF
  38.         #pragma config EBTRB    = OFF

Si, estoy usando prioridades, fijate que aca seteo las prioridades y que el Timer0 sea de alta prioridad:
Código: C
  1. RCONbits.IPEN = 1;
  2.         INTCON2bits.TMR0IP = 1;

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda con PIC18F4550, PWM y USB en C18
« Respuesta #3 en: 05 de Marzo de 2011, 21:54:58 »

Si, estoy usando prioridades, fijate que aca seteo las prioridades y que el Timer0 sea de alta prioridad:
Código: C
  1. RCONbits.IPEN = 1;
  2.         INTCON2bits.TMR0IP = 1;


Si ya lo sé, pero la mezcla está en esto:

Código: C
  1. INTCONbits.PEIE = 1;    // Habilitamos interrupcion de perifericos.-
  2.         INTCONbits.GIE = 1;

En realidad al trabajar con prioridades se habilitan las de alta o baja prioridad. Tienen distintos nombres, nada más, pero es conceptual.  ;-)


mmm... dando una mirada rápida no se ve nada raro, podrías ver si el microcontrolador está trabajando con un simple titilar de led y descartar problemas de hardware...


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

Desconectado cocus

  • PIC10
  • *
  • Mensajes: 9
Re: Duda con PIC18F4550, PWM y USB en C18
« Respuesta #4 en: 05 de Marzo de 2011, 22:29:21 »
Mira, yo probe con otros valores de frecuencias y funcionan... El tema es que con esa configuracion (que tiene todo el sentido, y en el Proteus da los valores exactos) no funciona en el pic....
Y algo que me da mas curiosidad aun, es que el Timer no funciona de ninguna manera... Osea, en el proteus si, pero en el pic no ... Ya probe agregar un "manejador" para el low priority, pero aun asi no funciona....

La idea de todo esto es hacer la libraria que presenta "Simon Inns" en su pagina: USB RGB LED VU Meter con 18F2550, pero el usa el Hi-TECH C18, el cual es muy poco compatible con el C18 de Microchip. Ademas yo voy a usar un 18F4550, pero de todas formas, el hardware NO cambia para nada (exceptuando los pines, y casos especificos).
Por ende, y segun lo que yo creo, no puedo hacerlo funcionar porque me faltan los pulsos del PWM y los "pulsos" que genera la rutina en el Timer0.

Desconectado cocus

  • PIC10
  • *
  • Mensajes: 9
Re: Duda con PIC18F4550, PWM y USB en C18
« Respuesta #5 en: 20 de Marzo de 2011, 14:42:36 »
Hola, comento para que no queden dudas. Aparentemente el integrado estaba semi-quemado. No le funciona ni el USB, ni el PWM, ni el serie. Es una lastima porque a este integrado lo compre hace mucho, y justo ahora lo voy a usar. Al otro que venia en el par, tambien le toco una suerte peor. El otro directamente no lo reconoce la programadora, y no se puede grabar nada.

Ya probe el codigo en otro nuevo, y funciona el PWM y todo, pero para lo que lo iba a usar no funciono.

Saludos


 

anything