Forum: Mikrocontroller und Digitale Elektronik MSP 430 Abtastrate


von Elektro IN (Gast)


Lesenswert?

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?

von Helmut L. (helmi1)


Lesenswert?

Du kannst den ADC von einem der Timer starten lassen. Dann hast du eine 
konstante Abtastung deines Signales.

von Elektro IN (Gast)


Lesenswert?

Er wird von einem Timer gestartet! Allerdings ist die Laufzeit dez C 
Programms in der ISR wohl zu lange.

von Helmut L. (helmi1)


Lesenswert?

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.

von Elektro IN (Gast)


Lesenswert?

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?

von Helmut L. (helmi1)


Lesenswert?

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 ..

von Elektro IN (Gast)


Lesenswert?

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.

von Helmut L. (helmi1)


Lesenswert?

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

}

von Elektro IN (Gast)


Lesenswert?

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?

von Helmut L. (helmi1)


Lesenswert?

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.

von Elektro IN (Gast)


Lesenswert?

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!?

von Helmut L. (helmi1)


Lesenswert?

Die Ausgangsimpedanz des Teilers ist dann rund 1Kohm. Sollte also 
passen.

von Elektro IN (Gast)


Lesenswert?

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?

von expert (Gast)


Lesenswert?

hmm bist du sicher, dass du die register richtig gesetzt hast?

von Elektro IN (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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