Ich programmiere den MSP430 in C und versuche 50 Hz abzutasten. der ADC10 wird dazu von einem Timer angestossen, der ueber einen Quart laeuft. Wenn ich jetzt im ADC10 Interrupt den ADCwert in eine Variable speichere bekomme ich einen Jitter in die Messung. Ich vermute die Laufzeit des C-Befehls ist zu lang. Weiss jemand wieviele Takzyklen die C Befehle benoetigen oder wie ich den Takt fuer die Abarbeitung auch an 16 MhZ koppeln kann?
Du kannst den ADC von einem der Timer starten lassen. Dann hast du eine konstante Abtastung deines Signales.
Er wird von einem Timer gestartet! Allerdings ist die Laufzeit dez C Programms in der ISR wohl zu lange.
Elektro IN schrieb: > Er wird von einem Timer gestartet! Allerdings ist die Laufzeit dez C > Programms in der ISR wohl zu lange. Der ADC kann doch einen Interrupt auslösen. Da schreibst du die Werte in einen Buffer rein. Damit habe ich schon Signal mit 2000Hz eingelesen und verarbeitet.
Genau so mache ich das auch. hmm irgendwie will er aber nicht... in der ISR Routine ist noch eine IF Abfrage drin, da ich den aktuellen Abtastwert in einen Array schreibe, er wieder genullt werden muss. aber so lange kann das doch nicht dauern oder?
Elektro IN schrieb: > in der ISR Routine ist noch eine IF > Abfrage drin, da ich den aktuellen Abtastwert in einen Array schreibe, > er wieder genullt werden muss. aber so lange kann das doch nicht dauern > oder? Das ist gar nichts. Der MSP ist nicht gerade langsam. Du kannst am Anfang deiner Serviceroutine einen Pin setzen und schluss wieder auf 0 setzen. Damit kannst du mit dem Skope messen wie lang die dauert. Sonst alles richtig eingestellt? Watchdog,Taktgenerierung etc ..
Watchdog ist aus und der Timer bekommt den Takt vom 16 Mhz Quartz. Das mit dem Oszi werd ich mal probieren. Gitbs ein Register, in dem ich den Systemtakt auch an den Quartz koppeln kann. Bin im User Guide nicht ganz schlau geworden.
Elektro IN schrieb: > Gitbs ein Register, in dem ich > den Systemtakt auch an den Quartz koppeln kann. Bin im User Guide nicht > ganz schlau geworden. Also direkt ohne die FLL Schaltung? Kann man einstellen. Welchen MSP430 Type setzt du ein ? Beim MSP430F2418 stelle ich den so ein. /*********************************************************************** *** * * void ChangeSystemClock(void) * CPU Clock auf externe Clock am XIN Eingang umschalten (12 MHz) * ACLK = 12MHZ * MCLK = 12MHZ * ************************************************************************ *** void ChangeSystemClock(void) { uint n; _BIC_SR(OSCOFF); // Externer Oszillator einschalten b.z.w. freigeben BCSCTL1 = DIVA_0 | XTS | XT2OFF; // ACLK = /1 , XT2 = OFF , XTS = High Frequency Mode BCSCTL3 = XT2S_3 | LFXT1S_3 | XCAP_0; // XT2 = External Clock, XT = External Clock , No Capacitors IFG1 &= ~(OFIFG); // Oszillator Fault Interrupt Flag loeschen for(n=0;n < 0xff;n++); // Kurze Zeit warten // jetzt umschalten BCSCTL2 = SELM_3 | DIVM_0; // MCLK = LFXT1CLK , MCLK Divider = 1 IE1 |= OFIE; // Oszillator fault Interrupt freigeben }
Ich benutze die 21X2 Serie. Oh Danke. Das hilft mir wirklich sehr viel. Weisst du zufaellig auch, wo ich den Eingangwiderstand fuer den ADC10 finden kann?
Elektro IN schrieb: > Weisst du zufaellig auch, wo > ich den Eingangwiderstand fuer den ADC10 finden kann? Im Prinzip ist der sehr hochohmig da der mit geschalteten Kapazitäten arbeitet. Das heisst aber nicht das man den an eine hochohmige Schaltung hängen kann da sich der Sample & Hold Kondensator ja umladen muss. Mehr als rund 10Kohm Ausgangswiderstand der Treibenden Schaltung würde ich nicht empfehlen. TI gibt nur die Eingangskapazität von 27pF an.
Wenn ich nen Spannungsteiler von 1 Meg Ohm und 1 kOhm von dem ich an den ADC geh hab muesst das aber och passen, Wenn ich mich recht an die Schule erinner!?
WEnn ich den Cide benutze wie du ihn mir geschickt hast und dann in der While(1) schleife einen Port toggele dauert es länger als im default modus, obwohl MCLK jetzt an den 16 Mhz Quartz gekoppelt ist und die Laufzeit der C Befehle doch eigentlich kürzer sein müsste. Weiss jmd woran das liegen kann?
Ich habe jetzt nen 16 Mhz Quartz angelötet und wollte ihn mit folgendem Code auf ACLK und MCLK muxen BCSCTL1 = DIVA_0 | XTS | XT2OFF; BCSCTL3 = XT2S_2 | LFXT1S_2 | XCAP_0; BCSCTL2 = SELM_3 | DIVM_0 | SELS; Aber wenn ich zum test in der main einen Port toggele ist es langsamer als im default ohne Quartz
So bekommst du laut Code-Examples den HF XT zum Laufen:
1 | BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL |
2 | BCSCTL3 |= LFXT1S1; // 3 – 16MHz crystal or resonator |
3 | |
4 | do
|
5 | {
|
6 | IFG1 &= ~OFIFG; // Clear OSCFault flag |
7 | for (i = 0xFF; i > 0; i--); // Time for flag to set |
8 | }
|
9 | while (IFG1 & OFIFG); // OSCFault flag still set? |
10 | |
11 | BCSCTL2 |= SELM_3; // MCLK = LFXT1 (safe) |
Du musst immer erst schauen, ob der läuft. Sonst gibts den Fall-Back auf den DCO Clock. Hast du denn die beiden Kondensatoren mit angeschlossen?
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.