Forum: Mikrocontroller und Digitale Elektronik MSP430 Erfahrungsaustausch zu ADC12 gesucht


von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
bisher ist es mir nicht gelungen, daß der  ADC12 eine Messreihe, ohne
zu streuen, abliefert.
Besonders eigenartig finde ich, daß die letzte Ziffer zumeist um 4
Einheiten springt und daß der Meßwert zumeist eine ungerade Zahl ist.
Eine Meßkurve ist als Excel Diagramm mit Tabelle im Anhang. + das
verwendete Programm
Der MSP430F133 mißt hier im Beispiel die Spannung einer Akkuzelle und
die Spannung der internen Temperaturdiode. Die 12 Bit Meßwerte stehen
im ADC12MEM7 + ADC12MEM10 und werden zur Speicherung in eine
Smartmedia-Karte geschrieben.
Eine Messung wird alle 5ms vom TIMER ausgelöst.
Wer hat Erfahrung mit dem ADC12 und würde mal mein Programm testen?
(ohne SM karte) Weitere Einzelheiten könnten in einer evtl. Diskussion
geklärt werden.
MfG
Wolfgang

von Sebastian (Gast)


Lesenswert?

Das Programm sieht ganz gut aus. Abgesehen davon, dass du doch bitte die
Defines verwenden mögest; ich habe jedenfalls keine Lust nachzugucken,
welche Bits 0x17 im ADC12MCTL sind ... Insofern gehe ich einfach mal
davon aus, dass du da keinen Tippfehler eingebaut hast.

Ich habe auf www.mathar.com auf jeden Fall auch lauffähige Bespiele zum
ADC12 erstellt; vielleicht guckst du dir die mal an ...

Zum Rauschen: Du solltest prinzipiell bedenken, dass 12 Bit verdammt
viel sind. :-) Welche Ref.-Spannung hast du denn? Bei 3,3V hättest du
ja schon eine Wertigkeit von unter 1mV beim LSB. Dass dort ein Springen
um bis zu 4 Stellen auftritt ist völlig OK. 1mV (entsprechend weniger
als 1%o) Messgenauigkeit hat kein bezahlbares Multimeter, der MSP430
natürlich erst recht nicht.

von Sebastian (Gast)


Lesenswert?

Ach noch was (hab mir gerade erst dein Excel-Sheet angeguckt): Das sieht
doch wunderbar aus. Mach doch einfach eine Aufnahmefolge über z.B. 1
Sekunde (entspräche ja bei dir 200 Messungen), schreib die Ergebnisse
in ein Array und mach am Ende eine Rank-Order-Filterung (Median halte
ich für sehr sinnvoll). Wobei für ein RO-Filter sogar schon 10
Messungen völlig ausreichen würden -- falls die Überwachung der
Batteriespannung zeitkritisch sein sollte.

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

@Sebastian
da gehen unsere Meinungen etwas auseinander. Die Kurven sollten als
"Strich" verlaufen und das ohne Filter, wobei ich beim Übergang von
einer Stufe zur nächsten nur +-1 LSB sehen möchte. Ich habe mal noch
eine Kurve angehängt, bei der ich die interne Temperatur-Diode leicht
erwärmt habe. Hier sieht man noch besser, dass eine Stufe zumeist aus 4
LSB besteht.
Zwischenwerte gibt es kaum. Da muß irgendwo noch ein Fehler sein.
Es ist ja richtig, dass 12BIT nicht wenig ist, aber bei einem
billigeren Gerät würde ich nur Abstriche an der Linearität machen.
Verwendet habe ich mit ADC12ON die interne 1,5V REFspannung. (denk ich
mir). Da ich annahm, dass über AVcc Störungen eingetragen werden, habe
ich die AVcc Spannung versuchsweise über eine 3V Batterie separat
versorgt
Wenn  Deine Kurven ähnlich aussehen, würde ich annehmen, dass der
MSP430 einen Konstruktionsfehler hat.

Eher denke ich, dass man an den Einstellungen noch was machen kann.
(Abtast- und Haltezeit, Taktzeiten usw.) oder bestimmte
Schaltungskriterien beachten muß. Irgendwo hatte ich mal gelesen, dass
nichtbenutzte Eingänge kurzzuschließen sind. Ist ein abschirmendes
Gehäuse zwingend notwendig?
Weitere Erfahrungsberichte sind gern gesehen?
MfG
Wolfgang

von Sebastian (Gast)


Lesenswert?

> Verwendet habe ich mit ADC12ON die interne 1,5V REFspannung.

