PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro-Fragen über Fragen



Meur
08.07.2007, 17:38
Hi Leute,

kann mir jemand genau erklären wie ich den IR-Receiver genau halten muss um den Asuro zu flashen?
Denn wenn ichs probier kommt immer "Timeout" :cry: !
Beim Hyperterminal funtzt der Receiver aber ;( !
THX für das Beantworten meiner blöden Frage

Bääääär
08.07.2007, 21:15
Ich habe ihn immer etwa 20cm über dem Asuro. Aber das ist eigentlich weniger ausschlaggebend. Versuche einfach mal während des Flashens am Trimmer rumzudrehen. Das war bei mir auch so, der Receiver allein geht, aber flashen nicht. Dreh den Trimmer an einen Anschlag und versuche zu flashen. Dann drehst du ihn immer ganz wenig weiter und versuchst es erneut. Irgendwann wirst du die richtige Stelle finden.

Bääääär

Wildycard58
08.07.2007, 21:57
Sorry für die blöde Frage Meur...aber bei dem Flashprogramm, drückst du da "Program" bevor du den Asuro einschaltest?

ehenkes
08.07.2007, 22:23
Man drückt "Programm" und schaltet dann schnell den ASURO ein, bevor der blaue Balken der Statusanzeige rechts ankommt. Das ist ein "zeitkritisches System". ;-) Schaltet man nicht schnell genug ein, kommt Timeout. 8-[

Sternthaler
09.07.2007, 00:19
Hallo zusammen,
um das von ehenkes angesprochene "zeitkritisches System" etwas zu entschärfen, kann man in der Datei AsuroFl.ini die Zeiten ändern. Ich habe da folgendes eingetragen:

20 #Timeout Connect
5 #Timeout Flash ('t')
20 #MaxTry for flashing

P.S.: Die Datei gehört zum Flashprogramm, und ist da zu finden wo es installiert wurde.

ehenkes
09.07.2007, 00:49
Guter Tipp! Das ist für jeden Anfänger ein merkwürdiger Vorgang, weil man ja bedächtig vorgehen will. Stattdessen muss man sich spurten. ;-)

damaltor
12.07.2007, 10:09
funktionierts denn jetzt??

empfängst du vom asuro den selbsttest komplett und fehlerfrei? antwortet er während dem serial test auch artig mit dem folgenden buchstaben?

Meur
12.07.2007, 16:09
Särs Leutz,

danke für eure Tipps.
Ich habs geschaft zum flashen, indem ich mim Asuro Chip "rumgespielt" habe bis das flashen ging^^
Nur jetzt hab ich ein anderes Problem:
Der Asuro fährt 1 sec un dann isser tod un macht nix(das Prog ist ein Kollsiontest aus dem WWW)!
Wenn ich jetzt den Selbsttest wieder flashe geht der auch nimmer gescheit!
Wisst ihr zufällig an was das liegen könnte?
Hattet ihr auch so ein Problem mal?

@ Mod: Bitte ändere das Thema in "Asuro-Fragen über Fragen" o.ä. was halt aus deiner sicht passt! THX

Meur
12.07.2007, 16:14
funktionierts denn jetzt??

empfängst du vom asuro den selbsttest komplett und fehlerfrei? antwortet er während dem serial test auch artig mit dem folgenden buchstaben?

Eine dumme Frage:
Was ist der Serial test?
Isses der Selftest vom Asuro, den man per IR Transreceiver auf dem PC verfolgen kann?

damaltor
13.07.2007, 16:28
lies nach in der anleitung...

am ende des selbsttests sendet der asuro zum PC

"TTTTTTTTTT"

und wenn man in dieser zeit eine taste auf der tastatur drückt, dann antwortet der asuro mit dem folgenden buchstaben.


"TTTTTTabTTTTTTTqrTTTTTTlmTTT" usw.

aber da das fölashen geht, gehe ich davon aus dass auch das funktioniert.

wenn du zwei beiträge so kurz hintereinander absendest, und noch keiner geantwortet hat, dann benutze bitte den edit knopf oben rechts über deinem beitrag und hänge den text an deinen ersten post an.

