PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Attiny2313 macht Probleme



unix1970
31.08.2011, 14:32
Liebes Forum,

ich bin mir nicht sicher ob ich hier richtig bin, dennoch möchte ich um eure Hilfe bitten.
Es handelt sich um eine Steuerung für einen Servo und einen Motor. Ein Attiny2313 steuert das ganze. Ich habe die Platine gemäß dem Schaltplan geätzt und aufgebaut. Dann habe ich mit WinAVR, in dem ich die beiden C Dateien in das Programmers Notepad gezogen habe, mit selbigen auch auf den Controller gebrannt. Der Compiler hat keine Fehler zurückgegeben. Nun wird der Chip mit Daten wie unten im Anhang gespeist. Der Servo jedoch dreht unabhängig von den Daten nach rechts und die Motorsteuerung läuft überhaupt nicht. Der Controller bekommt wie auch die Platine Strom. Es scheint, dass irgendetwas mit der UART nicht stimmt aber das ist nur eine Vermutung.

Ich hoffe, dass ihr mir bezöglich des Problems weiterhelfen könnt.
Liebe Grüße
Max

Besserwessi
31.08.2011, 16:18
Die UART sollte man erstmal unabhängig vom Rest prüfen. Wenn die Fuses noch unverändert sind, läuft der µC mit ca, 1 MHz internem Takt, auch wenn ein Quarz dran hängt.

Beim Festlegen der Baudrate sollte man das nicht per Case machen, denn das wird ggf. erst zur Laufzeit ausgeführt. GCC ist zwar gut mit der Optimierung, aber hier würde er wohl wenigstens ein static Inline als Hilfe brauchen um die case Anweisung weg zu optimieren. Besser geht das per #ifdef, oder halt direkt mit Ausrechenen der Teilerwerte.


Beim Schaltplan sind mir 2 Dinge aufgefallen: Die LED parallel zum Motor wird nicht unbedingt lange halten, 12 V sind zu viel als Sperrspannung. Da sollte man 2 LEDs antiparallel haben, oder eine Diode dazu. Die 1N400x sind als Freilaufdioden zu langsam - die lieber weglassen und die MOSFET internen Dioden nutzen. Die Steuerung der MOSFETs ist für PWM außerdem reichlich langsam.

unix1970
31.08.2011, 16:35
Ich habe jetzt die Funktion UART_Init auskommentiert und auch den Aufruf in main und dann unter den Aufruf UBRRL = 12; geschrieben da die Baudrate 38400 beträgt jedoch ist die Situation unverändert. Es sind keine Fuses verändert worden.

unix1970
31.08.2011, 16:48
Ich vergaß zu erwähnen, dass ich auf dem Gebiet Microcontroller neu bin, weshalb ich jetzt die Frage habe, ob externer Quarz bei diesem Code notwendig ist.

Besserwessi
31.08.2011, 19:47
Man kann die UART auch mit dem internen Takt nutzen, das ist aber schon an der Grenze. Meist geht es, aber nicht immer zuverlässig.

Ohne ändern der Fuses hat man erstmal nur ca. 1 MHz Takt. Mit dem 1 MHz takt bekommt man die 38,6 KBaud nicht hin. Man kann den Takt im Programm auf 8 MHz internen Takt umstellen über das Register CLKPR. Wie genau kann man im Datenblatt nachlesen, denn das ist mehr als ein einfacher Zugriff.

So hat man erstmal erstmal eine Baudrate von 38,6 K / 8 = 4800 Baud.

Hubert.G
31.08.2011, 20:00
Der Tiny 2313 wird mit aktiviertem CKDIV8 Fusebit ausgeliefert. Dieses Bit ist in den Fuses auszuschalten. Dann läuft der Konroller mit den erforderlichen 8MHz.
Erst dann ist auch eine Baudrate von 38400 möglich und erst dann wird auch das Timing für das Servo funktionieren.

unix1970
31.08.2011, 21:12
Ich habe jetzt das Fuesbit CKDIV8 ausgeschaltet. Der Servo knurrt jetzt, bewegt sich aber nicht. Am Motor ausgang passiert nach wie vor nichts. Also habe ich den Ausgang an das Oszilloskop angeschlossen, habe die Zeit auf 1mS/Cm gestellt. Eine Phase ist nun 2 Striche Lang, also 2ms. Dies bedeutet, dass das ganze 10 mal langsamer sein müsste oder?

Hubert.G
01.09.2011, 13:08
Die Impulse für das Servo sollten alle 20mSec kommen.
Was macht die Serielle Schnittstelle?

unix1970
01.09.2011, 14:07
Die serielle Schnittstelle scheint jetzt zu laufen, jedoch läuft der Servo immer noch dauernd nach rechts und der motor gibt nur Mist aus.

Hubert.G
01.09.2011, 18:42
Das Servo steht bei mir ganz ruhig. Wie ändert man die Position? Da geht bei mir nichts.
Es geht nur Motordrehrichtung umstellen. PWM geht nicht.