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