PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : servo Tackert nur



Basteltisch
10.09.2009, 20:41
Hallo,
also ich hab mir folgenden Quellcode zusammengebastelt:


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000


Config Servos = 1 , Servo1 = Portc.0 , Reload = 10

Config Portc = Output

Enable Interrupts

Do

Servo(1) = 100
Waitms 100
Servo(1) = 150
Waitms 1000
Loop

Der Servo sollte als erst auf Pos 100 fahren, danach auf 150 und wieder zurück auf 100 und so weiter.

Nunja, servo hat seine 5 V (hab den 5€ Servo von Conrad) , ist mit Port C.0 verbunden, und tackert leise vor sich hin.
Also drehen tut sich nichts. Nur ein leises tackern höhr ich.
Was hab ich da falsch gemacht?

Es grüßt,
Basteltisch

Michael
10.09.2009, 20:56
Hallo Basteltisch,

fürt den Bascom-Befehl Servo braucht dein Prozessor mindestens 8 MHz, das kannst du ja noch per Fuse umstellen.
Außerdem hast du 0,1s Pause zwischen den beiden Befehlen, diese Zeit reicht nicht, um die Position anzufahren.

Gruß, Michael

Basteltisch
11.09.2009, 17:30
Hallo,
danke für die Antwort.
Ich habe einen ATMEGA32, aber welcher von den vielen Fusebits ist das denn?
Ich habe jetzt Fisebit KLA987 geändert, und zwar zu einem Eintrag bei dem 8MHZ dabei stand.

Aber nun funktioniert die Verbindung zum AVR nichtmehr, und auch ein anderer an dem ich nichts geändert habe gibt den Fehler FFFFFFF zurück. Habe die Verbindungen schon geprüft, da ist nichts falsch.

Ahja jedesmal wenn ich Strom auf die Schaltung gebe dreht der Servo sich ein kleines bisschen. Ist das normal?

Es grüßt,
Basteltisch

Sauerbruch
11.09.2009, 17:49
Hi Basteltisch,

einen sehr hilfreichen Fusebit-Kalkulator gibt es hier:

http://www.engbedded.com/fusecalc/

Die gewünschten Einstellungen kann man in Klartext auswählen, und das Tool gibt Dir das dazugehörige High- und Low-Byte aus. Kann ich nur wärmstens empfehlen.

Wenn der selbe Fehler mit ´nem anderen Mega32 auch auftritt, wird´s wohl an der Verbindung zum PC liegen...

Horstel
11.09.2009, 18:05
öhm
du hast aber auch nen 8MHz quarz an deinem Controller angeschlossen oder ? einfach nur das Fusebit auf 8Mhz stellen macht den Controller ja nicht schneller ^^

LG

Basteltisch
11.09.2009, 18:15
Hallo,
also so einen Quarz den ich hier hab (silbernes Metallteil) habe ich jetzt mal nachträglich angeschlossen.
Es kommt bei beiden der selbe Fehler FFFFFFFF
aber wie kann das denn sein, ich habe doch garnichts an der Verkabelung geändert. Das Problem trat erst auf nachdem ich die Fusebits umgestellt habe.

Was kann ich da noch tun?

Es grüßt,
Basteltisch

Horstel
11.09.2009, 21:26
Zum Quarz gehören aber noch Kondensatoren hast du die auch mit angeschlossen ?
Mit den Fusebits kann man ganz schnell die Kommunikation mit dem PC unmöglich machen. Wenn die im Controller eingestellte Frequenz nicht zur tatsächlichen Frequenz passt kann der Controller die daten nicht richtig timen.
Teilweise kann es dann problematisch sein die Fusebits wieder zurück zu stellen weil keine Kommunikation aufgebaut werden kann. Aber so genau kenn ich mich da auch noch nicht aus hab erst einmal Fusebits verstellen müssen und da hat zum Glück alles auf anhieb funktioniert.

Basteltisch
11.09.2009, 21:43
Hallo,
ja Kondensatoren sind 2 Stück drann, beide zwischen den Pins des Quarz und GND.

