Tool/software: Code Composer Studio
I want to see the value both of temperature value and ADC value together.
I tried to mix already but it was error so, these are my codes below:
//########################################################################### // // FILE: adc_soc_epwm_tempsensor_cpu01.c // // TITLE: Sample temperature sensor and convert to temperature for F2837xS. // //! \addtogroup cpu01_example_list //! <h1> ADC temperature sensor conversion (adc_soc_epwm_tempsensor)</h1> //! //! This example sets up the ePWM to periodically trigger the ADC. The //! ADC converts the internal connection to the temperature sensor, //! which is then interpreted as a temperature by calling the //! GetTemperatureC function. //! //! After the program runs, the memory will contain:\n //! - \b sensorSample \b : The raw reading from the temperature sensor. \n //! - \b sensorTemp \b : The interpretation of the sensor sample as a //! temperature in degrees Celsius. //! // //########################################################################### // $TI Release: F2837xS Support Library v200 $ // $Release Date: Tue Jun 21 13:52:16 CDT 2016 $ // $Copyright: Copyright (C) 2014-2016 Texas Instruments Incorporated - // http://www.ti.com/ ALL RIGHTS RESERVED $ //########################################################################### // // Included Files // #include "F28x_Project.h" // // Function Prototypes // void ConfigureADC(void); void ConfigureEPWM(void); void SetupADCEpwm(void); interrupt void adca1_isr(void); // // Globals // Uint16 sensorSample; int16 sensorTemp; void main(void) { // // Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the F2837xS_SysCtrl.c file. // InitSysCtrl(); // // Step 2. Initialize GPIO: // This example function is found in the F2837xS_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio(); // Skipped for this example // // Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts // DINT; // // Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags // are cleared. // This function is found in the F2837xS_PieCtrl.c file. // InitPieCtrl(); // // Disable CPU interrupts and clear all CPU interrupt flags: // IER = 0x0000; IFR = 0x0000; // // Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in F2837xS_DefaultIsr.c. // This function is found in F2837xS_PieVect.c. // InitPieVectTable(); // // Map ISR functions // EALLOW; PieVectTable.ADCA1_INT = &adca1_isr; //function for ADCA interrupt 1 EDIS; // // Configure the ADC and power it up // ConfigureADC(); // // Initialize the temperature sensor // Note: The argument needs to change if using a VREFHI voltage other than 3.0V // InitTempSensor(3.0); // // Configure the ePWM // // ConfigureEPWM(); // // Setup the ADC for ePWM triggered conversions on temperature sensor // SetupADCEpwm(); // // Enable global Interrupts and higher priority real-time debug events: // IER |= M_INT1; //Enable group 1 interrupts EINT; // Enable Global interrupt INTM ERTM; // Enable Global realtime interrupt DBGM // // enable PIE interrupt // PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // // sync ePWM // // EALLOW; // CpuSysRegs.PCLKCR0.bit.TBCLKSYNC = 1; /* do { EPwm1Regs.ETSEL.bit.SOCAEN = 1; //enable SOCA EPwm1Regs.TBCTL.bit.CTRMODE = 0; //unfreeze, and enter up count mode asm(" ESTOP0"); }while(1);*/ // // start ePWM // // EPwm1Regs.ETSEL.bit.SOCAEN = 1; //enable SOCA // EPwm1Regs.TBCTL.bit.CTRMODE = 0; //unfreeze, and enter up count mode // // take conversions indefinitely in loop // // while(1); } // // ConfigureADC - Write ADC configurations and power up the ADC for both // ADC A and ADC B // void ConfigureADC(void) { EALLOW; // //write configurations // AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4 AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE); // //Set pulse positions to late // AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1; // //power up the ADC // AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; // //delay for 1ms to allow ADC time to power up // DELAY_US(1000); EDIS; } // // ConfigureEPWM - Configure EPWM SOC and compare values // void ConfigureEPWM(void) { EALLOW; // // Assumes ePWM clock is already enabled // EPwm1Regs.ETSEL.bit.SOCAEN = 0; // Disable SOC on A group EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC on up-count EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event EPwm1Regs.CMPA.bit.CMPA = 0x0800; // Set compare A value to 2048 counts EPwm1Regs.TBPRD = 0x1000; // Set period to 4096 counts EPwm1Regs.TBCTL.bit.CTRMODE = 3; // freeze counter EDIS; } // // SetupADCEpwm - Configure ADC EPWM acquisition window and trigger // void SetupADCEpwm(void) { Uint16 tempsensor_acqps; tempsensor_acqps = 139; //temperature sensor needs at least 700ns //acquisition time // //Select the channels to convert and end of conversion flag // EALLOW; AdcaRegs.ADCSOC0CTL.bit.CHSEL = 13; //SOC0 will convert internal //connection A13 J5:44 AdcaRegs.ADCSOC0CTL.bit.ACQPS = tempsensor_acqps; //sample window is 100 //SYSCLK cycles AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5; //trigger on ePWM1 SOCA/C AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0; //end of SOC0 will set INT1 flag AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared EDIS; } // // adca1_isr - Read Temperature ISR // interrupt void adca1_isr(void) { sensorSample = AdcaResultRegs.ADCRESULT0; sensorTemp = GetTemperatureC(sensorSample); AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //clear INT1 flag PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } // // End of file //
and I want to read the temperature value instead AdcaResult1 of this code below:
//###########################################################################
//
// FILE: adc_soc_software_cpu01.c
//
// TITLE: ADC software triggering for F2837xS.
//
//! \addtogroup cpu01_example_list
//! <h1> ADC SOC Software Force (adc_soc_software)</h1>
//!
//! This example converts some voltages on ADCA and ADCB based on a software
//! trigger.
//!
//! After the program runs, the memory will contain:
//!
//! - \b AdcaResult0 \b: a digital representation of the voltage on pin A0\n
//! - \b AdcaResult1 \b: a digital representation of the voltage on pin A1\n
//
//!
//! Note: The software triggers for the two ADCs happen sequentially, so the
//! two ADCs will run asynchronously.
//!
//
//###########################################################################
// $TI Release: F2837xS Support Library v200 $
// $Release Date: Tue Jun 21 13:52:16 CDT 2016 $
// $Copyright: Copyright (C) 2014-2016 Texas Instruments Incorporated -
// http://www.ti.com/ ALL RIGHTS RESERVED $
//###########################################################################
//
// Included Files
//
#include "F28x_Project.h"
//
// Function Prototypes
//
void ConfigureADC(void);
void SetupADCSoftware(void);
//
// Globals
//
Uint16 AdcaResult0;
Uint16 AdcaResult1;
//Uint16 AdcbResult0;
//Uint16 AdcbResult1;
float Voutput=0,rawValue;
void main(void)
{
//
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the F2837xS_SysCtrl.c file.
//
InitSysCtrl();
//
// Step 2. Initialize GPIO:
// This example function is found in the F2837xS_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
//
InitGpio();
//
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
//
DINT;
//
// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the F2837xS_PieCtrl.c file.
//
InitPieCtrl();
//
// Disable CPU interrupts and clear all CPU interrupt flags:
//
IER = 0x0000;
IFR = 0x0000;
//
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example. This is useful for debug purposes.
// The shell ISR routines are found in F2837xS_DefaultIsr.c.
// This function is found in F2837xS_PieVect.c.
//
InitPieVectTable();
//
// Enable global Interrupts and higher priority real-time debug events:
//
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
//
//Configure the ADCs and power them up
//
ConfigureADC();
//
//Setup the ADCs for software conversions
//
SetupADCSoftware();
//
//take conversions indefinitely in loop
//
do
{
//
//convert, wait for completion, and store results
//start conversions immediately via software, ADCA
//
AdcaRegs.ADCSOCFRC1.all = 0x0003; //SOC0 and SOC1
//
//start conversions immediately via software, ADCB
//
//AdcbRegs.ADCSOCFRC1.all = 0x0003; //SOC0 and SOC1
//
//wait for ADCA to complete, then acknowledge flag
//
while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0);
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
//
//wait for ADCB to complete, then acknowledge flag
//
// while(AdcbRegs.ADCINTFLG.bit.ADCINT1 == 0);
// AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
//
//store results
//
AdcaResult0 = AdcaResultRegs.ADCRESULT0;
AdcaResult1 = AdcaResultRegs.ADCRESULT1;
//AdcbResult0 = AdcbResultRegs.ADCRESULT0;
//AdcbResult1 = AdcbResultRegs.ADCRESULT1;
rawValue=(float)3.0/4096;
Voutput=(float)(3.0/4096)*AdcaResult0;
//
//at this point, conversion results are stored in
//AdcaResult0, AdcaResult1, AdcbResult0, and AdcbResult1
//
//
//software breakpoint, hit run again to get updated conversions
//
//asm(" ESTOP0");
}while(1);
}
//
// ConfigureADC - Write ADC configurations and power up the ADC for both
// ADC A and ADC B
//
void ConfigureADC(void)
{
EALLOW;
//
//write configurations
//
AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4
//AdcbRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
//AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
//
//Set pulse positions to late
//
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//
//power up the ADCs
//
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//
//delay for 1ms to allow ADC time to power up
//
DELAY_US(1000);
EDIS;
}
//
// SetupADCSoftware - Setup ADC channels and acquisition window
//
void SetupADCSoftware(void)
{
Uint16 acqps;
//
//determine minimum acquisition window (in SYSCLKS) based on resolution
//
if(ADC_RESOLUTION_12BIT == AdcaRegs.ADCCTL2.bit.RESOLUTION)
{
acqps = 14; //75ns
}
else //resolution is 16-bit
{
acqps = 63; //320ns
}
//
//Select the channels to convert and end of conversion flag
//ADCA
//
EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert pin A0 J3:27
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps; //sample window is acqps +
//1 SYSCLK cycles
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1; //SOC1 will convert pin A1 J3:29
AdcaRegs.ADCSOC1CTL.bit.ACQPS = acqps; //sample window is acqps +
//1 SYSCLK cycles
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 1; //end of SOC1 will set INT1 flag
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared
//ADCB
/*AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert pin B0
AdcbRegs.ADCSOC0CTL.bit.ACQPS = acqps; //sample window is acqps +
//1 SYSCLK cycles
AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1; //SOC1 will convert pin B1
AdcbRegs.ADCSOC1CTL.bit.ACQPS = acqps; //sample window is acqps +
//1 SYSCLK cycles
AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 1; //end of SOC1 will set INT1 flag
AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared*/
EDIS;
}
//
// End of file
//
Thank you in advance,
kanthanet