Gast
#1392901
Hallo, ich bin noch ziemlicher anfänger in der c- und mikrocontroller -programmierung und versuche zur Zeit, eine Servosteuerung mittels pwm-signal zu realisieren. Dabei soll Timer2 die pwm-signale erzeugen, was auch gut funktioniert. Allerdings möchte ich dem Servo mittels timer1 (16-bit-timer) ein gewisses "zeitgefühl" geben, also die verschiedenen Servopositionen sollen verschieden lange (zw. 3 und 8 sek.) angesteuert werden. Hier Ausschnitte vom 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 | |
Dazu muss ich noch erwähnen, dass an den AD_wandler ein Abstandssensor angeschlossen ist, welcher Werte in ADWert schreibt. Der AD-wandler und die gelieferten Werte stimmen aber alle. also was das Programm manchen soll, ist Folgendes: Wenn der AD-Wandler einen Wert >624 liefert, soll die Servoposition 0x99 angefahren werden, Timer1 soll gestartet werden, welcher nach 3 Sekunden (OCR1A = 0x5b8d, CTC-Mode, Prescaler 256, CPU-Takt 2 MHz) einen Interrupt auslöst. In der Interrupt-Routine wird die Variable x.Interrupt_BIT_1 auf 1 gesetzt und die Routine wird verlassen. Im Hauptprogramm wird der Wert dieser Varablen abgefragt und wenn der Wert = 1 ist, soll die Servoposition OCR2 = 0x19 angefahren werden. Das funktioniert aber nicht, irgendwie wird scheinbar die Variable x.Interrupt_BIT_1 nie auf 1 gesetzt, denn die position OCR2 = 0x19 wird nie angefahren, sondern immer nur die position OCR2 = 0x3A, das allerdings nach den gewünschten 3 sek.(s.3.Zeile der main-funktion, wenn ich diese Zeile weg lasse, bleibt der Servo allerdings immer in der Position OCR2 = 0x99). Jetzt ist meine Frage warum das nicht funktioniert. ich hoffe mein Problem ist deutlich geworden und bin für alle Hinweise dankbar, Grüße, Storm