PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linker motor läuft immer...Hilfe!!!



NXTman
09.11.2009, 18:20
Hallo Comunity,

Ich habe endlich meinen asuro aufgebaut. Beim Selbsttest ging alles reibungslos aber wo ich ihn das erste mal programmiert habe ( habe nur programmiert dass StatusLed rot leuchten soll ) war die enttäuschung groß, weil sich der linke motor gedreht hat (vorwäts).
Bitte helft mir wäre sehr dankbar!!!

Gruß Chris

radbruch
09.11.2009, 18:34
Init() vergessen? Zeige uns dein Programm, wenn du Glaskugelsprüche vermeiden willst.


aber wo ich ihn
aber als... (sorry;)

askazo
09.11.2009, 18:34
Wenn der Selbsttest geht scheint's ja nicht an der Hardware zu liegen. Du müsstest uns also schon Deinen Code zeigen, damit wir Dir helfen können...

Hubert.G
09.11.2009, 18:36
Und wie soll man dir helfen?
Wenn ich dir schreibe das der Fehler in Zeile 34 ist, wirst du es mir nicht glauben.
Wenn es mit dem Selbsttest funktioniert, dann musst du den Fehler im Code selbst suchen oder ihn hier hereinstellen.

NXTman
09.11.2009, 20:24
Das ist ein neues programm:


#include "asuro.h"

int main(void)
{
unsigned char tasterzustand;
Init();
tasterzustand=PollSwitch();
while (1)
StatusLED(RED);
sleep(255);
BackLED(ON,ON);
Sleep(255);
FrontLED(ON);
sleep(255);

return 0;

if (tasterzustand > 7) // Hier macht er es nur wenn Taster K1 bis K3 gedrückt werden und zwar in beliebiger Kombination, d.h. auch alle zusammen. (Siehe Tabelle in deinem letzten Thread. einfach addieren)
{
MotorDir(RWD,BREAK);
MotorSpeed(120,0);
}

else if (tasterzustand > 0 && tasterzustand <= 7) // analog zu oben nur hier K4 bis K6
{
MotorDir(BREAK,RWD);
MotorSpeed(0,120);
}

else // Hier ist keiner gedrückt (tasterzustand == 0)
{
MotorDir(RWD,RWD);
MotorSpeed(120,120);
{
}
return 0;
}
sry hab ich vergessen...

Edit: Ich habs rübergeflasht und da hat er noch das selbe gemacht wie vorher.

Valen
09.11.2009, 22:29
Die while schleife funktioniert nicht denke ich. Jedenfall fehlt dort einer "{" klammern. Wie du das compiliert gekriegen hat ohne warnung ist mich einer rädsel.

Die erste "return 0;" gehört dort im mitten auch nicht. Die "return 0;" am ende deines program reichtst.

KingTobi
09.11.2009, 22:50
Die while schleife funktioniert nicht denke ich. Jedenfall fehlt dort einer "{" klammern. Wie du das compiliert gekriegen hat ohne warnung ist mich einer rädsel.
Klar geht sowas! Er führt dann in einer unendlichen Schleife den nächsten Befehl nach while aus. "while(1) 1+1;" ist z.B. auch gültig, aber sinnlos.


Die erste "return 0;" gehört dort im mitten auch nicht. Die "return 0;" am ende deines program reichtst.

Stimmt, aber in seinem Fall kommt er da eh erst garnicht hin.

Valen
10.11.2009, 00:09
Du hast recht. Es wurde immer beim

while (1) StatusLED(RED);

stecken bleiben. Das obene gepostete program kan aber nicht richtig compiliert sein weil es nicht das gleichen anzahl von "{" und "}" klammern hat. Und irgendwie muss sein Asuro an die Motorspeed befehl ran gekommen sein. Sonnst geht das linken rad nicht forwärts. Oder NXTman hat seiner Linkern Rad beöbachtung gemacht auf basis einer altere version seines Program. (vieleicht ohne das zu wissen)

Osser
11.11.2009, 09:55
Hi NXTman,

wie meine Vorredner schon sagten, der Kode stimmt so nicht.

Hab deinen Kode überarbeitet, syntaktisch und indent, aber nicht die Funktion an sich. Habe drei Stellen auskommentiert, da das semantich/syntaktisch falsch war.


#include "asuro.h"

int main(void) {
uint8_t tasterzustand;
Init();
tasterzustand = PollSwitch();
while (1) {
StatusLED(RED);
sleep(255);
BackLED(ON,ON);
Sleep(255);
FrontLED(ON);
sleep(255);

//return 0; // OM> das darf hier nicht stehen!!

if (tasterzustand > 7) {
// Hier macht er es nur wenn Taster K1 bis K3 gedrückt werden und
// zwar in beliebiger Kombination, d.h. auch alle zusammen. (Siehe
// Tabelle in deinem letzten Thread. einfach addieren)
MotorDir(RWD,BREAK);
MotorSpeed(120,0);
} else if (tasterzustand > 0 && tasterzustand <= 7) {
// analog zu oben nur hier K4 bis K6
MotorDir(BREAK,RWD);
MotorSpeed(0,120);
} else {
// Hier ist keiner gedrückt (tasterzustand == 0)
MotorDir(RWD,RWD);
MotorSpeed(120,120);
// { // OM> das darf hier nicht stehen!
}
}//while(1)... // OM> das hat gefehlt

return 0;
}


Gruss,

O.

NXTman
11.11.2009, 20:21
Hab den selbsttest nochmal draufgeladen und da ist mir aufgefallen dass sich der linke Motor auch immer vorwärts drehen will aber wennich ihn ne sekunde festhalt(das Rad)bleibt er stehen. Woran könnte das liegen vlt ein falscher wiederstand?

Ich bin froh über die vielen antworten aber es hat mir bis jetzt leider noch nichts gebracht.

Gruß Chris

Osser
12.11.2009, 09:07
Hi NXTman,

bau den ATMEGA8 mal aus, also aus dem Sockel mit einem Schraubenzieher vorsichtig raushebeln, schalt den Asuro an und schau ob der Motor dann auch dreht.

Wenn ja, dann hast Du beim Löten irgentwo einen Fehler in der H-Brücke gemacht (der Teil mit den vier 3-Beinigen Transistoren T5, T7, T6, T8 ) .
Vielleicht sind die Transistoren vertaucht eingelötet, da T6 und T8 NPN-Transistoren und T5, T7 PNP-Transistoren sind. Bei falschem Einbau kann passieren was Du beschreibst.


Gruss,

O.

NXTman
12.11.2009, 20:48
Hab den Atmega8 Ausgebaut und der motor dreht sich nicht...
was ist nur das problem?

Edit: Ich hab mal mit dem multimeter die pinns von dem IC sockel den durchgang geprüft und da is mir aufgefallen das bei denen die ich mit den Strichen verbunden habe durchgang ist. ist das normal?

Gruß Chris

Osser
13.11.2009, 11:57
Hi NXTman,



da is mir aufgefallen das bei denen die ich mit den Strichen verbunden habe durchgang ist.

Welche Striche meinst Du?


O.

Osser
13.11.2009, 12:07
Hi NXTman,

war gerade nicht eingeloggt und hab das Bild nicht gesehen, deshalb wusste ich nicht was Du mit "Strichen" meinst.

Man lade das DataSheet vom ATMEGA8 und siehe da....

1 - 7 Reset auf VCC
8 - 22 GND auf GND

Reset wird aktiv auf VCC gezogen; VCC o--o VCC ==> Durchgang
GND ist mit GND verbunden; GND o--o GND ==> Durchgang

Ich glaube das hättest Du selbst auch sehen können, oder? ;)


