Witam
Mam problem z pomiarem napięcia przez procesor TMS320F2812, który jest dostarczony wraz z zestawem uruchomieniowym eZdsp F2812. Niestety po kompilacji i uruchomieniu programu wartość napięcia mierzonego przez "prad_silnika" jest wartością stałą i nie zmienia się pomimo podawania różnego napięcia na wejście ADCINA0. Niestety nie mam zbyt dużego doświadczenia z programowaniem procesorów sygnałowym więc nie mogę stwierdzić gdzie popełniam błąd...
Pod spodem umieszczam fragment kodu źródłowego.
Będę bardzo wdzięczny za pomoc.
Mam problem z pomiarem napięcia przez procesor TMS320F2812, który jest dostarczony wraz z zestawem uruchomieniowym eZdsp F2812. Niestety po kompilacji i uruchomieniu programu wartość napięcia mierzonego przez "prad_silnika" jest wartością stałą i nie zmienia się pomimo podawania różnego napięcia na wejście ADCINA0. Niestety nie mam zbyt dużego doświadczenia z programowaniem procesorów sygnałowym więc nie mogę stwierdzić gdzie popełniam błąd...
Pod spodem umieszczam fragment kodu źródłowego.
Będę bardzo wdzięczny za pomoc.
// Dołączenie plików nagłówkowych
#include "IQmathLib.h"
#include "DSP28_Device.h"
#define CPU_CLOCK_SPEED 6.6667L // for a 150MHz CPU clock speed
#define ADC_usDELAY 5000L
#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_CLOCK_SPEED) - 9.0L) / 5.0L)
#define PWM_INIT_STATE (FREE_RUN_FLAG + \
TIMER_CONT_UPDN + \
TIMER_CLK_PRESCALE_X_1 + \
TIMER_ENABLE_BY_OWN + \
TIMER_ENABLE)
#define ACTR_INIT_STATE ( COMPARE1_AL + \
COMPARE2_AH + \
COMPARE3_AL + \
COMPARE4_AH + \
COMPARE5_AL + \
COMPARE6_AH )
#define DBTCON_INIT_STATE ( DBT_VAL_10 + \
EDBT3_EN + \
EDBT2_EN + \
EDBT1_EN + \
DBTPS_X32 )
int napiecie_kondensatorow = 0;
int napiecie_potencjometru = 0;
interrupt void EvaTimer1(void)
{
prad_silnika = AdcRegs.ADCRESULT0;
napiecie_potencjometru = AdcRegs.ADCRESULT1;
}
void main(void)
{
InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
EvaRegs.EVAIMRA.bit.T1UFINT = 1;
EvaRegs.EVAIFRA.bit.T1UFINT = 1;
EALLOW;
PieVectTable.T1UFINT = &EvaTimer1;
EDIS;
PieCtrlRegs.PIEIER2.all = M_INT6;
IER |= M_INT2;
AdcRegs.ADCTRL1.all = 0x4000;
asm(" NOP ");
asm(" NOP ");
AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;
DELAY_US(ADC_usDELAY);
AdcRegs.ADCTRL3.bit.ADCPWDN = 1;
AdcRegs.ADCTRL3.bit.ADCCLKPS = 5;//3;
DELAY_US(ADC_usDELAY);
AdcRegs.ADCTRL3.all |= 0x0100; //0x0000
AdcRegs.ADCTRL3.bit.SMODE_SEL = 1;
AdcRegs.ADCTRL1.all = 0x1450;
AdcRegs.ADCTRL2.all = 0x0000; //0x0180
AdcRegs.ADCMAXCONV.all = 0x0003;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1;
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2;
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
for(;;);
}