Forum: Mikrocontroller und Digitale Elektronik F2013 MSP Serie


von Joe (Gast)


Lesenswert?

Hallo zusammen,

ich bin eigentlich 8x51 sowie AVR Nutzer und liebe die Vielfalt dieser
Bausteine. Nun habe ich ein nettes kleines Starter KIT im USB Gehäuse
bekommen. Ich denke die MSP Spezies kennen den eZF430-F2013.

Nun habe ich mich mal nach Code Beispielen Umgeschaut und bin erstaunt
wie dünn hier die "Luft" bei TI ist. Der kleine Käfer besticht ja
durch seinen 16 BIT ADC, aber nirgends findet man ein Beispiel wie man
den anspricht. Lediglich ein Beispiel als Komparator konnte ich
finden.

Mich würde mal interessieren was erfahrene MSP'ler dazu sagen. Ist der
Support dieser Familie wirklich so schlecht ? Wenn ein Hersteller gerade
mit diesem Feature wirbt und dann nich mal ein paar Codesample spendiert
dann finde ich das ziemlich dürftig.

Das passiert beim 8x51 nicht.

Also, falls jemand hier besser bescheid weis dann wäre ich für jeden
Tip dankbar. Im Moment schein ich zu doof zu sein.

Dank im vorraus

Joe

von Jörg S. (Gast)


Lesenswert?

Na ja, die MSp430F2xxx Serie ist ja recht neu. Gibt aber auch ältere
MSPs mit 16ner ADC. Evt. findest du zu denen was. Die Register
Bezeichnung sollte ja eigentlich gleich sein.

Übersicht aller MSPs:
http://focus.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=slab034

von Joe (Gast)


Lesenswert?

Hallo Jörg,

genau das meine ich, jede Menge Werbung und bunte Bildchen, nur leider
nichts brauchbares.

Meinst du das ein Code für einen älteren Baustein mit 16 BIT ADC 1 zu 1
übernommen werden kann ? Hast du hierzu vielleicht ein Beispiel ?

Wäre toll wenn du da was hast.

Danke

von Jörg S. (Gast)


Lesenswert?

Gerade mal nachgeschaut. Von TI gibt es Software Beispiele für die Serie
(Auch ADC16) :)

Datei:
slac080a.zip

Beispiele:
msp430x20x3_sd16A_01.c
msp430x20x3_sd16A_02.c

von Jörg S. (Gast)


Lesenswert?


von Joe (Gast)


Lesenswert?

ja, die hatte ich auch gefunden, das genannete Komparator Beispiel. Aber
wie stellt man VREF auf 2,5 V, etc.

Ich würde gerne eine Eingangsspannung von 0-2,5V messen.

Hoffe du hast da nen Tip

von szimmi (Gast)


Lesenswert?

Hiho Joe,
wie gesagt, sind noch sehr neu. Deshalb sind die Beispiele auch noch
rar. Aber davon abgesehen, kann man nicht fuer jede Applikation
Beispiele verlangen. Ab und an muss man auch ins User Manual schauen.
Nix fuer ungut.
Zimmi

von Joe (Gast)


Lesenswert?

Hi Szimmi,

klar, da hast du recht, allerdings kenn ich mich halt nicht (noch
nicht) mit den MSP's aus. Daher bin ich für jeden Hinweis dankbar,
Lesen, Lernen und Lösung erarbeiten kann ich durchaus dann selbst.

Also, jeder Link und Wink willkommen.

von arc (Gast)


Lesenswert?

0-2.5V funktioniert nicht direkt, da der SD16_A nur 0-VREF/2 (unipolar)
oder +-VREF/2 (bipolar) messen kann. Zusätzlich sollte die
Eingangsspannung höchstens 80% dieses Maximalwertes betragen. (Eine
externe 5V Referenz verbietet sich sowieso).