zu deinem kollisionstest kann ich nichts sagen, ich kenne den programmcode nciht. bitte poste den code unter verwendung des code-buttons:
1. code-button drücken.
2. den code einfügen
3. den code-button wieder drücken.

dadurch werden die seiten im forum nicht unnötig lang.

den thread-titel kannst du selbst ändern, indem du bei deinem ersten posting im thread auf den edit-knopf klickst.

Meur
13.07.2007, 21:31
zu deinem kollisionstest kann ich nichts sagen, ich kenne den programmcode nciht. bitte poste den code unter verwendung des code-buttons
dadurch werden die seiten im forum nicht unnötig lang.

den thread-titel kannst du selbst ändern, indem du bei deinem ersten posting im thread auf den edit-knopf klickst.

Hier ist mein Code:

#include "asuro.h"

#define FULL_L 250
#define FULL_R 220

/* 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);
}

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(1000); /* 1 Sekunde fahren */
}
}
return 0;
}
Ich hoffe ihr könnt mein Problem lösen!
Kann es auch eventuell am Prozessor liegen?
Kann man den vll nachkaufen?
Ich schätz ich hab den durch elektrostatsiche Aufladung meiner Selbst
"zerstört"! Kann das sein?

ehenkes
13.07.2007, 21:37
Ich schätz ich hab den durch elektrostatsiche Aufladung meiner Selbst
"zerstört"! Kann das sein?Theoretisch ist das möglich, praktisch passiert das zum Glück nicht so oft.


Ich habs geschaft zum flashen, indem ich mim Asuro Chip "rumgespielt" habe bis das flashen ging^^ ich hoffe, Du nimmst den Begriff "flash" (Blitz) nicht zu Ernst? Was hast Du denn hier genau getrieben? "rumgespielt"???

ehenkes
13.07.2007, 21:44
Probiere bitte mal dieses Hallo-Welt-Programm unter Kontakt mit der IR-Übertragung, während die µC-Software läuft, und dem Windows-Programm Hyperterminal:


#include "asuro.h"

int main()
{
Init();

const int DAUER=500;

StatusLED (YELLOW);

while (1)
{
SerWrite("Hallo Welt!\r\n",13);
Msleep(DAUER);
SerWrite("Mein Name ist ASURO!\r\n",22);
Msleep(DAUER);
SerWrite("Ich bin ein mobiler Roboter.\r\n",30);
Msleep(DAUER);
}

while (1);
return 0;
}

Meur
13.07.2007, 22:58
Was hast Du denn hier genau getrieben? "rumgespielt"???
Mein Asurochip saß nicht genau auf dem Sockel und also habe ich ihn so reingesetzt bis er passte und das flashen ging!

radbruch
14.07.2007, 00:18
Hallo Meur

Die Geschwindigkeiten und Drehrichtungen stimmen bei mir zwar nicht, weil mein asuro ein anderes Getriebe hat, aber dein Programm scheint grundsätzlich zu funktionieren:

http://img.youtube.com/vi/EXGhoD8ZccY/default.jpg (http://www.youtube.com/watch?v=EXGhoD8ZccY)
(Bild anklicken für youtube-Video)

Sind vielleicht deine Akkus leer oder haben schlechten Kontakt?

Gruß

mic

ehenkes
14.07.2007, 05:18
Mein Asurochip saß nicht genau auf dem SockelDas ist Grundvoraussetzung, dass der ASURO elektrisch angeschlossen ist. ;-)

Meur
14.07.2007, 10:42
Die Geschwindigkeiten und Drehrichtungen stimmen bei mir zwar nicht, weil mein asuro ein anderes Getriebe hat, aber dein Programm scheint grundsätzlich zu funktionieren:

http://img.youtube.com/vi/EXGhoD8ZccY/default.jpg (http://www.youtube.com/watch?v=EXGhoD8ZccY)
(Bild anklicken für youtube-Video)

