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


von Florian L. (Firma: WZL) (florianlindner)


Angehängte Dateien:

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

von Florian L. (Firma: WZL) (florianlindner)


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

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.