Hy alle miteinander!
Ich arbeite jetzt schon lange mit Servos,und da hab ich mir gedacht man
könnte einen Servo auch mit einem AVR ansteuern können.
Aber ich weiß von einem Servo nur das er eine plus,minus und eine
Signalleitung hat, aber was ich nicht weis ist was das für ein Signal
ist.
Ich habe im Internet gekukt aber nicht´s Genaues gefunden.
Dann hab ich es hir versucht, und ich habe ein paar Einträge gefunden,
aber die AVR Programme waren entweder in Bascom oder in C.
Ich kann weder C noch Bascom ich kann nur asesembler.
Ich hoffe jemand kan mir in diser Sache helfen.
So ein Servo will einen Impuls zwischen 1 und 2 ms.
Je nach länge des Impulses fährt er an den rechten oder linken Anschlag.
1,5ms ist demnach die Mitte.
Und jetzt schickt man diesen Impuls nicht nur einmal sondern alle 20ms
und schon macht das Servo was man haben möchte.
Wenn du Assembler kannst dann dürfte das keine Problem sein umzusetzen.
Ich hoffe das ich dir helfen konnte...
lg
Gast wrote:
> So ein Servo will einen Impuls zwischen 1 und 2 ms.
Ein Modellbauservo, wohlgemerkt.
> Wenn du Assembler kannst dann dürfte das keine Problem sein umzusetzen.
In C geht das auch.
Hallo Markus,
noch ein paar Anmerkungen:
Ein Servo braucht Strom, den der Atmel nicht liefern kann.
Also Servo nicht über den Atmel versorgen!
Da der Anlaufstrom recht hoch ist, die Versorgung für den
Atmel sicher auslegen, da sonst ein Reset (BrownOut) eintreten kann,
dann erfolgt ein Restart, hoher Anlaufstrom etc.....
Manche Servos lieben das direkte Ansteuern nicht, sondern wollen einen
Widerstand in der Leitung haben (es sind Werte von 100 - 1000 Ohm
im Forum zu finden).
Das sollte wohl die gröbsten Fehler verhindern.
Gruß Servo
eine idee ist zB einen timer compare zu machen
er startet dann alle 20ms den timer neu
der wert im compareregister steuert die ON - zeit des compareausgangs
Hallo,
hab das mal vor einiger Zeit für den ATTiny13 gemacht. Wie immer bei
solchen Schnellschüssen nix dokumentiert...
Woran ich ich dunkel erinnern kann:
Da war ein
- Poti, um die Servoposition einzustellen
- Button um die aktuelle Nullposition auf die aktuelle Servoposition
einzustellen.
Lang ist's her...
Vielen Dank für eure Antworten.
Aber hat nicht einer von euch ein einfaches Programm geschrieben,
das den Servo in die Mittelstellung bewegt.
Ich neme auch an das man so ein Programmauch mit einfachen
warteschleifen
versehen könnte.
Du sagtest, Du hast schon viel mit Servos gearbeitet, Hardware ist nicht
das Problem, und Du kannst nur Assembler.
Für diese Aufgabe hast Du schon verschiedene Tipps erhalten.
Wenn Du jetzt noch willst, dass Dir jemand das fertige Programm liefert,
hat man den Eindruck, Du suchst jemanden, der Dir die Hausaufgabe macht,
statt sie selbst zu machen. Und das sieht dann so aus wie jemand, der zu
faul ist, seine Hausaufgabe selbst zu machen, und der einen Dummen
sucht, der es für ihn erledigt. Natürlich hat keiner Lust, dieser Dumme
zu sein...
Aber vielleicht irre ich mich mit dieser Einschätzung.
Natürlich kannst Du einfache Warteschleifen nehmen. Aber dann mach doch
mal wenigstens dieses Einfache! Worauf wartest Du?
Ich Habe sie schon gemacht mier fehlen nur noch die Werte von +++++
und *****.
Die Sternchen stehen für die 20ms und die Plus für die 1,5ms
eigentlich benötige ich nur den 20 ms Wert den anderen kann ich dann
selbst Rausfinden
Die Werte kann Dir niemand ausrechnen als Du selbst, weil keiner weiß,
wie schnell der Takt Deines Controllers ist (und welcher es ist).
Im Datenblatt des Controllers steht, wie viele Taktzyklen ein Befehl
benötigt. Damit kannst Du ausrechnen, wie lange die Schleifen dauern.
Mit dem Prozessortakt und den Werten +++++ und ***** lässt sich daraus
ausrechnen, was für Impulse Du erzeugst.
-die Schleifen werden nie verlassen (da du am Anfang immer wieder den
Startwert lädst)
-mit einem einfachen 8bit-downcounter wirst du niemals die Verzögerungen
erreichen, die du brauchst. Geschätzter Schleifendurchlauf 5 Takte,
selbst bei nur 1MHz Takt schaffst du gerade etwas über 1ms
-beschäftige dich mit dem Timer
> Ich Habe sie schon gemacht mier fehlen nur noch die Werte von +++++> und *****.> Die Sternchen stehen für die 20ms und die Plus für die 1,5ms> eigentlich benötige ich nur den 20 ms Wert den anderen kann ich dann> selbst Rausfinden
Du kannst AVR-Assembler?
Somit kennst Du die Liste der ASM-Befehle, in der u.a. die
Ausführungszeit (in Takten) für jeden Befehl angegeben ist?
Du kannst die Ausführungszeiten der Begehle des Programms addieren?
Du weißt wie schnell Dein AVR taktet (jungfräulicher Tiny13 1,2 MHz
effektiv)?
Du kannst multiplizieren und dividieren?
Dann solltest Du in der Lage sein, die erforderlichen Warteschleifen zu
berechnen.
Besser und einfacher wird es allerdings durch das Verwenden eines
Timers. Dieser zählt die CPU-Takte im Hintergrund (also während das
Programm etwas anderes tut) und löst bei Erreichen des voreingestellten
Vergleichswertes einen Interrupt aus. Einzelheiten zum Timer, seines
Vorteilers und der verfügbaren Interrupts liefert das Datenblatt des
betreffenden AVRs, die verschiedenen AVRs sind sehr unterschiedlich mit
Timern ausgestattet. Zum Berechnen der Werte genügen die
Grundrechenarten und ein bisschen Verständnis der im Datenblatt gut
beschriebenen Abläufe. Es ist also keine Frage der ultimativen Formel,
sondern eine reine Fleißaufgabe, sich die (einfachen) Zusammenhänge aus
dem Datenblatt herauszuschreiben und gedanklich durchzuspielen.
Solltest Du allerdings zu Denen gehören, die immer Probleme beim Lösen
von Textaufgaben hatten (also beim Erkennen der im Text beschriebenen
Zusammenhänge), dann solltest Du dazu stehen und Dir eine andere
Beschäftigung suchen. Ich stehe auch dazu, dass ich weder singen noch
malen kann.
Solltest Du trotzdem weiterhin Interesse an AVRs und Servos haben, dann
wäre es vermutlich nicht schlecht, mal meinem oben erwähnten Link zu
folgen. Dort gibt es mehrere Projekte (mit gut dokumentiertem
ASM-Quelltext), die sich mit dem Erzeugen von Servoimpulsen
beschäftigen. Und wenn Du nicht nur die Überschriften liest, dann hast
Du auch eine Chance, die Programme zu verstehen und mit diesem Wissen
eigene Programme zu schreiben.
...
Toll, diese ganzen fertigen Modellbau-Projektchen in den Links oben!
Als ich mir früher sowas baute, war noch alles in Analogtechnik und mit
74LS.. Schiebern usw.
Mit den Controllern macht das natürlich viel mehr Spaß!
Hy ich bin es wieder ich hab es geschaft der Servo leuft.
Als erstes brachte ich ihn nur main die Mittelstellung.
Dann habe ich ihn zwei Stelungen machen lassen und jetzt kommts,
ich hatte so fiel spas dran das ich gleich einen A/d wandler
dazugeschrieben
habe und jetzt hab ich auch einen servotester oh mann ist das geil.
ich danke euch vielmals.
Aha, Du brauchst für sowas also EXCEL...
Mir genügt dazu Bleistift und Papier, um die Gedanken festzuhalten
(Alzheimer light) und aus Faulheitsgründen noch ein stinknormaler
Taschenrechner.
Warteschleifen nehme ich für sowas nicht. Die AVRs, die ich benutze,
haben Timer, die das viel besser können als Warteschleifen. Du bekommst
kein Geld zurück, wenn Du die mitgelieferten Timer nicht benutzt.
Ein weiterer Grund, Wartezeiten zu vermeiden, ist die Tatsache, dass
jede Programmerweiterung das Timing beeinflusst, wodurch die Zeiten
nicht mehr stimmen. Außerdem ist der Controller mit Warten (Takte
zählen) beschäftigt, obwohl er in dieser Zeit sinnvollere Arbeiten
machen könnte.
...
Hm Timmer, na also ich weiß nicht ich kenne mich damit nicht grade gut
aus.
Auserdem kann ich mir nicht ausmalen wie das zusammen mit dem A/D
Wandler
zusammen geht
ach ä und übrigenz ich möchte gerne sehen wie du das mit Bleistifft
hinkriegst
Nein ohne EXel gets nicht
Hi Markus, gratuliere!
Ich freue mich mit Dir!
Ich hoffe, Du hast weiterhin viel Spaß damit, alle möglichen Sachen
selbst zu bauen. Der Mensch ist ein schöpferisches Wesen, und etwas
selbst bauen und entwickeln ist kreativ, das gehört zur eigentlichen
Natur des Menschen, und deshalb macht es Spaß.
Ich find's auch gut, dass Du Dir den Warteschleifenrechner gebaut hast
und ihn auch anderen zur Verfügung stellst.
Und das Witzige am Kommentar von Hannes Lux ist ja, dass auch er kein
Geld zurückbekommt, wenn er sein Kalkulationsprogramm nicht verwendet.
;-)
Und sowieso hast Du den Schritt mit dem AD-Wandler ja auch schon wieder
hinter Dir gelassen, vermutlich wolltest Du nicht für jede Servostellung
das Programm bemühen...
Du könntest den Servo über den AD-Eingang jetzt sogar mit allen
möglichen Sensoren steuern.
Das mit dem Timer wirst Du sicher auch noch verstehen, wenn Du dir das
Datenblatt zum Chip genau durchliest, und hier in Forum und Tutorials
steht ja auch so einiges. Es kann sehr nützlich sein, um Impulse zu
erzeugen, Impulslängen zu messen usw.
das mit dem timer hat ich ja schonmal erwähnt
einen timer einstellen der alle 20ms überläuft
damit hast du eine konstante periodendauer von 20ms
mit dem timercompare stellst du ein das der OCx Pin
von 0 an bis zu dem comparewert 1 sein soll und schon ist dieser pin an
das ist vom groben her nur eine einstellsache vom timer her
und du must 2 register beschreiben
einmal das timerzählregister um die 20ms hinzubekommen
und einmal das timercompareregister um die 1-2ms ONzeit zu bestimmen
das ganze läuft dann völlig autonom im timer ab
andere methode ist der PWM modus
auch hier wieder ... 20ms periodendauer einstellen
und im entsprechnden register den wert für die ON-zeit angeben
entsprechend arbeitet der PWM mit dem tastverhältniss von 1/20 bis 2/20
so mal als idee ...
Hi
>Und das Witzige am Kommentar von Hannes Lux ist ja, dass auch er kein>Geld zurückbekommt, wenn er sein Kalkulationsprogramm nicht verwendet.>;-)
Da hast du wohl etwas falsch verstanden. Die Bemerkung von Hannes hat
sich auf den/die Timer im AVR bezogen.
Die Variante mit den Warteschleife funktioniert nur in solchen
Programmen, wo der AVR nichts weiter zu tun hat. Sowie noch etwas
anderes dazu kommt, z.B. eine Anzeige der Servostellung, ist Schluss mit
lustig.
MfG Spess
> Ich find's auch gut, dass Du Dir den Warteschleifenrechner gebaut hast
und ihn auch anderen zur Verfügung stellst.
Und das Witzige am Kommentar von Hannes Lux ist ja, dass auch er kein
Geld zurückbekommt, wenn er sein Kalkulationsprogramm nicht verwendet.
Da muss ich aber Hannes recht geben. Die Zeit, um das
Kalkulationsprogramm zu machen, hätte auch ausgereicht, um die Timer zu
verstehen. Das wäre eine sinnvolle Aktion gewesen. Mit Warteschleifen zu
arbeiten, ist so ziemlich das schlimmste Vergehen beim Programmieren.
Und das man kein Geld zurückbekommt, wenn man das Programm nicht
braucht, versteht sich von selbst- vor allem wenn man nichts dafür
bezahlt hat..... (Open Office)
> Dürfte ich als noch blutiger Anfänger erfahren wie die 0,008 in dem> verlinkten Beispiel zustande kommen?
Vorteiler 1 zu 8 ergibt die "8". Das Ergebnis wäre dann in
Mikrosekunden. Um das Ergebnis in Millisekunden zu bekommen muss die 8
durch 1000 geteilt werden. Das ergibt dann 0,008. Und das alles ohne
EXCEL-Arbeitsblatt und auch ohne C zu können...
;-)
...
Die 0,008 sind in Wirklichkeit 0,008 Millisekunden.
Wie kommen die jetzt zustande?
Der Prozessortakt wird durch 8 geteilt:
1MHz / 8 = 0,125MHz oder in Hz: 1000000Hz / 8 = 125000Hz
Eine Periode von 125000Hz dauert genau 0,008ms. Und genau mit diesen
0,008ms rechne ich.