Wie gesagt: Verwende doch die Defines. Die gibt es ja nicht umsonst.
:-) REF2_5 schaltet z.B. zwischen 1,5V und 2,5V um. Falls du 1,5V
verwendet hast, hast du ja auf dem LSB sogar eine Auflösung von knapp
0,3mV. Naja, da können unsere Meinungen soweit auseinander gehen wie du
willst, aber weniger als ein Drittel Millivolt Auflösung ist völlig
übertrieben. Da ist ja die thermische Spannung an den Kontakten schon
größer. ;-) Mit dieser Genauigkeit kannst du gar nichts anfangen. Wenn
du Sprünge von meistens 4 Wertigkeiten hast, bedeutet das ja Sprünge um
gut 1mV. Das ist schon eher im realistischen Bereich. Du hast eben einen
MSP430 für 5 Euro gekauft; kein Labormeßgerät für 500 Euro.

> Irgendwo hatte ich mal gelesen, dass nichtbenutzte Eingänge
> kurzzuschließen sind.

Ja, so habe ich meinen MSP430 letzte Woche kaputt bekommen. ;-) Neee,
nichtbenutzte Eingänge sind laut User Guide als Output zu definieren
und unbeschaltet zu lassen.

von Wolfgang (Gast)


Lesenswert?

mit dem begonnen Erfahrungsaustausch wollte ich in erster Linie
herausfinden, ob der MSP 430 in der Lage ist, ordentliche Messwerte
abzuliefern oder ob bei mir der Fehler zu suchen ist. Wenn bei allen
anderen Anwendern der MSP 430 richtig läuft, habe ich evtl. ein
schadhaftes Exemplar oder ich mache etwas falsch. Da sich der MSP auch
nicht so einfach zerstörungsfrei auslöten lässt, wollte ich erst einmal
andere Anwender nach ihren Erfahrungen fragen.
Dabei geht es nicht so sehr um die Richtigkeit des Messwertes, sondern
um die Funktionstüchtigkeit des Schaltkreises bzw. der Schaltung.
(fehlerfreies Programm vorausgesetzt;   wenn nicht, evtl. korrigieren)

Bei einem 500€ Gerät kann ich davon ausgehen, dass der angezeigte
Messwert bei Einhaltung der vorgegeben Bedingungen, auch richtig ist.
Aber das ist hier nicht das Problem.

0,3mV bedeuten bei der internen Temperaturdiode eine Temperaturänderung
von ca. 0,1° und 4 Wertigkeiten sind dann 0,4°. Dann sieht die
Betrachtungsweise schon ganz anders aus.

Wie schon gesagt, alle Erfahrungsberichte sind willkommen.

MfG
Wolfgang

von Oliver Keller (Gast)


Lesenswert?

Hi,

also ich sehe das auch so wie Sebastian. Bei ca. +/-0,5mV ist das
vermutlich einfach thermisches Rauschen (durch Brownsche
Mollekularbewegung). Ich kann mir auch gut vostellen, dass man
Prozessor und ADC in einem Gehäuse nicht besonders gut voneinander
abschirmen kann....
Wie wärs denn mit folgender Begründung: TI hat dem MSP einen 12Bit ADC
verpasst weil's sich so einfach noch besser verkauft als mit "nur"
10Bit. Richtig sinnvoll ist es wegen obigen Problemen eher nicht.

Schade, dass sich bisher noch keiner von den Gurus gemledet hat - die
wüssten sicher Bescheid.

Ansonsten, wenns wirklich ein Bug ist, hilft vielleicht die MSP430 Bug
Database (aus der Linksammlung):
http://tinymicros.com/embedded/MSP430/

Gruss,
oli

von Sebastian (Gast)


Lesenswert?

@Wolfgang: Die interne Temperaturdiode ist eh nur Spielerei; steht ja
auch in den Appnotes überall drin. Wenn du damit auf +-1°C genau messen
kannst, ist es schon verdammt genau. Sprünge um 4 LSBs (also 0,4°C) sind
noch viel zu genau; so genau ist die Diode aufgrund der Eigenerwärmung
und der inhomogenen Temperaturdiffusion im MSP430 selbst niemals. Wie
gesagt: Diode plusminus 1°C bestenfalls, der ADC plusminus 1-2mV
bestenfalls.

von KoF (Gast)


Lesenswert?

