MSP430 Variablen via Poti stellen

Gast #1968455
Lesenswert?

Hi!

kurze Verständnisfrage bezüglich eines MSP430x44x.

Ich möchte ein C programm schreiben, wo es 2 variable Parameter gibt.
Sagen wir mal 2 Gleitkommazahlen. Wenn ich an die A0 und A1 Pins mit 
Potis gehe, wandelt der die Spannungen denn in eine Zahl um? Kann man da 
irgendwie nen Bereich einstellen, sprich 3.3V sind variable=1000.0 
(dezimal) und 0 Volt sind 0.0 (dezimal) ? Diese anliegenden Werte sollen 
denn einer Funktion übergeben werden. So wie ich die Sache verstehe, hat 
eine Änderung des Pegels dann einen Interrupt zur Folge, der die 
aktuellen Parameter denn wieder der Funktion zuspielt. Sehe ich das 
richtig? Muss noch etwas beachtet werden?


Bin recht neu auf dem Gebiet :)
Persönliche Seite #1968468
Lesenswert?

johnny schrieb:
> Wenn ich an die A0 und A1 Pins mit
> Potis gehe, wandelt der die Spannungen denn in eine Zahl um?

Wenn Du diese Pins als ADC-Eingänge konfigurierst und den ADC 
entsprechend ansteuerst, ja.

Diese Zahl hat einen durch die Wandlerauflösung bestimmten Wertebereich, 
wenn der ADC beispielsweise der ADC_10 mit 10 Bit Auflösung ist, dann 
liegt die Zahl zwischen 0 und 1023. Beim ADC_12 sind es entsprechend 0 - 
4095.

Die Anpassung dieser Werte auf die von Dir gewünschten Wertebereiche 
musst Du dann rechnerisch selber vornehmen.

> So wie ich die Sache verstehe, hat
> eine Änderung des Pegels dann einen Interrupt zur Folge,

Nein. Der ADC kann einen Interrupt auslösen, wenn der Wandlungsvorgang 
beendet ist (der braucht nämlich ein bisschen Zeit), aber nicht in 
Abhängigkeit des Spannungspegels.

> der die aktuellen Parameter denn wieder der Funktion zuspielt.

So funktioniert eine Interruptroutine nun auch wieder nicht.

Das macht aber nichts, Du musst für Deine ersten Schritte auch gar 
keinen Interrupt verwenden, Du kannst den ADC auch pollen. Dabei gehst 
Du folgendermaßen vor:

- ADC initialisieren

- Wandlung anstoßen

- zyklisch das Bit im ADC-Statusregister abfragen, ob die Wandlung 
beendet ist

- Wandlungsergebnis auslesen

Näheres findest Du in einem MSP430-Tutorial, den von TI veröffentlichten 
Codebeispielen für Deine MSP430-Familie und natürlich im Family User's 
Guide, aber der enthält keine Codebeispiele.
Gast #1968478
Lesenswert?

danke für die ausführliche Antwort :)
Aber eine Frage hab ich dann doch noch!
Wie kann man 2 Parameter von außen verstellen, sodass der MSP sofort 
darauf reagiert und es in seine Berechnungen mit aufnimmt?
Muss man denn ständig den ADC-Eingang abfragen z.B. mit dem Timer und 
wenn er eine Veränderung feststellt, dass die neuen Parameter übergeben 
werden? kann man die Sache so lösen?
Persönliche Seite #1968587
Lesenswert?

johnny schrieb:
> Muss man denn ständig den ADC-Eingang abfragen z.B. mit dem Timer

Ja.

> wenn er eine Veränderung feststellt, dass die neuen Parameter übergeben
> werden?

Was auch immer Du damit meinen magst. Der ADC übergibt keine Parameter.


Möglicherweise lässt sich auch der DMA-Controller so programmieren, daß 
die Wandlerresultate gleich an eine bestimmte Speicheradresse 
geschrieben werden, aber ob das nötig ist, hängt von Deiner Anwendung 
ab.
Gast #1968603
Lesenswert?

Das sollte kein größeres Problem sein. Wie bereits beschrieben liefert 
dir der Wandler ein Ergebnis von z.B. 0-1023 zurück und daraus kannst du 
ja dann unterschiedliche Delayzeiten ableiten.

Vielleicht ist dir als Anfänger nicht klar das du einfach alles in eine 
Endlosschleife packst.

ADC Kanal lesen, delay ableiten, Led schalten, ADC lesen usw. Hast du 
bereits ein Programgerüst ?
Gast #1968610
Lesenswert?

nein habe ich noch nicht :) Ich hab den Userguide und ein paar 
Codebeispiele, aber so richtig schlau werd ich aus den Beispielen nicht. 
Die Ports setzen ist ja alles kein Problem, aber wie das nun mit der 
Abfrage funktioniert und wie ich den im Speicher befindlichen Wert einer 
anderen Funktion übergebe ist mir noch klar. Die Endlosschleife ist ok, 
darin sind aber Funktionen und die ADC gewandelten Werte sind die 
Variabelen der Funktion. So soll es mal sein.
Gast #1968618
Lesenswert?

OK, aber du kannst eine LED zum blinken bringen ? wenn ja dann 
verwendest du ja bereits ein Delay (in Software ?) welches den Blinktakt 
vorgibt. Nun verwendest du den ADC und mittels des ADC Ergebnis 
beeinflußt du das Delay. Vielmehr ist es eigentlich nicht.
Gast #1968627
Lesenswert?

Ist bestimmt ne dumme Frage:

ADC12CTL0 = SHT0_2 + ADC12ON;             // Set sampling time, turn on

welche Zeit ist denn nun angestellt.
Ich weiß nicht genau. SHT0_x steht immer in den Block-Diagrammen.

Ist SHT0_0 nun das kleinste Bit und SHT0_3 das größte von dem Register?
Gast #1968650
Lesenswert?

johnny

SHT0 steht für die Sample and Hold Zeit. Mit diesen Registerwerten 
definierst du wie lange die Sample and Hold Zeit für die ADC-Kanäle 0 
bis 7 sind.

Ich kann dich verstehen dass du so schnell wie möglich was zum laufen 
bringen willst, jedoch gehört das Wälzen des UserGuides leider immer 
dazu. Ich empfehle dir das ganze Kapitel ADC durchzulesen. Sind nur ein 
paar Seiten! Und dann schau mal anhand eines Beispielprogrammes von TI 
was da welches Register bedeutet. So kappier ich das meistens am 
schnellsten.

wünsche noch viel Erfolg und eine gute Nacht.
Gast #1968655
Lesenswert?

jep, lass den Kopf nicht hängen!

--> mathar beispiel durcharbeiten! Ist wohl der aller aller schnellste 
weg, und schön beschrieben für was welches Register steht. inkl. 
Abkürzungen :D

gute Nacht

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren