PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm und Makefile



willo
25.03.2010, 16:52
Moin,
ich hab ein Programm geschrieben weiß aber nicht ob das richtig ist und wollte nachfragen ob das ok ist?
Dann noch eine Frage, kann ich das makefile aus dem Beispiel von der Cd nehmen, damit ich die hex.Datei bekomme oder brauche ich ein anderes makefile, wenn ja welches? O:)

Programm:

#include "asuro.h"
#define FULL_L 250
#define FULL_R 220
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}
void MotorRwdL(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,0);
}
void MotorRwdR(void)
{
MotorDir(RWD,RWD);
MotorSpeed(0, FULL_R);
}
void MotorStop(void)
{
MotorSpeed(0,0);
}

int main(void)
{
unsigned char t1, t2;

Init();
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if(t1 == 0 && t2 == 0)
{
MotorFwd();
FrontLED(ON);
BackLED(OFF,OFF);
}
else if (t1 && t2 && t1 == t2)
{
MotorStop();
if(t1 & 0x07)
{
MotorRwdL();
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x38)
{
MotorRwdR();
FrontLED(OFF);
BackLED(OFF,ON);
}
Msleep(1000);
}
}
return 0;
}

Valen
26.03.2010, 00:45
Du verwendest die funktion Msleep in deinem program. Also dan verwendest du den erweiterten lib, oder? Oder wölltest du ein beispiel projekt mappe FirstTry von dem (alte) Asuro CD kopieren und bearbeiten, und wüsste du nicht das Msleep kein teil davon ist? Die erweiterte lib hat seine eigene makefiles in jeder beispiel projekt damit es gut funktioniert. Das ist nicht kompatibel mit den Asuro cd. Wenn es nur die alte Asuro-cd project FirstTry mappe betrifft muss dus Sleep verwenden, Aber damit kan man nur 255 als maximales wert eingeben. Das sind dan insgesammt (255/72000) sekunden oder 3.5 milisekunden pro Sleep(255) anruf.

Dein program sieht gut aus. Aber ich bin zu mude (schreibfehler?) das in detail zu beachten. Versuch es einmal zu compilieren. Wen es nicht geht mussen es compilier fehler oder warnungen geben.

Sternthaler
26.03.2010, 02:13
Hallo willo,

Valen hat Recht.

Du kannst aber in deinem Programm das Msleep() auch austauschen gegen Sleep() mit einer Schleife drumherrum.
Dann passt das Makefile von der CD wenn du zusätzlich noch die asuro.h und die asuro.c von der CD mit in das Verzeichnis zu deinem Programm kopierst.

Die Schleife sollte dann so aussehen:
for (i = 0; i < 285; i++) /* 1000ms / 3,5ms pro Sleep = ca. 285 */
Sleep (255);

Gruß Sternthaler
P.S.: Wenn du vor deinen Programmcode noch [ code ] und hinten dran noch [ /code ] schreibst (OHNE die Leerzeichen in den eckigen Klammern), dann sieht das so aus:

for (i = 0; i < 285; i++) /* 1000ms / 3,5ms pro Sleep = ca. 285 */
Sleep (255);

willo
28.03.2010, 13:30
hallo,
schon mal danke für die Hilfe...
Ich benutze die Asuro-cd project FirstTry mappe. Ich habe Msleep() durch Sleep() ersetzt und asuro.c und asuro.h in das Verzeichnis reinkopiert und compiliert. Es erschien kein Fehler. Dann habe ich die hex. Datei auf den Asuro geflasht. Hat auch alles geklappt. Nur als ich den Asuro dann gestartet habe, leuchtete nur die StatusLED rot auf und mehr machte er nicht.
Habt ihr vielleicht eine Idee, woran das liegen könnte?

gruß willo

Valen
28.03.2010, 17:22
Dein program macht nichts mit den StatusLED. Wenn die statusled rot wird bei anschalten mussen die batterien schwach sein. (Den bootloader program in das feste speicher halt ab) Brauchst du aufladbare akkus oder nicht-aufladbare batterien. Wie ist den jumper geschaltet, offen oder eingesteckt? Ist wärend den Selbtest den StatusLED mit die richtige farbe angeschaltet (beim tastertest musste eine bestimmte taster grun machen und ein andere rot), oder sind vielleicht rot und grun gewechselt?

willo
31.03.2010, 17:32
Mein jumper ist offen. Ich hab dort neue Batterien eingelegt und der die StatusLED wurde erst orange und währenddessen leuchteten die beiden hinteren LED's rot auf und dann sind alle lichter ausgegangen und die StatusLED leuchtete wieder rot auf.. beim selbsttest hat alles funktioniert..

gruß willo

Valen
31.03.2010, 18:34
Habst du ein multimeter? Bitte misst den spannung am processor pin ganz vorne neben den kerbe wan es angeschaltet ist. Setzt den minuspol von deine multimeter an einer von den 2 löcher mit den minus-zeichen auf die linker seite von asuro (neben den transistor-brücke auf die IR-led/emphanger seite)

