Gast
#2754288
Hallo Männer, ich bin mal wieder am verzweifeln und brauche mal wieder ernsthafte Hilfe Es geht um folgende Aufgabestellung. Ich möchte ein PWM Signal erzeugen ähnlich wie es im Modellbau gemacht wird. Die Gesamtperiode hat eine Länge von 9ms. Es gibt 4 variable Pulse, die zwischen 0,5ms und 1ms liegen können. Zwischen den Pulsen liegt eine Pause von 0,2ms und nach dem 4 Puls folgt eine Pause, so das insgesamt 9ms herauskommen. Danach geht es wieder von vorne los. Ich dachte, ich mache das ganze mit Fast PWM (Mode 14) mit einem Atmega88. Hier mein Beispiel-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 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
Ich gehe/ging davon aus, dass das Test-Programm 4 Pulse je 0,8ms liefert mit jeweils einer 0,2ms Pause und am Ende dann ca. 5,2ms low. Ich kann das so schlecht beschreiben :-( Was passiert ist, das die Pulse völlig unterschiedlich lang sind. Nehme ich in der ISR die if Abfrage raus, in der ICR1 einmal berechnet wird (ICR1 = per_len...) , ist das Gesamtsignal ok. In dem Moment, wo ich ICR1 einmal verändere, passt nichts. Alternativ kann ich auch ICR1 immer um syn_len größer als OCR1A lassen. Aber wenn in der while Schleife port[1] oder [2] geändert wird, bricht das Gesamtsignal wieder zusammen. Ist meine Vorgehensweise evtl grundsätzlich falsch, oder ...