PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASURO: Problem bei erster Programmierung



Amaris
16.10.2005, 10:48
Hallo

Ich habe seit ein paar Tagen einen Asuro. Der Selbsttest ergab nur ein kleines Problem mit einem der Taster (K2). Siehe auch dieser Thread:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=13516

Nun habe ich gerade das erste Programm test.hex geflasht. Bei der Übertragung gab es keine Probleme und die Status-LED leuchtete nach der Übertragung tatsächlich grün.

In der Anleitung steht:



War der Vorgang erfolgreich, muss ASURO aus- und erneut eingeschaltet werden, um das
Programm zu starten. Das vor kurzem geschriebene Programm wird ausgeführt und die grüne
LED erstrahlt in hellem Glanz.


Als ich den Asuro jedoch aus- und wieder einschaltete, leuchtete die LED nicht mehr grün sondern orange.

Dann habe ich einfach mal das nächste Programm in der Anleitung ausprobiert. Also:

#include “asuro.h”
int main(void) {
Init();
StatusLED(RED);
while(1);
return 0;
}

Nach dem flashen leuchtet die Status-LED auch tatsächl rot. Aber nach einem Neustart des Roboter leuchtet die Diode wieder orange....wie beim vorherigen Versuch.

Was bedeutet das ? Was soll ich davon halten ?

Amaris
16.10.2005, 11:00
Entwarnung:

Sorry, meine Frage hat sich wohl erledigt.

Das orange Aufleuchten der LED war die Bootphase !

Ich habe folgendes in der Anleitung übersehen:



Schaltet man ASURO ein, leuchtet die Status-LED für ca.
1 Sekunde zweifarbig auf. Dies ist die “Boot-Phase”. ASURO schaut nach, ob der PC neue
Software für ihn bereitstellt. Diese wird gegebenenfalls geladen. Nach Aus- und Wiedereinschalten
wird diese dann gestartet.


Allerdings ist die Anleitung hier nicht ganz korrekt. Bei mir startet das Programm zumindest sofort nach dem Flashen, nicht erst nach dem Neustart.
Allerdings hat mich das orange Aufleuchten der Status-LED in "Panik" versetzt, so daß ich sofort den Roboter wieder ausgeschaltet habe und nicht gesehen habe daß die LED danach tatsächlich korrekt in rot oder grün leuchtet.
Außerdem leuchten bei mir in der Boot-Phase auch die beiden Back-LEDs schwach auf. Das steht so auch nicht in der Anleitung.

Meine Frage hat sich aber wohl erledigt.
Sorry.

Andun
16.10.2005, 12:34
Ja. Ok. :D Als Ergänzung:

Das mit den BackLEDs ist wirklich normal und kommt eigentlich immer vor.

Amaris
16.10.2005, 15:41
Hallo

Ich habe jetzt noch ein Problem.
Wie oben schon gesagt, einer meiner Taster funktioniert nicht ganz korrekt, was mir schon beim anfänglichen Selbsttest aufgefallen ist.

Laut Anleitung:



Die Taster (K1-K6) werden ausgewertet. Diese Funktion liefert ein Byte. In diesem Byte ist die
Information enthalten, welche Taster gedrückt wurden. Dabei setzt Taster 1 das 5. Bit,
Taster 6 das 0.
Bit.
Bit0 ( 1 ) -> K6
Bit1 ( 2 ) -> K5
Bit2 ( 4 ) -> K4
Bit3 ( 8 ) -> K3
Bit4 ( 16 ) -> K2
Bit5 ( 32 ) -> K1


Mein Taster K2 liefert aber irgendeinen anderen Wert. Nur welchen?

Ich bin leider nicht der erfahrenste C-Programmierer.
Ich aber habe schon einiges ausprobiert.

Etwa:



#include "asuro.h"

int main(void)
{
Init();
unsigned char taste;


while(1)
{
taste = PollSwitch();
if ( PollSwitch() == 32 )
{
SerWrite("K1",2);
SerWrite (taste,2);
}
else if ( PollSwitch() == 16 )
{
SerWrite ("K2",2);
SerWrite (taste,2);
}
else if ...............(und so weiter)............


}
return 0;
}


Es soll also die Bezeichnung des Tasters (K1, K2,...) und sein Wert (32, 16,.....) ausgegeben werden.

Drücke ich K1 wird auch K1 auf dem Hyperterminal ausgegeben, allerdings gefolgt von wirren Zeichen, anstatt dem gewünschten Wert.

Drücke ich K2 passiert gar nix......wie gesagt, K2 gibt irgendeinen "falschen" Wert aus. Aber welchen ?????
Wie komme ich an diesen Wert ?

Vogon
16.10.2005, 17:19
Schau doch mal was bei der Taste kommt:


taste = PollSwitch();
PrintInt(taste);


wenn ein dener asuro.lib der PrintInt fehlt:


void PrintInt(int wert)
{ char text[6]=" ";
itoa(wert,text,10);
SerWrite(text,5);
}

Amaris
16.10.2005, 17:31
Hallo

Vielen Dank für die Hilfe.
Allerdings bin ich vor ein paar Minuten selbst auf die Lösung mit der itoa-Funktion gekommen.
Hatte nur noch nicht die Zeit es hier zu posten.

Der Wert von K2 ist nicht 16 sondern 15.

Ich habe sogar eine Vermutung warum. Bei der Montage des Asuro sind mir ein paar Widerstande heruntergefallen. Einen davon habe ich nicht mehr gefunden.....einen 2kΩ-Widerstand.
Nun mußte ich für den R32 einen 2,2kΩ-Widerstand einlöten, da ich keinen anderen auftreiben konnte.
Ich schätze mal daß es daran liegt.

Nochmal danke für die Hilfe.

Gruß,
Amaris

maze2k
16.10.2005, 21:05
Also ich würde den Widerstand auf jeden Fall ersetzen.

Wenn der Taster wirklich 15 zurückliefert, hast du bei etwas komplexeren Kollisionsabfragen Probleme.

Du kannst z.B. nicht entscheiden, ob nur K2 gedrückt wird, oder etwa K3, K4, K2 und K1 zusammen (was zwar etwas unwahrscheinlich, aber nicht unmöglich ist, z.B. wenn du gegen eine Schaumstoffwand fährst *gg*)

Außerdem gibt es dann mit dem berechnen der gedrückten Tasten Probleme, wenn K2 und eine andere Taste gedrückt werden.

Amaris
16.10.2005, 21:35
Ja, da hast du wohl recht.

Ich werde bei Gelegenheit mal einen anderen Widerstand besorgen. Werde irgendwann sowieso mal die Erweiterungsplatine und Ultraschall-Sensor montieren, dann kann ich das auch gleich mitmachen.