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 :)
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.
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?
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?
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.
Ich will nur: An einem Poti drehen, um damit die Frequenz z.B. von ner blinkenden Led einzustellen.
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 ?
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.
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.
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?
muss auch den UserGuide bemühen, Antwort folgt... ev. noch interessanter Link für dich =) http://www.mikrocontroller.net/articles/MSP430
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.
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
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.