TODOPIC

Microcontroladores PIC => dsPIC => Mensaje iniciado por: Gabriel_SANLUIS en 03 de Mayo de 2016, 17:58:52

Título: Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 03 de Mayo de 2016, 17:58:52
Hola como están.
Tengo un problema con la configuración del TMR1 ... no puedo darle a la formula para configurarlo como temporizador... He intentado mil veces la carga del PR1 ... y ni por casualidad veo en el osciloscopio, el periodo calculado. Alguien podría ayudarme con algún ejemplo... bien con formulas para calcular el PR1 a cargar... y como quedaría en un archivo..
No se bien la función del PR1 ... y la del registro TMR1 .. ?
Muchas gracias.
PD: Este es el programa que estoy Corriendo en el dsPIC... y que no puedo calcular el tiempo de retardo ... ( me sale cualquier cosa el periodo cuando lo miro en el osciloscopio ).

#include "xc.h"
#include<p33FJ128GP802.h>
//#define FCY 10000000UL
#include<libpic30.h>
#include"timer_config.h"
#include<stdio.h>
void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void);

int main(void) {
   
    TRISB = 0x0000;     // Bit B13 como salida.
    T1CONbits.TON =0;
    T1CONbits.TCS =0;
    T1CONbits.TGATE =0;
    T1CONbits.TCKPS =0b11;
    TMR1 =0x00;
    PR1= 1;                   // Valor en el registro ( Retardo 20ms)
   
    IPC0bits.T1IP =0x01;
    IFS0bits.T1IF=0;            // Borra el Flag de Interrup Timer1
    IEC0bits.T1IE =1;           // Habilita interrupcion Timer1   
    T1CONbits.TON =1;           // Start Timer
   
      while(1){
       /* LATBbits.LATB12 = 1;
        __delay32(3000);
        LATBbits.LATB12 = 0;
        __delay32(3000);*/

           }
   
    return 0;
}


// Timer 1 interrupt service routine toggles LED on RD1
void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void)
{
 
    IFS0bits.T1IF = 0;
    _LATB13 = 1 - _LATB13;
   
    TMR1=0x00;
}


Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: KILLERJC en 03 de Mayo de 2016, 18:42:36
no entiendo por que necesitas un prototipo para la funcion de interrupcion, realmente no hace falta, tambien no necesitas cargar libpic30.h, ni tampoco el p33FJxxxx eso deberia cargarse solo con el xc.h

Todavia no vamos a hablar del timer, sino del oscilador. Que oscilador tenes  ( cristal, interno, etc ) ?, como esta configurado? Los fuses que estas usando?, y recien ahi veamos lo del timer.

Vos decis que el timer NO te funciona correctamente, Pero lo de los delay32 si funciona con los tiempos de forma correcta?

Que ecuacion estas usando para calcular el Timer?

Responde esas cosas y luego seguimos, por que falta mucho del programa ahi.
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 03 de Mayo de 2016, 19:48:45
Hola como estas. Muy amable por responder.
Te paso a responder:
Uso un oscilador de cristal de cuarzo de Fosc =20 MHz. ... un Preescaler de 256.
Calculo Tcy = 2 / Fosc
Calculo 1TYC = Tcy x 256 ( tiempo en realizar un conteo )
Uso la formula de tiempo de desbordamiento ... como:
Tdesb = ( 65536 - TMR1 ) x 1TYC  --- > de esta formula despejo TMRO ( poniendo como dato el tiempo q quiero obtener en el timer)
TMR1 = 65536 - ( Tdesb / 1 TYC )
Ahora para cargar el RP1 .....
RP1 = 65536 - Valor obtenido para TMR1

Eso básicamente es lo que encontré buscando en internet para hacer.
por eso es que pongo el TMR1 = 0 .... y cargo en el RP1 el valor que obtengo al final.

Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 03 de Mayo de 2016, 19:53:38
Estos son los FUses que estoy usando.