Das ist die batterie test messung pin worauf die bootloader bassieren soll op die batterien stark genug sind. Zu niedrige spannung kan auf einer kurzschluss hinweisen oder swache batterien. Dan soll die statusled rot werden. Wen es stark genug ist muss es grun werden und das program ablaufen(das dann mit den statusled macht was es woll)

Dannach misst bitte auch den spannung an pin 4 und pin7(hintenseite von asuro von kerbe aus bis 4 und 7 zählen, neben den bolzloch). Wieder den minus pol and das minus-loch an den linken seite. Und bitte alle werten melden.

willo
01.04.2010, 19:49
Ja ich hab einen Multimeter nur funktioniert er nicht mehr richtig :D
Ich hab verschiedene batterien ausprobiert und immer gabs das gleiche Problem. Da ich ein freund habe, der auch einen Asuro habe, habe ich mal seine neue Batterien, die bei ihm den Asuro zum laufen bringen bei meinem ausprobiert. Auch bei diesen leuchtete die StatusLED rot auf.

gruß willo

Valen
01.04.2010, 20:55
Doch wurde ich dich advisieren ein funktionierende multimeter zu bekommen. Ohne das kan man mit elektronik nicht viel anfangen. Was Asuro macht in seinen gehirn ist schon sehr unsichtbar. Missen ist Wissen. ;) Naja nicht alles alles naturlich, aber ein bisschen mehr als wir nun nur theoretisieren können.

willo
04.04.2010, 17:04
Ja du hast recht..ich hab mir ein multimeter bestellt.. :D
Mich wundert nur, dass beim selfTest alles funktioniert hat und jetzt bei einem anderen Programm es nicht mehr funktioniert. Das kann doch eigentlich nicht am Programm liegen..

Valen
04.04.2010, 17:36
Ich kann mir nur hardware fehler vorstellen. Irgendwo wackelkontacten, oder kurzschluss durch zusammen gebogen wiederstanden beim festhalten. Oder du habst beim selbtest die statusled rot und grün leuchten gemacht, aber nicht aufgepast welcher taster das gemacht hat. Also doch die led verkehrt herum gelötet. (Wenn du wirklich sicher bist davon, meine verzeihung!)

Wird sie irgendwo heiss vielleicht nach anschalten?

willo
04.04.2010, 18:10
Sowas hab ich mir auch schon überlegt :D aber wenn ich jetzt die Selbstest von asuro wieder auf den asuro flashe, dann funktioniert alles.
Ich hab mich nochmal deswegen versichert. Die Led ist richtig gelötet. kein Problem.
Nein..is alles normal..

Valen
04.04.2010, 18:21
Hmm, bitte poste die letzte version von dein program. Vielleicht ist schon etwat wichtigs geändert.

Etwas anderes. Du erzählt von benutzen von ein FirstTry mappe von den Asuro-cd. Aber dannach habst du die asuro.c und asuro.h reinkopiert! Wieso? Das gibt es doch schon drin!

willo
05.04.2010, 15:18
#include "asuro.h"
#define FULL_L 250
#define FULL_R 220
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}
void MotorRwdL(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,0);
}
void MotorRwdR(void)
{
MotorDir(RWD,RWD);
MotorSpeed(0, FULL_R);
}
void MotorStop(void)
{
MotorSpeed(0,0);
}

int main(void)
{
unsigned char t1, t2;

Init();
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if(t1 == 0 && t2 == 0)
{
MotorFwd();
FrontLED(ON);
BackLED(OFF,OFF);
}
else if (t1 && t2 && t1 == t2)
{
MotorStop();
if(t1 & 0x07)
{
MotorRwdL();
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x38)
{
MotorRwdR();
FrontLED(OFF);
BackLED(OFF,ON);
}
Sleep(255);
}
}
return 0;
}


Das ist das Programm was ich habe.
Diese habe ich ohne asuro.c und asuro.h auf zwei Asuros geflahst und beide funktionieren nicht. Dann muss wohl ein Fehler im Programm sein.
Beim compilieren gab es kein Fehler.
Ich benutze das makefile von der cd.

Valen
05.04.2010, 21:59
Diese habe ich ohne asuro.c und asuro.h auf zwei Asuros geflahst und beide funktionieren nicht. Dann muss wohl ein Fehler im Programm sein.
Beim compilieren gab es kein Fehler.
Ich benutze das makefile von der cd.
Das kann nicht. Ohne die asuro.c und asuro.h dateien in dem projekt mappe, neben den makefile (und geänderte test.c), kann das program nicht compiliert werden. Sonnst wird den compiler zb. nicht wissen was mit PollSwitch gemeint wird. Und das fehlen davon muss ein compilier fehler verursachen.

