Kennt jemand eine einfache Steuerung um 2 Servos mit je einem 4-Bit wert einen Drehbereich von 90 Grad fahren zu lassen?
Ich möchte an der Schaltung pro Servo 4 Bit anlegen und der Servo soll den entsprechenden Winkel anfahren.
Danke
Kennt jemand eine einfache Steuerung um 2 Servos mit je einem 4-Bit wert einen Drehbereich von 90 Grad fahren zu lassen?
Ich möchte an der Schaltung pro Servo 4 Bit anlegen und der Servo soll den entsprechenden Winkel anfahren.
Danke
Schaltungstechnisch am einfachsten: einen Mikrocontroller nehmen. Dann reicht zb ein 14poliges IC, fast ohne Außenbeschaltung.
Damit ist der Aufwand dann in die Software verlagert worden.
Als SMD auf Briefmarkengröße unterzubringen. In THT auf ner großen Briefmarke.
Das waren meine Vorstellungen.
Ich habe jedoch noch wenig Erfahrungen mit Mikrocontrollern und würde mir gerne mal einen fertigen Vorschlag ansehen. Sicher hat schon mal jemand so was gemacht. Kennst Du einen Link?
Werden Servos nicht über Pulsweite angesteuert? Die brauchen nur einen einzigen Pin und über den werden entsprechende Signale geschickt (Standartservos haben eh nur Plus, Ground und Signal Leitungen).
Wie man das macht findet man zu den gängigen µControllern überall da es eine Standartaufgabe ist. Die Unterlagen musst du dir aber selber suchen, heißer Tipp ist aber unsere Wiki.
Hallo
Meinen Langbein steure ich mit einem Attiny13 und programmiere ihn in C. Der tiny13 kostet ca. 1.15€, hat 8 Pins und steuert bei mir 5 Servos. Mein aktueller Code:
Nur als Anregung, x,x2,y,y2,z sind die jeweiligen Servopositionen. Wertebereich vom -90° bis + 90° ist ca. 50-150. Vielleicht hilft/inspiriert dich das. Bei Problemen bei der Anpassung an 4-bit-Positionen kannst du gerne nachfragen.Code:#include <avr/io.h> #include <avr/interrupt.h> //#define f_cpu 9,6 MHz uint8_t a, b, x, x2, y, y2, z, demo; volatile uint16_t count, time; void delay(uint16_t d) // Warteschleife { d+=time; while(d>time); } ISR(TIM0_COMPA_vect) // Servoansteuerung { if (count>z) PORTB &= ~(1<<PB0); else PORTB |= (1<<PB0); if (count>y) PORTB &= ~(1<<PB1); else PORTB |= (1<<PB1); if (count>x) PORTB &= ~(1<<PB2); else PORTB |= (1<<PB2); if (count>y2) PORTB &= ~(1<<PB3); else PORTB |= (1<<PB3); if (count>x2) PORTB &= ~(1<<PB4); else PORTB |= (1<<PB4); if (count < 1000) count++; else { count=0; time++; } } int main(void) { y=y2=60; x=x2=60; z=95; time=0; DDRB = (1<<PB4)|(1<<PB3)|(1<<PB2)|(1<<PB1)|(1<<PB0); // Servoausgänge //PORTB= (1<<PB3); // PullUp Taster ein TCCR0A = (0 << WGM00) | (1 << WGM01); // CTC-Mode TCCR0A |= (0 << COM0A0) | (0 << COM0A1); // ohne OCR-Pin TCCR0B = (0 << CS02) | (0 << CS01) | (1 << CS00); // prescaler /8 TIMSK0 = (1 << OCIE0A); // Interrupt ein OCR0A = 11; // nicht wissenschaftliche Frequenz(100kHz?) sei(); delay(100); { for(a=0; a<10; a++) {x++; y++; delay(5);}; for(a=0; a<10; a++) {y--; delay(5);}; for(a=0; a<10; a++) {x--; x2--; delay(5);}; } while(1); return(0); }
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke für die Info.
Ich werde mir das morgen mal genauer anschauen.
Wie gesagt möchte ich das dann anpassen und mit je 4 Bit ansteuern.
Ich hätte da auch noch mal eine Frage! Also ich hab einen Atmega 16 und wollte mit dem über eine ADC Ausgang einen Servo steuern! Das Programm mit dem ich programmiere ist BASCOM-AVR!
Die Frage ist nun wie schreibe ich das Programm?
Wie sage ich ihm in welche richtung er das Servo lenkt?
Ich hoffe sehr auf eine Antwort
Danke vorab!![]()
@Luca-33
Das Wort "Servo" wird hier im Forum automatisch mit einem Link hinterlegt. Wenn du da einfach mal draufklickst, findest du wie ein Servo grundsätzlich angesteuert wird.
Da findest du auch ein Codeschnipsel zur Ansteuerung eines Servos in Bascom. Genaueres dazu findest du auch in der Bascom Online-Hilfe.
Ein Beispielprogramm ist ebenfalls in Bascom enthalten. Das würde ich einfach mal auf deinen Controller anpassen und ein bischen damit rumspielen.
Lesezeichen