// FBS
#pragma config BWRP = WRPROTECT_OFF     // Boot Segment Write Protect (Boot Segment may be written)
#pragma config BSS = NO_FLASH           // Boot Segment Program Flash Code Protection (No Boot program Flash segment)
#pragma config RBS = NO_RAM             // Boot Segment RAM Protection (No Boot RAM)

// FSS
#pragma config SWRP = WRPROTECT_OFF     // Secure Segment Program Write Protect (Secure segment may be written)
#pragma config SSS = NO_FLASH           // Secure Segment Program Flash Code Protection (No Secure Segment)
#pragma config RSS = NO_RAM             // Secure Segment Data RAM Protection (No Secure RAM)

// FGS
#pragma config GWRP = OFF               // General Code Segment Write Protect (User program memory is not write-protected)
#pragma config GSS = OFF                // General Segment Code Protection (User program memory is not code-protected)

// FOSCSEL
#pragma config FNOSC = PRI              // Oscillator Mode (Primary Oscillator (XT, HS, EC))
#pragma config IESO = OFF               // Internal External Switch Over Mode (Start-up device with user-selected oscillator source)

// FOSC
#pragma config POSCMD = XT              // Primary Oscillator Source (XT Oscillator Mode)
#pragma config OSCIOFNC = OFF           // OSC2 Pin Function (OSC2 pin has clock out function)
#pragma config IOL1WAY = OFF            // Peripheral Pin Select Configuration (Allow Multiple Re-configurations)
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor (Both Clock Switching and Fail-Safe Clock Monitor are disabled)

// FWDT
#pragma config WDTPOST = PS32768        // Watchdog Timer Postscaler (1:32,768)
#pragma config WDTPRE = PR128           // WDT Prescaler (1:128)
#pragma config WINDIS = OFF             // Watchdog Timer Window (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = ON              // Watchdog Timer Enable (Watchdog timer always enabled)

// FPOR
#pragma config FPWRT = PWR128           // POR Timer Value (128ms)
#pragma config ALTI2C = OFF             // Alternate I2C  pins (I2C mapped to SDA1/SCL1 pins)

// FICD
#pragma config ICS = PGD1               // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1)
#pragma config JTAGEN = OFF             // JTAG Port Enable (JTAG is Disabled)


Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 03 de Mayo de 2016, 20:06:36
Aquí limpie un poco el código... para que sea mas prolijo. El valor cargado en PR1 = 1.... es una prueba cualquiera, ya cansado de que no ande... ( no temporice lo que calculaba ... Por ejemplo, me sale que para tener 20ms con Cristal de 20 MHz .. Pre escaler de 256 --- Debo cargarle a PR1 = 781 )...

#include "xc.h"
#include<p33FJ128GP802.h>
#include<libpic30.h>
#include"timer_config.h"
#include<stdio.h>
void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void);

int main(void) {
   
    TRISB = 0x0000;     // Bit B13 como salida.
    T1CONbits.TON =0;
    T1CONbits.TCS =0;
    T1CONbits.TGATE =0;
    T1CONbits.TCKPS =0b11;      // Pre escaler 1:256
    TMR1 =0x00;
    PR1=1562;                   // Valor en el registro ( Retardo 20ms)
   
    IPC0bits.T1IP =0x01;
    IFS0bits.T1IF=0;            // Borra el Flag de Interrup Timer1
    IEC0bits.T1IE =1;           // Habilita interrupcion Timer1   
    T1CONbits.TON =1;           // Start Timer
   
      while(1)
   
    return 0;
}

// Timer 1 interrupt service routine toggles LED on RD1
void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void)
{
 
    IFS0bits.T1IF = 0;
    _LATB13 = 1 - _LATB13;
   
    TMR1=0x00;
}

Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: KILLERJC en 03 de Mayo de 2016, 21:39:54
Código: C
  1. #pragma config POSCMD = XT              // Primary Oscillator Source (XT Oscillator Mode)

Para 4Mhz o mas usa HS, XT usalo para 4Mhz o menos.
Eso tal ves te solucione ya el tema de los tiempos.

Código: C
  1. #pragma config FWDTEN = ON              // Watchdog Timer Enable (Watchdog timer always enabled)

