Ik heb hieronder een code geschreven voor software matige PWM. Het is de bedoeling dat er minstens 9 8-bits kanalen zijn, zodat je 3 rgb leds kunt aansturen en faden. De klokfrequentie is 8 MHz, met een 8-bits timer en een prescaler van 256 levert dit een frequentie van 122 Hz.
Klopt mijn aanpak op deze manier? Kunnen er dingen verbeterd worden? Ik wil graag met zo min mogelijk rekenkracht het maximale eruit halen.
Klopt mijn aanpak op deze manier? Kunnen er dingen verbeterd worden? Ik wil graag met zo min mogelijk rekenkracht het maximale eruit halen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| #define DDR_LED DDRA
#define PORT_LED PORTA
#define PIN_LED PINA
#define LED0 PA0
#define LED1 PA1
#define LED2 PA2
#define led0On() PORT_LED|=(1<<LED0)
#define led0Off() PORT_LED&=~(1<<LED0)
#define led1On() PORT_LED|=(1<<LED1)
#define led1Off() PORT_LED&=~(1<<LED1)
#define led2On() PORT_LED|=(1<<LED2)
#define led2Off() PORT_LED&=~(1<<LED2)
unsigned char pwmG, pwmB, pwmR=128; // 50% dutycycle
ISR (TIMER0_COMP_vect) { // compare match interrupt
led0Off();
}
ISR (TIMER0_OVF_vect) { // overflow interrupt
led0On();
}
int main() {
DDR_LED=(1<<LED0);
PORT_LED=(1<<LED0);
TCCR0|=(1<<CS02); // prescaling 256
TIMSK|=(1<<TOIE0) // enable overflow interrupt
|(1<<OCIE0); // enable compare match interrupt
OCR0=pwmR;
sei();
while(1) {
asm volatile("nop");
}
} |
[ Voor 3% gewijzigd door Verwijderd op 21-04-2009 22:20 ]