www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 Variablen via Poti stellen


Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will nur:

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

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd N (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich probiere es mal aus, das wird schon irgendwie klappen :)

Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
müssten 16 Zyklen sein, nach der genannten Zählweise

Autor: codehamster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
muss auch den UserGuide bemühen, Antwort folgt...

ev. noch interessanter Link für dich =)

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

Autor: codehamster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: codehamster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: codehamster (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.