Muss ich nu also einen neuen ATMEGA32 kaufen?

Es grüßt,
Basteltisch

Sauerbruch
12.09.2009, 08:49
Muss ich nu also einen neuen ATMEGA32 kaufen?

Wahrscheinlich nicht. Wenn sich auch ein unverstellter Controller nicht ansprechen lässt, wird der Fehler höchstwahrscheinlich irgendwo zwischen Board und PC liegen - was auch im er da bei Dir ist.

Mit den Fuses kann man im Prinzip zwei ungewollt blöde Dinge anstellen:

1. Man kann die Taktquelle auf "Extern" Programmieren. D.h. der interne Oszillator ist aus, und der Quarz-Oszillator ebenfalls - auch wenn ein Quarz angeschlossen ist. Der Controller funktioniert dann nur (einschließlich Kommunikation mit dem PC), wenn ein externes Rechteck-Signal an dem entsprechenden Anschluss anliegt. Beim Mega32 ist das Pin Nr. 13 oder auch XTAL1. Kleine Rechteckgeneratoren mit z.B. 1 MHz bekommt man heute schon für ´n paar Cent in den einschlägigen Elektronikshops. Leg einfach mal ein Rechtecksignal an Pin 13 und sieh was passiert.

2. Das SPIEN-Fusebit löschen.
Das ist ziemlich blöde, weil dadurch die komplette serielle Kommunikation lahmgelegt wird. Dieser Schritt ist ´ne Einbahnstraße, weil für alle weiteren Änderungen der Fuses eben diese serielle Kommunikation nötig wäre. In diesen Fällen hilft nur noch ein so genanntes "high-voltage"-Programmiergerät - und die gibt´s leider nicht für ein paar Cent in den einschlägigen Elektronikshops.

Aber wie gesagt, ich glaube, dass das Problem nicht im Controller selbst liegt.

Viel Erfolg!!

Basteltisch
12.09.2009, 09:41
Hallo,
danke für die Antwort.
Dann werde ich mich einmal nach so einem Viereck umsehen.
Bei Conrad und Reichelt habe ich nun aber keinen gefunden. Wo gibt es die noch?

Und es kommen unterschiedliche Fehler: Wenn kein AVR eingesteckt ist kommt der Fehler 000000
wenn einer eingesteckt ist kommt der Fehler FFFFFFFFF

Also liegt doch der Fehler am AVR oder nicht? Eine Verbindung zum AVR besteht aufjedenfall, er erkennt ihn nur nicht.

Es grüßt,
Basteltisch

021aet04
12.09.2009, 11:46
Was meinst du mit Viereck. Wenn du einen Rechteckgenerator suchst, den hat auch Conrad. Einige gute Quellen sind ELV, Conrad, Distrelec. Es könnte sein, dass einfach das Timing falsch ist. Wenn er alles F schreibt, sendet er etwas, aber im Falschen Takt. Entweder du versuchst es mit einem Rechteckgenerator wie oben beschrieben. Du solltest aber gleich einen Atmega dazubestellen. Sicher ist sicher.

Sauerbruch
13.09.2009, 21:47
Einen von etwa tausenden findest Du z.B. bei Firma "C" unter der Artikel-Nr.: 179426 - 62. Oder "Quarzoszillator" als Schnellsuch-Begriff eingeben. Dann kommen die anderen 999 :-)

[/url]

Basteltisch
14.09.2009, 15:12
Hallo,
nun bin ich verwirrt.
Brauche ich nun so ein Rechteck oder einen Quarz oder einen Quarzozzillator?

Also einen Quarz habe ich schon, denke ich.

Es grüßt,
Basteltisch

Lync
14.09.2009, 16:08
einen ganz normalen quarz mit 2 "beinchen"

Michael
14.09.2009, 18:43
Hallo Basteltisch,

