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.
1 | // Code reduziert auf 2 Kanäle)
|
2 | // ISR Int @39µs (256*39µs = 9,98ms = 100Hz
|
3 | ISR(TIME0_OVF){
|
4 | if (pwm_help[0] == 0){ PORTx &= ~(1<<0);}
|
5 | if (pwm_help[1] == 0){ PORTx &= ~(1<<1);}
|
6 |
|
7 | if (pwm_help[0] == [pwm_reg[0]){ PORTx |= (1<<0); }
|
8 | if (pwm_help[1] == [pwm_reg[1]){ PORTx |= (1<<1); }
|
9 | }
|
Muesste normal nicht die Anweisungen so aussehen?
1 | ISR(TIME0_OVF)
|
2 | {
|
3 | if (pwm_help[0] == 0){ PORTx &= ~(1<<0);}
|
4 | if (pwm_help[1] == 0){ PORTx &= ~(1<<1);}
|
5 |
|
6 | if (pwm_help[0] == [pwm_reg[0]) & ([pwm_reg[0] > 0)
|
7 | { PORTx |= (1<<0); }
|
8 | if (pwm_help[1] == [pwm_reg[1]) & ([pwm_reg[1] > 0)
|
9 | { PORTx |= (1<<1); }
|
10 | }
|
Ich hoffe mir kann jemand kurz auf die Sprünge helfen.
Danke und Gruß,
Dirk