Hi danke für eure Hilfe, jetzt klappt das flashen 1a da ich den Chip richtig drin hab!
Nun versuche ich den Kollisiontest in gang zu kriegen!
Als ich ihn starte fährt der Asuro auch munter drauf los, aber wenn er gegen z.B. eine Wand fährt bleibt er stehen(heck LED gehen) und dreht nicht!
An was kann das liegen?
Hier mein Code:

#include "asuro.h"

#define FULL_L 250
#define FULL_R 220

/* 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);
}

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(1000); /* 1 Sekunde fahren */
}
}
return 0;
}

radbruch
14.07.2007, 12:56
Hallo

Nanu, grad ist er doch nur nach rechts gefahren? *kopfkratz* Egal.

Um die Tasten richtig zu nutzen, solltst du dir den (inzwischen editierten O:) ) Artikel darüber im asurowiki (http://www.asurowiki.de/pmwiki/pmwiki.php/Main/Tasten) durchlesen.


wenn er gegen z.B. eine Wand fährt bleibt er stehen(heck LED gehen)
Gehen wohin? Wenn sie ausgehen, sollten die Motoren weiterlaufen, ansonsten sollte zumindest eine BackLED und ein Motor an sein, weil kein BackLED(ON,ON)-Befehl in deinem Programm vorkommt. Beim Stopp würden sie allerdings ausbleiben (hier sollte dann vielleicht ein BackLED(ON,ON) stehen), dann wären wir aber wieder bei einem Tastenproblem. Prüfe mal je Seite nur eine Taste mit (t1 & 1) bzw. (t1 & 32) oder den anderen Einzeltastenwerten.

Und vielleicht noch die andere Abfrage so ändern: (t1 && t2 && (t1 == t2))

(t1 == t2) prüft bitweise, das Ergebniss ist true oder false. Und dieses Ergebniss vergleichst du dann mit t1/2 mit dem logischen &&. Ich weis nicht, ob sich das Ergebniss dann ändert, aber durch die zusätzlichen Klammern kommt der Ausdruck dem näher, was du prüfen willst:

Wenn t1 true (also mindestens ein gesetztes Bit hat und deshalb logisch true ist) und t2 true ist (aus dem selben Grund wie t1) und beide Werte bitweise gleich sind (also selbes Bitmuster haben) und deshalb der Ausdruck (t1==t2) true ist, dann wurde eine Tastenkombination richtig erkannt. Verwirrt? Ich auch.

Die Prüfung des Ausdrucks wird übrigens nach dem ersten erkannten false abgebrochen. Deshalb könnte man die bitweise Überprüfung (t1==t2) zuerst machen und bei unterschiedlichen Werten, von denen aber einer der beiden == 0 ist, würde der Rest danach nicht mehr geprüft werden. Das wirkt sich dann aber erst aus, wenn t2==0 ist, und ich weis nicht, ob das bei einem RISC-Processor zeitmässig überhaupt einen Unterschied macht. Für unsere Programme spielt es sicher keine Rolle.

Viel einfacher wäre vielleicht so: ( (t1==t2) && (t1!=0) )
und weil's ein if else ist, würde dann ein einfaches (t1==t2) an dieser Stelle reichen.
Ich denke, es reicht jetzt wirklich ... *lol*

Möglich wäre noch ein sehr schnelles Umschalten zwischen links und rechts, dass sollte aber wegen dem Msleep(1000); nicht passieren.

Was macht denn dein asuro wenn du ihn in der Hand hälst und jede Taste einzeln drückst? Funktioniert dann alles erwartungsgemäß? Was macht er, wenn du dann mehrere, vor allem linke und rechte Tasten zusammen drückst?

Ich könnte ja auch dein neues Programm auf meinen asuro flashen, aber ich sitze doch eigentlich im Pool. O:)

Gruß

mic

Meur
14.07.2007, 13:14
Also,

