www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Servo ansteuern mit AVR


Autor: Markus Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du suchst nach PWM ...

hier noch ein Thread zu dem Thema

Beitrag "PWM 50HZ 1.5ms (Servo)"

Grüße,
Michael

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Markus Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soll ich das mit zwei Warteschleifen machen wen Ja mit welchen Werten?

Autor: servo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Markus Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es get mir nicht um die Hardware sondern um die Programierung mit 
Assesemler

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich kann weder C noch Bascom ich kann nur asesembler.

http://www.hanneslux.de/avr/mobau/index.html

...

Autor: Andreas Müller (schnitzeltony)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Markus Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: PJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Markus Neumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: PJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-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

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

...

Autor: PJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß!

Autor: Markus Neumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Markus Neumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja ich hab noch nen servorechner damit kann man die Zahlen einer 
warteschleife ausrechnen

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

...

Autor: Markus Neumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: PJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ...

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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)

Autor: Inox5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: caargoo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

@Inox5

Dürfte ich als noch blutiger Anfänger erfahren wie die 0,008 in dem 
verlinkten Beispiel zustande kommen?

MfG
caargoo

Autor: Kachel - Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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...

;-)

...

Autor: Daniel B. (inox5) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: caargoo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Herzlichen Dank für die Erklärungen.

MfG
caargoo

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.