Forum: Mikrocontroller und Digitale Elektronik msp430 ADC10 Kanäle auswählen


von Christian S. (aliendrummer)


Lesenswert?

Hallo!

ICh versuche mit dem adc10 im msp430f1232 die Spannungen an A0 und A1 zu 
messen...
irgendwie bekomme ich aber für beide Kanäle die gleichen Werte?!?!?
Kann mir jemand einen Tipp geben?
1
  /*Init ADC*/
2
  
3
  ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC on Int. enabled
4
  ADC10AE |= 0x07; // Select the Pin 2.0-2.2
5
  
6
  ADC10CTL0 |= ENC + ADC10SC + INCH_0; // Start Conversion 
7
  while (ADC10CTL0 & ADC10BUSY); // Polling while ADC Busy
8
  adc_wert1 = (int) (((float)ADC10MEM / 1024.0) * 3600.0); // Wert in mV
9
  
10
  ADC10CTL0 |= ENC + ADC10SC + INCH_1; // Start Conversion 
11
  while (ADC10CTL0 & ADC10BUSY); // Polling while ADC Busy
12
  adc_wert2 = (int) (((float)ADC10MEM / 1024.0) * 3600.0); // Wert in mV

von Johnny (Gast)


Lesenswert?

Hatte auch mal so ein Problem, aber kann mich nicht mehr genau erinnern 
was es war.
Auf jeden fall musste erst ein Flag deaktiviert werden, damit der Kanal 
gewechselt werden konnte.
Am besten nochmals im Hardware Manual den Teil zum ADC10 durchlesen...

von Johnny (Gast)


Lesenswert?

Evtl. ists das ENC Flag...

von Christian S. (aliendrummer)


Lesenswert?

ENC ist es leider nicht :(

von Christian S. (aliendrummer)


Lesenswert?

habs nochmal probiert....
1
  ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC on Int. enabled
2
  ADC10AE |= 0x07; // Select the Pin 2.0-2.2
3
  
4
  
5
  ADC10CTL0 |= ENC + ADC10SC + INCH_0; // Start Conversion 
6
  while (ADC10CTL0 & ADC10BUSY); // Polling while ADC Busy
7
  adc_wert1 = (int) (((float)ADC10MEM / 1024.0) * 3600.0); // Wert in mV
8
  ADC10CTL0 &= ~ENC;
9
  
10
  ADC10CTL0 |= ENC + ADC10SC + INCH_1; // Start Conversion 
11
  while (ADC10CTL0 & ADC10BUSY); // Polling while ADC Busy
12
  adc_wert2 = (int) (((float)ADC10MEM / 1024.0) * 3600.0); // Wert in mV
13
  ADC10CTL0 &= ~ENC;

geht leider auch nicht.....

von arc (Gast)


Lesenswert?

Zwei Sachen:
Zum einen ist die Kanalauswahl in ADC10CTL1 (nicht in ADC10CTL0), zum 
anderen  sollte aus dem |= ein = werden, falls das mehr als einmal 
laufen soll...

von Christian S. (aliendrummer)


Lesenswert?

wie? ADC10CTL0 und ADC10CTL1? Hast du ein Beispiel?

gruß christian

von arc (Gast)


Lesenswert?

MSP430x1xx User Guide (slau049f)
1
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE;
2
3
//alles vor dem INCH_0 muss u.U. noch angepasst werden.
4
ADC10CTL1 = CONSEQ_0 | ADC10SSEL_0 | ADC10DIV_0 | SHS_0 | INCH_0;
5
6
ADC10CTL0 = ENC + ADC10SC;
7
8
while (ADC10CTL1 & ADC10BUSY);
9
...


von Christian S. (aliendrummer)


Lesenswert?

cool, danke! Es geht jetzt....

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.