MSP430x2xx User Guide mit der Beschreibung aller Peripheriefunktionen
http://focus.ti.com/lit/ug/slau144b/slau144b.pdf
Einige AppNotes in denen der SD16(A) verwendet wird
http://focus.ti.com/mcu/docs/mcusupporttechdocsc.tsp?sectionId=96&tabId=1502&abstractName=slaa254
http://focus.ti.com/mcu/docs/mcusupporttechdocsc.tsp?sectionId=96&tabId=1502&abstractName=slaa216

von Joe (Gast)


Lesenswert?

Super, heißen Dank, les mich jetzt mal rein.

Noch ne Frage zur Eingangsspannung, d.h. maximaler Meßbereich am
Eingang wäre somit 0-1,25 V ? oder habe ich das falsch verstanden.

von arc (Gast)


Lesenswert?

Die Initialisierung des SD16_A läuft meistens nach folgendem Muster:
- IOPort-Funktion einstellen (PxSEL)
- Die verwendeten Kanäle im SD16AE einschalten
- Referenz und Taktquelle/Teiler im SD16CTL einstellen
- Warten bis die Referenz stabil ist
- Kanaleinstellungen (Verstärkung/Kanal) über SD16INCTL0 einstellen
- Weitere Einstellungen (Buffer/Bipolar/Unipolar, Oversampling etc.)
  im SD16CCTL0 vornehmen und die Wandlung mit SD16CCTL0 |= SD16SC
  starten (SD16IE nicht vergessen, wenn ein Interrupt ausgelst werden
  soll)

- In der Interruptbehandlung zuerst die Interruptflags löschen
  (SD16IFG/SD16OVIFG in SD16CCTL0)
- Wandlungsergebnis aus SD16MEM0 abholen, nach Möglichkeit zumindest
  die Mittelwerte aus 8-16 Messungen bilden, um auf die angegeben
  Auflösung zu kommen


p.s. msp430.com und dann auf Application Notes liefert eine Übersicht
über alle AppNotes
http://focus.ti.com/mcu/docs/mcuprodtechdoc.tsp?sectionId=95&tabId=1202&familyId=342&techDoc=1&documentCategoryId=1

von Joe (Gast)


Lesenswert?

Noch mal Danke, das lese ich mir jetzt mal durch, ebenso Danke für die
Erkärung.

von arc (Gast)


Lesenswert?

0-1,25V funktioniert auch nicht direkt, da die Spannung am Vref-Eingang
nur 1-1.5V betragen kann und die interne Referenz nominell 1.2V hat.
Maximal wären also 1.5V/2*0.8V=0.6V möglich (0.75V mit Einschränkungen
hinsichtlich der Genauigkeit).

von Joe (Gast)


Lesenswert?

Schade eigentlich, was nützen da die theoretischen 16 BIT. Egal, freue
mich über die super Erklärung und lese mich dennoch weiter in den MSP
ein.

von arc (Gast)


Lesenswert?

Die 16-Bit sind erreichbar wenn man viel Zeit hat (Taktquelle z.B. ACLK
aus externen 32kHz, OSR=1024, passendes Layout und Stromversorgung
vorausgesetzt), oder man arbeitet - wie oben angedeutet - bei höherem
ADC-Takt mit Oversampling und/oder zusätzlichen IIR/FIR-Filtern.

Nochmal zu den 0-1.25V. Im bipolaren Modus sind +-Vref/2 möglich
(Spannungsdifferenz zw. + und - Eingang). Wenn man den -Eingang auf
Vref/2 legt hat man 0-1.25V (deswegen auch das nicht direkt). Das
Ausgabeformat läßt sich daran anpassen (SD16DF-Bit = 0)

von Joe (Gast)


Lesenswert?

So ganz hab ich es noch nicht kapiert, anbei mal folgendes Beispiel:

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;         // Stop watchdog timer
  P1DIR |= 0x01;                    // Set P1.0 to output direction
  SD16CTL = SD16REFON + SD16SSEL_1; // 1.2V ref, SMCLK
  SD16INCTL0 = SD16INCH_1;          // A1+/-
  SD16CCTL0 =  SD16UNI + SD16IE;    // 256OSR,unipolar,interr. enable
  SD16AE = SD16AE2;                 // P1.1 A1+, A1- = VSS
  SD16CCTL0 |= SD16SC;              // Set bit to start conversion

  _BIS_SR(LPM0_bits + GIE);
}

