Forum: Mikrocontroller und Digitale Elektronik ADC liest stets falschen PIN ein


von Christian (Gast)


Lesenswert?

Hallo,
ich arbeite gerade mit einem TMS320F2844 von TI und habe insgesamt 8 PWM 
mit Totzeit sowie Phasenverschiebung generiert. Nun möchte ich gern bei 
UP-DOWN-COUNT bei PRD einen Stromwert einlesen (werden mit LEM-Modul 
gemessen). Hierzu habe ich das ADC-Modul wie folgt initialisiert:
1
 
2
AdcRegs.ADCREFSEL.bit.REF_SEL = 0x0;  // interene Reference on ADCREFIN
3
AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;  // power up bandgap and reference 
4
AdcRegs.ADCTRL3.bit.ADCPWDN = 1;      // power up ADC    
5
DELAY_US(5000);        
6
AdcRegs.ADCTRL1.bit.CPS = 0;          // ADCCLK = HSPCLK
7
AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x1;   // ADCCLKPS=1 ==> ADCCLK =
8
                                          (HSPCLK/2)/(1+CPS)
9
AdcRegs.ADCMAXCONV.all = 0x0;    // 1 double conversion 
10
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;  // SEQ1 und SEQ2 operate as two 
11
                                           8-state sequencers
12
13
AdcRegs.ADCTRL1.bit.ACQ_PS = 0x3;    
14
AdcRegs.ADCTRL3.bit.SMODE_SEL=0;  //Setup sequential sampling mode
15
//AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;// Setup conv from ADCINA0 &
16
                                           ADCINB0
17
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x1;  // Setup conv from ADCINA1 & 
18
                                           ADCINB1
19
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;   // Enable SEQ1 interrupt (every EOS)
20
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0;  // 0 = INT_SEQ1 is set at the end of every SEQ1 sequence
21
                      // 1 = INT_SEQ1 is set at the end of every other SEQ1 sequence
22
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;  // Stoppt nach EOS; 
23
DELAY_US(5000);
In der Timer-Interrupt-Service-Routine mach ich dann folgendes:
1
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;  // Reset SEQ1
2
AdcRegs.ADCTRL2.bit.RST_SEQ2 = 1;
3
DELAY_US(2);
4
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;  // clear interrupt flag
5
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;  // start conversion
6
while(AdcRegs.ADCST.bit.INT_SEQ1== 0);  // Wait for interrupt -> warten bis Wandlung abgeschlossen ist
Im Debug-Modus kann ich dann mit CSS4 mit der Watch-Funktion die 
einzelnen Register beobachten -> nur das ADCRESULT0 ändert sich und 
liest auch noch den falschen Wert ein. Obwohl ich eigentlich das 
RESULT02 ausgewählt habe.

Habe ich falsch Konfiguriert ? Bin um jede Hilfe dankbar. Schon mal im 
voraus Dankeschön.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.