logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Pomiar napięcia - TMS320F2812 - eZdsp F2812

megatherion 29 Wrz 2009 17:16 1416 1
REKLAMA
  • #1 7071419
    megatherion
    Poziom 10  
    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.
    
    
    
    // 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(;;);
    }
    
    
    
  • REKLAMA
  • #2 7072252
    __Grzegorz__
    Poziom 30  
    Miał kolega szansę zapoznać się z dokumentem
    SPRU060
    od producenta procesora?
    Jeżeli nie to jest do znalezienia u Wielkiego Brata o imieniu Gógel.

    Opisane są tam wszystkie tryby pracy układu ADC, wszystkie bity konfiguracyjne poszczególnych rejestrów, wszystko...

    Wybacz, ale słabo widzę to, żeby ktoś za Ciebie rozdłubywał kod bit po bicie aby ustalić
    w jakim trybie pracuje przetwornik, i ewentualnie co jest nie tak...
REKLAMA