www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software PWM Fehler?


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab einen alten Quellcode von mir ausgegraben für ein 8 Kanal
Software PWM. Ich wollte den Code auf ein FPGA / CPLD portieren. Bei
der Simulation ist mir ein vermeidlicher Fehler aufgefallen.

Falls der Zaehler für den Kanal == PWM_Reg. ist, dann wird der Port
eingeschaltet , somit ist der Verbraucher auch kurz eingeschaltet,
obwohl PWM_Reg = 0 ist.


// Code reduziert auf 2 Kanäle)
// ISR Int @39µs (256*39µs = 9,98ms = 100Hz PWM Freq.)
ISR(TIME0_OVF)
{
 if (pwm_help[0] == 0){ PORTx = (1<<0);}
 if (pwm_help[1] == 0){ PORTx = (1<<1);}

 if (pwm_help[0] == [pwm_reg[0]){ PORTx = (1<<0); } 
 if (pwm_help[1] == [pwm_reg[1]){ PORTx = (1<<1); }
}

Muesste normal nicht die Anweisungen so aussehen?

ISR(TIME0_OVF)
{
 if (pwm_help[0] == 0){ PORTx = (1<<0);}
 if (pwm_help[1] == 0){ PORTx = (1<<1);}

 if (pwm_help[0] == [pwm_reg[0]) & ([pwm_reg[0] > 0)
 { PORTx = (1<<0); }
 if (pwm_help[1] == [pwm_reg[1]) & ([pwm_reg[1] > 0)
 { PORTx = (1<<1); }


}
[/c]

Ich hoffe mir kann jemand kurz auf die Sprünge helfen.

Danke und Gruß,
Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab einen alten Quellcode von mir ausgegraben für ein 8 Kanal
Software PWM. Ich wollte den Code auf ein FPGA / CPLD portieren. Bei
der Simulation ist mir ein vermeidlicher Fehler aufgefallen.

Falls der Zaehler für den Kanal == PWM_Reg. ist, dann wird der Port
eingeschaltet , somit ist der Verbraucher auch kurz eingeschaltet,
obwohl PWM_Reg = 0 ist.
// Code reduziert auf 2 Kanäle)
// ISR Int @39µs (256*39µs = 9,98ms = 100Hz 
ISR(TIME0_OVF){ 
if (pwm_help[0] == 0){ PORTx &= ~(1<<0);} 
if (pwm_help[1] == 0){ PORTx &= ~(1<<1);}  

if (pwm_help[0] == [pwm_reg[0]){ PORTx |= (1<<0); }  
if (pwm_help[1] == [pwm_reg[1]){ PORTx |= (1<<1); }
} 

Muesste normal nicht die Anweisungen so aussehen?
ISR(TIME0_OVF)
{
 if (pwm_help[0] == 0){ PORTx &= ~(1<<0);}
 if (pwm_help[1] == 0){ PORTx &= ~(1<<1);}

 if (pwm_help[0] == [pwm_reg[0]) & ([pwm_reg[0] > 0) 
 { PORTx |= (1<<0); } 
 if (pwm_help[1] == [pwm_reg[1]) & ([pwm_reg[1] > 0) 
 { PORTx |= (1<<1); } 
}

Ich hoffe mir kann jemand kurz auf die Sprünge helfen.

Danke und Gruß,
Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder die ISR muesste ein bischen umgestellt werden?
ISR(TIME0_OVF)
{

 if (pwm_help[0] == [pwm_reg[0]) { PORTx |= (1<<0); } 
 if (pwm_help[1] == [pwm_reg[1]) { PORTx |= (1<<1); } 

 if (pwm_help[0] == 0){ PORTx &= ~(1<<0);}
 if (pwm_help[1] == 0){ PORTx &= ~(1<<1);}


}

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, entschuldigung es fehlt im Code das inkrementieren der zaehler
ISR(TIME0_OVF){
 if (pwm_help[0]++ == 0){ PORTx &= ~(1<<0);} 
 if (pwm_help[1]++ == 0){ PORTx &= ~(1<<1);}

 if (pwm_help[0] == [pwm_reg[0]){ PORTx |= (1<<0); }
 if (pwm_help[1] == [pwm_reg[1]){ PORTx |= (1<<1); }
} 

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.