Autor Tema: como activar el adc con un timer de 32bit  (Leído 2106 veces)

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

Desconectado tecnoplus

  • PIC10
  • *
  • Mensajes: 9
como activar el adc con un timer de 32bit
« en: 14 de Febrero de 2012, 23:03:48 »
#define FCY 15000000UL //utilizando oscilador interno 7,5  x 8pll 20mhz fcy =60mhz/4 = 15000000

#include "p30f4013.h"

#include "libpic30.h"



unsigned int  uno=0x1234;
unsigned int dos=0x5678;


unsigned long total,tmp360 ;
unsigned int  tmr5temporal,tmr4temporal,si_actadc=0,tmr6temporal;
unsigned int temphig,templow,num_muestras=0,numx_muestras,n_cp=3;
unsigned int *n_muestras,*nx_muestras ;


//**********************************
unsigned int  muestras[360];

// Declaraciones de las funciones
void txt2LCD(char caracter);
void env_ent(unsigned entero);
void msg2LCD(  char *cadena);
void InicializaUART();
void bit16_string (unsigned int valor16bit);
void ini_puertos();
void ini_adc();
void timer2_3();
void timer4_5();
void config_ccp1();


//void __attribute__((__interrupt__)) _ADCInterrupt(void)
{

if (num_muestras <= 360) // esto permite q solo guarde hasta 360 muestras y no se sobre pase la tabla
{
*n_muestras = ADCBUF0;  //*n_muestras++ = ADCBUF0; verifikr ponerlo asi
n_muestras++ ;
num_muestras++;
}
else
{
num_muestras=0;
}
PORTDbits.RD0=1;
IFS0bits.ADIF=0;    //desactiva bandera d interrupcion del adc
}
//**********************************************************************************************************************************************

// este utiliza el timer 4-5  d 32 bit para medir el tiempo d ela vuelta


/*for (n_muestras = &muestras
  • ;n_muestras != &muestras [360];n_muestras++)

{
*n_muestras = 0 ;  //
}

n_muestras = &muestras
  • ;  //esto inicia la toma de muestras empieza a tomar muestras desde 0

num_muestras=0;
*/


//--------------------------------
//IFS0bits.ADIF=0;    //desactiva bandera d interrupcion del adc








//***************************************************************
//Programa principal
//***************************************************************
int main (void)


{
unsigned int tiempo;

unsigned int  numeroejemplo;
long resultado,divide,dividiendo;

n_muestras = &muestras
  • ;  //esto inicia la toma de muestras empieza a tomar muestras desde 0



 ini_puertos();
ini_adc();
 timer2_3();


//--------------------------------------------------------------

 while(1)  //
  {

if(n_cp==3)
{
//__delay_ms(400);
n_cp=0;

}
__delay_us(1);

}
}
//******************************************************************************************************

//************************************************************

void ini_puertos()
{
asm("CLR PORTD");             //                 ; enable
asm("MOV #0xFFFE, W0");        //                ; direction in=1
asm("MOV W0, TRISD ");      //
}

void ini_adc()
{
ADPCFG=0XFFFE;      // solo el puerto RB0 como entrada analogica AN0
ADCON1=0;
ADCHS=0;   //selecciona canal 0  a positivo en AN0
ADCSSL=1;   // selecciona el canal AN0
ADCON3=0;   // pone todo a 0
ADCON3bits.ADCS=30; //
ADCON2=0;
ADCON3bits.SAMC=5;
ADCON1bits.SSRC=2;      // el timer2-3 d 32 bit  temina el sample y activa la convercion " cuando yo cambio  2   a 7  si me funciona pero qiero q lo active es el timer

ADCON1bits.ASAM =1;      //inicia muestreo en fin de conversion

IPC2bits.ADIP = 1; //1 Fijamos nivel de prioridad
IFS0bits.ADIF=0;    //desactiva bandera d interrupcion del adc
IEC0bits.ADIE=1;    //activa interrupcion del adc
ADCON1bits.ADON = 1;

}

// este timer es para activar la convercion del adc
void timer2_3()
{
T2CONbits.T32 = 1; // modo de 32-bits
T2CONbits.TCS = 0; // Clock interno
T2CONbits.TGATE = 0; // Mode Gate deshabilitado.
T2CONbits.TCKPS = 0b00; // Preescaler 1:1


PR3 = 0; // Fijamos periodo (msw)
PR2 = 300; // Fijamos periodo (lsw)

//IPC1bits.T3IP = 1; // Fijamos nivel de prioridad    
IFS0bits.T3IF = 0; // Borramos flag.
IEC0bits.T3IE = 0; //  CANCELAMOS Habilitamos interrupción.    

TMR3HLD = 0x00; // Borramos Timer3 (msw)
TMR2 = 0x00; // Borramos timer2 (lsw)

T2CONbits.TON = 1; // Encendemos timer de 32-bits.
 
}


hola el problema es q cuando llega  el timer a 300  por q pr = 300  no se activa el sample del adc y cuando configuro SSRC con 7
si me  activa el adc y cada cierto tiempo se activa la interrupcion del adc pero cuando lo pongo q lo active el timer de 32 bit no lo hace
espero puedan ayudarme gracias

« Última modificación: 14 de Febrero de 2012, 23:13:45 por tecnoplus »


 

anything