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.
Du suchst nach PWM ... hier noch ein Thread zu dem Thema Beitrag "PWM 50HZ 1.5ms (Servo)" Grüße, Michael
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
Es get mir nicht um die Hardware sondern um die Programierung mit Assesemler
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
> Ich kann weder C noch Bascom ich kann nur asesembler. http://www.hanneslux.de/avr/mobau/index.html ...
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.
Ach ja ich hab noch nen servorechner damit kann man die Zahlen einer warteschleife ausrechnen
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)
Hallo! @Inox5 Dürfte ich als noch blutiger Anfänger erfahren wie die 0,008 in dem verlinkten Beispiel zustande kommen? MfG caargoo
> 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.
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.