Hi, ich hab gerade nen Verstaendnisproblem mit dem Soft-Pwm hier aus dem
Forum:
ich hab vorher meinen Soft-PWM so laufen lassen:
1 | ISR(TIMER1_COMPA_vect)
|
2 | {
|
3 | static uint8_t in_pwm = 0;
|
4 | uint8_t temp = 0;
|
5 | OCR1A += (uint16_t) T_PWM;
|
6 |
|
7 | if(pwm_aktiv == 1)
|
8 | {
|
9 | if(in_pwm < Red ) temp |= 0x12;
|
10 | if(in_pwm < Green ) temp |= 0x24;
|
11 | if(in_pwm < Blue ) temp |= 0x9;
|
12 | PORTA = temp;
|
13 | }
|
14 |
|
15 | if(in_pwm == (uint8_t) (PWM_Steps-1))
|
16 | {
|
17 | in_pwm = 0;
|
18 | }else
|
19 | {
|
20 | in_pwm++;
|
21 | }
|
22 | }
|
jetzt hab ich mir mal den den Code hier aus dem Forum genommen:
http://www.mikrocontroller.net/articles/Soft-PWM#Intelligenter_L.C3.B6sungsansatz
nun hab ich das Problem, das ich nicht verstehe wie ich meinen vorhanden
code da jetzt reinportiere, läuft das dann wieder so:
1 | ISR(TIMER1_COMPA_vect) {
|
2 | static uint8_t pwm_cnt;
|
3 | uint8_t tmp;
|
4 |
|
5 | OCR1A += isr_ptr_time[pwm_cnt];
|
6 | tmp = isr_ptr_mask[pwm_cnt];
|
7 |
|
8 | if (pwm_cnt < Red) {
|
9 | PWM_PORT = tmp; // Ports setzen zu Begin der PWM
|
10 | pwm_cnt++;
|
11 | }
|
12 | else {
|
13 | PWM_PORT &= tmp; // Ports löschen
|
14 | if (pwm_cnt == pwm_cnt_max) {
|
15 | pwm_sync = 1; // Update jetzt möglich
|
16 | pwm_cnt = 0;
|
17 | }
|
18 | else pwm_cnt++;
|
19 | }
|
20 | }
|
aber wo muessen dann die PORTA-Werte fuer die jeweilige Farbe
(Red=0x12;Green=0x24,Blue=0x9) hin?
Danke schon mal
Peter