Ich habe folgenden Code gebastelt (für ATTiny 45):
1 | /****************************/
|
2 | /*** PWM Funktion ***/
|
3 | /****************************/
|
4 |
|
5 | void PWM(uint8_t PWM_rate)
|
6 | {
|
7 | if (PWM_rate == 0)
|
8 | {
|
9 | TCCR1 = 0x0f; // PWM-Timer1 anhalten
|
10 | Last = aus; // Last ausschalten
|
11 | }
|
12 | else
|
13 | {
|
14 | TCCR1 = (1<<PWM1A) | (1<<COM1A1) | (1<<COM1A0) | (1<<CS12);
|
15 | OCR1C = 199; // ==> PWM Frequenz = 40 kHz
|
16 | OCR1A = PWM_rate;
|
17 | }
|
18 | }
|
19 |
|
20 | /****************************/
|
21 | /*** Main ***/
|
22 | /****************************/
|
23 | void main(void)
|
24 | {
|
25 | [...]
|
26 | if (Schalterlaubnis)
|
27 | {
|
28 | // Last einschalten
|
29 | PWM(168);
|
30 | }
|
31 | else
|
32 | {
|
33 | // Last ausschalten
|
34 | PWM(0); // PWM ausschalten
|
35 | }
|
36 | [...]
|
37 | }
|
Wenn ich im Hauptprogramm die Funktion PWM aufrufe und den Timer starte
sollte die PWM am Ausgang OC1A loslegen und solange aktiv bleiben bis
ich sage Timer1 stopp (PWM(0))!
Ich stell mir das so vor: Ich springe in die Funktion PWM mit einem Wert
und starte den Timer. Solange ich jetzt im Hauptprogramm bin, läuft die
PWM am Ausgang bis ich die Funktion nochmal aufrufe und den Timer
stoppe?