PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem mit erstem eigenen programm



rocketman123
18.09.2007, 19:58
hallo,
ich habe mir vor kurzem den asuro gekauft. hab ihn zusammengebaut. alles kein problem. der selbsttest lief auch ohne größere probleme.
danach wollte ich wie in der anleitung beschrieben mein erstes kleines programm ohne programmierkenntnisse schreiben. (nach dem einschalten muss die rote statusled leuchten. flashen ging ohne probleme.
nur nach dem einschalten leuchtet die led wieder grün. wenn ich andere testprogramme aus dem internet (fertige hex-files) draufflashe funktioniert es ja auch. hab schon alles tausendmal nachkontrolliert aber ich komm da nicht weiter.
vielleicht kann mir von euch jemand weiterhelfen

[-o< [-o<

nixwisser
18.09.2007, 20:32
poste mal deinen geschriebenen Quelltext. Das würde bestimmt helfen.

harry3
18.09.2007, 21:17
Ohne Programmcode kann dir da keiner helfen.

Bist du dir sicher ob das Programm überhaupt kompiliert ist und du somit eine neue hex Datei hast? Schau dir mal das Erstelldatum der hex Datei an.

Ohne Programmierkenntnisse wirst du nicht weit kommen. Schau dir z.B. mal diese Website an, wo man recht flott die Sprache C lernen kann.
http://www.fh-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/cyris/

Dein gewünschtes Programm ist ja im Prinzip nur eine einzige Zeile Code die du hinzufügen musst, sollte in etwa so aussehen:

#include "asuro.h"

int main(void)
{

Init();

StatusLED(RED);


while(1);
return 0;
}

rocketman123
19.09.2007, 17:37
Hallo,
hier ist mein text:

------------------------------------
]#include "asuro.h"

int main(void)
{
Init();

StatusLED(RED);

while(1);
return 0;
}-----------------------------------------
die text.hex datei hat sich auch vom datum her aktualisiert. passt also??
[/scroll]

harry3
19.09.2007, 19:33
Hallo,
hier ist mein text:

------------------------------------
#include "asuro.h"

int main(void)
{
Init();

StatusLED(RED);

while(1);
return 0;
}-----------------------------------------
die text.hex datei hat sich auch vom datum her aktualisiert. passt also??


Probier mal StatusLED(GREEN) statt RED.
Bei mir ist nämlich Rot und Grün vertauscht gewesen, vielleicht ists bei dir ja auch so!

damaltor
19.09.2007, 19:55
ein kleiner tipp noch: wenn du quelltexte postest, dann schreibe bitte vor deinen quelltext




und dahinter



dann wird er in so ein hübsches fenster eingebettet.

chr-mt
19.09.2007, 20:01
besser wäre bei code statt "quote" "code" zu schreiben.
Da gehen die Formatierungen nicht verloren
Sieht dann aus wie bei harry3 's Post.


Gruß
Christopher

Sternthaler
19.09.2007, 23:59
Hallo chr-mt
OT: quote und code ist mir klar. Aber gibt es eine Möglichkeit ohne das 'Käse'-Kästchen vom code, um Formatierungen zu erhalten?
Ich 'male' manchmal so Bildchen á la:
VCC -----*-----===--- GND
| R12
| |
| | R20
| |
|
GND
Die sind dann immer so 'versteckt' im Kasten und manchmal wäre es schön die direkt im Text zu haben. Irgendwo hier im Forum hatte ich mal was von HTML gehört.

Gruß Sternthaler

damaltor
20.09.2007, 10:07
hab mich verklickt.. quote ist natürlich falsch. =)

die formatierungen bleiben nur im code fenster korrekt erhalten, ansonsten werden die leerzeichen leider entfernt. sonst nur mit html-code möglich denk ich mal.

aber die code boxen sind ja gerade dazu da, um große teile kleiner zu machen. wenn man auf die kleinen pfeile über der box klickt, wird diese ja größer.

rocketman123
20.09.2007, 18:59
hallo,
danke für eure antworten aber das mit GREEN hab ich schon ausprobiert. funktioniert auch nicht. kann es sein wenn ich zuvor schon andere compiler installiert habe das diese sich untereinander stören könnten?
??????????????

harry3
20.09.2007, 19:12
Interessant.

Also ich hab immer noch die Vermutung dass du nicht das aktuelle Programm flasht. Andernfalls müsste sich nämlich zumindest _irgendwas_ tun.

Wenn nur die grüne LED leuchtet deutet das drauf hin dass im Asuro ein 'leeres' Programm ist, sprich, es wird nur der bootloader durchlaufen und eventuell noch die Init Funktion, das wars dann aber auch schon.


Flash mal das angehänge Programm, da sollte sich dann was tun bei der StatusLED.
Schau vor allem beim Flashtool ob du im Dateipfad die richtige Datei ausgewählt hast.

damaltor
20.09.2007, 20:09
ja, das kann gut sein, zB scheint delphi u.a. sich damit nicht zu vertragen. mach folgendes:

öffne eine konsole (dosbox unter windows)
wechsle mit cd in das entsprechende verzeichnis, in dem dein quelltext liegt.
mit z.B. nano test.c (unter win: edit test.c) kannst du jetzt kontrollieren ob du wirklich den richtigen quellcode hast.
dann gib nacheinander
make clean
make all
ein. jetzt sollte am ende stehen "Errors: none"
dann kannst du flashen.

rocketman123
25.09.2007, 19:25
hallo,
also ich hab ne neue version von programmers notepad heruntergeladen und jetzt funktioniert alles. \:D/ \:D/
ich hätt noch ne kurze Frage:
wie kann ich ich eigentlich den Motor so programmieren, dass er nur 3s fährt und danach etwas anderes macht.
komm nich ganz klar mit der sleep funktion??
](*,) ](*,) ](*,)