es muß nicht gleich ein Quarzoszillator sein, um einen verfusten AVR wieder zum Leben zu erwecken.
Ein Taktsignal gibt es aus vielen Quellen, man kann z.B. die gute alte Blinkschaltung aus 2 Transistoren mit kleineren Kondensatoren betreiben oder einen NE555 benutzen. Auch Operationsverstärker oder negierende Logikgatter geben gute Oszillatoren ab.
http://images.google.de/images?gbv=2&hl=de&safe=off&sa=1&q=taktgeber&btnG=Bilder-Suche&aq=f&oq=&start=0

Gruß, Michael

Basteltisch
17.09.2009, 21:37
Hallo,
so habe mir jetzt 3 ATMEGA8 bestellt. dann muss ich nicht immer die guten 32er verheizen. Ausserdem noch Quarze in folgenen stärken:
1mhz, 8mhz, 12mhz und 20mhz.
der 12mhz ist schonmal für den servo reserviert.


Ich habe noch eine Frage zu diesem Bild:

http://www.rn-wissen.de/index.php/Bild:Avr8.jpg

das ist ein ATMEGA8, aber da ist kein Quarz angeschlossen. Ich dachte immer die bruachen unbedingt einen Quarz. Wieso dieser nicht?

Es grüßt,
Basteltisch

oberallgeier
17.09.2009, 21:50
Hi

der mega8 und auch andere Controller brauchen nicht unbedingt einen Quarz. Sie haben einen internen Oszillator, der per Fuse angewählt werden kann und - bei Atmel - üblicherweise mit 8 MHz oder 1 MHz tackert. Dieser Takt ist aber NICHT quarzgenau - da kann es Abweichungen im Prozentbereich geben. WENN das reicht, braucht man weder einen Quarz noch die meist dazu erforderlichen Kondensatoren. Die Atmel-Controller werden so ausgeliefert, dann braucht man zum Flashen keinen Quarz, hat dann aber den niedrigen Takt. Das steht übrigens alles in der zugehörigen Dokumentation. Ich betreibe z.B. einen Pacer mit einem ATtiny13 ohne Quarz, das geht über eine Stunde mit ner Abweichung im Sekundenbereich - je nach Temperatur. Auch mein Servotester läuft ohne Quarz.

Bei dem Bild steht ja auch "Minimalbeschaltung".

Basteltisch
20.09.2009, 11:09
Hallo,
ich habe jetzt mehrere Quarz Oszilatoren. (Kann ich die auch einfach Quarz nenen oder ist das was anderes?)

Allerdings haben diese 4 Beinchen. Dazu habe ich folgendes bei Reichelt gefunden:
Anschlüsse:
· 1 nicht beschaltet
· 7 Masse
· 8 Ausgang
·14 Speisespannung

(http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=B42;GROUPID=3174;ARTICLE=1 3673;START=0;SORT=user;OFFSET=100;SID=29EgvHjKwQAR 0AACIoquwf6e28ce8979e4baaffe174ec04ed33b1)

Wo ist denn Pin1, wo ist 14?
Und an welchen Pin des AVR kommt der Ausgang?

Eine Doku ist dort leider nicht hinterlegt.

Dann werde ich mal versuchen den MEga8 zum leben zu erwecken und mit ihm den Servo zu steuern :)

Es grüßt,
Basteltisch

021aet04
20.09.2009, 11:44
Es sind 3 abgerundete Ecken und 1 spitze Ecke. Das ist Pin 1. Der Quarz ist so groß wie ein IC im Dip 14 Gehäuse. das bedeutet, dass du auch so zählen musst.
http://www.bilder-hochladen-kostenlos.de/files/imagecache/600x400/Quarz.JPG

Sauerbruch
20.09.2009, 11:51
(Kann ich die auch einfach Quarz nenen oder ist das was anderes?)

Es gibt 3 grundsätzliche Arten einen AVR zu takten. Mit welcher Variante der Controller läuft, wird mit den Fusebits festgelegt.

Variante 1 ist der interne Oszillator. Der schwingt ganz ohne externe Bauteile, und deshalb sind die Fuses im Auslieferungszustand auch so programmiert, dass genau dieser interne Oszillator aktiv ist. Sonst könnte man mit den Dingern ja überhaupt nicht kommunizieren.

