Hallo, ich möchte mit dem MSP430F1611 abwechselnd zwei Kanäle (A7 & A6) wandeln und diese dann später zwischenspeichern. Die Wandlung eines einzelnen Kanals mit dem Single-Channel Single-Conversion Mode funktioniert relativ gut. Habe den Eingang über einen 10k Widerstand mit GND verbunden, wie es mehrfach hier im Forum empfohlen wurde. Im Register ADC12MEM0 steht dann etwas zwischen 0x6d und 0x72, was einer Schwankung von ein paar Millivolt und einem Offset von 68 mV entspricht. Ich bekomme aber den Sequence-of-Channels Mode irgendwie nicht hin. Der Code ist im Anhang zu sehen. Ich vermute, dass ich entweder die CONSEQ - Bits falsch setze oder den Start der Konvertierung mit ADC12SC falsch mache. Habe schon viel rumgespielt, aber es hat nie geklappt. Kann mir einer von euch weiterhelfen? Vielen Dank schonmal im Vorraus! Herzliche Grüße Armin
Ändere mal die Zeile
1 | while ((ADC12IFG & 0x0001)==0); |
in
1 | while ((ADC12IFG & 0x0002)==0); |
Bit 1 im IFG-Register repräsentiert das ADC12MEM0 und nicht MEM1, denn du willst ja nach dem 2. Kanal erst aufhören. Außerdem musst du das Bit selbst zurücksetzen, wenn du wie in deinem Quellcode gar nicht auf das ADC12MEMx zugreifst.
> Ich bekomme aber den Sequence-of-Channels Mode irgendwie nicht hin.
D.h.? Er wandelt überhaupt nicht oder nur Schrott?
In der Schleife muss wahrscheinlich erst noch ein
ADC12CTL0 &=~ENC;
hin um das erneute setzen von ADC12SC zu ermöglichen.
Vielen Dank für eure Tipps! Du hast recht, dass war zu schwammig formuliert... mit "irgendwie" meine ich, dass es garnicht funktioniert. In den ADC12MEMx - Registern stehen irgendwelche Werte aber nicht 0x6d - 0x72. Und diese Werte schwanken auch nicht; also gehe ich davon aus, dass die Wandlung garnicht erst gestartet wurde. Ich werde es mit euren Ratschlägen weiter versuchen und sage euch bescheid, was daraus geworden ist. Wird allerdings noch ein paar Tage dauern...
Hallo, erst einmal ein frohes neues Jahr euch allen! Ich habe heute eure Vorschläge eingearbeitet, aber leider funktioniert die Wandlung noch immer nicht. Wie im Anhang zu sehen ist, habe ich ein paar zusätzliche Codezeilen eingefügt, da ich der Registeranzeige des Code Composers nicht ganz traue. Ich lasse mir nun den Inhalt der ADC12MEMx - Register auf den PC schicken. Aber leider kommt er garnicht erst soweit... Ich habe festgestellt, dass das Interruptflag des AD-Wandlers garnicht gesetzt wird, d.h. dass der µC garnicht erst wandelt. Dadurch bleibt das Programm an der Zeile
1 | while ((ADC12IFG & 0x0002)==0); |
hängen. Habe ich noch weitere Fehler in meinem Programm oder könnte es evtl. an der Hardware liegen (d.h. der µC selber)? Ich neige ja oft dazu, die Hardware in verdacht zu ziehen, aber meistens liegt es doch nicht an der Hardware... Jetzt seid ihr wieder gefragt... Herzliche Grüße Armin
Hallo, du setzt den IE des ADC12, dass er jeweils einen Interrupt nach Wandlung von Kanal 0 und Kanal 1 erzeugt: ADC12IE = 0x0003; Dann hast du aber keinen Interrupt-Handler. Also wird der Interrupt erzeugt, dein Prozessor schmiert ab, oder macht im besten Fall (je nach Compiler) nix außer das Interrupt-Flag löschen, weil ja evtl eine rudimentäre ISR automatisch vom Kompiler erzeugt wurde. Die Flags werden auch ohne die Bits im ADC12IE gesetzt. Und nimm mal das MSC Bit aus dem ADC12CTL0, das startet den Sequenzer immer wieder neu. Das willst du ja nicht, da du das SC Bit immer selber setzt.
Hallo, habe die Interrupt-Enable-Bits gesetzt, da er ständig bei der while-Schleife hängen blieb und ich dachte, es läge an den nicht gesetzten Bits. Habe nun die Zeile gelöscht. Das MSC - Bit habe ich nun auch rausgenommen. Leider bleibt das Programm immer noch bei der while - Schleife hängen. Ich frage mich, warum das Interrupt-Flag des AD-Wandlers nicht gesetzt wird...
Habs bei mir mal getestet. Das MSC Bit muss doch gesetzt sein und im ADC12CTL1 fehlt noch das SHP Bit. Hab ich vorhin übersehn. Dann klappts auch.
Vielen Dank! Mit deiner Hilfe habe ich es endlich hinbekommen... Im Anhang habe ich mal meinen Code beigefügt. Falls jemand von euch das gleiche Problem hat oder einfach nur den Code braucht. Die Clock-Einstellungen müsst ihr noch überprüfen und ggf. anpassen...
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.