#pragma vector = SD16_VECTOR
__interrupt void SD16ISR(void)
{
  if (SD16MEM0 < 0x7FFF)                 // SD16MEM0 > 0.3V?, clears
IFG
    P1OUT &= ~0x01;
  else
    P1OUT |= 0x01;
}

Die Referenzspannung beträgt 1,2V, sinkt die Eingangspannung unter 0,3V
dann ...
Rechnet man die 0x7FFF hoch, so beträgt die max. Eingangspannung gerade
mal 0,6V, das Bedeutet Uein max = VREF/2, ja ? ist das so ?

von Joe (Gast)


Lesenswert?

Sorry das ich noch mal nerve, kann mir jemand bei genannten Beispiel
bestätigen das Uein max=0,6V ist ? Bei Verwendung der internen Referenz
scheint das so zu sein.

von arc (Gast)


Lesenswert?

> 0-2.5V funktioniert nicht direkt, da der SD16_A nur 0-VREF/2
> (unipolar) oder +-VREF/2 (bipolar) messen kann.

und

> Nochmal zu den 0-1.25V. Im bipolaren Modus sind +-Vref/2 möglich
> (Spannungsdifferenz zw. + und - Eingang). Wenn man den -Eingang auf
> Vref/2 legt hat man 0-1.25V (deswegen auch das nicht direkt). Das
> Ausgabeformat läßt sich daran anpassen (SD16DF-Bit = 0)

von Jojo S. (Gast)


Lesenswert?

ich habe gestern auch die TI Werbung in einer Elektronikzeitschrift
entdeckt. Bekommt man hier auch Samples von dem Stick? In der Werbung
stand was von 20$.

von arc (Gast)


Lesenswert?

Man bekam welche, wenn man an dem diesjährigen 430Day teilgenommen
hätte. TIs Internetshop sagt z.Z. nur: "Order entry now open for mid
to late September delivery". Ansonsten bei den Distris Spoerle, Silica
oder EBV versuchen.

von Joe (Gast)


Angehängte Dateien:

Lesenswert?

@ arc, danke für deine Geduld aber vielleicht bin ich wirklich schwer
von Begriff.

> 0-2.5V funktioniert nicht direkt, da der SD16_A nur 0-VREF/2
> (unipolar) oder +-VREF/2 (bipolar) messen kann.

Ist mir völlig klar.

Im Beispiel ist VREF = interne 1,2V, Modus unipolar. Bei 0,3V = 0x7FFF
(genau die Hälfe von FFFF) wird die LED geschaltet. Anders Formuliert
entspricht das bei genannten Programm einem Eingangsspannungsbereich
von 0-0,6V also genau VREF/2, so steht es auch im Datenblatt. Wie du
auf 0-1,25V kommst ist mir ein Rätsel.

@ Johannes, ja das Ding gibts für 20$ und ich finde es auch als Starter
Kit recht brauchbar. Der ADC ist allerdings aus meiner Sicht nur bedingt
16BIT. Die letzten 2 BIT gehen auf jedenfall im Rauschen unter, 2
weitere dürften durch das Eingangsschaltungs gemurxe draufgehen. Dazu
noch eine erhöhte Störanfälligkeit. Bis zum Beweis des Gegenteils sage
ich das jetzt mal.

von Jojo S. (Gast)


Lesenswert?

danke für die Antworten.
Eine gute 16Bit Wandlung ist nicht so einfach, für einen Dynamikumfang
von 1:65535 muss man schon einiges tun. Das Rauschen kann man durch
(gleitende) Mittelwertbildung bekämpfen, das macht die Messung
allerdings nochmal langsamer.
Die Module von AnalogDevices haben früher nicht ohne Grund ein kleines
Vermögen gekostet...

von arc (Gast)


Lesenswert?

