Forum: Mikrocontroller und Digitale Elektronik MSP430 Variablen via Poti stellen


von johnny (Gast)


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 :)

von Rufus Τ. F. (rufus) Benutzerseite


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.

von johnny (Gast)


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?

von johnny (Gast)


Lesenswert?

So wie ich da Sache sehe:

Es ist günstig die interne 2,5V Referenzspannung als V_R+ zu wählen und 
die internen AV_SS (ich denke dass soll GND sein) als V_R-

richtig?

von Rufus Τ. F. (rufus) Benutzerseite


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.

von johnny (Gast)


Lesenswert?

Ich will nur:

An einem Poti drehen, um damit die Frequenz z.B. von ner blinkenden Led 
einzustellen.

von Bernd N (Gast)


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 ?

von johnny (Gast)


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.

von Bernd N (Gast)


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.

von johnny (Gast)


Lesenswert?

Ich probiere es mal aus, das wird schon irgendwie klappen :)

von johnny (Gast)


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?

von johnny (Gast)


Lesenswert?

müssten 16 Zyklen sein, nach der genannten Zählweise

von codehamster (Gast)


Lesenswert?

muss auch den UserGuide bemühen, Antwort folgt...

ev. noch interessanter Link für dich =)

http://www.mikrocontroller.net/articles/MSP430

von codehamster (Gast)


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.

von codehamster (Gast)


Lesenswert?

ich bins nochmal.

ich empfehle dir zum Einstig noch ne einfachere Variante:

http://www.mathar.com/msp_ad1.html und
http://www.mathar.com/msp_ad2.html

ev. die vorhergehenden Kapitel auch durcharbeiten.

hier wird dir hoffentlich ein Licht auf gehen und bald deine LED's 
anhand eines Potis unterschiedlich schnell blinken :D

von johnny (Gast)


Lesenswert?

Ja, da komme ich wohl nicht drum rum, aber auf den ersten Blick ist man 
ja total erschlagen von den ganzen Abkürzungen, Bedeutungen und so :)

Gute Nacht!

von codehamster (Gast)


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

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
Noch kein Account? Hier anmelden.