Hallo!
Ich bin zurzeit fast am verzweifeln an der Initialisierung vom ADC10 am
MSP430F5229. Jedesmal wenn ich den Wert auslesen möchte bekomme ich den
Wert 1023, egal welche Spannung anliegt. Anbei mein Programmcode:
1
voidinit_ADC(void)
2
{
3
P6SEL&=0x02;// P6.0 ADC option select
4
ADC10CTL0&=~ADC10ENC;// Disable ADC10
5
ADC10CTL0|=ADC10ON;// ADC12ON / reference on Avcc
6
ADC10MCTL0&=ADC10SREF_0;// zwischen avcc und avss
7
ADC10MCTL0&=ADC10INCH_1;// A1 also P6.1 als eingang
8
ADC10CTL0|=ADC10SHT_2;// sapmle and hold 16 clock cycles
Die an dieser Stelle übliche /Standardfrage/:
Hast Du Dir schon mal die Source-Code-Beispiele von TI angesehen, die es
auch für den von Dir verwendeten MSP430 gibt?
http://www.ti.com/lit/zip/slac555
Darin enthalten
1
msp430f522x_adc10_01.c ADC10, Sample A0, AVcc Ref, Set P1.0 if A0 > 0.5*AVcc
2
msp430f522x_adc10_02.c ADC10, Sample A0, 1.5V Shared Ref, Set P1.0 if A0 > 0.5V
3
msp430f522x_adc10_03.c ADC10, Sample A10 Temp, TA0.1 Trigger, Set P1.0 if Temp++ ~2C
4
msp430f522x_adc10_04.c ADC10, Sample A1, Signed, Set P1.0 if A1 > 0.5*AVcc
Chris S. schrieb:> return(ADC10MEM0); // return the value read from ADC
du liest channel 0 aus,
Chris S. schrieb:> ADC10MCTL0 &= ADC10INCH_1;
Hast du wirklich INCH_1 da drauf gelegt mit &= ich hätte |= getippt.
Und ja bei TI immer mit Bsp Code anfangen und dann adaptieren und dann
FamilyUserguide lesen bis alles geht, ist eigentlich immer nur eine
Frage der Zeit.
Viele Erfolg
Stefan S. schrieb:> Chris S. schrieb:>> return(ADC10MEM0); // return the value read from ADC> du liest channel 0 aus,
Und wie lese ich die anderen Channel aus? Dachte es gibt nur das ADCMEM0
Register
Chris S. schrieb:> Und wie lese ich die anderen Channel aus? Dachte es gibt nur das ADCMEM0> Register
Wirf mal einen Blick in den "Family User's Guide". Da ist der ADC10
ausführlich beschrieben.
Rufus Τ. F. schrieb:> Wirf mal einen Blick in den "Family User's Guide". Da ist der ADC10> ausführlich beschrieben.
Ja dem User Guide entnehme ich nur:
"The conversion result is accessible using the ADC10MEM0 register
independently of the conversion mode
selected by the user. When a conversion result is written to ADC10MEM0,
the ADC10IFG0 is set."
Deshalb bin ich davon ausgegangen dass jedes Sampling Ergebnis (egal von
welchem Eingang A0 ...A1 usw) in ADC10MEM0 gelegt wird.
A0 MEM0; A1 MEM1 usw. und die MEMs kannst du über INCH mit verschiedenen
Channels belegen, oder einfach standart lassen.
Rest wie schon gesagt, anfangen mit nem Standartbeispiel und dann weiter
vorarbeiten mit FamilyUserGuide und Forum, das klappt, hat bei mir ja
auch funktinoiert :)
Stefan S. schrieb:> A0 MEM0; A1 MEM1 usw. und die MEMs kannst du über INCH mit verschiedenen> Channels belegen, oder einfach standart lassen.
Hmm, der MSP430F5229 hat nur einen ADC10 mit einem ADC10MEM0-Register.
Ein MSP430F5328 hingegen hat einen ADC12 mit ADC12MEMx-Register
(x=0-15).
... oder man schaut in die Header-Datei, um zu wissen, was der µC kann:
msp430f5229.h