Hi, ich versuche gerade mit dem FET und einem MSP430F449 mich in die Materie einzuarbeiten. Zur Sache: Der SMLCK läuft auf 8MHz (externer Quarz) Mit folgendem Code versuche ich den TimerA zu konfigurieren und einen Interrupt durch Compare zu erzeugen. Der Interrupt löst zwar aus, aber unabhängig vom Wert im Register CCR0. Der Interrupt löst ca. alle 150ms aus, egal was drinsteht. #include <msp430x44x.h> void main(void) { int i; P5DIR |= 0x03; // Set P5.1 to output direction P1DIR |= 0x10; // P1.4 (SCLK) output P1SEL |= 0x10; WDTCTL = WDTPW + WDTHOLD; // Watchdog disable FLL_CTL1 &= ~XT2OFF; // XT2 enable do { FLL_CTL0 &= ~XT2OF; // clear XT2 osc fault flag for (i = 0; i < 1000; i++); // wait } while(FLL_CTL0 & XT2OF); FLL_CTL1 |= SELM1; // MCLK = XT2 FLL_CTL1 &= ~SMCLKOFF; // Turn SMCLK on FLL_CTL1 |= SELS; // SMCLK = XT2 CCTL0 = CCIE; // CCR0 interrupt enabled CCR0 = 10000; TACTL = TASSEL_2 + MC_1; // SMCLK, upmode _BIS_SR(GIE); // Global interrupts enable while(1) { } } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { P5OUT ^= 0x02; // Toggle P5.1 }
Hallo, der Programmcode ist korrekt. Ihrgendwas scheint mit dem FET nicht zu stimmen. Brenne ich den Code mit dem FET und starte den Emulator, so wird der Interrupt nur alle 150ms ausgelöst. Stoppe ich den Emulator und lasse den Proz mit externer Stromversorgung laufen so wird der Interrupt alle 1.25ms aufgeführt (was auch richtig ist). Kann mit vielleicht jemand sagen was da falsch läuft ?
Irgendwie gefällt mir dein Clock-Code nicht. Den Bezeichner FLL_CTL1 kenne ich nicht. Welche IDE benutzt du? Versuch mal bitte den Code, den ich auf www.mathar.com in meinen Tutorials benutze (der Code zur Initialisierung des 8MHz-Quartzes ist immer derselbe). Der klappt 100%ig. Ich denke, dass bei dir irgendwas mit dem Oszillator schief läuft und der weiter beim DCO bleibt.
Hallo Sebastian, der Code entspricht dem Header für den F449. Ich führe SMCLK auf einen Pin heraus und habe dort auch 8Mhz wie es sein soll. Das Problem scheint mit dem Emulator zutun zu haben. Da der Timer richtig läuft sobald ich das Kabel abziehe und wiederaufstecke.
Ich benutze IAR 3.0 Ich flashe mit dem Interface Board MSP-FETP430IF 1.3 von TI. Mir ist aufgefallen, dass es mit dem Interrupt zu tun haben muss. Sobald ich nur mit einem Compare toggle ohne ISR ist alles ok. By the way: Ist es möglich Compare0 und Compare2 von TimerA invertiert togglen zu lassen. Soll heißen beide auf Modus 4 und beide Ausgänge erzeugen ein invertiertes Signal zueinander. Compare1 kann ich nicht verwenden, da ich ihn brauche um den ADC zu einer bestimmten Zeit auszulösen. Ich dachte ich könnte beim Togglen einen Startwert angeben, also 0 oder 1.
OK, das FET kenne ich nicht, weil ich das von Olimex benutze. Die sollten aber eigentlich pinkompatibel sein. Im IAR hast du auch alles korrekt auf "Emulation" und nicht "Simulation" eingestellt? Ich habe es noch nie erlebt, dass eine ISR was mit dem FET-Stecker zu tun hat. Ich benutze bei meiner Nulldurchgangserkennung auch Interrupts, die 50 mal pro Sekunde aufgerufen werden. Das stört den MSP430 nicht im geringsten, egal ob mit oder ohne Kabel. Sicher, dass dein Kabel nicht kaputt ist (Kabelbruch bei VCC oder dem Reset-Pin oder so)?
Hallo Sebastian! Du beschreibst ja mittlerweile auf denier Homepage sogar, wie man mit einem Timer eine PWM realisiert. Ich versuche mittlerweile einen Drehzahlmesser und einen IR-Empfänger zu realisieren. Beides scheitert mehr oder weniger daran, daß der Timer nicht exakt genug auslöst. Ich brauche einen Takt von 1,75ms für den IR-Empfänger und einen von 50 ms für den Drehzahlmesser. Leider schwankt aber die Zeit so stark, daß ich das mit dem IR-Empfänger mittels nop()s lösen musste. Die während den 50ms brauche ich aber REchenleistung vom Prozessor, so daß diese Möglichkeit ins Wasser fällt - oder besser gesagt in den Codehimmel aufsteigt. Wie auch immer: Zur Zeit zähle ich einen 50ms-Counter hoch beim auslösen des Interrupt. Den werte ich dann im Programm aus. Wie gesagt schwankt dann aber die Zeit so stark, daß ich eine Schwankung von 400 1/min bei 1800 1/min habe. Unakzeptabel. Hast du da noch eien Idee? Benni
Hallo, ich habe mal wo gelesen (glaube in diesem Forum), dass es zu Problemen mit dem Timer A und/oder B kommen kann, wenn FET und externe Power gleichzeitig angeschlossen sind. Kannst Du ja mal checken. Gruss Matthias
check doch selber :-P (bitte freundlich mit "bitte" formulieren!!!!!) ganz einfach! sorg einfach beim layout deiner platine dafür, das nur eine spannungsquelle zum speisen kommt! ich habe es so gelöst, das ich spannung vom usb abzweige, diesen auf 3,3v runterregel und damit den msp betreibe. den spannungspin vom fet(bzw den von olimex(habe/benutze beide)) habe ich einfach nicht mit dem msp verbunden sondern offen gelassen. das habe ich gemacht, weil ich nicht wusste, wie sich der fet verhällt, wenn die spannungsquellen zusammengeführt werten und ob diese durch z.b. durch eine diode gegen rückfluss gesperrt sind.
Naja, mittlerweile kann ich auch bestätigen, dass das FET irgendetwas verändern kann. Ich bin mir nicht mehr ganz sicher, wo bei mir das Problem lag, aber bei mir war es mal so, dass der USART0 mit FET-Stecker dran nicht funktionierte, ohne aber einwandfrei. Und zwar reproduzierbar ... Da ich so ein komisches Verhalten jetzt einmal erlebt habe, würde es mich auch nicht wundern, wenn es Probleme mit dem Timer gibt, wenn FET und externe 3,3V gleichzeitig anliegen. :-(
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.