mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 F1611 - Probleme bei AD-Wandlung


Autor: Florian Lindner (Firma: WZL) (florianlindner)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an Alle!

Bin noch relativ neu beim Programmieren von Mikrocontrollern und vor 
allem fachfremd (--> Maschinenbau). Momentan komme ich bei meinen 
Versuchen die AD-Wandlung ans Laufen zu bringen einfach nicht weiter. 
Vielleicht hat hier jemand einen Rat.

Kurz zum Programmablauf (siehe Anhang)

Das Programm initialisiert den DCO und die einzelnen CLKs und lässt eine 
LED blinken. Bei Schaltung von P2.1 wird ein Interrupt ausgelöst und der 
ADC12 initialisiert. Im Repeat-single-channel mode werden dann 
einhundert Werte gelesen und im RAM zwischengespeichert 
(interrupt-gesteuert). Am Ende werden die Werte in den Flash geladen.

Die einzelnen Programmteile (Hauptprogramm, Subroutinen, Flash 
beschreiben, ...) funktionieren alle soweit. Allerdings bleibt das 
Programm bei Auslösung des Interrupts über P2.1 in der Subroutine 
hängen. Ich vermute, dass keine Konvertierung beginnt oder abgeschlossen 
wird, denn wenn ich die AD-Wandlung ausklammere und feste Werte auf den 
Flash schreiben lasse geht alles wunderbar. Auch wenn ich im Debugger 
manuell einen Interrupt auslöse wird alles so abgearbeitet wie 
vorgesehen. Ich habe auch versucht, das Bit im Interrupt Flag Register 
zu testen und darüber das Schreiben in den RAM zu steuern, anstatt einen 
neuen Interrupt auszulösen, aber der gleiche Effekt. Außerdem hat ja der 
ADC12 eine höhere Priorität, oder?

Hoffe jemand hier hat mehr Durchblick als ich.

Viele Grüße

Autor: Florian Lindner (Firma: WZL) (florianlindner)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das Programm versuchsweise ein wenig umgeschrieben. SAMPCON wird 
jetzt direkt durch das Sampling Signal gesteuert (Extended Mode) - 64 
MCLK fürs Sampling und 100 MCLK für die Umwandlung. Als Taktquelle dient 
der Output1 des Timer_A. Außerdem habe ich mit einem Oszi die Frequenzen 
und den Timerverlauf überprüft. Läuft alles so wie es soll. Der 
Initialisierungsteil scheint also zu gehen.

Überbrücke ich den AD-Teil und lasse feste Werte in den Flash schreiben, 
dann kommen diese auch korrekt an. Mit dem Oszi kann ich auch sehen, 
dass die Routine mehrfach durchlaufen wird (bis und bic innerhalb der 
Routine) und er dann korrekt wieder in die Hauptschleife springt.

Überbrücke ich den AD-Teil nicht, dann wird zwar die ADC12_ISR zum 
Kopieren der Werte aus dem Register korrekt angesprungen (zumindest 
zeigt das Oszi es so an -> bis und bic innerhalb der Routine), aber es 
wird nichts in den Flash geschrieben. Hier zeigt das Oszi keine 
Veränderung. Allerdings springt die Routine trotzdem wieder in die 
Hauptschleife, die P2_ISR wird also bis zum Ende durchlaufen.

Viele Grüße,
Florian

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.