farratt
26.09.2007, 11:52
Hi rocketman123

Du kannst Asuro eine Millisikunde warten lassen, indem du Sleep(72); aufrufst. Wenn du die Funktion 3000mal (mittels einer Schleife) aufrufst, wartet Asuro 3 Sekunden lang.
Alternativ kannst du auch die Funktion Msleep aus der akuellen Lib benutzen. Da gehts dann mit Msleep(3000);
Weitere Möglichkeit (welche ich bevorzuge): Du schreibst dir eine eigene Funktion Msleep(unsigned int time)

Gruß Farratt

fionn
26.09.2007, 12:34
Hallo rocketman123,

Benutzt Du die aktuelle AsuroLib ?
Wenn ja, schau die mal die Funktion Msleep an.
Als Parameter wird die Wartezeit in Millisekunden erwartet.
Also 1 Sekunde = 1000 ms
Wenn du 3 Sekunden warten willst, versuch mal folgendes...


void main (void)
{
Init();
Msleep(3000);
while(1) {
// .....irgendwas anstellen.....
}
return 0;
}


Falls Du die originale asuro.c benutzt, versuch folgendes.


{
int z;
for (z = 0; z < dauer; z++)
Sleep (36);
}

Hab ich kurzerhand aus der AsuroLib kopiert.
Der Parameter "dauer" beinhaltet dann die Anzahl der Wiederholungen,
für 3 Sec wären das dann 3000,

Hiebei ist zu beachten, das die ursprüngliche c-Datei eine Taktfrequenz von 72 kHz benutzt, d.h du mußt die Wartezeit mal 72 nehmen.
1 ms wäre dann Sleep(72).
In der AsuroLib wird, wenn Du diese nutzt, ein Takt von 36 kHz verwendet,
sprich 1 ms = Sleep(36)

Gruss Fionn :wink:

rocketman123
26.09.2007, 18:51
habs ausprobiert in mein Programm einzufügen. dies hab ich in text.c


#include "asuro.h"

/* Um eventuelle Unterschiede zwischen linken und rechtem Motor auszugleichen
* definieren wir 2 Werte für fullspedd links und rechts
*/
#define FULL_L 250 /* Fullspeed linker Motot */
#define FULL_R 220 /* Fullspeed rechter Motor */

/* Motor vorwärts */
void MotorFwd(void)
{
MotorDir(FWD,FWD);
MotorSpeed(FULL_L,FULL_R);
}

/* Motor rückwärts */
void MotorRwd(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,FULL_R);
}

/* Motor rückwärts Links */
void MotorRwdL(void)
{
MotorDir(RWD,RWD);
MotorSpeed(FULL_L,0);
}

/* Motor rückwärts Rechts */
void MotorRwdR(void)
{
MotorDir(RWD,RWD);
MotorSpeed(0, FULL_R);
}

/* Motor stop */
void MotorStop(void)
{
MotorSpeed(0,0);
}

void Msleep(void)
{
int z;
for (z = 0; z < 3000; z++)
Sleep (36);
}

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

Init();
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if(t1 == 0 && t2 == 0) /* keine Taste */
{
MotorFwd(); /* vorwärts fahren */
FrontLED(ON);
BackLED(OFF,OFF);
}
else if (t1 && t2 && t1 == t2)
{
MotorStop();
if(t1 & 0x07) /* Tasten links gedrückt? */
{
MotorRwdL(); /* Rückwärtskurve links fahren */
FrontLED(OFF);
BackLED(ON,OFF);
}
if (t1 & 0x38) /* Tasten rechts gedrückt? */
{
MotorRwdR(); /* Rückwärtskurve rechts fahren */
FrontLED(OFF);
BackLED(OFF,ON);
}
Msleep; /* 1 Sekunde fahren */
}
}
return 0;
}

funktioniert leider nicht. hab auch schon nach msleep einen wert in klammern angefügt. hilft aber nix

damaltor
26.09.2007, 20:27
da fehlt ein semikolon DIREKT hinter der for schleife in der funktionsdeklaration.das ist eine leere schleife, deshalb ohne die klammern {}. dafür ein semikolon

for(.....);

ausserdem musst du die zeile
"int z;" löschen, und die zeile
void Msleep(void)
durch folgendes ersetzen:
void Msleep(int z)

beim aufrufen der funktion nicht einfach Msleep schreiben, sondern
Msleep(Millisekunden);
also z.B.
Msleep(1000);
für eine sekunde.

rocketman123
03.10.2007, 12:56
funktioniert immer noch nicht mit dem zeitabhängigen fahren des asuro.
msleep funktioniert nicht. wo krieg ich die aktuelle AsuroLib her.
[-o<

damaltor
03.10.2007, 18:43
schau mal in den ersten thread (ganz oben bei den ankündigungen...) "die wichtigsten dateien und downloads"