www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UP in gleichen Abständen aufrufen


Autor: Marc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich programmiere noch nicht lange den MSP430 in C.

Nun will ich das Programmm PWM() in gleichen Abständen aufrufen.
Das Prog funktioniert nur hab ich es noch nicht geschafft dass es immer 
gleich kommt.

Ich hab folgendes "main" Prog:
 
void main (void)
  { 
    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
    Init_Clocking();
    SETWDT1S;
    Init_Address();
    Init_UART();
    Init_IO();
    Init_ADC();
    Init_Timer();
    Init_LEDS();
    //P6OUT |= 0x40;  
    DataInLow = 0x00;
    DataInHigh = 0x00;
    DataOut = 0x00;
//    Set_Fresh_Data ();
//    P3DIR |= 0x10;              // P3.4 output direction TXD
    _BIS_SR(GIE);         //normaler Betrieb ohne Stromsparmodus
//    P1DIR |= 0x01;              // Set P5.1 to output direction
    
    while (1)
    {
      CLRWDT;//
      SETGIE;
      STATUS_Byte();
//      P1OUT ^= 0x01;      //nicht initialisiert 600ms ein 600ms aus
        ShowAdress();
            
      UARTCmdHndlr();

    }
  }

Das Prog PWM() soll im while (1) teil immer in gleichen Abständen 
aufgerufen werden. Wie kann ich das machen. Das Problem ist, dass die 
anderen Programme unterschiedlich lange brauchen.

Marc

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer Interrupt verwenden, PWM in der Interrupt Routine abarbeiten.

Autor: der mechatroniker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollen die anderen Codeteile in der while(1) genau einmal pro Aufruf von 
PWM() aufgerufen werden (also in bestimmter Reihenfolge), oder so oft 
wie es der Controller in der Zwischenzeit schafft.

Im ersteren Fall: Im Timerinterrupt ein Flag setzen (global oder 
modulglobal ["static"] als volatile definiert!), in der Hauptschleife 
vor dem Aufruf ein
while (!bTimer)
    ;

Im letzteren Fall PWM() aus der Interruptroutine aufrufen. Ist nur 
sinnvoll möglich, wenn der Aufruf von PWM() nicht zu lange dauert.

Übrigens: PWM() ist kein "Prog", sondern eine "Funktion".

Autor: Marc Eggelhöfer (marc8)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habs schon versucht aus dem Interrupt heraus aufzurufen. allerdings 
kann ich im Interrupt nicht PWM(); schreben, sondern muss es einzeln 
dort reinschreiben. Dann ist es zu lang.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.