mikrocontroller.net

Forum: Compiler & IDEs PWM erhöhen funktioniert nicht


Autor: Poco (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte eine PWM erzeugen und zwar möchte ich bei der berechnung der 
Leistung vergleichen ob die neue Leistung höher ist als die alte und 
Falls ja sollte die PWM um 1 schritt erhöht werden. Nun wird aber die 
PWM um 3 schritte erhöht und dann um 3 reduziert.Und das ständig wegen 
der While schleife. Ich nehme an da die PWM funktioniert, dass es an dem 
PWM code liegt. Ich komme aber nicht auf die Lösung. Ich wäre dankbar 
für eure Hilfe.

Autor: Poco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void Init_Timer_0(void)
{


TCCR0  = (1 << WGM00)|(1 << WGM01)|(1 << CS00)|(1 << COM01); //Fast 
PWM-Modus, Teiler auf 1, //Toggel des Pins B3
OCR0   = 0;
}


int main(void)
{

  Init_Timer_0();


      while(1)
        {


          P_zelle = U_zelle*I_bat; // Die P_zeller wird anhand anderer 
anhänge aufgerufen, die restliche programm teile habe ich nicht mit 
eingeführt da es ein bisschen zu komplex wäre

          if(P_zelle > P_zelle_alt)
            {

              OCR0++;
            }
          else if (P_zelle < P_zelle_alt)
            {
                 OCR0--;
            }


        P_zelle_alt = P_zelle;



}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poco schrieb:

> Leistung vergleichen ob die neue Leistung höher ist als die alte und
> Falls ja sollte die PWM um 1 schritt erhöht werden. Nun wird aber die
> PWM um 3 schritte erhöht und dann um 3 reduziert.Und das ständig wegen
> der While schleife. Ich nehme an da die PWM funktioniert, dass es an dem
> PWM code liegt. Ich komme aber nicht auf die Lösung.

Dein Timer muss von 0 bis 255 zählen, bis er einen PWM Zyklus durch hat. 
Dafür braucht er Zeit. Wenn dein Code in der Hauptschleife in dieser 
Zeit 3 Messungen macht und daher zum Schluss kommt, dass OCR jeweils um 
1 zu erhöhen ist, dann startet der nächste PWM Zyklus (an dem sich die 
Veränderung am PWM Pin das erste mal extern bemerkbar macht) mit einem 
um 3 erhöhten Wert.

Du misst einfach zu schnell. Die PWM kann nicht so schnell reagieren wie 
du misst und als Folge der Messung den PWM Wert jedesmal erhöhst.

Autor: Gas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also müsste ich die frequenz des Zählers ändern oder die frequenz der 
durchlaufs der schleife?

Autor: *kopfkratz* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal ein Flussdiagramm dafür gezeichnet?
Dann wird Dir klar was mein Vorredner meinte.

BR

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.