PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mein ATmega32-Controller spinnt!



oliher
20.03.2008, 14:27
Hallo,

ich habe den Beitrag auch schon im AVR-GCC-Forum gepostet. Ich denke allerdings der Beitrag ist hier besser aufgehoben.

Verwendeter Conroller: ATmega32

Problembeschreibung:
Ich habe ein Programm in C geschrieben, welches eigentlich auch ohne Probleme funktioniert. Nur kurz zur Info: Bei dem Programm handelt es sich um eine Schrittmotorsteuerung zur Messung von Mikroschaltern.

Das Programm ist so aufgebaut, das es über RS232-Schnittstelle mit dem Controller kommunizieren kann. Ich sende also Befehle an den Controller und bekomme Ergebnisse von meinem Conrollerboard (Eigenentwicklung) zurückgeliefert.

Jetzt kam es schon einige Male vor, das z.B. nicht alle Zeichen, die der Controller an den PC senden sollte vom PC empfangen wurden.
So wurde z.B. statt: "Fehler: Kreuzstellung" nur die Zeichen "Feh" auf dem Hyperterminal des PC empfangen. Oder es wurde ein falsches Zeichen angezeigt, z.B. statt eines "i" wurde das Ascii-Zeichen peek? gesendet.

Und das schlimmste was passiert war, ist, dass sich der Motor selbständig gemacht hatte. Das hätte eigentlich nie passieren dürfen, da das Programm in einer Schleife auf ein externes Startereignis wartet und sich erst dann bewegt. Allerdings fuhr der Schrittmotor auch in die entgegengesetzte Richtung. Das Schrittsignal wird im Übrigen auch softwaretechnisch erzeugt.

Ich hab schon alles kontrolliert, ich habe mir die Controllerkarte nochmals angeschaut, überhaupt alle Leitungen überprüft, den gesamten Aufbau geerdet, nichts.

Der Austausch des Conrollers führte zumindest zu einer Verbesserung, für zwei Tage. Nun wieder dasselbe Problem.

Vielleicht liegt es an meinem Conrollerboard, ich habe die Kondensatoren und den Oszillator nicht direkt am Conroller sitzen, sonder etwas weiter davon entfernt.

Bitte um Hilfe

Ich weiß nicht mehr weiter.

Gruß Oliver

PicNick
20.03.2008, 14:34
Klingt nach Baudraten-Fehler . Versuch mal eine andere Rate, je langsamer, desto besser, logo.

oliher
20.03.2008, 14:44
OK,

danke für den ersten Tipp werde ich versuchen. Außerdem habe ich einen 8MHz Quarz drin. Irgendwo habe ich mal gelesen, dass es besser ist einen 7,3728MHz Quarz zu nehmen. Kann das auch ein Problem sein?

Gruß Oliver

PicNick
20.03.2008, 15:11
Irgendwo gibt's eine Liste, welche Abweichung bei welcher Baudrate bei welchem Quarz entsteht.
Bei dir scheint es einfach kritisch knapp zu sein, weil meistens geht es ja.
Irgendwelche Schwankungen möglich ?

Hubert.G
20.03.2008, 21:18
Die Baudratenfehler und UBRR-Settings stehen im Datenblatt unter USART / Examples of Baud Rate Settings
Fehlende oder ungünstig Positionierte Kondensatoren lassen sich sehr oft durch SMD-Kondensatoren die man zwischen Pins oder direkt auf Leiterbahnen plaziert ergänzen.

pctoaster
20.03.2008, 23:10
OK,

danke für den ersten Tipp werde ich versuchen. Außerdem habe ich einen 8MHz Quarz drin. Irgendwo habe ich mal gelesen, dass es besser ist einen 7,3728MHz Quarz zu nehmen. Kann das auch ein Problem sein?

Gruß Oliver

Ja, verwende einen Baudratenquarz. Und vergiss die Bemerkung, dass es besser geht, wenn die Baudrate langsamer ist. Das ist falsch, auch wenn es hier im Forum ständig wiederholt wird. Entscheidend ist die prozentuale Abweichung von der Sollfrequenz. Diese findest Du im Datenblatt.
Eine andere Möglichkeit ist natürlich auch, daß der Quarzoszillator nicht sauber schwingt. Aber fang erst einmal mit dem Baudratenquarz an.
Warum macht sich der Motor selbstständig ? Weil er einen falschen Befehl empfangen hatte ?

Gruß
pctoaster