Tach! da die library Servo.h sämtliche 16-bit Timer okkupiert, wollte ich fragen, ob man da einfach was dran ändern kann in nur einem Sketch?
Gast
#3848597
Bitte erschlage uns nicht mit Infos wie Programmiersprache, Target, etc!
:-? schrieb: > Bitte erschlage uns nicht mit Infos wie Programmiersprache, Target, etc! Arduino. Das sagt schon alles.
Karl Heinz schrieb: > :-? schrieb: >> Bitte erschlage uns nicht mit Infos wie Programmiersprache, Target, etc! > > Arduino. > > Das sagt schon alles. Und wo bitte steht das?
Alex W. schrieb: > Karl Heinz schrieb: >> :-? schrieb: >>> Bitte erschlage uns nicht mit Infos wie Programmiersprache, Target, etc! >> >> Arduino. >> >> Das sagt schon alles. > > Und wo bitte steht das? Das erschliesst sich aus der Verwendung des Wortes 'Sketch'
Entschuldigung erneut ARDUINO als Sprache Library, die in nem Sketch dabei ist heisst Servo.h damit kann man zwar sämtliche Servos ansteuern, aber die 16-bit Timer sind dann alle reserviert dafür! genügt das ?
Rene Trattner schrieb: > > genügt das ? Nö! Lad mal den Source hier hoch damit man sich das anschauen kann! Arduino ist zwar C, aber nicht jeder hat die Servo.h auf seinem Rechner!
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 | |
das is die header-Datei im Ganzen....habe versucht sie abzuändern, Timer5 rausgenommen bei der define für den ATMega2560, dann gespeichert und sie als Header Datei benutzt...funktioniert so nicht!
Gast
#3848627
Alex W. schrieb: > Nö! Lad mal den Source hier hoch damit man sich das anschauen kann! > Arduino ist zwar C, aber nicht jeder hat die Servo.h auf seinem Rechner! Und vielleicht interessiert auch noch der dazugehörige Programmcode. Bei der Servoansteuerung ist übrigens nur die Dauer des High-Pulses zeitkritisch und meist dürfte dafür eine Auflösung von 8 Bit ausreichend sein. Die Dauer des Low-Teils muss man dann anders erzeugen, z.B. über die Funktion millis().
Rene Trattner schrieb: > #ifndef Servo_h Mensch Ruppert!
die Auflösung beträgt eh 8 bit, was ich so sehe! ich leg dann ein Map an, was von 10 bit Analog auf 8 bit PWM ausgibt! ich bräucht einfach nur einen freien 16-bit Timer für was anderes...aaaaaber leider geht das nicht wegen der Servo.h und da ich ein Zeitfenster von 0,1sec benötige (CTC Timer), komme ich mit dem 8-bit Timer0 nicht aus...hab da rumgerechnet....aber dann müsste ich die Interrupts alle 0,01 sec auslösen...
Der M328 hat nur einen 16bit Timer, wie willst du den frei machen?
Gast
#3848644
> aaaaaber leider geht das nicht wegen der Servo.h
Dann schmeiß sie raus und schreib dir passende Funktionen.
Rene Trattner schrieb: > Tach! > > da die library Servo.h sämtliche 16-bit Timer okkupiert, wollte ich > fragen, ob man da einfach was dran ändern kann in nur einem Sketch? Tach auch.
1 | |
Wie viele Servos steuerst Du denn tatsächlich an? Mehr als 12 Servos?
1 Servo wird angesteuert...da kommt auch nix mehr dazu!!! wie gesagt, hab sie schon "abgeändert", aber das funktioniert so nicht! 2560er hat 4 Timer 16-bit....nicht einen !!
Rene Trattner schrieb: > 1 Servo wird angesteuert...da kommt auch nix mehr dazu!!! Wenn Du bis zu maximal 12 Servos ansteuert, verwendet die Library nur einen einzigen Timer. Also auch bei 1 Servo 1 Timer. Die Library verbraucht "einen Timer pro ein Dutzend Servos".
Gast
#3848678
Rene Trattner schrieb: > 1 Servo wird angesteuert... Wenn man nur ein bisschen Ahnung hätte wäre es kein Problem einen einzelnen Servo mit nur einem 16bit Timer abzusteuern.
...interessant, weil ich bei Verwendung von der Servo.h und z.B. TIMER4
beim Kompilieren folgende Fehler bekomme ->
Servo\Servo.cpp.o: In function `__vector_42':
C:\Program Files (x86)\Arduino\libraries\Servo/Servo.cpp:117: multiple
definition of `__vector_42'
GoKart_ARDUINO_PROGRAMM_20102014_V2.cpp.o:C:\Program Files
(x86)\Arduino/GoKart_ARDUINO_PROGRAMM_20102014_V2.ino:260: first defined
here
c:/program files
(x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../av
r/bin/ld.exe: Disabling relaxation: it will not work with multiple
definitions
die Einstellung am TIMER 4 sieht so aus
TCCR4A=0;
TCCR4B=0;
OCR4A=40500;
TCCR4B|=(1<<WGM42);
TCCR4B|=(1<<CS41)|(1<<CS40);
TIMSK4|=(1<<OCIE4A);
:-| schrieb: > Rene Trattner schrieb: >> 1 Servo wird angesteuert... > Wenn man nur ein bisschen Ahnung hätte wäre es kein Problem einen > einzelnen Servo mit nur einem 16bit Timer abzusteuern. und wenn es so dumme "Antworten" nicht gäbe, wäre das Leben untereinander sicher freundlicher....is aber nicht, gell ?"
Rene T. schrieb: > ...interessant, weil ich bei Verwendung von der Servo.h und z.B. TIMER4 > beim Kompilieren folgende Fehler bekomme -> Keine Ahnung, was von Deinen Programmierkünsten, von denen Du mal wieder reichlich wenig vorzeigst, zu diesen Compiler-Fehlern führt. Auf dem Atmega2560 ist die Definition und Reihenfolge der Timer so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Also für die ersten 12 Servos wird "Timer5" als Timer verwendet. Zu beachten wäre dabei noch, dass standardmäßig Timer5 auch für die PWM-Pins mit den Pin-Nummern 44,45,46 verwendet werden, so dass Du bei Verwendung der Servo-Library nicht auch noch gleichzeitig PWM an den Pins 44,45,46 machen kannst. Ein zweiter Timer auf Deinem Atmega2560 wird jedenfalls von der Servo-Library erst dann verwendet, wenn Du 13 oder mehr Servos über die Library steuern möchtest.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