jetzt geht mein Asuro ja wieder, da ich den Asuso-Chip richtig in des Sockel gesetzt habe, da er vorher gewackelt hatte was zu Störungen geführt hat.
Nun zu meinem Prog:
Das Prog an sich geht( ein Freund von mir hat auch den Asuro und bei dem gehts alles außer dass er immer nach rechts fährt^^)
Wenn ich meinen Asuro in der hand halte macht er nix besonders außer dass er stehen bleibt wenn ich die Sensoren drücke ;( !!
Wenn ich auf der linken Seite die Sensoren drücke geht die Back LED auf der rechten Seite an (is das normal)?
Danke für eure hilfe

mausi_mick
25.07.2007, 06:30
Hat jemand BMP's / Jpeg's von radsensoren / Encoderscheiben mit 8 oder mehr Segmenten (Odometriescheiben ?).

radbruch
25.07.2007, 07:46
Hallo

Vorlagen für Encoderscheiben gibt's u.a im Startbeitrag dieses Threads:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=27081

Oder du färbst meine Scheiben schwarz/weis ein:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=32143

Eigene Vorlagen kann man elegant als Tortendiagramm mit einem Office-Programm erstellen.

Gruß

mic

jzd
03.08.2007, 10:53
Moin,
ich hab so ein ähnliches Problem mit dem flashen.
Beim Übertragen des Programmes werden ständig checksum error
ausgegeben. Das Übertragen der Programme ist daher so gut
wie nicht möglich. Um es doch hinzubekommen muss ich den IR-Sender
immer in eine ganz bestimmte Position zum ASURO bringen.
(Extrem schwierig und meist ohne Erfolg :-s )
Das Flashprogramm sendet die Daten ja als einzelne "Pages".
Sollte es mal die ersten 3, 4 geschafft haben, dann läuft der flash ohne Probleme weiter. Da jedoch hinzukommen, ist wie gesagt fast nicht möglich.
Hatte schonmal jemand das Problem?
Kann mir jemand helfen?

Ich muss dazu sagen, dass ich den ASURO erst gestern zusammengebaut habe :-)
und nocht nicht viel Erfahren(oder so gut wie gar keine) in Sachen Robotik habe.
Danke aber schonmal für Antworten!!!

damaltor
03.08.2007, 16:40
du solltest verschiedene konstellationen testen:

wenn du leuchtstoffröhren oder energiesparlampen in deinem zimmer hast - ausmachen. einige bildschirme scheinen zu stören. mal alles abdunkeln, mal viel sonnenlicht reinlassen (wir hatten schon einen transceiver, der nur auf der sonnenterase ging...), mal nur eine kleine schreibtischlampe anlassen... manchmal wirkt eine klorolle als lichtschirm auch ganz gut,

jzd
03.08.2007, 18:25
danke!!!
mitlerweile hab ich es mehr oder weniger anders hinbekommen.
#MaxTry for flashing hab ich auf 100 gesetzt, und dann den sender neben ASURO gelegt. die dateiübertragung geht dann immer, aber mal nach dem 69. und mal nach dem 1. versuch. 8-[
normal kann das doch nicht sein, oder?

damaltor
03.08.2007, 19:02
naja... glückssache... =)

NATHAN
12.08.2007, 14:56
Hallo

@Meur

Ich wuerde mir nicht so viele Gendanken ueber diesen einen Code machen. Wie auch radbruch schon festgestellt hat, wurde der eigentlich simple Code mit Funktionsdefinitionen und komeischen Bedingungen unoetig verkompliziert.
Einiges ist meiner Meinung nach nicht richtig programmiert worden:

Bei den if-Abfragen im Kollisionsfall werden naemlich zum Ueberpruefen folgende Ausdruecke verwendet:

if (t1 & 0x07)
if (t1 & 0x38)

Dabei ist das & kein Vergleich sondern eine logische UND-Verknuepfung. Das Ergebniss wird dabei eins, wenn alle Bedingung eins sind. Verknuepft man Zahlen wie z.B. 17 und 13 oder beliebige andere mit Ausnahme von Null, dann erhaelt man immer eine eins. Also ist die Bedingung immer wahr (t1 hat ja im Kollisionsfall immer einen Wert).

Das erklaert auch, warum der Asuro deines Freundes immer nach rechts faehrt. Die erste Bedingung wird ganz kurz ausgefuehrt, dann kommt schon die zweite. Die ist ebenfalls wahr und wird dadurch auch ausgefuehrt. Danach fuehrt er noch den letzten Befehl fuer die Motoren (rueckaerts rechts fahren) aus, bis Msleep vollendet ist.