Por ahora pasalo a OFF, sino tenes que poner la instruccion para resetear el WDT, porque se te va a reiniciar a cada rato.

Luego me fijo bien en el timer. Pero noto un par de cosas mal aplicadas.

Código: C
  1. TMR1=0x00;

Eso esta mal, el timer1 es un Timer del tipo A ( si es que bajas la hoja de datos del dsPIC ) este timer, cuenta desde 0 hasta PR1, cuando llega a PR1 se resetea el Timer0 por si solo, Entonces si yo quiero que pasen 10000 ticks, directamente cargo 10000 a PR1 y activo el timer, y ya no tengo que hacer mas nada. Respecto al calculo:

Citar
Uso un oscilador de cristal de cuarzo de Fosc =20 MHz. ... un Preescaler de 256.
Calculo Tcy = 2 / Fosc - Correcto
Calculo 1TYC = Tcy x 256 ( tiempo en realizar un conteo ) - Correcto
Uso la formula de tiempo de desbordamiento ... como:
Tdesb = ( 65536 - TMR1 ) x 1TYC  --- > de esta formula despejo TMRO ( poniendo como dato el tiempo q quiero obtener en el timer)
TMR1 = 65536 - ( Tdesb / 1 TYC )

Ahora para cargar el RP1 .....
RP1 = Tdesb / 1 TYC   ( El entero mas cercano )

Pensalo de esta forma, al timer entra una frecuencia que es Tcy, luego se divide con el preescaler por 256 a esa frecuencia, o lo que es lo mismo que el periodo se multiplica por 256, Y esa es la señal de reloj que entra al timer, es decir que por cada 1 que cuente va a pasar

Código: [Seleccionar]
(2 * Preescaler) / Fosc
segundos, Supongamos que tenes 20Mhz y 1:256, eso te da 25.6us cada ves que sume 1 el timer. Si quisiera hacer una interrupcion cada 0.5s deberia contar hasta

Código: [Seleccionar]
0.5s / 25.6us = 19531.25
Obviamente no podemos poner fracciones, asi que nos quedamos con el mas cercano que es 19531, eso lo cargamos en el PR1, ponemos a 0 el TMR1, configuramos, activamos interrupciones y finalmente lo hacemos arrancar. Una ves que arranco Cuando el registro del TMR1 sea igual al PR1 activa la bandera de interrupcion, y ademas de eso procede a poner a 0 el TMR1, asi vuelve a contar de nuevo.

Resumen, Pones a 0 el TMR1 y cargas el PR1 al comienzo y no lo tocas nunca mas ( a no ser que quieras cambiar el tiempo de la interrupcion en el medio del programa )
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 03 de Mayo de 2016, 22:02:16
Mil Gracias !!!...
Ya hice lo que me marcaste, y esta bien.... Lo único que el tiempo pasa a ser cualquier cosa.... Para nada respeta la formula. Aclaro, que lo que cargo no es el TMR1 .... sino que cargo el PR1 ... con el valor que me sale de la formula, que como te decía, es 781 para obtener 20ms ... con un oscilador de 20 MHz .. y un preescaler de 256. Nii por casualidad se obtienen los 20 milisegundos... sino que el tiempo es muchisimooo mas alto.... al bajar el numero del PR1 .... a por ejemplo PR1 = 1 ... allí si veo el led parpadear.....
Te juro que agradezco muchisimooo tu ayuda... ya que estoy desde la mañana sin exagenerar con esto...y no me he levantado mas que para comer... y no lo puedo resolver.
Espero puedas mirarlo. Te dejo un Abrazo. Gabriel.
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: KILLERJC en 03 de Mayo de 2016, 22:06:53
Perdon justo modifique la respuesta. Escribo esto para que sepas que esta editado arriba.

El tema del timer esta aca:
http://ww1.microchip.com/downloads/en/DeviceDoc/70205D.pdf
 
Si buscas tu dsPIC, cada modulo tiene su propio PDF que es valido para los PIC24 y dsPIC. Por si estas acostumbrado a los PIC16/18 que tenias todo en un solo datasheet.

