An alle die schon mal servo motoren gesteuert haben oder fit was GCC angeht ich habe ein Kleines Problem.( Hardwäre stk 500 mit Atmega 16) Ich habe ein C-Code geschrieben wird nach druck der Taster1 ( PIN0) der servo in der Position 1700 bringen und nach druck der Taster 2 ( PIN1)nach Position 1200. Aber ich möchte eine Verzögerung hinbringen das nach dem Drücken von nur eine Taster das der Servo sich nach Position 1700 bewegen kann und danach nach Postition 1200. Ich habe es mit der " delay " versucht aber er erkennt es irgend wie nicht. und nimmt nur der letzte befehl an auch wenn ich höhere Tacktfreq nehme.
servotiming ist schon eine spannende sache. hab selbst auch schon tage mit dem debugging verbracht :) dir ist schon klar das du dem servo permanent positionsdaten schicken musst ... zb. 20ms_2ms_20ms_2ms. wenn dies ausbleibt wandert er, sofern er nicht gehackt wurde(endlossservo) auf position NULL zurueck? poste mal deinen c code schnippsel dann seh ich mirs(in ca. 8h) gern mal an. mit welcher frequenz taktest du deinen atmega16? mfg hansl
>dir ist schon klar das du dem servo permanent positionsdaten schicken >musst ... zb. 20ms_2ms_20ms_2ms. wenn dies ausbleibt wandert er, >sofern er nicht gehackt wurde(endlossservo) auf position NULL zurueck? Quatsch. Der wandert nirgendwohin, wenn die Impulse ausbleiben und keine äussere Kraft auf das Ding einwirkt. @samawi: Wenn du dein Programm (oder zumindest relevante Teile) hier reinstellen würdest, könnte man auch präziser antworten. Im Prinzip geht es ganz einfach: Warte auf die Taste Sobald die Taste gedrückt wurde, setze die aktuelle Impulslänge auf 1700 Solange Position 1200 noch nicht erreicht wurde, gib einen Impuls der akutellen Impulslänge aus verringere die Impulslänge um einen bestimmten Betrag. Der Betrag, um die Impulslänge geändert wird, entscheidet über die Geschwindigkeit, mit der sich das Servo bewegt (bis auf dessen mechanische Träghheit natürlich). Die Schleife kann auch fußgesteuert sein...
Hier mein Programm ist allerdings einbisschen komplizierter da ich mehrere servos gleichzeitig kontrolliere ( Hier gehts um die Steuerung eines sexbeinigen Roboters( Hexabot). Also ich habe so zu sagen die Aufgabe jetzt schon gelöst und zwar statt eine einzige delay habe ich eine delay schleife (for)eingesetzt. Es scheint mir allerdings immer noch einbisschen doof programmiert. wenn jemanden eine andere idee hat ist immer willkommen. n.B ich nutze neben den stk500 noch den servo controller SSC32 ====================================================== #include <avr/interrupt.h> #include <util/delay.h> #include<stdio.h> // Einbinden des Servo Treibers void servo_cmd (char *s) { while (*s) { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */ uart_putc(*s); s++; } } int main(void) { int i; // Initialisierung der RS232 Schnittstelle uart_init(); // IO Ports initialisieren DDRA=0x00; DDRB=0xff; PORTB=0xff; // Timer1 initialisieren TCNT1H=0x00; TCNT1L=0x00; // CTC Mode - Prescaler 256 TCCR1A = 0x00; TCCR1B = 0b00001011; // 1sec bei 3,6864 MHz OCR1AH = 0xe0; OCR1AL = 0xff; // Timer aktivieren TIMSK |= 0x10; // Globale Interrupts aktivieren sei(); while(1) { if ( !(PINA & (1 << PA0)) ) { servo_cmd("#4p1200 #5p1750 #6p1750 #24p1750 #25p1200 #26p1250 #16p1750 #17p1200 #18p1250 t2000\r"); for (i = 0; i < 150; i++) { _delay_ms(30); } ; servo_cmd("#4p1500 #5p1500 #24p1500 #25p1500 #16p1500 #17p1500 t2000 \r"); for (i = 0; i < 200; i++) { _delay_ms(30); } ; servo_cmd("#0p1200 #1p1750 #2p1750 #8p1200 #9p1750 #10p1750 #20p1750 #21p1200 #22p1250 #6p1500 #26p1500 #18p1500 t2000\r"); for (i = 0; i < 150; i++) { _delay_ms(30); } ; servo_cmd(" #0p1500 #1p1500 #8p1500 #9p1500 #20p1500 #21p1500 t2000\r"); for (i = 0; i < 100; i++) { _delay_ms(30); } ; servo_cmd("#4p1200 #5p1750 #6p1750 #24p1750 #25p1200 #26p1250 #16p1750 #17p1200 #18p1250 #2p1500 #10p1500 #22p1500 t2000 \r"); } return(0); } // Interrupt Routine Timer1 Compare Match SIGNAL (SIG_OUTPUT_COMPARE1A) { // Toggle LED an PortB PORTB ^= (1 << PB0); //uart_puts(servo); }
@ Samawi (Gast) >mehrere servos gleichzeitig kontrolliere ( Hier gehts um die Steuerung >eines sexbeinigen Roboters( Hexabot). ^^^^ Bist du Entwickler für die Firma B. U. aus F.? fg SCNR Falk
@ Falk Brunner : nein es ist ein Project bei und an der FH ich bin noch kein richtiger Entwickler eher Anfänger. @ Simon Küppers : OT: Wundert mich, dass das durch den Spamfilter gekommen ist ;) ;) was meinst du genau damit?
@ samawi (Gast) >@ Simon Küppers : OT: Wundert mich, dass das durch den Spamfilter >gekommen ist ;) ;) >was meinst du genau damit? Solche bösen Worte wie S E X erkennt die Software dieser Website und weist die Beiträge zurück. Probier mal das Wort oben ohne Leerzeichen in einem Beitrag zu verwenden. Sex MFG Falk
>servo_cmd("#4p1200 #5p1750 #6p1750 #24p1750 #25p1200 #26p1250 >#16p1750 #17p1200 #18p1250 #2p1500 #10p1500 #22p1500 t2000 \r"); Jetzt wäre interessant, was die einzelnen Zeichen/Phrasen in diesem String zu bedeuten haben. Gibt es zu dem Servo-Controller bzw. dessen Protokoll auch eine Beschreibung? >Huch,geht doch. SPAMfilter im Urlaub? Andreas macht nebenbei noch ein Bekanntschaften-Forum hier auf...
@ Falk Brunner ;-)))))))))) hab gar nicht drauf geachtet. Die sollen dich als Spamfilter einstellen. gut aufgepasst. @ STK500-Besitzer: die string ist nicht weiter als ein servo befehl der so aufgebaut ist : # Chanel ( Nr der servo) P postion wo er hin muss ( oder kann mann als winkel betrachten) T steht für die zeit der er für die bewegung braucht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.