Forum: Mikrocontroller und Digitale Elektronik MSP430 hängt in AD-Wandlung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von MSP (Gast)


Lesenswert?

uint16_t AD_Wert(void)  //P6.5 in AD-Wandlung
{
uint16_t temp=0;

ADC12CTL0 &=~ (ADC12ENC + ADC12SC);

ADC12CTL0 = (ADC12SHT02 + ADC12ON);  //64ADC-CLK-Cycles, ADC_ON

ADC12CTL1 = (ADC12CSTARTADD2 + ADC12CSTARTADD0);// in ADC12MEM5 
speichern
ADC12CTL1 |= ADC12SSEL1;         // MCLK auswählen

ADC12MCTL5 = ADC12INCH0 + ADC12INCH2;  // Input Channel Kanal 5
ADC12IFG =0;
ADC12CTL0 |= (ADC12ENC + ADC12SC);    // Enable Conversion
          // AD-Wandlung starten

while(!(ADC12IFG & BIT5));  // NoOp until ADSC12 is reset after 
conversion.
> --> hier hängt der Controller!!!


temp = ADC12MEM5;  // MEM-Register auslesen

ADC12CTL0 = 0x0000;      // ADC12CTL0 löschen

return temp;
}


Controller:
MSP430F5438

woran mag es liegen, dass die AD-Wadlung nicht weiter kommt?

mfg

von MSP (Gast)


Lesenswert?

...könnte es daran liegen, dass ich die Zeile:

>P6SEL |= BIT5;

nicht verwendet habe?

im Family-Guide steht hierfür ein "don't care" drin,

ABER: in einigen Beispielcodes wird die Zeile dennoch verwendet...

mfg

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Selbstverständlich musst Du P6SEL korrekt setzen, da sich die ADC-Kanäle 
0-7 mit dem I/O-Port 6 die Anschlüsse teilen.

Wo im Family Guide (slau208j) hast Du da "don't care" gefunden?

Hast Du Dir mal die Beispiele für den ADC_12A angesehen, die TI 
veröffentlicht hat (slac166q) ?

von MSP (Gast)


Lesenswert?

sorry, steht nicht im family-guide, sondern im Device-Specific-Datasheet 
auf Seite 77.

Die Tabelle gibt für die P6Sel.x grundsätzlich ein "don't care" an.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hmm. Da hast Du recht, aber darauf würde ich mich nicht verlassen. 
Außerdem steht da
1
 
2
Setting the P6SEL.x bit disables the output driver as well as 
3
the input Schmitt trigger to prevent parasitic cross currents 
4
when applying analog signals.
was das "don't care" etwas konterkariert.

von Björn K. (bjoern_k)


Lesenswert?

Setz mal beim debuggen ADC12SC manuell zurück ob er dann ein Ergebnis 
ausspuckt.

von MSP (Gast)


Lesenswert?

ja, danke für den Tip.

Sobald ich im Debugger das Bit auf "0" zurück setze, wird automatisch 
das ADC12IFG5 gesetzt und das richtige Wandlungsergebnis in das 
ADC12MEM5 gespeichert.

Nun ist natürlich die Frage, wie das SC-Bit automatisch zurückgesetzt 
wird...

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.