MSP 430 Abtastrate

Gast #2202577
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?
Gast #2202620
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?
#2202631
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 ..
Gast #2202635
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.
#2202647
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

}
#2202669
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.
Gast #2213773
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?
Gast #2215054
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
#2215133
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?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.