Bitte erzahle genau, schritt fur schrit wie du das gemacht hat. Welche dateien nun in den projekt mappe stehen. Und den makefile als datei hochladen bei deine nächste bericht. Bitte NICHT das ganze in dein bericht einfugen! Das ist ein viel zu grosse tekst und wird dieses thread nur schmutig machen. Las und das mal selbst runterladen von das forum.

willo
05.04.2010, 22:41
ok..
Ich habe Programmers Notepad 2 geöffnet und mein Programm in ein neues Verzeichnis eingefügt. Und dann habe ich asuro.c und asuro.h kopiert und unter mein Programm eingefügt. Dies dann unter Tools und dem von der cd eingerichteten make compiliert und die hex. Datei habe ich dann auf den Asuro geflasht.

willo
11.04.2010, 23:18
Mach ich dabei irgendwas falsch? ich bin nochmal alles durchgegangen, trotzdem hat es nicht funktioniert....hat jemand einen tipp?

gruß willo

Valen
12.04.2010, 00:35
Versuch mal das letzte Hex Datei bei deinen Freund auf seiner Asuro zu flashen. Wenn die statusled auch Rot leuchtet ist dein Programm irgendwie schief (ich kann aber nichts mangelhaft finden). Wen es auf seiner Asuro Grun leuchtet ist etwas falsch mit deine Asuro elektronic.

willo
12.04.2010, 12:15
Wir haben jetzt das Programm auf die beiden Asuros geflasht und beide StautsLeds leuchten rot auf und das Programm wird nicht abgerufen.
Ich hab das Gefühl, dass ich ein Fehler beim einfügen von asuro.c und asuro.h gemacht habe. Ich habe die beiden Dateien geöffnet und den Text markiert und einfach unter mein Programm eingefügt ohne irgendwas drunter zu schreiben...ist das richtig?

Valen
12.04.2010, 18:49
Nein, das ist nicht die geeignete weg. Bisst du sicher das die Compiler keine Meldungen zurück gegeben hat?

Kopiere die FirstTry Mappe und mach ein neue davon. Ändere die mappe nahm zu etwas was Sinn macht.
Öffne die test.c Datei das drin ist.
Ergänze die Text in test.c mit dein eigene Programm.
Speicher dein Programm (geänderte test.c)
(mache nichts mit asuro.c oder asuro.h, das steht schon gut)
Mit PN2 oder einfach mit Doppel klicken auf den Test-all.bat Datei compiliere das Programm.
Kontrolliere ob den Änderungsdatum und zeit von den hex-Datei erneut ist.
Wen das nicht gelungen ist, versuche mal mit Doppel klicken auf Test-clean.bat die Projektmappe wieder aufzuräumen. Und danach wieder test-all.bat

Wenn du dann eine gute hex-datei bekommen hab, kannst du es versuchen zu flashen.

willo
16.04.2010, 16:57
Der hat bei dem ersten Weg nichts zurückgegeben.

Ich hab das jetzt mal so gemacht wie du geschrieben hast.
ist das richtig das ich mein Programm unter test.c einfach kopier.
Denn ich hab, als ich das compiliert habe 2 errors bekommen. :D

gruß willo

Valen
16.04.2010, 17:31
Ja in den test.c datei alle tekst wegholen und dein ganze program dort in kopieren. Und dannach wieder speichern als test.c

Ok, den welcher fehler? Bitte kopiere die tekst aus das venster und poste das hier. Ohne das können wir nur spekulieren was schief gegangen ist. Wir mussen die meldungen haben.

willo
16.04.2010, 18:03
Ich hab das eben grad noch ausprobiert und hab noch einen Fehler entdeckt und den dann weggenommen und jetzt funktioniert es. Danke.
Ich hab jetzt nur noch ein kleines Problem. Der Asuro fährt vörwärts und wenn er gegen einen Gegenstand fährt, dann fährt er nicht zurück und ändert die richtung, sonder fährt immer weiter gerade aus. Hab ich im Programm da vielleicht was falsche geschrieben?
Gruß Willo

Valen
16.04.2010, 18:08
Du habst das problem schon selbst erledigt aber wurde das nicht schneller gegangen sein wenn du den meldungen hier geposted hattet? Jedes mal frag ich dich darum, aber du machst nichts dammit. Das macht mich ein bisschen ärgerlich.

Ich weiss nicht was du geändert habst an dein program. Also hab ich keine idee was genau da fehlen könnte.

willo
16.04.2010, 18:22
ja das wär wahrscheinlich dann schneller gegangen..tut mir leid..ich bin noch ein anfänger auf diesem gebiet und muss mich da erst mal richtig zurecht finden.
Ich hatte da noch den Sleep fehler, den ich als erstes noch im Programm hatte.
Ich hatte gedacht, dass der Asuro bei dem Programm, sobald er gegen etwas stößt, sofort rückwärts fährt und dabei die richtung ändert und dann wieder gerade aus fährt, bis das nächste Hindernis kommt.