El tema del oscilador creo que un poco mas de regla practica, supuestamente XT en algunos pdfs los vi hasta 10Mhz, pero en otros solo hasta 4Mhz, asi que queda alli.

Para mi este seria todo tu programa:

Código: C
  1. #include "xc.h"
  2.  
  3.  
  4. int main(void) {
  5.    
  6.     TRISB = 0x0000;     // Bit B13 como salida.
  7.     T1CONbits.TON =0;
  8.     T1CONbits.TCS =0;
  9.     T1CONbits.TGATE =0;
  10.     T1CONbits.TCKPS =0b11;      // Pre escaler 1:256
  11.     TMR1=0x00;
  12.     PR1=781;                   // Valor en el registro ( Retardo 20ms)
  13.    
  14.     IPC0bits.T1IP =0x01;
  15.     IFS0bits.T1IF=0;            // Borra el Flag de Interrup Timer1
  16.     IEC0bits.T1IE =1;           // Habilita interrupcion Timer1  
  17.     T1CONbits.TON =1;           // Start Timer
  18.    
  19.     while(1);
  20.    
  21.     return 0;
  22. }
  23.  
  24.  
  25. void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void)
  26. {
  27.  
  28.     IFS0bits.T1IF = 0;
  29.     _LATB13 = ~_LATB13;
  30. }

PD:

20ms / 25.6us = 781.25
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 03 de Mayo de 2016, 22:23:15
No me esta respondiendo los tiempos....
Una duda , donde pusiste ... >  0.5s / 25.6us = 19531.25   ...> Alli debes usar las mismas unidades en numerador y denominador.....?...

