mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik F2013 MSP Serie


Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: szimmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.t...
http://focus.ti.com/mcu/docs/mcusupporttechdocsc.t...

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?se...

Autor: Joe (Gast)
Datum:

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

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Jojo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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$.

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Jojo S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Joe (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ;-(

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Enhancing ADC resolution by oversampling:
http://www.atmel.com/dyn/resources/prod_documents/...

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.