mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP 430 G2553 ADC10 mehrere Eingänge - wie?


Autor: Ben P. (ben5en)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich arbeite mich gerade in das MSP 430 G2553 Launchpad ein und bin 
völlig neu auf dem Gebiet. Bislang habe ich eine PWM über ein Poti 
(Helligkeitseinstellung LED) und Anzeige der Modulationsweite in Prozent 
auf einem LC-Display realisiert.

Nun möchte ich einen weiteren analogen Eingang nutzen und weiß nicht 
wie.
Die PWM habe ich im vorherigen Projekt ganz simpel mittels Vergleich des 
ADC10MEM - und des Timerwertes umgesetzt:
// als Auszug:
TACCR0 = 1023;               // CCR0 -> cycle time
TACCR1 = duty_cycle;         // CCR1 -> duty cycle
duty_cycle=(unsigned long)ADC10MEM;
// ... und Ausgabe auf Display

Wie ich gesehen habe, gibt es ebenfalls ADC12 Wandler mit mehreren 
"Ergebnisregistern" ala ADC12MEM0, ADC12MEM1, in welchem die Werte der 
AD Wandlung abgelegt werden - doch wird dies in dieser Form nicht vom 
G2553 unterstützt.

Ich habe hier im Forum bereits einen Code von TI gefunden, welcher sich 
der Porblematik des ADC10 und mehreren Eingängen annimmt. Mir ist jedoch 
leider nicht ersichtlich, was zB. bei ADC10SA genau geschieht und wie 
ich die abgelegten Daten zur weiteren Verwendung aufrufe.

Wenn nicht unbedingt nötig, möchte ich einen Interrupt vermeiden. Bei 
meiner Anwendung kommt es auch nicht auf lowcurrent an.

Ziel ist es an P1.1 ein Poti für eine PWM anzuschließen und an P1.2 
einen LEM Stromwandler. Über ein Display möchte ich mir den 
Momentanstrom meines (externen) Verbrauchers anzeigen lassen.

Über Anregungen und Tipps würde ich mich sehr freuen.
Vielen Dank.

Autor: Clemens L. (c_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Beispielprogramm msp430g2x33_adc10_10.c.

Autor: Ben P. (ben5en)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benjamin P. schrieb:
> Ich habe hier im Forum bereits einen Code von TI gefunden, welcher sich
> der Porblematik des ADC10 und mehreren Eingängen annimmt. Mir ist jedoch
> leider nicht ersichtlich, was zB. bei ADC10SA genau geschieht und wie
> ich die abgelegten Daten zur weiteren Verwendung aufrufe.

"Siehe Beispielprogramm msp430g2x33_adc10_10.c." -> diesen Code habe ich 
bereits gefunden und stehe somit vor selbigen Problem.

Autor: Dietmar Sch. (dsausw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Benjamin,

das Beispiel hast Du?
slau144 auch?
Ergebnis in ADC10MEM.
Das Beispiel von Clemens ist genau richtig:
Einlesen mehrerer ADins.
Interrupts beissen auch nicht, aber zum Testen
reicht auch Polling.
Du solltest Dir die Kapitel im User's Guide einmal durchlesen.
Bei TI gibt es auch noch jede Menge Literatur.

Gruss
Dietmar

Autor: Ben P. (ben5en)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dietmar S. schrieb:
> das Beispiel hast Du?
> slau144 auch?

Das Beispiel entspricht in etwa diesem hier: 
https://www.mikrocontroller.net/attachment/38868/m...

Was meinst du mit slau144?

Okay, ich werde mich auch noch mal an die TI PDF's setzen.
Ich habe gehofft über die Frage hier auf einem kürzeren Weg zum 
Verständnis zu kommen, dass es mir eventuell den Einstieg erleichtert 
aber die Tipps sind auch in jedem Fall gut.

Somit besten Dank.
Eventuell gebe ich noch mal Rückmeldung.

Über weitere Hinweise bin ich natürlich trotzdem dankbar.
Viele Grüße

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Benjamin P. schrieb:
> Was meinst du mit slau144?

Das ist der "MSP430x2xx Family User's Guide"

www.ti.com/lit/ug/slau144j/slau144j.pdf

Autor: Clemens L. (c_l)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benjamin P. schrieb:
> Mir ist jedoch leider nicht ersichtlich, was zB. bei ADC10SA genau
> geschieht

Das ist die Adresse der Variablen, wo die Werte hineingeschrieben 
werden. Eine feste Adresse zu benutzen ist natürlich sehr dreckig.

Autor: Ben P. (ben5en)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Guten Morgen,

mittlerweile läuft es.

ADC10SA fungiert als Pointer, das wusste ich bis dato nicht.
Ebenfalls konnte ich mit "0x200":
ADC10SA = 0x200;                        // Data buffer start
nicht viel anfangen.

Es läuft einwandfrei mit:
#include "msp430g2553.h"

unsigned int ADCMEM0 ;         // ADC gewandelter Wert von P1.0
unsigned int ADCMEM1 ;         // ADC gewandelter Wert von P1.1
unsigned int ADCMEM[2];        // ADC Wert 

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  ADC10CTL1 = INCH_1 + CONSEQ_1;            // A1/A0, single sequence
  ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
  ADC10DTC1 = 0x02;                         // 2 conversions
  ADC10AE0 |= BIT0 + BIT 1                  // P1.0,1 ADC10 option select

for (;;)
 {
    ADC10CTL0 &= ~ENC;
    while(ADC10CTL1 & BUSY);
    ADC10SA = (unsigned int)ADCMEM; 
    ADC10CTL0 |= ENC + ADC10SC
    ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
    __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
    ADCMEM1 = ADCMEM[1]; 
    ADCMEM0 = ADCMEM[0];
  }
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
  __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
}

Autor: Ben P. (ben5en)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
* eben bemerkt:
Beim zusammenschieben vom Code im vorherigen Post haben sich beim 
zusammenschieben kleine Fehler eingebaut. Sollte man aber finden können.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.