mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM und Interrupts


Autor: Simon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe etwas Probleme mit meinen Interrupts.
Und zwar möchte ich gerne mittels einer Interrupt-Routine  innerhalb 
einer Millisekunde zehn Sensorwerte erfassen und ihren Mittelwert 
bilden. Dann soll im Hauptprogramm eine Art Flag s´gesetzt werden zur 
Synchronisierung. Der das resultierende Ist-wert ist für einen Regler. 
Dieser soll wiederum eintausend Nal pro Sekunde berechnet werden. Dann 
errechnet ich dort den Stellwert, der wiederum die Pulsbreite des PWM 
Signals sein soll.

Meinen Istwert hole ich über einen internen 10-Bit ADC und auch den 
Regelalgorythmus (PID-Regler) habe ich.
Leider weiß ich aber nicht wie ich diese genauen Aufrufszeiten meiner 
Interrupt-Routinen realisieren soll und wie ich die Register setzen 
muss.

Außerdem wird ein ATmega 128 eingesetzt.
 
 sei();                 // Interrupts freigeben
                        // TIMER 1
 TIMSK= 0x94;          // Interrupt freischalten, warum 0x94???
 TCCR1B= 0x02;         // Timer läuft mit Prescaler 8

und

ISR (TIMER1_COMPARE)// Vector 12
{
 PORTA= aus;    // Heizung aus
}

ISR (TIMER1_OVERFLOW)// Vector 14
{
 e = temp - ist_temp;    // Aktuelle Regeldifferenz bestimmen
 esum = esum + e;       // Regeldifferenzen aufsummieren
 u = Kp*(e + (Ta/Tn)*esum + (Tv/Ta)*(e - ealt));  // PID Gleichung
 ealt = e;              // Regeldifferenz für nächste Abtastung speichern


 if (u < 1)
  u = 0;
 if (u > 1023)
        u = 0x;

 OCR1A = u ;    // setzt Vergleichsregister = Stellgröße
 PORTA= an;     // Heizung an
}


Vielleicht kann mir ja jemand bei der Realisierung dieser Zeiten helfen.

Vielen Dank und liebe Grüße,

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.