nur mal eben so zur tolleranz des adc`s ;)

erstmal sollte deine stromversorgung extrem stabil sein, sonst gibt es
(wenn auch nur kleine) sprünge.

und noch was zur genauigkeit ;)
12 bit sind ja 4096 abtastungen ;) bei einer ref von 1,5 macht eine
abweichung/sprung von etwa 3 werten ~ 3*(3,7*10^-4)... also extrem
wenig ;)

mfg KoF

von Sebastian (Gast)


Lesenswert?

Ganz meine Rede ... :-)

Und noch was: Der Einwand mit der Spannungsversorung ist sehr gut! Da
der MSP430 ja keine 5V verträgt, gehe ich davon aus, dass Wolfgang ihn
aus einem LM317 versorgt. Die Ausgangsspannung, die dieser liefert, ist
ja proportional zu den beiden Widerständen, mit denen er beschaltet ist.
Wenn man nun unbedingt hochgenaue Messwerte haben möchte, muss man
natürlich auch deren thermische Veränderung mit betrachten.
(Widerstände rauschen ja thermisch -> Versorgungsspannung ändert sich
-> Ref.-Spg. ändert sich -> A/D-Wandler rauscht).

Insofern komm ich langsam zu dem Schluss: Plusminus 10 LSBs (oder so um
die Plusminus 2°C) sind das beste, was man realistisch rausholen kann.

von Wolfgang (Gast)


Lesenswert?

Ihr habt ja recht, wenn ihr meint, ich soll mir nicht ins Hemd machen
wegen so’n mV.
Aber genau (richtig)  messen oder mit hoher Auflösung messen sind zwei
verschiedene Dinge. Ein Messergebnis mit vielen Stellen nach dem Komma
kann mit einem viel größeren Fehler behaftet sein, als ein Messwert mit
wenigen Stellen, obwohl es viele Stellen so schön  „genau“ aussehen.
Wie schon gesagt, mir geht es darum, durch den hier angezettelten
Erfahrungsaustausch herauszufinden, ob der MSP430 die hohe Auflösung
auch bringt.
Das Messergebnis der Temp.- Diode sollte  am wenigsten von „außen“
beeinflusst werden können. (denk ich mir)
Zur Spannungsversorgung: Da die interne REF- spannungerzeugung laut
Blockschaltbild an
AVcc hängt, habe ich AVcc versuchsweise völlig separat mit einer 3V
Batterie versorgt.
Ich habe noch einen 2. MSP430 in einer anderen Schaltung verbaut, aber
da kann ich nicht ohne zusätzlichen Aufwand die SM- Karte anschließen.
Eine 2-stellige LED 7 Segmentanzeige  habe ich dort an Port 4 angehängt
und kann damit u.a. die letzen 8Bit aus ADC12 MEMx darstellen. Und da
sieht es etwas günstiger aus (keine 4Bit Sprünge zu erkennen).
Aber mehr als 4 Ausgaben/Sekunde schaffen meine Augen nicht und um
mehre 1000 Werte beurteilen zu können, dauert es eine Ewigkeit.
Vielleicht muss ich mir doch was bauen, damit ich auch hier einen SM-
Speicher anhängen kann.
Aber ich hoffe noch auf weitere Erfahrungsberichte  und wenn auch
andere Anwender  zu dem Schluss kommen, dass 12 Bit beim MSP430 Asche
sind, muss ich dann vielleicht 2 Bit abschneiden und hab dann nur einen
10 Bit A/D-Wandler.
MfG
Wolfgang

von Wolfgang (Gast)


Lesenswert?

Sind wir die einzigen, die einen MSP430 benutzen und evtl. Erfahrungen
mit ADC12 gesammelt haben?
MfG
Wolfgang

von Sebastian (Gast)


Lesenswert?

Jep, sind wir. ;-)

Naja, viele verwenden den echt nicht. Ich habe auf meiner Homepage ein
paar Tutorials zum MSP430 geschrieben, aber mehr als 5-10 Leute in
diesem Forum interessieren sich eh nicht dafür ... ;-) Atmel ist eben
der unangefochtene Platzhirsch, da hat TI einen ziemlich schweren
Stand.

von Jens (Gast)


Lesenswert?

...bau gerade eine Schaltung, um den MSP430 in einem optischen Sensor
einzusetzen. Dabei werden 8 Photodioden über den ADC12 ausgelesen.
Eigentlich sehen meine Werte bisher ganz gut aus, allerdings habe ich
noch nicht genug Daten, um das abschliessend beurteilen zu können...
Was mich stört sind die Sprünge bei dir, das sieht doch wohl nicht nach
ganz normalem Rauschen aus.
Na ja, werd mich mal wieder melden, wenn ich mehr Daten hab...

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Wolfgang,

gibt es bei Dir mittlerweile neu Erkenntnisse. Ich scheine das gleiche
Problem zu haben wie du. Der ADC12 spuckt nur noch ungerade Werte aus.
Das kann doch kein thermisches Rauschen sein??????
Hab schon verschiedene Einstellungen zum Timing ausprobiert, immer mit
mehr oder weniger dem gleichen Ergebnis: immer ungerade Zahlen. Dabei
bin ich mir sicher, dass ich das anfangs schon mal anders hatte.
Hab mal eine Datei angehängt. Es liegt an allen 8 Kanälen 1.6 V an,
Ref= interne 2.5V.


Einstellungen:
  ADC12CTL0 = ADC12ON+SHT0_2+MSC+REFON+REF2_5V;
  ADC12CTL1 = SHP+CONSEQ_1;

  ADC12MCTL0 = SREF_1;
  ADC12MCTL1 = SREF_1;
  ADC12MCTL2 = SREF_1;
  ADC12MCTL3 = SREF_1;
  ADC12MCTL4 = SREF_1;
  ADC12MCTL5 = SREF_1;
  ADC12MCTL6 = SREF_1;
  ADC12MCTL7 = SREF_1+EOS;

von Oliver Keller (Gast)


Lesenswert?

Hi,

also meine Vermutung mit den 12Bit als Verkaufsargument war wohl voll
daneben! TI bietet nämlich sogar integrierte 16Bit ADCs an...
Und ich habe bisher euer Problem mit den Treppenstufen übersehen - die
dürften natürlich nicht durch Rauschen entstehen.

Ich kann euch nur nochmal die MSP430 Bug Database ans Herz legen:
http://tinymicros.com/embedded/MSP430/
Die ist zwar ziemlich unübersichtlich aber immer noch besser als die
Seite von TI! Und mit der Suchfunktion kommt man dann schon zurecht.

Gruss,
oli

von Jens (Gast)


Lesenswert?

weiss zwar nicht, was das zu bedeuten hat, aber wenn ich mit

ADC12CTL1= [..]+ADC12DIV_7;

rumspiele, kriege ich wenigstens auch mal wieder gerade
Zahlen...vielleicht kann sich ja jemand nen Reim drauf machen...

von Sebastian (Gast)


Lesenswert?

Man konsultiere unsere allseits beliebte Bibel (slau049d) und stelle
fest, dass dem Blockschaltbild auf Seite 17-3 unschwer zu entnehmen
ist, dass ADC12DIV den Divider der Clocksource festlegt (1 bis 8). Legt
doch testweise mal eine andere Clock fest (über ADC12SSELx), z.B. mal
die MCLK oder ACLK. Es scheint sich ja offenbar um ein Problem zu
handeln, dass zumindest im Entferntesten irgendwas mit Timing zu tun
hat ...

von Jens Freese (Gast)


Lesenswert?

...na ja, aus der "Bibel" hab ich ja gerade entnommen, was man denn
mal variieren, bzw. verändern könnte. Daher hab ichs ja mal mit
ADC12DIV probiert. Andere clock habe ich auch ausprobiert, scheint aber
eher verrauschter zu werden...

"Es scheint sich ja offenbar um ein Problem zu
handeln, dass zumindest im Entferntesten irgendwas mit Timing zu tun
hat ..."

ja, dem kann ich zustimmen, bloss, dass ich mich da leider nicht im
Entferntesten genug mit auskenne (zumindest noch nicht...).

gruss,
jens

von Wolfgang (Gast)


Lesenswert?

Leider habe ich noch keine neuen positiven Erfahrungen gemacht. Es ist
ja  „schön“ , wenn Jens ähnliche Ergebnisse erzielt hat, wie ich,
zumindest könnte damit ein Exemplarfehler  höchstwahrscheinlich
ausgeschlossen werden. Besser wäre es natürlich, wenn jemand den Stein
des Weisen gefunden hätte.
An den Zeiteinstellungen habe ich, soweit ich sie dem Datenblatt
entnehmen konnte, überall herumgeschraubt.
Zwischenzeitlich habe ich eine neue Leiterkarte entworfen und gerade
geätzt.
Beim Entwurf  habe ich versucht, den Digital- vom Analogteil besonders
scharf zu trennen.
Wenn neue Erkenntnisse damit vorliegen, werde ich berichten.
MfG
Wolfgang

von Tacker (Gast)


Lesenswert?

Hallo,
wir setzen schon seit Jahren in unseren Produkten MSP430P325
Controller ein. Da wir in Zukunft einen MSP430F435 einsetzen werden,
habe ich mich schon ein wenig mit dem ADC12 auseinandergesetzt.

Um zu vermeiden, dass die AD-Werte um 4 Einheiten springen, ist es
notwendig am VREF+ Pin einen 10uF und einen 100nF Kondensator gegen
AGND zu bestücken. Dann klappt es wunderbar.

Gruß

Tacker

von Wolfgang (Gast)


Lesenswert?

Besonderen Dank an Tacker, der offensichtlich die richtige Ferndiagnose
gestellt hat.
Ich hätte nicht gedacht, daß diese Kondensatoren so einen Einfluß
haben. In meiner Schaltung hatte ich nur den 100nF an REF+ eingebaut,
da nach Datenblatt bei 10µF beim Umschalten der REF-quelle eine
Beruhigungszeit von ca. 10ms notwendig ist. (wenn ich das richtig
gedeutet habe)
Aber mit 10µF sind die Sprünge von 4 Einheiten weg und das ist erst
einmal das Wichtigste.
Damit  ist  für mich auch klar, dass bei meiner 2. Schaltung  die
4Bit-Sprünge nicht zu sehen waren, da ich dort 6,8µF an REF+ verbaut
hatte, ohne jetzt daran gedacht zu haben.
MfG
Wolfgang

von Jens Freese (Gast)


Lesenswert?

Da bin ich ja frohen Mutes, dass das jetzt bei mir auch hinhaut. Ich
habe gerade eine neue Prototypplatine bekommen, bei der die beiden
Kondensatoren auch drauf sind. Hab bis jetzt mit dem Headerboard von
Olimex gearbeitet, das von Haus aus ja gar keinen Kondensator an Vref+
hat. Also, danke an Tacker.

Gruss,
Jens

von Wolfgang (Gast)


Lesenswert?

Nachdem Tacker einen guten Tipp gegeben hat, sind die gemessenen Werte
der internen Temperaturdiode akzeptabel. Wenn ich aber eine externe
Spannung messe, z.B. über den Eingang P6.4, ist das gemessene Signal
stark verrauscht. Hat zwischenzeitlich jemand Erfahrungen, wie man das
Rauschen verringern kann?
MfG
Wolfgang

von kleiner Hinweis (Gast)


Lesenswert?

Das Rauschen kann mit mit zwei Mitteln gut verringern:

- Oversampling: man ermittelt mehrere Messwerte hintereinander
  und bildet dann den Durchschnitt
  int myvalue = (ADC12MEM0 + ADC12MEM1) >> 1;
  mit 4 meßwerten erreicht man bei kritischen schaltungen
  eine gute Verringerung des Rauschens

- ADC12 Sample Time: laut slau49d kann man für den ADC12
  festlegen, wieviele Takte zum samplen "erlaubt" werden
  -> ist deren Anzahl zu gering, kann es vorkommen, daß
     der zu messende Ausgang (von was auch immer)
     zu stark belastet wird und somit nicht korrekt gemessen
     wird
  Also: SampleTime am besten groß wählen
        (bei 8Mhz MCLK mind 128 Takte)

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

@kleiner Hinweis
hoffe, dass wir von der gleichen Zeit sprechen. Habe den Wert für SHT0
und SHT1 jeweils auf SHT_15 eingestellt, d.h. es ist dies m. E. die
maximal mögliche Zeit für das Einlesen einer Spannung. Das Ergebnis hab
ich mal im Anhang als Exceldiagramm dargestellt. Obere Kurve: eine
Batteriespannung, unter Kurve: interne Temperaturdiode.

Vielleicht hat schon jemand eine Messreihe mit einem MSP430 erzielt,
die ähnlich oder besser ist, als die dargestellte Temperaturkurve.
Bitte melden.

MfG
Wolfgang

von nobody0 (Gast)


Lesenswert?

Mit dem internen Temperatur-Sensor kann man nicht genau messen; das
hängt hauptsächlich von der Charge ab.
Mit der linearen Formel von TI bekomme ich um 1 bis 5 Grad zuwenig
Temperatur gemessen.

von Wolfgang (Gast)


Lesenswert?

Die interne Temperaturdiode sollte nur als Beispiel dienen für eine für
mich noch akzeptable Messreihe. Mein Problem ist das übermäßige
Rauschen bei der Messung einer externen Spannung (Normalfall) mit dem
ADC12. Vielleicht hat doch jemand gute Erfahrungen gemacht.

MfG
Wolfgang

von nobody0 (Gast)


Lesenswert?

Also ich benuzte den ADC auch bei anderen MCs immer so, dass ich mit
einer relativ hohen Sample-Frequenz arbeite und dann immer die Summe
von n (um 10) Werten nehme (Mittelwertbildung). Damit habe ich
praktisch kein Rauschen. Dahinter steckt letztlich der zentrale
Grenzwertsatz; es ist also eine auch theoretisch fundierte
Rauschreduktion.
Bei langsamem wie Temperatur nehme ich zusätzlich einen exponentiell
gleitenden Mittelwert:

temp = temp_new + (N-1.)*temp)/N;

von Wolfgang (Gast)


Lesenswert?

@nobody0
kann ich das so verstehen, dass Deine Messreihen ohne nachträgliche
Messwertbearbeitung ähnliche Rauschanteile haben, wie meine
Messreihen?.
Eigentlich möchte ich ohne nachträgliche Messwertbearbeitung auskommen.
So  habe ich mit einem 10 BIT A/D -wandler C571( Umsetzzeit ca. 30µs)
Messreihen aufgenommen, wo die letzte Stelle um +-1 Einheit schwankte,
woraus ich ableiten würde, dass eine rel. hohe Auflösung durchaus
möglich sein sollte. Aber hierbei sind Wandler und MC getrennt.
Aber wenn jemand mit einem MSP430 „rauschfreie“ Messreihen erzielt hat
oder aber meine bestätigen würde, bitte hier mitdiskutieren.

MfG
Wolfgang

von Michael B (Gast)


Lesenswert?

Hallo zusammen,

habe euer Posting mit Interesse verfolgt.
Ich habe leider noch keine Erfahrung mit dem ADC
der MSP430.

Meine Bedürfnisse sehen folgendermaßen aus:
Innerhalb von 500µs 3 Signale wandeln.
Am besten 3x16 Ergebnisse, um einfach mitteln zu können.

Jetzt die entscheidende Frage:
Wie lang muss ich die sample-hold time wählen,
um ein korrektes Ergebnis zu bekommen.
Ein Signal ist ein Rechteck-Signal.
Das zweite Signal ist die Temp.diode.
Das dritte Signal ist ein ansteigendes Rechteck.

Ich triggere den ADC mit TimerA1.
Gibt es eine Möglichkeit den ADC mittels TimerA1
innerhalb einer TimerA Periode 3mal zu tiggern ?

Danke

von nobody0 (Gast)


Lesenswert?

Im Prinzip schon.
Der ADC braucht dafür genügend Takte; Einzelheiten muß man im Handbuch
nachlesen.

von Michael B (Gast)


Lesenswert?

Hatte ich natürlich vergessen:
Würde den internen AD-Takt von 5MHz nutzen.

Rein rechnerisch käme ich bei ein wenig offset (register auslesen...)
auf max. 32 takte pro wandlung.

Frage: ist das ausreichend eurer Meinung nach.

von Sebastian (Gast)


Lesenswert?

Die entscheidende Frage ist erst mal einzig und allein die Frequenz
deines Signals. Um Aliasing zu vermeiden, musst du das Nyquist-Theorem
(f_abt>=2*f_max) einhalten. Falls du nicht allzu schlechte Methoden
verwendest, um das Basisband herauszufiltern, sollte f_abt=3*f_max
locker reichen. Wenn du ein Rect-Signal mit 100Hz hast, reicht es also
völlig, mit 300Hz abzutasten. Wenn du GHz-Signale hast, sieht der
MSP430 natürlich alt aus ...

von Wolfgang (Gast)


Lesenswert?

@Michael,
Wenn ich das Datenblatt richtig deute, ist für die Temp. Diode eine
Abtastzeit von min 30µs (s. S.  53) und für einen „normalen Kanal“ von
1220ns (s. S.  50) notwendig und für eine Wandlung werden max. 3,5µs
angegeben bzw. 13 Takte.
Würde mich für deine Ergebnisse interessieren, wenn es soweit ist.
@nobody0
langsam reift bei mir der Entschluss, über eine Mittelwertbildung das
Rauschen zu reduzieren.
Kannst Du vielleicht mal ein Programmbeispiel anhängen, um zu sehen,
wie so was macht.
Ich nehme an, dass bei der Division Gleitkommazahlen entstehen können,
die, um ausgegeben werden zu können, irgendwie in Integerzahlen
umgewandelt müssen. Oder sehe ich das falsch?

MfG
Wolfgang

von Michael B (Gast)


Lesenswert?

@Sebastian:
Sorry, aber manchmal sieht man den Wald vor lauter Bäumen nicht.
Die Formel steht ja im User-Guide. Mein OP hat nen Rout=180Ohm.
Daraus ergibt sich ca. 2µs. Also sollten 10x samplen reichen bei 5Mhz
Takt.
Aliasing ist bei 5MHz außenvor.


@Wolfgang:
Von welchem Datenblatt sprichst du?
Ich würde einen gleitenden Mittelwertfilter (Tiefpass verwenden)
Könnte z.B so aussehen:

Neu = Alt = (2^(n-1)*Alt + 1*Neu) / 2^n

Bei n=4:
Neu = Alt = (15*Alt + 1*Neu) / 16

Man sollte nur beachten, dass die Eingangswerte um n Stellen nach links
rotiert werden müssen, um verlustfrei zu arbeiten.

von nobody0 (Gast)


Lesenswert?

Die Integer-Division scheidet ab und macht den Wert künstlich klein;
besser ist kaufmännische Rundung:

// Division of (unsigned) integer numbers with good rounding (with
minimized quantisation error).
// Integer division (of positive numbers) ignores everything behind the
point while good rounding
// rounds up >= .5 and rounds down < .5.
#   define mc_POS_DIV(a, b)  ( (a)/(b) +  ( ( (a) % (b) >= (b)/2 ) ? 1
: 0 ) )

von Wolfgang (Gast)


Lesenswert?

@Michael,
ich verwendete das Datenblatt SLAS272C  MSP430x13x, MSP430x14x  vom
Febr. 2001
Der 5 MHz Takt ist m. E. der interne Takt für den ADC12. Wenn das zu
schnell ist, kann man mit ADC12DIV die Taktfrequenz herunterteilen.
Für eine Wandlung sind 13 Takte notwendig. siehe SLAS272C S.50

@nobody0
danke, werd es mal probieren

MfG
Wolfgang

von Michael B (Gast)


Lesenswert?

@Wolfang:
Danke, genau das Datenblatt habe ich benötigt.

Womit ich gleich bei der zweiten Frage wäre:
Benutz ja TA1 um den ADC zu triggern.
Nun möchte ich während einer TA0-Periode zweimal
zu bestimmten Zeiten den ADC triggern.
Den TA1 einmal während TA0 auf einen höheren Wert
zu setzten klappt noch, doch sobald ich ihn dann
wieder auf den kleineren Wert setze wird erst
in der übernächsten TA0-Periode wieder
der TA1-Interrupt ausgelöst.

Ihrgend eine Idee, wie das Problem zu lösen ist ?

von Wolfgang (Gast)


Lesenswert?

leider nein, da ich mich vorwiegend nur mit der Suche nach Fehlern, die
zum Rauschen führen könnten, beschäftigt habe.

Vielleicht liest nobody0 noch mit: obwohl die Mittelwertbildung aus 8
Werten das Rauschen schon um einiges gemindert hat (interne
Temperaturdiode nur noch +- 1 Einheit), bin ich bei
der Spannungsmessung über einen „normalen“ Eingang noch völlig
unzufrieden. (REF 1,5V)
Wie viel Messwerte fasst Du zusammen und wie groß ist dann noch die max
Rauschamplitude bei Dir?

Natürlich ist jeder eingeladen zu diskutieren, der Erfahrungen mit dem
ADC12 gemacht hat.

MfG
Wolfgang

von Wolfgang (Gast)


Lesenswert?

heute gute Nachrichten zum ADC12. Die erhaltenen Messwerte sind jetzt
nahezu rauschfrei.
Da ich keine systematischen Untersuchungen gemacht habe, kann ich nur
auflisten, was m. E. einen Einfluss gehabt haben könnte.
1)scharfe Trennung zwischen analoger und digitaler Masse
2)analoge Masseinsel wird mit Masse am 3V-Regler (kein Schaltregler)
verbunden
3)die Massefläche für die gesamte Leiterplatte ist die digitale Masse
4)15µ+100n zwischen analoger + 3V-Spannung und analoger Masseinsel
(15µ/3V, weil ich nur 15µ/3V Tantalkondensatoren vorrätig hatte)
5)15µ+100n zwischen VREF und analoger Masseinsel
6)15µ+100n zwischen digitaler +3V-Spannung und digitaler Masse
alle Kondensatoren so dicht wie möglich zum IS
MfG
Wolfgang

von nobody0 (Gast)


Lesenswert?

Das mit den Kondensatoren habe ich vorausgesetzt, weil das im Handbuch
steht.
Analoge u. digitale Masse u. Versorgungsspannung habe ich zusammen.

von Michael B (Gast)


Lesenswert?

Hallo,

ADC die nächste ;-)

Ich stelle folgendes Verhalten bei mir (F133) fest.

Ich wandel einen Kanal mit 16 Speicherregistern nach einem
Timer-Interrupt.
Alle Speicherregister sind identisch konfiguriert, außer natürlich dem
letzten.
Was ich nun feststelle ist folgendes Verhalten:
Die Ergebnisregister 0 - 7 enthalten nicht die selben Wert
wie die Register 8 - 15. Der Unterschied ist ca. 100d.

Kann sich das jemand erklären ?

von KoF (Gast)


Lesenswert?

hmm, wenn 12bit = 4095 werten entspricht (0xfff)
0x100d aber 4109 werte abweicht, dann ist da was nicht ok ;-)

des weiteren solltest du dran denken, das r0 - r3 (also die ersten 4)
register mit speziellen funktionen sind, und nur r4 - r15 universell
verwendbar sind.

zeig doch einfach (d)einen code(schnipsel).

mfg
KoF

von Wolfgang (Gast)


Lesenswert?

vermutlich meint jeder ein anderes Register. Deshalb kann man ohne ein
Programmschnipsel nur raten.
Versuchweise habe ich mal Kanal 4 (P6.4 = INCH_4) mit einer
Eingansspannung von 0,7V belegt und den Kanal 4 allen 16 ADC12CTL0...15
Steuerregister zugeordnet. Bis auf ein gewisses Rauschen waren die
ADCMEM0... 15 Register alle gleich. (F149)
MfG
Wolfgang

von nobody0 (Gast)


Lesenswert?

Ja, bisher habe ich mit dem MSP430F149 ziemlich genau die Spannung
gemessen, die anlag. Bisher verwende ich nur den repeated sequence of
channels mode.
Allerdings muß man das betreffende ADC-Register auch wirklich auslesen,
damit der ADC-IRQ gelöscht wird. Zumindest ist das bei MSP430F149 so,
wie ich mit Pin-Wackeln der ISR (outpin ^= 1;) und Oszilloskop
feststellen mußte; ohne Auslesen ist die Frequenz (beim Pin-Wackeln)
nämlich deutlich zu hoch.
Diesen Bug hatte ich nur mit dem IAR-Compiler untersucht; kann sein,
dass man den beim mspgcc nicht hat, aber ich vermute dass es den Bug
dort ebenso gibt.
Jedenfalls sollte man zumindest zum Debuggen am Beginn jeder ISR einen
Pin wackeln, um mit dem Oszilloskop (mit integriertem Frequenzzähler)
nachzumessen, ob die gemessene IRQ-Frequenz mit der theoretischen
übereinstimmt und ob die IRQ in dem Muster auftreten, in dem man sie
erwartet.

von Michael B (Gast)


Lesenswert?

Danke nobody0,

genau das wars !

Habe nun ein weiteres Problem.
Der Watchdog will nicht so wie ich will.

Bevor ich XT2 konfiguriere schalte ich den WDT aus.
 WDTCTL = WDTPW + WDTHOLD;   // Watchdog ausschalten
 BCSCTL1 &= ~XT2OFF;         // XT2 einschalten (8MHz)
 // warten bis der Takt eingeschwungen anliegt
 do
 {
    IFG1 &= ~OFIFG;
    for (i = 0; i < 1000; i++);
 } while(IFG1 & OFIFG);
 IFG1 &= ~OFIFG;              // fault flag zurücksetzen

Dann schalte ich den WDT, benutze MSCLK als Quelle, wieder ein.
 WDTCTL = WDT_MRST_32;

Leider hilft das periodische Rücksetzen nichts.
 WDTCTL = WDT_MRST_32;

Oder danach sind die Interrrupt Enable von RX, Timer A und B
deaktiviert.

Hat jemand ne Ahnung woran das liegen könnte ?

von nobody0 (Gast)


Lesenswert?

Der WD wird wohl nicht rechtzeitig zurückgesetzt.
Probier' erstmal den Betrieb mit abgeschaltetem WD u. wenn das
funktioniert, dann teste mal mit Pin-Wackeln u. Oszi wie oft der WD
zurückgesetzt würde.

von Bernd K. (Gast)


Lesenswert?

Auch wenn dieser Beitrag schon etwas aelter ist, wuerde es mich mal 
interessieren auf welche Genauigkeit ihr mit dem internen ADC kommt.
Ich bin jetzt bei +-1mV mit externern 2.5V Ref. Nutze im Moment ein 
Proto-Board von Olimex.

von Peter Diener (Gast)


Lesenswert?

Hallo Bernd,

ich habe bei einem MSP430F1611 (altes Projekt) ein Rauschen von etwa 2 
LSB. Meiner Ansicht nach liegt das daran, dass die Taktfrequenz des 
Controllers in die interne Referenz einstreut, die ich verwende.

Mein aktuelles Projekt wertet einen ADXL320 Beschleunigungssensor mit 
einem MSP430F247 aus, allerdings habe ich da jetzt externe Referenz 
verwendet, die aus einfacher Spannungsteilung aus der Versorgung erzeugt 
wird. Ich erzeuge zwei symmetrische Referenzen um Vcc/2 mit Widerständen 
und Tantals, so hoffe ich, Schwankungen in der Versorgung rauszurechnen, 
denn der ADXL320 bezieht seine Ausgangsspannung auch proportional auf 
die Versorgung.

Ich habe aber noch keine Messergebnisse, weil das Programm noch nicht 
fertig ist.

An einem anderen Projekt von uns ist ein Ti MSC1211 mit internem 24 bit 
AD drin und der funktioniert hervorragend bis auf die letzte Stelle. 
Also etwa +- 1LSB Rauschen. Das mit externer Referenz und dann nochmal 
mit Messverstärker.
Also AD-Wandler können die schon bauen, daran sollte es nicht liegen. 
Wenn so ein hohes Rauschen drauf ist, tippe ich immer erst auf einen 
Designfehler.

Viele Grüße,

Peter

von Felix B. (e-b)


Lesenswert?

MSPA430F169 mit externer Referenz LM4040 +/-2 lsb über einen Monat bei 
"schlechtem" PCB Aufbau. Aus meiner Erfahrung ist die Refernzspannung 
das kritische Element.

von Bernd K. (Gast)


Lesenswert?

MSP430F1611: Bin jetzt mit externer Vref von 2,5V bei 1LSB Rauschen

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.