Variante 2 ist ein interner Oszillator, der aber als frequenzbestimmendes Bauteil einen externen Qurz braucht. Ohne schwingt er verständlicherweise nicht. Quarze sind passive Bauteile, haben 2 Beinchen und können nicht von alleine schwingen. Sie brauchen immer etwas Elektronik um sich herum, die Schwingungen erzugen kann.

Variante 3 ist ein komplett von außen eingespeister Takt. Das macht z.B. Sinn, wenn mehrere Controller exakt (!) gleich getaktet werden sollen. Dazu nimmt man ein extern erzeugtes Rechtecksignal und speist es in alle beteiligten Controller ein. Hierzu braucht man einen aktiven Taktgenerator, also einen Quarzoszillator (!).

Und genau das ist der Unterschied zwischen passiven Quarzen und aktiven Quarzoszillatoren.

Beim Mega32 muss ein externes Taktsignal in Pin 13 (oder auch XTA1) eingespeist werden. Wie´s beim Mega8 ist, müsste ich im Datenblatt nachsehen... das kannst Du aber auch - das übt ungemein :-)

Wenn´s damit auch nicht klappt, stimmt definitiv was mit der Verbindung PC - Mikrocontroller nicht.

Basteltisch
20.09.2009, 12:33
Hallo,
danke für die tolle Erklärung. Also könnte es ja auch sein, dass ich beim ATMEGA32 den Takt auf einen aktiven externen Quarzoszilator (gibt es davon eine Abkürzung?) gesetzt habe und mit meinem 2Pin Quarz deswegen nicht weiterkahm.

Und vielen dank für das Bild, habs mir ausgedruckt und an die Wand gehängt :)

Ich schreib dann mal im Edit an welchen Pin der Quarz drann muss.
Aber kann man nicht allgemein sagen, dass das auch der XTA1 anschluss ist weill er genau so heisst? Wenn nicht dann hab ich ein Problem mit der Programmierbelegung des ATMEGA8, ich habe die Kabel einfach dort angeschlossen wo die Pins genau so heissen wie beim ATMEGA32

:
http://rn-wissen.de/images/8/84/Pinbelegungmega8.gif

und

http://rn-wissen.de/images/c/cf/Avrtutorial_grundschaltung_mitisp.gif

nun mal sehen ob sich gleich etwas bewegt.

Es grüßt,
Basteltisch


edit: ok habs gefunden: PB6 alias XTAL1 ist der Input für den Oszilator.

Sauerbruch
20.09.2009, 12:46
Aber kann man nicht allgemein sagen, dass das auch der XTA1 anschluss ist weill er genau so heisst?

Kann man schon - nur ob´s stimmt oder nicht, das verrät Dir NUR das Datenblatt!!

Man braucht vor diesen Dingern gar keine Angst zu haben, auch wenn sie über 100 Seiten haben und auch noch auf Englisch geschrieben sind. Aber wenn Du über den Tellerrand der berühmten blinkenden LED hinausschauen möchtest, wirst Du früher oder später definitiv Informationen aus dem Datenblatt brauchen. Frag´ mal hier im Forum nach :-)
Die Datenblätter gibt´s auf der ATMEL-Homepage zum downloaden.

Aber es sei schonmal vorneweg gesagt, dass die Anschlüsse MOSI, MISO, SCK und Reset beim Mega8 in der Tat genauso zu verwenden sind wie beim Mega32!

Gutes Gelingen,

Daniel

Basteltisch
20.09.2009, 17:04
Hallo,
habe gerade gemerkt, dass mein Wannenstecker nicht richtig im Board steckte, da die Pins VIEL zu kurz sind. Zumindest wird der ATMEGA8 nun erkannt :)

Folgendermassen ist mein Wannenstecker festgemacht:

http://www.bilder-space.de/thumb/20.097iPTNEAssbdGc3X.jpg (http://www.bilder-space.de/show.php?file=20.097iPTNEAssbdGc3X.jpg)

