Hallo, ich bin gerade im GCC Tutorial über PWM gestolpert und fand das eine feine Idee um mal mit einem LED herum zu spielen. Mir fehlt nur die Idee wie ich das Signal einem PORT Pin in einer While übergebe. Also so das das LED hoch und runter fadet. bisher sieht es so aus:
1 | #include <avr/io.h> |
2 | |
3 | int main() |
4 | {
|
5 | // OC1A auf Ausgang
|
6 | DDRB = (1 << PB1 ); //ATMega8 |
7 | // DDRD = (1 << PD5 ); //ATMega16
|
8 | //
|
9 | // Timer 1 einstellen
|
10 | //
|
11 | // Modus 14:
|
12 | // Fast PWM, Top von ICR1
|
13 | //
|
14 | // WGM13 WGM12 WGM11 WGM10
|
15 | // 1 1 1 0
|
16 | //
|
17 | // Timer Vorteiler: 1
|
18 | // CS12 CS11 CS10
|
19 | // 0 0 1
|
20 | //
|
21 | // Steuerung des Ausgangsport: Set at BOTTOM, Clear at match
|
22 | // COM1A1 COM1A0
|
23 | // 1 0
|
24 | |
25 | TCCR1A = (1<<COM1A1) | (1<<WGM11); |
26 | //TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);
|
27 | TCCR1B = (1<<CS10); |
28 | |
29 | // den Endwert (TOP) für den Zähler setzen
|
30 | // der Zähler zählt bis zu diesem Wert
|
31 | |
32 | ICR1 = 0x6FFF; |
33 | |
34 | // der Compare Wert
|
35 | // Wenn der Zähler diesen Wert erreicht, wird mit
|
36 | // obiger Konfiguration der OC1A Ausgang abgeschaltet
|
37 | // Sobald der Zähler wieder bei 0 startet, wird der
|
38 | // Ausgang wieder auf 1 gesetzt
|
39 | //
|
40 | // Durch Verändern dieses Wertes, werden die unterschiedlichen
|
41 | // PWM Werte eingestellt.
|
42 | |
43 | OCR1A = 0x3FFF; |
44 | |
45 | while (1) { |
46 | |
47 | }
|
48 | }
|