Calcule tal cual, y me sigue dando RP1 = 781 ---- > para los 20ms y para el cristal de 20Mhz y pre escaler 256... y ni allí que lo cuenta... :-( .... me tiene desconcertado... mas siendo algo sencillo..
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 03 de Mayo de 2016, 23:18:37
Mejoro muchicimooo !!!!!! gracias.
Lo único que no responde con los cálculos aun..... me da algo asi como 50ms..... tendría que dar 20 ms.... con la carga de 781 ...
Te paso algunas de las fotos.
 - Tienes que ingresar para ver archivos adjuntos -
 - Tienes que ingresar para ver archivos adjuntos -
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: uZYNQ en 04 de Mayo de 2016, 19:38:05
Saludos,
 
  Al parecer te esta funcionando con el reloj interno 7.37Mhz. Para este reloj coincide la interrupción a los 54,25ms. Esto lo puedes verificar si quitas el cristal y te sigue mostrando la señal en el osciloscopio. Si esta trabajando con el reloj interno te recomendaria utilizar el fuse IESO=ON, el cual arranca el cpu con el reloj interno y luego cambia al externo cuando esta listo.
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 09 de Mayo de 2016, 22:58:05
Muchas Gracias por tu Observación ..uZYNQ

Si puede ser, por que no hay manera de obtener el periodo calculado. Voy a probar a ver que pasa.... Pero si puedes fijarte por favor en estos FUSES... a ver si lo puedo hacer trabajar con el reloj externo de 20 MHz.
Muchas Gracias. !!!!
Pd: TE copio los Fuses que estoy usando.

// FBS
#pragma config BWRP = WRPROTECT_OFF     // Boot Segment Write Protect (Boot Segment may be written)
#pragma config BSS = NO_FLASH           // Boot Segment Program Flash Code Protection (No Boot program Flash segment)
#pragma config RBS = NO_RAM             // Boot Segment RAM Protection (No Boot RAM)

// FSS
#pragma config SWRP = WRPROTECT_OFF     // Secure Segment Program Write Protect (Secure segment may be written)
#pragma config SSS = NO_FLASH           // Secure Segment Program Flash Code Protection (No Secure Segment)
#pragma config RSS = NO_RAM             // Secure Segment Data RAM Protection (No Secure RAM)

// FGS
#pragma config GWRP = OFF               // General Code Segment Write Protect (User program memory is not write-protected)
#pragma config GSS = OFF                // General Segment Code Protection (User program memory is not code-protected)

// FOSCSEL
#pragma config FNOSC = PRI              // Oscillator Mode (Primary Oscillator (XT, HS, EC))
#pragma config IESO = OFF               // Internal External Switch Over Mode (Start-up device with user-selected oscillator source)

// FOSC
#pragma config POSCMD = HS              // Primary Oscillator Source (XT Oscillator Mode)
#pragma config OSCIOFNC = OFF           // OSC2 Pin Function (OSC2 pin has clock out function)
#pragma config IOL1WAY = OFF            // Peripheral Pin Select Configuration (Allow Multiple Re-configurations)
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor (Both Clock Switching and Fail-Safe Clock Monitor are disabled)

// FWDT
#pragma config WDTPOST = PS32768        // Watchdog Timer Postscaler (1:32,768)
#pragma config WDTPRE = PR128           // WDT Prescaler (1:128)
#pragma config WINDIS = OFF             // Watchdog Timer Window (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = OFF              // Watchdog Timer Enable (Watchdog timer always enabled)

// FPOR
#pragma config FPWRT = PWR128           // POR Timer Value (128ms)
#pragma config ALTI2C = OFF             // Alternate I2C  pins (I2C mapped to SDA1/SCL1 pins)

// FICD
#pragma config ICS = PGD1               // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1)
#pragma config JTAGEN = OFF             // JTAG Port Enable (JTAG is Disabled)


Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: luismh en 10 de Mayo de 2016, 08:51:05
Me sucedió eso alguna vez... El problema era que mi cristal no arrancaba y cuando pasa eso el dspic arranca con su oscilador interno... Ya que tienes un osciloscopio, podrías ver también la señal del cristal y confirmar que está oscilando a su frecuencia natural... Que capacitores les pusiste? Lo ideal para esa frecuencia es de 15pF, pero creo que hasta unos 30 pF también funcionaría.

Saludos!
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: KILLERJC en 10 de Mayo de 2016, 15:25:15
Yo ya no veo nada malo en los fuses, o deberia abrir el MPLAB , crear un proyecto y generarlos, pero parecen estar bien.

Lo que me extraña es que a pesar que esta el IESO deshabilitado ( que NO arranque con el oscilador interno ), que esten deshabilitados los cambios de reloj ( Imposibilita el cambio en la marcha ), aun asi se este ejecutando o arrancando con el oscilador interno.

PD: Tampoco hay nada en el errata.
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 15 de Mayo de 2016, 16:16:26
Hola Amigos.
Si, tienen razón. El problema es que no esta arrancando con el cristal Externo de 20MHz .... esta funcionando con el reloj interno. Hice la prueba de sacarle el cristal, mientras funcionaba, y sigue encendiendo el led, con la frecuencia que el quiere. O sea, el problema esta en que no esta bien configurado para arrancar el cristal.
Aca les pego la configuración de los fuses.... que la llamo con un #include"configuracion.h" ..... ( que dicho sea de paso, ya me genero dudas, si esta bien hacerlo asi... pero bue... Aca va.

#include <xc.h>

// FBS
#pragma config BWRP = WRPROTECT_OFF     // Boot Segment Write Protect (Boot Segment may be written)
#pragma config BSS = NO_FLASH           // Boot Segment Program Flash Code Protection (No Boot program Flash segment)
#pragma config RBS = NO_RAM             // Boot Segment RAM Protection (No Boot RAM)

// FSS
#pragma config SWRP = WRPROTECT_OFF     // Secure Segment Program Write Protect (Secure segment may be written)
#pragma config SSS = NO_FLASH           // Secure Segment Program Flash Code Protection (No Secure Segment)
#pragma config RSS = NO_RAM             // Secure Segment Data RAM Protection (No Secure RAM)

// FGS
#pragma config GWRP = OFF               // General Code Segment Write Protect (User program memory is not write-protected)
#pragma config GSS = OFF                // General Segment Code Protection (User program memory is not code-protected)

// FOSCSEL
#pragma config FNOSC = PRI              // Oscillator Mode (Primary Oscillator (XT, HS, EC))
#pragma config IESO = ON                // Internal External Switch Over Mode (Start-up device with FRC, then automatically switch to user-selected oscillator source when ready)

// FOSC
#pragma config POSCMD = HS              // Primary Oscillator Source (HS Oscillator Mode)
#pragma config OSCIOFNC = OFF           // OSC2 Pin Function (OSC2 pin has clock out function)
#pragma config IOL1WAY = ON             // Peripheral Pin Select Configuration (Allow Only One Re-configuration)
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor (Both Clock Switching and Fail-Safe Clock Monitor are disabled)

// FWDT
#pragma config WDTPOST = PS32768        // Watchdog Timer Postscaler (1:32,768)
#pragma config WDTPRE = PR128           // WDT Prescaler (1:128)
#pragma config WINDIS = OFF             // Watchdog Timer Window (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = ON              // Watchdog Timer Enable (Watchdog timer always enabled)

// FPOR
#pragma config FPWRT = PWR128           // POR Timer Value (128ms)
#pragma config ALTI2C = OFF             // Alternate I2C  pins (I2C mapped to SDA1/SCL1 pins)

// FICD
#pragma config ICS = PGD1               // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1)
#pragma config JTAGEN = OFF             // JTAG Port Enable (JTAG is Disabled)



Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 15 de Mayo de 2016, 16:33:45
Lo que intento hacer funcionar es esto que encontré en internet..... Fijense por que no hay manera de que ande. Es con el cristal externo de 20 MHz ... y estoy usando unos capacitores de 104 pf ... 100000 pf .... Ahh y encontré en un documento de microchip el DS70292E ... pagina 141 .. que debo usar una resistencia de 1M ohm entre las patas OSC1 y OSC2 para un cristal tipo XT o HS .... y el mismo esta conectado a las patas SOSC0 y SOSC1 ....
Aquí les mando en un adjunto el practico, a ver si alguien lo puede mirar...o probar.
Gracias.
 - Tienes que ingresar para ver archivos adjuntos -
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: KILLERJC en 15 de Mayo de 2016, 17:53:44
Podrias subir una imagen de tu circuito ?
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 15 de Mayo de 2016, 18:54:18
Aquí te subo una imagen del circuito. De acuerdo al doc de microchip, puse una resistencia de 1Mohm entre OSC1 y OSC2 .... y el cristal lo puse entre las patas SOSC0 y SOSC1 .... uso unos capacitares cerámicos de 22pF ....

 - Tienes que ingresar para ver archivos adjuntos -

Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 15 de Mayo de 2016, 18:56:56
 - Tienes que ingresar para ver archivos adjuntos -
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: KILLERJC en 15 de Mayo de 2016, 19:35:13
El cristal va en OSC1 y OSC2. SOSC1/SOSC2 es para otro cristal y se usa para uno de 32Khz

Los capacitores del cristal ponele de 27pF ( entre 20pF y 30pF seguro que va a funcionar seguro) , y no unos 104 que es igual a .1uF
27pF esta marcado con el numero 27 solo en el capacitor.

La resistencia para el oscilador por ahora no creo que haga falta.

Y deberia estar, el MCLR esta bien, el Vcap imagino que tambien ( pide de un valor correcto casi siempre ) y las alimentaciones estan, lo que queda son entradas y salidas. Esa correccion y deberia funcionar.
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 15 de Mayo de 2016, 19:39:42
Este es el progama Principal que estoy usando.

#include "xc.h"
//#include"configuracion.h"

// *******************Configuracion de bits **********************

void retardo_ms(void);

int main(void) {
    TRISB = 0B1100111111111111;     // Bit B13 como salida.
   
    while(1){
        //LATB = 0B0010000000000000;
        LATBbits.LATB13=1;
        retardo_ms();                   // Rutina de retardo.
        LATBbits.LATB13=0;              // Pone a '0' bit 13.
        retardo_ms();                   // Rutina de retardo.
            }
}

// **** FUNCION DE RETARDO ***

void retardo_ms(void){
    T1CON =0;
    T1CON = 0x8030;
    TMR1 =0;
                                // Valor en el registro ( Retardo 20ms)
    PR1= 782;
    IPC0bits.T1IP =0x01;
   
    IFS0bits.T1IF=0;            // Borra el Flag de Interrup Timer1
    IEC0bits.T1IE =1;           // Habilita interrupcion Timer1
   
    T1CONbits.TON =1;           // Start Timer
     
    while(IFS0bits.T1IF == 0);
   
}

// Timer 1 interrupt service routine toggles LED on RD1
void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void)
{
    // Clear Timer 1 interrupt flag
    IFS0bits.T1IF = 0;
 
    // Toggle LED on RD1
    _LATB13 = 1 - _LATB13;
}
Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 15 de Mayo de 2016, 19:42:37
Y tengo dentro de las carpetas del proyecto::: HEADER FILES ... el siguiente archivo con las configuraciones de los FUSES.... ( Me podrias decir si eso esta bien ??? ).... A este archivo lo llamo en el programa principal con un #include"configuracion.h" .... Esta bien asi?....