Test:
1) Leg mal PB1(PIN 15) auf VCC(PIN 7), das gibt die H-Brücke frei
2) Leg jetzt auf PD4(PIN 6) oder PD5(PIN 11) VCC, dann sollte der Motor in die eine oder in die andere Richtung loslaufen.

Geht das?

Gruss,

O.

NXTman
13.11.2009, 17:45
@ Osser: Meinst du mit dem multimeter? Wenn ja, dann muss ich leider sagen es gehn nicht.

NXTman
13.11.2009, 20:47
Solte ich mich eher mit Arexx oder mit Conrad (wo ich den Asuro gekauft habe) in Verbindung setzen? Weil ich nämlich kurz vor'm verzweifeln binn weil das s.....Ding nicht geht.

Gruß Christof

Hubert.G
13.11.2009, 20:59
"Osser" Meinte du sollst Drahtbrücken machen.

NXTman
14.11.2009, 09:22
ich hab jetzt ne mail an arexx geschrieben das der asuro nicht funktionieren will! :frown:

Osser
16.11.2009, 12:51
Hi NXTman,

gib nicht gleich auf, Du findest den Fehler schon.
Dran bleiben...

Chin Up!


Gruss,

O.

NXTman
16.11.2009, 21:12
ja man!!!!!!!!!!!!!!! Ich habs :lol: :lol: :lol: :lol: :lol: :oops: :oops: :oops: :D :D :D :D
Die transistoren waren das problem....