msp430f2274 ADC10 3 Eingänge nutzen

#2438556
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
Gast #2438584
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.
#2438698
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
#2439722
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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren