Ja, zwei Servos (oder mehr) am selben Kontrollerpin funktioniert natürlich auch.
OK, Hmmm... da fällt mir spontan ein das Port für das SFH5110 zu nehmen, weil die "Buchse" bei mir schon da ist.
Ist diese Doppelbelegung möglich oder muss ich den Teil für die IR-Kommunikation aus der Lib heraustrennen? IR-Komm. brauche ich nicht, weil ich via ISP flashe.
hallo,
@pinsel120866:
leider geht das in meinem fall mit der synchronen ansteuerung nicht, weil der eine servo einen greifer schließen bzw. öffnen soll und der andere servo den greifer nach oben oder unten bewegen soll!
kann mir keiner mit meinem programm helfen ?
danke für alle antworten
mfg Felix
Wer Rechtschreibfehler findet, darf sie behalten !!
Aber da sich bei Radbruchs "Walker" die diagonal zueinander stehenden Beine immer gleich bewegen braucht man anstatt 8 Pins nur 4^^
wobei ich mir jetz nicht mehr sicher sind ob sich auch die Servos gleich bewegen...![]()
kommt ja drauf an wie rum man die drehr entweder sie bewegen sich gleich oder genau umgekehrt...![]()
Ach vom Prinziep her kann man se mit 4 pins ansteuern^^
€: Wenn er um die Kurve will muss er sich was ausdenken^^
Hallo
Ähm, ich wußte nicht, das du weiterhin auf Hilfe wartest. Mit den Erläuterungen von oben solltest du nun deine Servos immerhin blockierend ansteuern können.kann mir keiner mit meinem programm helfen?
Das "Blockieren" bezieht sich auf den Rest des Programms, mehrere Servos funktionieren einfach so:leider geht das in meinem fall mit der synchronen ansteuerung nicht
Jetzt alles klar?Code:do Ausgang Impuls für 1. Servo auf high Impulslänge für 1.Servo abwarten Ausgang Impuls für 1. Servo auf low Ausgang Impuls für 2. Servo auf high Impulslänge für 2.Servo abwarten Ausgang Impuls für 2. Servo auf low Impulspause (20ms - (Impulslänge1+Impulslänge2)) abwarten while(Servos haben Ziel noch nicht erreicht)
Gruß
mic
[Edit][Offtopic]
Ja, im Prinzip schon, aber echtes "Gehen" wird so nicht funktionieren. Das liegt in erster Linie daran das man nur bei einzelner Ansteuerung der Servos die mechanischen und elektrischen Toleranzen korrigieren kann....vom Prinzip her kann man se mit 4 pins ansteuern
Doch, genau das machen sie und genau das ist ein großer Sch.... Je nach Einbauort und -lage bewegen sich die Servos bei längeren Impulsen auf/ab bzw. vor/zurück oder bei kürzeren Impulsen ab/auf bzw. zurück/vor. In der nächsten (sechsbeinigen!) Version meines "Walkers" werde ich deshalb die Drehrichtungen der Servos anpassen (Motor und Poti umpolen) um eine Symetrie der Werte entlang der Längs- bzw. der Hochachse zu erhalten. D.h.: kleine Werte=alle Beine vor/hoch, große Werte=alle Beine hinten/unten. Das ist vielleicht kein wissenschaftlicher Ansatz und macht möglicherweise die Ansteuerung mit inverser Kinedingsda schwierig bis unmöglich. Aber weil ich ja noch Beineanfänger bin scheint mir das für den Einstieg leicher umsetzbar.wobei ich mir jetz nicht mehr sicher sind ob sich auch die Servos gleich bewegen
[/Offtopic][/Edit]
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
hi ,
oh ja vielen dank
ich habs kapiert jedenfalls fast!
woher weiss ich wie lange ich den vorgang wiederholen muss bis der servo in der stellung ist die ich haben wollte, weil der servo gibt doch keine werte zurück oder doch?
muss ich mich da durch ausprobieren herantasten oder kann ich pauschal einfach mal die stellzeiten die draufstehen hernehmen ?
danke für deine hifreiche antwort
mfg Felix
Wer Rechtschreibfehler findet, darf sie behalten !!
Das Umrechnen der Stellzeiten aus dem Datenblatt ist vermutlich nicht ganz einfach. Ich würde das Senden der Impulse einfach solange wiederholen bis die Servos nicht mehr zucken. Etwas besser wäre vielleicht so:
Nur zur Info und nochmals etwas offtopic:Code:stellzeit = (pos_neu - pos_old) * WiederholungenproStep do Impulse senden while(stellzeit--)
https://www.roboternetz.de/phpBB2/viewtopic.php?t=37927weil der servo gibt doch keine werte zurück oder doch?
Dazu benötigt man allerdings einen analogen Eingang zur Ansteuerung des Servos ;) Das ist aber schon sehr fortgeschritten, Anfänger/Einsteiger sollten sich erstmal mit den Grund- und Standartfunktionen der Servos vertraut machen.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
hallo,
ok danke für den hinweis !
des mit dem analogen zeugs lass ich dann erstmal und werde etz malanfangen
wenn ich nimmer weiterkomm bzw. der greifer fertig ist und funktioniert melde ich mich wieder!
bis dann
mfg Felix
Wer Rechtschreibfehler findet, darf sie behalten !!
Schönen Nachmittag,
Ich habe mir eine Erweiterungsplatine für 3 Servos gebastelt und diese auf meine ATMEGA32 Erweiterungsplatine gesteckt. Für die Servos belegt habe ich die PINS PB5(MOSI), PB6(MISO) und PB7(SCK) der ISP-Schnittstelle.
In der Asuro.c habe ich folgendes eingetragen:
In die Asuro.hCode:/* function for Servos */ /* example code right Servo On, middle Servo On, left LED Off */ /* Servo(OFF,ON,ON); */ void Servo(unsigned char left, unsigned char middle, unsigned char right) { if (left || middle || right) { DDRB |= (1 << PB5) | (1 << PB6) | (1 << PB7); PORTB |= (1 << PB5) | (1 << PB6) | (1 << PB7); } if (!left) PORTB &= ~(1 << PB7); if (!middle) PORTB &= ~(1 << PB6); if (!right) PORTB &= ~(1 << PA5); }
Und das Programm ist soCode:/* function for Servos */ /* example code right Servo On, middle Servo ON, left LED Off */ /* BackLED(OFF,ON,ON); */ void Servo(unsigned char left, unsigned char middle, unsigned char right);
Aber es bewegt sich nichts...Code:#include "asuro.h" unsigned char i, servo_stellzeit; void servo(unsigned char winkel){ unsigned int count=0; do{ count++; Servo(ON,ON,ON); FrontLED(ON); Sleep(winkel); Servo (OFF,OFF,OFF); FrontLED(OFF); Sleep(255); Sleep(255); Sleep(255); }while (count<servo_stellzeit); } int main(void) { Init(); StatusLED(OFF); do{ servo_stellzeit=35; servo(51); servo(90); servo(51); servo(15); servo_stellzeit=2; for (i=15; i<88; i+=2) servo(i); for (i=90; i>17; i-=2) servo(i); }while (1); return 0; }
Könntet ihr mir bitte etwas unter die Arme greifen?
Lesezeichen