Hallo, ich will hintereinander den AD-Kanal 0 und dann die interne Temp-Diode abfragen. Wenn ich jeweils nur eine von beiden Funktionen aufrufe geht alles prima. Rufe ich sie hintereinande auf, stimmt die Temp. nicht (46 anstatt 27) und die Spannung an A0 springt etwas mehr. Woran kann das liegen? Danke und Gruß, Peter unsigned short read_temperature(void){ unsigned short IntDegC; ADC10CTL1 = ADC10DIV_3 | INCH_10; // select Temperature Diode ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + ENC + ADC10SC; // Sampling and conversion start _BIS_SR(CPUOFF + GIE); // LPM0 with interrupts enabled IntDegC = ((ADC10MEM - 986) * 423) / 1024 + 3; // +3 ist Korrektur return IntDegC; } unsigned short read_ubatt(void){ unsigned long calc; ADC10CTL1 = ADC10DIV_3 | INCH_0; // select Analog Input Pin P2.0 ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + ENC + ADC10SC; _BIS_SR(CPUOFF + GIE); // LPM0 with interrupts enabled calc = ((unsigned long)ADC10MEM*(unsigned long)1500); return calc/1023; }
Was ist es denn genau für ein Typ? (MSP430F???) Bei ADC wichtig: Das Register ADC10CTL0 kann nur verändert werden wenn ENC "0" ist. Ebenso ADC10CTL1. Wenn du die Funktionen hintereinander aufrufst, musst du die ADC Register also vorher erst wieder "freigeben" (ADC10CTL0 &=~ENC;).
Hiho, je nachdem, welches Derivat Du verwendest, würde ich in Deinem Falle (beim ADC10) über DTC immer alle Kanäle zwischen A0 und A10(temp) wandeln. Kostet Dich zwar 18 Bytes unnützen Speicher, aber wenn das kein Problem ist, dann ist das sicherlich die codemässig aufwandsaermste und eleganteste Lösung. Anbei ein Beispiel für die Wandlung der Kanäle A1..A3. Müsstest Du entsprechend anpassen.
Ah, um den "unnützen" Speicherbedarf zu reduzieren, kannst Du für Deine Wandlung anstelle A0 auch z.B. A7 wählen...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.