Warum deiner dabei jedoch anders reagiert weis ich jetzt nicht zu erklaeren.
Verwendet ihr beide die gleiche lib-Version?? Msleep ist naemlich in der beim Kauf mitgelieferten Library noch gar nicht vorhanden. Das koennte dann naemlich erklaeren, warum er bei dir stehen bleibt. Ohne die Msleep Wartezeit sind, wie radbruch schon gesagt hat, die Intervalle, in denen die Motoren ihre Befehle kriegen, zu kurz.

Ich wuerde dir raten eine anderes Kollisionsprogramm auszuprobieren.

harry3
12.08.2007, 20:30
danke!!!
mitlerweile hab ich es mehr oder weniger anders hinbekommen.
#MaxTry for flashing hab ich auf 100 gesetzt, und dann den sender neben ASURO gelegt. die dateiübertragung geht dann immer, aber mal nach dem 69. und mal nach dem 1. versuch. 8-[
normal kann das doch nicht sein, oder?

Spiel dich mit dem Trimmer am IR Sender. Mit dem kann man die IR Übertragung enorm verbessern!

Der Selbsttest ist etwas mit Vorsicht zu genießen, am besten du schreibst dir deinen eigenen Selbsttest(und lernst damit gleich was über die Asuro Programmierung).

Sternthaler
13.08.2007, 00:49
Hallo


if (t1 & 0x07)
if (t1 & 0x38)

Dabei ist das & kein Vergleich sondern eine logische UND-Verknuepfung. Das Ergebniss wird dabei eins, wenn alle Bedingung eins sind. Verknuepft man Zahlen wie z.B. 17 und 13 oder beliebige andere mit Ausnahme von Null, dann erhaelt man immer eine eins. Also ist die Bedingung immer wahr (t1 hat ja im Kollisionsfall immer einen Wert).

Hallo NATHAN, ich muss ein bisschen korrigieren.
Das & ist zwar tatsächlich kein Vergleich, aber es verknüpft in C jedes einzelne Bit einer Variablen. Nur das && ist ein logisches UND mit den jeweiligen logischen Gesamtwerten der zu vergleichenden Variablen.

Hier mal als duales Bitmuster:
0x07 ensprechen [00]000111
0x38 ensprechen [00]111000
Die in Klammern gesetzten 0-en existieren nicht als Taster. Die anderen 0-en und 1-en stellen somit die 6 Taster vom Asuro dar, und die 0x-er Werte wurde so gewählt, dass entweder die 3 linken oder eben die 3 rechten Taster 'maskiert' werden können.

Drückt man auf der linken Seite einen Taster, kommt z.B. folgendes raus
[00]010000
&
[00]000111
--------------
[00]000000 <-- Dieses Ergebniss ist in der Abfrage aber FALSE. Egal welche der 3 linken Tasten gedrückt wurde.

Die gleiche Taste nun mit 0x37 verglichen ergibt:
[00]010000
&
[00]111000
-------------
[00]010000 <-- Dies ist TRUE als Ergebniss.

Somit liegt es (zum Glück) doch am Taster, welcher Programmteil durchlaufen wird.


Verwendet ihr beide die gleiche lib-Version?? Msleep ist naemlich in der beim Kauf mitgelieferten Library noch gar nicht vorhanden.Wenn Msleep nicht vom Linker gefunden würde, würde keine hex-Datei zum Schluß rauskommen.

@Meur
Im Übrigen:
Das Programm vom 14.07.2007, 10:42 funktioniert hervorragend. (Auf meinem Asuro)

Jetzt bleiben doch wirklich nur noch die Tasten bzw. die Umrechnung in PollSwitch() übrig, wie radbruch schon vermutete.
Ich habe in diesem Thread (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=31073) ein Programm gepostest, mit dem, unter anderem, der beste Wert für den Umrechenfaktor in der PollSwitch()-Funktion ermitteln werden kann. (Test 1 liefert den Wert.)