Nein, habe ich leider nicht.
Ich habe gerade mal anstatt des LiPos ein Netzteil drangehängt. Auch nichts.
Nein, habe ich leider nicht.
Ich habe gerade mal anstatt des LiPos ein Netzteil drangehängt. Auch nichts.
Du sagst, die 3 Mini - Servos funktionieren einwandfrei !
Die 3 Grossen nicht, aber an deinem Heli tadellos !
Wenn Du alle Servos abziehst und nur ein Grosses dort ansteckst, wo sonst ein Mini - Servo war, funktioniert es dann ?
Probiere aber alle 3 Grossen einzeln aus, evtl. ist ja eins defekt .
Roland
Robotik & Arduino Homepage
http://www.ardumega.de
Ich habe die ganze Zeit schon zwischen einem kleinen und einem großen gewechselt. Also, ich hatte immer nur einen Servo am System. Habe dann den kleinen an dem Port angeschlossen um zu sehen ob wirklich ein Servo-Signal anliegt, habe dan den kleinen abgezogen und den großen dran gehängt (am selben Port). So habe ich das mit allen dreien gemacht und die Versorgungsspannung jeweils den Tipps entsprechend aufgebaut.
Nachtrag: Habe auch noch ein stärkeres Netzteil probiert (max 1,5 A). Auch keine Änderung!
Geändert von dirty_bird_981 (05.01.2012 um 19:45 Uhr)
Hallo,
die Pins auf den Erweiterungsports sind standardmäßig alle als Eingang konfiguriert.
Bist Du Dir also sicher das die I/O Ports richtig konfiguriert sind und auch richtig schalten?
(Ausgang! Nicht nur einfach bei nem als Eingang konfigurierten Pin den Pullup hin und her schalten!)
Falls das OK ist, schalte mal einen der Pins langsam an und aus (mit 3 Sekunden pause dazwischen) und mess die Spannung mit einem Multimeter.
Häng dann auch mal eine LED über einen Widerstand (470 Ohm bis 2K Ohm) dran und schau ob die blinkt.
MfG,
SlyD
Geändert von SlyD (06.01.2012 um 13:33 Uhr)
Ich denke mal wenn die kleinen Servos an einem Port funktionieren dann ist dieser korrekt geschaltet. Aber zur Sicherheit hier trotzdem mal mein Code:
void ServoInit(void);
{
DDRC |= IO_PD6;
DDRC |= IO_PC4;
DDRC |= IO_PC6;
servo1_pos_d=12;
servo2_pos_d=5;
servo3_pos_d=22;
}
void servo(int servo_nr,int position, int speed)
{
switch (servo_nr)
{
case 1:
servo1_pos_d=position;
break;
case 2:
servo2_pos_d=position;
break;
case 3:
servo3_pos_d=position;
break;
}
}
------------------------------------------------
und dies steht in der Timer-ISR in der rp6controllib.c
if(servo_timer>servo1_pos_d) PORTD &= ~IO_PD6; else PORTD |= IO_PD6;
if(servo_timer>servo2_pos_d) PORTC &= ~IO_PC4; else PORTC |= IO_PC4;
if(servo_timer>servo3_pos_d) PORTC &= ~IO_PC6; else PORTC |= IO_PC6;
if(servo_timer<200) servo_timer++; else servo_timer=0;
PD6 ist kein Ausgang:
DDRC |= IO_PD6;
Drehbereich von 0,5 bis 2,2 Millisekunden erscheint mir zuviel für ein RS2-Servo.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Ich habe das Beispiel aus der Anleitung genommen und umgeschrieben:
Zitat Anleitung: DDRC |= IO_PC7; // PC7 ist nun Ausgang
Und, wenn der Port kein Ausgang ist, dann sollten doch die kleinen Servos auch nicht funktionieren, oder? Im übrigen habe ich auch die anderen beiden Ports probiert: kleine OK, große nicht.
Nachtrag:
Habe es jetzt umgeschrieben in:
DDRC = IO_PD6 | IO_PC4 | IO_PC6;
jetzt tun die großen an PC4 und PC6, aber nicht an PD6. Warum nicht?
... und bei
void ServoInit(void);
das Semikolon gehört da nicht hin - dürfte so eigentlich nicht fehlerfrei übersetzt werden.
Lesezeichen