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
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.
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.
@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
> 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.
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
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
@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.
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
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.
Ihr habt ja recht, wenn ihr meint, ich soll mir nicht ins Hemd machen wegen son 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
Sind wir die einzigen, die einen MSP430 benutzen und evtl. Erfahrungen mit ADC12 gesammelt haben? MfG Wolfgang
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.
...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...
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;
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
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...
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 ...
...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
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
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
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
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
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
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)
@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
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.
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
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;
@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
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
Im Prinzip schon. Der ADC braucht dafür genügend Takte; Einzelheiten muß man im Handbuch nachlesen.
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.
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 ...
@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
@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.
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 ) )
@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
@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 ?
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
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
Das mit den Kondensatoren habe ich vorausgesetzt, weil das im Handbuch steht. Analoge u. digitale Masse u. Versorgungsspannung habe ich zusammen.
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 ?
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
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
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.
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 ?
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.
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.
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
MSPA430F169 mit externer Referenz LM4040 +/-2 lsb über einen Monat bei "schlechtem" PCB Aufbau. Aus meiner Erfahrung ist die Refernzspannung das kritische Element.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.