http://www.bilder-space.de/thumb/20.09YSgWUG8Q1CJHwJq.jpg (http://www.bilder-space.de/show.php?file=20.09YSgWUG8Q1CJHwJq.jpg)

http://www.bilder-space.de/thumb/20.09s7W5qEiYWctahkt.jpg (http://www.bilder-space.de/show.php?file=20.09s7W5qEiYWctahkt.jpg)

Ich habe den Wannenstecker von Reichelt. Ich habe die Pins nach aussen gebogen damit diese auf 2 Seiten eines Experimentierboards passen. Ausserdem habe ich auf der Rückseite 4 Pins zusammengelötet, 3 davon gekürzt, damit diese mit einem Kabel nach GND laufen können.
Aber das ist scheinbar nicht so optimal.

Wie wird das sonst gemacht?

Ich werde dann jetzt mal wieder versuchen den Servo zum laufen zu bringen. Welches Fusebit muss ich denn diesesmal auswählen das mit meinem Quarzozzilator mit 8Mhz Kompatibel ist? Aus diesem Rechner bin ich nicht schlau geworden.

Es grüßt,
Basteltisch

oberallgeier
20.09.2009, 17:44
... Wannenstecker ... Wie wird das sonst gemacht ...So (nur für diese Fotosession NICHT ganz ins Board gesteckt) wirds gemacht. Der Stecker ist eine SMD-Ausführung *ggg* deshalb gehen die Beine nicht durch die Platine sondern sind aufgelötet :

................http://oberallgeier.ob.funpic.de/ISP_1803.jpg

Viel Erfolg

Basteltisch
24.09.2009, 18:18
Hallo,
jetzt brauche ich aber nochmal eure Hilfe bei der FuseBit auswahl.
Ich möchte an einen ATMEGA8 einen externen Quarzoszilator mit 8 MHZ anschliessen (4 Pins) um den Servo betreiben zu können. Nun hab ich folgendes in der Liste gefunden was ich nehmen würde:

0010000: Ext. RC Osc. 8MHz - 12 MHZ
und
0110000: Ext. RC Osc. 8MHZ - 12 MHZ
und
1010000: Ext. RC Osc. 8MHZ - 12 MHZ


aber welcher davon ist nun der richtige?
Worin liegen dort die Unterschiede?

Es grüßt,
Basteltisch

edit:
ich werd bekloppt das funktioniert!
Habe 11111111 genommen weill es im Tutorial so vorgegeben war, und zwar ohne das ein bestimmter Quarz / Oszilator dort angegeben wurde. Scheint also eine Allgemeinlösung zu sein.

Nun dreht sich der Servo fröhlich nach folgendem Schema hin und her:


$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000

Config Servos = 1 , Servo1 = Portc.2 , Reload = 10

Config Portc.2 = Output

Enable Interrupts
Do
Servo(1) = 100
Waitms 1000
Servo(1) = 150
Waitms 1000
Loop

Vielen vielen dank für eure Hilfe, ohne euch hätt ich das niemals hinbekommen.

Es grüsst,
(ein überglücklicher) Basteltisch

Sauerbruch
24.09.2009, 22:18
Na - dann mal ganz herzlichen Glühstrumpf & viel Spaß bei neuen Projekten!!

Die Funktion "Ext. RC Osc." heißt, dass zwar ein "interner" Oszillator aktiv ist, der aber als frequenzbestimmende Komponente ein externes (!) RC-Glied benötigt. Wie der Widerstand und der Kondensator angeschlossen werden müssen und wie sich aus ihren Werten die Frequenz errechnet, findet man im Datetenblatt.

Was Du suchst ist "Ext clock" - da schwingt nix intern, sondern der Controller hängt ganz und gar an einem extern erzeugten Rechtecksignal.

All das kann man bestens im Fusecalculator ansehen, URL hatte ich ja schon mal gepostet. Dieses Ding ist wirklich sehr hilfreich, als Attachment hänge ich mal einen kleinen Screenshot dran.

Denn noch viel Spaß bei den nächsten Schritten!!