Der Wandler misst im bipolaren Modus die Differenz zw. +Eingang und
-Eingang. FSR ist im bipolaren Modus = +-Vref/2/Gain hier +-0.6V.
Liegt am -Eingang Vref/2 an, dann ergibt sich für
1.2V am +Eingang: 1.2V - Vref/2 = 0.6 = +FSR
0.6V am +Eingang: 0.6V - Vref/2 = 0,
0.0V am +Eingang: 0.0V - Vref/2 = -0.6 = -FSR
lässt man sich das im Binary Offset ausgeben ergibt sich
+FSR = 0xffff, 0 = 0x8000, -FSR = 0

von Joe (Gast)


Lesenswert?

Nochmals Danke für deine Geduld.

Das bedeutet für meinen Fall (ich will ja mindestens 0-1 V am Eingang
unipolar messen) das dies nicht möglich ist. Würde ich den -Eingang auf
Masse legen dann die Differenz (1,2V) zu Grunde legen, so müßte an
Eingang A1+:

0V = 0x0000
0,6V = 0x8000
1,2V = 0xFFFF

sein. So wäre es zu gebrauchen. Aber deiner Erklärung zu Folge ginge
dies nur im bipolar Modus bei +- 0,6V.

Hab ich es jetzt kapiert (bitte nicht schreiend weglaufen) manchmal
dauerts etwas länger ;-)

von Simon K. (simon) Benutzerseite


Lesenswert?

Die Auflösung lässt sich allerdings nicht per Oversampling erhöhen. Das
ist nunmal so

von arc (Gast)


Lesenswert?

Die Auflösung läßt sich immer durch Oversampling erhöhen, selbst wenn
das Rauschen kleiner als ein LSB wäre, kann man mit Dithering
(künstlich  erzeugtem Rauschen auf den Eingängen) die Auflösung
erhöhen.

von Joe (Gast)


Lesenswert?

@ arc, würde das gehen was ich da beschrieben habe ? Wie schalte ich in
den Bipolar Modus ? Dann teste ich es aus.

  SD16CCTL0 =  SD16UNI + SD16IE;

Wie müßte es hier heißen ?

von Joe (Gast)


Angehängte Dateien:

Lesenswert?

Habs nun kapiert und natürlich auch im Handbuch gefunden, vielen Dank
für eure Geduld und Unterstützung.

Falls es jemanden interessiert, siehe Anhang.

Die Erklärungen von arc waren völlig ok, dennoch, wenn man unipolare
Spannungen messen will dann ist der Eingangsbereich 0-0,6V, schade ;-(

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich bin fest der Meinung, dass sich die Auflösung nicht erhöhen lässt.

Die Auflösung beschreibt, wie der Name schon sagt, in welchen Schritten
ein Wert aufgelöst wird. Also in wieviele Schritte er zerlegt wird.

Wenn ich oversample, wird er aber nicht in mehr Schritten zerlegt als
vorher -> Die Auflösung wird NICHT erhöht.

Der ADC wird vielleicht genauer und "ruhiger" (wg dem Rauschen). Aber
seine Auflösung bleibt immernoch die gleiche.

von Joe (Gast)


Lesenswert?

Simon, ich kann nicht erkennen was das mit dem Thema zu tun hat aber arc
hat zumindestens theoretisch recht. Die Frage ist was man unter
oversampling versteht. Das Abtasten von "Zwischenwerten" erreicht man
üblicherweise mittels Referenzumschaltung z.B. die ersten Video AD
Wandler lieferten 7,5 BIT hier wurde einfach in der Zwischenabtastung
die Referenz umgeschaltet, somit die Auflösung erhöht. Ähnliche
Beispiele finden sich zu hauf, man muß das System derart beeinflussen
das man Zwischenwerte bekommt.

Wie gesagt, hier geht es aber um unipolar, bipolar. Die Auflösung ist
nicht mein Problem.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Enhancing ADC resolution by oversampling:
http://www.atmel.com/dyn/resources/prod_documents/doc8003.pdf

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.