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
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
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
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
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
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
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.
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
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.
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
Noch mal Danke, das lese ich mir jetzt mal durch, ebenso Danke für die Erkärung.
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).
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.
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)
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 ?
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.
> 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)
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$.
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.
@ 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.
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...
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
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 ;-)
Die Auflösung lässt sich allerdings nicht per Oversampling erhöhen. Das ist nunmal so
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.
@ 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 ?
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 ;-(
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.