Ich schreibe derzeit meine erste ernsthafte Anwendung mit einem MSP430-Controller (insbesondere einem MSP430G2553) und bin etwas verwirrt von der Dokumentation, wie ich den ADC10 einrichten soll. Ich möchte es so verwenden:
Wie konfiguriere und verwende ich den ADC10 in diesem Anwendungsfall? Ich programmiere den MSP430 in Assembler, aber eine Antwort in C ist auch nützlich.
Hier ist, wie ich denke, dass der ADC konfiguriert werden sollte:
ADC10CTL0:
SREFx = 000 (V_CC)
ADC10SHTx = 11 (64 clocks, we have enough time)
ADC10SR = 1 (50 kbps should be enough)
REFOUT = 0
REFBURST = don't care
MSC = don't care
REF2_5V = don't care
REFON = 0
ADC10ON = 1 (set to 1 after finishing the configuration)
ADC10IE = 0 (no interrupts)
ADC10CTL1
INCHx = 0100 (A4)
SHSx = 00 (sample and hold sourced from ADC10SC)
ADC10DF = 0 (no two's complement)
ISSH = 0 (no inversion)
ADC10DIVx = 000 (not too sure either)
ADC10SSELx = 0 (is this the right clock?)
CONSEQx = 00 (single channel single conversion)
ADC10AE0 = 0x10 (A4 enabled)
ADC10DTC1 = 0 (DTC disabled)
Ich denke, die Sequenz zum Abtasten von Daten sieht folgendermaßen aus:
ADC10ON
auf 1 ENC
und auf 0 setzen ADC10SC
und alle Register konfigurieren.ADC10SC
und ENC
auf 10 setzen , um die Konvertierung zu startenADC10MEM
Ist diese Reihenfolge richtig? Sind die Einstellungen korrekt?
Deine Einstellungen sehen richtig aus. Ich habe jedoch das Gefühl, dass Sie sich beim Takten nicht sicher sind.
Bleiben Sie in Ihrer Sampling-Sequenz ADC10ON
auf 0 gesetzt, bis die restlichen Register konfiguriert sind. Wenn Sie dann auf die Probenahme warten, warten Sie nicht eine bestimmte Anzahl von Zyklen. Stattdessen abfragen, ADC10BUSY
bis es 0 ist.
Die 64 Takte, auf die in der Sample-and-Hold-Zeiteinstellung verwiesen wird, ADC10SHTx
sind keine CPU-Takte (MCLK); sie sind Clocks relativ zu der Clock-Quelle, die Sie mit der ADC10SSELx
Einstellung auswählen, dividiert durch den ADC10DIVx
Wert.
Mit Ihren aktuellen Einstellungen läuft Ihr ADC vom ADC10OSC
(internen Oszillator des ADC), der mit ungefähr 5 MHz läuft, und Sie teilen diesen Takt durch 1. Ihre Abtastzeit ist auf 64 Takte oder 12,8 µs eingestellt. Sie können diese Abtastzeit mit 2, 4 oder 8 multiplizieren, indem Sie die Uhr durch denselben Wert teilen.
Wie lange Ihre Abtastzeit sein muss, hängt von Ihrer Hardware ab – insbesondere davon, wie lange es dauern würde, bis Ihre Spannungsquelle einen bestimmten Kondensator füllt. Wenn Sie nicht lange genug warten, erhalten Sie immer noch einen Messwert, aber er wird falsch sein. Das Benutzerhandbuch der MSP430-Familie enthält weitere Einzelheiten. Die Einstellung „Mach es einfach, ich habe alle Zeit der Welt“ würde jedoch die Verwendung der ACLK-Quelle (12 kHz, vorausgesetzt, ACLK wird intern vom VLO bezogen) geteilt durch 8 (= 1,5 kHz) mit 64-Takt-Samples verwenden für eine Abtastzeit von 42 ms. Wie Sie oben berechnet haben, dauert es tatsächlich 77 Takte, sodass das Lesen ungefähr 51 ms dauert. Das ist wirklich langsam und grober Overkill, aber es ist kein schlechter Ausgangspunkt, um abzustimmen.
ADC10BUSY
anstatt zu warten), wobei die Uhr eine 512-Hz-Uhr war (externer 32768-Hz-Oszillator geteilt durch 64) und es scheint bis jetzt zu funktionieren. Danke für deine Antwort, hilft mir weiter.
Olaf
Olaf
Olaf
FUZxxl
FUZxxl
FUZxxl
Olaf
FUZxxl
Olaf
Olaf
FUZxxl
Olaf
REFBURST
hängt von der Energieverwaltung ab.MSC
ist egal, wenn nicht Multiple/Sequence-Modus. SHSx hängt von Ihrem Sample-Trigger ab. Wenn Sie manuell starten, setzen Sie es auf 0 (ADC10SC-Bit). Für den Rest müssen Sie wirklich Ihre Hardwarekonfiguration überprüfen. Das Timing hängt davon ab, welcher Takt, welche Frequenz usw. verwendet werden. Normalerweise würde ich mit dem grundlegenden Setup beginnen und dann Peripheriegeräte usw. verwenden.Olaf
FUZxxl
REFBURST
es wird nicht benötigt, da ich den Referenzspannungsgenerator nicht verwende.Olaf
FUZxxl
FUZxxl
Olaf
FUZxxl
Olaf
prasad
prasad
FUZxxl
FUZxxl
prasad