Forum: Mikrocontroller und Digitale Elektronik msp430f2274 ADC10 3 Eingänge nutzen


von Tobias K. (tobiaskk)


Lesenswert?

Guten Tag zusammen. Für ein Studienprojekt muss ich mit dem zigbee kit 
ez430rf2480 Daten einlesen. Über den integrierten msp430f2274 möchte ich 
3 Signale über die AD-Wandler Eingänge A2,A3,A4 kontinuierlich wandeln 
um sie weitersenden zu können.

Alle 3 einzeln und separat zu wandeln und weiterzuverarbeiten klappt 
einwandfrei, jedoch alle zusammen ist schon schwieriger. Ich denke, dass 
es mit dem "repeat sequence of channels mode" funktionieren müsste diese 
zu wandeln und dann zu speichern.

Hat jemand einen sample code dafür, denn die von TI scheinen nicht so 
recht zu passen und ich habe sonst keine gefunden


danke im voraus für die antwort

von Bertram (Gast)


Lesenswert?

Einfaches Codebeispiel habe ich jetzt nicht zur Hand,
die verschiedenen Modi (inkl. Multichannel) sind
ausreichend im RefManual zum F2274 beschrieben.

Für die Verwendung anderer Module ist's eh gut, sich
mit den Manuals auseinanderzusetzen.

von Dennis (Gast)


Lesenswert?

Das liegt meist am vergessenen EOS-Bit und Konsorten.

Ist nicht schwer und funktioniert prima...wenns dann läuft.


Zeig mal deinen Versuch.

von Tobias K. (tobiaskk)


Lesenswert?

ADC10CTL1 = INCH_4 + CONSEQ_3;            // A2,A3,A4 repeat multi 
channel

ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE + REFON + SREF_1 + 
REF2_5V;

  ADC10AE0 = 0x1C;                          // P2.2,3,4 ADC option 
select
  ADC10DTC1 = 0x40;                         // number of conversions -> 
steht so im sample code, aber ich brauch das sampling ja eigentlich in 
einer endlosschleife. nicht nur wie im beispiel 64 mal

  ADC10CTL0 &= ~ENC;
  ADC10SA = 0x200;                        // Data buffer start
  ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion 
ready


das ist das Beispielprogramm ein wenig abgeändert, damits zu meinen adc 
eingängen passt

von Fabio S. (codehamster)


Lesenswert?

Hallo Tobias,
mit dem F2274 hab ich noch nicht gearbeitet,
ich poste mal meine init Funktion für den F449 ev. kannst du dir das so 
zusammenschnippseln,
1
void adc_init(void)
2
{
3
    int16 i;
4
5
    // Enable A/D channel A3 to A7
6
    P6SEL |= BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
7
8
    // Turn on and set up ADC12
9
    ADC12CTL0 = MSC + SHT0_2 + ADC12ON + REF2_5V + REFON;
10
    ADC12CTL1 = CSTARTADD_0 + SHS_0 + SHP + ADC12DIV_0 + ADC12SSEL_3 + CONSEQ_1;
11
12
    // Messung xyz
13
    // EOS = 0 / VR+ = VREF+(2.5V) VR- = AVSS(GND) / INCH = A3
14
    ADC12MCTL0 = SREF_1 + INCH_3;
15
    // Messung xyz
16
    // EOS = 0 / VR+ = VREF+(2.5V) VR- = AVSS(GND) / INCH = A4
17
    ADC12MCTL1 = SREF_1 + INCH_4;
18
    // NTC Temperaturmessung
19
    // EOS = 0 / VR+ = VREF+(2.5V) VR- = AVSS(GND) / INCH = A5
20
    ADC12MCTL2 = SREF_1 + INCH_5;
21
    // Akku
22
    // EOS = 0 / VR+ = VREF+(2.5V) VR- = AVSS(GND) / INCH = A6
23
    ADC12MCTL3 = SREF_1 + INCH_6;
24
    // xyz
25
    // EOS = 1 / VR+ = VREF+(2.5V) VR- = AVSS(GND) / INCH = A7
26
    ADC12MCTL4 = EOS + SREF_1 + INCH_7;
27
28
    ADC12MEM5 = 0x00;
29
    ADC12MEM6 = 0x00;
30
    ADC12MEM7 = 0x00;
31
    ADC12MEM8 = 0x00;
32
    ADC12MEM9 = 0x00;
33
    ADC12MEM10 = 0x00;
34
    ADC12MEM11 = 0x00;
35
    ADC12MEM12 = 0x00;
36
    ADC12MEM13 = 0x00;
37
    ADC12MEM14 = 0x00;
38
    ADC12MEM15 = 0x00;
39
40
    // Delay for reference start-up
41
    for ( i=0; i<0x3600; i++);
42
43
    // Enable conversions
44
    ADC12CTL0 |= ENC;
45
}

und mit einem Timer, bzw. im Timerinterrupt starte ich das Sampeln alle 
x ms
1
ADC12CTL0 |= ADC12SC;

von Tobias K. (tobiaskk)


Lesenswert?

vielen dank für die antworten.

aber ich versteh den quellcode vom adc12 da leider garnicht recht.
die befehle sind scheinbar sehr unterschiedlich zur ansteuerung vom 
adc10, denn zb. EOS gibts als befehl garnicht oder adc12mtcl

von LuXXuS 9. (aichn)


Lesenswert?

Den ADC12 kannst du mit dem ADC10 garnicht vergleichen. Der ADC10 hat 
z.B. kein Ergebnisregister zu jedem Channel - du musst die Ergebnisse 
immer direkt abholen.

von ich (Gast)


Lesenswert?

aber vom Prinzip her, mach einen Durchlauf, hol die Daten ab und 
schmeiss den ADC wieder an. Je nach dem was du Messen willst, Timer 
gesteuert oder halt immer wenn die Wandlung fertig ist.

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.