#include <xc.h>

// FBS
#pragma config BWRP = WRPROTECT_OFF     // Boot Segment Write Protect (Boot Segment may be written)
#pragma config BSS = NO_FLASH           // Boot Segment Program Flash Code Protection (No Boot program Flash segment)
#pragma config RBS = NO_RAM             // Boot Segment RAM Protection (No Boot RAM)

// FSS
#pragma config SWRP = WRPROTECT_OFF     // Secure Segment Program Write Protect (Secure segment may be written)
#pragma config SSS = NO_FLASH           // Secure Segment Program Flash Code Protection (No Secure Segment)
#pragma config RSS = NO_RAM             // Secure Segment Data RAM Protection (No Secure RAM)

// FGS
#pragma config GWRP = OFF               // General Code Segment Write Protect (User program memory is not write-protected)
#pragma config GSS = OFF                // General Segment Code Protection (User program memory is not code-protected)

// FOSCSEL
#pragma config FNOSC = PRI              // Oscillator Mode (Primary Oscillator (XT, HS, EC))
#pragma config IESO = OFF               // Internal External Switch Over Mode (Start-up device with user-selected oscillator source)

// FOSC
#pragma config POSCMD = HS              // Primary Oscillator Source (XT Oscillator Mode)
#pragma config OSCIOFNC = OFF           // OSC2 Pin Function (OSC2 pin has clock out function)
#pragma config IOL1WAY = OFF            // Peripheral Pin Select Configuration (Allow Multiple Re-configurations)
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor (Both Clock Switching and Fail-Safe Clock Monitor are disabled)

// FWDT
#pragma config WDTPOST = PS32768        // Watchdog Timer Postscaler (1:32,768)
#pragma config WDTPRE = PR128           // WDT Prescaler (1:128)
#pragma config WINDIS = OFF             // Watchdog Timer Window (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = OFF              // Watchdog Timer Enable (Watchdog timer always enabled)

// FPOR
#pragma config FPWRT = PWR128           // POR Timer Value (128ms)
#pragma config ALTI2C = OFF             // Alternate I2C  pins (I2C mapped to SDA1/SCL1 pins)

// FICD
#pragma config ICS = PGD1               // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1)
#pragma config JTAGEN = OFF             // JTAG Port Enable (JTAG is Disabled)


Título: Re:Problemas con Timer1 del dsPIC33FJ128GP802
Publicado por: Gabriel_SANLUIS en 15 de Mayo de 2016, 19:59:54
GRACIASSSSSSSSS !!!!!!!!!!!!! Amigos !!!!! Mil gracias KILLERJC  uZYNQ  ... y luismh . !!!! Logre que funcionara, gracias a su ayuda !!!.
Sin su ayuda, aun estaría dando vueltas. Asi que muy agradecido.

 - Tienes que ingresar para ver archivos adjuntos -