Hallo zusammen
Ich habe folgendes Codefragment:
1 | volatile unsigned char uiPWMCounter;
|
2 | unsigned char uiPWMRed;
|
3 | unsigned char uiPWMGreen;
|
4 | unsigned char uiPWMBlue;
|
5 |
|
6 | ISR(TIMER0_COMPA_vect)
|
7 | {
|
8 | uiPWMCounter++;
|
9 | if(uiPWMCounter == 250)
|
10 | {
|
11 | uiPWMCounter = 0;
|
12 | RGB_R_0; //LED's ausschalten
|
13 | RGB_G_0;
|
14 | RGB_B_0;
|
15 | }
|
16 |
|
17 | if(uiPWMCounter == uiPWMRed) RGB_R_1; //LED einschalten
|
18 | if(uiPWMCounter == uiPWMGreen) RGB_G_1;
|
19 | if(uiPWMCounter == uiPWMBlue) RGB_B_1;
|
20 | }
|
Damit erzeuge ich einen 3Phasen RGB PWM.
Den Timer habe ich wie folgt konfiguriert:
1 | void timer_init(void)
|
2 | {
|
3 |
|
4 | TCCR0A |= (1<<WGM01);
|
5 | TCCR0B |= (1<<CS01);
|
6 | OCR0A = 10;
|
7 | TIMSK0 |= (1<<OCIE0A); //iNTERRUPT BEIM erreichen des TOP wertes
|
8 | }
|
Controller: Atmega324PV mit 10MHz
Wenn ich nun als Counter ein Byte also ein Char verwende,
dann läuft mir der PWM mommentan mit einer Frequenz von knapp 500Hz
wenn ich jedoch den typ auf int ändere also:
1 | volatile unsigned int uiPWMCounter;
|
Dann erhalte ich zwar immer noch knapp 500Hz jedoch wird die Ausführung
des Restlichen Programmes massiv verzögert.
Etwa um den Faktor 50 mal langsamer.
Nun meine Vermutung:
Dauert das vergleichen eines Integers so viel länger als das eines
chars?
Hat jemand Empfehlungen, wie ich meinen Code auf speed optimieren
könnte?
Ich würde gerne mehr als nur 8bit PWM haben.
10bit und mehr wäre mein Ziel.
Danke schon mal.