Forum: Mikrocontroller und Digitale Elektronik Servoansteurung funktioniert nicht


von jb (Gast)


Lesenswert?

hallo leute,

seid ungefähr zwei wochen versuche ich ein servo anzusteuern, aber 
leider vergebens. Ich benutzte Atmel Studio 6 und den uC ATMEGA128L 
(siehe 
http://www.robonova.de/store/product.php?productid=16147&cat=5&page=1). 
Den Code habe ich von da entnommen 
(http://www.mikrocontroller.net/articles/Modellbauservo_Ansteuerung 
"Signalerzeugung für 1 Servo (C)"). dass einzige was er macht, der Servo 
ruckelt ganz kurz (egal an welchen pin er angeklemmt wird) das war's 
dann auch.
Für hilfe bin ich sehr dankbar.

Wie sieht es eigentlich aus mit dem ATMEGA128L, er ist nicht in der 
Liste von Atmel Studio aufgeführt. Kann ich trotzdem den ATMEGA128 aus 
der Liste nehmen?

Gruß
JB

von Björn R. (sushi)


Lesenswert?

Das Servo muss an Port B 1 angeschlossen werden. Das BEispiel geht von 
1Mhz Takt aus, hast du das auch? Gibt der Compiler irgendwelche 
Warnungen aus?

Andere frage: Copy&Paste ist immer schlecht. Hast du dir Gedanken 
gemacht, wie die Sache funktioniert? Hast du ein Oszilloskop, mit dem du 
nachschauen könntest, wie das Signal aussieht, was der µC erzeugt bzw. 
ob überhaupt eins da ist?

LG, Björn

von jb (Gast)


Lesenswert?

Danke für die schnelle antwort.

Björn R. schrieb:
> Das Servo muss an Port B 1 angeschlossen werden.
Wie kommst du auf Port B1?


> Das BEispiel geht von 1Mhz Takt aus, hast du das auch? Gibt der Compiler 
>irgendwelche Warnungen aus?
Ich denke nicht. Er gibt mir "Build succeeded" aus. Das mit dem F_CPU 
habe ich eh nicht so wirklich verstanden.

> Andere frage: Copy&Paste ist immer schlecht. Hast du dir Gedanken
> gemacht, wie die Sache funktioniert?
meinst du den Code?

>Hast du ein Oszilloskop, mit dem du nachschauen könntest, wie das Signal 
>aussieht, was der µC erzeugt bzw. ob überhaupt eins da ist?
Nein habe ich nicht, da ich kein Oszilloskop besitze. ich weiß nicht wie 
das funktioniert, sorry.

gruß jb

von mahwe (Gast)


Lesenswert?

Da du keine Erfahrung hast probiere erst mal aus eine LED zum blinken zu 
bekommen.
F_CPU ist deswegen wichtig, weil du ein feste
Frequenz brauchst für den uC und ein einstellbares Duty Cycle.
Wenn du das beherrscht bitte weiter machen.
Bedenke auch, dass die Fuse BITS richtig gesetzt werden müssen, damit du 
den externen Quarz benutzen kannst.

von jb (Gast)


Lesenswert?

wie erhalte ich denn die F_CPU?

>Da du keine Erfahrung hast probiere erst mal aus eine LED zum blinken zu
>bekommen.
Würde ich gerne machen, aber die Zeit habe ich nicht.Sorry. ich stehe 
unter zeitdruck.

>Bedenke auch, dass die Fuse BITS richtig gesetzt werden müssen, damit du
>den externen Quarz benutzen kannst
Was meinst du mit externen Quarz?

das ist ja kompliziert als ich gedacht habe :(

auf was muss ich denn alles achten, damit ich einen servo ansteuern 
kann?

es ist sehr wichtig für mich. danke

von Karl H. (kbuchegg)


Lesenswert?

jb schrieb:
> wie erhalte ich denn die F_CPU?

Das ist die Taktfrequenz, die DU am µC eingestellt hast.
IM AUslieferungszustand ist das 1Mhz

Wenn du einen Quarz angeschlossen hast UND dieser Quarz dann auch mit 
den Fusebits aktiviert wurde, dann ist F_CPU eben gleich der 
Quarzfrequenz.

WEnn dein µC das kann, dann kann man den auch per Fuse und ganz ohne 
Quarz schneller laufen lassen.

Aber wie auch immer: F_CPU ist die Angabe für den Compiler, wie schnell 
der µC läuft. Egal ob das jetzt mit einem Quarz, einem Oszillator oder 
dem internen RC-Oszi8llator gemacht wird

AVR-Tutorial

von Karl H. (kbuchegg)


Lesenswert?

> das ist ja kompliziert als ich gedacht habe :(

Von nichts kommt nix.

> auf was muss ich denn alles achten, damit ich einen
> servo ansteuern kann?

Das du deine Grundlagen gelernt hast

> es ist sehr wichtig für mich. danke
Das ist kein Argument. Selbst wenn es noch so wichtig ist, muss ein 
Chirurg auch erst mal seine Ausbildung absolvieren, ehe er das erste mal 
schneiden kann.

von jb (Gast)


Lesenswert?

Was haltet ihr von den buch "AVR Hardware und C-Programmierung in der 
Praxis" von Florian Schäffer. :)

Wie sieht es eigentlich aus mit dem ATMEGA128L, er ist nicht in der
Liste von Atmel Studio aufgeführt. ich habe ATMEGA128 statt ATMEGA128L 
genommen.ist da ok?

Ist es möglich das mir jemand ein Code für einen servo für meinen uC 
schreibt :D

von Falk B. (falk)


Lesenswert?

@  jb (Gast)

>>Da du keine Erfahrung hast probiere erst mal aus eine LED zum blinken zu
>>bekommen.

>Würde ich gerne machen, aber die Zeit habe ich nicht.Sorry. ich stehe
>unter zeitdruck.

Wenn du es eilig hast, gehe langsam.

>>Bedenke auch, dass die Fuse BITS richtig gesetzt werden müssen, damit du
>>den externen Quarz benutzen kannst
>Was meinst du mit externen Quarz?

Deinen Taktgeber, siehe AVR Fuses

>das ist ja kompliziert als ich gedacht habe :(

Jain.

>auf was muss ich denn alles achten, damit ich einen servo ansteuern
>kann?

Vieles.

von Rolf H. (flash01)


Lesenswert?

mh...da kann ich Karl Heinz nur Recht geben.
Ich habe nur einen kleinen Tiny13 vor mir und kämpfe tagelang
damit, um das Register TCCR0A zu verstehen.
Ein sehr komplexes Thema "PWM"!
Das ist nicht eben mal so aus der Hand zu schütteln.

Grüße

Rolf

von mahwe (Gast)


Angehängte Dateien:

Lesenswert?

Du musst ja mehr oder weniger genau eine Takt Frequenz von 1/20ms hin 
bekommen, wenn du einen Servo ansteuern willst .
LED blinken lassen dauert 10 min., solange du das nicht kannst, brauchst 
du auch kein Servo.
Wie sieht dein Makefile aus hast du das richtig erstellt?
Lade XXX.c und dein Makefile mal hoch.
Anbei ein Testfile dort musst du jeweils das Makfile und die C Datei 
ändern von MEGA 8 auf was auch immer und den CPU Takt und natürlich die 
Ports.

makfile habe ich mit MFILE erstellt.
Fuse bits mit AVR Burn-O-Mat
und zum programmieren Programmers Notepad

von Uwe (Gast)


Lesenswert?

> Würde ich gerne machen, aber die Zeit habe ich nicht.Sorry. ich stehe
> unter zeitdruck.
Anders dauert es noch länger. Es geht zumeist schneller selber den Code 
zu schreiben als fertigen Code zu benutzen. Zumindest wenn man keine 
Ahnung hat.
Denn um den Code eines ANDEREN zu verstehen braucht man mehr erfahrung 
als eigenen Code zu schreiben.

von Marwin (Gast)


Lesenswert?

jb schrieb:

> Ist es möglich das mir jemand ein Code für einen servo für meinen uC
> schreibt :D

Sicher, hier im Markt kannst du dein Projekt vergeben:

http://www.mikrocontroller.net/forum/markt

von Uwe (Gast)


Lesenswert?

und du mußt den Code verstehen falls nicht Alles genau vorgegeben ist 
und dir bis ins i-Tüpfelchen erklärt wird. Falls jemand gewillt ist dies 
FÜR DICH zu machen. Jedoch hört sich die die Aussage "Ich stehe unter 
Zeitdruck" so an als gehe es um Hausaufgaben. Und die MACHT dir hier 
keiner, aber wir geben gerne Hilfestellug bei Problemen und Fragen. Wir 
bringen jedoch keinen copy&paste Code für dich zum laufen.

von jb (Gast)


Lesenswert?

also, ich habe keine makefiles erstellt und kein fuse gesetzt oder wie 
auch immer. das einzige was ich gemacht habe, ist den code kopiert und 
in atmega studio eingefügt. aber wie ich sehe, braucht man mehr als nur 
kopieren und einfügen :(

uwe schrieb:
>Jedoch hört sich die die Aussage "Ich stehe unter
Zeitdruck" so an als gehe es um Hausaufgaben
die richtung stimmt fast :)

statt eines LEDs kann man auch ein multimeter einsetzten?

gruß

von Karl H. (kbuchegg)


Lesenswert?

Rolf Hegewald schrieb:
> mh...da kann ich Karl Heinz nur Recht geben.
> Ich habe nur einen kleinen Tiny13 vor mir und kämpfe tagelang
> damit, um das Register TCCR0A zu verstehen.
> Ein sehr komplexes Thema "PWM"!

Aber nur am Anfang, wenn man noch nichts darüber weiß.
Hat man das Ganze erst mal verstanden, ist es geradezu trivial.
(Wie fast alles im Leben)

Und genau darum geht es: Ehe man sich an ein Projekt wagt, ist es 
vernünftig erst mal abseits vom Projekt eine bestimmte Funktionaliät zu 
'erforschen'. Ist man dann im Zustand, das man sich mit der Hand an die 
Stirn klopft und ausruft "Hey, das ist doch eigentlich ganz simpel", 
dann ist das Ganze im Projekt im Handumdrehen implementiert. Und das 
Beste daran: Wenns nicht auf Anhieb klappt (weil man einen dummen Fehler 
gemacht hat), dann ist man sogar selbst in der Lage, in ein paar Minuten 
das Problem zu identifizieren und zu beheben.

von jb (Gast)


Lesenswert?

alles klar, habe es verstanden. danke für die antworten.

eine frage habe ich aber noch, wie sieht es denn aus mit avr studio 6 
und ATMEGA128L sind die beide kompatibel? der atmega128l ist nicht in 
der liste aufgeführt. kann ich statt atmega128l den atmega128 nehmen?

gruß

jb

von Karl H. (kbuchegg)


Lesenswert?

Da beide im selben Datenblatt abgehandelt werden, sind sie wohl 
softwaremässig soweit kompatibel. Die wenigen Stellen, an denen im 
Datenblatt der Mega128L explizit erwähnt wird, sind für die 
Programmierung alle irrelevant und beziehen sich nur auf elektrische 
EIgenschaften.

(Mega128?  Nicht vergessen die M-103 Fuse abschalten. Sonst geht eine 
Menge anderes Zeug schief)

von jb (Gast)


Lesenswert?

>(Mega128?  Nicht vergessen die M-103 Fuse abschalten. Sonst geht eine
>Menge anderes Zeug schief)
das wäre meine nächste frage...wo wird es denn abgeschaltet

von jb (Gast)


Angehängte Dateien:

Lesenswert?

meinst du das im roten kästchen?

von jb (Gast)


Angehängte Dateien:

Lesenswert?

hallo ich bin noch mal :)


ist das nicht im roten kästchen die taktratea, also die F_CPU? :D

von Karl H. (kbuchegg)


Lesenswert?

Könnte hinkommen.
Es ist ein Quarz mit 7.3728 MHz. Da es diese Quarzfrequenz tatsächlich 
gibt und es sich dabei auch um einen sog. Baudratenquarz handelt ist das 
also gut möglich, dass dieser Quarz den µC taktet.

Jetzt ist nur noch die Frage: Ist der Quarz auch aktiv?
Das lässt sich mit einem Testprogramm, welches mittels _delay_ms(1000) 
alle 1 Sekunde einen Ausgansgpin toggelt (an dem zb eine LED sitzt) 
leicht ermitteln.


Edit: Wo hast du das Board her? Ist das neu, oder ist da schon mal was 
drauf gelaufen? Wenn da schon mal was drauf gelaufen ist, dann würde ich 
die Wahrscheinlichkeit als hoch einschätzen, dass er Quarz aktiv ist, 
bzw. M103 abgeschaltet wurde. Nachmessen würde ich die Taktfrequenz in 
Form eines Delay-Blinktests aber trotzdem. Sicher ist sicher.

von jb (Gast)


Lesenswert?

>Das lässt sich mit einem Testprogramm, welches mittels _delay_ms(1000)
>alle 1 Sekunde einen Ausgansgpin toggelt (an dem zb eine LED sitzt)
>leicht ermitteln.
kann man anstatt eines LEDs einen multimeter verwenden, da ich jetzt 
keine LED zur Hand habe. Falls ja, wie ist der multimeter anzuklemmen? 
An GND und Signal?

von Karl H. (kbuchegg)


Lesenswert?

jb schrieb:
>>Das lässt sich mit einem Testprogramm, welches mittels _delay_ms(1000)
>>alle 1 Sekunde einen Ausgansgpin toggelt (an dem zb eine LED sitzt)
>>leicht ermitteln.
> kann man anstatt eines LEDs einen multimeter verwenden, da ich jetzt
> keine LED zur Hand habe. Falls ja, wie ist der multimeter anzuklemmen?
> An GND und Signal?

Du kannst verwenden was immer du willst. Hauptsache du kriegst mit ob 
der Pin im steten Wechsel 1 Sekunde auf High und 1 Sekunde auf Low ist. 
Ob das eine LED ist, ein Summer, eine per Föhn angetriebene Vuvuzela, ob 
du dir damit im Sekundentakt Elektroschocks verabreichst (nicht ernst 
gemeint) oder dem Goldfisch das Licht ein/ausschaltest .... die 1 
Sekunde sind wichtig, nicht was du damit machst.

Ja klar. Masse musst du sowieso immer verbinden. Also schwarzes Kabel 
vom Voltmeter an GND, rotes Kabel an den Pin. Am Voltmeter den 
entsprechenden Messbereich einschalten. Wobei: Bei einem Voltmeter würd 
ich die Zeit auf 5 Sekunden erhöhen, denn so digitale Voltmeter haben 
die Eigenschaft, dass der Zahlenwert ein bischen braucht bis er dann auf 
5V ist.

Ob bei deinen Messungen rauskommt, dass die Zeit anstelle von zb 5 
Sekunden doch 4.8 Sekunden sind, ist nicht so wichtig. Da hast du dich 
dann vermessen (was bei einem Voltmeter nicht ungewöhnlich ist, seine 
Anzeige hängt ein wenig nach). Die UNterschiede um die es hier geht, 
sind 7.3Mhz zu 1Mhz. Also ein Faktor 7. Und den Unterschied zwischen 5 
Sekunden und 35 Sekunden kann man dann mit freiem Auge gut sehen :-)


Und besorg dir ein paar LED samt Vorwiderständen. Die braucht man immer 
wieder mal. Und sei es nur als Indikator, damit sich das Programm 
bemerkbar machen kann. Als Anfänger dahinprogrammieren, ohne eine 
Möglichkeit zu haben, wenigstens die allereinfachsten 'Statusmeldungen' 
ausgeben zu können, ist 'Stochern im Nebel'. Für einen Anfänger ist es 
mit das Wichtigste, eine wie auch immer geartete Möglichkeit zur Ausgabe 
zu haben. LED sind gut, UART ist besser, LCD ist auch besser. Nichts 
derartiges zu haben, ist wie der Versuch beim Auto einen Motorschaden zu 
diagnostizieren ohne die Motorhaube aufzumachen.

von jb (Gast)


Lesenswert?

super erklärt. vielen dank :)

von jb (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
>Edit: Wo hast du das Board her? Ist das neu, oder ist da schon mal was
>drauf gelaufen? Wenn da schon mal was drauf gelaufen ist, dann würde ich
>die Wahrscheinlichkeit als hoch einschätzen, dass er Quarz aktiv ist,
>bzw. M103 abgeschaltet wurde. Nachmessen würde ich die Taktfrequenz in
>Form eines Delay-Blinktests aber trotzdem. Sicher ist sicher.

vom Prof :D das board ist neu

p.s. ich habe ein bild hochgeladen wo der M103 (falls er das ist, siehe 
vorherigen beitrag) ausgeschaltet ist.

von Cyblord -. (cyblord)


Lesenswert?

jb schrieb:

> vom Prof :D das board ist neu

Heißt das, du bist Student, und machst ein Projekt ohne Ahnung von den 
Grundlagen zu haben und ohne Zeit dir diese Grundlagen anzueignen und 
willst sogar noch dass andere deinen Code schreiben? Wie geht denn 
sowas?

gruß cyblord

von Karl H. (kbuchegg)


Lesenswert?

jb schrieb:

> p.s. ich habe ein bild hochgeladen wo der M103 (falls er das ist, siehe
> vorherigen beitrag) ausgeschaltet ist.

Jau.
Sieht wohl so aus als ob sie das wäre.

von jb (Gast)


Lesenswert?

>Heißt das, du bist Student, und machst ein Projekt ohne Ahnung von den
>Grundlagen zu haben und ohne Zeit dir diese Grundlagen anzueignen und
>willst sogar noch dass andere deinen Code schreiben? Wie geht denn
>sowas?
grundlagen habe ich schon. bin erst im 2. semster und mit atmel habe ich 
noch nichts gemacht.

von jb (Gast)


Lesenswert?

hallo
bin jetzt bisschen mit allem verwirrt. Benötige ich einen burner, um den 
Code auf den uC zu übertragen oder bringt studio 6 alles mit.

gruß

von Marwin (Gast)


Lesenswert?

cyblord ---- schrieb:

>Wie geht denn sowas?

Du siehst doch, wie sowas geht. Man postet im Mikrocontroller Forum so 
lange, bis die ueblichen Leute, deren Leben von ihrem Helferkomplex 
bestimmt wird, anbeissen.

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
Noch kein Account? Hier anmelden.